NES 2.0 submappers: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(revising lead, relegating history to references section, adding prominent link to new proposals article)
(migrating proposals that are not ready for implementation to NES 2.0 submappers\Proposals)
Line 29: Line 29:


CNROM with security diodes (mapper 185) has a different set of submapper definitions.
CNROM with security diodes (mapper 185) has a different set of submapper definitions.
== 004: MMC3 ==
Status: Draft
[[iNES Mapper 004]] represents the most common boards using these four ICs: early [[MMC3]], late MMC3, MC-ACC, and [[MMC6]].
There are three known kinds of IRQ:
;MMC3A:/IRQ is asserted on A12 rise, and loading the latch with 0 disables IRQ. Some chips labeled MMC3B also have this "old style" behavior. No games are known to rely on this behavior.
;MMC3C:/IRQ is asserted on A12 rise, and loading the latch with 0 produces an IRQ on every scanline. Some chips labeled MMC3B also have this "new style" behavior, as does the MMC6. Some later games rely on this behavior.
;MC-ACC:/IRQ is asserted on A12 fall, typically four pixels later than MMC3C. Interrupts can be produced every scanline, like the MMC3C. Found on second-source PCBs manufactured by Acclaim.
There are two known kinds of PRG RAM enable:
;MMC3: One set of enable bits controls the entire chip.
;MMC6: The first and second enables control the first and second half of PRG RAM, and an additional enable in bit 5 of $8000 controls the whole PRG RAM.
The [[TxROM|TEROM and TFROM]] boards have two jumpers that can respectively disable IRQs and force hard-wired mirroring. It is believed that nothing was ever released that used them.
Source: [http://blog.kevtris.org/blogfiles/nes/submappers.txt MMC3 submappers]; [http://forums.nesdev.org/viewtopic.php?p=128148#p128148 MC-ACC IRQ test results]; [http://forums.nesdev.org/viewtopic.php?p=152507#p152507 rainwarrior makes a case for MMC6 getting its own code
== 005: [[MMC5]] ==
Status: Wishlist
Vertical split mode: <br>
0: SL (all known hardware) <br>
1: CL <br>
If only one kind (battery or non-battery) of PRG-RAM present: <br>
0: PRG-RAM is contiguous (EKROM, EWROM) <br>
2: PRG-RAM is not contiguous; is split in half across two chips <br>
If both kinds of PRG-RAM present: <br>
0: Chip 0 is battery-backed (ETROM (note: verify this)) <br>
2: Chip 1 is battery-backed <br>
Pulse waves volume: <br>
0: R1 is 6.8kΩ (as in all games that use expansion audio) <br>
4: R1 is 15kΩ (the nominal value of this resistor) <br>
It is safe to leave the submapper number at 0 for all known games.
== 019: Namco 129 and 163 ==
Status: Problem outline
[[iNES Mapper 019|Mapper 19]] designates the [[Namco 163|Namco 129 and 163]], which supports [[Namco 163 audio|expansion sound]], IRQs, and ROM nametables.
Different 163-using PCBs used a different resistor to change the volume of the expansion audio relative to the internal 2A03 audio. It is unclear if this variation warrants a submapper.
KH allocated a submapper specifically for the N163-using game Mindseeker. It is not known what is different about this game.
<!-- Tentative suggestion:<br/>
Mapper 19:<br/>
1: N163, expansion audio unused (mixing resistor: 0Ω)<br/>
2: N163, mixing resistor:  4.7kΩ<br/>
3: N163, mixing resistor: 10kΩ<br/>
4: N163, mixing resistor: 15kΩ<br/>
9: N129. Expansion audio is known buggy relative to N163, but other differences are not known.<br/>
-->
Source: [http://blog.kevtris.org/blogfiles/nes/submappers.txt KH's submappers]
== 021, 023, 025: 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 [[iNES Mapper 021|21]], two for [[iNES Mapper 025|25]], and one for [[iNES Mapper 023|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:
<pre>
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
</pre>
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.
{| class="tabular"
! 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
|}
== 023, 025: VRC2 ==
Mappers [[iNES Mapper 023|23]] and [[iNES Mapper 025|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.
Neither divides CHR bank select by two, unlike [[INES Mapper 022|#22]].
* 23.15 is VRC2 ($xxx0, $xxx1, $xxx2, $xxx3)
* 25.15 is VRC2 ($xxx0, $xxx2, $xxx1, $xxx3)


== [[iNES Mapper 032|032: Irem G101]] ==
== [[iNES Mapper 032|032: Irem G101]] ==

Revision as of 15:00, 7 August 2015

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, not for fan translations or ROM hacks, and not for new games on the same mapper.

Submapper 0 represents the default iNES behavour, so that backward compatibility is maintained.

This document is a living specification. Proposals for new submappers should be made at: Proposals.

001: MMC1

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 behavior. The PRG ROM size and PRG RAM size determine the function of bits.
1, 2, 4: As 0. Deprecated in favor of 0. (In the Kevtendo, 1 meant SUROM, 2 meant SOROM, and 4 meant SXROM. Since then, the community standardized on using size fields instead.)
3: Treat bit 4 of the PRG bank field as always 0 instead of using it to disable PRG RAM. Deprecated in favor of iNES Mapper 155 so that ROM images stay reasonably compatible with emulators that do not understand NES 2.0.
5: SEROM, SHROM, SH1ROM style: PRG ROM A14 connected directly to CPU A14 (and MMC1 A14 input) instead of MMC1 A14 output. Ignore MMC1 A14, ignore LSB of PRG bank, weird behavior of switchable PRG bank if PRG > 32KiB.

002, 003, 007: UxROM, CNROM, AxROM

Status: Draft

AxROM (mapper 7) is the only known licensed discrete logic 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 do not occur (ANROM)
2: Bus conflicts occur (AMROM)

Although all Nintendo-manufactured games using normal CNROM (mapper 3), normal UxROM (mapper 2), and inverted UxROM (mapper 180) had bus conflicts, apparently several unlicensed games require their absence, as does the updated version of Donkey Kong with the pie factory level.[1] This same table should be used for them, too.

CNROM with security diodes (mapper 185) has a different set of submapper definitions.

032: Irem G101

Status: Draft

Major League requires hardwired one-screen mirroring and entirely ignores writes to $9000.

0: Normal (H/V mapper-controlled mirroring)
1: CIRAM A10 is tied high (fixed one-screen mirroring) and PRG banking style is fixed as 8+8+16F

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

068 : Sunsoft 4

Status: Draft

In addition to its normal function, the Sunsoft 4 IC was used in Nantettatte!! Baseball which requires different PRG behavior:

The following table is tentatively offered-
0: Normal (max 256KiB PRG)
1: Sunsoft Dual Cartridge System a.k.a. NTB-ROM (max 128KiB PRG, licensing IC present, external option ROM of up to 128KiB should be selectable by a second menu)

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 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 PPU A10 and PPU A11 whose output is sent to CIRAM A10.

0: Not specified
1: Single-screen mirroring (nibble-swapped mapper 152)
2: Ignore mapper output and use fixed V/H/4 mirroring (effectively nibble-swapped mapper 70; not used in commercial games; deprecated)
3: Mapper-controlled H/V mirroring

Source: KH's submappers

iNES Mapper 185

Status: Draft

A few NROM-like games were released on CNROM boards where all four bits of the latch were solely used as an anti-piracy measure. While a documented heuristic exists for which values were used, we tentatively suggest that the submapper here indicate the value to be written to the latch for normal operation (submapper = (latch&0x30)/4+(latch&3))

3210  
||||
|||+- Bit 0 (bank number)
||+-- Bit 1 (bank number)
|+--- Bit 4 (diode config)
+---- Bit 5 (diode config)

In the case that any of the bits are "don't care", use 0.

210: Namco 175 and 340

Status: Draft

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.

Tentative suggestion:
Mapper 210:
0: No advisory statement is made (use runtime heuristics)
1: N175 (hardwired mirroring, no IRQ)
2: N340 (1/H/V mirroring, no IRQ, no internal or external RAM)

Source: KH's submappers

iNES Mapper 232

Similar to #71 above, 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)

References