Changes from ANFS 4.24

← Acorn ANFS 4.25 disassembly

Changes from ANFS 4.24 to ANFS 4.25

ANFS 4.25 is the next Master 128 ANFS after 4.24. Both are 65C02 ROMs that keep their filing-system workspace in HAZEL hidden RAM at &C000&C2FF, so 4.25 inherits the whole Master-128 architecture unchanged. The two 16 KB ROMs share 98.2 % of their opcode structure — closer than any adjacent pair earlier in the ANFS chain. Only 10.3 % of bytes match at the same offset, because a single two-byte instruction inserted early in the ROM shifts almost every later address by +2.

The change is a one-instruction refinement, not a redesign, and does not alter externally-visible behaviour.

ROM header

Field 4.24 4.25
Title Acorn ANFS 4.24 Acorn ANFS 4.25
Copyright (C)1986 Acorn (C)1986 Acorn
ROM type &82 &82
Service entry &8A8A &8A8C
Language entry none (&4342) none (&4342)

The service entry moves up by two bytes, tracking the inserted instruction ahead of it.

The one functional change: svc_state cleared on the transmit-done path

The transmit-done exit tx_done_exit restores X and Y from the stack and loads A = 0 (success) before returning. 4.25 inserts a single STA svc_state at &85AC between the LDA #0 and the RTS, so the path now also writes the success code to the service-state byte instead of leaving whatever an earlier stage of the service call had put there:

        lda #0            ; A = 0 (success)
        sta svc_state     ; 4.25: also clear svc_state to success   <- new
        rts               ; return with A = 0

Those two bytes (85 A9) are the whole delta. Everything else below is a mechanical consequence of them.

Consequences of the +2 shift

Dispatch-table bases

Every PHA/PHA/RTS dispatch table and the extended-vector table shift with the code around them:

Table 4.24 (lo / hi) 4.25 (lo / hi)
Service call &8A23 / &8A56 &8A25 / &8A58
OSWORD &13 &A9C8 / &A9DA &A9CA / &A9DC
NETV &AD40 / &AD49 &AD42 / &AD4B
Extended vectors &8ECD &8ECF