Pulsar, SXROM and NES 2.0 Emulators

Update 14/01/11: The latest development build of Nintendulator now properly supports NES2.0 format and both Pulsar and PR8 seem to run fine. See here


The Problem?

In order to help NES emulator authors to update their code so that Pulsar (and PR8) will run on them properly I decided to try to put together this post to explain what the issues are.

iNES vs NES 2.0

It all centres around the extension to the iNES ROM header format which was proposed in 2006 by Kevin Horton and labelled ‘NES 2.0′. Amongst other issues, this extension allowed for the specification of the size of the WRAM (batter-backed RAM) via byte 10 of the NES 2.0 header (see section 2.5 of the wiki article);

Byte 10:
7       0
---------
pppp PPPP

p: Quantity of PRG RAM which is battery backed
P: Quantity of PRG RAM which is NOT battery backed

SXROM

Pulsar and PR8 both require 32KB of battery-backed RAM and SXROM seems to be the only configuration that allows this. SXROM is MMC1-based and is a combination of SOROM and SUROM, addressing both 512KB of PRG ROM and 32KB of PRG RAM according to this wiki article.

Please note: don’t confuse SxROM with SXROM. SxROM (with a small ‘x’) is referring to the S- group of board/ROM configurations whereas SXROM (with a capital ‘X’) refers to a specific configuration.

From an emulator point-of-view, what needs to be supported in order for Pulsar to work is the WRAM bank-switching. WRAM is always accessed at address $6000-$7FFF (8KB) and therefore when using WRAM larger than 8KB, the WRAM is split into 8KB banks and MMC1 R1 needs to be employed to switch those banks via bits 3-2:

4bit0
-----
PSSxC
||| |
||| +- Select 4 KB CHR RAM bank at PPU $0000
|++--- Select 8 KB PRG RAM bank
+----- Select 256 KB PRG ROM bank

Current Support

To my knowledge, only two platforms correctly support this configuration. Nestopia (emulator) and PowerPak (development cartridge for use on NES hardware – though you do need the mapper update supplied with Pulsar and PR8).

Hopefully there is enough information here to allow other emulators to be updated.

Please use this post as a place to post questions or more/clearer/correct information.

Neil

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>