It's the console that stood the test of time longer than any other... the Atari 2600 VCS! From Warlords, Pole Position, Donkey Kong, Space Invaders, and even the infamous Pac-Man, the classics from the 70's, 80's, and on into the 90's are still as playable today as when they were released. The characters created still permeate pop-culture and are among the most unique of all video games.

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

So, I know I warned you in the introduction, but it needs to be said again. If you don't have any programming knowledge, Assembly is not the language to start with. If you have programming experience, Assembly is not an easy program to work in. If you learn Assembly, the Atari is particularly difficult to program for.

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

There are a few retro-gaming communities around the ole webosphere that you'll run across. The first one that I ran into, and the one that I consider the best is AtariAge http://www.atariage.com. You'll find all kinds of goodness there including game reviews, ROMs, high score clubs, a marketplace, and more including what we're looking for: information on programming for the VCS (and other retro game system coding).

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

There are really 5 "tools" you will need to have on hand in order to put a game together. The first four are from Andrew Davie's 2600 tutorials available at AtariAge.

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

With all of the resources available for beginners it can be a little overwhelming to know where to begin. Andrew Davie, an AtariAge member has written a number of "instructables" of sorts on beginner programming for the 2600. Another member with the handle of Kisrael put these tutorials together in a nice little sticky note linking to each of the lessons. Here is the Table of Contents: http://www.atariage.com/forums/index.php?showtopic=33233

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

Now that you've gone through some tutorials, my opinion is the best way to learn is to start hacking games. There are some of the original games that have been reverse-engineered so you can see what a complete game looks like. In addition, several other homebrew authors have published the code from their completed games. This is generally for learning purposes- you can play around with hacking homebrew games, but it bad form to post your hacks since the author was nice enough to share it with you in the first place.

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

Now we're getting to the fun part- game design. Granted, the elements you are going to be given are very limited, but that's where creativity comes into the picture. There are six built-in elements that will be used to create everything on your screen:

1.) Playfield
2.) Sprite 0
3.) Sprite 1
4.) Missile 0
5.) Missile 1
6.) Ball

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

Now to the fun, and the work. There is no simple way to do this, but if you want to create your own game, you have to code the kernel. Creating the logic is by far the most fun and most frustrating part of creating your game. Think of it like learning to play golf. If you have ever tried to learn, you've probably felt the same frustration at times that you will trying to code your game.

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

If you've actually made it this far, it's all downhill from here. You can get new boards available from http://www.pixelspast.com/. Once you have your board complete, you then need a casing to put the game in. We all know the old adage for being green- reduce, re-use, recycle. So, if you're just making a couple of copies for yourself, then I suggest "reusing" by simply taking a cartridge you have multiple copies of, removing the labels, taking it apart, and placing the new board in the old casing. Since there are no other real raw materials the only other way to introduce a green element would be with the computer itself. Despite my distate for all things Apple/Mac (comments welcome, but no flame wars please) part of their new campaign is the green-ness of their new line of notebooks, so I suppose you could go that route as well.

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

Once you create and publish a game, you will have reached a certain cult status among the retro-gaming community. There are a few places around the interwebs where you can sell your games and such. If you've taken the time to learn Assembly and code one game, you've done the hard part, so have fun with it! It's time to get started on your second project, since you've no doubt had a ton of ideas since you started coding.

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!
 This Instructable has inspired me to program an Atari 2600 game as my third year project wich is a huge part of my grade. Lovely guide!
