//dk4-title.jpg
To my surprprise, I found out that one of the consoles I was given, BS-500:
//bs500-shell.jpg
crashes almost immediatelly after starting the regular DK4, but to my surprise, works fine with invicible DK4:
//dk4-crash.jpg
The console also has problems with my KrzysioCart:
//kc-fail.jpg
And SMB3 - colors are definitely wrong on the title screen and then the level becomes corrupted:
//smb3-0.jpg smb3-1.jpg smb3-2.jpg
Console has internal built-in 10000000in1 multicart with interesting FUTBOL COLOMBIANO remake of soccer game that I never spotten anywhere in the internet
//multi1.jpg multi2.jpg multi3.jpg multi4.jpg
The issue seems to apply to games using WRAM, so sounds similar to the one I described recently in different console (viewtopic.php?t=26270).
DK4 does not use WRAM though it has registers under $8000 so might be similar reason. But DK4 also uses CHR-ROM as nametables which requires CIRAM /CE to be controlled by cartridge and most modern consoles simply short this line to PPU /A13. Let's find out what is going on.
Internals of the console are interesting - main pcb has one NES-on-chip blob and second blob with built-in multicart:
//cons-pcb-top1.jpg cons-pcb.bottom1.jpg top_corr1.jpg bottom_corr1.jpg
There are a lot of weird jumper-like test points and the blob pinout is unusual, suggesting it is not based on UM6561
//sch.png
Presence of external cartridge is detected by checking PIN31 (GND=no external cartridge, VCC=external cartridge present). Blo
Pins 49 (PPU/A13) and 48 (CIRAM/CE) are shorted but for some reason the track from both pins goes into Nes-on-chip blob suggesting that after cutting this trace, CIRAM /CE can be controlled externally
//ciram.jpg
Next interesting thing os that the blob with build-in multicart does not input CPU/ROMSEL, PPU /RD, PPU /WE, /IRQ. There are three signals (SIG55, SIG53, SIG75) that are going only between Nes-on-chip blob and multicart blob:
//sch2.png
My quessing is that they are:
* SLAVE CPU /ROMSEL (driven with 1 by NOC when external cart is present)
* SLAVE CIRAM A10 (ignored by NOC when external cart is present)
* SLAVE PPU /RD (dirven with 1 by NOC when external cart is present)
Dumping built-in cartridge:
I used my dumping cartridge that can send any arbitrary asm code from PC to the console and then execute it, collect results and sent them back to PC.
//dumper.jpg
Mapper seems to work that way:
Code: Select all
--6001-- --6002--
6001 6002 prg chr mir 76543210 76543210
mario 54 00 32 8 v 01010100 |
futbol 91/92 00 32 8 v 10010001 +-- when 1, all reads/writes to $4100-$7fff have
olympics f0 32 32 v 11110000 data bits 0 and 1 cleared, that is:
duck hunt 23 00 16 8 v 00100011 reading 4100-7fff returns: HI(A)&0xfc instead of HI(A)
jewelry 00 00 16 8 v 00000000 and writing to $6000 have bits 0/1 set to 0
powerup 00 02 00000000
|||||+++- chr bank
||||+---- mirr (0=V, 1=H)
|||+----- prg mode (0=16k, 1=32k)
+++------ prg bank
* Half of the "track & field" games have messed up graphics (long jump, javelin, hurdles), probably because menu does not properly initialize chr bank register (all chr data seems to be identical to the official track & field game)
//duck hunt glitch.png
//trackfield bug.png
* Duck Hunt and trackfield have title screen chopped of and after game over, game returns to multicart menu
* Futbol Colombiano (Soccer) which is regular NROM game was patched to use 16kb of CHR just because they couldnt fit the title screen text in one bank.
Fix:
Indeed the culprit is the blob multicart driving CPU bus for accesses below $6000. Solution is to cut the M2 line coming from NOC to multicart blob and drive it with 0 when external cartridge is present.
I installed GAL chip for that purpose:
Code: Select all
CHIP TEST GAL16V8
M2NOC EXTCARTEN PIN3 PIN4 PIN5 PIN6 PIN7 PIN8 PIN9 GND
PIN11 M2OUT PIN13 PIN14 PIN15 PIN16 PIN17 PIN18 PIN19 VCC
EQUATIONS
M2OUT = M2NOC * /EXTCARTEN
My website:
My NES/FC flashcart: