SXROM: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(PRG RAM size detection)
(→‎Registers: reference to MMC3's scanline counter)
Line 41: Line 41:
  +----- Select 256 KB PRG ROM bank (ignored in 8 KB mode)
  +----- Select 256 KB PRG ROM bank (ignored in 8 KB mode)


Note: In 4KB CHR bank mode, the <code>P</code> and <code>S</code> bits in both CHR bank registers must be set to the same value, or the PRG ROM/RAM will be bankswitched as the PPU renders, causing disastrous results. As there is not much of a reason to use 4 KB bankswitching with CHR RAM, it is wise for programs to just set 8 KB bankswitching mode in the [[MMC1#Control (internal, $8000-$9FFF)|Control register]].
In 4KB CHR bank mode, the <code>P</code> and <code>S</code>bits in both CHR bank registers must be set to the same values, or the PRG ROM and/or RAM will be bankswitched as the PPU renders, in a similar fashion as [[MMC3#Hardware|MMC3]]'s scanline counter. As there is not much of a reason to use 4 KB bankswitching with CHR RAM, it is wise for programs to just set 8 KB bankswitching mode in the [[MMC1#Control (internal, $8000-$9FFF)|Control register]].

Revision as of 10:02, 16 October 2010

SXROM (HVC-SXROM) is one of the less common boards within the SxROM subset. Like other SxROM boards, SXROM uses the Nintendo MMC1 ASIC, but because it always uses CHR RAM, it uses three spare CHR address lines to select between two 256 kb PRG ROM banks, and four 8kb PRG RAM banks letting the program access up to 512 kb of PRG ROM and 32 KB of PRG RAM at once. To keep things simple, it is in some sort a combination of SUROM and SOROM.

It should be noted that only Japanese HVC-SXROM boards have ever been produced, so this board has no 72-pin "NES-SXROM" counterpart.

It is recommended that ROM images of SXROM games be stored in NES 2.0 format to allow an emulator to distinguish them from SNROM or SUROM.

Overview

  • PRG ROM size: 128, 256 or 512 KB (DIP-28/32 Nintendo pinout)
  • PRG ROM bank size: 16 KB or 32 KB
  • PRG RAM: 32 KB + battery
  • CHR capacity: 8 KB RAM
  • CHR bank size: 8 KB or 4 KB
  • Nametable mirroring: Controlled by mapper
  • Subject to bus conflicts: No

Solder pad config

  • PRG RAM retaining data : 'SL1' disconnected, Battery, D1, D2, R1 and R2 present.
  • PRG RAM not retaining data : 'SL1' connected, leave slots for Battery, D1, D2, R1 and R2 free.

Hardware

This particular board uses a 74HCU04 (hex inverter) to invert and buffer the enable signals from the MMC1, and that inverter is also battery backed just like the SRAM, so that the SRAM protection on power down is greatly improved (however, the current drawn by the battery is significantly supperior to other cartridges, so the battery may run out faster).

Registers

The behavior of this board differs from that of a typical MMC1 board in the use of the upper CHR address lines:

CHR bank 0 (internal, $A000-$BFFF)

4bit0
-----
PSSxC
||| |
||| +- Select 4 KB CHR RAM bank at PPU $0000 (ignored in 8 KB mode)
|++--- Select 8 KB PRG RAM bank
+----- Select 256 KB PRG ROM bank

CHR bank 1 (internal, $C000-$DFFF)

4bit0
-----
PSSxC
||| |
||| +- Select 4 KB CHR RAM bank at PPU $1000 (ignored in 8 KB mode)
|++--- Select 8 KB PRG RAM bank (ignored in 8 KB mode)
+----- Select 256 KB PRG ROM bank (ignored in 8 KB mode)

In 4KB CHR bank mode, the P and Sbits in both CHR bank registers must be set to the same values, or the PRG ROM and/or RAM will be bankswitched as the PPU renders, in a similar fashion as MMC3's scanline counter. As there is not much of a reason to use 4 KB bankswitching with CHR RAM, it is wise for programs to just set 8 KB bankswitching mode in the Control register.