Hi,
I've just implemented in MESS Mapper 185 (i.e. CNROM + diodes to handle CHR banking), and I found a small problem with Sansuu 3.
According to the old discussions of this forum, at start the games of this mapper write two values as a protection trick to test CHR banks. values are the following
Off On Title
F0h 0Fh Bird Week
00h 33h B-Wings
00h 11h Mighty Bomb Jack
20h 22h Sansuu 1 Nen - Keisan Game
20h 22h Sansuu 2 Nen - Keisan Game
00h FFh Sansuu 3 Nen - Keisan Game
13h 21h Spy vs Spy
Following Nestopia, I implemented the presence of the pin as a mask (0x03) which compares the written data with the pin CE-/CE state.
as the table above shows, the code should work as follows:
this works fine with all the games but Sansuu 3 (I'm using the dump confirmed as good in bootgod's db), which in my emu writes 20h 2ah instead of the 00-ff in the table.
the problem is that according to bootgod xml db this game has both pins set to CE, hence the second write 0x2a does not meet the required condition and open_bus is returned in place of CHR.
I would like to know how the game behaves in your emulators (I'm on MacOSX so I cannot directly test most of the emus), because I can only see three reasons for the behavior I see in MESS:
1. the pin settings in Bootgod's db are wrong (pin 26 should be /CE not CE), so the mask has to be corrected (this would fix Sansuu 3 in MESS, and it's currently what I'm doing to workaround the problem)
2. my emu writes the wrong values (i.e. 0x00-0xff in the table are correct), but it seems strange to me that this only game shows this problem
3. Bootgod is correct, but the pin settings do not exactly work as previous research assumed
I strongly hope the answer is not 3, because it seems strange that a 'simple' PCB like CNROM needs a more complicate implementation for these pins.
Thanks in advance for the help
I've just implemented in MESS Mapper 185 (i.e. CNROM + diodes to handle CHR banking), and I found a small problem with Sansuu 3.
According to the old discussions of this forum, at start the games of this mapper write two values as a protection trick to test CHR banks. values are the following
Off On Title
F0h 0Fh Bird Week
00h 33h B-Wings
00h 11h Mighty Bomb Jack
20h 22h Sansuu 1 Nen - Keisan Game
20h 22h Sansuu 2 Nen - Keisan Game
00h FFh Sansuu 3 Nen - Keisan Game
13h 21h Spy vs Spy
Following Nestopia, I implemented the presence of the pin as a mask (0x03) which compares the written data with the pin CE-/CE state.
as the table above shows, the code should work as follows:
Code:
if ((data & pin_mask) != pin_state) -> next CHR read returns open_bus;
else -> next CHR read returns chr_data
else -> next CHR read returns chr_data
this works fine with all the games but Sansuu 3 (I'm using the dump confirmed as good in bootgod's db), which in my emu writes 20h 2ah instead of the 00-ff in the table.
the problem is that according to bootgod xml db this game has both pins set to CE, hence the second write 0x2a does not meet the required condition and open_bus is returned in place of CHR.
I would like to know how the game behaves in your emulators (I'm on MacOSX so I cannot directly test most of the emus), because I can only see three reasons for the behavior I see in MESS:
1. the pin settings in Bootgod's db are wrong (pin 26 should be /CE not CE), so the mask has to be corrected (this would fix Sansuu 3 in MESS, and it's currently what I'm doing to workaround the problem)
2. my emu writes the wrong values (i.e. 0x00-0xff in the table are correct), but it seems strange to me that this only game shows this problem
3. Bootgod is correct, but the pin settings do not exactly work as previous research assumed
I strongly hope the answer is not 3, because it seems strange that a 'simple' PCB like CNROM needs a more complicate implementation for these pins.
Thanks in advance for the help