INES Mapper 234: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (RE'd the board. Described the extra bits.)
(reformat to the wiki's preferred presentation.)
Line 1: Line 1:
[[Category:iNES Mappers]]
[[Category:iNES Mappers]][[Category:Multicart mappers]][[Category:in NesCartDB]][[Category:Discrete logic mappers]]
Mapper 234 describes the Maxi 15 multicart, which allows the combination of slightly-modified 32k/32k [[CNROM]] and 64k/64k [[NINA-003-006|NINA-03]] games. The only instance of this board was released with 512k/512k, but seems to be laid out in a way that would support a total of 1M/1M in 4 512k ROMs.
[[iNES Mapper 234]] represents the Maxi 15 multicart, which allows the combination of slightly-modified 32k/32k [[CNROM]] and 64k/64k [[NINA-003-006|NINA-03]] games. The only instance of this board was released with 512k/512k, but seems to be laid out in a way that would support a total of 1M/1M in 4 512k ROMs.


  ========================
== Overview ==
  =  Mapper 234          =
* PRG ROM size: 512 KiB or 1MiB
  ========================
* PRG ROM bank size: 32 KiB inner / 32 or 64 KiB outer
 
* PRG RAM: No
  Example Game:
* CHR capacity: 512 KiB or 1MiB ROM
  --------------------------
* CHR bank size: 8 KiB inner / 32 or 64 KiB outer
  Maxi 15
* Nametable [[mirroring]]: Controlled by mapper.
 
* Subject to [[bus conflict]]s: Yes
 
 
  Notes:
== Registers ==
  --------------------------
Typical for the Atari 2600, but strange for the NES: Registers lie at $FF80-$FFF7 but bankswitching happens on the ''value that was read''. Bus conflicts are thus avoided by storing the library of desired bankswitch values in ROM. Writes to the registers will produce bus conflicts.
  Typical for the Atari 2600, but strange for the NES: Registers lie at
 
  $FF80-$FFFF but bankswitching happens on reads, as well as writes. Bus
All registers are cleared on reset.
  conflicts are thus avoided by storing the library of desired bankswitch
=== Outer Bank Control ($FF80-$FF9F) ===
  values in ROM.
7  bit  0
 
  MOQq BBBb   
  Example:
││││ ││││
 
││││ └┴┴┴── Block selection
    LDA $FF80  ; where $FF80 contains $62
│││└─────── ROMs 3+4 Disable (0=normal, 1=disable ROMs 3+4 even if selected by Q)
 
││└──────── ROM switch (0=select ROMs 1+2, 1=select ROMs 3+4)
  would (ignoring bus conflicts) have the same effect on the mapper as:
│└───────── Mode (0=CNROM, 1=NINA-03)
 
└────────── Mirroring (0=Vertical, 1=Horizontal)
    LDA #$62
 
    STA $FF80
Since the cartridge was distributed with only ROMs 1+2 populated, the Q and q bits are irrelevant.
 
 
  Registers:
  ---------------------------
 
  Range,Mask:  $FF80-FFFF, $FFF8
 
    $FF80, $FF88, $FF90, $FF98: [MOQq BBBb] Reg 0
      M = Mirroring (0=Vert, 1=Horz)
      O = Mode (0=CNROM, 1=NINA-03)
      B,b = Block selection
      q = ROMs 3+4 /Enable (0=normal, 1=disable ROM further from cartridge edge)
   
   
          Since the cartridge was distributed with only ROMs 1+2
The q bit seems to have been intended to have been an extra address line for ROMs 3+4, enabling a total of 1.5M/1.5M in the cartridge, but instead of just being routed to the A19 line for ROMs 3+4, it instead also is ORed with the Output Enable signal and so disables them.
          populated, this is irrelevant.
 
Once any of the Q, q, BBB, or b bits are set, neither this register nor the Lockout defeat register can be updated.
          This bit seems to have been intended to have been an extra
 
          address line for ROMs 3+4, enabling a total of 1.5M/1.5M in the
=== Lockout defeat control ($FFC0-$FFDF) ===
          cartridge, but a mistake prevents it from working.
7  bit  0
  .... ..LL
      Q = ROM switch (0=enable ROMs 1+2, 1=enable ROMs 3+4)
        ││
          i.e. 0 for normal operation
        └┴── Lockout defeat (charge pump drive)
 
    $FFC0, $FFC8, $FFD0, $FFD8: [.... ..LL]  Reg 1
=== Inner Bank Control ($FFE8-$FFF7) ===
      L = Lockout defeat (charge pump drive)
7  bit  0
   
.cCC ...P
    $FFE8, $FFF0:  [.cCC ...P]              Reg 2
  │││    │
    C,c = CHR page
  │││    └── PRG page
    P = PRG page
   └┴┴─────── CHR page
    
 
 
When the outer bank control has been set to CNROM mode, the P and c bits are ignored, and QqBBBb select a 32kB slice of both PRG and CHR for the game to occupy.
  Once the bottom 6 bits of Reg 0 contain a non-zero value, Reg 0 and Reg 1
 
  are locked and cannot be changed until the system is reset.
When the outer bank control has been set to NINA-03 mode, the b bit is ignored, and replaced with P and C for each ROM; thus the QqBBB bits select a 64kB slice for the game.
 
  Reg 2 is never locked.
 
 
 
  CHR Setup:
  ---------------------------
 
  8k page @ $0000 selected by the following:
 
      'O'    CHR page
    ---------------------
      0      %BB BbCC
      1      %BB BcCC
 
 
  PRG Setup:
  ---------------------------
 
  32k page @ $8000 selected by the following:
 
      'O'    PRG page
    ---------------------
      0      %BBBb
      1      %BBBP
 
 
 
  On Powerup/Reset:
  ---------------------------
 
  Regs all filled with 0 and unlocked.

Revision as of 21:41, 25 July 2012

iNES Mapper 234 represents the Maxi 15 multicart, which allows the combination of slightly-modified 32k/32k CNROM and 64k/64k NINA-03 games. The only instance of this board was released with 512k/512k, but seems to be laid out in a way that would support a total of 1M/1M in 4 512k ROMs.

Overview

  • PRG ROM size: 512 KiB or 1MiB
  • PRG ROM bank size: 32 KiB inner / 32 or 64 KiB outer
  • PRG RAM: No
  • CHR capacity: 512 KiB or 1MiB ROM
  • CHR bank size: 8 KiB inner / 32 or 64 KiB outer
  • Nametable mirroring: Controlled by mapper.
  • Subject to bus conflicts: Yes

Registers

Typical for the Atari 2600, but strange for the NES: Registers lie at $FF80-$FFF7 but bankswitching happens on the value that was read. Bus conflicts are thus avoided by storing the library of desired bankswitch values in ROM. Writes to the registers will produce bus conflicts.

All registers are cleared on reset.

Outer Bank Control ($FF80-$FF9F)

7  bit  0
MOQq BBBb  
││││ ││││
││││ └┴┴┴── Block selection
│││└─────── ROMs 3+4 Disable (0=normal, 1=disable ROMs 3+4 even if selected by Q)
││└──────── ROM switch (0=select ROMs 1+2, 1=select ROMs 3+4)
│└───────── Mode (0=CNROM, 1=NINA-03)
└────────── Mirroring (0=Vertical, 1=Horizontal)

Since the cartridge was distributed with only ROMs 1+2 populated, the Q and q bits are irrelevant.

The q bit seems to have been intended to have been an extra address line for ROMs 3+4, enabling a total of 1.5M/1.5M in the cartridge, but instead of just being routed to the A19 line for ROMs 3+4, it instead also is ORed with the Output Enable signal and so disables them.

Once any of the Q, q, BBB, or b bits are set, neither this register nor the Lockout defeat register can be updated.

Lockout defeat control ($FFC0-$FFDF)

7  bit  0
.... ..LL
       ││
       └┴── Lockout defeat (charge pump drive)

Inner Bank Control ($FFE8-$FFF7)

7  bit  0
.cCC ...P
 │││    │
 │││    └── PRG page
 └┴┴─────── CHR page

When the outer bank control has been set to CNROM mode, the P and c bits are ignored, and QqBBBb select a 32kB slice of both PRG and CHR for the game to occupy.

When the outer bank control has been set to NINA-03 mode, the b bit is ignored, and replaced with P and C for each ROM; thus the QqBBB bits select a 64kB slice for the game.