NES 2.0 Mapper 268: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(linky)
(Consolidate UNIF entry)
Line 1: Line 1:
[[Category:MMC3-like mappers]][[Category:Multicart mappers]]
[[Category:ASIC mappers]][[Category:Mappers with scanline IRQs]][[Category:MMC3-like mappers]]
NES 2.0 Mapper 268 is used for multicarts using the ''Coolboy'' hardware. It is functionally similar to the [[INES Mapper 176|FK23C]] hardware, although the bank mask and base bits seem to be deliberately mixed-up. These multicarts have rather large amounts of PRG-ROM (usually 32 MiB) and 128 KiB or 256 KiB of CHR-RAM that is filled when a particular game has been selected. It uses an [[MMC3]] clone with four outer bank registers. Its UNIF MAPR is just [[UNIF/COOLBOY|COOLBOY]].
NES 2.0 Mapper 268 is used for multicarts using the ''Coolboy'' hardware. It is functionally similar to the [[INES Mapper 176|FK23C]] hardware, although the bank mask and base bits seem to be deliberately mixed-up. These multicarts have rather large amounts of PRG-ROM (usually 32 MiB) and 128 KiB or 256 KiB of CHR-RAM that is filled when a particular game has been selected. It uses an [[MMC3]] clone with four outer bank registers. Its UNIF board name is just '''COOLBOY''' (without BMC- or BTL- prefix).


=Registers=
== Registers ==
==Outer Bank Registers ($6000-$6003)==
$6000  7654 3210
        ---------
        cpPP CPPP
        |||| |+++- PRG Base bits 0-3 (0x07)
        |||| +---- CHR Bank bit 7 (0x80) 128 KiB
        ||++------ PRG Base bits 6-7 (0xC0)
        |+-------- PRG Mask bit 4 (0x20), inverted
        +--------- CHR Mask bit 7, inverted
$6001  7654 3210
        ---------
        pppP PPb.
        |||| ||+-- PRG Bank size in GNROM mode (1=32 KiB, 0=16 KiB)
        |||| ++--- PRG Base bits 4-5 (0x30)
        |||+------ PRG Base bit 3 (0x08)
        ||+------- PRG Mask bit 7 (0x80)
        |+-------- PRG Mask bit 6 (0x40)
        +--------- PRG Mask bit 5 (0x20), inverted
$6002  7654 3210
        ---------
        .... CCCC
            ++++- Inner 8 KiB CHR bank in GNROM mode
$6003  7654 3210
        ---------
        LW.M PPP.
        || | ||+-- Inner 16 KiB PRG bank in GNROM mode if $6001 bit 1=0
        || | ++--- Inner 32 KiB PRG bank in GNROM mode
        || +------ Mode: 0=MMC3, 1=GNROM
        |+-------- 1=Weird mode
        +--------- 1=Lock (only in MMC3 mode)


=Banking modes=
These registers overlay, but are independent from, any PRG-RAM present.
* In MMC3 mode ($6003 bit 4 clear), the MMC3's PRG/CHR bank is masked off with the PRG/CHR Mask bits, which are then replaced by the respective bits of the PRG/CHR Base SHL 4.
 
* In GNROM mode, the lower 4 bits of the MMC3's PRG bank are replaced with $6003 bits 1-3 (16 KiB mode, $6001 bit 1 clear)/bits 2-3 (32 KiB mode, $6001 bit 1 set) to form two 16 KiB/one 32 KiB inner PRG bank. The lower 7 bits of the MMC3's CHR bank are replaced with $6002 bits 0-3 to form one 8 KiB inner CHR bank.
Mask: $E003
* Register $6003 bit 6 enables what FCEUX's source code calls a "Weird mode - Don't even try do understand" that seems to reverse the bank order in some way.
=== $6000 ===
 
  7  bit  0
  ---- ----
  ABCC DEEE
  |||| ||||
  |||| |+++-- PRG offset (PRG A19, A18, A17)
  |||| +----- Alternate CHR A17
  ||++------- PRG offset (PRG A24, A23)
  |+--------- PRG mask (PRG A17 from 0: MMC3; 1: offset)
  +---------- CHR mask (CHR A17 from 0: MMC3; 1: alternate)
 
