INES Mapper 068: Difference between revisions
(CHR ROM is split into two chips) |
No edit summary |
||
Line 1: | Line 1: | ||
[[category:iNES Mappers]] | |||
'''iNES Mapper 068''' is a mapper used by ''After Burner''. | '''iNES Mapper 068''' is a mapper used by ''After Burner''. | ||
It has the unusual ability to map CHR ROM into the part of the PPU's address space used for nametables. | It has the unusual ability to map CHR ROM into the part of the PPU's address space used for nametables. | ||
Line 39: | Line 41: | ||
== References == | == References == | ||
*[http://nesdev.parodius.com/sunsoft.txt Goroh's Sunsoft mapper doc] | *[http://nesdev.parodius.com/sunsoft.txt Goroh's Sunsoft mapper doc] | ||
[[ | Here are Disch's original notes: | ||
======================== | |||
= Mapper 068 = | |||
======================== | |||
Example Games: | |||
-------------------------- | |||
After Burner 2 | |||
Maharaja | |||
Registers: | |||
--------------------------- | |||
Range,Mask: $8000-FFFF, $F000 | |||
$8000: CHR Reg 0 (2k @ $0000) | |||
$9000: CHR Reg 1 (2k @ $0800) | |||
$A000: CHR Reg 2 (2k @ $1000) | |||
$B000: CHR Reg 3 (2k @ $1800) | |||
$C000: [.NNN NNNN] NT-ROM Reg 0 | |||
$D000: [.NNN NNNN] NT-ROM Reg 1 | |||
$E000: [...R ...M] Mirroring (see section below) | |||
$F000: PRG Reg (16k @ $8000) | |||
CHR Setup: | |||
--------------------------- | |||
$0000 $0400 $0800 $0C00 $1000 $1400 $1800 $1C00 | |||
+---------------+---------------+---------------+---------------+ | |||
| $8000 | $9000 | $A000 | $B000 | | |||
+---------------+---------------+---------------+---------------+ | |||
PRG Setup: | |||
--------------------------- | |||
$8000 $A000 $C000 $E000 | |||
+---------------+---------------+ | |||
| $F000 | { -1} | | |||
+---------------+---------------+ | |||
Mirroring: | |||
--------------------------- | |||
The mirroring reg has two significant bits: | |||
$E000: [...R ...M] | |||
'M' selects H/V: | |||
0 = Vert | |||
1 = Horz | |||
'R' selects whether or not to use CHR-ROM as nametables. | |||
0 = normal mirroring | |||
1 = use CHR-ROM | |||
When 'R' is set, $C000 and $D000 are used to select 1k CHR-ROM pages to use as nametables. They are arranged | |||
in either Horz or Vert mirroring fashion depending on the 'M' bit ($C000 would be used in place of NTA, | |||
$D000 in place of NTB). | |||
R=1, M=0: | |||
[ $C000 ][ $D000 ] | |||
[ $C000 ][ $D000 ] | |||
R=1, M=1: | |||
[ $C000 ][ $C000 ] | |||
[ $D000 ][ $D000 ] | |||
Note that CHR-ROM for nametables is taken from the last 128k of CHR. This means you must effectively OR the | |||
value written to $C000/$D000 with $80. |
Revision as of 23:33, 13 November 2011
iNES Mapper 068 is a mapper used by After Burner.
It has the unusual ability to map CHR ROM into the part of the PPU's address space used for nametables.
Registers
$8000-$8FFF: CHR bank at $0000
Map a 2 KiB CHR ROM bank into PPU $0000.
$9000-$9FFF: CHR bank at $0800
Map a 2 KiB CHR ROM bank into PPU $0800.
$A000-$AFFF: CHR bank at $1000
Map a 2 KiB CHR ROM bank into PPU $1000.
$B000-$BFFF: CHR bank at $1800
Map a 2 KiB CHR ROM bank into PPU $1800.
$C000-$CFFF: Nametable register 0
Map a 1 KiB CHR ROM bank in place of the lower nametable (CIRAM $000-$3FF). Only D6-D0 are used; D7 is ignored and treated as 1, so nametables must be in the last 128 KiB of CHR ROM.
$D000-$DFFF: Nametable register 1
Map a 1 KiB CHR ROM bank in place of the upper nametable (CIRAM $400-$7FF). Only D6-D0 are used; D7 is ignored and treated as 1.
$E000-$EFFF: Nametable control
7654 3210 | | | +- Mirroring | 0: vertical (0101); 1: horizontal (0011); | 2: 1-screen (0000); 3: 1-screen (1111) +------ Chip select for PPU $2000-$2FFF (nametables): 0 for CIRAM or 1 for CHR ROM
Nametable mirroring works the same way in both CIRAM and CHR ROM modes. Not all documents mention the single screen mirroring mode; its behavior should be verified against an authentic cartridge.
$F000-$FFFF: PRG bank at $8000
PRG bank switching works much like iNES Mapper 002. Writes map a 16 KiB PRG bank into $8000-$BFFF, leaving $C000-$FFFF fixed to the last 16 KiB in the PRG ROM.
Hardware
Boards using this mapper usually have CHR ROM split into two chips.
References
Here are Disch's original notes: ======================== = Mapper 068 = ======================== Example Games: -------------------------- After Burner 2 Maharaja Registers: --------------------------- Range,Mask: $8000-FFFF, $F000 $8000: CHR Reg 0 (2k @ $0000) $9000: CHR Reg 1 (2k @ $0800) $A000: CHR Reg 2 (2k @ $1000) $B000: CHR Reg 3 (2k @ $1800) $C000: [.NNN NNNN] NT-ROM Reg 0 $D000: [.NNN NNNN] NT-ROM Reg 1 $E000: [...R ...M] Mirroring (see section below) $F000: PRG Reg (16k @ $8000) CHR Setup: --------------------------- $0000 $0400 $0800 $0C00 $1000 $1400 $1800 $1C00 +---------------+---------------+---------------+---------------+ | $8000 | $9000 | $A000 | $B000 | +---------------+---------------+---------------+---------------+ PRG Setup: --------------------------- $8000 $A000 $C000 $E000 +---------------+---------------+ | $F000 | { -1} | +---------------+---------------+ Mirroring: --------------------------- The mirroring reg has two significant bits: $E000: [...R ...M] 'M' selects H/V: 0 = Vert 1 = Horz 'R' selects whether or not to use CHR-ROM as nametables. 0 = normal mirroring 1 = use CHR-ROM When 'R' is set, $C000 and $D000 are used to select 1k CHR-ROM pages to use as nametables. They are arranged in either Horz or Vert mirroring fashion depending on the 'M' bit ($C000 would be used in place of NTA, $D000 in place of NTB). R=1, M=0: [ $C000 ][ $D000 ] [ $C000 ][ $D000 ] R=1, M=1: [ $C000 ][ $C000 ] [ $D000 ][ $D000 ] Note that CHR-ROM for nametables is taken from the last 128k of CHR. This means you must effectively OR the value written to $C000/$D000 with $80.