Skip to content

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 080C
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