NES 2.0 Mapper 296
NES 2.0 Mapper is used for consoles using VT3x hardware, which is mostly compatible hardware to the earlier VT0x and VT1x consoles, but adds an outer bank register and extended support for legacy mappers. While the original OneBus hardware only has MMC3-compatible registers, this type can directly emulate CNROM, UNROM and MMC1 behavior as well.
A non-exhaustive list of notable consoles using this mapper:
- FC Pocket RS-20
- dreamGEAR My Arcade Gamer V
- Retro Station NX-85
7654 3210
---------
.... .CMM
|++- Select legacy mapper to emulate in the $8000-$FFFF range
| 0: MMC3
| 1: MMC1
| 2: UNROM
| 3: CNROM
+--- Select CHR memory type
0: CHR-ROM (banked)
1: CHR-RAM (unbanked)
7654 3210
---------
cc.. .C.C
|| +-+- 00: Disable CPU opcode encryption after the next JMP instruction
|| 11: Enable CPU opcode encryption after the next JMP instruction
++-------- 00: Disable CHR data encryption
11: Enable CHR data encryption
- When CPU encryption is active, CPU opcode bytes only are XORed with $A1.
- When CHR data encryption is active, CHR data bytes’ bits 0 and 4, 1 and 2, 3 and 7, and 5 and 6 are swapped.
7654 3210
---------
.... cpCP
|||+- PRG A25 (32 MiB)
||+-- CHR A25 (32 MiB)
|+--- PRG A26 (64 MiB)
+---- CHR A26 (64 MiB)
7654 3210
---------
.... ...B
+- PRG/CHR A27 (128 MiB)
Expansion sound involves two simultaneous linear 8 bit unsigned PCM channels which just keep playing from their current address until byte $FF is encountered. Note that the address (excluding bits 0-5) is programmed directly and not relative to other bankswitching registers except the 32 MiB outer bank. The playback rate is set using the normal $4010 register bits 0-3.
Selects the channel to which the next writes to $4012, $4035 and $4036 will apply, and sets its linear volume (0-255).
7654 3210
---------
E..0 1...
| | +---- 1=Enable channel 1
| +------ 1=Enable channel 0
+--------- 1=Enable expansion sound
Note that the order of the channel bits is reversed from $4014 (see below).
These registers can only be accessed if expansion sound is enabled (via $4033 bit 7, otherwise it $4012 will go to the regular DPCM channel register), and if the selected channel has been disabled via the respective bit in $4033, otherwise the write will be ignored.
7654 3210
---------
.... ..10
|+- 1=Channel 0 still playing
+-- 1=Channel 1 still playing
These bits can be used to detect when a sample has finished playing (having encountered byte $FF) in order to restart it. Once a sample has finished playing, these bits return zero, and the channels are no longer enabled. Note that the FC Pocket RS-20 menu apparently confuses the two channel bits and continuously writes to restart the background music, which however does not actually occur because the hardware blocks accesss to the playback address registers while the sample is still playing.
While the original VT03+ Enhanced Palette uses four bits each for hue, saturation and luminance, the VT3x 12-bit palette simply directly encodes 4-bit RGB values:
BA98 7654 3210
--------------
BBBB GGGG RRRR
|||| |||| ++++- Red level (0-15)
|||| ++++------ Green level (0-15)
++++----------- Blue level (0-15)
The dreamGEAR My Arcade Gamer V ROM contains a few games that were previously published on VT03 ROMs. When converting these games to VT3x, the developers apparently forgot to change a few colors to the new format, resulting in some elements using strange color combinations even on real hardware (e.g. the waterfall in Curly Monkey).