INES Mapper 176: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (use interwiki link)
(Rewrite)
Line 1: Line 1:
[[Category:iNES Mappers|176]]
[[Category:iNES Mappers|176]]
Mapper 176 is used by some Chinese games by [[wikia:c:bootleggames:Fuzhou_Waixing_Computer_Science_%26_Technology_Co.,LTD|Waixing]] (aka WXN). At one point, FCEUX by way of fceumm rewired mapper 176 to be handled by the BMCFK23C board but it is unclear what that means. Hacked builds of VirtuaNesEX and Nestopia acquired support for this mapper, at least so far as to emulate "水浒神兽" (''Shui Hu Shen Shou'', Waixing ES-1087; literally "Water Margin Animal"; appears to be a ''Pokémon''-style RPG). FCEUX supposedly acquired support for it in r2519 by reimplementing the mapper and getting BMCFK23C out of the picture.
Mapper 176 is used by FK23C- and FK23CA-based multicarts as well as the re-releases of Waixing games that were originally released on boards using a variety of mappers. Being primarily designed for multicarts, it consists of an MMC3 clone with extended PRG and CHR bankswitch registers.  


CaH4e3 insists that mapper 176 belongs to BMCFK23C or variants thereof, subject to some caveats: the prg may be wired differently, and there are 'protections' relating to different dip switches which connect to address bits and control which addresses the mappers respond to. Preliminary investigation bears this out, and the chinese test case above can be made to work as a BMCFK23C variant. Consequently, this whole document may be obsolete soon and turn into a BMCFK23C reference.
PRG and CHR bank switching is done via the normal MMC3 registers, whose high bits can be masked off if necessary, before being ORed with higher-order PRG and CHR Base bank bits. Additional Mode bits can be set to disable MMC3 PRG and/or CHR banking to solely use the PRG and CHR base directly as bank numbers in a GNROM-like fashion. A special CNROM mode allows ORing the CHR base with a data latch that responds to writes in the $8000-$FFFF range (except $A000-$BFFF). A few multicart menus use an extended MMC3 mode that provides full 1 KiB CHR bank granularity and switching the PRG banks that in a normal MMC3 are fixed. The RAM Configuration Register enables 32 KiB of WRAM, 16 KiB of which are non-volatile, and allows specifying that only the first 8 KiB of CHR memory are RAM.


