First commit main
authorHistorical Source <49599193+historicalsource@users.noreply.github.com>
Thu, 14 Oct 2021 03:04:29 +0000 (23:04 -0400)
committerHistorical Source <49599193+historicalsource@users.noreply.github.com>
Thu, 14 Oct 2021 03:04:29 +0000 (23:04 -0400)
A06559.RBN [new file with mode: 0644]
A06560.XX [new file with mode: 0644]
A06568.RBN [new file with mode: 0644]
NGTDRV.DIR [new file with mode: 0644]
NGTDRV.MAP [new file with mode: 0644]

diff --git a/A06559.RBN b/A06559.RBN
new file mode 100644 (file)
index 0000000..d71b610
Binary files /dev/null and b/A06559.RBN differ
diff --git a/A06560.XX b/A06560.XX
new file mode 100644 (file)
index 0000000..3109cc2
--- /dev/null
+++ b/A06560.XX
@@ -0,0 +1,1888 @@
+;      30-SEP-76\r
+;      04:50:00\r
+       .TITLE NIGHT DRIVER\r
+       .SBTTL PAGE ZERO EQUATES\r
+       .ASECT\r
+       .=110000\r
+;***************************************************\r
+;***   MISCELLANEOUS EQUATES FOR PAGE ZERO      ***  \r
+;***************************************************\r
+ZLOW   =2\r
+COINC  =0      ;CREDIT COUNTER\r
+COINT  =1      ;COIN TIMER\r
+SYNC   =2      ;INTERRUPT CONTROL\r
+GAS    =3      ;NO\r
+SKDCTL =4      ;NO\r
+STEER  =5      ;CURRENT STEERING VALUE\r
+XSVE   =6\r
+ORVH   =7      ;ORIGIN MSB'S\r
+ZCNTRL =10     ;CNTRL = 32 POSITIONS\r
+ZXAX   =50     ;XAXIS = 32 POSITIONS\r
+ZYAX   =110    ;YAXIS=32\r
+PYA    =150    ;ADJUSTED Y POSITION\r
+VELL   =151    ;VELOCITY\r
+VELH   =152\r
+STCL   =153    ;STEERING CONSTANT (VEL*STEER)\r
+STCH   =154\r
+PYAVL  =155    ;ADJUSTED POSITION*VELOCITY\r
+PYAVH  =156\r
+VELKL  =157    ;VELOCITY ADJUSTED BY K (VEL*K)\r
+VELHL  =160\r
+PRODL  =161    ;PRODUCT TERM USED BY MULTIPLY ROUTINE\r
+PRODH  =162\r
+ORL    =163    ;ORIGIN MIDDLE BYTE\r
+ORH    =164    ;ORIGIN LSB\r
+TURNL  =165    ;TURN DISTANCE COVERED\r
+TURNH  =166\r
+DIST   =167    ;TURN DISTANCE REQUIRED BY TRACK\r
+FRMTME =170    ;NUMBER OF FRAMES PER CLOCK TICK\r
+TRNDX  =171    ;INDEX USED TO FETCH DATA FROM TRACK TABLE\r
+CS     =172    ;COIEFFICIENT OF SHARPNESS OF TURN\r
+OBJTML =173    ;DISTANCE DRIVEN BETWEEN PYLONS (ALSO OBJTMH)\r
+EPSCR  =174    ;EXTENDED PLAY SCORE\r
+SMOKE  =175    ;SCREECH TIME AT FIRST AND SECOND GEAR\r
+SECNDH =176\r
+R7     =177\r
+TDISTL =200    ;TOTAL TRACK DISTANCE COVERED FROM GAME START\r
+TDISTM =201\r
+TDISTH =202\r
+TDSTVH =203\r
+MLTPLR =204\r
+R4     =204\r
+MLTCDL =205\r
+R0     =205\r
+MLTCDH =206\r
+R1     =206\r
+OBJTMH =207\r
+R2     =210\r
+R3     =211\r
+CRVL   =212    ;TURNING COIEFFICIENT (CS*VELOCITY)\r
+CRVH   =213\r
+PYAVKL =214    ;PYA*KP*VELOCITY\r
+PYAVKH =215\r
+FRMCL  =216    ;TOTAL FRAME COUNT\r
+FRMCH  =217\r
+R5     =220\r
+R6     =221    ;GAME TIME (STORED PACKED BCD)\r
+ZHI    =221\r
+GTML   =ZHI+1\r
+GTMH   =ZHI+2\r
+TRMAX  =ZHI+3  ;NUMBER OF ENTRIES IN TRACK TABLE\r
+TRKADL =ZHI+4  ;ADDRESS OF TRACK TABLE\r
+TRKADH =ZHI+5\r
+OLDTK  =ZHI+6  ;TRACK CURRENTLY USING OR LAST TRACK USED\r
+HML    =ZHI+7  ;HIGH SCORE (STORED BCD)\r
+HMH    =ZHI+10\r
+TPSPDL =ZHI+13 ;PLAYER'S TOP SPEED (BCD)\r
+TPSPDH =ZHI+14\r
+PRTSDL =ZHI+17 ;PREVIOUS TOP SPEED (BCD)\r
+PRTSDH =ZHI+20\r
+MILEL  =ZHI+21 ;PLAYER'S SCORE (BCD)\r
+MILEM  =ZHI+22\r
+TOPZ   =ZHI+23 ;TABLE OF PREVIOUS HIGH SCORES FOR ALL TRACKS (12 BYTES)\r
+ZVHI   =ZHI+36\r
+\r
+\r
+;****************************************************\r
+;***                                             ***\r
+;***           GAME CONTROL CONSTANTS            ***\r
+;****************************************************\r
+\r
+PYMIN  =100    ;HORIZON\r
+XMIN   =30     ;LEFT LIMIT OF SCREEN\r
+CRLFT  =130    ;CRASH POINT ON LEFT SIDE\r
+XMAX   =350    ;RIGHT LIMIT OF SCREEN\r
+CRRHT  =250    ;CRASH POINT ON RIGHT SIDE\r
+BOTTOM =350    ;BOTTOM OF SCREEN\r
+NOT    =12     ;NUMBER OF DISTANCE UNITS BETWEEN PYLONS\r
+PRSPC  =10     ;DISTANCE BETWEEN PYLON PAIR AT ORIGIN\r
+MINPIC =34     ;SMALLEST PICTURE\r
+\f      .SBTTL ADDRESS MAP EQUATES\r
+;****************************************************\r
+;***                                             ***\r
+;***           OBJECT CONTROL ADDRESSES          ***\r
+;***                                             ***\r
+;****************************************************\r
+\r
+\r
+PLYFLD =1000           ;PLAYFIELD (12)\r
+XAXIS  =2000           ;H(16)\r
+YAXIS  =2020           ;V(16)\r
+PICTR  =2040           ;C(16)\r
+WTCHDG =2060\r
+TIME   =3000           ;GAME OPT(2**7,2**6,2**5,2**4)\r
+TESTSW =3001           ;MSB(N); VBLANK (2**6)\r
+EPSW   =3001           ;BONUS TIME ALLOWED (2**5); TRACK SET SELECT (2**4)\r
+GEARS  =3002           ;GEARS (2**6,2**5,2**4)\r
+STRNG  =3003           ;STEERING (2**7,2**6)\r
+EASY   =3003           ;EASY/HARD (2**5); SPARE (2**4)\r
+COINAS =4000           ;COIN SW (MSB)\r
+COINBS =4001           ;COIN SW\r
+STRTSW =4002           ;START GAME SWITCH\r
+ACCEL  =4003           ;ACCELERATOR\r
+TRKSW  =4004           ;TRACK SELECT 4,5\r
+POWER  =4006           ;LINE POWER\r
+CYC56  =4007           ;50/60 MODE SWITCH\r
+OUT1   =5000           ;MOTOR, SCREECH\r
+OUT2   =6000           ;CRASH, SLMP, THUMPER\r
+OUT3   =7000           ;SPARE OUTPUT\r
+PFR    =100000         ;PLAYFIELD READ\r
+STRST  =102000         ;STEERING RESET\r
+\r
+;      PLAYFIELD ADDRESSES\r
+\r
+PHS    =15             ;PREVIOUS HIGH SCORE\r
+YTPSPD =134            ;PLAYERS SCORE\r
+PPTP   =34             ;PREVIOUS TOP SPEED\r
+PSCORE =115            ;PLAYER'S TOP SPEED\r
+\r
+\r
+;**********************************************************\r
+;***                                                   ***\r
+;***                                                   ***\r
+;***                   FORMULAS                        ***\r
+;***     VEL=VEL +GTBL(GEAR.GAS.VEL) - DTBL(.GEAR)      ***\r
+;***                VELK=(VEL)(KP)                     ***\r
+;***                STC=(STEER)(VEL)                   ***\r
+;***                PXO=PXO-(PYA)(VELK)+STC            ***\r
+;***                PXE=PXE+(PYA)(VELK)+STC            ***\r
+;***                PYA=PY-PYMIN-2.                    ***\r
+;***                PY=PY+(PYA)(VEL)                   ***\r
+;***                                                   ***\r
+;**********************************************************\r
+\f      .SBTTL MESSAGES\r
+ORG    =.\r
+\r
+\r
+MESS0: .BYTE 101\r
+       .ASCIZ /YOUR@SCORE/\r
+       .BYTE 123\r
+       .ASCIZ /TOP@SPEED/\r
+       .BYTE 0\r
+MESS1: .BYTE 1\r
+       .ASCIZ /HIGH@SCORE/\r
+       .BYTE 23\r
+       .ASCIZ /TOP@SPEED/\r
+       .BYTE 0\r
+MT:    .BYTE 70\r
+       .ASCIZ /TIME/\r
+       .BYTE 0\r
+ATARI: .BYTE 70\r
+       .BYTE 200,100,300,301,224,101,122,211,0,0\r
+ROMM:  .BYTE 141\r
+       .ASCIZ /ROM@/\r
+       .BYTE 0\r
+OFFRD: .BYTE 112\r
+       .ASCIZ  /OFF@THE@ROAD/\r
+       .BYTE 145\r
+       .ASCIZ  /WAIT@FOR@THE@TOW@TRUCK/\r
+       .BYTE 0\r
+\r
+OPT:   .BYTE 101\r
+       .ASCIZ /OPTIONS=@/\r
+       .BYTE 0\r
+\f      .SBTTL TEST PROGRAM\r
+TEST:  LDX I,0                 ;TEST ALL FUNCTIONS OF GAME\r
+       LDY I,0                 ;FIRST TEST PAGE ZERO\r
+ZLP:   STY ZX,0                ;WRITE PG ZERO ADDRESS INTO CELL\r
+       INX\r
+       INY                     ;FILL ALL OF PAGE ZERO\r
+       BNE ZLP\r
+ZTST:  TXA                     ;NOW GO CHECK TO SEE IF PAGE ZERO WORKED\r
+       CMP ZX,0                ;PG ZERO CELL = PG ZERO ADDRESS\r
+       BEQ ZPOK                ;YES\r
+       EOR ZX,0                ;SET FAILIING BIT(S)\r
+       TAY                     ;SAVE IT (THEM)\r
+ZPERR: LDA I,40                ;NO. SIGNAL BAD PAGE ZERO\r
+       STA Z,SYNC\r
+       CLI                     ;ALLOW FOR INTERRUPT\r
+       JMP ZPERR               ;WAIT FOR INTERRUPT\r
+ZPOK:  INX\r
+       BNE ZTST\r
+       LDX I,ZVHI-ZLOW+1\r
+       JSR CLRZVH              ;CLEAR PAGE ZERO\r
+TESTS: STA Z,COINC\r
+       STA Z,COINT\r
+       LDA I,17\r
+       STA A,OUT1              ;TURN OFF SOUNDS, MOTOR = LOW RPM\r
+       LDA I,3\r
+       STA A,OUT2\r
+       JSR BLKSC               ;BLANK SCREEN\r
+TST0:  LDY I,0\r
+       STY Z,R7                ;PREPARE TO DO CHECKSUM\r
+       LDA I,RESET&377\r
+       STA Z,R2\r
+       LDA I,RESET&-400/400\r
+       STA Z,R3                ;STORE STARTING ADDRESS\r
+       LDA I,4\r
+       STA Z,R6\r
+       LDA I,5\r
+       STA Z,R4                ;COUNT OF 1K CHUNKS *2-1\r
+CKSLP0:        LDA I,0\r
+       STA Z,R5\r
+       LDX I,3\r
+CKSLP1:        LDA NY,R2               ;READ DATA FROM ROM\r
+       CLC\r
+       ADC Z,R5                ;ACCUMULATE CHECKSUM\r
+       STA Z,R5\r
+       INY                     ;CONTINUE FOR 256 BYTES\r
+       BNE CKSLP1\r
+       INC Z,R3\r
+       DEX                     ;CONTINUE FOR 4 BLOCKS OF 256 BYTES (1024 BYTES)\r
+       BPL CKSLP1\r
+       LDX Z,R4\r
+       LDA AX,CHKADR           ;GET HIGH ADDRESS BYTE OF ROM CHECKSUM\r
+       STA Z,R1\r
+       DEX\r
+       LDA AX,CHKADR           ;GET LOW ADDRESS\r
+       STA Z,R0\r
+       LDA Z,R5\r
+       CMP NY,R0               ;COMPARE ROM CHECKSUM WITH COMPUTED CHECKSUM\r
+       BEQ CKSLP2              ;GOOD\r
+       LDA Z,R6                ;NO GOOD\r
+       ORA Z,R7                ;FLAG ROM PAIR BAD\r
+       STA Z,R7                ;CONTINUE\r
+CKSLP2:        LSR Z,R6\r
+       STA A,WTCHDG\r
+       DEC Z,R4                ;CONTINUE FOR 3 GROUPS OF 1024 BYTES\r
+       DEC Z,R4\r
+       BPL CKSLP0\r
+       LDA I,20                ;CONFUSE VSYNC PROCESSOR TO NOT UNPACK SCORES\r
+       STA Z,FRMCL             ;AND TO BLANK GAME OVER/BONUS TIME.\r
+       BIT A,TESTSW            ;TEST MODE?\r
+       BMI SKPOBJ              ;NO\r
+       JSR STST2               ;YES, INTITALIZE ALL 16 MOVING OBJECTS TO TEST PATTERN.\r
+SKPOBJ:        LDA I,300\r
+       STA Z,SYNC              ;ENABLE VSYNC PROCESSING\r
+       JSR SYNWT               ;WAIT FOR SYNC\r
+       STA A,WTCHDG\r
+       LDX I,ROMM-MESS0-1      ;WRITE ROM\r
+       JSR MESLP\r
+CKSLP4:        LDA Z,R7                ;ANY CHECKSUM ERRORS?\r
+       BEQ CKSLP5              ;NO\r
+       ORA I,60                ;YES\r
+       STA A,PLYFLD+144        ;WRITE THE ROM ERROR CODE ON SCREEN.\r
+       BIT A,TESTSW            ;TEST MODE?\r
+       BPL CKSLP8              ;YES. CONTINUE TEST\r
+       JMP TST0                ;ELSE REPEAT CHECKSUM TEST.\r
+CKSLP5:        BIT A,TESTSW            ;TEST MODE?\r
+       BPL CKSLP7              ;YES.\r
+       JSR CLRZRO              ;NO. CLEAR PAGE ZERO\r
+       JMP BEGIN               ;BEGIN ATTRACT MODE\r
+CKSLP7:        LDA I,117\r
+       STA A,PLYFLD+144        ;WRITE 'O'\r
+       LDA I,113\r
+       STA A,PLYFLD+145        ;WRITE 'K'\r
+CKSLP8:        LDX I,OPT-MESS0-1\r
+       JSR MESLP               ;WRITE OPTIONS=ON THIRD LINE\r
+       LDX I,1\r
+       LDY I,0\r
+       JSR SYNWT\r
+       STA A,WTCHDG\r
+ABC:   TXA\r
+       STA AY,PLYFLD           ;WRITE ABCD...Z ON TOP LINE\r
+       INY\r
+       INX\r
+       CPX I,27.\r
+       BMI ABC\r
+       LDX I,60\r
+       LDY I,40\r
+       JSR SYNWT\r
+       STA A,WTCHDG\r
+N09:   TXA\r
+       STA AY,PLYFLD           ;WRITE 0-9 ON SECOND LINE\r
+       INY\r
+       INX\r
+       CPX I,72\r
+       BMI N09\r
+PFTST: JSR SYNWT\r
+       STA A,WTCHDG\r
+       LDA A,TIME\r
+       LSR\r
+       LSR\r
+       LSR\r
+       LSR\r
+       TAX\r
+       LDA AX,HEX\r
+       STA A,PLYFLD+110        ;WRITE TIME SWITCH ON THIRD LINE\r
+       LDA A,TESTSW            ;CONVERT DIP SWITCH READINGS TO BINARY\r
+       LSR\r
+       LSR\r
+       AND I,14\r
+       STA Z,R0\r
+       LDA A,EASY\r
+       AND I,60\r
+       ORA Z,R0\r
+       LSR\r
+       LSR\r
+       TAX\r
+       LDA AX,EPDCOD           ;CONVERT ORDER TO CONFORM TO SWITCH\r
+       STA Z,R0\r
+       LDX I,0\r
+EPLP:  LSR Z,R0                ;PUT BIT INTO CARRY\r
+       LDA I,30                ;SET 1/2 OF ASCII FOR '0'\r
+       ROL                     ;DOUBLE IT AND SHIFT CARRY INTO LSB\r
+       STA AX,PLYFLD+113       ;WRITE SEQUENCE OF 4 BINARY DIGITS 0000-1111\r
+       INX\r
+       CPX I,4\r
+       BMI EPLP\r
+CKSLP6:        LDX I,5                 ;PREPARE FOR SOUND TEST\r
+       LDA I,23\r
+       STA A,OUT2              ;TURN ON LAMP\r
+       LDA I,200\r
+SNDLP0:        AND AX,COINAS\r
+       DEX\r
+       BPL SNDLP0\r
+       AND I,200               ;ANY SWITCHES CLOSED?\r
+       BMI SNDLP1              ;NO\r
+       LDA I,37                ;YES. TURN ON SCREECH\r
+       BNE SNDLP2\r
+SNDLP1:        LDA I,17                ;NO. TURN OFF SCREECH\r
+SNDLP2:        STA Z,R0\r
+       LDA A,GEARS\r
+       AND I,160\r
+       EOR I,160               ;ANY GEARS DOWN?\r
+       BEQ SNDLP3              ;NO\r
+       LDA I,20\r
+SNDLP3:        ORA Z,R0                ;TURN ON/OFF SCREECH SOUND\r
+       STA A,OUT1\r
+       LDA I,1\r
+       BIT A,STRNG             ;ANY STEERING\r
+       BPL STLPT0              ;NO\r
+       BVC STLPT1              ;RIGHT?\r
+       LDA I,377               ;LEFT\r
+STLPT1:        STA Z,R4\r
+       STA A,STRST             ;RESET STEERING BIT\r
+       LDA Z,ZXAX+37           ;INITIALIZE REGS. FOR OBJECT MOVE\r
+       CLC\r
+       ADC Z,R4\r
+       STA Z,R0\r
+       LDA Z,ZXAX+35\r
+       CLC\r
+       ADC Z,R4\r
+       STA Z,R1\r
+       JSR STST1               ;GO MOVE ALL OBJECTS RIGHT/LEFT\r
+STLPT0:        BIT A,TESTSW            ;STILL IN TEST MODE?\r
+       BMI JR                  ;NO\r
+       JMP PFTST               ;YES, REPEAT TEST\r
+JR:    JMP RESET\r
+\r
+\r
+STST2: LDA I,60\r
+       STA Z,R1                ;X1 POSITION\r
+       LDA I,220\r
+       STA Z,R0                ;X2 POSITION\r
+STST1: LDA I,16.\r
+       STA Z,R4\r
+STST3: LDA I,60\r
+       STA Z,R3                ;Y POSITION\r
+       LDA I,240.              ;PICTURE DATA\r
+       STA Z,R2\r
+       LDX I,37                ;Z DATA INDEX\r
+STST0: LDA Z,R2\r
+       STA ZX,ZCNTRL           ;STORE PICTURE\r
+       LDA Z,R3\r
+       EOR I,377               ;FLIP Y POSITION\r
+       STA ZX,ZYAX             ;STORE Y POSITION\r
+       LDA Z,R0\r
+       STA ZX,ZXAX             ;STORE X POSITION\r
+       DEX\r
+       DEX\r
+       LDA Z,R2\r
+       CLC\r
+       ADC I,241.              ;UPDATE PICTURE\r
+       STA Z,R2\r
+       STA ZX,ZCNTRL           ;NEXT PICTURE\r
+       LDA Z,R1\r
+       STA ZX,ZXAX             ;NEXT X\r
+       LDA Z,R3\r
+       EOR I,377               ;FLIP Y POSITION\r
+       STA ZX,ZYAX             ;NEXT Y\r
+       LDA Z,R2\r
+       CLC\r
+       ADC I,241.              ;UPDATE PICTURE\r
+       STA Z,R2\r
+       LDA Z,R3\r
+       CLC\r
+       ADC I,16.\r
+       STA Z,R3                ;UPDATE Y\r
+       LDA Z,R0\r
+       CLC\r
+       ADC Z,R4\r
+       STA Z,R0                ;UPDATE X1\r
+       LDA Z,R1\r
+       CLC\r
+       ADC Z,R4\r
+       STA Z,R1                ;UPDATE X2\r
+       DEX\r
+       DEX\r
+       BPL STST0\r
+       RTS\r
+\r
+\r
+HEX:   .ASCII /0123456789ABCDEF/                       ;CONVERSION FOR OPTION SWITCH\r
+EPDCOD:        .BYTE 0,2,1,3,4,6,5,7,8.,10.,9.,11.,12.,14.,13.,15.     ;CONVERSION FOR DIP SWITCH\r
+       .EVEN\r
+TKADT: .WORD EPTRK,PROTRK,NOTRK\r
+TKMXT: .BYTE EE-EB,ATRK-PROTRK,NE-NB\r
+NB:\r
+NOTRK: .BYTE 0,127.,0,127.,40,177,0,127.,240,177\r
+NE:\r
+EB:\r
+EPTRK: .BYTE 0,127.,0,127.,30,127.,35,54.,230,72.\r
+       .BYTE 0,36.,240,72.,0,127,40,91.,0,108.\r
+       .BYTE 40,91.,0,63.,220,63.,0,36.,35,127\r
+       .BYTE 0,108.,245,127.,220,91.,40,127,30,127\r
+       .BYTE 32,82.,234,127.,220,91.,44,127,30,54.\r
+EE:\r
+PROTRK:        .BYTE 0,127.,0,127.,40,100,0,70,240,60,0,30,44,50\r
+       .BYTE 14,40,50,30,245,50,0,70,45,20,210,40\r
+       .BYTE 245,100.,45,64.,0,32,245,100.\r
+\r
+ATRK:  .BYTE 0,127.,17,100,217,177,17,100\r
+ATRKMX =.-ATRK\r
+DTBL:  .BYTE 6,5,4,3\r
+GTBL:  .BYTE 161,21,161,21,141,21,142,21,123,21,64,21,45,41,5,41\r
+       .BYTE 5,41,364,41,363,61,362,61,341,61,340,101,340,101,320,101\r
+       .BYTE 337,62,337,62,317,42,317,22,317,2,276,3,276,3,276,363\r
+       .BYTE 256,363,256,363,255,363,235,363,235,343,235,343,234,343,234,342\r
+\r
+MOTOR: .BYTE 377,377,317,377,237,377,155,377,074,377,032,377,010,357,007,337\r
+       .BYTE 006,317,005,277,004,256,003,235,002,215,002,174,002,153,002,132\r
+       .BYTE 002,131,002,110,002,067,002,067,002,046,002,045,002,044,002,044\r
+       .BYTE 002,043,002,042,002,042,002,042,002,042,002,042,002,042,002,042\r
+GO:    .ASCIZ /GAME@OVER@/\r
+EPMSG: .ASCIZ /BONUS@TIME/\r
+PZRERR:        .ASCII /ERR@Z@/\r
+PZE:   .ASCIZ /@@@@/\r
+\r
+IPIX:  .BYTE 53,52,70,125,34,34,34\r
+IXD:   .BYTE 154,207,141,222,114,246\r
+       .BYTE 46,314,165,176,163,177,161,201\r
+IYD:   .BYTE 115,134,167,252,100,102,105\r
+\r
+MPHL:  .BYTE 60,61,63,64,65,66,70,71\r
+       .REPT 112000-.\r
+       .BYTE 377\r
+       .ENDR\r
+\fOIN:.SBTTL GAME\r
+;****************************************************\r
+;***                                             ***\r
+;***                   MAIN GAME                 ***\r
+;***                                             ***\r
+;****************************************************\r
+;\r
+; SYNC 0 = SYNC PROCESSED\r
+;      1 =\r
+;      2 =\r
+;      3 = BONUS SCORE REACHED\r
+;      4 = BONUS TIME\r
+;      5 = ERR 1\r
+;      6 = PROCESS SYNC\r
+;      7 = ATTRACT MODE\r
+;\r
+\r
+\r
+       .=112000                ;9400\r
+\r
+RESET: SEI\r
+       LDX I,377\r
+       TXS\r
+       CLD\r
+       LDA I,VSYNC&377\r
+       STA A,177776            ;INTERRUPT VECTOR LOW=FFFE\r
+       LDA I,VSYNC&-400/400    \r
+       STA A,177777            ;INTERRUPT VECTOR HIGH=FFFF\r
+       JMP TEST\r
+BEGIN: JSR BLKSC\r
+       JSR PUTMSG\r
+       JSR MESLP\r
+       JMP ATTRCT\r
+\r
+CHK1K: .BYTE 322,56            ;ROM CHECKSUM FOR 9400-97FF\r
+\r
+BLKSC: LDX I,7                 ;BLANK SCREEN ROUTINE\r
+       LDY I,PLYFLD&377\r
+       STY Z,PRODL\r
+       LDA I,PLYFLD&-400/400\r
+       STA Z,PRODH\r
+BLANK: JSR SYNWT               ;PAUSE BETWEEN BLOCKS\r
+       STA A,WTCHDG            ;WATCH DOG\r
+       LDY I,15.               ;DO 16 BYTES AT A TIME\r
+BLANK0:        LDA I,0                 ;CLEAR PLAYFIELD RAM\r
+       STA NY,PRODL\r
+       DEY\r
+       BPL BLANK0\r
+       LDA I,16.\r
+       CLC\r
+       ADC Z,PRODL             ;UPDATE INDIRECT ADDRESS\r
+       STA Z,PRODL\r
+       DEX                     ;CONTINUE ACROSS 8 BLOCKS OF 16 BYTES\r
+       BPL BLANK\r
+       RTS                     ;EXIT\r
+\r
+PUTMSG:        LDX I,377\r
+MESLP: INX\r
+       LDY AX,MESS0            ;GET SCREEN DESTINATION ADDRESS\r
+       BNE CONTM\r
+       RTS\r
+CONTM: JSR SYNWT\r
+       STA A,WTCHDG            ;WATCH DOG\r
+MESLP1:        INX\r
+       LDA AX,MESS0\r
+       BEQ MESLP\r
+       STA AY,PLYFLD-1\r
+       INY\r
+       BNE MESLP1\r
+\r
+ATTRCT:        JSR CLRZRO\r
+       JSR SYNWT\r
+       STA A,WTCHDG\r
+       LDX I,MESS1-MESS0-1\r
+       JSR MESLP               ;WRITE TOP LINE\r
+       LDX I,ATARI-MESS0-1\r
+       JSR MESLP               ;WRITE ATARI\r
+       LDA I,300               ;SET ATTRACT MODE, PROCESS VSYNC\r
+       STA Z,SYNC\r
+       JSR INTZRO              ;SET OBJECT TABLES\r
+       LDA I,ATRK&-400/400             ;SET ATTRACT MODE TRACK.\r
+       STA Z,TRKADH\r
+       LDA I,ATRK&377\r
+       STA Z,TRKADL\r
+       LDA I,ATRKMX\r
+       STA Z,TRMAX\r
+       JMP MAIN                ;RUN GAME DURING ATTRACT MODE\r
+\r
+GMTIMD:        .BYTE 30.,45.,60.,75.           ;FRAMES PER CLOCK TICK\r
+CNINC: .BYTE 4,2,2,1                   ;(CREDITS/COIN)*2\r
+\r
+                                       ;EASY\r
+SCRTBL:        .BYTE 264,163,131,107           ;PRO (2.8,1.8,1.4,1.12)\r
+       .BYTE 264,163,131,107           ;EXPERT (2.8,1.8,1.4,1.12)\r
+       .BYTE 264,163,131,107           ;NOVICE (2.8,1.8,1.4,1.12)\r
+\r
+\r
+                                       ;HARD\r
+       .BYTE 237,150,112,100           ;PRO (2.45,1.63,1.22,1.00)\r
+       .BYTE 237,150,112,100           ;EXPERT (2.45,1.63,1.22,1.00)\r
+       .BYTE 237,150,112,100           ;NOVICE (2.45,1.63,1.22,1.00)\r
+\fCOIN: LDA A,TIME              ;FIND OUT HOW MANY CREDITS PER COIN\r
+       LSR\r
+       LSR\r
+       LSR\r
+       LSR\r
+       AND I,3\r
+       TAX\r
+       LDA AX,CNINC            ;GET CREDITS PER COIN\r
+       STA Z,R0                ;SAVE IT\r
+       LDA I,0                 ;CLEAR COIN TIMER\r
+       STA Z,R2\r
+       STA Z,R3\r
+COINA0:        LDA Z,COINT             ;TIMING COIN HIGH OR LOW\r
+       AND I,200               ;MSB SETS IF COIN HAS BEEN TIMED HIGH\r
+       STA Z,R1\r
+COINA1:        LDA A,COINAS\r
+       STA A,WTCHDG\r
+       EOR Z,R1                ;COIN SWITCH TIME OK?\r
+       BMI COINA3              ;NO\r
+       BIT Z,R1                ;PAST UP TIME?\r
+       BMI COINA2              ;YES. COUNT COIN\r
+       DEC Z,R2                ;DEBOUNCE TIME OUT?\r
+       BEQ COINA4              ;YES\r
+       JSR COINB               ;NO. DO COIN B\r
+       JMP COINA1\r
+COINA4:        LDA Z,COINT\r
+       EOR I,200               ;SET COIN TIMED OUT\r
+       STA Z,COINT\r
+COINA3:        LDA I,0                 ;CLEAR COIN TIMER\r
+       STA Z,R2\r
+       JSR COINB               ;ANY B COIN?\r
+       BCS COINA0              ;YES. CONTINUE TIMING\r
+       BCC CEND                ;NO. END\r
+\r
+COINA2:        NOP                     ;COUNT COIN\r
+       LDA Z,COINT\r
+       AND I,177               ;DROP COIN DETECTED BIT\r
+       CLC\r
+       ADC Z,R0                ;GET CREDIT COUNT\r
+       STA Z,COINT\r
+       BPL COINA3\r
+\r
+COINB: LDA Z,COINT\r
+       ASL\r
+       AND I,200               ;MSB SETS IF COIN HAS BEEN TIMED HIGH\r
+       STA Z,R4\r
+COINB1:        LDA A,COINBS            ;COIN SWITCH\r
+       EOR Z,R4                ;COIN SWITCH TIME OK\r
+       BMI COINB3              ;NO\r
+       BIT Z,R4                ;PASSED UP TIME?\r
+       BMI COINB2              ;YES COUNT COIN\r
+       DEC Z,R3                ;NO. DEBOUNCE TIME OUT?\r
+       BEQ COINB4              ;YES\r
+       SEC                     ;SIGNAL TIMING B COIN\r
+       RTS                     ;EXIT\r
+COINB4:        LDA Z,COINT             ;INDICATE DEBOUNCE OK\r
+       EOR I,100\r
+       STA Z,COINT\r
+COINB3:        LDA I,0                 ;CLEAR DEBOUNCE TIMER\r
+       STA Z,R3\r
+       CLC                     ;SIGNAL NO LONGER TIMING\r
+       RTS                     ;EXIT\r
+COINB2:        LDA Z,COINT\r
+       AND I,277               ;DROP COIN DETECTED BIT\r
+       CLC\r
+       ADC Z,R0                ;ACCUMULATE CREDIT\r
+       STA Z,COINT\r
+       BPL COINB3              ;EXIT\r
+\r
+\r
+CEND:  LDA Z,COINT\r
+       AND I,77                ;ANY COINS COUNTED?\r
+       BEQ COINS               ;NOPE\r
+       BIT A,CYC56             ;YES. 50/60 CYCLE?\r
+       BPL CE1                 ;50 CYCLES\r
+CE2:   BIT A,POWER             ;DOWN STROKE?\r
+       BPL CE2                 ;YES. WAIT FOR UP STROKE\r
+       STA A,WTCHDG\r
+       JSR LFC\r
+       BCC CE3\r
+       JMP COIN                ;YES\r
+CE3:   BIT A,POWER             ;UP STROKE?\r
+       BMI CE3                 ;YES. WAIT FOR DOWN STROKE\r
+       STA A,WTCHDG\r
+CE5:   LDX I,191.\r
+CE4:   BIT A,POWER             ;OK?\r
+       BMI CE1                 ;60 CYCLES\r
+       JSR LFC                 ;SEE IF ANY MORE COINS ARE PRESENT\r
+       BCC CE6                 ;NO\r
+       JMP COIN                ;YES. PROCESS NEW COIN\r
+CE6:   DEX\r
+       BNE CE4\r
+       STX Z,COINC             ;ZERO. COIN CREDIT\r
+       STX Z,COINT             ;POWER IS 50 CYCLES BUT OPTION IS 60 CYCLES\r
+CE1:   LDA Z,COINT\r
+       AND I,77\r
+       CLC\r
+       ADC Z,COINC             ;ACCUMULATE CREDITS\r
+       STA Z,COINC\r
+       LDA Z,COINT             ;CLEAR COIN CREDITS\r
+       AND I,300\r
+       STA Z,COINT\r
+COINS: CLC\r
+       BIT Z,SYNC              ;ATTRACT MODE?\r
+       BMI COINS0              ;YES\r
+       RTS                     ;NO. EXIT\r
+COINS0:        LDA I,17\r
+       STA A,OUT1              ;LOW RPM, SCREECH\r
+       LDA I,376\r
+       BIT Z,COINC             ;ANY COINS\r
+       BNE COINS1              ;YES\r
+       LDA I,3                 ;NO\r
+       STA A,OUT2              ;TURN OFF START LAMP, CRASH\r
+       RTS\r
+COINS1:        LDA I,23                ;TURN ON SG LAMP\r
+       STA A,OUT2\r
+       BIT A,STRTSW            ;START BUTTON PUSHED?\r
+       BMI COINS2              ;NO\r
+       DEC Z,COINC             ;YES. SUBTRACT COIN CREDIT\r
+       DEC Z,COINC\r
+       LDX I,377               ;RESET STACK\r
+       TXS\r
+       JMP GAME                ;START GAME\r
+COINS2:        RTS\r
+\r
+LFC:   LDA A,COINBS            ;LOOK FOR COIN ROUTINE\r
+       LSR\r
+       CLC\r
+       ORA A,COINAS\r
+       AND I,300               ;GET BOTH COIN MECH STATUS\r
+       EOR I,300\r
+       STA Z,R0\r
+       LDA Z,COINT             ;DO THEY MATCH WHAT'S EXPECTED (COINT)?\r
+       AND I,300\r
+       EOR Z,R0\r
+       BEQ LFC0                ;YES\r
+       SEC                     ;NO. SIGNAL A CHANGE OF COIN MECH STATUS\r
+LFC0:  RTS                     ;EXIT\r
+\r
+GTM:   LDA A,TIME              ;GET TIME OPTION\r
+       ROL\r
+       ROL\r
+       ROL                     ;PUT 2 MSB'S INTO 2 LSB'S\r
+       AND I,3                 ;MASK\r
+       TAX\r
+       ORA Z,OLDTK             ;ADD THE TRACK NUMBER\r
+       TAY\r
+       LDA I,40\r
+       BIT A,EASY              ;EASY SCORING SELECTED?\r
+       BNE EBT                 ;YES\r
+       TYA\r
+       CLC                     ;NO. BUMP TO DIFFICULT SCORE TABLE\r
+       ADC I,12.\r
+       TAY\r
+EBT:   LDA AY,SCRTBL           ;GET SCORE WEIGHT\r
+       STA Z,EPSCR             ;STORE IT FOR THE DISPLAY ROUTINE\r
+       LDA AX,GMTIMD           ;GET FRAMES PER CLOCK TICK\r
+       STA Z,FRMTME\r
+       LDA I,00                ;INITIALIZE CLOCK TO 100 (BCD)\r
+       STA Z,GTML              ;LOW TIMER\r
+       LDA I,20\r
+       STA Z,GTMH              ;HIGH\r
+       RTS                     ;EXIT\r
+\r
+GAME:  LDA I,0\r
+       STA Z,SYNC\r
+       LDA I,1\r
+       STA A,OUT2              ;TURN OFF START LAMP, CRASH, ATTRACT MODE\r
+       JSR BLKSC               ;CLEAR PLAYFIELD\r
+       JSR PUTMSG              ;WRITE SCORE LABELS\r
+       LDX I,MT-MESS0-1\r
+       JSR MESLP               ;WRITE TIME\r
+       JSR CLRZRO              ;CLEAR PAGE ZERO\r
+       JSR INTZRO              ;SET OBJECT TABLES\r
+       LDA I,100\r
+       STA Z,SYNC              ;SIGNAL GAME TIME, PROCESS SYNC\r
+       JSR GETTRK              ;GET TRACK\r
+       JSR HISCR               ;DO HIGH SCORE SAVES\r
+       JSR GTM                 ;GET GAME TIME\r
+MAIN:  JSR SYNWT\r
+       BIT A,TESTSW            ;TEST MODE?\r
+       BMI GM0\r
+       JMP TEST\r
+GM0:   LDX I,0\r
+       LDA I,20\r
+       BIT Z,SYNC              ;ATTRACT MODE?\r
+       BPL LFG                 ;NO\r
+       LDA I,6                 ;YES, FORCE VEL=6\r
+       STA Z,VELH\r
+       STX Z,VELL\r
+       STX Z,STEER             ;FORCE STEER=0\r
+       JMP DNEVEL\r
+LFG:   BIT A,GEARS             ;GEAR SWITCH CLOSED?\r
+       BEQ FG                  ;YES\r
+       INX                     ;NO\r
+       ASL                     ;ALL SWITCHES TESTED?\r
+       BPL LFG                 ;NO\r
+FG:    STX Z,R3                ;SAVE GEAR NUMBER\r
+       LDA AX,DTBL             ;NOPE. GET DECELERATION CONSTANT\r
+       LDX I,VELL\r
+       LDY I,PRODL\r
+       JSR MULT                ;COMPUTE FRACTION OF VELOCITY\r
+       LDA Z,PRODH             ;GREATER THAN 1?\r
+       BEQ ACLOK               ;NO\r
+       LDA I,0                 ;YES\r
+       STA Z,PRODH             ;FORCE TO +0.25 ACCELERATION\r
+       LDA I,100\r
+       STA Z,PRODL\r
+ACLOK: LDA Z,PRODL\r
+       LSR\r
+       LSR\r
+       CMP I,20                ;ACCELERATION < 16?\r
+       BMI SNDOK               ;YES\r
+       LDA I,17                ;NO. FORCE TEMPORARILY TO 15.\r
+SNDOK: EOR I,17                ;INVERT\r
+       STA Z,R5                ;TEMPORARY MOTOR SOUND REGISTER\r
+       LSR Z,PRODL             ;HALVE THE ACCELERATION\r
+       JSR NEG                 ;NEGATE ACCELERATION\r
+       BIT A,ACCEL             ;ACCELERATOR PRESSED?\r
+       BPL SMACL               ;YEP\r
+       LDA Z,R5                ;NO. USE COMPUTED DECELERATION\r
+       STA A,OUT1              ;SET MOTOR SOUNDS\r
+       LDA I,0                 ;CLEAR SCRATCH SOUND TIMER\r
+       STA Z,SMOKE\r
+       JMP DOBRK               ;BRAKING EFFECT\r
+SMACL: LDA I,0\r
+       STA Z,PRODH\r
+       LDA Z,VELL              ;USE VELOCITY AS INDEX\r
+       ASL\r
+       LDA Z,VELH\r
+       ROL\r
+       CMP I,40                ;VELOCITY < 32\r
+       BMI VELOK               ;YES\r
+       LDA I,37                ;NO. FORCE IT TEMPORARILY TO 31\r
+VELOK: ASL\r
+       LSR Z,R3                ;ADJUST GEAR NUMBER\r
+       PHP                     ;SAVE THE CARRY\r
+       ORA Z,R3                ;ADD GEAR NUMBER\r
+       TAX\r
+       LDA AX,MOTOR            ;GET MOTOR SOUND. IF 2ND OR 4TH -\r
+       BCS MTL                 ;USE LOW HALF\r
+       LSR\r
+       LSR                     ;ELSE USE HIGH HALF (1ST OR 3RD)\r
+       LSR\r
+       LSR\r
+MTL:   AND I,17\r
+       STA Z,R5\r
+       STA A,OUT1              ;TURN ON MOTOR\r
+       PLP                     ;GET THE CARRY\r
+       LDA AX,GTBL             ;GET ACCELERATION VALUE.  IF 2ND OR 4TH -\r
+       BCS VLO                 ;USE LOW SIDE\r
+       LSR\r
+       LSR                     ;ELSE USE HI SIDE (1ST OR 3RD)\r
+       LSR\r
+       LSR\r
+VLO:   AND I,17                ;MASK IT\r
+       STA Z,R3                ;SAVE IT\r
+       AND I,10                ;+ OR -?\r
+       BEQ VPN                 ;+ LEAVE AS IS\r
+       LDA I,377\r
+       STA Z,PRODH             ;ELSE EXTEND SIGN AND\r
+       LDA I,0                 ;DOWN SHIFT\r
+       STA Z,R5\r
+       STA A,OUT1              ;FORCE MAXIMUM REV'S\r
+       LDA I,360\r
+VPN:   ORA Z,R3\r
+       ASL                     ;DOUBLE ACCELERATION\r
+       STA Z,PRODL\r
+DOBRK: NOP\r
+       NOP\r
+       NOP\r
+INCVEL:        LDA Z,PRODL             ;ACCELERATION?\r
+       BEQ ZRACL               ;ZERO\r
+       BMI NACL                ;NEGATIVE\r
+       CMP I,8.                ;ACCEL > 8.?\r
+       BEQ NACL                ;NO\r
+       BCC NACL                ;NO\r
+       LDA Z,R5                ;MOTOR REG\r
+       ORA I,60                ;SET LOUD SCREECH\r
+       STA Z,R5\r
+       STA A,OUT1              ;LIGHT 'EM UP (SMOKE 'EM)\r
+       LDA I,20.               ;SMOKE 'EM TIMER\r
+       STA Z,SMOKE\r
+       BNE NACL\r
+ZRACL: LDA I,377               ;ACCEL=0.\r
+       BIT Z,VELH              ;VELOCITY > 1?\r
+       BNE NACL                ;YES\r
+       STA Z,PRODH             ;NO. FORCE ACCEL TO -1\r
+       STA Z,PRODL\r
+NACL:  LDA Z,SMOKE             ;TIMER RUN OUT?\r
+       BEQ NACL1               ;YEP\r
+       DEC Z,SMOKE             ;NO. DECREMENT TIMER\r
+       LDA Z,R5\r
+       ORA I,40\r
+       STA A,OUT1              ;LIGHT 'EM UP\r
+NACL1: LDA Z,PRODL\r
+       CLC\r
+       ADC Z,VELL              ;UPDATE VELOCITY\r
+       STA Z,VELL\r
+       LDA Z,PRODH\r
+       ADC Z,VELH\r
+       STA Z,VELH\r
+       BPL DNEVEL\r
+       LDA I,0                 ;DON'T ALLOW VELOCITY TO GO NEGATIVE\r
+       STA Z,VELL\r
+       STA Z,VELH\r
+DNEVEL:        LDX I,VELL              ;SET ADDRESS OF MULTIPLICAND\r
+       LDY I,STCL              ;ADDRESS OF PRODUCT\r
+       LDA Z,STEER             ;STEERING PLUS?\r
+       BPL STRPL               ;YES\r
+       EOR I,377               ;NO\r
+       CLC                     ;NEGATE STEERING\r
+       ADC I,1\r
+       JSR MULT                ;COMPUTE 'STC' (MINUS)\r
+       JSR STCLMT              ;STC TOO BIG? ADJUST IF SO\r
+       JSR NEG                 ;NEGATE PRODUCT\r
+       JMP CMPCRV\r
+\r
+STCLMT:        LDA I,4.\r
+       CMP Z,STCH              ;STC > 4?\r
+       BMI STCLM0              ;YES\r
+       RTS                     ;NO. RETURN\r
+STCLM0:        SEC\r
+       LDA Z,STCH\r
+       SBC I,4.                ;COMPUTE STC-4\r
+       CMP I,2                 ;DIFF > 2?\r
+       BMI STCLM1              ;NO\r
+       LDA Z,R5                ;YES. 4 WHEEL DRIFT\r
+       ORA I,60\r
+       STA Z,R5                ;SET SCREECH\r
+STCLM1:        LDA I,3\r
+       NOP\r
+       NOP\r
+       NOP\r
+       STA Z,STCH\r
+       LDA Z,R5\r
+       ORA I,20                ;2 OR 4 WHEEL DRIFT\r
+       STA A,OUT1\r
+       RTS\r
+\r
+STRPL: JSR MULT\r
+       JSR STCLMT              ;STC TOO BIG? ADJUST IF SO\r
+CMPCRV:        LDY I,CRVL              ;ADDRESS OF PRODUCT\r
+       LDA Z,CS                ;GET MULTIPLIER\r
+       BPL CRSOK               ;POSITIVE RESULT\r
+       AND I,177\r
+       JSR MULT\r
+       JSR NEG                         ;NEGATIVE RESULT\r
+       JMP STRPL0\r
+CRSOK: JSR MULT                ;COMPUTE CRV\r
+STRPL0:        LDY I,VELKL\r
+       LDA I,140               ;SET ACC=KP (VELK)\r
+       JSR MULT                ;COMPUTE VEL*KP\r
+\r
+\r
+;BEGIN PYLON MOTION COMPUTATION\r
+\r
+MO:    LDX I,37                ;OBJECT INDEX\r
+MOVOBJ:        LDA ZX,ZCNTRL-1         ;GET CONTROL BYTE. OBJECT ACTIVE?\r
+       BMI OBJACT              ;YES.\r
+       JMP INAOBJ              ;NO. SKIP PROCESS OF OBJECT PAIR\r
+OBJACT:        STX Z,XSVE\r
+       LDA ZX,ZYAX             ;GET PY\r
+       SEC\r
+       SBC I,PYMIN-2.          ;NORMALIZE\r
+       STA Z,PYA\r
+       LDX I,VELKL             ;ADDRESS OF MULTIPLICAND\r
+       LDY I,PYAVKL            ;ADDRESS OF PRODUCT\r
+       JSR MULT                ;COMPUTE PYAVK\r
+       LDX I,VELL\r
+       LDY I,PYAVL\r
+       LDA Z,PYA\r
+       JSR MULT                ;COMPUTE PYAV\r
+       LDX Z,XSVE\r
+       LDA ZX,ZXAX-1           ;UPDATE X AXIS POSITION ODD SIDE\r
+       SEC\r
+       SBC Z,PYAVKL\r
+       STA ZX,ZXAX-1\r
+       LDA ZX,ZXAX\r
+       SBC Z,PYAVKH\r
+       STA ZX,ZXAX\r
+       LDA ZX,ZCNTRL-1\r
+       BIT Z,PYAVKH            ;PYAVKH + OR -?\r
+       BPL OLS1                ;PLUS\r
+       SBC I,3                 ;MINUS. SUBTRACT 3+ CARRY FROM ZCNTRL\r
+       JMP OLS3\r
+OLS1:  SBC I,0                 ;ELSE SUBTRACT CARRY FROM XCNTRL\r
+OLS3:  AND I,3                 ;MASK RESULT\r
+       STA Z,R2                ;SAVE IT\r
+       LDA ZX,ZCNTRL-1\r
+       AND I,374               ;MASK OLD VALUE\r
+       ORA Z,R2                ;ADD IN RESULT\r
+       STA ZX,ZCNTRL-1         ;UPDATE THE MSB'S OF X POSITION\r
+       CLC\r
+       LDA Z,STCL              ;ADD IN STEERING CONSTANTS ODD SIDE\r
+       ADC ZX,ZXAX-1\r
+       STA ZX,ZXAX-1\r
+       LDA Z,STCH\r
+       ADC ZX,ZXAX\r
+       STA ZX,ZXAX\r
+       LDA ZX,ZCNTRL-1         ;CARRY OVER 2 BITS INTO ZCNTRL-1\r
+       BIT Z,STCH\r
+       BPL OLS2\r
+       ADC I,3\r
+       JMP OLS4\r
+OLS2:  ADC I,0\r
+OLS4:  AND I,3\r
+       STA Z,R2\r
+       LDA ZX,ZCNTRL-1\r
+       AND I,374\r
+       ORA Z,R2\r
+       STA ZX,ZCNTRL-1\r
+       LDA ZX,ZXAX             ;CHECK LIMITS\r
+XLOK:  CMP I,CRLFT             ;LEFT CRASH?\r
+       BCC CRLOK               ;NO\r
+       LDA I,3\r
+       AND ZX,ZCNTRL-1         ;ON SCREEN?\r
+       BNE CRLOK               ;NO\r
+       LDA I,100               ;YES. SET POSSIBLE CRASH\r
+       ORA ZX,ZCNTRL-1\r
+       STA ZX,ZCNTRL-1\r
+CRLOK: LDA ZX,ZXAX-3           ;GET X POSITION EVEN SIDE\r
+       CLC\r
+       ADC Z,PYAVKL            ;UPDATE X POSITION EVEN SIDE\r
+       STA ZX,ZXAX-3\r
+       LDA ZX,ZXAX-2\r
+       ADC Z,PYAVKH\r
+       STA ZX,ZXAX-2\r
+       LDA ZX,ZCNTRL-3\r
+       BIT Z,PYAVKH\r
+       BPL ORS1\r
+       ADC I,3\r
+       JMP ORS3\r
+ORS1:  ADC I,0\r
+ORS3:  AND I,3\r
+       STA Z,R2\r
+       LDA ZX,ZCNTRL-3\r
+       AND I,374\r
+       ORA Z,R2\r
+       STA ZX,ZCNTRL-3\r
+       LDA Z,STCL              ;ADD IN STEERING CONSTANTS\r
+       ADC ZX,ZXAX-3\r
+       STA ZX,ZXAX-3\r
+       LDA Z,STCH\r
+       ADC ZX,ZXAX-2\r
+       STA ZX,ZXAX-2\r
+       LDA ZX,ZCNTRL-3\r
+       BIT Z,STCH\r
+       BPL ORS2\r
+       ADC I,3\r
+       JMP ORS4\r
+ORS2:  ADC I,0\r
+ORS4:  AND I,3\r
+       STA Z,R2\r
+       LDA ZX,ZCNTRL-3\r
+       AND I,374\r
+       ORA Z,R2\r
+       STA ZX,ZCNTRL-3\r
+       LDA ZX,ZXAX-2\r
+XROK:  CMP I,CRRHT             ;RIGHT CRASH?\r
+       BCS CRROK               ;NO\r
+       LDA I,3\r
+       AND ZX,ZCNTRL-3         ;ON SCREEN?\r
+       BNE CRROK               ;NO\r
+       LDA I,100\r
+       ORA ZX,ZCNTRL-3\r
+       STA ZX,ZCNTRL-3         ;SET POSSIBLE CRASH\r
+CRROK: LDA ZX,ZYAX-1           ;UPDATE Y POSITION\r
+       CLC\r
+       ADC Z,PYAVL\r
+       STA ZX,ZYAX-1\r
+       STA ZX,ZYAX-3\r
+       LDA ZX,ZYAX\r
+       ADC Z,PYAVH\r
+       BCS OCR\r
+       STA ZX,ZYAX\r
+       STA ZX,ZYAX-2\r
+       CMP I,BOTTOM            ;AT BOTTOM OF SCREEN?\r
+       BCC YPOK                ;NO\r
+OCR:   LDA ZX,ZCNTRL-1         ;YES. OBJECT AT CRASH LIMIT?\r
+       ORA ZX,ZCNTRL-3\r
+       ASL\r
+       BPL DEACT               ;NO. DE-ACTIVATE OBJECT\r
+       BIT Z,SYNC              ;ATTRACT MODE?\r
+       BMI DEACT               ;YES. IGNORE CRASH\r
+       LDA I,0                 ;CRASH INTO PYLON\r
+       STA Z,VELL\r
+       STA Z,VELH\r
+       LDA I,0\r
+       STA A,OUT2              ;TURN OFF CRASH SOUND\r
+       LDA I,1\r
+       STA A,OUT2              ;TURN ON CRASH SOUND\r
+DEACT: LDA I,17                ;MAKE OBJECT INVISIBLE\r
+       STA ZX,ZCNTRL\r
+       STA ZX,ZCNTRL-2\r
+       LDA I,0                 ;CLEAR OBJECT CONTROL\r
+       STA ZX,ZCNTRL-1\r
+       STA ZX,ZCNTRL-3\r
+       JMP INAOBJ              ;CONTINUE\r
+YPOK:  LDA Z,PYA\r
+       CLC\r
+       ADC I,110\r
+       LSR\r
+       STA Z,PYA\r
+       AND I,160\r
+       STA ZX,ZCNTRL           ;BUILD OBJECT PICTURE (HORIZ SIZE)\r
+       LDA Z,PYA\r
+       LSR\r
+       LSR\r
+       LSR\r
+       EOR I,17\r
+       ORA ZX,ZCNTRL           ;VERTICAL SIZE\r
+       STA ZX,ZCNTRL\r
+       STA ZX,ZCNTRL-2         ;DO BOTH OBJECTS OF PAIR\r
+       LDA ZX,ZCNTRL-1\r
+       AND I,277               ;DROP CRASH BIT\r
+       STA ZX,ZCNTRL-1\r
+       AND I,3                 ;ON SCREEN?\r
+       BEQ LOBOK               ;YES\r
+       LDA I,17                ;NO\r
+       STA ZX,ZCNTRL           ;SET OBJECT INVISIBLE\r
+LOBOK: LDA ZX,ZCNTRL-3\r
+       AND I,277               ;DROP CRASH BIT\r
+       STA ZX,ZCNTRL-3\r
+       AND I,3                 ;ON SCREEN?\r
+       BEQ INAOBJ              ;YES\r
+       LDA I,17                ;NO\r
+       STA ZX,ZCNTRL-2         ;SET OBJECT INVISIBLE\r
+INAOBJ:        LDA Z,STEER\r
+       BIT Z,SYNC              ;ATTRACT MODE?\r
+       BMI DEXOBJ              ;YES. IGNORE STEERING\r
+       BIT A,STRNG             ;ANY CHANGE IN STEERING?\r
+       BPL DEXOBJ              ;NO\r
+       BVS SR                  ;TURN RIGHT\r
+       SEC\r
+       SBC I,3                 ;OVERFLOW?\r
+       BVS SRST                ;YES\r
+       BVC SST\r
+SR:    CLC\r
+       ADC I,3\r
+       BVS SRST\r
+SST:   STA Z,STEER\r
+SRST:  LDA A,STRST             ;RESET STEERING\r
+DEXOBJ:        DEX                     ;DONE ALL 8 OBJECT PAIRS?\r
+       DEX\r
+       DEX\r
+       DEX\r
+       BMI OBJDNE              ;YES\r
+       STA A,WTCHDG\r
+       TXA                     ;SAVE X\r
+       PHA\r
+       JSR COIN                ;GAME START?\r
+       PLA\r
+       TAX\r
+       JMP MOVOBJ              ;NO\r
+OBJDNE:        CLC\r
+       LDA Z,STCL\r
+       ADC Z,CRVL              ;MOVE ORIGIN BY COMPUTING\r
+       STA Z,PRODL             ;STC+CRV\r
+       LDA Z,STCH\r
+       ADC Z,CRVH\r
+       STA Z,PRODH\r
+       CLC\r
+       LDA Z,ORL               ;ADD TO OLD ORIGIN POSITION\r
+       ADC Z,PRODL\r
+       STA Z,ORL\r
+       LDA Z,ORH\r
+       ADC Z,PRODH\r
+       STA Z,ORH\r
+       LDA Z,ORVH\r
+       BIT Z,PRODH\r
+       BPL ORVV0\r
+       ADC I,3\r
+       JMP ORVV1\r
+ORVV0: ADC I,0\r
+ORVV1: AND I,3\r
+       STA Z,ORVH\r
+STPOM: LDA Z,VELH\r
+       LSR\r
+       STA Z,PRODH\r
+       LDA Z,VELL              ;DIVIDE VELOCITY BY 8\r
+       ROR\r
+       STA Z,PRODL\r
+       LSR Z,PRODH\r
+       ROR Z,PRODL\r
+       LSR Z,PRODH\r
+       ROR Z,PRODL\r
+       LDA Z,PRODL\r
+       CLC\r
+       ADC Z,TURNL             ;ADD TO TURN TIME\r
+       STA Z,TURNL\r
+       LDA Z,TURNH\r
+       ADC Z,PRODH\r
+       STA Z,TURNH\r
+       CMP Z,DIST              ;TURN OVER?\r
+       BCC CNTRN               ;CONTINUE TURN\r
+       LDA I,0\r
+       STA Z,TURNL\r
+       STA Z,TURNH\r
+       LDX I,0\r
+       LDY I,2\r
+       LDA I,20\r
+       BIT A,EPSW              ;WHICH TRACK?\r
+       BNE NORMT               ;NORMAL\r
+       LDY I,376               ;SET TO -2\r
+       LDX Z,TRMAX\r
+       DEX\r
+       DEX\r
+NORMT: TYA\r
+       NOP\r
+       NOP\r
+       NOP\r
+       CLC\r
+       ADC Z,TRNDX\r
+       CMP Z,TRMAX             ;ALL OF TRACK PROCESSED?\r
+       BCC GTCS                ;NO\r
+       BIT Z,SYNC              ;ATTRACT MODE\r
+       BPL RTX                 ;NO\r
+       LDA I,174\r
+       STA Z,ORH               ;CENTER ROAD\r
+RTX:   TXA                     ;YES\r
+       NOP\r
+       NOP\r
+       NOP\r
+GTCS:  TAY\r
+       STA Z,TRNDX\r
+       LDA NY,TRKADL           ;GET CS\r
+       STA Z,CS\r
+       INY\r
+       LDA NY,TRKADL           ;GET DIST\r
+       STA Z,DIST\r
+CNTRN: LDA Z,PRODL             ;TRACK DISTANCE COVERED\r
+       CLC                     ;  DETERMINES WHEN NEW OBJECT MUST\r
+       ADC Z,OBJTML            ;  BE PLACED AT ORIGIN\r
+       STA Z,OBJTML\r
+       LDA Z,PRODH\r
+       ADC Z,OBJTMH\r
+       STA Z,OBJTMH\r
+       CMP I,NOT               ;NEW OBJECT TIME?\r
+       BMI FI0                 ;NO\r
+       LDX I,37                ;YES\r
+IAOLP: LDA ZX,ZCNTRL-1         ;OBJECT ACTIVE?\r
+       BPL FIOBJ               ;NO\r
+       DEX\r
+       DEX\r
+       DEX\r
+       DEX\r
+       BPL IAOLP\r
+FI0:   JMP ELTME               ;ALL OBJECTS ACTIVE\r
+FIOBJ: LDA I,200               ;ACTIVATE OBJECTS\r
+       ORA Z,ORVH\r
+       STA ZX,ZCNTRL-1\r
+       STA ZX,ZCNTRL-3\r
+       LDY I,MINPIC\r
+       AND I,3\r
+       BEQ PICOK\r
+       LDY I,17\r
+PICOK: TYA\r
+       STA ZX,ZCNTRL\r
+       STA ZX,ZCNTRL-2\r
+       LDA Z,ORH\r
+       STA ZX,ZXAX\r
+       CLC\r
+       ADC I,PRSPC             ;SEPARATE ORIGIN PYLONS BY 'PRSPC'\r
+       STA ZX,ZXAX-2\r
+       LDA ZX,ZCNTRL-3\r
+       ADC I,0\r
+       AND I,3\r
+       STA Z,R2\r
+       LDA ZX,ZCNTRL-3\r
+       AND I,374\r
+       ORA Z,R2\r
+       STA ZX,ZCNTRL-3\r
+       LDA Z,ORL\r
+       STA ZX,ZXAX-1\r
+       STA ZX,ZXAX-3\r
+       LDA I,PYMIN\r
+       STA ZX,ZYAX-2           ;INITIALIZE YAXIS ORIGIN\r
+       STA ZX,ZYAX\r
+       LDA I,0\r
+       STA ZX,ZYAX-1\r
+       STA ZX,ZYAX-3\r
+       STA Z,OBJTMH            ;CLEAR NEW OBJECT TIME COUNTER\r
+       STA Z,OBJTML\r
+       LDA I,0\r
+       STA Z,R1\r
+       LDX I,37\r
+       LDA I,3\r
+       STA Z,R0\r
+OFFSCN:        LDA ZX,ZCNTRL-1         ;TEST. COUNT OBJECTS DISPLAYED ON SCREEN.\r
+\r
+       BPL OS0                 ;INACTIVE OBJECT.\r
+       BIT Z,R0                ;ACTIVE, ON SCREEN?\r
+       BNE OS0                 ;NO\r
+       INC Z,R1                ;YES, COUNT IT\r
+OS0:   DEX                     ;TEST ALL 16 OBJECTS.\r
+       DEX\r
+       BPL OFFSCN\r
+       LDA Z,R1\r
+       NOP\r
+       NOP\r
+       BNE ELTME\r
+       JSR INTZRO\r
+       LDA I,0\r
+       STA Z,STEER\r
+       STA Z,VELH\r
+       STA Z,VELL\r
+       STA Z,R7\r
+       LDA I,17\r
+       STA A,OUT1              ;DROP MOTOR TO LOW RPM\r
+       LDA Z,SYNC\r
+       AND I,277               ;DROP PROCESS SYNC BIT\r
+       STA Z,SYNC\r
+       JSR BLKSC               ;ERASE SCREEN\r
+       LDX I,OFFRD-MESS0-1\r
+       JSR MESLP               ;WRITE OFF ROAD MESSAGE\r
+DMLP0: JSR SYNWT\r
+       STA A,WTCHDG\r
+       INC Z,FRMCL\r
+       BNE DMLP1\r
+       INC Z,FRMCH\r
+DMLP1: JSR DECTME              ;KEEP GAME TIMER GOING\r
+       INC Z,R7\r
+       LDA Z,R7\r
+       CMP I,180.              ;3 SECONDS PASSED?\r
+       BCC DMLP0               ;NO\r
+       JSR BLKSC               ;ERASE OFF ROAD MESSAGE\r
+       JSR PUTMSG              ;RE-WRITE SCORE LABELS\r
+       LDX I,MT-MESS0-1\r
+       JSR MESLP               ;WRITE TIME\r
+       LDA Z,SYNC\r
+       ORA I,100               ;ENABLE SYNC PROCESSING\r
+       STA Z,SYNC\r
+ELTME: JSR COIN                ;GAME START?\r
+ELT0:  INC Z,FRMCL             ;NO\r
+       BNE NELT\r
+       INC Z,FRMCH\r
+       BPL NELT\r
+       LDA I,377\r
+       BIT Z,COINC             ;ANY CREDIT?\r
+       BNE NELT\r
+       BIT Z,COINT             ;COUNTING COIN?\r
+       BNE NELT\r
+       SEI\r
+       LDX I,377\r
+       TXS\r
+       CLD\r
+       JSR CLRZRO              ;RESET\r
+       JMP TESTS\r
+NELT:  BIT Z,SYNC              ;ATTRACT MODE?\r
+       BPL FC                  ;NO\r
+       JSR GETTRK\r
+       JMP MAIN\r
+\r
+DECTME:        LDA Z,FRMCL\r
+       CMP Z,FRMTME            ;CLOCK TICK?\r
+       BCC FE                  ;NOPE\r
+       LDA I,0\r
+       STA Z,FRMCL             ;YEP\r
+       SED                     ;YES\r
+       SEC\r
+       LDA Z,GTML\r
+       SBC I,20                ;DECREMENT TIME\r
+       STA Z,GTML\r
+       LDA Z,GTMH\r
+       SBC I,0\r
+       STA Z,GTMH\r
+       CLD\r
+       CMP I,231               ;99 BCD?\r
+       BNE FE\r
+       LDA I,40\r
+       AND A,EPSW              ;EXTENDED PLAY ALLOWED?\r
+       BNE FD                  ;NO\r
+       LDA I,20\r
+       BIT Z,SYNC              ;EXTENDED PLAY ALREADY?\r
+       BNE FD                  ;YES\r
+       LSR                     ;NO\r
+       BIT Z,SYNC              ;EXTENDED PLAY SCORE REACHED?\r
+       BEQ FD                  ;NO\r
+       ASL\r
+       ORA Z,SYNC              ;SET EXTENDED PLAY\r
+       STA Z,SYNC\r
+       JSR GTM                 ;RESET GAME TIMER\r
+       LDA Z,OLDTK             ;ROLL TRACK TO NEXT MOST COMPLEX TRACK\r
+       LSR\r
+       LSR\r
+       TAY\r
+       LDA AY,ROLL\r
+       TAY\r
+       JSR GTCS3               ;ROLL TRACK\r
+FE:    RTS\r
+\r
+\r
+ROLL:  .BYTE 1,1,0\r
+FD:    LDA I,0\r
+       STA Z,GTML              ;ZERO GAME TIMER\r
+       STA Z,GTMH\r
+       LDX I,377\r
+       TXS                     ;RESTORE STACK\r
+       JSR BLKSC               ;CLEAR SCREEN\r
+       JSR PUTMSG              ;WRITE LABELS\r
+       JMP ATTRCT\r
+\r
+\r
+FC:    JSR DECTME              ;DO GAME TIME\r
+       LDA Z,VELL\r
+       CLC\r
+       ADC Z,TDISTL            ;ACCUMULATE TOTAL DISTANCE\r
+       STA Z,TDISTL\r
+       LDA Z,VELH\r
+       ADC Z,TDISTM\r
+       STA Z,TDISTM\r
+       LDA I,0\r
+       ADC Z,TDISTH\r
+       STA Z,TDISTH\r
+       LDA I,0\r
+       ADC Z,TDSTVH\r
+       STA Z,TDSTVH\r
+       JSR CVDL                ;CONVERT MILEAGE TO DECIMAL\r
+       LDA I,VELL\r
+       LDY I,R5\r
+       JSR CVD                 ;CONVERT VELOCITY TO DECIMAL\r
+       LDA Z,R6\r
+       CMP Z,TPSPDH            ;TOP SPEED REACHED?\r
+       BMI SLOW0               ;NO\r
+       BEQ SLOW1               ;MAYBE\r
+       STA Z,TPSPDH            ;YES. UPDATE TOP SPEED\r
+       LDA Z,R5\r
+       STA Z,TPSPDL\r
+SLOW0: JMP MAIN                ;CONTINUE GAME\r
+SLOW1: LDA Z,R5                ;TOP SPEED REACHED?\r
+       CMP Z,TPSPDL\r
+       BMI SLOW0               ;NO\r
+       STA Z,TPSPDL            ;YES. UPDATE TOP SPEED\r
+       JMP MAIN\r
+\r
+GETTRK:        LDY I,1                 ;TRACK SELECT ROUTINE\r
+GTCS2: LDA AY,TRKSW            ;REACH SWITCH PORT. ON?\r
+       BPL GTCS1               ;YES.\r
+       DEY                     ;NO.\r
+       BPL GTCS2               ;ALL SWITCHES TESTED?\r
+GTCS1: INY                     ;ADJUST DECODED SWITCH\r
+       TYA                     ;A NOW HAS A NUMBER 0,1, OR 2\r
+       ASL                     ;0=PRO          ;SWITCH CENTER\r
+       ASL                     ;1=EXPERT       ;SWITCH DOWN\r
+       TAX                     ;2=NOVICE       ;SWITCH UP\r
+       LDA ZX,TOPZ             ;FETCH TOP SCORES FROM TABLE\r
+       STA Z,PRTSDL\r
+       LDA ZX,TOPZ+1\r
+       STA Z,PRTSDH\r
+       LDA ZX,TOPZ+2\r
+       STA Z,HML\r
+       LDA ZX,TOPZ+3\r
+       STA Z,HMH\r
+       CPX Z,OLDTK             ;IS CURRENT TRACK SAME AS OLD TRACK?\r
+       BEQ GTCS4               ;YES\r
+       JSR HISCR               ;NO. WRITE TOP SCORES INTO SCORE TABLE\r
+       TYA                     ;UPDATE OLD TRACK INDICATOR\r
+       ASL\r
+       ASL\r
+       STA Z,OLDTK\r
+GTCS4: BIT Z,SYNC              ;ATTRACT MODE?\r
+       BPL GTCS3               ;NO\r
+       RTS                     ;YES. USING ATTRACT MODE TRACK\r
+GTCS3: LDA AY,TKMXT            ;GET NUMBER OF ENTRIES FOR TRACK\r
+       STA Z,TRMAX\r
+       STA Z,TRNDX\r
+       TYA\r
+       ASL\r
+       TAY\r
+       LDA AY,TKADT            ;GET TRACK TABLE ADDRESS\r
+       STA Z,TRKADL\r
+       LDA AY,TKADT+1\r
+       STA Z,TRKADH\r
+       RTS\r
+\r
+CVD:   PHA                     ;SAVE SOURCE ADDRESS\r
+       TAX\r
+       LDA ZX,0                ;GET LSB OF SOURCE\r
+       ROL\r
+       ROL\r
+       ROL\r
+       ROL\r
+       AND I,7\r
+       TAX\r
+       LDA AX,MPHL             ;PSUEDO CVD. LSB=1 OF 8 0,1,3-6,8,9\r
+       STA AY,0                ;SAVE CONVERTED LSB OF BCD ANSWER\r
+       PLA                     ;GET ADDRESS\r
+       TAX\r
+       LDA ZX,1                ;GET MSB OF SOURCE\r
+       CMP I,64.               ;TEST FOR MORE THAN 64.\r
+       BMI MPHOK\r
+       LDA I,63.\r
+MPHOK: STA Z,R2\r
+       LDA I,0\r
+       STA Z,R0                ;CLEAR RESULT\r
+       SED                     ;SET DECIMAL MODE\r
+       LDA I,1\r
+       STA Z,R3                ;INITIALIZE BCD CONVERTER\r
+BCDLP: LSR Z,R2                ;BIT SET?\r
+       BCC NOADD               ;NO\r
+       LDA Z,R3                ;YES. ADD BCD CONVERTER TO RESULT\r
+       CLC\r
+       ADC Z,R0\r
+       STA Z,R0\r
+NOADD: LDA Z,R2                ;ANY BITS LEFT?\r
+       BEQ BCDEND              ;NO\r
+       LDA Z,R3                ;YES, DOUBLE BCD CONVERTER WITH DECIMAL ADD\r
+       CLC\r
+       ADC Z,R3\r
+       STA Z,R3\r
+       BNE BCDLP               ;CONTINUE\r
+BCDEND:        CLD                     ;RESET DECIMAL MODE\r
+       LDA Z,R0\r
+       STA AY,1                ;STORE MSB BCD DATA\r
+       RTS                     ;EXIT\r
+\r
+CHK2K: .BYTE 237,141\r
+\r
+\r
+UNPK:  LDA ZX,0                ;GET LOW BYTE\r
+       ORA I,60                ;FORCE DISPLAYABLE ASCII DIGIT\r
+       STA AY,PLYFLD+2         ;WRITE IT ON THE PLAYFIELD\r
+       LDA ZX,1                ;GET MSD\r
+       AND I,17                ;LOW 4 BITS\r
+       ORA I,60                ;MAKE DISPLAYABLE ASCII\r
+       STA AY,PLYFLD+1         ;WRITE IT ON THE SCREEN\r
+       LDA ZX,1                ;GET MSD\r
+       LSR                     ;UPPER 4 BITS\r
+       LSR\r
+       LSR\r
+       LSR\r
+       ORA I,60                ;MAKE DISPLAYABLE\r
+       STA AY,PLYFLD           ;WRITE ON SCREEN\r
+       RTS                     ;EXIT\r
+\r
+UNPKL: LDA I,1                 ;LONG UNPACK. Y=ADDRESS OF LSD TO APPEAR ON PLAYFIELD\r
+       STA Z,R3                ;R3=NUMBER OF BYTES TO UNPACK, X=ADDRESS OF BCD\r
+       BNE UPKL1               ;START WITH UPPER 4 BITS OF LSD\r
+UPKL0: LDA ZX,0                ;GET BYTE\r
+       AND I,17                ;LOW 4 BITS\r
+       ORA I,60\r
+       STA AY,PLYFLD           ;WRITE IT TO PLAYFIELD\r
+       DEY                     ;CONTINUE NEXT PLAYFIELD ADDRESS\r
+UPKL1: LDA ZX,0                ;GET BYTE\r
+       LSR                     ;UPPER 4 BITS\r
+       LSR\r
+       LSR\r
+       LSR\r
+       ORA I,60\r
+       STA AY,PLYFLD           ;WRITE IT TO PLAYFIELD\r
+       INX                     ;BUMP BINARY ADDRESS\r
+       DEY                     ;PLAYFIELD ADDRESS ADJUST\r
+       DEC Z,R3                ;ALL BYTES UNPACKED?\r
+       BPL UPKL0               ;NO\r
+       RTS                     ;YES. EXIT\r
+\r
+HISCR: LDX Z,OLDTK             ;GET OLD TRACK INDEX\r
+       LDA Z,MILEM\r
+       CMP ZX,TOPZ+3           ;SCORE > OLD SCORE?\r
+       BCC NOHI                ;NO\r
+       BEQ HIGH                ;MAYBE\r
+       STA ZX,TOPZ+3           ;YES\r
+       STA Z,HMH\r
+       LDA Z,MILEL\r
+NOHIL: STA ZX,TOPZ+2\r
+       STA Z,HML\r
+NOHI:  LDA Z,TPSPDH            ;PREVIOUS TOP SPEED\r
+       CMP ZX,TOPZ+1           ;REACHED?\r
+       BCC ENDSC               ;NO\r
+       BEQ PTSLW               ;MAYBE\r
+       STA ZX,TOPZ+1           ;YES\r
+       STA Z,PRTSDH\r
+       LDA Z,TPSPDL\r
+ESC:   STA ZX,TOPZ\r
+       STA Z,PRTSDL\r
+ENDSC: NOP\r
+       LDA I,0                 ;CLEAR PLAYER'S SCORES WITH\r
+       STA Z,MILEM             ;CHANGING OF TRACK SELECT SWITCH\r
+       STA Z,MILEL\r
+       STA Z,TPSPDH\r
+       STA Z,TPSPDL\r
+       RTS                     ;EXIT\r
+PTSLW: LDA Z,TPSPDL\r
+       CMP ZX,TOPZ             ;PREVIOUS TOP SPEED REACHED?\r
+       BCS ESC                 ;NO\r
+       BCC ENDSC\r
+HIGH:  LDA Z,MILEL             ;NEW SCORE > OLD SCORE?\r
+       CMP ZX,TOPZ+2\r
+       BCC NOHI                ;NO\r
+       BCS NOHIL\r
+\r
+CVDL:  LDA Z,TDISTM            ;LONG CONVERT TO DECIMAL ROUTINE\r
+       ASL                     ;CONVERTS THE TOTAL DISTANCE TRAVELED\r
+       STA Z,R2                ;TO BCD FOR SCORE DISPLAY\r
+       LDA Z,TDISTH\r
+       ROL\r
+       STA Z,R0\r
+       LDA Z,TDSTVH\r
+       ROL\r
+       STA Z,R1                ;MULTIPLY TOTAL DISTANCE BY 8.\r
+       ASL Z,R2\r
+       ROL Z,R0\r
+       ROL Z,R1\r
+       ASL Z,R2\r
+       ROL Z,R0\r
+       ROL Z,R1\r
+       LDA Z,EPSCR             ;GET TRACK SCORE WEIGHT MULTIPLIER\r
+       LDY I,PRODL             ;ADDRESS OF ANSWER\r
+       LDX I,R0                ;ADDRESS OF MULTIPLICAND\r
+       ASL                     ;MULTIPLY BY 2?\r
+       STA Z,MLTPLR            ;SAVE MULTIPLIER\r
+       BCC CVDL1               ;NO\r
+       LDA Z,R0                ;YES. COMPUTE PRODUCT=2*MULTIPLICAND\r
+       ASL\r
+       STA Z,PRODL\r
+       LDA Z,R1\r
+       ROL\r
+       STA Z,PRODH\r
+       JSR MULTS               ;DO SPECIAL MULTIPLY. FINISH COMPUTING\r
+       BEQ CVDL0\r
+CVDL1: JSR MULT                ;COMPUTE WEIGHTED SCORE\r
+CVDL0: SED                     ;SET DECIMAL MODE\r
+       LDA I,1                 ;SET BCD CONVERTER=1\r
+       STA Z,R3                ;DOUBLE BYTE CONVERTER\r
+       LDA I,0\r
+       STA Z,R4\r
+       STA Z,MILEL             ;CLEAR SUM\r
+       STA Z,MILEM\r
+CVDLP0:        LSR Z,PRODH\r
+       ROR Z,PRODL             ;BINARY BIT SET?\r
+       BCC CVDLP1              ;NO. DON'T ADD\r
+       LDA Z,R3                ;YES.\r
+       CLC                     ;ADD BCD CONVERTER TO SUM\r
+       ADC Z,MILEL\r
+       STA Z,MILEL\r
+       LDA Z,R4\r
+       ADC Z,MILEM\r
+       STA Z,MILEM\r
+CVDLP1:        CLC                     ;DOUBLE BCD CONVERTER USING DECIMAL ADD\r
+       LDA Z,R3\r
+       ADC Z,R3\r
+       STA Z,R3\r
+       LDA Z,R4                ;DOUBLE BYTE ADD\r
+       ADC Z,R4\r
+       STA Z,R4\r
+       LDA I,377\r
+       BIT Z,PRODH             ;ANY BITS LEFT IN BINARY HIGH BYTE\r
+       BNE CVDLP0              ;YES\r
+       BIT Z,PRODL             ;LOW BYTE?\r
+       BNE CVDLP0              ;YES\r
+       CLD                     ;NO. RETURN\r
+       LDA Z,MILEM\r
+       CMP I,65                ;EXTENDED PLAY SCORE? (350)\r
+       BCC CVDLE               ;NO\r
+       LDA I,10                ;YES\r
+       ORA Z,SYNC              ;SET EXTEND PLAY\r
+       STA Z,SYNC\r
+CVDLE: RTS\r
+\r
+\r
+\r
+;MULTIPLICATION ROUTINE\r
+;\r
+;ACCUM = MULTIPLIER\r
+;Y = ADDRESS OF PRODUCT (LOW BYTE)\r
+;X = ADD RESS OF MULTIPLICAND (LOW BYTE)\r
+\r
+MULT:  STA Z,MLTPLR            ;SAVE MULTIPLIER\r
+       LDA I,0\r
+       STA AY,0                ;CLEAR PRODUCT\r
+       STA AY,1\r
+MULTS: LDA ZX,0                ;GET MULTIPLICAND\r
+       STA Z,MLTCDL\r
+       LDA ZX,1\r
+       STA Z,MLTCDH\r
+MT1:   ASL Z,MLTPLR            ;LOOP UNTIL MLTPLR=0\r
+       BCS MT0\r
+       BNE MT2                 ;AND CARRY CLEAR\r
+       RTS\r
+MT0:   CLC\r
+       LDA AY,0                ;ACCUMULATE PRODUCT\r
+       ADC Z,MLTCDL\r
+       STA AY,0\r
+       LDA AY,1\r
+       ADC Z,MLTCDH\r
+       STA AY,1\r
+       CLC\r
+MT2:   LDA Z,MLTCDH\r
+       BPL MT3\r
+       SEC\r
+MT3:   ROR Z,MLTCDH            ;HALVE MULTIPLICAND\r
+       ROR Z,MLTCDL\r
+       JMP MT1\r
+\r
+NEG:   LDA AY,0                ;NEGATE DOUBLE BYTE AT ADDRESS\r
+       EOR I,377               ;SPECIFIED IN Y REGISTER\r
+       CLC\r
+       ADC I,1\r
+       STA AY,0\r
+       LDA AY,1\r
+       EOR I,377\r
+       ADC I,0\r
+       STA AY,1\r
+       RTS\r
+\r
+CLRZRO:        LDX I,ZHI-ZLOW+1        ;BYTE COUNT\r
+CLRZVH:        LDA I,0\r
+CLRZ:  STA ZX,ZLOW-1           ;CLEAR PAGE ZERO\r
+       LDA ZX,ZLOW-1           ;DID IT CLEAR?\r
+       BEQ CLZ0                ;YES\r
+       JMP ZPERR               ;NO. PRINT ERROR MESSAGE\r
+CLZ0:  DEX\r
+       BNE CLRZ\r
+       RTS\r
+\r
+INTZRO:        LDX I,95.               ;INITIALIZE PYLON TABLES\r
+       LDA I,0\r
+IT0:   STA ZX,ZCNTRL           ;BY FIRST CLEARING ALL BYTES,\r
+       DEX\r
+       BNE IT0\r
+       LDY I,6\r
+       LDX I,0\r
+ZCZLP0:        LDA AY,IPIX             ;THEN MOVING IN INITIAL PICTURE INFO AND\r
+       STA ZX,ZCNTRL+1\r
+       STA ZX,ZCNTRL+3\r
+       LDA I,200               ;ACTIVATING OBJECTS\r
+       STA ZX,ZCNTRL\r
+       STA ZX,ZCNTRL+2\r
+       INX\r
+       INX\r
+       INX\r
+       INX\r
+       DEY\r
+       BPL ZCZLP0\r
+       LDA I,17                ;THEN BY MOVING IN BLANK PICTURE DATA\r
+       STA ZX,ZCNTRL+1         ;FOR INACTIVE OBJECTS\r
+       STA ZX,ZCNTRL+3\r
+       TXA\r
+       CLC\r
+       ADC I,5                 ;UPDATE INDEX\r
+       TAX\r
+       LDY I,13.\r
+ZCZLP1:        LDA AY,IXD              ;PUT IN INITIAL X AXIS POSITION\r
+       STA ZX,ZCNTRL\r
+       INX\r
+       INX\r
+       DEY\r
+       BPL ZCZLP1\r
+       INX\r
+       INX\r
+       INX\r
+       INX\r
+       LDY I,6\r
+ZCZLP2:        LDA AY,IYD              ;THEN PUT IN INITIAL Y AXIS POSITION\r
+       STA ZX,ZCNTRL\r
+       STA ZX,ZCNTRL+2\r
+       INX\r
+       INX\r
+       INX\r
+       INX\r
+       DEY\r
+       BPL ZCZLP2\r
+       LDA I,0\r
+       STA Z,ORL               ;CENTER ORIGIN\r
+       STA Z,ORVH\r
+       LDA I,174\r
+       STA Z,ORH\r
+       LDA I,177\r
+       STA Z,DIST              ;INITIALIZE DISTANCE\r
+       RTS                     ;EXIT\r
+\r
+SYNWT: CLI\r
+       LDA I,1\r
+       BIT Z,SYNC              ;INTERRUPT YET?\r
+       BNE SY0                 ;YEP\r
+       JSR LFC                 ;ANY COIN?\r
+       BCC SYNWT               ;NO?\r
+       SEI                     ;YES\r
+       TXA                     ;SAVE X AND Y\r
+       PHA\r
+       TYA\r
+       PHA\r
+       JSR COIN                ;PROCESS COIN\r
+       LDA I,376               ;RESET SYNC FOUND\r
+       AND Z,SYNC\r
+       STA Z,SYNC\r
+       PLA\r
+       TAY\r
+       PLA\r
+       TAX\r
+       JMP SYNWT\r
+SY0:   EOR Z,SYNC\r
+       STA Z,SYNC\r
+       SEI\r
+       RTS\r
+\r
+VSYNC: PHA                     ;SAVE REGS\r
+       TXA\r
+       PHA\r
+       TSX\r
+       LDA AX,403\r
+       AND I,20                ;BREAKPOINT?\r
+       BEQ VS0                 ;NO\r
+       PLA                     ;YES\r
+       TAX\r
+       PLA\r
+       JMP 70122               ;JUMP TO DEMON\r
+VS0:   TYA\r
+       PHA\r
+       LDA I,40                ;PAGE ZERO ERROR TRAP?\r
+       BIT Z,SYNC\r
+       BEQ VTST                ;NO\r
+       LDX I,0         ;YES. WRITE 'ERR Z XX' ON LINE 4\r
+PEW0:  LDA AX,PZRERR\r
+       BNE PEW1\r
+       TYA                     ;GET FAILING BIT(S) MSB\r
+       LSR                     ;CONVERT TO HEX\r
+       LSR\r
+       LSR\r
+       LSR\r
+       TAX\r
+       LDA AX,HEX\r
+       STA A,PLYFLD+140+PZE-PZRERR     ;DISPLAY THEM\r
+       TYA\r
+       AND I,17                ;FAILING BITS LSB\r
+       TAX\r
+       LDA AX,HEX\r
+       STA A,PLYFLD+141+PZE-PZRERR     ;DISPLAY THEM\r
+       JMP RESET\r
+PEW1:  STA AX,PLYFLD+140\r
+       INX\r
+       BNE PEW0\r
+VTST:  BVC GOEND\r
+       LDY I,15.\r
+       LDX I,31.\r
+LOOP:  LDA ZX,ZCNTRL           ;PICTURE INFORMATION\r
+       STA AY,PICTR\r
+       LDA ZX,ZXAX             ;X AXIS DATA\r
+       EOR I,377\r
+       STA AY,XAXIS\r
+       LDA ZX,ZYAX             ;Y AXIS DATA\r
+       STA AY,YAXIS\r
+       DEX\r
+       DEX\r
+       DEY\r
+       BPL LOOP\r
+       LDA Z,FRMCL             ;YES\r
+       AND I,17                ;16 FRAMES?\r
+       BNE SSSC                ;NO\r
+       LDA I,20        \r
+       BIT Z,SYNC              ;ATTRACT MODE?, EXTENDED PLAY?\r
+       BMI GOM                 ;ATTRACT MODE.\r
+       BEQ SSSD                ;NOT EXTENDED PLAY.\r
+       LDX I,EPMSG-GO          ;EXTENDED PLAY\r
+       BNE GOOE\r
+GOM:   LDX I,0\r
+GOOE:  LDY I,53\r
+       LDA I,20\r
+       BIT Z,FRMCL             ;E/O?\r
+       BEQ GOWRT               ;EVEN WRITE GAME OVER\r
+GOLP:  LDA I,0                 ;ODD BLANK GAME OVER\r
+       STA AY,PLYFLD\r
+       INY\r
+       INX\r
+       LDA AX,GO\r
+       BNE GOLP\r
+GOEND: BEQ ESYNC\r
+GOWRT: LDA AX,GO\r
+       BEQ ESYNC\r
+       STA AY,PLYFLD\r
+       INY\r
+       INX\r
+       BNE GOWRT\r
+SSSC:  BIT Z,SYNC              ;ATTRACT MODE?\r
+       BPL SSSD                ;NO\r
+       LDX I,HML\r
+       LDY I,PHS\r
+       JSR UNPKL               ;UNPACK HIGH SCORE\r
+       LDX I,PRTSDL\r
+       LDY I,PPTP\r
+       JSR UNPK                ;UNPACK HIGH TOP SPEED\r
+SSSD:  LDX I,TPSPDL\r
+       LDY I,YTPSPD\r
+       JSR UNPK                ;UNPACK YOUR TOP SPEED\r
+       LDX I,MILEL\r
+       LDY I,PSCORE\r
+       JSR UNPKL               ;UNPACK YOUR SCORE\r
+       BIT Z,SYNC              ;ATTRACT MODE\r
+       BMI ESYNC               ;YES. SKIP TIME OUTPUT\r
+       LDX I,GTML\r
+       LDY I,76\r
+       JSR UNPKL               ;UNPACK TIME\r
+ESYNC: LDA I,1\r
+       ORA Z,SYNC\r
+       STA Z,SYNC              ;SIGNAL SYNC PROCESSED\r
+       PLA\r
+       TAY                     ;RESTORE REGS\r
+       PLA\r
+       TAX\r
+       PLA\r
+       RTI\r
+\r
+       .EVEN\r
+\r
+CHK3K: .BYTE 67,311\r
+\r
+CHKADR:        .WORD CHK3K,CHK2K,CHK1K\r
+       .REPT 117772-.          ;9FFA-.\r
+       .BYTE 377\r
+       .ENDR\r
+       .=117772\r
+VCTORS:        .WORD RESET,RESET,VSYNC\r
+\r
+WROB   =71261\r
+CRLF   =71212\r
+SPACE  =71567\r
+\r
+       .END\r
+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file
diff --git a/A06568.RBN b/A06568.RBN
new file mode 100644 (file)
index 0000000..5632fb5
Binary files /dev/null and b/A06568.RBN differ
diff --git a/NGTDRV.DIR b/NGTDRV.DIR
new file mode 100644 (file)
index 0000000..1e14ba2
Binary files /dev/null and b/NGTDRV.DIR differ
diff --git a/NGTDRV.MAP b/NGTDRV.MAP
new file mode 100644 (file)
index 0000000..8a64d96
Binary files /dev/null and b/NGTDRV.MAP differ