As a child, my first experience with a computer was the Commodore Vic-20. It used a popular processor, the Motorola 6502, and could display in color! Programs could be loaded from cassette or cartridge, or manually entered in the built-in BASIC interpreter/shell.
While developing Robo-Frenzy, I started thinking about the Vic-20, and acquired and repaired one with which to experiment.
Once I had my fill of playing old favorite games, I decided to learn how to program in 6502 assembler.
This gives the programmer the most speed and flexibility, as they are bound by the raw hardware specifications of the computer and not the implementation of a higher level language like BASIC.
The hardware limitations on the Vic-20 are quite strict. There are only 4K of RAM total, which means that conservation and clever reuse of memory space are key.
Having only ever dabbled in 6502 assembler previously, I wanted to review a good sample game to understand some of the nuance - how does one handle display and audio routines without slowing down the main game loop? Would it be possible to automatically convert between NTSC and PAL systems?
I found a reference in Davide Bucci's "Alien Invaders". This is an open source project implementing a version of "Space Invaders" for the Vic-20.
I began the work of removing all the things that made "Alien Invaders" its own work - graphics, audio, and controls, as well as game flow, game over conditions, and scoring.
Next, I started branching and adding my own routines to handle things like player display, tentacle movement, collision detection, and more.
Unlike Robo-Frenzy, this is a single player game. The player can use the keyboard or a joystick. Pressing "M" on the title screen will enable/disable music.
The player's score is displayed at the top of the screen. The player moves down the screen in one of eight positions. At the bottom of the screen, the player picks up a gear, which they try to bring back to the top of the screen. Once a gear arrives at the top of the screen, 1/6th of a robot will appear. Point values are 10x the value used in the electro-mechanical version of the game. Each gear brought earns 10 points, and completing the large robot earns an additional 10 points.
While the player is moving up and down this hill, a large octopus attempts to stop them. Its tentacles move in and out in predefined patterns. These patterns increase in speed the longer the game continues.
When a player is touched by a tentacle, they lose their life. Once the player loses three lives, their game is over.
Once the project is finished, I hope to burn the data onto a cartridge ROM. The source will always be open, and anyone can download, assemble, and run it in the VICE emulator or on real hardware.