This documentation is based on VirtuaNesEX's hack's and FCEUX's sources are somewhat non-representative of logical hardware. This documentation was reasoned out from those sources into a slightly more logical explanation; working sources should be considered authoritative.
Except for [https://wiki.nesdev.org/w/index.php?title=INES_Mapper_176#1:_Extra_PRG_for_multicart_menu Variant 1], the power-on state is that all new registers are initialized to $00, causing the FK23C to mimic a standard MMC3, which means that the 8 KiB bank in CPU space at $E000 is the bank that ends the first 512 KiB ($7E000), even if the ROM image is larger than that.


The initial PRG state is as follows:
==Registers==
FK23CA-variant boards have a DIP switch that changes the address mask at which the board hardware responds to CPU writes in the $5000-$5FFF range. The address mask is $10 SHL DIP, e.g. a DIP value of zero results in an address mask of $5010, a value of one in an address mask of $5020, and so on. Multicarts determine the DIP setting by attempting a PRG bankswitch at $5011, $5021, $5041, then checking after each attempt whether the bankswitch actually occured; further registers are then accessed at $5FFx, which will trigger a write at any DIP switch setting. A DIP setting of zero (address mask $5010) will produce a usable result for any ROM image, although the multicart's menu is sometimes found at other settings; such ROMs will not be recognizable as a multicart on emulators that do not allow changing the DIP switch setting and will instead appear to be an oversized variant of one of the individual games.


      $8000  $A000  $C000  $E000 
Note that the registers in the $5000-$5FFF range can be temporarily disabled by the RAM Configuration Register ($A001). Waixing games do this apparently for protection purposes.
    +-------+-------+-------+-------+
    |  0  |  1  |  62  |  63  |
    +-------+-------+-------+-------+


This is the case even for 1024KB roms where you might expect 127 and 128 instead. Perhaps the registers are only 6 bits. This distinction is significant.  
===Mode Register ($5xx0)===
7654 3210
---- ----
PCTm PMMM
|||| ||||
|||| |+++- PRG Mode/Mask (*1)
|||| |      0: MMC3 Bank AND $3F OR ((PRG Base SHL 1) AND NOT $3F)
|||| |      1: MMC3 Bank AND $1F OR ((PRG Base SHL 1) AND NOT $1F)
|||| |      2: MMC3 Bank AND $0F OR ((PRG Base SHL 1) AND NOT $0F)
|||| |      3: PRG Base selects the same 16 KiB PRG bank at CPU $8000 and $C000
|||| |      4: PRG Base SHR 1 selects 32 KiB PRG bank at CPU $8000
|||| |      5-7: Never used
|||| +---- PRG Base bit 7
|||+------ CHR Mask
|||        0: $FF in MMC3 CHR Mode (bit 6 clear), $03 in CNROM Mode ($5xx0 bit 6 set and $5xx3 bit 2/6 set)
|||        1: $FF/$FF/$7F (selected by bits 0-2) in MMC3 CHR Mode (bit 6 clear), $01 in CNROM Mode ($5xx0 bit 6 set and $5xx3 bit 2/6 set)
||+------- CHR Type (0: ROM, 1: RAM) (*2)
|+-------- CHR Mode
|          0: MMC3 Bank AND CHR Mask (bit 4)
|          1: CHR Base selects 8 KiB CHR bank at PPU $8000. If CNROM Mode is active, the CNROM latch ANDed with the mask set by bit 4 and ORed with the CHR base.
+--------- PRG Base bit 8


By writing to $5FF1, you can effect the following:
* (*1) In Extended MMC3 Mode ($5xx3 bit 1 set), the MMC3 Bank mask is $7F regardless of the value of $5xx0 bits 0 to 2.
* (*2) The CHR Type (bit 5) is only meaningful on carts that have both CHR-RAM and CHR-ROM, such as the Rockman I-VI multicart. On carts that only have one type of CHR memory, this bit cannot be relied upon to correctly specify the installed memory type.


      $8000  $A000  $C000  $E000  
===PRG Base Register ($5xx1)===
    +-------+-------+-------+-------+
  7654 3210
    |           <$5FF1>            |
---- ----
    +-------+-------+-------+-------+
.PPP PPPP
  ||| ||||
  +++-++++- PRG Base bits 0-6


By writing $24 to $5010, you can set the 'SBW' mode bit. Once that bit is set, other registers become available for mapping control. There seems to be no way to clear the bit.
===CHR Base Register ($5xx2)===
7654 3210
---- ----
CPCC CCCC
|||| ||||
++++-++++- CHR Base bits 0-7
  |
  +-------- also: PRG Base bit 9


By writing to $5001 with SBW set, you can effect the following:
===Extended Mode Register ($5xx3)===
7654 3210
---- ----
.C.. .CE.
  |    ||
  |    |+- Extended MMC3 Mode (0: disable, 1: enable)
  +----+-- CNROM mode (0: disable, 1: enable)


      $8000  $A000  $C000  $E000 
Since all games that use CNROM mode always set both bits 2 and 6 simultaneously, it's not clear which one of these bits actually triggers the CNROM mode, and what the function of the other bit would be.
    +-------+-------+-------+-------+
    |            $5001            |
    +-------+-------+-------+-------+


By writing to $5011 with SBW set, you can effect the following:
===RAM Configuration Register ($A001)===
This register functions like MMC3 register $A001 until bit 5 is set, which turns it into the RAM Configuration Register.


      $8000  $A000  $C000  $E000  
  7654 3210
    +-------+-------+-------+-------+
---- ----
    |           <$5011>            |
RFE. ?CWW
    +-------+-------+-------+-------+
|||  ||||
|||  ||++- Select 8 KiB PRG-RAM bank at $6000-$7FFF. Ignored if Bit 5 is clear.
|||  |+--- First 8 KiB of CHR space. Ignored if Bit 5 is clear.
|||  |      0: First 8 KiB are CHR-ROM
|||  |      1: First 8 KiB are CHR-RAM
|||  +---- Set to 1 by some Waixing games, meaning unknown
||+------- RAM Configuration Register Enable
||         0: RAM Configuration Register disabled, $A001 functions like on MMC3, 8 KiB of WRAM
||         1: RAM Configuration Register enabled, 32 KiB of WRAM
|+-------- FK23C Registers Enable. Ignored if Bit 5 is clear.
|          0: FK23C Registers disabled, $5000-$5FFF maps to the second 4 KiB of the 8 KiB WRAM bank 2
|          1: FK23C Registers enabled in the $5000-$5FFF range
+--------- PRG RAM enable (0: disable, 1: enable)


There is a CHR register at $5FF2 with the following format:
Of the four 8 KiB WRAM banks, only bank 1 and 3 are non-volatile. Games usually use bank 0 as work RAM, bank 2 for protection, and banks 1 and 3 for save game data. The protection check involves disabling the FK23C registers in the $5000-$5FFF range by writing $Ax to $A001, then writing some code to $5000-$5FFF range which will land in the second half of WRAM bank 2. After re-enabling the FK23C registers and copying save game data from banks 1 and/or 3 into work RAM in bank 0, bank 2 is switched in, and the code originally written via the $5000-$5FFF window is executed, which in many games is just a simple RTS.


  $5FF2:  [CCCC CCCC] (exact number of bits unknown)
===CNROM latch ($8000-$9FFF, $C000-$FFFF)===
    C = Select 8k CHR page @ $0000-1FFF
If CNROM Mode is active ($5xx0 bit 6 set and $5xx3 bit 2/6 set), writes to these ranges will update a data latch similar to a normal [[INES Mapper 003|CNROM]] board, with the latch value being masked according to $5xx0 bit 4 before being ORed with the CHR Base.


With this mapper, there may be no VROM present.
===MMC3-compatible registers ($8000/$8001, $A000, $C000/$C001, $E000/$E001)===
If the "Extended MMC3 Mode" bit in register $5xx3 is clear, then these registers function identically to the [[MMC3]]. If the "Extended MMC3 Mode" bit is set, four more bank registers become available at [https://wiki.nesdev.org/w/index.php/MMC3#Bank_select_.28.248000-.249FFE.2C_even.29 $8000/$8001], so that the original two 2 KiB CHR banks become four 1 KiB CHR banks, and the two fixed 8 KiB PRG banks become selectable:
7  bit  0
---- ----
CP.. RRRR
||  ||||
||  ++++- Specify which bank register to update on next write to Bank Data register
||        0: Select 1 KB CHR bank at PPU $0000-$03FF (or $1000-$13FF)
||        1: Select 1 KB CHR bank at PPU $0800-$0BFF (or $1800-$1BFF)
||        2: Select 1 KB CHR bank at PPU $1000-$13FF (or $0000-$03FF)
||        3: Select 1 KB CHR bank at PPU $1400-$17FF (or $0400-$07FF)
||        4: Select 1 KB CHR bank at PPU $1800-$1BFF (or $0800-$0BFF)
||        5: Select 1 KB CHR bank at PPU $1C00-$1FFF (or $0C00-$0FFF)
||        6: Select 8 KB PRG ROM bank at $8000-$9FFF (or $C000-$DFFF)
||        7: Select 8 KB PRG ROM bank at $A000-$BFFF
||        8: Select 8 KB PRG ROM bank at $C000-$DFFF (or $8000-$9FFF)
||        9: Select 8 KB PRG ROM bank at $E000-$FFFF
||        A: Select 1 KB CHR bank at PPU $0400-$07FF (or $1400-$17FF)
||        B: Select 1 KB CHR bank at PPU $0C00-$0FFF (or $1C00-$1FFF)
|+-------- PRG A14 inversion
+--------- CHR A12 inversion


There are registers at $A000 and $A001. I haven't been able to verify them yet, but here's how VirtuaNesEX has them:
==Variants==
No submappers have been assigned yet for incompatible variants of the hardware.
===0: Normal===
Powers up with the PRG Base Register set to $00, causing the FK23C to mimic a standard MMC3, which means that the 8 KiB bank in CPU space at $E000 is the bank that ends the first 512 KiB ($7E000), even if the ROM image is larger than that.
===1: Extra PRG for multicart menu===
A few multicarts hold four 128 KiB PRG-ROM-bearing games with no space left in those 512 KiB for the multicart menu. The menu is then put into a separate 32 KiB PRG bank that is mapped into the full PRG address space as the end of a second 512 KiB PRG-ROM bank, the other 480 KiB of that second 512 KiB PRG-ROM bank being empty. Carts in that configuration thus boot up with the 8 KiB bank in CPU space at $E000 being the bank that ends the second 512 KiB ($FE000), by initializing the PRG Base Register to $60. These carts can be automatically detected by the fact that they, and only they, all have 1024 KiB of PRG-ROM and 1024 KiB of CHR-ROM.
===2: Flipped MMC3 Registers $46 and $47===
For unknown reasons, the two very large (16 MiB of PRG-ROM) multicarts swap MMC3 registers $46 and $47, but not $06 and $07. Individual MMC3 games, such as Kage, on these multicarts were modified to account for this. These carts can be automatically detected by the fact that they contain 16384 KiB of PRG-ROM.


  $A000:  [.... ..MM] Mirroring
==Notes==
    0 = Vert
* The RAM Configuration Register is not just enabled by Waixing games, but also by some of the later FK23C multicarts, which does not imply however that they are actually equipped with PRG-RAM.
    1 = Horz
* If the RAM Configuration Register is enabled ''and'' the cart has non-volative PRG-RAM, then the PRG-RAM is always 32 KiB in size, and banks 1 and 3 are non-volatile.
    2 = 1ScA
* If a cart has both CHR-ROM and CHR-RAM, then a NES 2.0 header must be used to specify that, as most emulators disable CHR-RAM completely if a NES 1.0 header with CHR-ROM is found.
    3 = 1ScB
* Large multicarts with no CHR-ROM use large amounts of CHR-RAM into which an individual game's CHR data is copied when it is selected. CHR-RAM sizes range from 64 KiB (10-in-1 Omake Game) to 128 KiB (150-in-1 Real Game, 245-in-1 Real Game) and even 256 KiB (120-in-1 Waixing Games).
 
* Many Waixing games in GoodNES 3.23b that correctly should be set to mapper 176 are incorrectly set to [[INES Mapper 030|Mapper 30]]. These games were converted from Waixing's proprietary (and encrypted) .WXN format; the Mapper 30 designation is the result of interpreting these .WXN files' non-iNES header as if it were an iNES header. Some of them have already been hacked (or "fixed", bearing an "[f1]" tag) to remove the protection check described above.
  $A001:  [.... ..EE] Enable Write SRAM
* The ROM that GoodNES 3.23b calls "Mortal Kombat Trilogy - 8 People (M1274) (Ch) [!].zip" is commonly set to Mapper 176 even though it does not use FK23C-compatible register addresses and content.
    1,2,3 = Enabled
 
VirtuaNesEX has the write enable fixed to always enabled. This documentation is just provided as a clue in case that works out not to work well.
 
Additionally, VirtuaNesEX handles register writes to $5000 and $5013 but doesn't do anything with them.

Revision as of 21:49, 30 November 2017

Mapper 176 is used by FK23C- and FK23CA-based multicarts as well as the re-releases of Waixing games that were originally released on boards using a variety of mappers. Being primarily designed for multicarts, it consists of an MMC3 clone with extended PRG and CHR bankswitch registers.

PRG and CHR bank switching is done via the normal MMC3 registers, whose high bits can be masked off if necessary, before being ORed with higher-order PRG and CHR Base bank bits. Additional Mode bits can be set to disable MMC3 PRG and/or CHR banking to solely use the PRG and CHR base directly as bank numbers in a GNROM-like fashion. A special CNROM mode allows ORing the CHR base with a data latch that responds to writes in the $8000-$FFFF range (except $A000-$BFFF). A few multicart menus use an extended MMC3 mode that provides full 1 KiB CHR bank granularity and switching the PRG banks that in a normal MMC3 are fixed. The RAM Configuration Register enables 32 KiB of WRAM, 16 KiB of which are non-volatile, and allows specifying that only the first 8 KiB of CHR memory are RAM.

Except for Variant 1, the power-on state is that all new registers are initialized to $00, causing the FK23C to mimic a standard MMC3, which means that the 8 KiB bank in CPU space at $E000 is the bank that ends the first 512 KiB ($7E000), even if the ROM image is larger than that.

Registers

FK23CA-variant boards have a DIP switch that changes the address mask at which the board hardware responds to CPU writes in the $5000-$5FFF range. The address mask is $10 SHL DIP, e.g. a DIP value of zero results in an address mask of $5010, a value of one in an address mask of $5020, and so on. Multicarts determine the DIP setting by attempting a PRG bankswitch at $5011, $5021, $5041, then checking after each attempt whether the bankswitch actually occured; further registers are then accessed at $5FFx, which will trigger a write at any DIP switch setting. A DIP setting of zero (address mask $5010) will produce a usable result for any ROM image, although the multicart's menu is sometimes found at other settings; such ROMs will not be recognizable as a multicart on emulators that do not allow changing the DIP switch setting and will instead appear to be an oversized variant of one of the individual games.

Note that the registers in the $5000-$5FFF range can be temporarily disabled by the RAM Configuration Register ($A001). Waixing games do this apparently for protection purposes.

Mode Register ($5xx0)

7654 3210
---- ----
PCTm PMMM
|||| ||||
|||| |+++- PRG Mode/Mask (*1)
|||| |      0: MMC3 Bank AND $3F OR ((PRG Base SHL 1) AND NOT $3F)
|||| |      1: MMC3 Bank AND $1F OR ((PRG Base SHL 1) AND NOT $1F)
|||| |      2: MMC3 Bank AND $0F OR ((PRG Base SHL 1) AND NOT $0F)
|||| |      3: PRG Base selects the same 16 KiB PRG bank at CPU $8000 and $C000
|||| |      4: PRG Base SHR 1 selects 32 KiB PRG bank at CPU $8000
|||| |      5-7: Never used
|||| +---- PRG Base bit 7
|||+------ CHR Mask
|||         0: $FF in MMC3 CHR Mode (bit 6 clear), $03 in CNROM Mode ($5xx0 bit 6 set and $5xx3 bit 2/6 set)
|||         1: $FF/$FF/$7F (selected by bits 0-2) in MMC3 CHR Mode (bit 6 clear), $01 in CNROM Mode ($5xx0 bit 6 set and $5xx3 bit 2/6 set)
||+------- CHR Type (0: ROM, 1: RAM) (*2)
|+-------- CHR Mode
|           0: MMC3 Bank AND CHR Mask (bit 4)
|           1: CHR Base selects 8 KiB CHR bank at PPU $8000. If CNROM Mode is active, the CNROM latch ANDed with the mask set by bit 4 and ORed with the CHR base.
+--------- PRG Base bit 8
  • (*1) In Extended MMC3 Mode ($5xx3 bit 1 set), the MMC3 Bank mask is $7F regardless of the value of $5xx0 bits 0 to 2.
  • (*2) The CHR Type (bit 5) is only meaningful on carts that have both CHR-RAM and CHR-ROM, such as the Rockman I-VI multicart. On carts that only have one type of CHR memory, this bit cannot be relied upon to correctly specify the installed memory type.

PRG Base Register ($5xx1)

7654 3210
---- ----
.PPP PPPP
 ||| ||||
 +++-++++- PRG Base bits 0-6

CHR Base Register ($5xx2)

7654 3210
---- ----
CPCC CCCC
|||| ||||
++++-++++- CHR Base bits 0-7
 |
 +-------- also: PRG Base bit 9

Extended Mode Register ($5xx3)

7654 3210
---- ----
.C.. .CE.
 |    || 
 |    |+- Extended MMC3 Mode (0: disable, 1: enable)
 +----+-- CNROM mode (0: disable, 1: enable)

Since all games that use CNROM mode always set both bits 2 and 6 simultaneously, it's not clear which one of these bits actually triggers the CNROM mode, and what the function of the other bit would be.

RAM Configuration Register ($A001)

This register functions like MMC3 register $A001 until bit 5 is set, which turns it into the RAM Configuration Register.

7654 3210
---- ----
RFE. ?CWW
|||  ||||
|||  ||++- Select 8 KiB PRG-RAM bank at $6000-$7FFF. Ignored if Bit 5 is clear.
|||  |+--- First 8 KiB of CHR space. Ignored if Bit 5 is clear.
|||  |      0: First 8 KiB are CHR-ROM
|||  |      1: First 8 KiB are CHR-RAM
|||  +---- Set to 1 by some Waixing games, meaning unknown
||+------- RAM Configuration Register Enable
||          0: RAM Configuration Register disabled, $A001 functions like on MMC3, 8 KiB of WRAM
||          1: RAM Configuration Register enabled, 32 KiB of WRAM
|+-------- FK23C Registers Enable. Ignored if Bit 5 is clear.
|           0: FK23C Registers disabled, $5000-$5FFF maps to the second 4 KiB of the 8 KiB WRAM bank 2
|           1: FK23C Registers enabled in the $5000-$5FFF range
+--------- PRG RAM enable (0: disable, 1: enable)

Of the four 8 KiB WRAM banks, only bank 1 and 3 are non-volatile. Games usually use bank 0 as work RAM, bank 2 for protection, and banks 1 and 3 for save game data. The protection check involves disabling the FK23C registers in the $5000-$5FFF range by writing $Ax to $A001, then writing some code to $5000-$5FFF range which will land in the second half of WRAM bank 2. After re-enabling the FK23C registers and copying save game data from banks 1 and/or 3 into work RAM in bank 0, bank 2 is switched in, and the code originally written via the $5000-$5FFF window is executed, which in many games is just a simple RTS.

CNROM latch ($8000-$9FFF, $C000-$FFFF)

If CNROM Mode is active ($5xx0 bit 6 set and $5xx3 bit 2/6 set), writes to these ranges will update a data latch similar to a normal CNROM board, with the latch value being masked according to $5xx0 bit 4 before being ORed with the CHR Base.

MMC3-compatible registers ($8000/$8001, $A000, $C000/$C001, $E000/$E001)

If the "Extended MMC3 Mode" bit in register $5xx3 is clear, then these registers function identically to the MMC3. If the "Extended MMC3 Mode" bit is set, four more bank registers become available at $8000/$8001, so that the original two 2 KiB CHR banks become four 1 KiB CHR banks, and the two fixed 8 KiB PRG banks become selectable:

7  bit  0
---- ----
CP.. RRRR
||   ||||
||   ++++- Specify which bank register to update on next write to Bank Data register
||         0: Select 1 KB CHR bank at PPU $0000-$03FF (or $1000-$13FF)
||         1: Select 1 KB CHR bank at PPU $0800-$0BFF (or $1800-$1BFF)
||         2: Select 1 KB CHR bank at PPU $1000-$13FF (or $0000-$03FF)
||         3: Select 1 KB CHR bank at PPU $1400-$17FF (or $0400-$07FF)
||         4: Select 1 KB CHR bank at PPU $1800-$1BFF (or $0800-$0BFF)
||         5: Select 1 KB CHR bank at PPU $1C00-$1FFF (or $0C00-$0FFF)
||         6: Select 8 KB PRG ROM bank at $8000-$9FFF (or $C000-$DFFF)
||         7: Select 8 KB PRG ROM bank at $A000-$BFFF
||         8: Select 8 KB PRG ROM bank at $C000-$DFFF (or $8000-$9FFF)
||         9: Select 8 KB PRG ROM bank at $E000-$FFFF
||         A: Select 1 KB CHR bank at PPU $0400-$07FF (or $1400-$17FF)
||         B: Select 1 KB CHR bank at PPU $0C00-$0FFF (or $1C00-$1FFF)
|+-------- PRG A14 inversion
+--------- CHR A12 inversion

Variants

No submappers have been assigned yet for incompatible variants of the hardware.

0: Normal

Powers up with the PRG Base Register set to $00, causing the FK23C to mimic a standard MMC3, which means that the 8 KiB bank in CPU space at $E000 is the bank that ends the first 512 KiB ($7E000), even if the ROM image is larger than that.

1: Extra PRG for multicart menu

A few multicarts hold four 128 KiB PRG-ROM-bearing games with no space left in those 512 KiB for the multicart menu. The menu is then put into a separate 32 KiB PRG bank that is mapped into the full PRG address space as the end of a second 512 KiB PRG-ROM bank, the other 480 KiB of that second 512 KiB PRG-ROM bank being empty. Carts in that configuration thus boot up with the 8 KiB bank in CPU space at $E000 being the bank that ends the second 512 KiB ($FE000), by initializing the PRG Base Register to $60. These carts can be automatically detected by the fact that they, and only they, all have 1024 KiB of PRG-ROM and 1024 KiB of CHR-ROM.

2: Flipped MMC3 Registers $46 and $47

For unknown reasons, the two very large (16 MiB of PRG-ROM) multicarts swap MMC3 registers $46 and $47, but not $06 and $07. Individual MMC3 games, such as Kage, on these multicarts were modified to account for this. These carts can be automatically detected by the fact that they contain 16384 KiB of PRG-ROM.

Notes

  • The RAM Configuration Register is not just enabled by Waixing games, but also by some of the later FK23C multicarts, which does not imply however that they are actually equipped with PRG-RAM.
  • If the RAM Configuration Register is enabled and the cart has non-volative PRG-RAM, then the PRG-RAM is always 32 KiB in size, and banks 1 and 3 are non-volatile.
  • If a cart has both CHR-ROM and CHR-RAM, then a NES 2.0 header must be used to specify that, as most emulators disable CHR-RAM completely if a NES 1.0 header with CHR-ROM is found.
  • Large multicarts with no CHR-ROM use large amounts of CHR-RAM into which an individual game's CHR data is copied when it is selected. CHR-RAM sizes range from 64 KiB (10-in-1 Omake Game) to 128 KiB (150-in-1 Real Game, 245-in-1 Real Game) and even 256 KiB (120-in-1 Waixing Games).
  • Many Waixing games in GoodNES 3.23b that correctly should be set to mapper 176 are incorrectly set to Mapper 30. These games were converted from Waixing's proprietary (and encrypted) .WXN format; the Mapper 30 designation is the result of interpreting these .WXN files' non-iNES header as if it were an iNES header. Some of them have already been hacked (or "fixed", bearing an "[f1]" tag) to remove the protection check described above.
  • The ROM that GoodNES 3.23b calls "Mortal Kombat Trilogy - 8 People (M1274) (Ch) [!].zip" is commonly set to Mapper 176 even though it does not use FK23C-compatible register addresses and content.