NES 2.0 Mapper 534: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Rewrite based on new dumps)
(Another rewrite, incorporating the behavior on additional ROM dumps.)
Line 1: Line 1:
{{DEFAULTSORT:534}}[[Category:Multicart mappers|534]][[Category:Mappers with CHR RAM|534]][[Category:Mappers with scanline IRQs|534]][[Category:MMC3-like mappers|534]]
{{DEFAULTSORT:534}}[[Category:Multicart mappers|534]][[Category:Mappers with CHR RAM|534]][[Category:Mappers with scanline IRQs|534]][[Category:MMC3-like mappers|534]]
'''NES 2.0 Mapper 534''' denotes an MMC3-based multicart mapper with an optional (G)NROM-like mode.
'''NES 2.0 Mapper 534''' denotes an MMC3-based multicart mapper with an optional (C)NROM-like PRG and CHR banking modes.
* ''Atari Flashback Mini 7800''
* ''Atari Flashback Mini 7800''
* ''2-in-1 数独/五子棋'' (NJ064) by Shenzhen Nanjing
* ''2-in-1 数独/五子棋'' (NJ064) by Shenzhen Nanjing
Line 6: Line 6:
* ''8-in-1'' (kk3311) by Waixing
* ''8-in-1'' (kk3311) by Waixing
* ''8-in-1'' (kk3314) by Waixing
* ''8-in-1'' (kk3314) by Waixing
* ''101-in-1'' (a variant of which uses [[INES Mapper 045]]).


==MMC3-compatible registers ($8000-$FFFF, write)==
==MMC3-compatible registers ($8000-$FFFF, write)==
These registers function identically to a normal [[MMC3]], except that the scanline counter latch register ($C000) takes the ''inverted'' value (XOR $FF) compared to a regular MMC3.
These registers function identically to a normal [[MMC3]], except that the scanline counter latch register ($C000) takes the ''inverted'' value (XOR $FF) compared to a regular MMC3.


==Outer Bank/PRG Mask Register ($6800, write)==
==Outer Bank/PRG Mask Register ($6000, write)==
  Mask: $E803
  Mask: $E003
   
   
  D~7654 3210
  D~7654 3210
   ---------
   ---------
   .N.C CPPp
   XYBB CPPp
    | | |||+- PRG A17 if N=1
  |||| |||+- PRG A17 if N=1
    | | |++-- PRG A19..A18
  ||++-|+++- PRG A21..A18
    | +-+---- CHR A17..A18
  ||++-+---- CHR A19..A17
    +-------- PRG A17 mode
  |+-------- PRG A17 mode
              0: PRG A17=MMC3 PRG A17 (256 KiB inner PRG bank)
  |          0: PRG A17=MMC3 PRG A17 (256 KiB inner PRG bank size)
              1: PRG A17=p (128 KiB inner PRG bank)
  |          1: PRG A17=p (128 KiB inner PRG bank)
  +--------- CHR A17 mode
              0: CHR A17=MMC3 CHR A17 (256 KiB inner CHR bank size)
              1: CHR A17=C (128 KiB inner CHR bank)


==Solder Pad Register ($6801, write)==
==Miscellaneous Register ($6001, write)==
  Mask: $E803
  Mask: $E003
   
   
  D~7654 3210
  D~7654 3210
   ---------
   ---------
   .... ...M
   .... ..?M
           +- 0: CPU $8000-$FFFF reads PRG-ROM
           +- 0: CPU $8000-$FFFF reads PRG-ROM
               1: CPU $8000-$FFFF reads solder pad (D0/D1)
               1: CPU $8000-$FFFF reads solder pad (D0/D1)


==Inner CHR Bank Register ($6802, write)==
==Inner CHR Bank Register ($6002, write)==
  Mask: $E803
  Mask: $E803
   
   
Line 38: Line 42:
   ---------
   ---------
   .... CCCC
   .... CCCC
         ++++- CHR A16..A13 in GNROM mode,
         ++++- CHR A16..A13 in CNROM mode,
               ignored otherwise
               ignored otherwise


MMC3's CHR A10..A12 still apply, and therefore should be set up to form a contiguous 8 KiB bank.
==Mode Register ($6003, write)==
 
  Mask: $E003
==Mode Register ($6803, write)==
  Mask: $E803
   
   
  D~7654 3210
  D~7654 3210
   ---------
   ---------
   L..M ??N.
   L..C .?PP
   |  |  +-- PRG A14 mode if L=1
   |  |  ++- PRG Banking Mode
   |  |        0: PRG A14=MMC3 PRG A14 (NROM-128)
   |  |        0: MMC3
   |  |        1: PRG A14=CPU A14 (NROM-256)
  |  |        1: NROM-128: PRG A14=MMC3 PRG A14
   |  +------ Banking mode
  |  |        2: NROM-128: Same as 1
   |          0: MMC3 banking
   |  |        3: NROM-256: PRG A14=CPU A14
   |          1: GNROM banking
   |  +------ CHR Banking Mode
   +--------- Lock registers $6800 and $6803
   |          0: MMC3
   |          1: CNROM
   +--------- Lock registers $6000 and $6003
 
