Identity handshake¶
A 4-byte identity frame confirms both sides run compatible software and assigns roles.
Frame¶
FC 01 00 30
│ │ └──┴── catalog word, big-endian (SamSho2 = 0x0030)
│ └─────── protocol revision (01)
└────────── FC = request/advertise, FD = response
Receiver rejects unless byte1 == 01 and bytes 2–3 == its own cartridge catalog.
That's what keeps different games from linking. The catalog is per-game (from the ROM
header); the FC/FD 01 <catalog> shape is BIOS-level.
Exchange¶
sequenceDiagram
participant P1 as Player 1
participant P2 as Player 2
P1->>P2: FC 01 00 30
P2->>P1: FC 01 00 30
P2->>P1: FD 01 00 30
Note over P1,P2: → FINALIZE (0C) → ACTIVE (14)
| Endpoint that… | Becomes | State |
|---|---|---|
gets FC, replies FD |
P2 — FD responder | 08→0C |
gets FD after sending FC |
P1 — FC requester | 0C |
Arbitration: both advertise FC; whoever's FC lands first (measured ~103 ms ahead)
becomes P1. No code arbitrates this — it falls out of a clean, ordered link.
Status effects¶
| Event | Sets status bit |
|---|---|
accepted FC |
0 |
accepted FD |
1 (also picks gameplay ordering) |
| identity validated | 6 |
| session initialized | 5 |