NES 2.0 submappers/Proposals: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Clarify that the "single bit of memory mapped at $6000-6FFF" is only on one PCB, not all VRC2)
(updating status for all of these)
 
(18 intermediate revisions by 5 users not shown)
Line 10: Line 10:
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.
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.


== 005: [[MMC5]] ==


== [[iNES Mapper 021|021]], [[iNES Mapper 023|023]], [[iNES Mapper 025|025]]: [[VRC2]] / [[VRC4]] ==
Status: MMC5A is unimplemented in emulators, and all existing games are also valid as MMC5. Seems to be de-facto low priority.
 
'''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<ref>http://forums.nesdev.org/viewtopic.php?t=8274 VRC2 memory bit at $6000-$6FFF</ref>
* VRC4 supports horizontal, vertical and one-screen nametable mirroring while VRC2 supports only horizontal and vertical mirroring<ref>http://forums.nesdev.org/viewtopic.php?t=13473 VRC2 mirroring selection tested on hardware</ref>
* 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 [[iNES Mapper 021|21]], [[iNES Mapper 021|23]] and [[iNES Mapper 021|25]] each combine two non-overlapping addressing variations, and neglect to specify VRC2 vs VRC4.
 
Mapper [[iNES Mapper 021|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:
{| class="tabular"
! Nickname || A2 || A1 || Registers || iNES mapper || NES 2.0 submapper
|-
| VRC2a || A1 || A0 || $x000, $x002, $x001, $x003 || [[iNES Mapper 022|22]] || 0
|-
| VRC2b || A0 || A1 || $x000, $x001, $x002, $x003 || 23 || 3
|-
| VRC2c || A1 || A0 || $x000, $x002, $x001, $x003 || 25 || 3
|}
 
{| class="tabular"
! 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 ===
=== 005: 0 ===
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 ''[http://bootgod.dyndns.org:7777/profile.php?id=3986 Contra (J)]'', ''[http://bootgod.dyndns.org:7777/profile.php?id=1568 Ganbare Goemon 2]'' and ''[http://bootgod.dyndns.org:7777/profile.php?id=2274 Konami Wai Wai World]''.
MMC5


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 ''[http://bootgod.dyndns.org:7777/profile.php?id=3802 Dragon Scroll]'', ''[http://bootgod.dyndns.org:7777/profile.php?id=2276 Getsu Fuuma Den]'', and ''[http://bootgod.dyndns.org:7777/profile.php?id=2278 Jarinko Chie]''.
=== 005: 1 ===
MMC5A


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.
MMC5A is a known variant of the chip with some added features. However, all existing games with MMC5A also appear to have existed with MMC5. Nothing deliberately uses these features, but behaviour of a bug could differ by the selected chip.


Test ROM:
=== Bitfield Wishlist ===
* '''please create a test ROM before allocating this submapper'''


=== 025: 3 VRC2c ===
A previous proposal included this wishlist to use it as a bitfield for other mapper configurations that were never used in games. With the discovery of MMC5A variations, there can no longer enough bits to accommodate all of these.
''[http://bootgod.dyndns.org:7777/profile.php?id=3823 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: <br>
Vertical split mode: <br>
Line 115: Line 36:
If both kinds of PRG-RAM present: <br>
If both kinds of PRG-RAM present: <br>
0: Chip 0 is battery-backed (ETROM (note: verify this)) <br>
0: Chip 0 is battery-backed (ETROM (note: verify this)) <br>
2: Chip 1 is battery-backed <br>
4: Chip 1 is battery-backed <br>


Pulse waves volume: <br>
Pulse waves volume: <br>
0: R1 is 6.8kΩ (as in all games that use expansion audio) <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>
8: R1 is 15kΩ (the nominal value of this resistor) <br>


It is safe to leave the submapper number at 0 for all known games.
== 070: Bandai UNROM/GNROM hybrid ==
Status: Problem outline, needs followup?


== 016: [[Bandai FCG board]]s ==
There is [https://forums.nesdev.org/viewtopic.php?t=16916 a report] of a pirate copy of a game that seems to want mapper 70 without bus conflicts, even though Bandai's original hardware should have them.
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)<br/>
Tentatively, we could use the same submappers as those standardized for mappers 2, 3, & 7.
1: [[iNES Mapper 157]] (Datach)<br/>
2: [[iNES Mapper 159]] (128B EEPROM)<br/>
3: "Normal" [[iNES Mapper 016]] behavior. (256B or no EEPROM)
 
== 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: KH assigned to Mindseeker. Specifics unknown. Deprecated until such time as sufficient documentation is made.<br/>
2: N163, expansion audio unused (mixing resistor: 0Ω)<br/>
3: N163, mixing resistor:  4.7kΩ<br/>
4: N163, mixing resistor: 10kΩ<br/>
5: 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]


== [[iNES Mapper 083|083]]: Cony ==
== [[iNES Mapper 083|083]]: Cony ==
There's actually three different versions of the hardware, all assigned to the same mapper.
Status: Needs documentation of affected games and implementation testing.


Unfortunately, we have no idea which is which.
"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:
Kevtris's assignments:
=== 083: 0 ===
=== 083: 0 ===
"Bog-standard Cony mapper.  1K CHR ROM banks, no WRAM."
"Bog-standard Cony mapper.  1K CHR ROM banks, no WRAM."
Line 175: Line 73:
# WRAM at 6000-7FFFh.  WRAM is banked with the PRG/CHR superbank.  This gives a total of 32K.  It is battery backed.
# 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]] ==
== [[iNES Mapper 086|086]]: Jaleco JF-13 ==
Status: Draft
Status: Needs documentation of behaviour differences and chip emulation, a way to dump sample data for emulatable ROMs, and relevant games.
 
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 (<tt>submapper = (latch&0x30)/4+(latch&3)</tt>)


<pre>
There is a bootleg variant that uses a UM5100 (DPCM) instead of µPD7756C (ADPCM).
3210 
||||
|||+- Bit 0 (bank number)
||+-- Bit 1 (bank number)
|+--- Bit 4 (diode config)
+---- Bit 5 (diode config)
</pre>


In the case that any of the bits are "don't care", use 0.
=== 086: 0 ===
Uses µPD7756C (Standard).


----
=== 086: 1 ===
On second thought, lidnariq would be happier with
Uses UM5100 (Bootleg).
<pre>
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"
</pre>


== References ==
== References ==
<references />
<references />
* [http://atariage.com/forums/topic/242970-fpga-based-videogame-system/?p=3687219 Atari Age forum post] - Kevtris' Analogue NT Mini firmware notes including a slightly updated submapper list.
* [http://atariage.com/forums/topic/242970-fpga-based-videogame-system/?p=3687219 Atari Age forum post] - Kevtris' Analogue NT Mini firmware notes including a slightly updated submapper list.

Latest revision as of 19:09, 18 January 2023

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.

005: MMC5

Status: MMC5A is unimplemented in emulators, and all existing games are also valid as MMC5. Seems to be de-facto low priority.

005: 0

MMC5

005: 1

MMC5A

MMC5A is a known variant of the chip with some added features. However, all existing games with MMC5A also appear to have existed with MMC5. Nothing deliberately uses these features, but behaviour of a bug could differ by the selected chip.

Bitfield Wishlist

A previous proposal included this wishlist to use it as a bitfield for other mapper configurations that were never used in games. With the discovery of MMC5A variations, there can no longer enough bits to accommodate all of these.

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))
4: Chip 1 is battery-backed

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

070: Bandai UNROM/GNROM hybrid

Status: Problem outline, needs followup?

There is a report of a pirate copy of a game that seems to want mapper 70 without bus conflicts, even though Bandai's original hardware should have them.

Tentatively, we could use the same submappers as those standardized for mappers 2, 3, & 7.

083: Cony

Status: Needs documentation of affected games and implementation testing.

"There's actually three different versions of the hardware, all assigned to the same mapper. Unfortunately, we have no idea which is which."

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.

086: Jaleco JF-13

Status: Needs documentation of behaviour differences and chip emulation, a way to dump sample data for emulatable ROMs, and relevant games.

There is a bootleg variant that uses a UM5100 (DPCM) instead of µPD7756C (ADPCM).

086: 0

Uses µPD7756C (Standard).

086: 1

Uses UM5100 (Bootleg).

References

  • Atari Age forum post - Kevtris' Analogue NT Mini firmware notes including a slightly updated submapper list.