Nintendo Entertainment System (NES)

In the FS Game System, Nintendo games are emulated using Mednafen-FS (a customized version of Mednafen), or RetroArch-FS/Nestopia.

To-do:

TODO: Ability to crop left side only (Xexyz). Bart vs the space mutants?.

TODO: Mednafen: Standardize shortcuts for state saving and loading. TODO: Mednafen: Fix fill screen. TODO: Mednafen: Alt+A ? TODO: Mednafen: Allow gamepad instead of Arkanoid controller? TODO: Mednafen: 4-player support

TODO: RetroArch: Hide mouse cursor. TODO: RetroArch: Standardize shortcuts for warp mode. TODO: RetroArch: Standardize shortcuts for state saving and loading. TODO: RetroArch: Cheats for Nestopia? TODO: RetroArch: Alt+A ? TODO: RetroArch: Zapper support TODO: RetroArch: Arkanoid support TODO: RetroArch: 4-player support TODO: RetroArch: Smoother fullscreen launching

DONE: Mednafen: Bezel width does not scale with height? DONE: Mednafen: Default audio driver setup in Linux. DONE: Mednafen: Zapper support DONE: RetroArch: Start Nestopia with correct NES model. DONE: Define save directory layout. (More or less done) DONE: Mednafen: Implement better crop options (for cropping overscan). DONE: Mednafen: Fix bezel interfering with OSD. DONE: Database option for horizonal and vertical overscan crop. DONE: Launcher: iNES header widget?

NTSC vs PAL

Game variants in the openretro.org database generally use the NTSC model when the game is a USA or World release, Famicom if a Japanese-only release and PAL when the game is a European or Australian release.

NTSC is preferred for the world releases, since the NTSC refresh rate of approximately 60 Hz is the same as the majority of LCD panels, allowing for V-Sync when the system does not allow changing the refresh rate of the panel.

Input Ports

The default controller setup corresponds to these options:

nes_port_1_type = gamepad
nes_port_2_type = gamepad

To specify that only one controller is supported for a game:

nes_port_1_type = gamepad
nes_port_2_type = none

Gamepad plus Arkanoid controller:

nes_port_1_type = gamepad
nes_port_2_type = arkanoid

Four gamepad controllers (for e.g. Bomberman II):

nes_port_1_type = gamepad
nes_port_2_type = gamepad
nes_port_3_type = gamepad
nes_port_4_type = gamepad

The Arcade UI will hide ports 3 and 4 unless they are explicitly enabled, but will always show ports 1 and 2.

NES Four Score Adapter

FIXME:

Famicom 4-Players Adaptor:

ROM Headers (iNES)

FS Game System supports ROM images both with and without headers. In general, headerless ROMs are used for identification, but the game scanner will identify the ROMs regardless of header. And, depending on the emulator, the game system will either add and/or remove a ROM header, as needed.

The header data is specified using the nes_ines_header option. 16 bytes formatted as hexadecimals. Example:

nes_ines_header = 4e45531a080010000000000000000000

Save Directory Layout

Example for The Legend of Zelda (USA) (Rev A).nes (Stored in Data/Saves/UUID/70/70fb92d1-7499-5421-b90c-0fbfe28f30a5):

Save.ini
BE2F5DC8.srm
MAME/
  1.sta
Mednafen/
  BE2F5DC8.mc0
  BE2F5DC8.mc1
  BE2F5DC8.mc2
Mesen-LR/
  BE2F5DC8.state
Nestopia-LR/
  BE2F5DC8.state
  BE2F5DC8.state1
  BE2F5DC8.state2

The UUID is the variant UUID, and the base name for .srm and .state files (etc) is the first 8 hexadecimal letters of the (headerless) SHA-1 ROM checksum. In this example, both Mednafen-FS and RetroArch/Nestopia have saved three save states in addition to the save RAM file (.srm). MAME and RetroArch/Mesen have both one save state.

G-Sync