In mid August last year I decided to teach myself Atari 2600 programming for the fun of it. This February, I'm proud to introduce my first hack:
Adventure Kingdoms is a functional and graphical hack of Warren Robinett's game, Adventure. Some new features of AK include a new and larger player world, sprite upgrades, five new items, a new dragon, a new objective, a role selection screen, background colors, dragon reflection, a new secret challenge, a new game+ feature, and various under-the-hood improvements. Many of these new features replace features in the original game such as level select, difficulty select, black and white support, and missile walls.
I learned a great deal in the creation of this hack. My first month's work was done entirely in a hex editor because I didn't realize there was an assembler for Atari 2600 games. Most of the hack was programmed and tested without the aid of debugger, which I discovered in my emulator in January. I taught myself about opcodes, addressing modes, reserved RAM variables, the TIA, and all the little idiosyncrasies involved with them. I learned many things the hard way: Don't squeeze in too many subroutines per drawing frame of the screen will shake; Don't define graphics over a page break or they will distort; Don't define state-keeping variables anywhere near $FF or the stack will overwrite them; most importantly I learned how precious my RAM, ROM, and cycles were, how to juggle them, and when to sacrifice one for the other when resources grew scarce.
I would have never been able to complete this without all the hard work that others had already put into the resources I used, so I'd like to give thanks where it is due.
Special thanks to:
- Warren Robinett, for creating the original Adventure
- Joel D. Park, for providing a thoroughly commented copy of the source online.
- John Picken, whose opcode directorytaught me the 650(7) opcodes, their lengths, and cycles.
- Mark Andrews, whose online book taught me what addressing modes were and when to use each.
- Steve Wright, whose guide taught me the functions of the reserved RAM variables
- Andrew Davie, whose tutorial sections on the TIA helped me resolve many cycling issues
- Steve A. and the Stella Team for their awesome emulator and debugger
- Matthew Dillon and all other contributors and maintainers for the DASM assembler
- Everybody responsible for the success of the Atari 2600 home video game console
- Everybody on the atariage forums who plays my hack. Please leave feedback!
The bin and manual files are attached below. Cheers!