SNK NeoGeo 4 slot arcade pcb repair #3
This was an interesting one.. It’s the newer style 4 slot with the custom chips on the top board replacing lots of 74LS TTL chips. A previous owner had installed the Universe Bios onto it, but games would crash right after the NeoGeo startup logo screen or the ‘Winners Don’t use Drugs’ screen (if the BIOS set to US region). Puzzle Bobble showed corruption then a crash and Super Sidekicks 2 would jump to an ‘illegal instruction exception’ screen. (Reinstalling the regular BIOS just led to a crash and watchdog reset at the same point). So this is quite interesting because for the startup screen to show up the CPU must be executing the program on the cartridge. So the data bus and all control signals must be working between the bottom board and the top board.
My best guess was that an address line was faulty – this would let the CPU execute code as long as it didn’t jump to any areas of ‘bad’ address. A cool feature of the UniBios is that has a memory viewer – so I was able to look through the memory the 68000 on the main board can ‘see’ of the cartridge. And at 0×10000 the data was identical to that at 0×00000. So that means that address line A16 must be stuck low – whenever the CPU asks for data in the range 0×10000 to 0x1fffff the cartridge is actually returning 0 to 0xffff. So explanation for the illegal instruction found! The CPU would jump to somewhere in that range – but actually be given illegal instruction data from elsewhere in the ROM which causes the exception.
So, time to trace out where A16 goes from the main 68000 CPU on the bottom board, and also trace where cartridge A16 goes on the top board. (Technically it’s A15 on the cartridge side because it’s a 16 bit ROM rather than 8 bit, but I’ll call it A16 to be clearer). Interestingly I found some marker pen marks at some of the A16 points on the lower board, so someone had clearly worked on this before and also suspected an address fault. The main paths for the address lines are to go to the BIOS rom on the main board and to the 245 latches in the lower right of the board. Now I was looking closer I could also see one of the original AS245 latches had been replaced with a LS245 version and A16 went through this chip. So someone had definitely spent some time on this before. The address lines then go from the 245′s to the top board connector. On the top board I was hoping to find a broken trace to explain the fault, but continuity tested all the way from the bottom board to the NEO-244 custom chip (A16 goes to pin 1). Tracing from the cartridge connector back showed no breaks either – all address lines are shared between slots 1 & 2 on the board, and A16 traces back to the same NEO-244 chip – pin 62 this time.
So a logic probe showed that the input would pulse whenever the 68000 asked for A16, but the output to the cartridge slot was always stuck low. So the conclusion has to be that this custom chip has failed. Unfortunately it’s a relatively rare custom chip as I believe it’s only used on this revision of the 4 slot and the accompanying 2 slot (MV2F). I wasn’t really sure why this chip was needed at all though… Yes, there are 4 slots but the 68000 is only going to be accessing one address at a time – so why can’t the cartridges just be addressed straight from the 68000/AS245? So.. I lifted pin 62 of the NEO-244 and patched the pin 1 input directly onto the pin 62 output pad. Games in slots 1 & 2 now work 100%!
Slots 3 & 4 still gave the illegal instruction exception – all address lines are common between these slots, and A16 traced back to the same NEO-244 custom, pin 63. So it’s now clear what NEO-244 does – it takes the address bus from the 68000 as input and drives either slots 1 & 2 or slots 3 & 4 depending on which is active. So again I lift pin 63 and patch pin 1 onto the pin 63 pad and now all slots work! I’m not really sure why an address bus selector is needed – there’s no reason from a logical design point of view as program address lines in all slots can be driven simultaneously. The only reason I can think of is implementation side, maybe trying to manage the current associated with driving 4 things from the single AS245 output.