Contra 102 in 1
Type | multi | Mapper | 923 | Original mapper | 0+2 | PCB marks | 8-27-C-A ET-89 | Tags: | | Uploaded: | 2020-03-30 09:21:24 |
| |
Elements:
Chip signature:
27F080+7474+6264+74273+74161+74253+74253+74253+7432+7404
PCB top:
PCB bottom:
Shell top:
Shell bottom:
Screenshoots:
Extra info:
fedcba9876543210 76543210
1001000101100010
A~[1......AXBabcdMV] D~[.....klm]
||||||||| |||
||||||||| +++- PRG bank in UNROM mode
||||||||+-------------- NROM PRG size: 0=16K, 1=32K
|||||||+--------------- mirroring: 0=V, 1=H
|||++++---------------- PRG bank in NROM mode
||+-------------------- PRG-A18
|+--------------------- PRG mode (1=CHR-RAM is write-protected)
+---------------------- PRG-A19 & PRG mode (1=this register is write protected)
AXV $8000 $c000
000 0Babcd 0B0000
001 0Babc0 0B0000
010 0Babcd 0Babcd
011 0Babc0 0Babc1
10* 1Baklm 1Ba111
11* 1Baklm 1Baklm
//DUMPING:
for (int bank = 0; bank < 64; ++bank) {
buttonSimulateReset.PerformClick();
int adr = 0x8000 | shi(bank, 0, 2) | shi(bank, 1, 3) | shi(bank, 2, 4) | shi(bank, 3, 5) | shi(bank, 4, 6) | shi(bank, 5, 8);
cpu_write(adr, new byte[] { (byte)(bank & 7) });
if (bank < 32) {
cpuRead(0x8000, 0xbfff);
}
else {
byte[] c000 = cpu_read(0xc000, 0x4000);
for (int unrom_bank = 0; unrom_bank < 8; ++unrom_bank) {
bool found = false;
for (int unrom_addr = 0; unrom_addr < 0x4000; ++unrom_addr) {
if ((c000[unrom_addr] & 7) == unrom_bank) {
cpu_write(0xc000 | unrom_addr, new byte[] {c000[unrom_addr]});
cpuRead(0x8000, 0xbfff);
found = true;
break;
}
}
if (!found) {
throw new Exception(String.Format("Bank {j} not found", unrom_bank));
}
}
bank += 8;
}
}
Quite weird cartridge mixing NROM128, NROM256 and UNROM mappers, allowing to run multiple games from each one. Dumping the second part (when A=PRG-A19=1) was tricky because after figuring exactly how the mapper works, cartridge needs simulated restart after each write (address latch locks when writing with A=1). Additionally, there are bus conflicts so after each write, $c000-$ffff needs to be read back first to see at which address value to be written exists.
Additionally,
Comments:
Want to leave a comment?