INES Mapper 068

From NESdev Wiki
Revision as of 23:33, 13 November 2011 by Zeromus (talk | contribs)
Jump to navigationJump to search


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.