-
Notifications
You must be signed in to change notification settings - Fork 7
Nintendo Super System
- Home
- Nintendo Super System (You are here)
- Super Famicom Box
- Nintendo SuperDisc
The Nintendo Super System (NSS-01-CPU, 1991) was Nintendo's SNES arcade cabinet. Inside is a stock NTSC SNES with a second computer beside it: a 4 MHz Z80 "supervisor" that owns the coin slots, the play timer and the game menu. It holds the SNES in reset until a game is paid for, draws its own on-screen display over the SNES picture (the menu, the instruction pages, the timer and credits), and refuses to run a cartridge whose security key chip doesn't answer correctly. A cabinet holds up to three cartridges and lets the player choose between them.
SuperSnes9x emulates the whole board: the supervisor runs the real NSS BIOS, decrypts each cartridge through its key chip, shows the game menu, takes coins, starts, times and stops the games, and draws the instruction pages over the running game.
-
The NSS BIOS: MAME's
nss.zip. It holds three BIOS revisions; the emulator picks a version "03" one (version "02" only runs the three oldest games). -
The on-screen display font: MAME's
m50458.zip(the M50458 charset). Without it the menu overlay is blank. -
Cartridges: MAME's NSS sets (
nss_smw.zip,nss_fzer.zip, ...: separate program, instruction-ROM andsecurity.prmkey files in one zip), or a single merged image in fullsnes's layout (program, then the 32 KB instruction EPROM, then the 16-byte key). Not supplied.
The dumped cartridges are ActRaiser, The Addams Family, Amazing Tennis, Contra III, F-Zero, Lethal Weapon, NCAA Basketball, Robocop 3, Skins Game, Super Mario World, Super Soccer and Super Tennis, all of which run. MAME's Super Mario All-Stars set does not: its program dump is bad and no key-chip dump exists. NSS Make, below, builds your own cartridges from retail SNES games.
-
File → BIOS Manager: point the Nintendo Super System row at
nss.zipand the NSS (M50458 charset) row atm50458.zip. Both must read OK. - File → Load Game and pick a cartridge. The supervisor boots, checks the cartridge's key and shows the GAME MENU.
- Insert a coin (Emulation → Nintendo Super System → Insert Coin, or its hotkey), then press Game 1. The game starts with the play time the cartridge sells per credit.
Left alone on the menu, the cabinet runs each game's attract demo after the cartridge's own attraction time (Super Mario World: about a minute), with both joypads unplugged, as a real cabinet does.
Everything on Emulation → Nintendo Super System is a physical part of the cabinet. The panel is on the Emulation menu in the Windows, GTK and Qt builds; the libretro core runs NSS cartridges but has no panel controls.
| Entry | What it does |
|---|---|
| Insert Coin, Insert Coin (Slot 2) | The two coin slots |
| Service Credit | The operator's service button: a credit without a coin |
| Game 1 / 2 / 3 | Pick a game on the menu. An empty slot reads Click to select cartridge... and asks for a cartridge file, so a cabinet can hold three games at once |
| Eject Cartridge | Pull a cartridge from a slot. The cabinet always keeps at least one |
| Instructions, Page Up / Page Down | Show and page the cartridge's instruction screens over the running game; press Instructions again to close them |
| Restart Game | Restart the game being played, with a fresh timer. Like the real button it has to be held for about half a second, so the menu holds it for you |
| Cartridge DIP Switches | The eight switches on the cartridge board, named for what the game in play does with them (Switch 3 - Lives: 5). Boards without the switch block grey it out |
Entries that do nothing in the current state are greyed: the game buttons while a game is playing, and Instructions, paging and Restart outside a paid game.
Every entry also has a hotkey: the Super System tab of Input → Customize Hotkeys (Windows), the NSS rows of Input → Customize Hotkeys (Qt), and the Arcade tab of Preferences → Shortcuts (GTK). Insert Coin is shared with the SFC-Box: one coin key serves whichever cabinet is running.
To get back to the game selector, use Emulation → Hard Reset (Power Cycle), which is what an operator does to a cabinet. Changing a cartridge does the same, because the supervisor only looks at its slots when it powers up. Credits survive; they are kept in the cabinet's EEPROM.
Nothing documents them, so each game was traced from its own code:
| Game | Switches 1-2 | Switches 3-4 | Switches 5-6 |
|---|---|---|---|
| ActRaiser | difficulty | lives 5/4/3/2 | timer speed |
| The Addams Family | Hard / Normal | lives 5/4/3/2 | timer speed |
| Lethal Weapon | starting health 5/4/3/2 | ||
| Robocop 3 | lives 2/5/4/3 |
No game reads switches 7-8, and Contra III, NCAA Basketball, Skins Game and Amazing Tennis don't read the switches at all. The "timer" settings change how fast the in-game clock counts, not the time limit.
Slot 1's battery save is the usual .srm. The cabinet's settings EEPROM (coinage, credits, bookkeeping), its clock's battery RAM and the batteries of slots 2 and 3 are kept together in a .nss file beside it. Savestates carry the whole board: the Z80, its RAM, the key chip, the EEPROM, the clock and the on-screen display.
A Z80 core written for the NSS (documented and undocumented instructions; it passes the zexdoc and zexall test suites) runs the BIOS against the board: 32 KB of BIOS ROM, 8 KB of work RAM with a write-protected half, the selected slot's instruction ROM, the key chip, an M6M80011 settings EEPROM, an S-3520 real-time clock and the M50458 display chip. Its I/O ports read the joypad, the front panel, the coin door and the clock, and drive the SNES's reset line, the slot select, the panel lights and the coin counters.
Every cartridge carries an RP5H01 security chip, and the BIOS reads it in an unusual way: it executes code out of the chip's address range. Each byte it fetches is an RST instruction whose target depends on two bits from the chip, so the sequence of handlers the Z80 runs, and those handlers live in the cartridge's own instruction ROM, is itself the decryption. The result is a small record with the game's id, title, time limit and a checksum; a cartridge that decrypts to garbage shows up as an empty slot.
The detail everything depends on: the chip's reset pin holds its counter at zero, and a clock pulse that arrives while reset is still held is ignored, including the pulse in the very write that releases reset. nocash's fullsnes documents it; MAME doesn't implement it, which is why MAME lists its NSS games as not working. With it, every dumped cartridge decrypts.
The M50458 draws 24 × 12 characters over the SNES picture. The menu and boot screens are opaque; the timer and credit counters are drawn over the game. Text lines stack (a double-height line pushes the rest down) and the plane scrolls under a fixed headline, which is how the instruction pages page. Characters are edged in black, as on a real cabinet. Two switches control whether the display shows: the chip's own, and a layer switch on the board that the BIOS uses to prepare an instruction page without showing it until the player asks.
Each slot owns its cartridge outright: program, instruction ROM, key chip and battery. When the supervisor selects a slot, the SNES side is remapped to that cartridge while the SNES is held in reset. Retail SNES carts on an adapter keep their own map, so a HiROM cart with a DSP-1 (Super Mario Kart) can share a cabinet with LoROM NSS carts.
The supervisor's reset line resets the SNES's sound CPU as well as the main CPU. Without that, the last game's music keeps playing over the menu.
- The play timer doesn't end a game yet. About 28 seconds into a paid game the supervisor freezes its timer and the game runs on indefinitely; use Hard Reset to get back to the menu. Unresolved.
-
The joypad watchdog is off by default. The supervisor drops a game that stops reading the joypads, and Lethal Weapon goes quiet long enough to be thrown off the machine a few seconds in, even though Mesen shows the same pause. Set
NSSJoypadWatchdog = TRUEin the config for the original behaviour. - The cabinet's sound-mute line and its Z80 hardware watchdog are not emulated.
- nocash's Magic Floor (
MAGICNSS.BINfrommagicsns.zip) loads as a merged image and runs without a key chip. It is also the template NSS Make builds on. - nocash's NSS-TEST.BIN is a supervisor-side hardware test; point the NSS BIOS slot at it to run it in place of the BIOS (the BIOS Manager labels it No$Cash Test Bios).
- nocash, fullsnes: NSS Memory and I/O Maps and the chapters after it
- MAME:
nintendo/nss.cppand therp5h01,m6m80011ap,s3520cfandm50458devices - Issue #174, pull request #285
nssmake.zip is a command-line tool, so you run it from PowerShell or Command Prompt.
It needs three files (not supplied):
- The template:
MAGICNSS.BIN. (the whole magicsns.zip from nocash's site also works.) - The NSS BIOS:
nss.zip - The SNES game: any .sfc, .smc or .zip.
Basic example usage:
From PowerShell (or command line):
.\nssmake.exe --template "C:\NSS\MAGICNSS.BIN" `
--bios "C:\NSS\BIOS\nss.zip" `
--rom "C:\ROMS\SNES\Mega Man X (USA).zip" `
--out "C:\NSS\nss_mmx.zip"It prints what it built:
nss_mmx.zip
title "Mega Man X" (bookkeeping "Mega Man X"), GameID A4, 1 credit, 5:00, title checksum 00
program 2048 KB (mirrored up from the ROM's own size), LoROM, CRC32 1033EBA4
instructions: 30 lines, built-in for this gameThen load created game (e.g nss_mmx.zip) in the emulator (File → Load Game), or insert it into slot 2 or 3 from the NSS menu.
| Option | What it does | Default |
|---|---|---|
--title "Name" |
menu title, up to 21 characters | from the built-in list, else the ROM header |
--book "Name" |
bookkeeping title, up to 15 | shortened title |
--price 2 |
credits per game, 1–9 | 1 |
--time 3:30 |
play time per credit, 1:00–30:00 in 5-second steps | 5:00 |
--instructions file.txt |
your own instruction pages | built-in pages if the game is known, else generic |
--id 70 |
force a GameID (hex) | picked automatically |
--out name.bin |
write a single .bin instead of a zip | zip |
Run .\nssmake.exe --list to see which games have built-in instructions, and .\nssmake.exe alone to print the help.
It's a plain text file, one line per screen row, at most 24 characters per line. Colours wrap text in braces:
{Y:MY GAME}
Jump on enemies to beat
them.
{G:CONTROLS}
{C:B Button} Jump
{C:Y Button} Run
- Colours:
Rred,Ggreen,Yyellow,Ccyan,Mmagenta,Bblue,Wwhite, and {U:...} underlines. - The font has no
!or&; the tool swaps them for.andand.
{Y:SUPER MARIO KART}
Race Mario and his
friends on the wildest
tracks of the Mushroom
Kingdom.
{G:CONTROLS}
{C:+ Control} Steer
{C:B Button} Accelerate
{C:Y Button} Brake
{C:A Button} Use an item
{C:L or R} Hop, drift
{C:START} Pause
Drive over the {Y:? panels}
to pick up an item.
Collect {Y:coins} for a
faster kart - but a hit
makes you drop them.
{G:GRAND PRIX}: finish in
the top four to go on
to the next race.
{G:MATCH RACE} and {G:BATTLE}
{G:MODE} need two players.
In Battle Mode, pop all
three of your rival's
balloons to win.
{R:Play time is limited.}
Deposit {W:COINS} for more
time.
- Games with other chips (Super FX, SA-1 and so on) get a warning and may not run from the NSS menu.
- Up to three games in one cabinet: each gets its own GameID automatically, so they won't clash.