Skip to content

NES and SNES v0.2

Choose a tag to compare

@vivitheblackmage vivitheblackmage released this 05 Nov 19:47
· 5 commits to main since this release

mister-netplay-v0.2.zip

NES and SNES netplay for MiSTer v0.2

This release adds Super NES netplay. Two MiSTers run the real SNES core in lockstep over the internet or a LAN. NES netplay works as before.

Download: mister-netplay-v0.2.zip. It contains:

  • SD card/: the NES and SNES cores, the netplay Main binary, scripts and NetPong
  • Server/: the lobby server for Windows, Linux and Raspberry Pi

New: Super NES

  • SNES_netplay.rbf: the MiSTer SNES core with lockstep netplay. A checksum of every frame is compared, so a desync stops the session instead of going on silently.
  • All 12 buttons on both controllers.
  • The core's coprocessors stay on: SA-1, Super FX, the DSP chips, Cx4, S-DD1, SPC7110 (without its clock) and Sufami Turbo.
  • The SNES core has no pause, so netplay stops the emulated machine's clock while the other player's input is late. HDMI holds the picture; analog video goes black for that moment.
  • Same lobby as NES: OSD → Netplay → Host in SNES_netplay. The other player joins from _Netplay/Rooms. Rooms and server games are per core.
  • There are no settings to change, but both players need the same OSD settings. The session tells you when one differs.
  • Not supported: MSU-1, BS-X/Satellaview, S-RTC, SPC7110 with its clock, the competition carts and SPC files. During netplay, cheats, savestates, multitap, mouse, light guns, turbo and SNAC are off.

Tested on hardware:

  • Replays of 37,000+ frames came out identical on Super Mario World, Donkey Kong Country, Kirby Super Star (SA-1), Yoshi's Island (Super FX 2) and Pilotwings (DSP-1).
  • Two MiSTers (a DE10-Nano and a MiSTer Pi) played over the internet through the lobby server.

Fixed before release

  • Desync after playing other games. A ROM load kept the sound chip's registers from the previous game. The core now clears them on every load.
  • SDRAM timing. The path for DMA from ROM to WRAM now meets real one-clock timing. Before, it could fail on some boards and not on others.

Main binary and server

  • One MiSTer_online works with both cores. NES keeps protocol version 1, so NES play with Mesen still works.
  • New messages:
    • The other player runs another console
    • Game chip not supported in netplay
    • Different core build (now shown for both cores)
  • Server:
    • Games go in roms/NES (or roms itself) and in roms/SNES. SNES games can be up to 8 MB.
    • A new status page shows a library per core, room cards and live updates.

Good to know

  • To switch between NES_netplay and SNES_netplay, reboot from the MiSTer's menu first. Jumping straight from one core to the other can leave netplay without the ROM reload at the start of a session.
  • Both players need the same release. Otherwise netplay shows Different core build.
  • The host may wait at waiting for player 2 while the server already shows the other player as joined. If so, the joining MiSTer stopped on an error of its own (on NES, often RAM Clear). Read the message on that MiSTer.
  • The easiest way to get the same game file on both sides: the host loads it from _Netplay/Server games and the other player joins from _Netplay/Rooms.

Upgrading from v0.1.x

  1. Copy the new SD card folder onto both MiSTers.
  2. Run Scripts → netplay_on again.
  3. Replace the server's binary.

netplay.ini and netplay-server.ini stay as they are.

Source: this repository at tag v0.2. ./setup.sh applies the patches to the upstream NES_MiSTer, SNES_MiSTer and Main_MiSTer.