Joust - Unable to enter high score name

philmurr

Well-known member

Donor 4 years: 2022-2025
Joined
Mar 25, 2008
Messages
579
Reaction score
589
Location
Basingstoke, Hampshire, United Kingdom
I recently had a problem with my Joust where the game played perfectly, and everything looked fine at the inputs test screen, but get to the point of trying to enter a high score and the screen just sits there waiting, and doesn't respond to any inputs.

Joust enter your initials.jpg

I'd seen the old thread about this (https://forums.arcade-museum.com/threads/cant-enter-name-in-joust-high-score-or-setup-screen.182914/) but the reason for the problem wasn't conclusive (faulty PIA on the widget board was suggested), so whilst I wasn't convinced, I swapped it anyway, but no change.

So a bit of basic troubleshooting found a dead output on pin 4 of one of the 4049s. This feeds a 257 mux so its floating input (pin 6) floated high which gave a high on its corresponding output when selected (pin 7) feeding PA7 of the PIA. This signal is one that tracks back to NC, or unused input on Joust, so it wasn't clear if or why this could be the issue.

Joust player inputs.jpg

I swapped out the 4049 and that fixed the problem. Still had no idea why an unused input on the game (which doesn't even appear on the test screen) would affect entering your initials, and I don't like not knowing...

Fortunately the original source code for Joust is available so I thought I'd take a look and see what I could find. A bit of searching found that variable "PIA2" is mapped PA0..PA7, with bit 0=left, bit 1=right, bit 2=flap, bit 4=2P start and bit 5=1P start, with bits 3, 6 & 7 (our problem bit) being unused. Now for the offending code (with original Williams comments and spelling mistakes ;)):-

Code:
    LDB    PIA2    READ THE SWITCH INPUTS
    ANDB    #$07    WE ONLY WANT 'MOVE LEFT','MOVE RIGHT','FALP'
    BNE    40$    BRA= SWITCHES HAVE BEEN PRESSED
    LDB    .DEBONC,Y
    BEQ    ENTRET
    DEC    .DEBONC,Y
    BRA    ENTRET
40$    LDX    #ENTI2    DEBOUNCE THEM A BIT
    STX    .WAKUP,Y    GET THE WAKE-UP ADDRESS
    ANDCC    #$FE    CLEAR CARRY
    RTS        GO AND SLEEP


*** JUMPS HERE ONCE A SWITCH IS PRESSED ***

ENTI2    PSHS    B
    LDB    .SIDE,Y
    STB    PIA3+1
    PULS    B
    CMPB    PIA2    IS THE SAME SWITCH STILL PRESSED        ***THIS IS THE PROBLEM***
    BNE    ENTRET    BRA= NO SO IT'S PROBBALY NOISE RETURN TO THE CALLER

    ...continue with entering initials

ENT10$    LDX    #ENTINT
    STX    .WAKUP,Y
    RTS        RETURN TO THE CALLER
ENTRET    BSR    OUTHSC    WRITE THE CHARACTER
    ANDCC    #$FE    CLEAR CARRY
    BRA    ENT10$

So the game code is pretty good at masking only the bits that it needs to look at, with just about every "read" of the PIA inputs being followed with an "AND" to mask off just the required bits. The problem here is the command "CMPB PIA2" which (during debouncing the inputs) compares the previous state of the inputs (that have been masked off to only include left, right and flap) with the current state (that includes all 8 bits), and if they aren't the same it doesn't accept the input (assuming it to be "noise").

Normally this shouldn't be a problem, as the other inputs/bits are unused and should always be zero. But in my case when there was a fault pulling bit 7 high, the masked value and the current value would never be the same, it constantly ignores the input and never lets you enter your initials. The interrupt code also continues to kick the watchdog so that never reboots the game, and it never times out from the initial entry screen.

I guess it is a bug, although you're very unlikely to ever encounter it. I'm sure it was assumed it could never happen, but then again it could have been avoided.
 
Ive had it had several times.
I think we covered it in Joust repair logs.

I recall playing. Not allowing me to enter initials and the resetting all the scores

CMOS error
 
Back
Top Bottom