Session status bits (0x564d)¶
The session status byte gates every phase of the link. Bit names below are behavioral (recovered from code), not original SNK symbols.
| Bit | Mask | Behavior |
|---|---|---|
| 0 | 01 |
accepted an FC 01 <catalog> identity |
| 1 | 02 |
accepted an FD 01 <catalog> identity; later selects the gameplay ordering branch |
| 2 | 04 |
per-tick timeout/error event; cleared on tick entry, set by expired countdowns |
| 3 | 08 |
enables the F8 gameplay branch |
| 4 | 10 |
normal-transport busy/progress marker |
| 5 | 20 |
session initialized / handshake-complete |
| 6 | 40 |
identity frame validated |
| 7 | 80 |
active-session enable — gates entry into normal (F0) transport |
The bit 7 / bit 3 gate¶
The active handler (0x206f68) chooses transport sub-mode from bit 7:
206f6d bit 7,(0x564d)
206f72 jrl Z,0x207447 ; bit7 CLEAR → F8 gameplay branch (0x207447, gated by bit 3)
206f75 set 4,(0x564d) ; bit7 SET → normal F0 transport continues here
So:
- bit 7 set → normal
F0/bulk transport - bit 7 clear + bit 3 set →
F8gameplay exchange
The transition from transport to gameplay (routine 0x20da5a) therefore clears
bit 7 and sets bit 3 after the phase barrier completes (0x5651 == 0x5652 == 1),
restores base control to F0, and resets the phase snapshots.
Observed vs. intuitive
"Active" (bit 7) meaning normal transport, not gameplay, is the single most counter-intuitive fact here. Executing the ROM was what pinned it down.
Values seen in a real run¶
From the dynamic validation trace:
| Point | 0x564d |
Bits |
|---|---|---|
| after accepting FC | 41 |
0, 6 |
| active, normal transport | E1 / F1 |
0,5,6,7 (F1 also sets bit 4) |
| after F8 transition | 69 |
0,3,5,6 |