INES Mapper 185: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (add othello)
(formatting disch notes into common style)
Line 2: Line 2:
'''iNES Mapper 185''' is used for games that use the [[CNROM]] board with weak copy protection measures.
'''iNES Mapper 185''' is used for games that use the [[CNROM]] board with weak copy protection measures.


  ========================
Example Games:
   = Mapper 185          =
* ''Spy Vs. Spy (J)''
  ========================
* ''Mighty Bomb Jack (J)''
 
==Overview==
* PRG ROM size: 16 KiB or 32 KiB
* PRG ROM bank size: Not bankswitched
* PRG RAM: None
* CHR capacity: 8 KiB ROM (copy protected)
* Nametable [[mirroring]]: Solder pads select vertical or horizontal mirroring
* Subject to [[bus conflict]]s: Yes [[Category:Mappers with bus conflicts]]
 
==Banks==
* PPU $0000-$1FFF: 8 KB switchable CHR ROM bank
 
==Registers==
=== Bank select ($8000-$FFFF) ===
7  bit  0
---- ----
..CC ..CC
  ||   ||
  ++---++- Used for CHR copy protection.
 
This mapper is retarded. These games only have 8k of CHR, and they attempt to disable CHR by writing
a specific value to the CHR Reg, then VERIFY that garbage is read back, then they swap back to the
actual CHR.  If they don't get the expected garbage, they lock up.
    
    
  Example Games:
Perhaps this was some sort of copy protection?
  --------------------------
 
  Spy Vs. Spy (J)
Each game has their own value that enables/disables CHR. Rather than failing to attempt to list all the
  Mighty Bomb Jack (J)
exact values used here (I don't know what all of them are), I can provide some logic:
    
    
  Registers: (**BUS CONFLICTS**)
if C AND $0F is nonzero, and if C does not equal $13CHR is enabled
  ---------------------------
otherwise CHR is disabled
    $8000-FFFF[..CC ..CC]
      CHR Reg
    
    
 
When CHR is disabled, the pattern tables are open bus. Theoretically, this should
  Notes:
return the LSB of the address read, but real-world behavior may vary.
  ---------------------------
 
  This mapper is retarded.  These games only have 8k of CHR, and they attempt to disable CHR by writing
  a specific value to the CHR Reg, then VERIFY that garbage is read back, then they swap back to the
  actual CHR.  If they don't get the expected garbage, they lock up.
 
  Perhaps this was some sort of copy protection?
 
  Each game has their own value that enables/disables CHR.  Rather than failing to attempt to list all the
  exact values used here (I don't know what all of them are), I can provide some logic:
 
  if C AND $0F is nonzero, and if C does not equal $13:  CHR is enabled
  otherwise CHR is disabled
 
  When CHR is disabled, the pattern tables are open bus. Theoretically, this should
  return the LSB of the address read, but real-world behavior may vary.


This table has been assembled from nocash and the sources of MESS, Nestopia, and FCEUX.
This table has been assembled from nocash and the sources of MESS, Nestopia, and FCEUX.
Line 54: Line 61:
| [http://bootgod.dyndns.org:7777/profile.php?id=2332 Seicross (v2)] || 0x20 || 0x21 <!-- 8 -->
| [http://bootgod.dyndns.org:7777/profile.php?id=2332 Seicross (v2)] || 0x20 || 0x21 <!-- 8 -->
|}
|}
==References==
* [http://www.romhacking.net/documents/362/ Disch's Mapper Notes]

Revision as of 21:46, 18 April 2015

iNES Mapper 185 is used for games that use the CNROM board with weak copy protection measures.

Example Games:

  • Spy Vs. Spy (J)
  • Mighty Bomb Jack (J)

Overview

  • PRG ROM size: 16 KiB or 32 KiB
  • PRG ROM bank size: Not bankswitched
  • PRG RAM: None
  • CHR capacity: 8 KiB ROM (copy protected)
  • Nametable mirroring: Solder pads select vertical or horizontal mirroring
  • Subject to bus conflicts: Yes

Banks

  • PPU $0000-$1FFF: 8 KB switchable CHR ROM bank

Registers

Bank select ($8000-$FFFF)

7  bit  0
---- ----
..CC ..CC
  ||   ||
  ++---++- Used for CHR copy protection.

This mapper is retarded. These games only have 8k of CHR, and they attempt to disable CHR by writing a specific value to the CHR Reg, then VERIFY that garbage is read back, then they swap back to the actual CHR. If they don't get the expected garbage, they lock up.

Perhaps this was some sort of copy protection?

Each game has their own value that enables/disables CHR. Rather than failing to attempt to list all the exact values used here (I don't know what all of them are), I can provide some logic:

if C AND $0F is nonzero, and if C does not equal $13: CHR is enabled otherwise CHR is disabled

When CHR is disabled, the pattern tables are open bus. Theoretically, this should return the LSB of the address read, but real-world behavior may vary.


This table has been assembled from nocash and the sources of MESS, Nestopia, and FCEUX.

if this value is written
Game Must work Mustn't work
Bird Week 0x0F 0xF0
B-Wings 0x33 0x00
Mighty Bomb Jack 0x11 0x00
Sansuu 1 Nen, Sansuu 2 Nen, and Othello 0x22 0x20
Sansuu 3 Nen 0xFF 0x00
Spy vs Spy 0x21 0x13
Seicross (v2) 0x20 0x21

References