INES Mapper 022

From Nesdev wiki
Jump to: navigation, search

iNES Mapper 022 is used to represent the VRC2a variant of the Konami VRC2 mapper (PCB 351618).

 ========================
 =  Mapper 022          =
 =       + 023          =
 =       + 025          =
 ========================
 
 aka
 --------------------------
 VRC2
 
 
 
 Example Games:
 --------------------------
 Ganbare Pennant Race     (022)
 TwinBee 3                (022)
 Wai Wai World            (023)
 Ganbare Goemon Gaiden    (025)
 
 
 
 
 Multiple numbers, just one mapper:
 --------------------------
 These mapper numbers (022, 023) represent 2 wiring variations of the same mapper:  VRC2.  Each variation
 operates the same, only the registers used are different because their lines are reversed from each other:
 
    variant   lines     registers                       Mapper Number
    =================================================================
    VRC2a:    A1, A0    $x000, $x002, $x001, $x003      022   * divides CHR bank select by two
    VRC2b:    A0, A1    $x000, $x001, $x002, $x003      023
    VRC2c:    A1, A0    $x000, $x002, $x001, $x003      025   * does NOT divide CHR bank select by two
 
 This doc will use the 'VRC2b' registers (0,1,2,3) in all following register descriptions.  For 'VRC2a',
 simply reverse $x001 and $x002 registers.
 
 
 VRC2a CHR:
 ---------------------------
 Important note!  On VRC2a (mapper 022) only the high 7 bits of the CHR regs are used -- the low bit is
 ignored.  Therefore, you effectively have to right-shift the CHR page by 1 to get the actual page number.
 
 For example... both $06 and $07 would both indicate page $03
 
 This applies to VRC2a only.  VRC2b (mapper 023) behaves normally.
 
 
 
 VRC2 vs. VRC4:
 --------------------------
 VRC2 is strikingly similar to VRC4 (see mapper 021).  The differences are:
 
  1)  VRC4 has IRQs, VRC2 does not
  2)  VRC4 has 5 bits for PRG regs, VRC2 only has 4 bits
  3)  VRC4 has 2 PRG modes, VRC2 does not.
  4)  VRC4 has 9 bit CHR banks, VRC2 only has 8
  5)  VRC4 internally supports external RAM, VRC2 does not
 
 
 Those differences aside -- they act exactly the same.
 
 
 
 Registers:
 --------------------------
 Some registers are mirrored across several addresses.  For example, writing to $8003 has the same effect as
 writing to $8000.
 
 
 $8000-$8003:  [.... PPPP]   PRG Reg 0 (select 8k @ $8000)
 $9000-$9003:  [.... ..MM]   Mirroring:
    %00 = Vert
    %01 = Horz
    %10 = 1ScA
    %11 = 1ScB
 
 $A000-$A003:  [.... PPPP]   PRG Reg 1 (select 8k @ $A000)
 $B000-$E003:  [.... CCCC]   CHR Regs (see CHR Setup)
 
 
 PRG Setup:
 --------------------------
 
       $8000   $A000   $C000   $E000  
     +-------+-------+-------+-------+
     | $8000 | $A000 | { -2} | { -1} |
     +-------+-------+-------+-------+
 
 
 
 CHR Setup:
 --------------------------
 The VRC2 only has 4 data pins for CHR Regs.  To compensate, two CHR regs are combined to form a single page
 number.  One reg contains the high 4 bits and the other reg contains the low 4 bits (allowing for 8-bit page
 numbers)
 
 Example:  $B000+$B001  select 1k CHR page @ $0000
     if   $B000=$03
     and  $B001=$01
     then use page $13 (VRC2b)
           or page $09 (VRC2a -- see notes above)
 
 
       $0000   $0400   $0800   $0C00   $1000   $1400   $1800   $1C00 
     +-------+-------+-------+-------+-------+-------+-------+-------+
     |$B000+1|$B002+3|$C000+1|$C002+3|$D000+1|$D002+3|$E000+1|$E002+3|
     +-------+-------+-------+-------+-------+-------+-------+-------+