=== $6001 ===
 
  7  bit  0
  ---- ----
  GHIJ KKLx
  |||| |||
  |||| ||+--- GNROM mode bank PRG size (1: 32 KiB bank, PRG A14=CPU A14; 0: 16 KiB bank, PRG A14=offset A14)
  |||+-++---- PRG offset (in order: PRG A20, A22, A21)
  ||+-------- PRG mask (PRG A20 from 0: offset; 1: MMC3)
  |+--------- PRG mask (PRG A19 from 0: offset; 1: MMC3)
  +---------- PRG mask (PRG A18 from 0: MMC3; 1: offset)
 
=== $6002 ===
 
  7  bit  0
  ---- ----
  xxxx MMMM
      ||||
      ++++-- CHR offset for GNROM mode (CHR A16, A15, A14, A13)
 
=== $6003 ===
 
  7  bit 0
  ---- ----
  NPxP QQRx
  || | |||
  || | +++--- PRG offset for GNROM mode (PRG A16, A15, A14)
  || +------- 1: GNROM mode; 0: MMC3 mode
  || |        (1: PRG A16...13 from QQ, L, R, CPU A14, A13 + CHR A16...10 from MMMM, PPU A12...10;
  || |          0: PRG A16...13 from MMC3 + CHR A16...A10 from MMC3 )
  |+-+------- Banking mode
  |+--------- "Weird MMC3 mode"
  +---------- Lockout (prevent further writes to these four registers, only works in MMC3 mode)
 
== Register interpretation ==
The following things are always true, regardless of mode:
* The CCKK bits are always connected to PRG A24..A21.
* The PRG and CHR mask controls (I, H, G, B, & A) always control whether PRG A20..A17 and CHR A17 are connected to the internal MMC3 registers, or the literal values in other controls (J, EEE, & D).
 
=== Banking mode = $00 ===
“Normal” oversize MMC3 mode.
 
Supports MMC3 anywhere between 128 KiB and 2 MiB, otherwise identical to ordinary [[MMC3]]. Goofy mask values will produce goofy memory layouts.
 
The combined register of CCKKJEEE could be thought of as a way to select one of 256 different 128 KiB PRG MMC3 games, or CCKK selecting one of 16 different 2 MiB MMC3 games.
 
Lockout works in this mode.
 
=== Banking mode = $10 ===
“Normal” GNROM mode.
 
PRG A16 and A15 come from the QQ controls.
 
When in 16 KiB PRG mode (L control), PRG A14 comes from the R control. Otherwise, it comes from CPU A14.
 
CHR A16, A15, A14, and A13 come from MMMM controls. CHR A12, A11, and A10 come from PPU A12, A11, and A10.
 
The combined register of CCKKJEEEQQR could be thought of as a way to select one of 2048 different 16 KiB NROM games.
 
Note: The CHR and PRG mask registers STILL AFFECT THIS MODE, allowing weird splicing of MMC3 banking (with 128 KiB granularity) overlaying GNROM-style banking.
 
Lockout DOES NOT work in this mode.
 
=== Banking mode = $40 ===
“Weird” MMC3 mode.
 
