Difference between revisions of "NES 2.0 submappers"

From Nesdev wiki
Jump to: navigation, search
(MMC1: renumbered suggested replacement not to interfere with the existing assignments on kevtendo)
(Namco 129 / 163 / 175 / 340: May as well suggest something.)
Line 121: Line 121:
 
KH allocated a submapper specifically for the N163-using game Mindseeker. It is not known what is different about this game.
 
KH allocated a submapper specifically for the N163-using game Mindseeker. It is not known what is different about this game.
  
 +
<!-- Tentative suggestion:
 +
4: N163, mixed such that relative volume to 2A03 is correct when game uses 4 channels (mixing resistor: 15kΩ)
 +
8: N163, mixed such that relative volume to 2A03 is correct when game uses 8 channels (mixing resistor: 10kΩ)
 +
9: N129. Expansion audio is buggy relative to N163, but specifics are not known.
 +
10: N163 where expansion audio is completely bypassed
 +
11: N175 (hardwired mirroring, no IRQ)
 +
12: N340 (1/H/V mirroring, no IRQ)
 +
-->
 
Source: [http://blog.kevtris.org/blogfiles/nes/submappers.txt KH's submappers]
 
Source: [http://blog.kevtris.org/blogfiles/nes/submappers.txt KH's submappers]
  

Revision as of 19:25, 21 January 2013

Submapper is a term used in the NES 2.0 header for 4-bit codes designating functionally distinct variants of iNES mappers that cannot be distinguished by the memory size fields alone. Most emulators using iNES format distinguish these using CRC, SHA-1, or other hashes of the PRG ROM and CHR ROM, but this works only for games published prior to 1997, and not for new games on the same mapper.

As of early 2012, no submappers were officially defined, but in mid-2012, a drive to collect proposals began. One proposed general principle for backward compatibility is that submapper 0 be reserved for the default iNES behavior.

In September 2012, Kevin Horton finally published a few definitions.

MMC1

Status: Draft (still needs clarification)

Most MMC1 boards wire all PRG ROM address lines A14-A18 to the mapper's output in a fairly predictable manner. Boards with CHR RAM wire PRG ROM A18 and the PRG RAM address lines to otherwise unused CHR bank outputs. But among boards designed to take a 32 KiB PRG ROM, some (SIROM) connect PRG ROM A14 to the MMC1's output, others (SEROM, SHROM, SH1ROM) directly to CPU A14.

0: Normal
1: Normal (SUROM, redundant with ROM size)
2: 16 KiB like SOROM, selected by bit 4 instead of SOROM standard bit 3?
3: MMC1A, where $E000 bit 4 offers no write protection (used by The Money Game and a few others; sometimes assigned to iNES Mapper 155)
4: Normal (SXROM, redundant with ROM and RAM size)


Source: MMC1 submappers

MMC3

Status: Draft

No submapper of mapper 4 is needed to distinguish MMC3 from MMC6, as any board with MMC6-sized PRG RAM will behave like MMC6. But there are two general kinds of MMC3 IRQ: the old style, which disables the IRQ when the latch is loaded with 0, and the new style, which produces an IRQ on every scanline. Some newer games rely on the new style behavior.

0: Normal
1: MMC6-style PRG RAM enable
2: Hardwired mirroring


Source: MMC3 submappers

iNES Mapper 034

0: Normal (≤ 8KiB CHR implies BNROM, >8KiB CHR implies NINA-001)
1: Force NINA-001 behavior even with no CHR ROM

Source: KH's submappers

iNES Mapper 071

Some games use this with 1-screen mirroring, where the mapper's mirroring control bit is wired directly to CIRAM A10. Others have hardwired horizontal or vertical mirroring.

0: Normal
1: Single-screen mirroring (Fire Hawk)

The Quattro multicarts have been moved to mapper 232.

Source: KH's submappers

iNES Mapper 232

Similar to #71, with a separate register controlling which 64 KiB outer bank of the PRG ROM is used. This is used for the Quattro multicarts.

0: Normal
1: Swap the bits of the outer bank number (for the Aladdin Deck Enhancer versions)

iNES Mapper 078

One game uses this with 1-screen mirroring, where the mapper's mirroring control bit is wired directly to CIRAM A10. The other can switch between horizontal and vertical mirroring, using a multiplexer between PA10 and PA11 whose output is sent to CIRAM A10.

1: Single-screen mirroring
2: Hardwired mirroring (why is this an option?)
3: Mapper-controlled H/V mirroring

Source: KH's submappers

VRC4

Konami's VRC4 mapper has five known variations of how the board connects low CPU address lines among A7-A0 to the port select lines of the mapper. These are spread across three mappers: two for 21, two for 25, and one for 23. There are theoretically 8*7 = 56 ways to wire these, but in all five extant possibilities, two adjacent address lines are used: A2 and A1, A0 and A1, A7 and A6, A2 and A3, and A3 and A2. All 14 combinations of two adjacent address lines easily fit in a submapper number:

3210
||||
|+++- Which address line corresponds is wired to the A1 in the VRC4a
+---- 0: Use next lower address line for VRC4a A2; 1: use next higher line

The values 0 (A0 and next lower) and 15 (A7 and next higher) are impossible.

The VRC4 article describes the ports by mapping them to the variant called "VRC4a" on that page, which uses A2 and A1, putting the four VRC IRQ ports (IRQ Latch low, IRQ Latch high, IRQ Control, and IRQ Acknowledge) at $F000, $F002, $F004, and $F006.

Nickname A2 A1 Registers iNES mapper NES 2.0 submapper
VRC4a A2 A1 $x000, $x002, $x004, $x006 21 9
VRC4b A0 A1 $x000, $x002, $x001, $x003 25 1
VRC4c A7 A6 $x000, $x040, $x080, $x0C0 21 14
VRC4d A2 A3 $x000, $x008, $x004, $x00C 25 3
VRC4e A3 A2 $x000, $x004, $x008, $x00C 23 10

VRC2

Status: Draft

Mappers 23 and 25 are used for both Konami's VRC2 and VRC4. It is tentatively suggested that submapper 15 (invalid per the VRC4 definitions) be used to mark VRC2-using games, to handle the bit at $6000 and lack of interrupts.

Namco 129 / 163 / 175 / 340

Status: Problem outline

Mapper 19 designates the Namco 129 and 163, which supports expansion sound, IRQs, and ROM nametables. However, mapper 210 doesn't distinguish between the 175's hardwired mirroring and 340's 1/H/V mirroring. Also, previous confusion and compatibility code used by Namco when they were developing games means that many 175- and 340- using games are incorrectly tagged as mapper 19.

Furthermore, different 163-using PCBs also used a different resistor to change the relative volume of the expansion audio relative to the internal 2A03 audio. However, this resistance was chosen to match the number of wavetable channels the game used, so it is probably unnecessary to include in the submapper field.

KH allocated a submapper specifically for the N163-using game Mindseeker. It is not known what is different about this game.

Source: KH's submappers

AxROM

Status: Draft

AxROM is the only known mapper to unreliably come with bus conflict prevention circuitry. While no game documented in NesCartDB was released in one region on multiple board variants, several games did change boards when localized.

The following table is tentatively offered-
0: Normal (No advisory statement is made as to whether this game has bus conflicts) (uninvestigated AOROM)
1: Bus conflicts MUST NOT be enforced (ANROM)
2: Bus conflicts MUST be enforced (AMROM)