joust/T12REV3.SRC

2002 lines
33 KiB
Plaintext
Executable File

NAM F000 TEST ROM FOR 'JOUST' INCLUDING AUDITING AND ADJUSTMENTS
INCLUDE RAMDEF.SRC
INCLUDE EQU.SRC
INCLUDE MESSEQU.SRC
INCLUDE MESSEQU2.SRC
SETDP $A0
ORG TSTORG
PWRUPV JMP PWRUP
JMP ADVSW$
JMP AUTCYC
JMP JNAP
JMP RAND
JMP TEST
JMP CYCLE
*COLOR RAM TABLE
*
CRTAB FCB 0 0 SPACED OUT
FCB $F9 1 LASER (SPECIAL)
FCB $07 2 RED
FCB $28 3 GREEN
FCB $2F 4 YELLOW
FCB $00 5 MESSAGES
FCB $A4 6 GRAY
FCB $15 7 TERRAIN
FCB $C7 8 PURPLE
FCB $FF 9 WHITE
FCB $38 A BOMB CYCLER
FCB $17 B ORANGE
FCB $CC C CYCLER
FCB $81 D TIE1
FCB $81 E TIE2
FCB $2F F TIE3,MONO
*
*** POWER UP ROUTINE
*
PWRUP ORCC #$FF NO INTERRUPTS ETC.
LDS #HSTK IF AND WHEN WE DECIDE TO USE THE STACK
CLR PIA0+1
CLR PIA0
LDA #$3C SET LED 3 TO 1 (WE'RE MAKING AN F TO BLANK)
STA PIA0+1
CLR PIA1+1
LDA #$C0 BITS 6,7 TO OUTPUTS (LEDS)
STA PIA1
LDA #$3C SET BIT 2 TO 1
STA PIA1+1 CLEAR CB2 (LED)
LDA #$C0 CLEAR LEDS
STA PIA1 SET BITS 0,1
LDA #1
STA RWCNTL MAKE SURE WE COPY FROM ROM!
LDX #CRTAB
LDY #CRAM
PWRUP0 LDD ,X++
STD ,Y++
CMPX #CRTAB+16
BLO PWRUP0
LDA #2
LDY #PWRUP1
LDX #0
BRA RAMTST DO A RAM TEST.
PWRUP1 LDY #PWRUP4
JMP ROMTST
PWRUP4 LDA #$34 PUT A ZERO IN THE LED.
STA PIA0+1
STA PIA1+1
CLR PIA1
LDA #RAM!>8
TFR A,DP
LDS #HSTK
JSR SCCLR
LDA #MSIND INITIAL TESTS INDICATE
LDX #$3070
LDB #$99
JSR OUTPHR
LDA #MSALL ALL SYSTEMS GO
LDX #$3A90
LDB #$99
JSR OUTPHR INDICATE OK
LDY #CKCMSV DELAY TO JUMP INTO GAME.
LDA #7
JMP DELA1
*
* RAM TEST....Y = PLACE TO RETURN IF NO ERROR
* X = SEED TO START WITH
* A = ITERATIONS TO MAKE
RAMTST ORCC #$3F NO INTERRUPTS DURING TEST
CLR RWCNTL SET TO RAM READ
TFR A,DP COUNT AT DP.
TFR X,D START WITH A PASSED SEED.
RAM2 TFR D,U SAVE THE SEED
RAM0 LDX #0 MEMORY POINTER
RAM3 COMB DONT ASK
BITB #9
BNE RAM4
COMB
RORA
RORB
BRA RAM6
RAM4 COMB
BITB #9
BNE RAM5
RORA
RORB
BRA RAM6
RAM5 LSRA
RORB
RAM6 STD ,X++
EXG X,D SINCE IRQ RUNS OUT OF RAM, STROKE ROVER
TSTB
BNE RAM6B EVERY 256!
LDB #WDATA
STB WDOG HAVE A BONE..EVER BEEN BONED.....
TFR DP,B CHECK IS NORMAL DIAGS
CMPB #$FF FF MEANS FRONT DOOR
BNE RAM6C
LDB PIA0 CHECK FOR ADV.
BITB #2
BEQ RAM6C NOT PRESSED.
JMP ,Y TIME TO RETURN
RAM6C CLRB RETURN B TO ZERO
RAM6B EXG X,D TRADE BACK
CMPX #$C000 DONE??
BNE RAM3 NOPE..CONTINUE
*
TFR U,D RESTORE SEED.
LDX #0
RAM7 COMB
BITB #9
BNE RAM8
COMB
RORA
RORB
BRA RAM10
RAM8 COMB
BITB #9
BNE RAM9
RORA
RORB
BRA RAM10
RAM9 LSRA
RORB
RAM10 CMPD ,X++
BNE RERROR RAM ERROR!
RAM25 EXG X,D CHECK FOR END OF PAGE
TSTB
BNE RAM17
LDB #WDATA
STB WDOG
TFR DP,B SEE IF NORMAL RUN
CMPB #$FF FRONT DOOR??
BNE RAM17C NOPE
LDB PIA0 CHECK ADV.
BITB #2
BEQ RAM17C
JMP ,Y JUST RETURN (NO ERRORS)
RAM17C CLRB
RAM17 EXG X,D TRADE BACK
CMPX #$C000 DONE??
BNE RAM7
TFR D,U SHOVE NEW SEED OVER
TFR DP,A
CMPA #$FF FF INDICATES FRONT DOOR
BNE RAM99
TFR U,D
JMP RAM0 DO ANOTHER ITERATION IN THIS TEST.
RAM99 DECA TAKE ONE AWAY
TFR A,DP RETURN
CMPA #$80 ZERO OUT IN AUTO CYCLE???
BEQ RAM99$ YEP....
TSTA SET FOR BELOW BRANCH
TFR U,D MAKE SEED AND SAVED SEED LOOK ALIKE
LBNE RAM0 DO ANOTHER ITERATION
RAM99$ LDB #1 SET BACK TO ROM
STB RWCNTL
JMP ,Y RETURN
RERROR LEAX -2,X BACK TO ERROR POINT
EORA ,X FIND DIFFERENCE.
EORB 1,X
TSTA NO DIFFERENCE?
BNE RERR2 DIFF.
TSTB
BNE RERR2
LEAX 2,X UNDO THIS BULLSHIT...MAYBE ALPHA BABY.
BRA RAM25 AND CONTINUE
RERR2 LDU #$30 FIND BANK NUMBER
EXG X,D
CLRB
EXG X,D
RERR0 CMPX #0
BEQ RERR1 DONE.
LEAX -$100,X
LEAU $10,U
CMPU #$30
BLS RERR0
LDU #$10
BRA RERR0
RERR1 LEAU 1,U
ASRA
BCS RERR5 THIS IS THE BIT
ASRB
BCS RERR5
BRA RERR1
RERR5 TFR U,D BRING THE BANK,BIT INTO B
LDA #1 INDICATE RAM ERROR
STA RWCNTL BACK TO THAT JAZZ
LDS #RERR6 RETURN HERE
BRA PULSE PULSE THE LEDS
RERR6 LDA #RAM!>8
TFR A,DP
TFR CC,A
COMA
LDS #HSTK SET UP THE STACK
JSR SCCLR
BITA #$C0 INITIAL TEST???
BNE RER099 NOP
RER098 LDA #MSIND 'INITIAL TESTS INDICATE'
LDX #$3070
LDB #$22
JSR OUTPHR
RER099 LDA #MSRRM 'RAM ERROR '
LDX #$4090
LDB #$22
JSR OUTPHR PRINT THE MESSAGE.
TFR U,D
TFR B,A
LDB #$22
JSR OUTBCD
TFR CC,A SEE WHICH TEST
BITA #$40 FIRQ SAYS FRONT DOOR
BNE REROR7 NOPE
JMP FDRET DO THE FRONT DOOR RETURN
REROR7 LDY #CKCMSV OTHERWISE START...TRY AND RUN THE GAME.
BRA DELAY
DELAY LDA #32
DELA1 LDX #$5800
DELA2 LEAX -1,X
LDB #WDATA
STB WDOG
CMPX #0
BNE DELA2
DECA
BNE DELA1
JMP ,Y RETURN
*
* PULSE......PUT SOME CRAP IN LED'S
* LOW HALF OF A IS ERROR CODE...
* BOTH HALVES OF B ARE THE RELEVANT DATA.
*
PULSE TFR D,U SAVE A,B
LDA #2
TFR A,DP
PULSE0 TFR U,D
LDY #PULSE1
JMP PSSUB
PULSE1 LDA #2
LDY #PULSE2
BRA DELA1
PULSE2 LDY #PULSE3
BRA BLKLED
PULSE3 LDA #1
LDY #PULSE4
BRA DELA1
PULSE4 TFR U,D GET DATA BACK
TFR B,A SHIFT B DOWN
LSRA
LSRA
LSRA
LSRA PROPER HALF
LDY #PULSE5
BRA PSSUB PULSE IT.
PULSE5 LDA #2
LDY #PULSE6
BRA DELA1
PULSE6 LDY #PULSE7
BRA BLKLED
PULSE7 LDA #1
LDY #PULSE8
BRA DELA1
PULSE8 TFR U,D
TFR B,A
LDY #PULSE9
BRA PSSUB
PULSE9 LDA #2
LDY #PULS10
BRA DELA1
PULS10 LDY #PULS11
BRA BLKLED
PULS11 LDA #5
LDY #PULS12
BRA DELA1
PULS12 TFR DP,A SEE IF FIRST PASS??
DECA
TFR A,DP
BNE PULSE0
LDY #PULS95
BRA BLKLED BLANK EM.
PULS95 TFR U,D RESTORE D
JMP ,S AND RETURN
BLKLED LDA #$3C
STA PIA0+1
INCA
STA PIA1+1
LDA #$C0
STA PIA1
JMP ,Y AND RETURN
* PSSUB - PUT LOW HALF OF A TO LEDS
PSSUB TFR A,B SAVE A COPY.
RORA BIT 0 - CARRY
RORA BIT 0 - BIT 7
RORA BIT 0 - BIT 6
ANDA #$C0
STA PIA1 THOSE BITS OUT.
LDA #$34 ASSUME ZERO
BITB #$4 SEE IF 1
BEQ PSSUB1 NOPE
LDA #$3C
PSSUB1 STA PIA1+1 THATS ALL FOR THAT BIT
LDA #$34
BITB #$8
BEQ PSSUB2
LDA #$3C
PSSUB2 STA PIA0+1
JMP ,Y AND RETURN
ROMTST ORCC #$3F NO INTERRUPTS WHILE THIS RUNS
LDX #ROMTAB INDEX INTO TABLE
ROM0 CMPX #ROMEND DONE??
BNE ROM2 BRA= NOPE
ROMDUN JMP ,Y ALL ROMS OK...RETURN.
ROM2 LDA 1,X LOOK TO SEE IF PART STUFFED??
BEQ ROMBOT NOPE...MOVE TO NEXT
LDA ,X GET BASE
CLRB
TFR D,U USE U TO POINT THROUGH
LDA #WDATA FOR ROVER
ROM1 ADDB ,U+ ADD A BYTE
STA WDOG
EXG D,U SEE IF DUN
CMPA 2,X ARE WE TO NEXT PART
EXG D,U CHANGE BACK
BNE ROM1 NOPE
CMPB 1,X EXPECTED SUM???
BNE ROMERR NOPE....LETS SEND OUT PROBLEM WARNING.
ROMBOT LEAX 2,X MOVE TO NEXT PART
BRA ROM0
ROMERR LDA ,X GET THE ADDRESS OF THE BAD PART
LSRA
LSRA
LSRA
LSRA
CMPA #$D ONE OF TOP 3 PARTS??
BLO ROMER1 NOPE
SUBA #4 GROUP THEM WITH THE LOWER PARTS
ROMER1 ADDA #1 MAKE ERRORS FROM 1-12
DAA AND MAKE BCD
TFR A,B
LDA #2 ROM ERROR
LDS #RERR3 RETURN
JMP PULSE AND SEND OUT THE CODE
RERR3 LDA #RAM!>8
TFR A,DP
LDA #WDATA
STA WDOG
LDS #HSTK
JSR SCCLR
TFR CC,A
COMA
STB XTEMP
BITA #$C0 INITIAL TEST??
BNE RERR95 NOP
RERR94 LDA #MSIND 'INITIAL TESTS INDICATE'
LDX #$3070
LDB #$22
JSR OUTPHR
RERR95 LDA #MSROM 'ROM ERROR '
LDX #$4090
LDB #$22
JSR OUTPHR PRINT THE MESSAGE.
LDA XTEMP
BITA #$F0
BNE 1$
ORA #$F0
1$ LDB #$22
JSR OUTBCD
TFR CC,B SEE WHERE WE CAME FROM
BITB #$40 FIRQ SAYS FRONT DOOR
BNE ROMER3
JMP FDROM
ROMER3 LDY #CKCMSV NOW TRY AND RUN THE GAME
JMP DELAY BUT NOT UNTIL A SHORT DELAY.
* ROMTAB - THIS TABLE INDICATES THE BASE OF THE PART, AND THE
* RESULTING SUM. IF SUM=0 THEN PART IS NOT STUFFED.
IFE DEBUG FOR ROM VERSION
ROMTAB FCB $00,$A2 0000
FCB $10,$A9 1000
FCB $20,$50 2000
FCB $30,$FA 3000
FCB $40,$A7 4000
FCB $50,$BF 5000
FCB $60,$85 6000
FCB $70,$47 7000
FCB $80,$51 8000
FCB $90,$0 9000
FCB $A0,$0 A000
FCB $B0,$0 B000
FCB $C0,$0 C000
FCB $D0,$3D D000
FCB $E0,$D5 E000
FCB $F0,$77 F000
ROMEND FCB 0
FCB $11 CHECK BYTE (FUDGER) FOR THIS PART ($F000)
*
ELSE FOR DECON DEBUGGING
*
ROMTAB FCB $00,$0 0000
FCB $10,$0 1000
FCB $20,$0 2000
FCB $30,$0 3000
FCB $40,$0 4000
FCB $50,$0 5000
FCB $60,$0 6000
FCB $70,$0 7000
FCB $80,$0 8000
FCB $90,$0 9000
FCB $A0,$0 A000
FCB $B0,$0 B000
FCB $C0,$0 C000
FCB $D0,$0 D000
FCB $E0,$0 E000
FCB $F0,$0 F000
ROMEND FCB 0
FCB $0 CHECK BYTE (FUDGER) FOR THIS PART ($F000)
ENDIF
*
* ADVANCE SWITCH
*
ADVSW$ LDA #$04 MAKE SURE THAT NO ONE INTERRUPTS US
STA $C805
STA $C807
STA $C80D
STA $C80F
LDA #$FF
STA INDIAG
JSR INITCM INITIALIZE COLOR MATRIX
LDA PIA0 CHECK WHICH TYPE OF TEST
RORA AUTO UP??
LBCS BOOK YEP...GO TO BOOKKEEPING
JSR SCCLR
ORCC #$BF FIRQ ENABLED INDICATES NORMAL DIAGNOSTICS RUNNING.
LDY #DAG999
JMP BLKLED BLANK THE LEDS
DAG999 LDA #WDATA
STA WDOG
LDA PIA0 WAIT FOR ADVANCE SWITCH LET GO
BITA #2
BNE DAG999
LDY #DIAG0
JMP ROMTST DO THE ROM TEST
DIAG0 LDA #RAM!>8
TFR A,DP
JSR SCCLR CLEAR FOR ROMS MESSAGE.
LDA #TXROMK
JSR TEXT PRINT THE MESSAGE
LDB #3
DIG111 LDX #$7000
DIAG1 LDA #WDATA
STA WDOG
LDA PIA0
BITA #2
BNE DIAG2 CONTINUE IF ADVANCE PRESSED.
LEAX -1,X
CMPX #0
BNE DIAG1
DECB
BNE DIG111
DIG11$ LDY #DIAG2
LDX #0
LDA #$FF INDICATE FRONT DOOR
JMP RAMTST DO THE RAM TEST.
DIAG2 LDA #1
STA RWCNTL
LDA #RAM!>8
TFR A,DP
JSR SCCLR
LDA #TXRAMK
JSR TEXT PRINT RAM OK MESSAGE
DIAG22 LDA #WDATA
STA WDOG
LDA PIA0
BITA #2
BNE DIAG22 HOLD CONTROL UNTIL LET GO.
RAMERJ LDX #$9C00 RAM ERROR MESSAGE COMES HERE.
DIAG3 CLR ,X+ CLR USABLE MEMORY
LDB #WDATA
STB WDOG
CMPX #HSTK+1
BNE DIAG3
LDD #$A55A
STD HSEED
STA INDIAG INDICATE THAT WE'RE DIAGNOSTICS
BSR ZLED ZERO IN LED
DIAG4 JSR AVWAIT WAIT FOR ADVANCE SWITCH.
JSR CMTEST TEST CMOS.
LDA #TXCMOK
BCC DIAG66
LDB #$2F INDICATE THAT ITS IN R/W HALF
CMPX #CMOS+$100
BHI DIAG5 IT WAS IN WRITABLE HALF
LDB #$1F
DIAG5 LDS #DIAG55
LDA #$3
JMP PULSE
DIAG55 LDS #HSTK
BSR ZLED
LDA #RAM!>8
TFR A,DP
LDA #TXCMER
CMPB #$1F
BHI DIAG66
LDA #TXCMDR
DIAG66 JSR SCCLR
JSR TEXT PRINT ONE OF THE TWO MESSAGES.
JSR AVWAIT
CLR FDTEST INDICATE FRONT DOOR TEST CALLING
JSR SNDSRT START THE SOUND TEST
DIAG6 JSR SNDCYC CYCLE ONE SOUND
JSR AVCHK CHECK ADVANCE SWITCH.
BCC DIAG6 NOT PRESSED, DO ANOTHER SOUND
LDA #$3F
STA SOUND
CLRA
JSR JNAP
DIAG77 CLRA SILENCE
STA SOUND
JSR AVWAIT NOW WAIT FOR RELEASE.
JSR SWTEST DO A SWITCH TEST.
JSR AVWAIT WAIT FOR RELESE
JSR CRTEST DO THE COLOR MATRIX TEST
JSR AVCHK HOLDING BUTTON??
BCC DIAG78 NOPE...CONTINUE
JSR AVWAIT WAIT FOR LET GO TIME.
DIAG78 BRA TSTPAT DO SOME TEST PATTERNS THEN GO TO BOOK.
ZLED CLR PIA1 ZERO IN LED INDICATES ON LAST TEST OR DUN
LDA #$34
STA PIA0+1
INCA
STA PIA1+1
RTS
*
INITCM LDX #CRTAB
LDY #PCRAM
ADVS90 LDD ,X++
STD ,Y++
CMPX #CRTAB+16
BLO ADVS90
RTS
*
*** AUTO CYCLE
*
AUTCYC LDA #$3C MAKE SURE THAT NO ONE INTERRUPTS US
STA $C805
STA $C807
STA $C80D
STA $C80F
LDA #$3F MAKE LOOK LIKE FRONT DOOR TEST THANX TO MOTOROLA
TFR A,CC SET TO AUTOCYCLE NO INTS PLEASE ETC.
LDA #$8F FIFTEEN RAM PASSES, IN AUTOCYCLE
LDX RAMALS+$600 TAKE A BYTE FROM THE RAM TEST
LEAX $1234,X ADD A STUPID NUMBER TO VARY TEST
LDY #AUTO1
JMP RAMTST TEST THE RAM
AUTO1 LDY #AUTO2
JMP ROMTST
AUTO2 LDA #RAM!>8
TFR A,DP
LDS #HSTK JUST IN CASE
JSR CMTEST
BCC AUTO4
LDA #TXCMDR
CMPX #CMOS+$100 WRITE PROTECT??
BLS AUTO8
LDA #TXCMER
AUTO8 JSR SCCLR
JSR TEXT PRINT THE ERROR
AUTO5 LDA #WDATA
STA WDOG
BRA AUTO5
AUTO4 BSR BARS
LDY #AUTCYC
LDA #4
JMP DELA1
*
*** TEST PATTERNS
*
TSTPAT BSR CROSS DO FANCY HASSLER PAT.
JSR AVWAIT WAIT FOR ADVANCE
JSR SCCLR
LDA #$7 RED
STA PCRAM
JSR AVWAIT
LDA #$38 GREEN
STA PCRAM
JSR AVWAIT
LDA #$C0
STA PCRAM BLUE
JSR AVWAIT
BSR BARS
JSR AVWAIT
JMP BOOK
BARS LDX #CRAM
LDY #CBARCL
BARS0 LDD ,Y++ GET A COLOR
STD ,X++
LDA #WDATA
STA WDOG
CMPX #PCRAM+16
BLO BARS0
LDD #0
LDX #0
COLOR1 STX XTEMP
LEAX $F00,X
COLOR2 STD ,--X
PSHS A
LDA #WDATA
STA WDOG
PULS A
CMPX XTEMP
BNE COLOR2
LEAX $900,X
TSTA
BNE COLOR3
LDX #$D00
COLOR3 ADDD #$1111
BCC COLOR1
RTS
*
CBARCL FCB $5,$5,$28,$28,$80,$80,$0,$0
FCB $AD,$AD,$2D,$2D,$A8,$A8,$85,$85
*
* DON HASSLER CROSSHATCH
*
* RAM0 = BLACK - 00
* RAM1 = WHITE - FF
* RAM2 = BLUE - C0
* RAM3 = GREEN - 38
* RAM4 = RED - 07
*
CROSS JSR SCCLR CLEAR SCREEN
CLRA
JSR SETPCR ZERO COLOR MATRIX
CLR RWCNTL
LDA #$FF
STA CRAM+1
LDA #$C0
STA CRAM+2
LDA #$38
STA CRAM+3
LDA #$7
STA CRAM+4
LDY #WVERT MOVE WHITE VERTICALS
LDD #$0101
CROSS4 LDX 0,Y GET START PTR
LDB #WDATA
STB WDOG
LDB #$01
CROSS5 STD ,X++ MOVE IN WHITE
CMPX 2,Y CK IF LINE DONE
BNE CROSS5 NO, KEEP GOING
LEAY 4,Y INCR Y BY 4
CMPY #WVERTX CK IF ALL DONE
BNE CROSS4 NO, DO NEXT LINE
LDA #$11 MOVE WHITE HORIZ
LDY #WHORZ
CROSS2 LDX 0,Y GET START PTR
STX XTEMP
CROSS3 STA 0,X MOVE IN WHITE
INC XTEMP UPDATE PTR
LDB #WDATA
STB WDOG
LDX XTEMP
CMPX 2,Y CK IF DONE
BNE CROSS3 NO, KEEP GOING
LEAY 4,Y INCR Y BY 4
CMPY #WHORZX CK IF ALL DONE
BNE CROSS2 NO, DO NEXT LINE
LDY #HORIZ MOVE IN COLOR HORIZ.
CROSS6 LDX 0,Y GET START PTR
STX XTEMP
LDA 4,Y GET COLOR
CROSS7 STA 0,X MOVE IN COLOR
INC XTEMP
LDB #WDATA
STB WDOG
LDX XTEMP
CMPX 2,Y CK IF LINE DONE
BNE CROSS7 NO, KEEP GOING
LEAY 5,Y INCR Y BY 5
CMPY #HORIZX CK IF ALL DONE
BNE CROSS6 NO, DO NEXT LINE
LDY #VERT MOVE IN COLOR VERTICAL
CROSS8 LDX 0,Y GET START PTR
LDA 4,Y GET COLOR
CROSS9 STA ,X+ MOVE IN COLOR
LDB #WDATA
STB WDOG
CMPX 2,Y CK IF LINE DONE
BNE CROSS9 NO, KEEP GOING
LEAY 5,Y INCR Y BY 5
CMPY #VERTX CK IF ALL DONE
BNE CROSS8 NO, DO NEXT LINE
LDA #$21 BLUE TOUCH UP
STA $437E
LDA #$20
STA $937E
LDX #$4B0A
CROSSA LDA 0,X
ANDA #$F0
ORA #$02
LDB #WDATA
STB WDOG
STA ,X+
CMPX #$4B6D
BNE CROSSA
LDX #$4B90
CROSSB LDA 0,X
ANDA #$F0
ORA #$02
LDB #WDATA
STB WDOG
STA ,X+
CMPX #$4BF3
BNE CROSSB
LDX #$0B18
STX XTEMP MOVE IN DOTS
CROSSC LDX XTEMP
LDA 0,X OR IN DOT
ANDA #$F0
ORA #$01
STA 0,X STORE DOT
LDB XTEMP+1 UPDATE VERTICAL PTR
ADDB #$22
BCS CROSSD
STB XTEMP+1
BRA CROSSC
CROSSD LDB #$18
STB XTEMP+1 RE-INIT VERT. PTR
LDB XTEMP
ADDB #$10 UPDATE HORIZ PTR
STB XTEMP
CMPB #$9B CK IF DONE
BNE CROSSC NO, KEEP GOING
LDB #1
STB RWCNTL
LDB #WDATA
STB WDOG
RTS
*
* CROSS HATCH DATA
*
WHORZ FDB $0407
FDB $9407
FDB $0429
FDB $9429
FDB $044B
FDB $944B
FDB $046D
FDB $946D
FDB $048F
FDB $948F
FDB $04B1
FDB $94B1
FDB $04D3
FDB $94D3
FDB $04F5
FDB $94F5
WHORZX EQU *
WVERT FDB $0307
FDB $03F5
FDB $1307
FDB $13F5
FDB $2307
FDB $23F5
FDB $3307
FDB $33F5
FDB $4307
FDB $43F5
FDB $5307
FDB $53F5
FDB $6307
FDB $63F5
FDB $7307
FDB $73F5
FDB $8307
FDB $83F5
FDB $9307
FDB $93F5
WVERTX EQU *
HORIZ FDB $4505
FDB $5205
FCB $44
FDB $4506
FDB $5206
FCB $44
FDB $4507
FDB $5207
FCB $00
FDB $4508
FDB $5208
FCB $33
FDB $4509
FDB $5209
FCB $33
FDB $45F3
FDB $52F3
FCB $33
FDB $45F4
FDB $52F4
FCB $33
FDB $45F5
FDB $52F5
FCB $00
FDB $45F6
FDB $52F6
FCB $44
FDB $45F7
FDB $52F7
FCB $44
FDB $047E
FDB $437E
FCB $22
FDB $547E
FDB $937E
FCB $22
HORIZX EQU *
VERT FDB $026F
FDB $028E
FCB $04
FDB $036F
FDB $038E
FCB $30
FDB $936F
FDB $938E
FCB $00
FDB $946F
FDB $948E
FCB $34
VERTX EQU *
*
*** COLOR MATRIX TEST
*
CRTEST JSR SCCLR CLEAR OUT BABY
LDA #TXCMT PRINT THE MESSAGE
JSR TEXT
LDA #$80
STA SW0ST
CRTST1 CLRA
JSR JNAP
CRTST2 JSR AVCHK PRESS??
BCS CMTBYE NOPE
DEC SW0ST DONE WITH DELAY??
BNE CRTST1
LDA COLRMT GET FIRST COLOR.
BSR SETPCR STORE IT DOWN
BSR RAMBAR SET UP MEMORY.
CRTT$$ LDX #COLRMT TABLE TO STORE
CRTST3 LDA ,X+ GET A COLOR
STX XTEMP
BSR SETPCR STORE IT THROUGH
LDA #$80
STA SW0ST
CRTST4 CLRA
JSR JNAP
CRTST5 JSR AVCHK ADVANCE??
BCS CMTBYE YEP
DEC SW0ST
BNE CRTST4
LDX XTEMP RESTORE POINTER
CMPX #COLRMT+8
BLO CRTST3
BRA CRTT$$ CONTINUE THROUGH
CMTBYE RTS
RAMBAR LDX #$0
LDY #COLRMD NUMBERS TO PUT IN BARS
RAMBA1 STX XTEMP SAVE OUR X
LEAX $F00,X
LDA ,Y+
RAMBA2 TFR A,B
STD ,--X
LDB #WDATA
STB WDOG
CMPX XTEMP
BNE RAMBA2
LEAX $900,X
TSTA
BNE RAMBA3
LDX #$D00
RAMBA3 CMPY #COLRMD+16
BNE RAMBA1
RTS
COLRMT FCB $02,$03,$04,$10,$18,$20,$40,$80
COLRMD FCB $00,$FF,$11,$EE,$22,$DD,$33,$CC
FCB $44,$BB,$55,$AA,$66,$99,$77,$88
SETPCR LDX #CRAM
SETPC1 STA ,X+
CMPX #CRAM+16
BLO SETPC1
RTS
*
*** SWITCH TEST
*
SWMH EQU 44 HEIGHT OF FIRST MESSAGE
SWTEST LDA #10
STA XTEMP DELAY COUNTER FOR EXIT
JSR SCCLR CLEAR IT PLEASE
LDA #TXSWTS SWITCH TEST MESSAGE.
JSR TEXT
LDB #WDATA
STB WDOG
LDU #SW0ST
SWTES0 CLR ,U+
CMPU #SW3SCI
BLS SWTES0
SWTES2 LDU #STABP
BSR SWSCN0
SWTES1 LDA #$34
STA PIA3+1
LDB #WDATA
STB WDOG
BSR SWSCN0 SCAN THE COCKTAIL SIDE
LDA #$3C
STA PIA3+1
BSR SWDISP
JSR AVCHK ADVANCE PRESSED?
BCC SWT999 NOPE.
LDB #WDATA
STB WDOG
DEC XTEMP
BEQ SWTBYE
SWT999 CLRA
JSR JNAP
BRA SWTES2
SWTBYE RTS
SWSCN0 LDX ,U++ GET ADDRESS OF PORT
BEQ SWSCN5 DONE
LDY ,U++ GET ADDRESS TO STORE STATE
LDA ,X GET NEW STATE
EORA ,Y SEE WHERE DIFFERENT
STA 1,Y AND SAVE AS DIFFERENCE BYTE.
BRA SWSCN0
SWSCN5 RTS
SWDISP LDU #SPHTAB WE'LL WALK THROUGH SWITCH PHRASE TABLE
LDY #SW0ST WALK THROUGH THE SCANNED STUFF.
SWDIS4 LDB #1 WALK FROM LSB
SWDIS0 BITB 1,Y SEE IF THIS BIT CHANGED.
BEQ SWDIS2
BSR SWACT TAKE SOME ACTION
SWDIS2 LEAU 3,U MOVE TO NEXT ENTRY
ASLB SHIFT ONE DOWN
BCC SWDIS0
LDB #WDATA
STB WDOG
LEAY 2,Y TO NEXT BYTE
CMPY #SW3SCI PAST TABLE
BHI SWDIS9 YEP..DONE
* LDA PIA3 COCKTABLE
* BMI SWDIS4 YEP...FULL SCAN
BRA SWDIS4 YEP...FULL SCAN
CMPY #SW3SCN NOPE..DONE WITH NORMAL SWITCHES??
BLS SWDIS4 NOT DONE
SWDIS9 RTS RETURN BABY.
SWACT PSHS B,X SAVE THE MASK
LDA #$3F
STA SOUND BRING SOUND LINES HIGH IN ANTICIPATION
EORB ,Y INVERT THE BIT
STB ,Y AND MAKE THAT THE NEW STATE
LDB ,S RESTORE MASK
BITB ,Y WHICH WAY DID IT GO
BNE SWPRNT ON....PRINT A MESSAGE.
LDB 2,U HEIGHT
BEQ SWNOAC
LDA #$40 X
TFR D,X MAKE IT CURSOR
LDB #WDATA
STB WDOG
LDD #$3006!XDMAFIX
STD $CA06 DMA X and Y SIZE
STX $CA04 DMA DESTINATION
* ORIGIN WE DON'T CARE ABOUT BECAUSE OF CONSTANT SUBSTITUTION
LDB #$00 CLEAR IT
STB $CA01 DMA CONSTANT
LDB #$12 CONSTANT SUBSTITUTION, WRITE BLOCK
STB $CA00 AND LET THE DMA GO!!!!
LDB #WDATA
STB WDOG
PULS B,X,PC
SWPRNT LDB 2,U GET HEIGHT
BEQ SWNOAC
LDA #$40 CURSOR
TFR D,X
LDB #WDATA
STB WDOG
LDB #$BB
LDA ,U GET MESSAGE NUMBER
JSR OUTP35 AND PRINT IT.
LDA 1,U GET THE PLAYER NUMBER
LDB #WDATA
STB WDOG
LDB #$BB
JSR OUTB35
LDA #$3C
STA SOUND MAKE A SOUND
SWNOAC PULS B,X,PC AND RETURN.
STABP FDB PIA0,SW0ST
FDB PIA2,SW2ST
FDB PIA3,SW3ST
FDB 0
FDB PIA2,SW2STI
FDB PIA3,SW3STI
FDB 0
SPHTAB FCB MSSWCH,$FF,SWMH AUTO UP
FCB MSSWCH+1,$FF,SWMH+7 ADVANCE
FCB MSSWCH+2,$FF,SWMH+14 RIGHT COIN
FCB MSSWCH+3,$FF,SWMH+21 HIGH SCORE RESET
FCB MSSWCH+4,$FF,SWMH+28 LEFT COIN
FCB MSSWCH+5,$FF,SWMH+35 CENTER COIN
FCB MSSWCH+6,$FF,SWMH+42 SLAM SWITCH
FCB 0,0,0 UNUSED (SOUND HANDSHAKE)
*
FCB MSSWCH+9,$F1,SWMH+49 MOVE LEFT PLAYER 1
FCB MSSWCH+10,$F1,SWMH+56 MOVE RIGHT PLAYER 1
FCB MSSWCH+11,$F1,SWMH+63 FLAP PLAYER 1
FCB 0,0,0 UNUSED
FCB MSSWCH+8,$FF,SWMH+70 START ONE
FCB MSSWCH+7,$FF,SWMH+77 START TWO
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
*
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
*
FCB MSSWCH+9,$F2,SWMH+84 MOVE LEFT PLAYER 2
FCB MSSWCH+10,$F2,SWMH+91 MOVE RIGHT PLAYER 2
FCB MSSWCH+11,$F2,SWMH+98 FLAP PLAYER 2
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
*
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FCB 0,0,0 UNUSED
FDRET LDU #RAMERJ RAM ERROR RETURN
BRA FDROM0
FDROM LDU #DIG11$
FDROM0 LDS #HSTK
FDROM5 LDY #FDROM6
LDA #1
JMP DELA1
FDROM6 LDA PIA0
BITA #$2
BNE FDROM5
FDROM1 LDY #FDROM7
LDA #1
JMP DELA1
FDROM7 LDA PIA0
BITA #$2
BEQ FDROM1
FDROM2 LDY #FDROM8
LDA #1
JMP DELA1
FDROM8 LDA PIA0
BITA #2
BNE FDROM2
JMP ,U
AVWAIT LDA PIA0 SEE IF ADVANCE PRESSED
BITA #$2 WELL??
BNE AVWAT2
LDA #$01
BSR JNAP
BRA AVWAIT WELL, WAIT FOR IT.
AVWAT2 CLR CRAM
JSR SCCLR
BRA AVWAT5
AVWAT4 LDA PIA0
BITA #$2 WAIT FOR IT TO BE RELEASED
BEQ AVWAT3
AVWAT5 LDA #$01
BSR JNAP
BRA AVWAT4
AVWAT3 RTS
AVCHK LDA PIA0
BITA #$2
BEQ AVCHK1
ORCC #$01 SEC
RTS
AVCHK1 ANDCC #$FE CLC
RTS
JNAP LDB #WDATA
LDX #$0300
1$ STB WDOG
LEAX -1,X
BNE 1$
DECA
BPL JNAP
RTS
*
* DISPLAY BOOKKEEPPING
*
BOOK LDA #RAM!>8
TFR A,DP
JSR INITCM COLOR MATRIX PROPER.
BSR AVCHK
BCC BOOK3
BSR AVWAIT WAIT FOR HIM TO LET GO.
BOOK3 LDA #TXBOOK
JSR TEXT PRINT THE BOOKKEEPING MESSAGE
LDU #SLOT1
LDX #$1A30
LDA #MSAUD FIRST OF THE AUDIT MESSAGES
BOOK0 PSHS A,X SAVE MESSAGE NUMBER
LDB #$88
JSR OUTPHR PRINT IT.
EXG U,X
JSR RCMSB GET THE TOP BYTE
BITB #$F0 IS THE FIRST NIBBLE 0
BNE 1$
ORB #$F0 YES. SO BLANK IT
BITB #$0F IS THIS NIBBLE 0
BNE 1$
ORB #$0F YES. SO BLANK IT.
1$ TFR B,A COPY B INTO A
COMA
PSHS D
JSR RCMSD
TST ,S+ GET THE COMPLEMENTED BYTE BACK (FULLY BLANKED = 00)
BNE 2$ BRA= FIRST BYTE WAS NOT FULLY BLANKED
BITA #$F0 IS THE FIRST NIBBLE 0
BNE 2$
ORA #$F0 YES. SO BLANK IT
BITA #$0F IS THIS NIBBLE 0
BNE 2$
ORA #$0F YES. SO BLANK IT.
BITB #$F0 IS THE FIRST NIBBLE 0
BNE 2$
ORB #$F0 YES. SO BLANK IT
2$ TFR D,Y
EXG U,X
TFR X,D
LDA #$6A
TFR D,X
PULS A
LDB #$88
JSR OUTBCD
LDB #WDATA
STB WDOG
TFR Y,D
PSHS B
LDB #$88
JSR OUTBCD
PULS A
JSR OUTBCD
LDA #WDATA
STA WDOG
BOOK2 PULS A,X RESTORE A
LEAX $10,X
INCA
CMPU #ENDBOK
BLS BOOK0 THANK YOU SIR, MAY I HAVE ANOTHER??
LDA #MSTIM
LDB #$88
JSR OUTPHR
TFR X,D
LDA #$6E
TFR D,X
EXG U,X
LDX #$CD20
JSR RCMSB
STB BCDN
JSR RCMSD
STD BCDN+1
LDX #$CD38
JSR RCMSB
STB BCDD
JSR RCMSD
STD BCDD+1
EXG U,X
BSR DIVPTC
LDB #$88
BITA #$F0 IS THE FIRST NIBBLE 0
BNE 3$
ORA #$F0 YES. SO BLANK IT
3$ JSR OUTBCD
LDA #CCOLN
JSR OUTCHR
LDA BCDN+2
JSR OUTBCD
LDA #WDATA
STA WDOG
JSR AVWAIT
JMP ADJUST NOW GO DO ADJUSTMENT MODE
*
*
* DIVIDE PLAY TIME BY CREDITS
* INPUT: BCDN RMB 3 - BCD PLAYTIME (M.S.DIGIT BCDN+3)
* BCDD RMB 3 - BCD CREDITS (M.S.DIGIT BCDD+3)
* OUTPUT: REG.A = BCD MINUTES
* BCDN+0 = BCD SECONDS
* DESTROIES REG.B
*
DIVPTC PSHS X,Y
BSR BCDDIV
LDD BCDN+0 OVERFLOWING ANSWER?
BEQ 3$ BR=NO
LDA #$99 YES, INDICATE OVERFLOW
PSHS A
STA BCDN+2
CLR BCDN+1
CLR BCDN+0
BRA PTCRTS
*
3$ LDA BCDN+2 SAVE MINUTES
PSHS A
LDD BCDR+0
STD BCDN+0
LDA BCDR+2
STA BCDN+2
LDD #0
STD BCDR+0
STA BCDR+2
LDA #4 CALCULATE SECONDS FROM REMAINDER
1$ ASL BCDN+2 MULTIPLY BY 10
ROL BCDN+1
ROL BCDN+0
ROL BCDR+2 ALSO, USE CARRY
DECA
BNE 1$
LDX #BCDN+3 PREPARE TO MULTIPLY BY 6 (FINAL MULTIPLY BY 60)
LDY #BCDN+3
LDU #BCDN+3
BSR BCDAD2 TIMES 2
LDD BCDR+2
STD BCDCNT+0
LDD BCDN+1
STD BCDTMP+1
LDX #BCDCNT+4
BSR BCDAD2 TIMES 4
BSR BCDAD2 TIMES 6
BSR BCDDI2 DIVIDE TO GET SECONDS
PTCRTS PULS A,X,Y,PC
*
* BCD ADDITION IN 8 BCD DIGITS
* DESTROIES REG.D
* PERFORMS THUS ([REG.U] = [REG.X] + [REG.Y])
* REG.U, REG.Y & REG.X POINTS TO L.S.BYTE+1
*
BCDAD2 PSHS X,Y,U
LDB #4 8 BCD DIGITS TO ADD
BRA BCDADC
*
* BCD ADDITION IN 6 BCD DIGITS
* DESTROIES REG.D
* PERFORMS THUS ([REG.U] = [REG.X] + [REG.Y])
* REG.U, REG.Y & REG.X POINTS TO L.S.BYTE+1
*
BCDADD PSHS X,Y,U
LDB #3 6 BCD DIGITS TO ADD
BCDADC ANDCC #$FE CLEAR CARRY
1$ LDA ,-X
ADCA ,-Y
DAA
STA ,-U
DECB
BNE 1$
PULS X,Y,U,PC
*
* BCD DIVIDE ROUTINE (BCDDIV & BCDDI2)
* INPUT: BCDN RMB 3 = 6 BCD DIGIT NUMERATOR (UNSIGNED)
* BCDD RMB 3 = 6 BCD DIGIT DENOMINATOR (UNSIGNED)
* OUTPUT: BCDN RMB 3 = THE ANSWER IN BCD
* BCDN+3 RMB 3 = THE REMAINDER IN BCD
* DESTROIES: REG.D, REG.X, REG.Y
*
BCDDIV LDD #0
STD BCDR+0 CLEAR REMAINDER OF DIVIDE
STA BCDR+2
BCDDI2 LDD BCDD DIVIDE BY ZERO?
BNE BDVDIV BR=NO
LDA BCDD+2
BNE BDVDIV
LDD #0 YES, GIVE A RESULT OF ZERO
STD BCDN+0
STA BCDN+2
RTS
*
BDVDIV LDA #6+1 THE WORLD WAS CREATED IN 6 DIGITS!
STA BCDCNT
LDX #BCDR+3 PRE-LOAD REGISTERS FOR SUBTRACTION ROUTINE
LDY #BCDD+3
LDU #BCDTMP+3
BSR BCDNEG MAKE DENOMINATOR NEGATIVE VIA 10'S COMPLIMENT
BDVLP DEC BCDCNT ANY MORE DIGITS LEFT?
BNE 2$ BR=YES
BRA BCDNEG RESTORE DENOMINATOR
*
2$ LDA #4 BCD NIBBLE SHIFT
1$ ASL BCDN+2
ROL BCDN+1
ROL BCDN+0
ROL BCDR+2
ROL BCDR+1
ROL BCDR+0
DECA
BNE 1$
BDVCMP BSR BCDADD SUBTRACT OFF THE LARGE DENOMINATOR
BCS BDVOK BR=SUBTRACT WAS GOOD ENOUGH
BRA BDVLP
*
BDVOK LDD BCDTMP+0 NEW REMAINDER
STD BCDR+0
LDA BCDTMP+2
STA BCDR+2
INC BCDN+2 NBR OF SUCCESSFULL SUBTRACTIONS GOES TO THE ANSWER
BRA BDVCMP CHACK AGAIN FOR SUBTRACTION (MAXIMUM LOOPS = 9)
*
* TO BCD SUBTRACT, NEGATE THEN ADD IN 6 BCD DIGITS
* DESTROIES REG.D
* PERFORMS THUS ([REG.Y] = NOT([REG.Y]) + 1)
* REG.Y POINTS TO L.S.BYTE+1
*
BCDNEG PSHS Y
LDB #3 COMPLIMENT THE BCD NUMBER
2$ LDA #$99 DIGIT BY DIGIT (THERE MUST BE A FASTER WAY!)
SUBA ,-Y
STA ,Y
DECB
BNE 2$
LDY ,S RESTORE REG.Y
LDB #3 6 BCD DIGITS TO SUBTRACT
ORCC #$01 SET CARRY TO ADD 1
1$ LDA -1,Y
ADCA #0
DAA
STA ,-Y
DECB
BNE 1$
PULS Y,PC
*
ADJUST LDX #SPECFN ZERO OUT THE SPECIAL FUNCTION BYTES
ADJS11 CLR ,X+
CMPX #ENDADJ
BLO ADJS11
JSR SCCLR CLEAR THE SCREEN
JSR AVCHK
BCC 3$
JSR AVWAIT WAIT FOR HIM TO LET GO.
3$ LDA #TXADJT
JSR TEXT PRINT THE ADJUSTMENT MESSAGE
LDU #CMOS
LDX #$1A20
LDA #MSADJS FIRST OF THE AUDIT MESSAGES
4$ PSHS A,X SAVE MESSAGE NUMBER
LDB #$22
JSR OUTP35 PRINT IT.
STB COLR
STB BCDR
TFR X,Y
JSR OUTCMOS
LEAU 2,U
LDB #WDATA
STB WDOG
PULS A,X RESTORE A
LEAX $A,X
INCA
CMPU #ENDADJ
BLT 4$
LDA #TXBADJ PUT OUT THE MESSAGES AT THE BOTTOM OF THE SCREEN
JSR TEXT35 IN 3X5 CHARACTER FORMAT
CLR BCDR
LDA COINSL+1
ANDA #$0F
CMPA #9
BNE CURSOR
LDA #MSFRPLY
LDB COLR
LDX #$703E
JSR OUTP35
CURSOR LDY #$1620 FIRST CURSOR POSITION
LDU #CMOS GET THE FIRST CMOS ADJUSTABLE LOCATION
TFR Y,X GET THE CURSOR POSITION
LDA #CCURSR GET THE CURSOR CHARACTER
LDB #$33 GET THE COLOR
STD SW0ST SAVE THE CURSOR COLOR AND CHARACTER OFFSET IN MEMORY
JSR OUTC35 WRITE THE 3X5 CURSOR OUT
1$ LDA #WDATA LET'S GO AND PET THE FUCKING DOG..........
STA WDOG
LDA PIA2 CHECK THE SWITCHES
ANDA #$03 WE ONLY WANT BITS 0&1 (THIS IS FOR JOUST)
BEQ 3$ BRA= NO
BSR CSWIT SEE WHO IT IS
3$ LDB #$34 FLIP TO THE COCKTAIL SIDE
STB PIA3+1
LDA PIA2 GET THE REST OF THEM
ANDA #$03 WE ONLY WANT BITS 0&1 (THIS IS FOR JOUST)
BEQ 2$ BRA=NO
JSR CSWIT1 SEE WHO THEY ARE
2$ LDB #$3C SET BACK TO THE NORMAL SIDE
STB PIA3+1
JSR AVCHK CHECK TO SEE IF THE ADVANCE SWITCH HAS BEEN PRESSED
BCC 1$ NOT EVEN AN ADVANCE SO LETS CHECK THEM AGAIN
JSR AVWAIT
JMP ADVSCV GO START EXEC UP AND THE GAME
CSWIT STA SW3ST SAVE THE SWITCH
CMPA SW2ST GET THE LAST SWITCH HE HIT
BEQ 1$ BRA= YES
CLR SW2SCN CLEAR THE B PORT
LDA SW3ST GET THE SWITCH
STA SW2ST SAVE THE SWITCH
LDA #$2 NAP ONLY 16 MS
JSR JNAP AND TAKE A CAT NAP
LDA PIA2 READ THE PORT TO MAKE SURE THAT IT IS VALID
BNE 3$
1$ LDB #$05 TIME TO WAIT
STB SW3SCN SAVE IT
5$ LDA PIA2 READ THE PORT
BNE 2$ BRA= STILL PRESSED
CLR SW2ST SAY THAT NO SWITCH HAS BEEN PRESSED
RTS TOO BAD YOU LET GO
2$ LDA #$2 NAP ONLY 16 MS
JSR JNAP AND TAKE A CAT NAP
DEC SW3SCN ONE LESS TIME
BNE 5$ NOT DONE SO CHECK AGAIN
LDA PIA2 READ ONCE AGAIN
3$ BITA #$02 DID HE PRESS MOVE LEFT
BNE 4$ BRA= YES HE DID SO MOVE THE CURSOR UP
BITA #$01
BEQ NOMOVE
CMPY #AEND IS HE AT THE BOTTOM
BEQ NOMOVE BRA= YES SO DON'T DO A THING
BSR NOCURS ERASE THE CURSOR
LEAY -$A,Y NOT UP SO IT MUST BE DOWN
LEAU -2,U MOVE TO THE NEXT CMOS LOCATION
CMPU #MINUNT IS HE IN THE MIDDLE OF PRICE SELECTION
BNE 10$
TST SEED HE'S NOT IN CUSTOM ADJUST
BEQ 10$
LEAY -$3C,Y BIG JUMP
LEAU -$C,U IN CMOS TOO..
10$ BRA CURS WRITE THE CURSOR OUT IN IT'S NEW POSITION
4$ CMPY #ATOP IS HE AT THE TOP OF THE ADJUSTMENTS
BEQ NOMOVE BRA= YES SO DON'T DO A THING
BSR NOCURS ERASE THE CURSOR
LEAY $A,Y MOVE THE CURSOR UP
LEAU 2,U MOVE BACK A CMOS LOCATION
CMPU #SLOT1M IS HE IN THE MIDDLE OF PRICE SELECTION
BNE CURS
TST SEED HE'S NOT IN CUSTOM ADJUST
BEQ CURS
LEAY $3C,Y BIG JUMP
LEAU $C,U IN CMOS TOO..
CURS TFR Y,X GET THE CURSOR
LDD SW0ST GET THE DATA BACK
JSR OUTC35 WRITE THE 3X5 CURSOR OUT
NOMOVE CLRA
JSR JNAP
RTS
NOCURS TFR Y,X GET THE CURSOR
LDA SW0ST GET THE DATA BACK
CLRB
JSR OUTC35 WRITE THE 3X5 CURSOR OUT
RTS
CSWIT1 STA SW3ST SAVE THE SWITCH
CMPA SW2STI GET THE LAST SWITCH HE HIT
BEQ 1$ BRA= YES
CLR SW2SCI CLEAR THE B PORT
LDA SW3ST GET THE SWITCH
STA SW2STI SAVE THE SWITCH
LDA #$2 NAP ONLY 16 MS
JSR JNAP AND TAKE A CAT NAP
LDA PIA2 READ THE PORT TO MAKE SURE THAT IT IS VALID
BNE 3$
1$ LDB #$08 TIME TO WAIT
STB SW3SCI SAVE IT
5$ LDA PIA2 READ THE PORT
BNE 2$ BRA= STILL PRESSED
CLR SW2SCI SAY THAT NO SWITCH HAS BEEN PRESSED
RTS TOO BAD YOU LET GO
2$ CLRA NAP ONLY 16 MS
JSR JNAP AND TAKE A CAT NAP
DEC SW3SCI ONE LESS TIME
BNE 5$ NOT DONE SO CHECK AGAIN
LDA PIA2 READ ONCE AGAIN
3$ PSHS A
TFR U,X GET THE CMOS LOCATION
JSR RCMSA
PSHS A
CLRB
STB COLR
BSR OUTCMOS
LDB #WDATA
STB WDOG
LDX #MINMAX GET THE TABLE OF MAXIMUMS AND MINIMUMS
TFR U,D
LEAX B,X
PULS D
ANDB #$03 ONLY NEED BITS 0&1 (FOR JOUST)
BITB #$02 IS IT UP
BNE 10$ BRA= NO
BITB #$01
BEQ CWRET
CMPA 0,X IS IT AT IT'S MAX.
BEQ CWRET BRA= YES..
ADDA #$99 BCD -1
BRA CMWRIT
10$ CMPA 1,X IS IT AT IT'S MIN.
BEQ CWRET BRA= YES..
ADDA #$01 BCD +1
CMWRIT DAA MAKE IT DECIMAL AGAIN
TFR U,X
JSR WCMSA WRITE THE NEW VALUE
CWRET LDB #$22
STB COLR
JSR OUTCMOS
CLRA
JMP JNAP
MINMAX FCB $00,$99
FCB $01,$99
FCB $00,$01
FCB $00,$09
FCB $00,$99
FCB $00,$99
FCB $00,$99
FCB $01,$99
FCB $00,$99
FCB $00,$99
FCB $00,$09
FCB $03,$20
FCB $00,$01
FCB $00,$01
FCB $00,$01
FCB $00,$01
FCB $00,$01
FCB $00,$01
OUTCMOS TFR U,D
LSRB
LDX #SPECAL
LEAX B,X
TST 0,X
BMI OUTSPC
OUT2 TFR U,X
JSR RCMSA
CMPU #COINSL
BNE 2$
STA SEED
TST BCDR
BNE 2$
BSR PRICOUT
2$ BITA #$F0
BNE 1$
ORA #$F0
1$ PSHS A
TFR Y,D
LDA #$6A
TFR D,X
PULS A
LDB COLR
JSR OUTB35
RTS
OUTSPC LDA 0,X
BITA #$01
BNE 1$
TFR U,X
JSR RCMSB
LDA #MSNO
TSTB
BEQ 2$
LDA #MSYES
2$ PSHS A
TFR Y,D
LDA #$6A
TFR D,X
PULS A
LDB COLR
JMP OUTP35
1$ BSR OUT2
LDA #CTHOU
JMP OUTC35
SPEC EQU $80
NOREPLC EQU $01
NORM EQU $00
SPECAL FCB SPEC+NOREPLC
FCB NORM
FCB SPEC
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB NORM
FCB SPEC
FCB SPEC
FCB SPEC
FCB SPEC
FCB SPEC
FCB SPEC
PRICOUT PSHS D,U,X,Y
LDX #$0438!XDMAFIX
STX $CA06
LDX #$6A48
STX $CA04
CLRB
STB $CA01
LDB #$12
STB $CA00
LDX #CSELCT
CMPA #9
BNE 8$
PSHS A,X
LDA #MSFRPLY
LDB COLR
LDX #$703E
JSR OUTP35
PULS A,X
8$ TFR A,B
ASLB
PSHS B
ASLB
ADDB ,S+
ABX
LEAU 2,U
2$ EXG U,X
CMPX #GA1 AT THE END OF COIN ADJUSTMENTS
BEQ 1$
LDA ,U+
JSR WCMSA
LDB #WDATA
STB WDOG
EXG U,X
LEAY $A,Y
PSHS X
LEAX -2,U
JSR RCMSA
BITA #$F0
BNE 10$
ORA #$F0
10$ PSHS A
TFR Y,D
LDA #$6A
TFR D,X
PULS A
LDB COLR
JSR OUTB35
PULS X
BRA 2$
1$ PULS D,U,X,Y,PC
*
* COINAGE SELECT TABLE
*
CSELCT FCB $01,$04,$01,$01,$00,$00 FACTORY USE FOR CUSTOM START
FCB $01,$04,$01,$02,$04,$00 50C..3/$1.00
FCB $06,$00,$01,$01,$00,$00 NEWNEW GERMAN
FCB $01,$04,$01,$01,$00,$00 25C
FCB $01,$16,$06,$02,$00,$00 NEW FRENCH
FCB $01,$04,$01,$02,$00,$00 50C
FCB $01,$00,$04,$01,$00,$00
FCB $01,$00,$02,$01,$00,$00
FCB $01,$00,$02,$02,$00,$00
FCB $00,$00,$00,$00,$00,$00 FREE PLAY
*
*
* SOUND TEST
*
SNDSRT JSR SCCLR CLEAR THE SCREEN
SNDSR1 LDD #$FE01 SET UP FOR SOUND LINE 1
STD SW0SCN
RTS
SNDCYC LDA #$3F
STA SOUND
LDA #3
JSR JNAP
SNDC55 CLRA
STA SOUND
LDA #3
JSR JNAP
SNDCY6 LDA #$3F
STA SOUND
LDA #3
JSR JNAP
SNDCY1 LDD SW0SCN
ANDA #$3F
STA SOUND
LDB #$99
LDX #$3A80
LDA #MSSND
JSR OUTPHR
LDA SW0SCN+1
ORA #$F0
LDB #$99
JSR OUTBCD
LDA #$40
STA SW0ST
SNDCY4 LDA #$1
JSR JNAP
SNDCY5 JSR AVCHK ADVANCE???
BCS SNDCY3 THEN GO
DEC SW0ST
BNE SNDCY4
SNDCY3 LDA FDTEST SEE WHO SET THIS UP??
BNE SNDC90 AUTOCY DID....ALWAYS ADVANCE
LDA PIA0 CHECK MANUAL/AUTO
RORA
BCC SNDC91 MANUAL...DON'T MOVE ON.
SNDC90 LDX #$5780
LDA SW0SCN+1
ORA #$F0
LDB #$00
JSR OUTBCD
LDD SW0SCN
ORCC #$01 SEC
ROLA MOVE TO NEXT LINE
INCB
CMPB #7 UP TO LINE 6??
BLO SNDCY2
BSR SNDSR1
SNDCY2 STD SW0SCN
SNDC91 RTS
*
* CMOS RAM TEST
*
CMTEST LDX #CMOS
LDY #LOWRAM USE SAMRAM
CMTST1 LDA ,X+ DON'T DO DOUBLES BECAUSE OF HARDWARE BRAIN DAM.
STA ,Y+
CMPX #CMOS+$400 DONE??
BNE CMTST1
LDB #6 ENOUGH ITERATIONS TO ASSURE
CMTST2 LDU HSEED
LDY SEED
LDX #CMOS
CMTST3 JSR RAND
STA ,X+
LDA #WDATA
STA WDOG
CMPX #CMOS+$400 DONE??
BNE CMTST3
STY SEED RESTORE SEED
STU HSEED
LDX #CMOS
CMTST4 JSR RAND
EORA ,X+
ANDA #$F
BNE CMEROR
LDA #WDATA
STA WDOG
CMPX #CMOS+$400
BNE CMTST4
DECB ANOTHER PASS...DONE??
BNE CMTST2
BSR RAMBAK
ANDCC #$FE CLC CLEAR IT FOR REAL
RTS AND RETURN
RAMBAK LDU #LOWRAM
LDY #CMOS
RAMBK0 LDA ,U+
STA ,Y+
CMPY #CMOS+$400
BNE RAMBK0
RTS
CMEROR BSR RAMBAK
ORCC #$01 SEC
RTS
*
*RANDOM NUMBER GENERATOR
*
RAND PSHS B
LDB SEED
LDA #3
MUL
ADDB #17
LDA LSEED
LSRA
LSRA
LSRA
EORA LSEED
LSRA
ROR HSEED
ROR LSEED
ADDB LSEED
ADCB HSEED
STB SEED
LDA SEED
PULS B,PC
*
* AND THE EVER POPULAR COPYRIGHT MESSAGE
FCC ' JOUST - COPYRIGHT (C) 1982 WILLIAMS ELECTRONICS INC. '
FCC ' ALL RIGHTS RESERVED '
IRQVEC JMP [$EFF8]
CYCLE LDA #PRAM
LDX #CLRTAB
LDB 0,X
STB PIMAGE,U
1$ LDB ,X+
STB A,U
INCA
CMPA #PRAM+8
BNE 1$
CLRA
STA PTIMX,U
LEAY PRAM+7,U
STY PDIST,U
2$ PCNAP 4
LDB #PRAM
ADDB PTIMX,U
LDA PIMAGE,U
STA B,U
LDA PTIMX,U
INCA
CMPA #$08
BNE 4$
CLRA
4$ CMPA #$04
BNE 7$
LEAX PRAM,U
LDB ,X+
PSHS B
6$ LDB ,X+
STB -2,X
CMPX PDIST,U
BLE 6$
PULS B
STB -1,X
7$ STA PTIMX,U
ADDA #PRAM
LDB A,U
STB PIMAGE,U
LDB #$E8
STB A,U
LDX #RAMCOL+8
LEAY PRAM,U
3$ LDA ,Y+
STA ,X+
CMPX #RAMCOL+15
BLE 3$
BRA 2$
TEST LDA #$77
STA XTEMP
LDX #$912
1$ BSR SUB1
LEAX $600,X
CMPX #$8D00
BLO 1$
2$ BSR SUB2
LEAX $0C,X
CMPX #$8DE8
BLO 2$
LEAX -$608,X
3$ BSR SUB1
CMPX #$9E3
LEAX -$600,X
BHI 3$
LEAX +$1FC,X
4$ BSR SUB2
LEAX -$0C,X
CMPX #$50E
BHI 4$
RTS
SUB2 LDD #$040C!XDMAFIX
BRA SUB3
SUB1 LDD #$0608!XDMAFIX
SUB3 STD $CA06
STX $CA04
LDA XTEMP
ADDA #$11
BCC 1$
LDA #$88
1$ STA XTEMP
STA $CA01
LDA #$12
STA $CA00
RTS
CLRTAB FCB $AF
FCB $77
FCB $37
FCB $1F
FCB $17
FCB $0F
FCB $04
FCB $0A
*
ENDADR EQU *
LENGTH EQU ENDADR-TSTORG
*
ORG TSTORG+$FF0
FDB PWRUPV,PWRUPV,PWRUPV,PWRUPV
FDB IRQVEC,PWRUPV,PWRUPV,PWRUPV
*
END SYSV