NROM: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
mNo edit summary
(per request at http://nesdev.parodius.com/bbs/viewtopic.php?p=58943#58943)
Line 21: Line 21:
== Registers ==
== Registers ==
None.
None.
== Programming considerations ==
NROM-128 is [[mirroring|mapped into both]] $C000-$FFFF and $8000-$BFFF.
Most games actually run in $C000-$FFFF rather than $8000-$BFFF because it makes the program easier to assemble and link.
Some kinds of data used by the NES CPU, such as the vectors and [[APU DMC|sampled sound]], have to be in $C000-$FFFF, and it simplifies the linker script if everything is in the same memory region.
There are probably a few games that rely on the mirroring, but experiments with [[Forbidden Four|a multicart engine]] show that most can run with garbage in $8000-$BFFF.


== Hardware ==
== Hardware ==

Revision as of 15:46, 24 March 2010

The generic designation NROM refers to the Nintendo cartridge boards NES-NROM-128, NES-NROM-256, their HVC counterparts, and clone boards. The iNES format assigns mapper 0 to NROM.

Overview

  • PRG ROM size: 16 KB for NROM-128, 32 KB for NROM-256 (DIP-28 standard pinout)
  • PRG ROM bank size: Not bankswitched
  • PRG RAM: None
  • CHR capacity: 8 KB ROM (DIP-28 standard pinout)
  • CHR bank size: Not bankswitched
  • Nametable mirroring: Solder pads select vertical or horizontal mirroring
  • Subject to bus conflicts: Yes

Banks

  • CPU $8000-$BFFF: First 16 KB of ROM
  • CPU $C000-$FFFF: Last 16 KB of ROM (NROM-256) or mirror of $8000-$BFFF (NROM-128)

Solder pad config

  • Horizontal mirroring : 'H' disconnected, 'V' connected.
  • Vertical mirroring : 'H' connected, 'V' disconnected.

Registers

None.

Programming considerations

NROM-128 is mapped into both $C000-$FFFF and $8000-$BFFF. Most games actually run in $C000-$FFFF rather than $8000-$BFFF because it makes the program easier to assemble and link. Some kinds of data used by the NES CPU, such as the vectors and sampled sound, have to be in $C000-$FFFF, and it simplifies the linker script if everything is in the same memory region. There are probably a few games that rely on the mirroring, but experiments with a multicart engine show that most can run with garbage in $8000-$BFFF.

Hardware

PRG ROM 256 kBit (32 KB x 8) (DIP-28) :

              ---_---
       +5V - |01   28| - +5V
       A12 - |02   27| - A14 (VCC on NROM-128)
       A7  - |03   26| - A13
       A6  - |04   25| - A8
       A5  - |05   24| - A9
       A4  - |06   23| - A11
       A3  - |07   22| - /OE (/ROMSEL)
       A2  - |08   21| - A10
       A1  - |09   20| - /CE (GND)
       A0  - |10   19| - D7
       D0  - |11   18| - D6
       D1  - |12   17| - D5
       D2  - |13   16| - D4
       GND - |14   15| - D3
              -------

CHR ROM 64 kBit (8 KB x 8) (DIP-28) :

              ---_---
       +5V - |01   28| - +5V
       A12 - |02   27| - VCC
       A7  - |03   26| - NC
       A6  - |04   25| - A8
       A5  - |05   24| - A9
       A4  - |06   23| - A11
       A3  - |07   22| - /OE (CHR /RD)
       A2  - |08   21| - A10
       A1  - |09   20| - /CE (CHR A13)
       A0  - |10   19| - D7
       D0  - |11   18| - D6
       D1  - |12   17| - D5
       D2  - |13   16| - D4
       GND - |14   15| - D3
              -------

RROM and SROM are NROM with different shuffled CHR ROM pinouts. HROM is an early NROM variant without the solder pads to select mirroring, only vertical mirroring available (as if the 'H' pad were selected).

EPROM Modifications

No modifications nessesary.

Variants

NROM operates identically to a CNROM with one CHR bank.

Family Basic, released by Nintendo, Sharp, and Hudson, contains 8 KB WRAM accessible at $6000-$7FFF, that is (whole or partially?) backed with 2 AA batteries. The cartridge is equipped with a back up switch that, when enabled, write-protects WRAM area $6000-$6FFF to prevent possible data corruption if the Famicom is turned on or off.