If [[MMC3#Bank select .28.248000-.249FFE.2C even.29|MMC3 PRG ROM bank mode]] is "normal" (8+8+16F), then the PRG banks at 0xC000 and 0xE000 are fixed to 8 KiB bank 0, instead of 0xFE and 0xFF. Supposedly this effect is completely ignored when MMC3 PRG ROM bank mode is inverted (8F+8+8+8F).
 
The second half of each of the 2 KiB CHR banks is replaced with bank 0, and the LSB of MMC3 registers 0 and 1 work (instead of being replaced by PPU A10).
 
Otherwise, behaves as “normal” MMC3 mode above.
 
=== Banking mode = $50 ===
“Weird” GNROM-ish mode.
 
Combine the rules mentioned above for “Normal” GNROM mode with “Weird” MMC3 mode. (These descriptions should not be contradictory.)
 
Lockout DOES NOT work in this mode.
=Notes=
* No cart has been discovered so far that makes use of the "weird" mode.

Revision as of 22:16, 19 January 2018

NES 2.0 Mapper 268 is used for multicarts using the Coolboy hardware. It is functionally similar to the FK23C hardware, although the bank mask and base bits seem to be deliberately mixed-up. These multicarts have rather large amounts of PRG-ROM (usually 32 MiB) and 128 KiB or 256 KiB of CHR-RAM that is filled when a particular game has been selected. It uses an MMC3 clone with four outer bank registers. Its UNIF board name is just COOLBOY (without BMC- or BTL- prefix).

Registers

These registers overlay, but are independent from, any PRG-RAM present.

Mask: $E003

$6000

 7  bit  0
 ---- ----
 ABCC DEEE
 |||| ||||
 |||| |+++-- PRG offset (PRG A19, A18, A17)
 |||| +----- Alternate CHR A17
 ||++------- PRG offset (PRG A24, A23)
 |+--------- PRG mask (PRG A17 from 0: MMC3; 1: offset)
 +---------- CHR mask (CHR A17 from 0: MMC3; 1: alternate)

$6001

 7  bit  0
 ---- ----
 GHIJ KKLx
 |||| |||
 |||| ||+--- GNROM mode bank PRG size (1: 32 KiB bank, PRG A14=CPU A14; 0: 16 KiB bank, PRG A14=offset A14)
 |||+-++---- PRG offset (in order: PRG A20, A22, A21)
 ||+-------- PRG mask (PRG A20 from 0: offset; 1: MMC3)
 |+--------- PRG mask (PRG A19 from 0: offset; 1: MMC3)
 +---------- PRG mask (PRG A18 from 0: MMC3; 1: offset)

$6002

 7  bit  0
 ---- ----
 xxxx MMMM
      ||||
      ++++-- CHR offset for GNROM mode (CHR A16, A15, A14, A13)

$6003

 7  bit  0
 ---- ----
 NPxP QQRx
 || | |||
 || | +++--- PRG offset for GNROM mode (PRG A16, A15, A14)
 || +------- 1: GNROM mode; 0: MMC3 mode
 || |         (1: PRG A16...13 from QQ, L, R, CPU A14, A13 + CHR A16...10 from MMMM, PPU A12...10;
 || |          0: PRG A16...13 from MMC3 + CHR A16...A10 from MMC3 )
 |+-+------- Banking mode
 |+--------- "Weird MMC3 mode"
 +---------- Lockout (prevent further writes to these four registers, only works in MMC3 mode)

Register interpretation

The following things are always true, regardless of mode:

  • The CCKK bits are always connected to PRG A24..A21.
  • The PRG and CHR mask controls (I, H, G, B, & A) always control whether PRG A20..A17 and CHR A17 are connected to the internal MMC3 registers, or the literal values in other controls (J, EEE, & D).

Banking mode = $00

“Normal” oversize MMC3 mode.

Supports MMC3 anywhere between 128 KiB and 2 MiB, otherwise identical to ordinary MMC3. Goofy mask values will produce goofy memory layouts.

The combined register of CCKKJEEE could be thought of as a way to select one of 256 different 128 KiB PRG MMC3 games, or CCKK selecting one of 16 different 2 MiB MMC3 games.

Lockout works in this mode.

Banking mode = $10

“Normal” GNROM mode.

PRG A16 and A15 come from the QQ controls.

When in 16 KiB PRG mode (L control), PRG A14 comes from the R control. Otherwise, it comes from CPU A14.

CHR A16, A15, A14, and A13 come from MMMM controls. CHR A12, A11, and A10 come from PPU A12, A11, and A10.

The combined register of CCKKJEEEQQR could be thought of as a way to select one of 2048 different 16 KiB NROM games.

Note: The CHR and PRG mask registers STILL AFFECT THIS MODE, allowing weird splicing of MMC3 banking (with 128 KiB granularity) overlaying GNROM-style banking.

Lockout DOES NOT work in this mode.

Banking mode = $40

“Weird” MMC3 mode.

If MMC3 PRG ROM bank mode is "normal" (8+8+16F), then the PRG banks at 0xC000 and 0xE000 are fixed to 8 KiB bank 0, instead of 0xFE and 0xFF. Supposedly this effect is completely ignored when MMC3 PRG ROM bank mode is inverted (8F+8+8+8F).

The second half of each of the 2 KiB CHR banks is replaced with bank 0, and the LSB of MMC3 registers 0 and 1 work (instead of being replaced by PPU A10).

Otherwise, behaves as “normal” MMC3 mode above.

Banking mode = $50

“Weird” GNROM-ish mode.

Combine the rules mentioned above for “Normal” GNROM mode with “Weird” MMC3 mode. (These descriptions should not be contradictory.)

Lockout DOES NOT work in this mode.

Notes

  • No cart has been discovered so far that makes use of the "weird" mode.