NES 2.0 submappers/Proposals

From NESdev Wiki
Revision as of 10:15, 8 June 2017 by AWJ (talk | contribs) (Clarify that the "single bit of memory mapped at $6000-6FFF" is only on one PCB, not all VRC2)
Jump to navigationJump to search

This page collects proposals for NES 2.0 submappers that are not yet ready for implementation.

  1. Explain what game or ROM is incompatible with existing submappers.
  2. Explain how the proposed submapper should be implemented.
  3. Allow one or more other members of the community to independently verify that both 1 and 2 are correct. (We'll perform peer review, commentary, and possible revision/iteration here.)
  4. Allocate and document the new submapper, listing the relevant game/ROM.

When allocating new submappers, please consult kevtris' original proposal before choosing a number. If it is something he already assigned that we have just not adopted yet, use his existing assignment: submappers.txt

If there is no existing game or ROM that requires a submapper, it should not yet be allocated. There is no end to possible variations of hardware, and there is no need to speculate on the future. If you want to work on a project that will require a new mapper, engage the community and/or seek help from others. Do not pre-emptively add a new mapper to the spec until there is something we can run with it. The spec will still be here when you're finished your project.


021, 023, 025: VRC2 / VRC4

these submappers are fully specified, allocation is pending the existence of test ROMs

These three mappers collect various configurations of VRC2 and VRC4 boards.

VRC2 is mostly a subset of VRC4, with differences including:

  • VRC2 has a serial EEPROM interface which no Konami game ever connected an actual EEPROM to, but one PCB is wired so that it functions as a single bit of memory mapped at $6000-6FFF[1]
  • VRC4 supports horizontal, vertical and one-screen nametable mirroring while VRC2 supports only horizontal and vertical mirroring[2]
  • VRC4 supports two PRG ROM banking modes, similar to MMC3's. VRC2 only has one PRG ROM banking mode.
  • VRC4 has an interrupt device that VRC2 does not.

Additionally, different boards connect the address lines for the registers in various arrangements. The three iNES mappers 21, 23, and 25 each combine multiple boards whose addresses overlap. This is enough for game compatibility, but it creates an ugly combination that does not accurately describe the original hardware of either board.

Submapper assignment

Konami's VRC2 and VRC4 mappers have several variations of how the board connects low CPU address lines among A7-A0 to the port select lines of the mapper. Mappers 21, 23 and 25 each combine two non-overlapping addressing variations, and neglect to specify VRC2 vs VRC4.

Mapper 22 is related, but only supports one variation (VRC2a) and has a different CHR banking arrangement than the others. It does not require submapper disambiguation.

There are three variations of the VRC2 boards:

Nickname A2 A1 Registers iNES mapper NES 2.0 submapper
VRC2a A1 A0 $x000, $x002, $x001, $x003 22 0
VRC2b A0 A1 $x000, $x001, $x002, $x003 23 3
VRC2c A1 A0 $x000, $x002, $x001, $x003 25 3
Nickname A2 A1 Registers iNES mapper NES 2.0 submapper
VRC4a A2 A1 $x000, $x002, $x004, $x006 21 1
VRC4b A0 A1 $x000, $x002, $x001, $x003 25 1
VRC4c A7 A6 $x000, $x040, $x080, $x0C0 21 2
VRC4d A2 A3 $x000, $x008, $x004, $x00C 25 2
VRC4e A3 A2 $x000, $x004, $x008, $x00C 23 2
VRC4f A1 A0 $x000, $x001, $x002, $x003 23 1

This submapper assigment uses the following symmetrical arrangement:

  • 0. Both addressing
  • 1. Lower addressing, VRC4
  • 2. Higher addressing, VRC4
  • 3. Lower addressing, VRC2 (no known examples for mapper 21)
  • 4. Higher addressing, VRC2 (no known examples)

021 / 023 / 025: 0

The default implementation acts as a VRC4 (mostly compatible superset of VRC2), and responds to register writes in one or more configurations simultaneously (supporting both boards at once).

021 / 023 / 025: 1, 2 VRC4

These allocations each request a single specific addressing scheme for VRC4, rather than the combined version used by submapper 0.

Test ROMs:

  • 021: 1 VRC4a - please create a test ROM before allocating this submapper
  • 025: 1 VRC4b - please create a test ROM before allocating this submapper
  • 021: 2 VRC4c - please create a test ROM before allocating this submapper
  • 025: 2 VRC4d - please create a test ROM before allocating this submapper
  • 023: 2 VRC4e - please create a test ROM before allocating this submapper
  • 023: 1 VRC4f - please create a test ROM before allocating this submapper

023: 1 VRC4f

Some unlicensed games used a second-source VRC4 clone with register addressing identical to VRC2b (the simplest contiguous in-order interpretation: 0,1,2,3). This was used in World Hero.

Test ROM:

  • please create a test ROM before allocating this submapper

023: 3 VRC2b

Games on PCB 350926 (and its chip-on-board equivalents) rely on a single bit of RAM mapped in the region from $6000-$6FFF. Prior to NES 2.0, these games were supported by implementing WRAM in this region (despite this board not having WRAM). This board was used in Contra (J), Ganbare Goemon 2 and Konami Wai Wai World.

There are other VRC2 boards with the same register addressing as 350926 but without this feature ($6000-$6FFF is effectively open bus on them), but no game relies on the lack of the single bit of memory, so a separate submapper has not been allocated for them. These boards were used in Dragon Scroll, Getsu Fuuma Den, and Jarinko Chie.

Since this submapper represents VRC2, it should not implement the VRC4-only one-screen mirroring, PRG ROM banking modes, or IRQ capabilities. Wai Wai World depends on the lack of one-screen mirroring; it will have corrupt backgrounds in the vertically-scrolling stages and the ending if emulated with VRC4 capabilities.

Test ROM:

  • please create a test ROM before allocating this submapper

025: 3 VRC2c

Ganbare Goemon Gaiden: Kieta Ougon Kiseru uses the same register addressing as VRC4b, but is VRC2, so this submapper should not implement VRC4-only capabilities.

Test ROM:

  • please create a test ROM before allocating this submapper

005: MMC5

Status: Wishlist

Vertical split mode:
0: SL (all known hardware)
1: CL

If only one kind (battery or non-battery) of PRG-RAM present:
0: PRG-RAM is contiguous (EKROM, EWROM)
2: PRG-RAM is not contiguous; is split in half across two chips

If both kinds of PRG-RAM present:
0: Chip 0 is battery-backed (ETROM (note: verify this))
2: Chip 1 is battery-backed

Pulse waves volume:
0: R1 is 6.8kΩ (as in all games that use expansion audio)
4: R1 is 15kΩ (the nominal value of this resistor)

It is safe to leave the submapper number at 0 for all known games.

016: Bandai FCG boards

KH assigned the following redundant submappers. All are deprecated in favor of using the actual mapper numbers and/or NVRAM size field.

0: iNES Mapper 153 (SRAM)
1: iNES Mapper 157 (Datach)
2: iNES Mapper 159 (128B EEPROM)
3: "Normal" iNES Mapper 016 behavior. (256B or no EEPROM)

019: Namco 129 and 163

Status: Problem outline

Mapper 19 designates the Namco 129 and 163, which supports 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:
Mapper 19:
1: KH assigned to Mindseeker. Specifics unknown. Deprecated until such time as sufficient documentation is made.
2: N163, expansion audio unused (mixing resistor: 0Ω)
3: N163, mixing resistor: 4.7kΩ
4: N163, mixing resistor: 10kΩ
5: N163, mixing resistor: 15kΩ
9: N129. Expansion audio is known buggy relative to N163, but other differences are not known.

Source: KH's submappers

083: Cony

There's actually three different versions of the hardware, all assigned to the same mapper.

Unfortunately, we have no idea which is which.

Here's Kevtris's assignments:

083: 0

"Bog-standard Cony mapper. 1K CHR ROM banks, no WRAM."

083: 1

"Same, but with 2K CHR ROM banks instead."

083: 2

"This is the standard Cony mapper with the following changes:

  1. 1K CHR ROM banks (like 83.0)
  1. a 4 bit 256K CHR/PRG bank select register:
    • B000h: bits 6 and 7 select the 256K superbank
  1. 1 byte of RAM at 5103h (stores the last game played) Game will not start without this RAM byte.
  1. WRAM at 6000-7FFFh. WRAM is banked with the PRG/CHR superbank. This gives a total of 32K. It is battery backed.

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.


On second thought, lidnariq would be happier with

3210
xxCC
||||
|||+- Bit 0 (bank number)
||+-- Bit 1 (bank number)
++--- Always "01", so that submapper 0 (use heuristic) doesn't collide with "write 0 for correct operation"

References

  1. http://forums.nesdev.org/viewtopic.php?t=8274 VRC2 memory bit at $6000-$6FFF
  2. http://forums.nesdev.org/viewtopic.php?t=13473 VRC2 mirroring selection tested on hardware
  • Atari Age forum post - Kevtris' Analogue NT Mini firmware notes including a slightly updated submapper list.