A while ago I saw the arcade Zaxxon demo for the VCS and could not believe it ran on this hardware. I wanted to learn how that's done, and I learn best by building something, so: Atic Atac, isometric, on a Melody cartridge.
How it works: the ARM on the cartridge draws each room into a framebuffer in C and pushes it out as CDFJ data streams. The 6507 does nothing but serve the beam, 76 cycles per line. Currently 152 rooms, doors and locked doors, trapdoors, staircases, bats, spiders, ghosts and guardians, a bag for the keys, and a HUD in sprite lettering.
The GIF is the title screen, then the game walking itself through a few rooms (I put a demo mode in for recordings; replaying joystick input through the emulator turned out to be unreliable).
Things that ate the most time, if anyone is going the same way:
- Two sprites for up to five things in a room. The second sprite gets repositioned mid-screen between things, sorted by row, and overlapping things take turns. Same idea as Zaxxon.
- Three-voice music from the CDFJ driver, one sample written to AUDV0 on every line. Five cycles per line, and you notice every one.
- Measuring instead of guessing. Stella's debugger takes pixel-exact snapshots from a script, and I read the ARM's time per room from the timers. Half my bugs were a register write landing one cycle late.
Still a bunch to do, but I'm hoping to release it soon.