NROM PRG banking mode is implemented by holding the MMC3 clones' CPU A13 and A14 input low. This means that...
* MMC3 register #6 applies across the entire CPU $8000-$FFFF address range;
* the MMC3's PRG A13 output is substituted with CPU A13;
* in NROM-256 mode, the MMC3's PRG A14 output substituted with CPU A14;
* MMC3 $8000.6 bits 1-3 therefore select a 16 KiB inner bank number.
 
CNROM CHR banking mode is implemented by using register $6002 as a source for an 8 KiB inner bank number instead of the MMC3's CHR registers.


As was the case with [[NES 2.0 Mapper 373|similar mappers]], GNROM banking is implemented by holding MMC3 clone's CPU A14 input is low, so that MMC3 registers #6 and #7 apply both to $8000/$C000 and $A000/$E000, and replacing the MMC3's PRG A14 with CPU A14 in NROM-256 mode (N=1).
==Note==
==Note==
* Outer bank registers overlay any WRAM, and can only be written to if WRAM is enabled in the MMC3 ($A001=$80).
* Outer bank registers overlay any WRAM, and can only be written to if WRAM is enabled in the MMC3 ($A001=$80).
* Register $6802 is not affected by the Lock bit in register $6803.
* Register $6002 is not affected by the Lock bit in register $6003.
* [[INES Mapper 126]] is almost identical. It connects the higher CHR address lines differently, and MMC3 register $C000 functions normally.

Revision as of 19:36, 12 March 2020

NES 2.0 Mapper 534 denotes an MMC3-based multicart mapper with an optional (C)NROM-like PRG and CHR banking modes.

  • Atari Flashback Mini 7800
  • 2-in-1 数独/五子棋 (NJ064) by Shenzhen Nanjing
  • 18-in-1 Educational Computer by Zhuhai S.E.Z. Liming Electronic Co. Ltd.
  • 8-in-1 (kk3311) by Waixing
  • 8-in-1 (kk3314) by Waixing
  • 101-in-1 (a variant of which uses INES Mapper 045).

MMC3-compatible registers ($8000-$FFFF, write)

These registers function identically to a normal MMC3, except that the scanline counter latch register ($C000) takes the inverted value (XOR $FF) compared to a regular MMC3.

Outer Bank/PRG Mask Register ($6000, write)

Mask: $E003

D~7654 3210
  ---------
  XYBB CPPp
  |||| |||+- PRG A17 if N=1
  ||++-|+++- PRG A21..A18
  ||++-+---- CHR A19..A17
  |+-------- PRG A17 mode
  |           0: PRG A17=MMC3 PRG A17 (256 KiB inner PRG bank size)
  |           1: PRG A17=p (128 KiB inner PRG bank)
  +--------- CHR A17 mode
              0: CHR A17=MMC3 CHR A17 (256 KiB inner CHR bank size)
              1: CHR A17=C (128 KiB inner CHR bank)

Miscellaneous Register ($6001, write)

Mask: $E003

D~7654 3210
  ---------
  .... ..?M
          +- 0: CPU $8000-$FFFF reads PRG-ROM
             1: CPU $8000-$FFFF reads solder pad (D0/D1)

Inner CHR Bank Register ($6002, write)

Mask: $E803

D~7654 3210
  ---------
  .... CCCC
       ++++- CHR A16..A13 in CNROM mode,
             ignored otherwise

Mode Register ($6003, write)

Mask: $E003

D~7654 3210
  ---------
  L..C .?PP
  |  |   ++- PRG Banking Mode
  |  |        0: MMC3
  |  |        1: NROM-128: PRG A14=MMC3 PRG A14
  |  |        2: NROM-128: Same as 1
  |  |        3: NROM-256: PRG A14=CPU A14
  |  +------ CHR Banking Mode
  |           0: MMC3
  |           1: CNROM
  +--------- Lock registers $6000 and $6003

NROM PRG banking mode is implemented by holding the MMC3 clones' CPU A13 and A14 input low. This means that...

  • MMC3 register #6 applies across the entire CPU $8000-$FFFF address range;
  • the MMC3's PRG A13 output is substituted with CPU A13;
  • in NROM-256 mode, the MMC3's PRG A14 output substituted with CPU A14;
  • MMC3 $8000.6 bits 1-3 therefore select a 16 KiB inner bank number.

CNROM CHR banking mode is implemented by using register $6002 as a source for an 8 KiB inner bank number instead of the MMC3's CHR registers.

Note

  • Outer bank registers overlay any WRAM, and can only be written to if WRAM is enabled in the MMC3 ($A001=$80).
  • Register $6002 is not affected by the Lock bit in register $6003.
  • INES Mapper 126 is almost identical. It connects the higher CHR address lines differently, and MMC3 register $C000 functions normally.