Asm198x
Modern assemblers & disassemblers for retro CPUs
Asm198x is the family's assembler toolchain — one modern, statically-linked, cross-platform binary that assembles and disassembles code for the retro CPUs of the era. Rather than invent a house syntax, each front-end matches a dialect people already use, and the output is checkedbyte-for-byte against that reference tool.
Why it exists
The period assemblers are dead-OS binaries — you need DOSBox or a full emulator just to run them. The modern community tools mostly work, but they're fragmented: a different program, syntax and build dance per machine, much of it unmaintained C. Asm198x is one well-documented toolchain that spans the family's CPUs.Rescue beats replace.
What it covers
Five CPUs, both directions, every front-end validated byte-identical against the reference assembler: 6502 (acme for the C64, ca65 for the NES — with a bounded linker that emits a real .nes ROM),Z80 (pasmo/pasmonext and sjasmplus, including the Spectrum Next's Z80N), 68000 (vasm, with Amiga hunk-executable output),6809 (lwasm), and 65816 (ca65). Assemble → disassemble → reassemble round-trips byte-for-byte.
How it's used
One binary, one --dialect flag. A few illustrative commands (the full dialect and flag set is on GitHub):
Assemble C64 source (acme dialect)
asm198x --dialect acme countdown.s -o countdown.binAssemble + link a finished NES ROM (ca65)
asm198x --dialect ca65 game.asm -o game.nesDisassemble a binary back to source
asm198x --disasm --dialect 6502 --org 0x0200 countdown.binWhy it's in the family
It's the tool that assembles Code198x's lesson code — the C64, NES and Spectrum assembly curricula all build byte-identical through it, so the code in a lesson is exactly what the reference assembler produces. The shared isa spec at its core is also the encoding source of truth that Emu198x validates its decoders against — one set of facts, three siblings. It's its own project with its own roadmap, not a Code198x component.