Start here
Compared with what you have
You already have an assembler that works. This page is about what changes if you
put asm198x in front of it, and — more usefully — what does not.
What does not change
Your syntax. Every dialect here is somebody else’s assembler. You keep the source you have and name the dialect it is written in; there is no house dialect to convert to. Dialects lists them all.
Your bytes. The point of matching a reference assembler is that the output is the same. Where it is knowingly not, that is written down — see Where we differ.
Your build. asm198x reads a file and writes a file. It has no opinion
about your Makefile.
What we measured against
This is the part worth checking rather than believing. Every recorded verdict carries the reference tool’s own version self-report, so the corpus can say exactly which build of which assembler produced the bytes we compare with:
| Reference tool | The version we measured against | Instruction sets | Verdicts |
|---|---|---|---|
acme |
This is ACME, release 0.97 (“Zem”), 28 June 2020 | 1 | 984 |
asl |
Macro Assembler 1.42 Beta [Bld 309] | 14 | 6112 |
ca65 |
ca65 V2.18 - N/A | 3 | 1241 |
lwasm |
lwasm from lwtools 4.25 | 1 | 1146 |
pasmo |
PasmoNext v0.1.3 (PC) (C) 2004-2005 Julian Albo | 1 | 2284 |
rgbasm |
rgbasm v1.0.3 | 2 | 1125 |
sjasmplus |
SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus) | 2 | 556 |
vasmm68k_mot |
vasm 2.0b (c) in 2002-2025 Volker Barthelmann vasm 2.0f (c) in 2002-2026 Volker Barthelmann |
1 | 3392 |
The version column says what we measured against, not what is current. That distinction is the reason the table can be trusted: a reference tool shipping a new release does not make this page wrong, because it is a record of an observation rather than a claim about the world. Why asm198x has the totals and how the replay works.
What arrives with it
Stated as what this tool does, because that is what we can vouch for:
| One binary | Every dialect above, one install, the same interface on macOS, Linux and Windows |
fmt |
Canonical layout for every dialect, idempotent, and the bytes do not change |
disasm |
Every dialect, in that dialect’s own syntax, and it reassembles |
--prg, --sna, --gb-rom, --exe |
The loadable file comes out of the assembler |
--message-format=json |
Structured results and diagnostics for editors and build scripts |
--debug, --sym, --listing |
A Debug198x sidecar, a symbol table, an address/bytes/source listing |
| Multi-file | -I search paths, with each dialect’s own resolution rules — see Projects in more than one file |
What this page does not claim
It says nothing about what any other assembler can or cannot do.
That is deliberate. A feature comparison is a claim about software we do not control and do not track, and the moment one of those tools ships, a table like that becomes wrong without anyone touching it — which is exactly the failure the rest of this documentation is built to avoid. Writing “X has no formatter” from memory would be worse still.
So the comparison offered here is the one we can stand behind: these are the tools we measured against, this is the version of each, this is what we produce, and here is every place we knowingly differ. What your current toolchain does, you already know better than we do.