SNAC8 (per-core direct controller protocols)¶
SNAC stands for "Serial / Native Adapter for Controllers". SNAC8 is the eight-pin variant: the FPGA gets raw access to all eight USER_IO[7:0] pins and the core itself drives the original-console protocol on those pins.
Unlike DB9MD / DB15 / Saturn, SNAC8 is not a uniform path through the MiSTer-DB9 fork — every core that implements it does so on its own terms. The OSD option to enable SNAC, the wiring on the adapter, and the controller compatibility list are all per-core.
What stays the same fork-wide¶
- The eight pins are routed:
USER_IO[7:0]are all inout and all reach the core. USER_IO[7](DB9 pin 2) is added on top of upstream's seven-pin port. Without the MiSTer-DB9 build of the core, this pin would not be available to SNAC.- The push-pull / open-drain configuration of each pin is per-core: the core asks the fork's
USER_PPmask to drive the pins it needs as push-pull, leaves the rest open-drain.
What changes per core¶
- Which OSD entry enables SNAC (some cores call it
SNAC, somePad 1 SNAC, some have a port-pick option, some have nothing — they auto-detect). - The cable / adapter pinout (NES SNAC ≠ SNES SNAC ≠ PCE SNAC ≠ Saturn SNAC).
- Which controllers are supported (e.g. PSX SNAC handles DualShock; SNES SNAC handles standard pads + multi-tap with caveats).
Cores known to support a SNAC option¶
The set varies over time and is best read from each core's release notes or its OSD. The fork-wide commitment is just "the eight pins are wired through and you can drive them" — what each core does with them is the core's own decision.
DB9 + SNAC8 share the same physical port¶
SNAC8 takes the same USER_IO pins that DB9MD / DB15 / Saturn use, so only one path can drive the connector at any moment. The fork enforces this inside the FPGA, with SNAC always winning:
- When the core's SNAC mode is enabled (via its OSD entry — name varies per core), the
UserIO Joysticksetting is silently ignored. The DB9 / DB15 / Saturn protocol module is held inert (USER_OUTidle,joydb_*outputs zero), so a DB9 controller plugged into the same port produces no inputs and no OSD ghost clicks. - When SNAC is off,
UserIO Joystickworks as expected.
The OSD does not grey out the UserIO Joystick entry when SNAC is on — the setting is just inert. If you toggle UserIO Joystick while SNAC is on and nothing happens, that's why. To use a DB9 / DB15 / Saturn controller on the same port, turn SNAC off in the core's OSD first.
Before the gate landed (pre-2026-05-04), enabling both at once produced electrical conflicts on USER_IO pins and OSD ghost clicks via joy_raw. Cores affected: NES, SNES, SMS, Saturn, TurboGrafx16, Genesis, MegaCD, S32X, PSX, Atari7800, SGB.