INES Mapper 068: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(→‎$F000-$FFFF: PRG bank at $8000: update per http://forums.nesdev.com/viewtopic.php?p=106818#p106818)
(→‎$F000-$FFFF: PRG bank at $8000: Update per http://forums.nesdev.com/viewtopic.php?p=106818)
Line 34: Line 34:


=== $F000-$FFFF: PRG bank at $8000 ===
=== $F000-$FFFF: PRG bank at $8000 ===
7  bit  0
7  bit  0
---- ----
---- ----
...E BBBB
...E BBBB
  | ||||
    | ||||
  | ++++- Select 16 KiB PRG banked into $8000-$BFFF
    | ++++- Select 16 KiB PRG banked into $8000-$BFFF
  +------ Enable PRG RAM +CS2
    +------ 1:Enable PRG RAM = WRAM +CS2


== Hardware ==
== Hardware ==

Revision as of 00:09, 27 January 2013


iNES Mapper 068 denotes PCBs using the Sunsoft-4 mapper IC. In the US it was only used in the game 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

7  bit  0
---- ----
...E BBBB
   | ||||
   | ++++- Select 16 KiB PRG banked into $8000-$BFFF
   +------ 1:Enable PRG RAM = WRAM +CS2

Hardware

Both the US and Japanese release of After Burner 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.