INES Mapper 234: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Created page with "Category:iNES Mappers Here are Disch's original notes: ======================== = Mapper 234 = ======================== Example Game: ----------…")
 
(Revise information relating to the three-chip version (https://forums.nesdev.org/viewtopic.php?t=24627))
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:iNES Mappers]]
{{DEFAULTSORT:234}}[[Category:iNES Mappers]][[Category:Multicart mappers]][[Category:in NesCartDB]][[Category:Discrete logic mappers]][[Category:Mappers triggering on reads]]
  Here are Disch's original notes:
[[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.
  ========================
 
  =  Mapper 234         =
== Overview ==
  ========================
* 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 (PAL)
* 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.
  Verrrry strangeRegisters seem to lie at $FF80-$FFFF... the kicker is that *reading* those addresses also
 
  trigger a register write (the value written is the value being read).
All registers are cleared on reset.
 
=== Outer Bank Control ($FF80-$FF9F) ===
  Example:
7  bit  0
 
MOQq BBBb 
    LDA $FF80 ; where $FF80 contains $62
|||| ||||
 
|||| ++++-- Block selection
  would have the same effect on the mapper as:
|||+------- 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)
    LDA #$62
|+--------- Mode (0=CNROM, 1=NINA-03)
    STA $FF80
+---------- Mirroring (0=Vertical, 1=Horizontal)
 
 
 
North American and later Australian cartridge versions were distributed with only ROMs 1+2 populated. The early Australian cartridge version uses three chips and comes with ROMs 1+2+3 populated; for the latter, the Q and q bits must be emulated.
 
  Registers:
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.  However, the Inner Bank Control Register can be set even when updates to the other registers are disabled.
  Range,Mask:  $FF80-FFFF, $FFF8
 
 
=== Lockout defeat control ($FFC0-$FFDF) ===
 
7  bit  0
    $FF80, $FF88, $FF90, $FF98:  [MO.. BBBb]  Reg 0
.... ..LL
      M = Mirroring (0=Vert, 1=Horz)
        ||
      O = Mode
        ++-- Lockout defeat (charge pump drive)
      B,b = Block selection
 
 
Emulators do not need to implement the lockout defeat control register.
    $FFC0, $FFC8, $FFD0, $FFD8:  [???? ????]  Reg 1
 
 
=== Inner Bank Control ($FFE8-$FFF7) ===
 
7  bit  0
    $FFE8, $FFF0:  [.cCC ...P]              Reg 2
.cCC ...P
    C,c = CHR page
   |||    |
    P = PRG page
   |||    +-- PRG page
 
   +++------- CHR page
 
 
  Once Reg 0 contains a non-zero value, it is locked and cannot be changed until the system is reset.
Both CNROM and NINA-03 modes select a 32kB bank of PRG ROM at $8000 and an 8kB bank of CHR ROM at $0000.
 
 
  ?Same is true for Reg 1?
In CNROM mode, the 32kB PRG ROM bank is BBBb and the 8kB CHR ROM bank is BBBbCC.
 
 
  Reg 2 is never locked.
In NINA-03 mode, the 32kB PRG ROM bank is BBBP and the 8kB CHR ROM bank is BBBcCC.
 
 
 
  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.

Latest revision as of 02:07, 23 May 2023

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)

North American and later Australian cartridge versions were distributed with only ROMs 1+2 populated. The early Australian cartridge version uses three chips and comes with ROMs 1+2+3 populated; for the latter, the Q and q bits must be emulated.

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. However, the Inner Bank Control Register can be set even when updates to the other registers are disabled.

Lockout defeat control ($FFC0-$FFDF)

7  bit  0
.... ..LL
       ||
       ++-- Lockout defeat (charge pump drive)

Emulators do not need to implement the lockout defeat control register.

Inner Bank Control ($FFE8-$FFF7)

7  bit  0
.cCC ...P
 |||    |
 |||    +-- PRG page
 +++------- CHR page

Both CNROM and NINA-03 modes select a 32kB bank of PRG ROM at $8000 and an 8kB bank of CHR ROM at $0000.

In CNROM mode, the 32kB PRG ROM bank is BBBb and the 8kB CHR ROM bank is BBBbCC.

In NINA-03 mode, the 32kB PRG ROM bank is BBBP and the 8kB CHR ROM bank is BBBcCC.