NES 2.0 Mapper 534: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
NewRisingSun (talk | contribs) (Rewrite based on new dumps) |
NewRisingSun (talk | contribs) (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 ( | '''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 ($ | ==Outer Bank/PRG Mask Register ($6000, write)== | ||
Mask: $ | Mask: $E003 | ||
D~7654 3210 | 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: $ | Mask: $E003 | ||
D~7654 3210 | D~7654 3210 | ||
--------- | --------- | ||
.... .. | .... ..?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 ($ | ==Inner CHR Bank Register ($6002, write)== | ||
Mask: $E803 | Mask: $E803 | ||
Line 38: | Line 42: | ||
--------- | --------- | ||
.... CCCC | .... CCCC | ||
++++- CHR A16..A13 in | ++++- CHR A16..A13 in CNROM mode, | ||
ignored otherwise | ignored otherwise | ||
==Mode Register ($6003, write)== | |||
Mask: $E003 | |||
==Mode Register ($ | |||
Mask: $ | |||
D~7654 3210 | D~7654 3210 | ||
--------- | --------- | ||
L.. | L..C .?PP | ||
| | + | | | ++- PRG Banking Mode | ||
| | 0: PRG A14=MMC3 PRG A14 | | | 0: MMC3 | ||
| | | | | 1: NROM-128: PRG A14=MMC3 PRG A14 | ||
| +------ Banking | | | 2: NROM-128: Same as 1 | ||
| 0: MMC3 | | | 3: NROM-256: PRG A14=CPU A14 | ||
| 1: | | +------ CHR Banking Mode | ||
+--------- Lock registers $ | | 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== | ==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 $ | * 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.