Using it

Where we differ

Every differential suite assembles the same source with a real assembler and compares the bytes. Where they differ and the difference is known, it is recorded against a join id that ties the recorded fact to the expectation of our own output, so neither half can quietly disappear. If a tracked difference stops being a difference, the build fails and says so.

This is that list.

It is here because a claim of parity asks to be believed, and a list can be read instead. If you are deciding whether to move a project that already builds, what you need is not reassurance — it is to know what will change.

4 tracked differences across 13 recorded cases.

Difference CPU Dialect Reference tool Cases
canonicalisation-68000-0812FE97 68000 vasm vasmm68k_mot 1
canonicalisation-68000-08AC909FCDFA 68000 vasm vasmm68k_mot 1
canonicalisation-68000-08F7F12AF8BB 68000 vasm vasmm68k_mot 1
issue-110 68000 vasm vasmm68k_mot 10

What each one is

issue-98: as a statement separator. sjasmplus treats a colon as both a label terminator and a statement separator. We read the label form and not the separator form.

issue-99 — conditions on forward-referenced symbols. sjasmplus resolves IF against a label defined later in the file, which needs more passes than we currently make.

issue-110 — 68000 optimisation, and this one is settled. Our output sits between vasm’s two modes. vasm’s default deletes lea (a0),a0 entirely and rewrites asl.w #1,d0 as add.w d0,d0; -no-opt does neither. We apply some and not others, so no single vasm invocation reproduces our bytes. The issue is closed as completed — it records the decision rather than tracking a fix.

canonicalisation-68000-* — three encodings with more than one spelling. The 68000 encodes some operations more than one way, so assembling, then disassembling, then reassembling can land on the other spelling. Each is pinned to the exact bytes it concerns.

What leaves this list

A difference that stops being one. Macros used to be here: twelve recorded cases across five dialects, where ACME, ca65, lwasm, vasm and sjasmplus all expanded macros in ways we did not reproduce. They were implemented, the verdicts were superseded with the reason, and the rows went. The corpus keeps the retired facts — nothing is deleted — but the list shows what is true now.

What is not here

Differences nobody has found. The list covers what the differential suites compare, which is every instruction form the reference tools accept, the curriculum, and the fuzz and probe corpora — not every program that could ever be written.

A difference found later gets a join id and appears here. One that turns out to be a plain bug gets fixed instead, and the recorded verdict goes with it.