An Analogue Pocket port of Sega's Zaxxon arcade hardware, built on the openFPGA framework. One core, three games selectable from the Pocket library:
- Zaxxon — Sega, 1982
- Super Zaxxon — Sega, 1982
- Future Spy — Sega, 1984
All run from a single bitstream; a variant byte in each ROM image selects the game (Super Zaxxon and Future Spy use encrypted CPU ROMs, decrypted in the core).
Zaxxon is Sega's landmark 1982 scrolling shooter and the first arcade game to use an axonometric (isometric) viewpoint — the diagonal 3-D perspective that gives the game its name. You pilot a fighter over a fortress, skimming walls, threading force fields and fuel gauges, and dogfighting the boss ship Zaxxon at the end of each run.
Its defining twist is altitude: the ship moves freely in the air, and a shadow on the ground shows your height. Clearing walls and gun emplacements means constantly judging how high you are — making Zaxxon as much a game of 3-D spatial reasoning as of reflexes.
| Part | Role |
|---|---|
| Zilog Z80 @ 3 MHz | Main CPU (Sega 315-5013 encrypted program ROM) |
| Digitized PCM samples | Sound (no synth chip — all effects are recorded waveforms) |
| Display | Vertical raster CRT, ~15 kHz, RGB 3-3-2, 256×224 |
Built on the MiSTer Arcade-Zaxxon core:
- MiSTer port: Dar (darfpga — darfpga.blogspot.fr / sourceforge/darfpga)
- FPGA arcade hardware implementation: Dar (darfpga); Z80 soft core (T80) by Daniel Wallner
This Analogue Pocket build adapts that RTL to the openFPGA / APF framework, running at 256×224 rotated to the Pocket's portrait screen (4:3). Zaxxon's ~782 KB of digitized sound samples are streamed from the Pocket's SDRAM — this is the first HarpMudd core to use Pocket SDRAM. Many thanks to the authors above.
| Zaxxon / Super Zaxxon | Future Spy | |
|---|---|---|
| D-Pad ↑ / ↓ | Dive / Climb (aircraft-style — see Notes) | Move up / down |
| D-Pad ← / → | Steer left / right | Move left / right |
| A | Fire | Fire |
| B | — | Fire (2nd button) |
| Start | 1P Start | 1P Start |
| Select | Insert coin | Insert coin |
- Altitude controls are aircraft-style (Zaxxon / Super Zaxxon): push up to dive and pull down to climb, exactly like the original cabinet's joystick. This feels inverted at first but is authentic to the arcade. Future Spy is a straight vertical shooter, so its D-Pad is normal (up = up); it also uses A and B for its two fire buttons.
- Sound is sample-based. Every effect (engine, laser, explosions) is a digitized recording streamed from Pocket SDRAM rather than generated by a sound chip.
ROMs and samples are not included — nothing in this repo contains copyrighted
data. Supply your own MAME romsets (zaxxon, szaxxon, futspy) and build the
per-game .rom either way:
.mrarecipe (one per game indist/Assets/zaxxon/common/): run it through the standardmratool, e.g.mra zaxxon.mra. Produceszaxxon.rom/szaxxon.rom/futspy.rom.pack_rom.py: drop the romset zips next topack_rom.pyand runpython pack_rom.py all. Same byte-identical.romimages (matched by CRC32), plus the sound samples (below).
Both produce identical .rom files. Each game in the library is a small instance
JSON in dist/Assets/zaxxon/HarpMudd.Zaxxon/ that points at its .rom (and its
optional _samples.bin).
Zaxxon has no sound chip — all audio is digitized samples. These are
copyrighted and live inline in the MiSTer Arcade-Zaxxon .mra
(<rom index="2">); they are not in the MAME romset and are never distributed
here. They are optional: without them the core runs perfectly but silent
(the audio is muted when no samples are loaded). To get sound:
- Run
pack_rom.pywith the matching MiSTer.mrapresent (e.g.Future Spy (315-5061).mra) — it extracts<game>_samples.binnext to the.rom. Get the.mrafrom the MiSTer Arcade-Zaxxon project: https://github.com/MiSTer-devel/Arcade-Zaxxon_MiSTer/tree/master/releases.
The samples load into SDRAM at runtime and are never committed — you build them locally.
- Original arcade games: Sega (Zaxxon & Super Zaxxon 1982, Future Spy 1984)
- MiSTer port: Dar (darfpga)
- FPGA arcade core: Dar (darfpga)
- Z80 CPU core (T80):
- Daniel Wallner — original author (2001–2002, OpenCores)
- Mike Johnson / MikeJ (FPGAArcade) — DJNZ M1_n fix, clock enable, IM 2 fix and interrupt-ack fix (v0232–0240); project tidy-up, March 2005 (Ver 300)
- Sean Riddle — parity flag for 8080 vs Z80 (Ver 301)
- TobiFlex — undocumented DDCB / FDCB opcodes (Ver 303, 20 April 2010)
- Alexey Melnikov (Sorgelig) — timing accuracy and ZEXDOC / ZEXALL /
Z80Full / Z80memptr verification (Ver 350, 2018), and the
T80papseudo-asynchronous top level
- Analogue Pocket port: HarpMudd
- SDRAM controller, data loader, I2S audio, sync FIFO: Adam Gastineau (agg23)
- openFPGA framework (APF), bridge command handler, reference
core_top: Analogue - PLL and other megafunctions: Intel/Altera (Quartus-generated)
I'm into retro games and the Analogue Pocket, always cooking up something new. I love being part of a community built on sharing and the love of games — so if any of my projects bring you joy, chip in below; it fuels the next thing.