Did you ever happen to work on this project? I wasn't sure if fall semester would be year three for you or not. If you make anything, I would love to see it!
Absolutely! I'm working on a Snake clone at the moment because I don't think I could handle anything more complex right now. I have not been updating my journal ofter at all, but today is my last school day which means the project period at my school has startet, so updates will come often. You can find the journal here:<br><br>http://programmingatari.wordpress.com/<br><br>Remember that it's for school, so I write perhaps a bit more than necessary since my project mentor isn't very tech savvy at all.
<p>This is incredible.</p><p>Do you think that it could be possible to 3d-print the cartridge enclosures ?</p>
<p>I wouldn't think it would be too hard, there's not really anything special about them. Lately, I've been looking at building an aluminum forge and molding techniques. It might be kind of interesting having an aluminum casing, although it would have to be combined with plastic so it wouldn't conduct electricity onto the board.</p>
<p>The difficulty should be to add the connector protection... You know, the plastic part that translate to unprotect the connectors.</p><p>But it can work without of course !!</p>
<p>Looks like someone has done it now - http://atariage.com/forums/topic/257455-3d-printed-2600-cart-shell/</p>
<p>how do you get the consle?</p>
<p>I would start with ebay, as they haven't sold in retail since the 90s.</p>
<p>The Atari Flashback (version 1) was designed and built with the ability to add a game cartridge slot and if you modify one with a cartridge slot, it can play all the old 2600 game cartridges.</p>
Is it possible to make something like attack on titan
<p>I'm not familiar with that, but many games/ideas have been ported, you just have to work within the limitations of the system. For example, one guy created a 2600 version of Halo, though it obviously only somewhat resembles the modern version.</p>
This is very interesting. I don't think I'll go to the trouble to actually do it, but I didn't know there was a whole hobby, tool set and community based around making retro arcade cartridges.
The boards link is not working.
Thanks... but this was published three years ago. Perhaps the board company is no longer in business or has moved in that time. If I get some time I'll try to find them or another board provider to put in place of them.
Dude i wish i could do that but i dont have an atari 2600 i would make FFVII for this, is there any way to do this on a Atari Flashback 2?
Don't let not having a 2600 stop you... the software emulators for the 2600 are very accurate, and can be used to develop and test games.
is it possible to write NES games onto atari carts? i can't find my dad's old NES, only the atari.
No, but if you have a ROM burner, you can put them on NES cartridges that match the type of cartridge used for that particular game. There are services around the web that will also do this for you for a fee. One of the reasons I know people do this is to update NES Tecmo Super Bowl rosters from time to time.
let me rephrase; i want to play NES games on an Atari system. not Atari games on a NES system.
Several things make what you ask impossible. A NES supports far more memory and processing power than the older Atari, but even if you have a very &quot;simple&quot; NES game it still could never work due to incompatabilities.<br><br>In general an easier answer is that no 2 gaming consoles are compatible (unless advertised as such, which usually adds cost to the console so most consoles do not do this).<br><br>Given enough programming skill and patience, someone &quot;could&quot; make a 2600 version of a NES game. You would be basically making a new 2600 game from scratch which has less graphics and sound, but you might be able to mimic the gameplay. This has been done before.
Im thinking about doing this. I was at a flea market 2 days ago and found an atari 2600 with the cables, 2 joysticks, ms pac-man, pac-man, real sports baseball, and asteroids for $10! (:
Also,&nbsp; if you happen to own a Sega Genesis controller&nbsp; it works in an atari.<br />
I&nbsp;didn't know that. I don't own one but I&nbsp;can get one pretty cheap
If i had an atari 2600 i would make Cloud, Sephiroth, Wolverine, The Joker (Dark Knight style) Weiss the Immaculate, Nero the Sable, Vincent Valentine, Jak and Daxter, Ratchet and Clank, Zack Fair, Claire Farron (a.k.a. Lightning), Bahamut, Link, Roxas, Axel, Reno, Sora, Xigbar, etc., etc. (i have about 100 more guys i could mention but my hand is getting tired)
now can you make shooting games, because i was thinking of making my own version of a video game called left 4 dead so i could play it at my a relatives' houses because none of them have xbox 360s
If you can dream it, you can achieve it! :)
TextEdit does work, just save as plain text ( .txt ), not Rich Text ( .rtf ). If you want to program any language, other than Assembly Line, than Macs are the way to go. No flames please, but it is easier to code on a Mac ( other than on 10.5 Leopard ).
Then you've never tried Linux + EMACS. I was never a EMACS geek (prefer Vim myself), but I've tried it, and kept it for a loooooong time.
&nbsp;I use Mac + EMACS. Don't think there's a difference.
&nbsp;They are the same.
Actually, you can access EMACS from a Mac, because Mac and Linux both use UNIX (SP?). Just go into Terminal, on 10.4 or 10.5, and type in "emacs"
O RLY? I've never used a Mac, so I guess I wouldn't know. I'm kind of anti-apple, for reasons I've had so long that I forgot them.
What OS do you use? Apple has changed, so less buggy. Use a Mac at an Apple Store ( they let you use Macs there) for ten minutes, then re-decide. Tell me the reasons when you remember.
I'm currently using Windows Vista, but I wish I had Linux. Too late now. I don't know if there are many Apple stores around where I live (Austin, Texas, so it's all Dell here). I think one of the reasons I don't like Macs is that I grew up with PC/Windows. I would have a hard time switching from what I have used for years, to Microsoft's major competitor. That's why I am still comfortable using Linux -- It's just kind of out there, not really conflicting with anybody. GNU is nice like that.
I found two Apple stores near you. 1: Barton Creek 2901 S. Capital of Texas Highway Austin, TX 78746 (512) 347-7888 2: The Domain 11410 Century Oaks Terrace Austin, TX 78758 (512) 691-4800 Hope you like the Apple stores.
I went to the one at the Domain. Couldn't separate myself from the iPod nanos. The huge-screen iMacs were huge. Wish I could have stayed longer, so I could check them out more. Prices weren't too tempting, though. (I also got a muffin :D)<br/><br/>I also went to the Apple section of my local Fry's. More huge iMacs, though I did get to stay a bit longer, so I explored a bit. I found iLife very interesting. The UI is a bit like GNOME (but only a little), and I'm not too picky with UIs anyways, so I don't think I'd have a lot of trouble there. Mac OS isn't compatible with MS tech (as far as I know), nor is Linux unless you have WINE (and even that's a pain), so my coding habits wouldn't have to change too much. I didn't look at the price.<br/><br/>The games at that macgames.com site you mentioned look familiar... GH3, The Sims X, Halo... Not too many of my favorite PC games, but I'm adaptable. (Just wondering, is there any kind of Windows emulator (or Not Emulator) for Mac that I could run games on?)<br/><br/>The last place I went was my local Goodwill Computer Center. They had a few old, gunky iMacs running Leopard there. Same stuff. &lt;$100.<br/><br/>Overall, I was impressed, but not by the price, and I've only just switched to Linux a few months ago. My and my dad are getting ready to build a new computer from scratch. Maybe I could <em>possibly</em> get one of those old iMacs and clean it up a bit. I'll think about it.<br/>
The iMacs are big. Love the computers, hate the price. What do you code? Could you explain quote Mac OS isn't compatible with MS tech (as far as I know), nor is Linux unless you have WINE (and even that's a pain), so my coding habits wouldn't have to change too much. /quote? Rather than UI, you mean GUI. The basic UI is almost the same, the GUI is different. On the Intel Macs, you can use BootCamp to run Windows OS. That way, you run Windows with Mac OS X speeds, and run Windows apps, even the start menu. What kind were the iMacs at Goodwill Computer Center? They aren't Gunky unless they are old. Are they Intel, or PowerPC processors? Google it, but you can build a computer using PC parts, and run Mac OS X on it. Price comes down a few thousand. Never buy RAM or Hard Drives from Apple, they overcharge. They overcharge for everything else too, but those things have better quality.
I like to program games. In my dark ages of using Windows, I would use DirectX for all of my games. When I upgraded to Linux, I had to start using OpenGL. I'm <em>sure</em> you can run OpenGL apps on Macs, right? It is, after all, <em>open.</em><br/><br/>I think the old iMacs were Intel, but I'm not sure. By 'gunky' I meant physically. They were covered in dirt, gunk and grime. Must be old.<br/>
In what language? Tiger and up has OpenGL and OpenAL installed with the OS. Check them out. If you can run them, then find out. You can clean out dirt, just not with water or soap.
Usually C or C++, but sometimes in Python. I've used other languages as well.
How do you do graphics in C?
Using OpenGL, DirectX, SDL, or any of the other graphics libraries there are out there...?
Could you explain that?
Windows xp is way better, windows vista gets more bugs.
I agree.
Seconded. (Or is it thirded?)
Thirded :-)
Okay, were <em>you</em> thirding, or were you implying that <em>I</em> was thirding? Oh, forget it.<br/>
You thirded.Yes, I will. I don't like spelling fake words.

About This Instructable



Bio: Whoever first said "sticks and stones can break my bones, but words can never hurt me" obviously never attended a ninja poetry slam.
More by yokozuna:Easy Homemade Pizza Christmas Decorations Using Coffee Cups Lighted Memorabilia Display 
Add instructable to: