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