INES Mapper 185: Difference between revisions
Rainwarrior (talk | contribs) m (DEFAULTSORT) |
(→Bank select ($8000-$FFFF): Now that this isn't Disch's notes, let's edit for style.) |
||
Line 28: | Line 28: | ||
a specific value to the CHR Reg, then VERIFY that garbage is read back, then they swap back to the | 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. | actual CHR. If they don't get the expected garbage, they lock up. | ||
Each game has their own value that enables/disables CHR. | Each game has their own value that enables/disables CHR. However, a simple heuristic obviates the need to detect each game individually: | ||
* if C AND $0F is nonzero, and if C does not equal $13: CHR is enabled | |||
if C AND $0F is nonzero, and if C does not equal $13: | * otherwise CHR is disabled | ||
otherwise CHR is disabled | |||
When CHR is disabled, the pattern tables are open bus. Theoretically, this should | 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. | return the LSB of the address read, but real-world behavior may vary. | ||
Line 61: | Line 58: | ||
| [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 --> | ||
|} | |} | ||
''Seicross (v2)'' does not work with the above heuristic. | |||
However, the only difference between v1 and v2 of this game is the addition of this copy protection. | |||
Additionally, [[NES 2.0 submappers]] would handle it. | |||
==References== | ==References== | ||
* [http://www.romhacking.net/documents/362/ Disch's Mapper Notes] | * [http://www.romhacking.net/documents/362/ Disch's Mapper Notes] |
Revision as of 08:49, 27 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.
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.
Each game has their own value that enables/disables CHR. However, a simple heuristic obviates the need to detect each game individually:
- 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 |
Seicross (v2) does not work with the above heuristic. However, the only difference between v1 and v2 of this game is the addition of this copy protection. Additionally, NES 2.0 submappers would handle it.