Now, several decades later, the resources are available for the common person to create their own game. Modern video games require teams of programmers who remain virtually nameless, yet the people who choose to program for these early retro systems (Coleco, Atari, NES) can control ALL aspects of their game including plot, characters, graphics and all of the other things that go into a game. You can create an entire game by yourself. This instructable won't show you everything you need to know, but rather give you a set of resources you can use to make your own game.
A word of warning: I spent two years of my life trying to teach myself to program well enough in Assembly to make this work. Yes, the majority of games are programmed in Assembly, however there is the possibility of also programming in Basic (if you are interested, google search for batariBasic). I had no real programming experience, and while I could hack code and pretty well understand other people's code, I never was able to write my own code from scratch. You need to evaluate whether you're serious enough to see this through before you begin.
Step 1: Really, Really Assess if you are Capable of Pulling This Off
The most common mistake for newbie Atari programmers is announcing exactly what their game will be, when it will be released, and then not understanding why the retro-gaming community mocks them. It's really a miscommunication on both ends. The community has heard it before, they've seen games announced, some even have demos, and yet they never see the light of day and the author disappears. They've become a little jaded to new game announcements from new programmers, and rightly so. Most new programmers are ignorant of this and are so excited and motivated by their new-found hobby that they become a little over-zealous in their announcements. They are then frustrated and annoyed by the response they get.
I'm not trying to scare you off. I just feel it's important that you understand what you're up against before you begin. If you think you're up to the task (or just interested in the process) then please read on. I ran across this page, which does an excellent job of breaking down the tasks you face: http://www.kuro5hin.org/story/2001/9/15/211737/858
Step 2: Find a Retro-Gaming Community to Help You
The second community to mention is Digital Press http://www.digitpress.com. You will find a lot of information on old games here, but they don't just specialize in old games. You'll also run across information about all the newest consoles. I also joined this website in the midst of my Atari wanna-be programmer phase, but don't think it's quite as useful as the first.
The last community is a little unique in a few ways. The way I understand it, they don't have an "official" website, but have been hosted in several places. The Stella Mailing List http://www.biglist.com/lists/stella/ has searchable archives and I believe it dates back to the mid-90s. I don't think they still update the information, but in the past it would contain answers to fairly detailed questions from the community itself. You can still search through the archives and find a lot of the answers you need to difficult questions.
For the purposes of this instructable, I will pretty much reference the community from AtariAge. They also cross over to the other two sites, and vice versa, but AtariAge seems to be the most personable and the most helpful of the three for beginners (imho).
Step 3: Gather the Needed Tools
First and foremost, you will need a text editor. For PC users, you likely already have this, I always just used Notepad when I was working on code. Two excellent text editors for the Mac include TextWrangler http://www.barebones.com/products/TextWrangler/ which is free, and TextMatehttp://www.macromates.com. TextEdit will work, but if you're going to do serious programming, TextWrangler and TextMate are much better.
Second, you'll need an assembler to convert the source code into a usable ROM. For Atari programming, there is only one real option, and that is a program called DASM. It has passed from caretaker to caretaker over the years and isn't always the easiest thing to track down. As of writing this instructable I tracked down what seems to be the current home of DASM here http://dasm-dillon.sourceforge.net/.
Next, is the emulator. Emulation of NES, SNES, Playstation and other systems has become a pretty big deal over the years, although the craze seems to have died down to some extent. Atari is no exception, and there are two emulators which seem to be worthy of the Atari programming community. The first is Z26 http://www.whimsey.com/z26/and Andrew suggests this is possibly the best solution for Windows users, yet he suggests using Stella http://sourceforge.net/projects/stella/ for users of other operating systems. I found z26 was able to perform all the tasks I asked of it, and can't recommend it enough.
The Stella Programmer's Guide is essential and will answer many of your questions. The 57 page .pdf file can be downloaded here: http://www.atarihq.com/danb/files/stella.pdf
Finally, my own suggestion is to start looking for hardware capable of downloading your ROM and plugging into your tv. There are a few options available including the Supercharger, Cuttle Cart, and the hardware I was able to get ahold of, the Krokodile Cartridge. While functional, the Supercharger is slightly less flexible than the other two options. None of these are currently being produced, and you may have to spend 150-300 bucks to get ahold of one of them. If you start looking now, you may be able to find a better deal before you actually need to use it.
While you technically don't have to ever play it on your tv (you can test in emulators) it's a lot more fun than playing your game on a keyboard and computer monitor. An alternative to the mentioned hardware is to get a socketed development board and then use an EPROM programmer and eraser to program an actual board for your 2600. You can either hack existing boards or just buy new ones. More information on these can be found at AtariAge.
Step 4: Go Through 6507 Tutorials
Programming for Atari is actually done for the 6507 microprocessor, however as I think you learn from the linked tutorials, this is really just a stripped down version of the 6502. So, if you've taken the time to learn Assembly, chances are you are probably ready to convert that knowledge to Atari coding. There are only a few minor differences, and the different tutorials will point these out to you. From my understanding, a couple of these unsupported commands even appear to be functional. Of course, that doesn't mean you would want to program them in, but the point is the differences are minimal.
Step 5: Hacking Games
You don't even need a ton of programming experience to hack games. While the old fashioned way of disassembling and changing values certainly works, there are a few programs around that let you scroll through the bits. If you look carefully you can often find the sprites in the bits, and alter those values so you are actually changing how the games looks. Two such programs I am aware of are HackoMatic (version 2 & 3) and Bithacker. Unfortunetely, both original hosting sites seem to be down, but you can still find downloads available lurking in different atari forums. In general these tools don't allow color changes unless you knew the bits you're looking for or really have a lot of free time to try and find random bits. For example, bithacker will show you the PacMan sprites (remember there are more than one) and you could alter them into an animated robot. Besides sprite shape, playfield and background colors are often easy changes to make without a ton of programming knowledge. More on that in the next step, but the more you play, the more you learn!
Here is a quick look at bithacker in action. If you look at the first image, you can see the Activision logo upside down and split up into groups of eight pixels. Simply by re-arranging the bits that are on/off if these section I can make the game read "RoboTHacK" as you will see in the second image. Unfortunetely in the emulator I use, screen shots don't work so I can only show you a mockup of what the hack would look like.
Step 6: Design Your Game
2.) Sprite 0
3.) Sprite 1
4.) Missile 0
5.) Missile 1
Advanced programming will allow you to exploit the characteristics of each of these elements. For example, the flashing ghosts on PacMan allow the same sprites to be repeated and show up in multiple places on the screen, creating more characters. This will be explained in far better detail in the tutorials, but here are the basics.
Playfield- stored in 3 registers, with 4,8, and 8 pixels available in each. This will draw half the screen from left to right, then the screen can be repeated or mirrored. You can also re-write to the registers after drawing the first half to create a screen that is different all the way across. Basically you have 40 pixels across the screen. These could be changed on each scanline, but are normally coded in blocks of about 8 scanlines to save memory. The playfield in my exampled is mirrored, meaning the right half of the screens reflects, not repeats, the left half.
Sprites- For ease of explanation sprites are limited to 8 pixels wide. There are techniques of combining two sprites to act like one and even repeat them horizontally to get up to 48 (I believe) pixels across. For a beginner, just getting a simple sprite on the screen will be quite a task. The hard limit to sprite height is the entire screen, up to 192 pixels in NTSC systems. However, you have to keep in mind a character that takes up the entire screen is hard to design a game around. This is where design and creativity in keeping sprites smaller while still conveying the idea comes across. For reference the Robot design is 8x22 pixels shown here, while PacMan is 8x8. Sometimes you have to decide between size and more detail.
Missiles- There are also two built in missiles. These are normally used as straight lines or dots. This is what is shot in the game combat. These (I believe offhand) are what would be used as lasers in games like Space Invaders or Vanguard. They can also serve as design elements (the rails in Pole Position). You are only limited by your imagination, and of course the severe limitations of the 2600. The missile colors are often matched to the sprite of the same number.
Ball- Really, the ball is just like the missiles are far as I can tell. The only real difference I can tell is that the ball matches the color of the playfield. Designers of the game Adventure exploited this to actually make the ball the main character, which is why it shows up as a block instead of with more detail.
Step 7: Write Your Code
There is another option besides assembly editing that I only mentioned in passing up to this point. It is batariBasic, which takes pre-existing kernels and allows you to modify them with code written in Basic instead of assembly. It then takes this new code, and transforms it into a playable binary file. But, since this is the stage where I am the least amount of help, wander over to cNet and watch this five minute video I ran across that's about halfway down the page and talks about how some of the games have been made.
Below is a small sample of some code I have in my collection. Offhand, I think it was something I was working on given the filename, but can't say with certainty I wrote or if I even modified this code in any way from something I found online. As you can see, Notepad is my text editor of choice for code.
Step 8: Publishing with a Green Twist
Anyway, back on topic- you can do this yourself, but there are several people online who offer to do these services as well, for all types of old game consoles. It's my belief that most if not all of these people are pretty dedicated to the retro-gaming experience and do a top-notch service for you. AtariAge in particular not only puts the game in a new case for you, they also create labels for the games (unless you want to make your own label), as well as instruction manuals and even a box in one case. They are also where I got the idea of re-using old cartridges instead of throwing away old duplicates or selling them on ebay for less than the postage of mailing them out. For more information on their publishing services, take a look at their homebrewing services page. http://www.atariage.com/store/index.php?main_page=homebrews.
Step 9: Wrapping Up the Details
Also, one other thing I would like to encourage you to do is to share your code with the community. While this does mean that people can use it to make a ROM for themselves of your game, the community still does a pretty good job of supporting homebrew authors through game sales too. Some people won't buy the game without playing the ROM anyway. Of course this is your personal decision, some people feel that creating a game for the community is enough reward for them. This has been instructable numero six, please vote for me if you enjoyed it!