PCB Repair: Ajax

Problem

Displays garbage, watchdog reset continuously triggering.

Diagnosis

Ajax is one of several Konami games to uses their custom, 6809-derived 052001 CPU. It is not unheard of for this CPU to fail, which, without a replacement, would relegate this PCB to the scrap pile.

IMG_9903.JPG

Probing around with my oscilloscope revealed that there was no activity on any of the CPU address lines. The CLK and RESET input signals were present and correct and the HALT input is unused. The CPU has a /DTAC input, (Data Transfer Acknowledge), which is used to inform the CPU that data is ready to be transferred to/from memory or some other device. The /DTAC input was constantly high, which was effectively keeping the CPU in a halted state.

/DTAC is generated by this circuit:AJAX_DTAC.png

Probing the LS08 at I2 revealed a floating output on pin 8. Replacing I2 didn’t magically fix the game (it was still displaying garbage and watchdogging, albeit less frequently) but at least now there was observable CPU bus activity.

To get an idea of why the watchdog reset was triggering, I hooked up my logic analyzer to the CPU address bus. This would hopefully give an idea of where code execution was reaching before the watchdog triggered. For the watchdog to trigger, it was likely that the CPU had become stuck in a loop and was no longer kicking the watchdog timer. I actually discovered that code execution was not progressing far beyond the reset location. Here’s the disassembly of the reset sequence:

; Reset
8000: CLRA  
8001: STA   $0800
8005: STA   $00c0
8009: LDS   #$6000
800C: LDA   #$20
800E: PUSHS A
8010: PULLS DP
8012: CLRA  
8013: LDU   #$2000
8019: STA   ,u+		; Zero 0x2000 bytes of shared RAM
801B: STA   $0020
801F: INCA  
8020: CMPA  #$FF
8022: BNE   $8025
8024: CLRA  
8025: LEAX  #$-01,x
8028: BNE   $8019
802A: CLRA

802B: LDU   #$2000	; Read back contents of shared RAM
802E: LDX   #$2000
8031: CMPA  ,u+
8033: LBNE  $8186	; ERROR! Value did not match
8036: INCA  
8037: CMPA  #$FF
8039: BNE   $803C

803B: CLRA
803C: LEAX  #$-01,x
803F: BNE   $8031

I observed that the branch to $8186 at $8033 was being taken, which indicates a bad value read back from the RAM shared between the main CPU and the slave CPU. I decided to check the shared RAM and the logic surrounding it:

AJAX_SHAREDRAM

An 007644 Konami bus transceiver interfaces the shared RAM to the main CPU. The OEO input, which routes Y[7:0] to O[7:0] during a read, was floating. The inputs of the LS32 at J5 looked valid but the output at pin 11 was floating. Replacing this IC brought the game back to life, and without any further issues!

Fix

Replace 74LS08 at I2.

Replace 74LS32 at J5.

%d bloggers like this: