What you need
What you need
This is what you will need to program an NES gameā¦
An assembler (or compiler)
A tile editor
Photoshop or GIMP (or similar)
A text editor, like Notepad++
A good NES emulator
A tile arranging program
python 3 (optional, but I use it)
a music tracker
6502 Assembler
For my examples I will exclusively work with cc65. It is part of a suite of software, and is one of the best compiler/assembler programs available for 6502 (i.e. NES) programming. Although, the learning curve is a bit steep, I will help get you started.
(Click on Windows snapshot)
NOTE: the version that I use is V2.15 (type
cc65 --versionin command line to see your version). Files from different versions of cc65 can sometimes give error messages (especially much older versions of cc65 may not compile).
Tile Editor
You need a tile editor to create the graphics. I personally prefer YY-CHR. You can get it hereā¦(this is the updated and improved version).
I prefer to work first in GIMP/Photoshop, convert to indexed (4 color), then copy/paste over to YY-CHR later. You should be working in the 2bpp NES format (the default).
Here is a link where you can download GIMP.
https://www.gimp.org/downloads/
Text Editor
Notepad++ is a tool for writing programming code. You could use any text editor, if you like. Notepad++ is available hereā¦
https://notepad-plus-plus.org/download/
The great thing about Notepad++ is you can set it to highlight your code, which makes it easier to read. And it has the line # on the left. If you get error messages while compiling, it will tell you the line of the error. If you double-click on a word, it will highlight every instance of that word. It has a find-and-replace feature which I use a lot, also find-in-file to search an entire folderās files for a word.

Or, Iāve heard of people using VSCode to write their C code. It is a bit more advanced, and can do syntax error checking and code completion, which notepad++ canāt do.
NES Emulator
And, next is an NES emulator. I use FCEUX 90% of the time because it has excellent debugging tools, PPU viewer, Nametable viewer, Hex Editor, etc. However, it is not the most accurate emulator. You may wish to test your game on multiple emulators, to assure that other people will be able to play your game without issues. (Iāve used Nintendulator, Nestopia, and Mesen). Actually, Mesen is probably better than FCEUX now (it definitely has more debugging tools). Get that too.
FCEUX is hereā¦
http://www.fceux.com/web/download.html
Mesen is hereā¦
https://www.mesen.ca/#Downloads
* hereās where you can get a custom palette ā FirebrandX has been working on making a better NES palette. Whatās wrong with FCEUXās default palette? Too bright and too saturated ā not accurate to what it would look like on an actual NES. (FCEUX / Config / Palette / Load Palette).
http://www.firebrandx.com/nespalette.html
I donāt see the exact palette I mentioned anymore, but I think it was this oneā¦
http://dl.dropboxusercontent.com/s/y3yeaqc87dnhqel/FBX-NES-Unsaturated.pal
You will probably want to change the pixel display to display every pixel. Iāve seen people say āthe NES is 256Ć224 pixelsā, but that is not true. Older TVs tended to cut off a few pixels from the top/bottom of the picture, but the NES generates a full 240 pixels high. One of my TVs displays nearly the entire 240 pixels. You should assume that some users will see the entire picture, so in FCEUX go to Config/Video/Drawing Area, and set the output to the full 0 to 239.
Tile Arranger
Then, we need a tile arranging program. We can make a game without it, but it will definitely be helpful. Since we are working on an NES game, I highly recommend, NES Screen Tool. It shows the NES color limitations very well, and is good for making single screen games. It also gives you nametable addresses and attribute table addresses, which comes in handy. I use 2.3, and if you have an older version, it wonāt open the .nss files in my source code. Get it hereā¦
https://shiru.untergrund.net/software.shtml
And, if you are making a scrolling game, I would also pick up Tiled map editor. I will go into more detail later, but you can make a data array out of the exported .csv files from Tiled.
Now that thatās doneā¦how do these things work?
Photoshop ā to prepare files to go to YY-CHR. First, resize to some reasonable NES size, here Iām using 128 x 128 pixels (use nearest neighbor for resizing). Then reduce to 4 colors, by Image/Mode/Indexedā¦Palette:Custom, reduce to 4 colors. (I made a custom 4 color swatch set, that can be loaded here.) You may have to touch up the image with the pencil tool. Cut and paste into YY-CHR.

YY-CHR ā make sure itās set on 2bpp (NES). You may have to use the color replacement tool, in YY-CHR, if it got the color indexing wrongā¦

It doesnāt matter what palette settings you give it here. YY-CHR can show you various color options, but doesnāt save the palette. You will have to program the palette into your game.
You can load the chr file into NES Screen Tool, and create backgrounds, palettes, and sprites using just this tool, in a format that cc65 can understand and neslib can use. The newest version of NES Screen Tool can also import graphics (BMP indexed 16 color) as a tileset, or import it as a nametable (auto generates tiles). Kasumi has explained this process better than I could, hereā¦
http://nesmakers.com/viewtopic.php?t=189
Python
One more thing. I have been writing simple python 3 scripts to process some of the data into C arrays. You donāt need to, but it might be helpful if you installed python 3, to use my tutorial files. I just use simple scripts for āautomating the boring stuffā.
https://www.python.org/downloads/
Music Tracker
I donāt want to go into too much detail yet, but you will also need to get Famitracker for making music and/or sound effects for your game.
http://famitracker.com/downloads.php
Next Timeā¦
cc65 ā will take some explainingā¦next time.
Last updated