INES Mapper 078: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(→‎Hardware: submapper summary)
(→‎Bank Select ($8000-$FFFF): it's apparently not the "four screens" nametables bit.)
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[Category:iNES Mappers|078]][[Category:Discrete logic mappers|078]][[Category:in NesCartDB|078]]
{{DEFAULTSORT:078}}[[Category:iNES Mappers]][[Category:Discrete logic mappers]][[Category:in NesCartDB]][[Category:NES 2.0 mappers with submappers]]
[[iNES Mapper 078]] was used for two games: Holy Diver and Cosmo Carrier.
[[iNES Mapper 078]] was used for two games: ''Holy Diver'' and ''Uchuusen - Cosmo Carrier''.


== Overview ==
== Overview ==
Line 26: Line 26:
  ++++------- Select 8KiB CHR ROM bank for PPU $0000-$1FFF
  ++++------- Select 8KiB CHR ROM bank for PPU $0000-$1FFF


The two mirroring modes are not compatible, and trying to run either game with the other's hardware will produce major graphical glitching or lockups. They were likely combined into the same mapper due to a misunderstanding of 4-screen mirroring. To run either game totally correctly requires the mirroring setup shown here.
The two mirroring modes are not compatible, and trying to run either game with the other's hardware will produce major graphical glitching or lockups.
 
iNES1 ROM image headers often set the "alternative nametables" flag for Holy Diver and cleared it for Cosmo Carrier. NES2.0 uses submappers.


== Hardware ==
== Hardware ==


In both cases, the hardware implementation is simply a [[CNROM]] and a [[UNROM]] put together.  Two [[74161|74HC161]] are used to form an 8 bit latch, with 4 bits connecting the CHR ROM's high address lines, and 3 bits connecting to a [[7432|74HC32]], which provides the logic to fix the top bank of PRG ROM while swapping the first 16KiB.  The last latched bit is connected directly to CIRAM A10 on Cosmo Carrier, as in [[AxROM]].  On Holy Diver, that bit is connected to a [[7400|74HC00]], which serves as a 2:1 mux of PPU A10 and PPU A11 into CIRAM A10 to provide the desired mirroring.  Holy Diver also contains a 74HC245 to compensate for a slow CHR ROM chip.
In both cases, the hardware implementation is simply a [[CNROM]] and a [[UNROM]] put together.  Two [[74161|74HC161]] are used to form an 8 bit latch, with 4 bits connecting the CHR ROM's high address lines, and 3 bits connecting to a [[7432|74HC32]], which provides the logic to fix the top bank of PRG ROM while swapping the first 16KiB.  The last latched bit is connected directly to CIRAM A10 on Cosmo Carrier, as in [[AxROM]].  On Holy Diver, that bit is connected to a [[7400|74HC00]], which serves as a 2:1 mux of PPU A10 and PPU A11 into CIRAM A10 to provide the desired mirroring.  Holy Diver also contains a 74HC245 to compensate for a slow CHR ROM chip.
  Here are Disch's original notes: 
  ========================
  =  Mapper 078          =
  ========================
 
 
  Example Games:
  --------------------------
  Holy Diver
  Uchuusen - Cosmo Carrier
 
 
  Notes:
  ---------------------------
  This mapper number covers two seperate mappers which are *almost* identical... however the mirroring control
  on each is different (making them incompatible).  You'll probably have to do a CRC or Hash check to figure
  out which mirroring setup to use.
 
  I think some emus might also look at the mirroring bit in the iNES header to determine which setup to use --
  however the ROMs I have do not seem to have the mirroring bit set differently, so I don't know how well that
  would work (not to mention it's probably not a good idea anyway).
 
  Registers: (** BUS CONFLICTS **)
  ---------------------------
 
    $8000-FFFF:  [CCCC MPPP]
      C = CHR Reg (8k @ $0000)
      P = PRG Reg (16k @ $8000)
      M = Mirroring:
 
        --For Uchuusen - Cosmo Carrier--
          0 = 1ScA
          1 = 1ScB
 
        --For Holy Diver--
          0 = Horz
          1 = Vert
 
 
  PRG Setup:
  ---------------------------
 
        $8000  $A000  $C000  $E000 
      +---------------+---------------+
      |    $8000    |    { -1}    |
      +---------------+---------------+


For homebrew, both Nestopia-1.4.0 and FCEUX-2.1.5 default to the 1scA/1scB mirroring provided by Uchuusen.
For homebrew, both Nestopia-1.4.0 and FCEUX-2.1.5 default to the 1scA/1scB mirroring provided by Uchuusen.
Emulators SHOULD support [[NES 2.0 submappers]]: 1 for Uchuusen and 3 for Holy Diver.
Emulators SHOULD support [[NES 2.0 submappers]]: 1 for Uchuusen and 3 for Holy Diver.
== See also ==
* [http://www.romhacking.net/documents/362/ NES Mapper list] by Disch.
*[http://nesdev.org/mappers.zip Comprehensive NES Mapper Document] by \Firebug\. Information on mapper's initial state is innacurate.


[[Category:NES 2.0 mappers with submappers]]
[[Category:NES 2.0 mappers with submappers]]

Latest revision as of 09:43, 1 February 2024

iNES Mapper 078 was used for two games: Holy Diver and Uchuusen - Cosmo Carrier.

Overview

  • PRG ROM size: 128 KiB
  • PRG ROM bank size: 16 KiB
  • PRG RAM: No
  • CHR capacity: 128KiB ROM
  • CHR bank size: 8 KiB
  • Nametable mirroring: Mapper controlled
  • Subject to bus conflicts: Yes

Banks

  • CPU $8000-$BFFF: 16KiB switchable PRG ROM bank
  • CPU $C000-$FFFF: Fixed to last 16KiB of PRG ROM
  • PPU $0000-$1FFF: 8KiB switchable CHR ROM bank

Registers

Bank Select ($8000-$FFFF)

7  bit  0
---- ----
CCCC MPPP
|||| ||||
|||| |+++-- Select 16 KiB PRG ROM bank for CPU $8000-$BFFF
|||| +----- Mirroring.  Holy Diver: 0 = H, 1 = V.  Cosmo Carrier: 0 = 1scA, 1 = 1scB.
++++------- Select 8KiB CHR ROM bank for PPU $0000-$1FFF

The two mirroring modes are not compatible, and trying to run either game with the other's hardware will produce major graphical glitching or lockups.

iNES1 ROM image headers often set the "alternative nametables" flag for Holy Diver and cleared it for Cosmo Carrier. NES2.0 uses submappers.

Hardware

In both cases, the hardware implementation is simply a CNROM and a UNROM put together. Two 74HC161 are used to form an 8 bit latch, with 4 bits connecting the CHR ROM's high address lines, and 3 bits connecting to a 74HC32, which provides the logic to fix the top bank of PRG ROM while swapping the first 16KiB. The last latched bit is connected directly to CIRAM A10 on Cosmo Carrier, as in AxROM. On Holy Diver, that bit is connected to a 74HC00, which serves as a 2:1 mux of PPU A10 and PPU A11 into CIRAM A10 to provide the desired mirroring. Holy Diver also contains a 74HC245 to compensate for a slow CHR ROM chip.

For homebrew, both Nestopia-1.4.0 and FCEUX-2.1.5 default to the 1scA/1scB mirroring provided by Uchuusen. Emulators SHOULD support NES 2.0 submappers: 1 for Uchuusen and 3 for Holy Diver.

See also