Why is ANFS 4.21 named "variant 1"?

← Acorn NFS and Acorn ANFS

Why is ANFS 4.21 named "variant 1"?

The ROM is shipped under the name "anfs-4.21_variant_1.rom" but its internal title is just "Acorn ANFS 4.21". The variant suffix is not in the ROM header. This note records what the disassembly tells us about why multiple 4.21 builds appear to have existed.

Evidence: the host-OS gate

In service_handler at &8A54, on a Service 15 ("vectors claimed") call the ROM reads the host OS version via OSBYTE 0 and tests:

&8A61  CPX #3            ; OS 3.2/3.5 — Master 128
&8A63  BEQ restore_rom_slot
&8A65  CPX #4            ; OS 4.0   — Master Econet Terminal
&8A67  BEQ restore_rom_slot
&8A69  TXA               ; otherwise: print "Bad ROM <slot>" and
&8A6A  PHP               ; clear the slot's workspace byte at &02A0
       ...

The OSBYTE 0 result conventions are:

X Host OS Outcome
0 OS 1.00 (early BBC B / Electron) rejected
1 OS 1.20 / American OS rejected
2 OS 2.00 (BBC B+) rejected
3 OS 3.2 / 3.5 (Master 128) accepted
4 OS 4.0 (Master Econet Terminal) accepted
5 OS 5.0 (Master Compact) rejected

So this ROM was built for the original Master 128 and the rack-mounted Master Econet Terminal but explicitly rejects every other model in the range, including the Master Compact.

The 4.18 equivalent at &8A23 only tested CPX #1 and CPX #2, gating workspace skip (not a hard rejection) for the BBC B+ and OS 1.20. The 4.21 code is a stronger gate and a different acceptance set.

Hypothesis

"variant 1" is most likely the original Master 128 / Master ET build of ANFS 4.21. The natural counterpart "variant 2" would be the Master Compact build that accepts X=5 (and would presumably reject X=3/4 in the same manner). The version number (4.21) probably stays the same across variants because the source release is shared; what differs is the per-machine compile-time gate.

This is an observation derived from one ROM only. Confirming it requires comparing against another 4.21 ROM with a different MD5 and matching internal title.

What would falsify this

References