A new SAM Coupé conversion of Nichibutsu's 1980 arcade classic Moon Cresta, written in Z80 machine code and matched to the original arcade program: the same attack patterns, sounds, docking, scoring and loop.
At a glance
Machine : SAM Coupé
Screen : Mode 4: 256 × 192, 16 colours from 128, double-buffered
Language : Z80 assembly, about 8,000 lines
Game code : 24.6 KB, plus paged graphics and sound data
Sound : SAA1099, six channels
Disk : One 800K MasterDOS disk (.mgt), boots by itself
Players : 1 or 2, taking turns
Reference : The original Moon Cresta arcade ROM, run in a purpose-built arcade emulator
What players get
The full arcade game, from the moment the disk boots to the high-score table.
- Boot sequence: the Lightning Studios intro, then the Moon Cresta loading screen while the game loads.
- Attract mode: title screen, main menu, score advance table, best 5 pilots, and a "Trip to the Space War" story page that types itself out a line a second.
- Main menu: 1 or 2 players, define your own keys for left, right and fire, and insert credits; fire starts the game.
- Five enemy types: Cold Eye, Super Fly, Four-D, meteors and the Atomic Pile piledrivers, each with its own arcade flight paths and kill jingle.
- The three-stage rocket: lose a stage and the survivors regroup; each stage fires on its own, so two or three shots can be in the air at once.
- Docking: the next stage rises up from below, and you bring your ship down onto it against gravity and drift before the 30-second clock runs out. A clean docking earns seconds left × 100, × 200 or × 300 depending on which stages join.
- Far Out: clear the last wave and the rocket blasts off the top of the screen; the game loops harder, back to a single stage.
- Extra rocket at 30,000 points, with its jingle, and one extra game when you run out.
- High scores: enter your initials; the top scorer's initials replace the Nichibutsu logo under HI-SCORE.
Built from the arcade
Nothing was guessed from videos: the behaviour comes from the original Moon Cresta arcade program. The ROM was decoded and run in a custom arcade emulator that logs sprites, sound writes and memory frame by frame, and every feature was checked side by side against it.
Area : Taken from the arcade program
Enemy flight : The 28-direction velocity table and 96 flight segments, run by the same phase machine, so every swoop, dive and loop follows the arcade path
Wave starts and regroups : How each wave enters, the frozen pause after a hit, the spin and shrink into the centre, and the Atomic Piles drifting off-screen
Atomic Pile dive : Skull head and missile body joined, diving at the arcade speed, faster on later loops
Explosions : The arcade's own choice for each event: small burst for kills, spreading debris ring for meteors, large 32 × 32 blast for the rocket
Music and jingles : The arcade melody player and its 17 tunes, from the stage-start fanfare to a separate kill jingle for each enemy type
Shot sound : Modelled on the arcade's discrete sound circuit: a noisy shot that rises to about 3.9 kHz and fades over half a second
Firing rules : One stage fires per press, the first of I, II, III whose own shot has finished
Rise and regroup : The rocket rising at the start of each life, the stages parting, survivors regrouping after a hit
Docking : The arcade's throttle physics for gravity and drift, the 30:0 clock, the ±7-pixel touchdown window, and the crash and time-out outcomes
Scoring : Kill values (Cold Eye 50, Four-D 60, Super Fly 30, Meteor 200, Atomic Pile 100), docking multipliers and the 30,000 extra rocket
Far Out and the loop : The rocket's climb, the text timing, and the restart with one stage
Under the hood
A purpose-written engine gets eight enemies, explosions, shots, the rocket and a starfield running smoothly on the SAM's 6 MHz Z80.
- Graphics: mode 4 with two screen buffers that swap every frame, so nothing tears. Sprites are stored as masked run-length data that skips empty pixels, and each buffer keeps its own list of what to erase next time.
- Scaling the arcade: the arcade's 224 × 256 portrait screen maps to the SAM's 256 × 192 landscape by shifting x 16 pixels and scaling y by ¾, so the arcade's paths and positions carry over directly.
- Timing: the SAM runs at 50 frames a second while the arcade logic runs at 30 updates; a fixed-point accumulator paces each piece of arcade logic at its original rate.
- Starfield: a scrolling field that only draws on empty background and never damages sprites or text.
- Sound: the arcade's melody and effect players ported to the SAA1099, with the arcade's pitches recalculated for the SAM's sound chip. The shot uses tone and noise together for the arcade's rough edge.
- Memory: the game code sits in one 32K block; enemy graphics are swapped in per wave from paged banks, and the title picture lives in its own pages.
- Text and HUD: the arcade font and logos from the original artwork, with the CREDIT line and on-screen messages redrawn every frame so ships pass cleanly over them.
How it was made
The whole game is rebuilt from source by one script, so every change goes from artwork to a bootable disk in seconds.
- Graphics: a Python tool cuts the sprites out of the purple boxes on the artwork sheets, plus the font, logos and loading screen, and packs them into the SAM's sprite format.
- Arcade data: a second tool reads the arcade ROM and extracts its flight tables, spawn points, melodies and sound effects into assembler tables.
- Assembly: the Z80 source is assembled with pyz80.
- Disk: the disk builder writes MasterDOS, a BASIC loader, the Lightning Studios intro, the loading screen and the game onto one 800K disk image that boots straight into the game.
- Testing: every build runs in the SimCoupe emulator under script control — pressing keys, taking screenshots, recording sound — and the results are compared frame by frame with the arcade emulator.
Credits
- Original game: Moon Cresta © 1980 Nichibutsu.
- SAM Coupé conversion: Phil “Ramix” Wilson — artwork, loading screen, intro, design direction and play-testing. Play-testing help also by Nicholas "Mr_Nick666" Bay.
- Programming: Z80 code written with Claude (Anthropic), checked against the arcade ROM throughout.
- Tools: pyz80 assembler, SimCoupé emulator, MasterDOS.
https://drive.google.com/file/d/1Si3jpm1Zh8hB5CnbhDX1zcD5dULgZmrm/view