...just another vision... Studios Return to Challenge Games

I was originally going to do a guide to ROM Hacking, but I've decided that, since this site is hosted by a ROM-hacking group, there are enough hacking tutorials out there. So, instead I've decided to give you all a little introduction to the "other" side of emulation: NES Development.

If you want to become an NES Developer, here are some things I highly recommend you know before attempting this:
1) Knowledge of the Hexadecimal number system is critical. You don't have to be proficient at it; as long as you can perform simple Hex arithmetic (eg., $100 / 2 = $80, not $50), you'll be OK.
2) I recommend a good deal of ROM Hacking experience (at least up to Pointer hacking) for knowledge of how a game stores data.
3) If you've had previous programming experience (even QuickBASIC), you'll have a head start in this, but be aware that 6502 Assembly is much different than Basic or C.
4) Don't think you're gonna read this guide and start churning out commercial-quality games. The most you're ever likely to get is making demos or simple games. However, if you take this seriously, stick with it and you'll get better over time.
5) And finally, you need patience. ROM Hacking is nothing compared to NES development, to test your patience. Trust me.

You will need a couple of tools in order to create ROMs. First and foremost, you'll need an Assembler. This is the program that takes the code and generates the "binary" (the actual ROM data). This is as basic to NES Development as a car is to auto racing. You'll also want Tile Layer for graphics. Get the DOS version! If you get the "Pro" version, don't get v1.1, since it has some "features" which will only be a hassle for messing with .CHR files.

You can get Tile Layer from Zophar's Domain. You can find a number of assemblers at NESDEV; there are also a lot of tutorials and technical documents there.

There are a lot of Assemblers to choose from. I personally use NESASM v2.0. It is an NES-specific 6502 assembler, and includes features to automatically setup the iNES ROM header and include binary files (such as the .CHR file(s)), which makes assembly a one-step process (run the source through NESASM and it will generate the complete, ready-to-go ROM, as opposed to assembling the code and manually creating and attaching the header and .CHR file(s)), which will make the transition into NES Assembly a less daunting task than it already is. It is avaliable at the NESDEV site (look for the "Magic Kit", which contains NESASM as well as a similar assembler for the TurboGrafx-16 (which I don't use); in the NES directory of the archive, it includes a sample demo ROM and it's source code).

I highly recommend downloading the various pages and images of this site for offline reference. You should make a new directory on your hard drive for them (or put them in an existing directory - such as your NES directory - if there are no filename conflicts). Here are the files to get; for each, right-click on them and select "save target as...": Alternately, just download this, which contains all the above files in one .zip archive.

The images at the top of this (and each subsequent) page(s) will then no longer work, but that's not important.
Before I introduce the basics of the 6502 Assembly language (the programming language you will be using), I will give a glossary of terms. There's a lot here, so you should probably just skim through it and refer to it later as needed:
As stated earlier, there's no need to memorize all of these ("Now you tell me!"). Just glance over them and refer to them as needed later; you'll memorize this stuff as you go along anyway.
Now, before you can mingle with the natives, you'll need to learn the language. Then, you'll want to know your way around. You may also want to learn some slang so as to sound more natural.
At this point, all that's left is getting better at actually doing it. The first step is to make your first demo! After that, you're on your own, hotshot. Drop by the NESDEV message boards every week or so (that's about how often anybody posts there) if you need help on something. The guys there are very tolerant of newbies (let's face it: we all were newbies at some point), so don't be afraid to drop in. I check it every time I do my usual rounds on the 'net (once or twice a day) so I can help you out too.
If you have anything to add, e-mail me and I'll add it.
Return to ...just another vision... Studios