This turned out to be quite a complex fix… Board booted to a black screen and made no sound, but a logic probe showed the data and address bus lines on the CPU and program ROM were all active, so the CPU was trying to do something at least.
There was obvious physical damage on the board in at least 3 places – a smashed custom resistor pack and gouged traces on the bottom of the board and on the top near the first program ROM. I knew the resistor pack was used as the digital to analog convertor for one of the RGB channels, so although it would give bad colors, that shouldn’t stop the game running. After checking and repairing the traces… absolutely no change.
My next theory was that the program RAM was bad and this was causing the CPU to crash. I checked the program in the MAME debugger and it clears all memory before branching to a subroutine (with bad RAM a subroutine will mean a crash when the CPU stack is popped as the CPU will be given a bad return address). This seemed to match the board behavior at least as the palette RAM was being cleared to all black. But what RAM is the main CPU RAM? This board has 11 RAM chips and no published schematics. Usually the RAM next to the tilemap customs are for tilemaps, the RAM next to the sprite customs are for sprites, and the RAM next to the program ROMs is for the CPU. So I pulled the RAM nearest the ROMs (H15) and it tested ok. I then pulled the other RAM sitting on it’s own (B10) – that tested ok too.
Rather than risk damaging the board more by pulling all the RAMs (not to mention it would take ages) I took a different approach and wrote a little test program to see if the CPU was actually capable of running code. I modified the program ROM to print a string straight away, rather than clear memory and branch. It worked! So this proved the CPU, program, graphics was working to some degree, but didn’t explain why the correct program led to a black screen. I worked out a more complex test program and wrote values to various RAM areas and read them back and printed on screen (again, taking care never to use the stack or call any subroutines as none of the RAM could be trusted).
Note there is no green in the images – I expected that from the bust resistor pack. So the memory tests revealed that for every second byte the D0 value was stuck low (so writing 01 returns 00, writing 45 returns 44). I used a logic probe on each RAM chip until I found the stuck data pin – turns out the main CPU ram is the pair at C10 and C11. Removed this RAM chip – it tested bad, put in a replacement.. and still black screen. I examined the traces on the board again and found another tiny break – all that work just to find a break near the others I already repaired (the pic is after I scraped it back more to repair it).
Anyway… game boots now!
Graphics are clearly messed up and of course there’s still no green channel. The broken resistor pack is a custom Data East pack used on many other games from this period. I wasn’t worried about this too much as the worst case was I could just put in separate resistors to mimic the pack. I had a different plan in mind though – each resistor pack supports two channels, so with 4 channels available, and only 3 channels needed (red, green and blue) there had to be a spare… I traced out the TTL around the packs to find the unused channel, and just bridged one pack onto the other. Worked first time!
(The resistors values are fairly common at 220 Ohms, 470, 1000, 2200 to turn the 4 bit digital palette into an analog signal. The resistor pack contains a 5th value – 4800 Ohms but that is not used in this game).
On the home straight now – some corruption on the title screen and in-game. This was quickly narrowed down to the tilemap ROMs in the corner of the board. Removing them caused the corruption to go away (along with correct graphics too of course). One ROM had obvious corrosion (EL07) but the ROM next to it was also bad (EL06). I cleaned up the legs but the problem remained so it seems the problem was internal. I replaced both with 27c512 eproms burned from the MAME set.
And at last, game is perfect again!