]> github.com/historicalsource and other repositories - minigolf.git/commitdiff
First commit main
authorHistorical Source <49599193+historicalsource@users.noreply.github.com>
Thu, 14 Oct 2021 20:58:20 +0000 (16:58 -0400)
committerHistorical Source <49599193+historicalsource@users.noreply.github.com>
Thu, 14 Oct 2021 20:58:20 +0000 (16:58 -0400)
15 files changed:
A30024.ROM [new file with mode: 0644]
A33496.XX [new file with mode: 0644]
A33497.XX [new file with mode: 0644]
A33498.XX [new file with mode: 0644]
A33499.XX [new file with mode: 0644]
A33500.XX [new file with mode: 0644]
A33501.XX [new file with mode: 0644]
A33502.XX [new file with mode: 0644]
A33524.ROM [new file with mode: 0644]
A33526.SKH [new file with mode: 0644]
A33527.ROM [new file with mode: 0644]
GFCOIN.XX [new file with mode: 0644]
MINGLF.DOC [new file with mode: 0644]
MINGLF.MAP [new file with mode: 0644]
SYSMAC.M65 [new file with mode: 0644]

diff --git a/A30024.ROM b/A30024.ROM
new file mode 100644 (file)
index 0000000..e53f60a
Binary files /dev/null and b/A30024.ROM differ
diff --git a/A33496.XX b/A33496.XX
new file mode 100644 (file)
index 0000000..821d663
--- /dev/null
+++ b/A33496.XX
@@ -0,0 +1,2084 @@
+       .TITLE GOLF MINI-GOLF VERSION 3\r
+       .RADIX 16\r
+       .ASECT\r
+       .REPT 0\r
+*************************\r
+*\r
+*MINI-GOLF\r
+*\r
+*PROGRAMMER: DAN MOSS\r
+*           DAVE SHEPPERD\r
+*\r
+*CHECKER:\r
+*\r
+*HARDWARE:\r
+* SPRINT-4\r
+* SOUNDS BY TI SOUND CHIP\r
+* SCREEN SIZE:28X32 (ROTATED)\r
+*\r
+*SOFTWARE:\r
+* 8K STARTING AT 2000\r
+* 4 INTERRUPTS/FRAME\r
+* COIN ROUTINE="PENNY"\r
+*\r
+*************************\r
+ LINKAGE: 3M:/L,DK1:LST.LST/A=GOLF,GFCORS,GFWPLY,HOLES,MGCOIN,GFVECT\r
+       WHERE MGCOIN COMES FROM MGCONF& PENNY\r
+       GFVECT LOADS NMI,IRQ, & REST VECTORS\r
+       \r
+THIS GAME PLAYS 16 HOLES OF MINATURE GOLF.\r
+THE PLAYER BUYS STROKES ANY TIME DURING\r
+THE GAME. SCORING IS THE SAME AS IN REGULAR\r
+GOLF. A RUNNG 'PAR' VALUE TELLS THE PLAYER\r
+HOW WELL HE IS DOING. IF THE PLAYER TAKES\r
+TOO MUCH TIME, A SQURREL RUNS OUT AND\r
+PICK-UP THE PLAYER'S BALL.\r
+       .ENDR\r
+       .PAGE\r
+       .SBTTL RAM ALLOCATIONS\r
+;\r
+;RAM ALLOCATIONS\r
+;\r
+       .GLOBL WATCH,TEEX,TEEY,BARRH,BARRL,LNG,FRMCNT,HOLE,RANDOM\r
+       .GLOBL XPOS,YPOS,DIRECT,CPPLYA,SLDTST\r
+       .=20\r
+VIDCON:        .BLKB 1                 ;COINCIDENCE READ\r
+       .=24\r
+SOUNDS:        .BLKB 1\r
+       .=40\r
+OPSWA:  .BLKB 1                        ;8 BITS OPTION SWITCH\r
+                               ;D7-COIN OPTION 1\r
+                               ;D6-COIN OPTION 0\r
+                               ;D5-LANGUAGE OPTION 1\r
+                               ;D4-LANGUAGE OPTION 0\r
+                               ;D3-(SPARE)\r
+                               ;D2-(SPARE) 1/2 BONUS STROKES\r
+SHOTS  =2                      ;D1-1/2 BONUS STROKES\r
+B.ATSD =1                      ;D0-ATTRACT MODE SOUNDS\r
+\r
+OPSWB: .BLKB 1\r
+                               ;D7=COLLISION-BLK BALL/PLYFLD\r
+                               ;D6=     "   -WHT BALL/PLYFLD\r
+                               ;D5=     "   -BLK BALL/WHT BALL\r
+                               ;D4=(SPARE)\r
+                               ;D3=V-BLANK\r
+                               ;D2=(SPARE)\r
+                               ;D1=STEERING A\r
+                               ;D0=STEERING B\r
+LIGHTS: .BLKB 2\r
+WATCH: .BLKB 2\r
+IRQRST:        .BLKB 1\r
+\r
+       .=60\r
+$COINA:\r
+$LAM:\r
+$CMODE:\r
+COINDR: .BLKB 1                ;COIN DOOR\r
+                               ;D7=RIGHT COIN MECH\r
+                               ;D6=LEFT COIN MECH\r
+B.SLAM =20                     ;D5=SLAM SWITCH\r
+B.TST  =10                     ;D4=TEST MODE SWITCH\r
+                               ;D3-D0=N.A.\r
+CONTRL:        .BLKB 1                 ;CONTROL INPUTS\r
+B.STRT =80                     ;D7=START SWITCH\r
+B.PG2  =40                     ;D6=PLUNGER SENSOR 2\r
+B.PG1  =20                     ;D5=PLUNGER SENSOR 1\r
+B.NEXT  =10                    ;D4=MOVE TO NEXT HOLE BUTTON\r
+                               ;D3=SPARE\r
+                               ;D2=SPARE\r
+                               ;D1=(SPARE)\r
+                               ;D0=(SPARE)\r
+SKIP3: .BLKB 2\r
+DIAGN: .BLKB 1\r
+       .=068\r
+NOISE: .BLKB 2         ;NOISE ENABLE\r
+SNDDSB:        .BLKB 2         ;TONE ENABLE\r
+       .BLKB 2\r
+       .BLKB 2\r
+       .=080\r
+ZPAGE:\r
+       .IRP Z,<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15>\r
+       .GLOBL R'Z\r
+       .LIST\r
+R'Z:   .BLKB\r
+       .NLIST\r
+       .ENDR\r
+\r
+; MOVING OBJECT CONTROLS\r
+\r
+PLAY2Y:        .BLKB 2         ;BLACK BALL\r
+PLAY1Y:        .BLKB 6         ;WHITE BALL\r
+PLAY2X: .BLKB 1\r
+UPPER1:        .BLKB 1\r
+SKIP1: .BLKB 1\r
+LOWER1:        .BLKB 1\r
+PLAY1X:        .BLKB 1\r
+UPPER2:        .BLKB 1\r
+SKIP2: .BLKB 1\r
+LOWER2:        .BLKB 1\r
+\r
+; WORKING MEMORY\r
+\r
+;****\r
+;DO NOT MOVE OR CHANGE THE ORDER OF THE\r
+;FOLLOWING!!!\r
+PLAY1:\r
+XPOS:  .BLKB 2\r
+XPARAM:\r
+YPOS:  .BLKB 2\r
+PLAY2:\r
+XPOS2: .BLKB 2\r
+YPOS2: .BLKB 2\r
+ACCEL: .BLKB\r
+PNTRX: .BLKB\r
+SAVEX: .BLKB\r
+PNTRY: .BLKB\r
+OBJPIX:        .BLKB 2         ;UPPER/LOWER PIX SELECT WHITE\r
+HLCNST:        .BLKB 2\r
+OBJ2PX:        .BLKB 2         ;UPPER/LOWER PIX SELECT BLACK\r
+;*END OF 'NOT NOT MOVE' ***\r
+VEL:   .BLKB 2         ;VELOCITY VECTOR\r
+SQRLX: .BLKB\r
+SQRLY: .BLKB\r
+OLDBX: .BLKB\r
+OLDBPX:        .BLKB\r
+ANG:   .BLKB 2\r
+DIRECT =ANG+1\r
+DIR:   .BLKB 1\r
+FRAME: .BLKB 1\r
+PLUNG: .BLKB 2\r
+ATRSEQ:        .BLKB 1         ;ATTRACT MODE SEQUENCER\r
+TEEY:  .BLKB 1\r
+TEEX:  .BLKB 1\r
+BARRL: .BLKB 1         ;LSB OF MOVING BARRIER\r
+BARRH: .BLKB 1         ;MSB OF MOVING BARRIER\r
+STRKW:  .BLKB 1                ;STROKE COUNTERS\r
+STRKB: .BLKB 1\r
+LITES: .BLKB 1         ;ATTRACTION LIGHT RING COUNTER\r
+NONVOL:                ;NON-VOLITILE STORAGE\r
+SCORE: .BLKB 1         ;WHITE PLAYER\r
+SCORE2:        .BLKB 1         ;BLACK PLAYER\r
+PLAYER:        .BLKB 1         ;MASTER CONTROL\r
+STRTER: .BLKB 1                ;GAME START CONTROL\r
+LNG:   .BLKB 2         ;LANGUAGE SELECT\r
+$CCTIM:        .BLKB 1         ;TIMER FOR ELECTRO-MECHANICAL COUNTER\r
+$PSTSL:        .BLKB 2\r
+$INTCT: .BLKB 1\r
+$LMTIM:        .BLKB 1\r
+$CNCT: .BLKB 1\r
+$CNSTT:        .BLKB 2\r
+SPOOL: .BLKB 1         ;SHOT POOL\r
+FRMCNT:        .BLKB 1\r
+DBOUNC: .BLKB 1                ;SWITCH DEBOUNCE COUNTER\r
+HOLE:  .BLKB 1         ;CURRENT HOLE #\r
+PAR:   .BLKB 1         ;ACCUM PAR VALUE\r
+FREEZE:        .BLKB 1         ;SHORT TIMER\r
+RANDOM: .BLKB 1\r
+POLYL: .BLKB 1         ;RANDOM NUMBER\r
+POLYH: .BLKB 1\r
+SREG:  .BLKB\r
+SNDCTL:        .BLKB 4\r
+ENDZPG:\r
+\r
+\r
+       .GLOBL $COINA,$LAM\r
+       .GLOBL $LMBIT\r
+       .GLOBL $CNSTT,$PSTSL\r
+       .GLOBL $INTCT,$CCTIM\r
+       .GLOBL $LMTIM,$CNCT\r
+       .GLOBL MOOLAH           ;COIN ROUTINE\r
+       .GLOBL NMI              ;NMI ADDRESS\r
+       .GLOBL IRQ              ;IRQ ADDRESS\r
+       .GLOBL PWRON,CLEAR,CLRSCN       ;POWER-ON RESET ADDRESS\r
+       .GLOBL SPCOIN,SETATR\r
+       .GLOBB SREG,SNDCTL\r
+\r
+       .IRPC X,<01234567>\r
+       .GLOBL CHKS'X'K\r
+       .ENDR\r
+       .SBTTL MACROS\r
+\r
+       .MACRO MSG COLOR,OP\r
+       .IIF EQ, COLOR-1,SEC\r
+       .IIF EQ, COLOR-2,CLC\r
+       .IIF NB,<OP>,LDY I,OP\r
+       JSR MSG\r
+       .ENDM\r
+\r
+       .MACRO EMSG OP\r
+       .IIF NB,<OP>,LDY I,OP\r
+       JSR EMSG\r
+       .ENDM\r
+\r
+       .MACRO NUMBER   DEST,COLOR,OP\r
+       .IF NB <DEST>\r
+       LDA I,DEST&0FF\r
+       STA R2\r
+       LDA I,DEST&-100/100\r
+       STA R3\r
+       .ENDC\r
+       .IF NB,COLOR\r
+       .IIF EQ,COLOR-1,LDA I,80\r
+       .IIF EQ,COLOR-2,LDA I,0\r
+       STA R4\r
+       .ENDC\r
+       LDA OP\r
+       JSR CVD\r
+       .ENDM\r
+\r
+       .MACRO MULT     P,M,ML\r
+       .IIF NB,<P>,LDX I,P     ;PRODUCT @\r
+       .IIF NB,<M>,LDY I,M     ;MULTIPLICAND @\r
+       .IIF NB,<ML>,LDA ML     ;MULTIPLIER \r
+       JSR MULT\r
+       .ENDM\r
+\r
+       .MACRO GENS OPCODE\r
+       .IRP    X,<OPCODE>\r
+       .MACRO X'S COUNT,LABEL\r
+       .REPT COUNT\r
+       X       LABEL\r
+       .ENDR\r
+       .ENDM X'S\r
+       .ENDR\r
+       .ENDM GENS\r
+\r
+       GENS <ASL,LSR,ROL,ROR,DEX,DEY,INX,INY,INC,DEC>\r
+\r
+       .MACRO SAVE OP\r
+       .IRP X,<OP>\r
+       LDA X\r
+       PHA\r
+       .ENDR\r
+       .ENDM\r
+\r
+       .MACRO RESTOR OP\r
+       .IRP X,<OP>\r
+       PLA\r
+       STA X\r
+       .ENDR\r
+       .ENDM\r
+       \r
+       .MACRO CLR OP\r
+        LDA I,0\r
+       .IRP X,<OP>\r
+       STA X\r
+       .ENDR\r
+       .ENDM\r
+               \r
+       .MACRO MOVB D,S\r
+       LDA S\r
+       STA D\r
+       .ENDM\r
+       \r
+       .MACRO MOV D,S\r
+       LDA S\r
+       STA D\r
+       LDA S+1\r
+       STA D+1\r
+       .ENDM\r
+       \r
+       .MACRO ADD OP\r
+       CLC\r
+       ADC OP\r
+       .ENDM\r
+       \r
+       .MACRO ADDM D,S1,S2,C\r
+       .IIF B,<C>,CLC\r
+       LDA S1\r
+       .IF B,<S2>\r
+       ADC D\r
+       .IFF\r
+       ADC S2\r
+       .IFTF\r
+       STA D\r
+       LDA S1+1\r
+       .IFT\r
+       ADC D+1\r
+       .IFF\r
+       ADC S2+1\r
+       .ENDC\r
+       STA D+1\r
+       .ENDM\r
+\r
+       .MACRO SUB OP\r
+       SEC\r
+       SBC OP\r
+       .ENDM\r
+\r
+       .MACRO SUBM D,S1,S2,C\r
+       .IIF B,<C>,SEC\r
+       .IF NB,<S2>\r
+       LDA S1\r
+       SBC S2\r
+       .IFF\r
+       LDA D\r
+       SBC S1\r
+       .IFTF\r
+       STA D\r
+       .IFT\r
+       LDA S1+1\r
+       SBC S2+1\r
+       .IFF\r
+       LDA D+1\r
+       SBC S1+1\r
+       .ENDC\r
+       STA D+1\r
+       .ENDM\r
+\r
+       .LIST MEB\r
+       .NLIST BYT\r
+       .ENABL AMA\r
+       .PAGE\r
+       .SBTTL CONSTANTS\r
+;\r
+;CONSTANT ASSIGNMENTS\r
+;\r
+DISPLL =00             ;ADDRESS OF DISPLAY RAM\r
+DISPLH =08     \r
+PLYFLD =0800                   ;DISPLAY RAM ADDRESS\r
+MAXFOR  =0D\r
+BLANK  =00             ;CODE FOR BLANKED BALL\r
+$LMBIT =20             ;SLAM SWITCH POSITION\r
+NMIDIS =60             ;NMI DISABLE\r
+NMIEN  =61             ;NMI ENABLE\r
+SNDSON =6A             ;SOUNDS ON\r
+SNDSOF =6B             ;SOUNDS OFF\r
+COINOF =6C\r
+COINON =6D\r
+WH     =1\r
+BK     =2\r
+OFFST  =PLAY2-PLAY1    ;OFFSET TO SECOND PLAYER'S PARAMETERS\r
+;\r
+;SOUNDS\r
+;\r
+       .GLOBB S.HIT,S.HOLE,S.SQR,S.H2O,S.SAND,S.COIN,S.CLUB\r
+       .GLOBB S.FANF\r
+;\r
+CNTBLK =XPARAM-PLAY1\r
+;\r
+;CONTROL WORD "PLAYER"\r
+;\r
+B.ATR  =80             ;ATTRACT MODE\r
+B.SLOK  =40            ;START LOCK OUT\r
+B.MSG  =20             ;WARNING GIVEN\r
+B.WARN =10             ;SHOTS LOW WARNING\r
+B.VBLK =08             ;V-BLANKING\r
+B.BMOV =04             ;BALL IN MOITION\r
+B.SQR  =02             ;SHOT TIMER\r
+B.DROP =01             ;HOLE SUNK\r
+       .GLOBL  B.ATR,B.SLOK,B.MSG,B.WARN,B.VBLK,B.BMOV\r
+       .GLOBL  B.SQR,B.DROP,B.STOP,B.PLY,B.WHDN,B.BSTR\r
+       .GLOBL  B.BKDN,B.TUNE,STRTER,PLAYER\r
+;\r
+MINDCL  =0C            ;MINIMUM DECELERATION\r
+MAXSTK  =06            ;MAXIMUM NUMBER OF STROKES\r
+TOOFST =5              ;TOO FAST TO FALL IN CUP\r
+SANDA  =MINDCL*3       ;SAND DECELERATION\r
+PRGSPC  =2000          ;ROM IS AT 2000-3FFF\r
+;\r
+;CONTROL WORD "STRTER"\r
+;\r
+B.STOP  =80            ;BALL STOPPED\r
+B.PLY  =40             ;PLAYER SELECT\r
+B.WHDN =20             ;WHITE DONE\r
+B.BSTR =10             ;BLACK STARTED (2 PLAYER)\r
+B.BKDN =08             ;BLACK DONE\r
+B.TUNE =04             ;PLAY TUNE\r
+       .=PRGSPC\r
+\r
+       .GLOBL BARIER,MSG,EMSG,COURSE,CVD\r
+       .PAGE\r
+       .SBTTL MAIN PROGRAM\r
+;\r
+;CONTROL WORD "PLAYER"\r
+;1=TRUE\r
+;BIT 7-ATTRACT MODE\r
+;BIT 3-V-BLANK\r
+;BIT 2-BALL IN MOTION\r
+;BIT 1-TIMER\r
+;BIT 0-HOLE SUNK\r
+\r
+;DBUG=1                ;DEFINE FOR DEVELOPMENT\r
+       .IIF NDF,DBUG,DBUG=0\r
+       .IF EQ,DBUG\r
+       .VCTRS 0F4B0,IRQ,NMI\r
+       .VCTRS 0F4B4,03A2,0BDEA,0F4B0\r
+       .VCTRS 0F4BA,9DEA,0F428,0CAEA\r
+       .VCTRS 0F4C0,0F510,4CEA,PWRON\r
+       .ENDC\r
+CHKS0K:        .BYTE 55                ;CHECKSUM\r
+\r
+SETATR:        LDA I,B.ATR\r
+       STA Z,PLAYER\r
+       LDA I,B.BSTR            ;KEEP THIS BIT\r
+       AND STRTER\r
+       STA STRTER\r
+       STA NMIDIS              ;TURN OFF CONTROL INTERRUPTS\r
+       BPL COMMON              ;(ALWAYS)\r
+;\r
+;      \r
+;\r
+       .ENABL LSB\r
+GAME:  LDA I,0\r
+       STA SCORE\r
+       STA SCORE2\r
+       STA PAR\r
+       STA PLAYER              ;RESET ATTRACT MODE\r
+       STA STRTER              ;AND STATES\r
+       LDA POLYL\r
+       AND I,0F\r
+       STA HOLE                ;START AT RANDOM\r
+COMMON:        JSR PUTCRS              ;PUT UP A NEW COURSE\r
+WMRTN: MSG WH,WHITE\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BPL 1$                  ;NO, SKIP RATING\r
+       LDA PAR                 ;PAR = 0?\r
+       BEQ 1$                  ;YES. SKIP RATING\r
+       LDX I,0                 ;RATE WHITE\r
+       JSR RATE\r
+1$:    LDA I,B.BSTR            ;BLACK PLAYER UP?\r
+       AND STRTER\r
+       BEQ PLAY                ;NO. SKIP MESSAGE\r
+       MSG BK,BLACK\r
+       BIT PLAYER              ;ATTRACT MODE\r
+       BPL PLAY                ;NO, SKIP RATING\r
+       LDA PAR                 ;PAR = 0?\r
+       BEQ PLAY                ;YES SKIP RATING\r
+       LDX I,1                 ;RATE BLACK\r
+       JSR RATE\r
+;\r
+       .DSABL LSB\r
+PLAY:  LDX #0FF\r
+       TXS                     ;RESET STACK\r
+WAIT:  LDA I,B.VBLK\r
+       .ENABL LSB\r
+       BIT Z,PLAYER            ;WAIT FOR V-BLANK\r
+       CLI\r
+       BNE RUN\r
+       BMI WAIT                ;ATTRACT MODE.\r
+       LDA I,B.BMOV\r
+       BIT PLAYER              ;BALL IN MOTION?\r
+       BNE WAIT                ;YEP. SKIP CONTROLS\r
+       LDA OPSWB               ;GET CONTROL DATA\r
+       EOR DIR                 ;CHANGE?\r
+       AND I,1\r
+       BEQ WAIT                ;NOPE\r
+       LDA OPSWB\r
+       AND I,1\r
+       STA DIR                 ;MAKE NEW DIR\r
+       BEQ WAIT\r
+       LDA OPSWB\r
+       AND I,2\r
+       BEQ 1$\r
+       DEC DIRECT\r
+       DEC DIRECT\r
+1$:    INC DIRECT\r
+       JMP WAIT\r
+RUN:   LDA Z,PLAYER\r
+       AND I,^C<B.VBLK>        ;CLEAR FLAG\r
+       STA Z,PLAYER\r
+       STA Z,WATCH             ;KICK WATCH DOG\r
+       LDA #B.TUNE\r
+       BIT STRTER              ;ARE WE IN TUNE MODE?\r
+       BEQ 8$                  ;NO\r
+       LDX SREG                ;YES. MAKING MUZAK?\r
+       BNE PLAY                ;YEP. WAIT FOR IT TO STOP\r
+       EOR STRTER              ;DROP TUNE BIT\r
+       STA STRTER\r
+       EMSG BONUS              ;ERASE BONUS MESSAGE\r
+       JSR WCMSG               ;RE-WRITE COURSE # MESSAGE\r
+       JMP PLAY                ;RE-SYNC TO VBLANK\r
+8$:\r
+       LDA Z,COINDR\r
+       AND I,B.TST             ;TEST MODE?\r
+       BNE 6$                  ;NO\r
+       JMP PWRON               ;GO TO SELF-TEST\r
+6$:    LDA $CNCT               ;ANY COINS INPUT?\r
+       BEQ 2$                  ;NOPE\r
+       LDA SPOOL               ;GET CURRENT POOL\r
+       BNE 5$                  ;NOT EMPTY\r
+       EMSG GMEOVR             ;ERASE 'GAME OVER'\r
+5$:    MSG WH,REM1             ;WRITE SHOTS LEFT (IN CASE OF BLINK MODE)\r
+       LDA PLAYER\r
+       AND I,^C<B.MSG>         ;CLEAR WARNING FLAG\r
+       STA PLAYER\r
+       LDA OPSWA\r
+       ROLS 3\r
+       AND I,3\r
+       TAX\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BMI 9$                  ;YES\r
+       INX                     ;NO. GIVE HIM A BONUS\r
+9$:    LDA AX,SPCOIN           ;GET SHOTS/COIN OPTION\r
+       ADD SPOOL\r
+       BCC 3$                  ;IT OK\r
+       LDA I,0FF               ;CAN'T OVERFLOW.\r
+3$:    STA SPOOL               ;UPDATE SPOOL\r
+       DEC $CNCT               ;ACCEPT THE COIN\r
+       CLR FREEZE              ;ERASE MESSAGE\r
+JPLY:  JMP PLAY\r
+2$:    LDA FREEZE              ;SHOULD BE ASLEEP?\r
+       BNE JPLY                ;YES\r
+       LDA I,B.BMOV\r
+       BIT PLAYER              ;BALL IN MOTION?\r
+       BEQ BATR                ;BALL'S STOPPED\r
+       JSR MOVE                ;MOVE THE BALL (SREG RETURNS WITH SOUND)\r
+       JSR APPACL              ;GO APPLY ACCELERATIONS TO VELOCITIES\r
+       LDA I,MINDCL/2          ;USE 1/2 DECEL FOR ATTRACT MODE\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BMI 7$                  ;YES. (NO SOUND)\r
+       LDA I,MINDCL\r
+7$:    STA ACCEL\r
+       BCS BATR                ;NORMAL\r
+       .DSABL LSB\r
+STOPB: LDA I,0                 ;STOP THE BALL\r
+       STA VEL\r
+       STA VEL+1\r
+       LDA HLCNST+1            ;ON A HILL?\r
+       BNE BATR                ;YEP. IT WILL SPEED UP AGAIN\r
+       LDA STRTER              ;BALL STOPPED. SIGNAL SAME\r
+       ORA I,B.STOP\r
+       STA STRTER\r
+       LDA Z,PLAYER\r
+       AND I,^C<B.BMOV>\r
+       STA Z,PLAYER\r
+       BPL BATR\r
+       JMP SETATR\r
+BATR:  LDA FREEZE              ;ASLEEP?\r
+       BNE JPLY                ;YEP\r
+       JMP ATRACT              ;CONTINUE\r
+\r
+       .RADIX 10\r
+SPCOIN:        .BYTE 25,30,35,40,45    ;SHOTS PER COIN OPTION\r
+       .RADIX 16\r
+       .PAGE\r
+       .SBTTL PLAYER RATING\r
+RATE:  LDA PAR                 ;GET ACCUMULATED PAR\r
+       ASL                     ;MULTIPLY BY 3\r
+       ADC PAR\r
+       LDY I,0                 ;START WITH WELL\r
+       CMP ZX,SCORE            ;EQUAL OR UNDER PAR?\r
+       BCS 1$                  ;YES, WELL!\r
+       INY                     ;SKIP TO AMATEUR\r
+       STA R0                  ;SAVE PAR\r
+       LSRS 2                  ;DIVIDE PAR BY 4\r
+       ADD R0                  ;THIS IS HOW MUCH OVER PAR THE\r
+                               ;  PLAYER MUST BE FOR A 'POOR' RATING\r
+       CMP ZX,SCORE            ;HOW DOES HE RATE?\r
+       BCS 1$                  ;FAIR\r
+       INY                     ;POOR\r
+1$:    STX R0                  ;SAVE PLAYER INDEX\r
+       LDA OPSWA               ;GET LANGUAGE SELECT\r
+       AND I,30\r
+       LSRS 3\r
+       ADC R0                  ;ADD IN PLAYER INDEX\r
+       STA R0\r
+       TYA                     ;GET RATING\r
+       ASLS 3                  ;COMPUTE MESSAGE INDEX\r
+       ADC R0                  ;ADD IN RATING\r
+       TAX\r
+       LDA I,PLYFLD&-100/400\r
+       STA R3\r
+       LDA AX,RATTBL           ;GET TARGET ADDRESS\r
+       ASL                     ;PUT COLOR BIT INTO R0\r
+       ROL R0\r
+       ASL\r
+       ROL R3                  ;PUT ADDRESS INTO R2, R3\r
+       ASL\r
+       ROL R3\r
+       ORA I,31.               ;AT THE TOP\r
+       STA R2\r
+       TYA\r
+       ASL                     ;COMPUTE MESSAGE #\r
+       TAY\r
+       LSR R0                  ;PUT COLOR BACK INTO CARRY\r
+       MSG                     ;WRITE RATING\r
+       RTS\r
+\r
+       .RADIX 10\r
+RATTBL:        .BYTE 128/8+128,672/8   ;ENGLISH PRO\r
+       .BYTE 64/8+128,736/8    ;FRENCH\r
+       .BYTE 0+128,672/8       ;SPANISH\r
+       .BYTE 64/8+128,672/8    ;GERMAN\r
+       .BYTE 0+128,640/8       ;ENGLISH AMATUER\r
+       .BYTE 96+128,736/8      ;FRENCH\r
+       .BYTE 0+128,672/8       ;SPANISH\r
+       .BYTE 0/8+128,640/8     ;GERMAN\r
+       .BYTE 96/8+128,672/8    ;ENGLISH POOR\r
+       .BYTE 0+128,704/8       ;FRENCH\r
+       .BYTE 0+128,672/8       ;SPANISH\r
+       .BYTE 0+128,672/8       ;GERMAN\r
+       .RADIX 16\r
+       .PAGE\r
+;\r
+;ATTRACT MODE TEST\r
+;\r
+ATRACT: BIT PLAYER             ;ATTRACT MODE?\r
+       BMI 2$                  ;YEP\r
+       BVS 7$                  ;START LOCKOUT\r
+       BIT CONTRL              ;START SWITCH ACTIVE?\r
+       BMI 8$                  ;NO\r
+       BIT DBOUNC              ;STILL DOWN FROM FIRST PLAYER?\r
+       BPL 9$                  ;NO\r
+       LDA I,84                ;POST SWITCH TIMEOUT\r
+       STA DBOUNC\r
+       BMI 7$                  ;(ALWAYS)\r
+9$:    INC DBOUNC\r
+       LDA DBOUNC\r
+       CMP I,6                 ;4 FRAME DE-BOUNCE\r
+       BMI 7$  \r
+       LDA I,B.BSTR            ;ENABLE PLAYER 2\r
+       STA STRTER\r
+       MSG BK,BLACK            ;WRTIE BLACK\r
+       LDA I,B.SLOK\r
+       ORA PLAYER              ;LOCK OUT START SW\r
+       STA PLAYER\r
+       BNE 7$                  ;(ALWAYS)\r
+8$:    DEC DBOUNC              ;START SW MUST BE UP FOR A WHILE\r
+       BMI 7$\r
+       LDA I,2                 ;TIMED OUT DOWN\r
+       STA DBOUNC              ;PRE-PARE FOR TIME UP\r
+7$:    LDA PLAYER              ;WHAT ARE WE DOING?\r
+       AND I,B.SQR!B.WARN      ;SPECIAL?\r
+       BEQ WHOSUP              ;NO\r
+       AND I,B.SQR             ;SQUIRREL?\r
+       BEQ 11$                 ;NO, LOW SHOTS WARNING\r
+       JMP SQUIRL\r
+11$:   JMP WME                 ;LOW STROKES WARNING DONE\r
+2$:    LDA SPOOL               ;ANY CREDIT?\r
+       BEQ 20$                 ;NO\r
+       BIT CONTRL              ;YES. START SWITCH ON?\r
+       BMI 20$                 ;NO. KEEP LOOKING\r
+       LDA I,84                ;INIT DEBOUNCE FOR NEXT PASS\r
+       STA DBOUNC\r
+       JMP GAME                ;AND GO START THE GAME\r
+20$:   LDA PLAYER\r
+       BPL WHOSUP              ;NOT IN ATTRACT MODE\r
+       AND I,B.BMOV            ;BALL IN MOTION?\r
+       BNE 10$                 ;YEP. WAIT FOR IT TO STOP\r
+       LDA VEL+1               ;POINTER STOPPED?\r
+       BNE 12$                 ;NOPE. WAIT FOR IT\r
+       LDA ATRSEQ              ;WHAT ARE WE DOING?\r
+       BEQ 3$                  ;SETTING ROTATION.\r
+       CMP DIRECT              ;ROTATING BALL. MATCH?\r
+       BNE 4$                  ;NO. KEEP ROTATING.\r
+       LDA I,5                 ;YEP. GIVE THE BALL SOME VELOCITY\r
+       STA VEL+1\r
+       JMP SBIM                ;AND SET IT IN MOTION\r
+4$:    INC DIRECT              ;ROTATE THE BALL\r
+6$:    JMP POINT               ;SELECT THE CORRECT PICTURE\r
+3$:    LDA POLYL               ;GET A RANDOM NUMBER\r
+       AND I,3F                ;BETWEEN 1-3F\r
+       BNE 5$\r
+       LDA I,1                 ;CAN'T BE A 0\r
+5$:    STA ATRSEQ              ;SET THE SEQUENCER\r
+       CLC\r
+       ADC I,1                 ;MAKE THE BALL ROTATE 360 DEGREES\r
+       STA DIRECT\r
+12$:   JMP POINT               ;GO FIGURE THE PICTURE\r
+10$:   JMP PLAY\r
+       .PAGE\r
+       .SBTTL WHOSUP: FIND OUT WHICH SIDE PLAYS, NEXT.\r
+;\r
+;THE FOLLOWING CODE DETERMINES WHICH PLAYER IS UP FOR BOTH THE\r
+;SINGLE AND TWO PLAYER GAMES\r
+;\r
+;\r
+;CONTROL WORD STRTER\r
+;BIT 7 - 1 =BALL HAS STOPPED\r
+;       0 = ANY OTHER STATE\r
+;BIT 6 - 1 = BLACK PLAYER UP\r
+;       0 = WHITE PLAYER UP\r
+;BIT 5 - 1 = WHITE DONE THIS HOLE\r
+;       0 = WHITE NOT DONE\r
+;BIT 4 - 1 = 2 PLAYER GAME\r
+;       0 = 1 PLAYER GAME\r
+;BIT 3 - 1 = BLACK DONE THIS HOLE\r
+;       0 = BLACK NOT DONE (OR NOT STARTED)\r
+       \r
+       \r
+WHOSUP:        LDA STRTER              ;BALL STOPPED?\r
+       BMI 10$                 ;YES.\r
+       JMP CNTRLS              ;NO.\r
+10$:   AND I,7F                ;DROP FLAG\r
+       STA STRTER\r
+       LDA PLAYER\r
+       AND I,B.DROP!B.SQR      ;BALL STOPPED BECAUSE OF PUTT SUNK OR SQR?\r
+       BEQ 1$                  ;NO IT JUST STOPPED\r
+6$:    LDA I,B.BKDN\r
+       LDY I,0\r
+       LDX SAVEX\r
+       BIT STRTER              ;WHO IS UP NOW?\r
+       BVS 2$                  ;BLACK\r
+       LDY I,1\r
+       LDA I,B.WHDN            ;WHITE\r
+2$:    ORA STRTER              ;FORCE SIDE DONE\r
+       STA STRTER\r
+       LDA I,BLANK             ;BLANK THE BALL\r
+       STA ZX,OBJPIX           ;NOW\r
+1$:    LDA PLAYER\r
+       AND I,^C<B.SQR!B.DROP>\r
+       STA PLAYER\r
+       LDA STRTER\r
+       AND I,B.WHDN!B.BKDN!B.BSTR\r
+       BEQ 5$                  ;SINGLE PLAYER\r
+       CMP I,B.WHDN            ;WHITE DONE, ONE PLAYER?\r
+       BEQ NUHOLE              ;YEP. GO TO NEXT\r
+       CMP I,B.WHDN!B.BKDN!B.BSTR      ;WHITE AND BLACK DONE?\r
+       BEQ NUHOLE              ;NEXT HOLE\r
+       CMP I,B.BKDN!B.BSTR     ;BLACK DONE?\r
+       BEQ 5$                  ;YES. SWITCH TO WHITE\r
+       CMP I,B.WHDN!B.BSTR     ;WHITE DONE, 2 PLAYER?\r
+       BEQ 12$                 ;YES, SWITCH TO BLACK\r
+       LDX I,0                 ;EXCHANGE\r
+       BIT STRTER\r
+       BVC 7$\r
+       INX\r
+7$:    LDA ZX,STRKW            ;CHECK STROKE COUNT OF CURRENT GUY\r
+       CMP I,MAXSTK            ;TOO MANY?\r
+       BPL 13$                 ;YEP. BLANK THE BALL\r
+       BVS 5$                  ;SWITCH TO WHITE\r
+12$:   LDA I,OFFST             ;SWITCH TO BLACK\r
+       STA SAVEX\r
+       LDA STRTER\r
+       ORA I,B.PLY\r
+       STA STRTER\r
+       LDA STRKB\r
+       CMP I,MAXSTK            ;CHECK STROKE COUNT\r
+       BMI 11$\r
+13$:   JMP 6$                  ;TOO MANY\r
+5$:    LDA I,0                 ;SWITCH TO WHITE\r
+       STA SAVEX\r
+       LDA STRTER\r
+       AND I,^C<B.PLY>\r
+       STA STRTER\r
+       LDA STRKW\r
+       CMP I,MAXSTK            ;CHECK STROKE COUNT\r
+       BPL 13$                 ;TOO MANY\r
+11$:   \r
+       LDX SAVEX               ;CHECK BALL\r
+       LDA ZX,XPOS+1           ;0?\r
+       BEQ 4$                  ;YEP\r
+       LDA ZX,YPOS+1           ;0?\r
+       BEQ 4$                  ;YEP\r
+       LDA ZX,OBJPIX           ;BLANK PIX?\r
+       BNE 3$                  ;NO. ITS OK\r
+4$:    LDA TEEX                ;PUT BALL ON TEE\r
+       STA XPOS+1(X)\r
+       LDA TEEY\r
+       STA YPOS+1(X)\r
+3$:    LDA XPOS+1(X)           ;PASS POSITION TO\r
+       STA PNTRX               ;PNTRX FOR POINTER'S USE\r
+       LDA YPOS+1(X)\r
+       STA PNTRY\r
+       LDA POLYL               ;POINT BALL IN RANDOM DIRECTION\r
+       STA DIRECT\r
+       CLR FRAME               ;RESET SQUIRREL TIMER\r
+       JMP WM\r
+JCNTRL:        JMP CNTRLS              ;CONTINUE\r
+       .PAGE\r
+;\r
+;SELECT A NEW HOLE\r
+;\r
+NUHOLE: LDA PLAYER\r
+       AND I,B.SLOK!B.MSG\r
+       STA PLAYER\r
+       LDA STRTER\r
+       AND I,B.BSTR!07!B.PLY   ;KEEP ONLY MODE (1 OR 2 PLAYER) AND PLAYER\r
+       STA STRTER\r
+       LDA SPOOL       ;ANY CREDITS?\r
+       BEQ JSATR               ;NOPE. SKIP TO ATTRACT MODE.\r
+;\r
+;\r
+       JMP COMMON              ;BACK TO WAIT\r
+;\r
+;GAME OVER\r
+;\r
+JSATR: JMP SETATR              ;BACK TO ATTRACT MODE\r
+\r
+WM:    LDA PLAYER\r
+       AND I,B.MSG             ;HAS MESSAGE BEEN GIVEN?\r
+       BNE JCNTRL              ;YEP.\r
+       LDA SPOOL\r
+       BEQ JCNTRL              ;IGNORE MESSAGE ON LAST STROKE.\r
+       CMP I,6                 ;GETTING LOW?\r
+       BCS JCNTRL              ;NO, DON'T WORRY\r
+       LDA PLAYER\r
+       ORA I,B.WARN!B.MSG      ;SET WARNING MODE\r
+       STA PLAYER\r
+       LDX I,7\r
+1$:    LDA ZX,PLAY2X           ;COPY BALL STATISTIS TO WORKING RAM\r
+       STA ZX,R8\r
+       DEX\r
+       BPL 1$\r
+       MOVB R10,PLAY2Y\r
+       MOVB R14,PLAY1Y\r
+       JSR CLRSCN              ;ERASE THE PLAYFIELD\r
+       LDX I,15.               ;GET RID OF BALL PIX'S\r
+2$:    STA ZX,PLAY2Y\r
+       DEX\r
+       BPL 2$\r
+       MSG WH,WRN2             ;PRINT WARNING MESSAGE\r
+       LDA OPSWA               ;GET COINING OPTION\r
+       AND I,0C0\r
+       ASL                     ;PUT THEM AT THE BOTTOM\r
+       ROLS 2\r
+       TAX\r
+       LDA AX,SPCOIN           ;EXTRA CREDIT\r
+       JSR CVD                 ;PRINT MESSAGE\r
+       MOVB FREEZE,<I,100.>    ;WAIT 4 SECONDS\r
+       JMP PLAY\r
+WME:   LDA PLAYER              ;WARNING TIMED OUT\r
+       AND I,^C<B.WARN>        ;SIGNAL WARNING COMPLETE\r
+       STA PLAYER\r
+       JSR CLRSCN              ;ERASE MESSAGE\r
+       LDX I,7.                ;COPY WORKING RAM TO BALL STATISTICS\r
+1$:    LDA ZX,R8\r
+       STA ZX,PLAY2X\r
+       DEX\r
+       BPL 1$\r
+       MOVB PLAY2Y,R10\r
+       MOVB PLAY1Y,R14\r
+       JSR COURSE              ;PUT THE COURSE BACK UP\r
+       JSR WCMSG               ;AND ITS NUMBER\r
+       JMP WMRTN               ;FINISH UP\r
+\f\r
+       .SBTTL MAIN PROGRAM - PLAY CONTROLS\r
+;\r
+;SERVICE PLAYER CONTROLS\r
+;\r
+CNTRLS:        LDA PLAYER\r
+       AND I,B.BMOV            ;BALL IN MOTION?\r
+       BEQ 11$                 ;NO. PROCESS CONTROLS\r
+       JMP PLAY                ;YES. SKIP CONTROLS AND POINTER.\r
+11$:   LDA PLAYER\r
+       BMI 4$                  ;ATTRACT MODE. SKIP CONTROLS.\r
+       ASL                     ;START SW LOCKOUT?\r
+       BPL 2$                  ;NO. IGNORE NEW HOLE\r
+       LDA CONTRL\r
+       AND I,B.NEXT            ;MOVE TO NEW HOLE?\r
+       BEQ 1$                  ;YES\r
+       LDA I,0\r
+       STA DBOUNC\r
+       BEQ 2$                  ;(ALWAYS)\r
+1$:    INC DBOUNC\r
+       LDA DBOUNC\r
+       CMP I,8\r
+       BNE 2$\r
+       LDA STRKW               ;WAS THE HOLE STARTED?\r
+       ORA STRKB\r
+       BEQ 22$                 ;NO ONE TOOK A STROKE\r
+       LDX I,0                 ;START WITH WHITE\r
+       LDA I,B.WHDN\r
+19$:   BIT STRTER              ;PLAYER STILL IN?\r
+       BNE 21$                 ;NO.\r
+20$:   LDA I,MAXSTK\r
+       SUB <ZX,STRKW>          ;COMPUTE PENALITY\r
+       ADD <ZX,SCORE>\r
+       STA ZX,SCORE            ;ALWAYS COSTS 6 STROKES TO SKIP A HOLE\r
+21$:   TXA\r
+       BNE 22$                 ;DONE WITH BOTH PLAYERS\r
+       LDA I,B.BKDN\r
+       INX                     ;SWITCH TO BLACK\r
+       BNE 19$                 ;(ALWAYS)\r
+22$:   LDA STRTER\r
+       AND I,B.PLY!B.BSTR      ;2 PLAYER?\r
+       BEQ 23$                 ;NO\r
+       LDA STRTER              ;SWITCH PLAYERS\r
+       EOR I,B.PLY\r
+       STA STRTER              ;BECAUSE NUHOLE DOES TOO!\r
+23$:   JMP NUHOLE\r
+2$:    LDA Z,FRMCNT\r
+       AND I,03\r
+       BNE POINT\r
+       INC Z,FRAME             ;SHOT TIMER\r
+       BEQ 10$                 ;TIMER UP\r
+       LDA FRAME\r
+       AND I,0F\r
+       BNE POINT\r
+       LDA SREG                ;MAKING NOISE?\r
+       ORA SNDCTL\r
+       BNE POINT               ;YES. IGNORE CLOCK SOUND\r
+       LDA FRAME\r
+       LSRS 3\r
+       ORA #0E0\r
+       AND #0FE\r
+       STA SNDCTL+1            ;SET UP TONE\r
+       LDA #3                  ;TONE FOR 2 FRAMES\r
+       STA SNDCTL              ;FOOL THE SOUND ROUTINE\r
+4$:    BNE POINT               ;(ALWAYS)\r
+10$:   LDA PLAYER\r
+       ORA I,B.SQR             ;START THE SQUIRREL\r
+       STA Z,PLAYER\r
+       LDA I,0FE\r
+       STA Z,SQRLX             ;SQUIRREL POSITION\r
+       LDA SAVEX\r
+       EOR I,4                 ;USE THE OTHER OBJECT\r
+       TAX\r
+       LDA ZX,OBJPIX           ;SAVE BALL'S PICTURE\r
+       STA OLDBPX\r
+       LDA ZX,XPOS+1\r
+       STA Z,OLDBX             ;SAVE BALL X POSITION\r
+       LDA ZX,YPOS+1\r
+       STA SQRLY               ;AND Y\r
+       EMSG CORSE              ;ERASE 'COURSE'\r
+       LDY I,20\r
+       STA NY,R2               ;AND #\r
+       LDY I,40\r
+       STA NY,R2\r
+JMPPLY:        JMP PLAY\r
+;\r
+;BALL POINTER CONTROL\r
+;\r
+POINT: LDX SAVEX               ;PLAYER INDEX\r
+       LDA DIRECT\r
+       AND I,3F                ;SET DIRECT TO 6 BITS\r
+       STA DIRECT\r
+       LDA FRMCNT\r
+       LSR                     ;EVEN FRAME?\r
+       BCS 3$                  ;NO. GO DO DOT MOTION\r
+       LDY I,0                 ;BIG BALL PIX\r
+       JSR SWAPC               ;SWAP CO-ORDINATES\r
+       BNE 9$                  ;(ALWAYS)\r
+3$:    MOV R8,VEL              ;PUT VELOCITY INTO R8\r
+       LDY I,COSPOL            ;START WITH X\r
+       LDX I,R6                ;ADDR OF DEST\r
+       LDA I,10                ;PHASE SHIFT 90 DEGREES (COSINE REQUEST)\r
+       JSR CMPTXY              ;COMPUTE DELTA X\r
+       LDX SAVEX\r
+       ADDM <ZX,XPOS>,R6       ;UPDATE X\r
+       LDY I,SINPOL            ;FINISH UP BY DOING Y\r
+       LDX I,R6\r
+       LDA I,0                 ;SINE REQUEST\r
+       JSR CMPTXY\r
+       LDX SAVEX\r
+       ADDM <ZX,YPOS>,R6       ;UPDATE Y\r
+       LDY VEL+1\r
+       INY                     ; MOVE  AT 1 LINE PER FRAME\r
+       CPY I,12.               ;BUT ONLY FOR 12 LINES\r
+       BCC 5$\r
+       LDY I,0                 ;ELSE RESET BACK TO 0\r
+5$:    STY VEL+1\r
+       LDY I,1                 ;GO CHANGE PIX TO LITTLE BALL\r
+       LDX SAVEX\r
+       JSR SWAPP               ;SWAP PIX\r
+9$:    BIT PLAYER              ;ATTRACT MODE?\r
+       BMI JMPPLY              ;YEP. IGNORE PLUNGER\r
+       BPL PLUNGE              ;(ALWAYS)\r
+\r
+SWAPC: LDA PNTRX\r
+       STA ZX,XPOS+1\r
+       LDA PNTRY\r
+       STA ZX,YPOS+1\r
+SWAPP: LDA I,BLANK\r
+       STA ZX,OBJPIX+1         ;LOWER\r
+       TYA\r
+       ADD <I,BB>              ;COMPUTE PICTURE NUMBER\r
+       STA ZX,OBJPIX           ;UPPER\r
+       RTS\r
+\r
+BB     =08             ;BIG BALL PIX #\r
+LB     =09             ;LITTLE BALL PIX #\r
+       .PAGE\r
+;\r
+;WAITING FOR THE BALL TO BE HIT\r
+PLUNGE: LDA SPOOL              ;ANY SHOTS LEFT?\r
+       BNE 6$                  ;YEP.\r
+       JMP SETATR              ;GAME OVER\r
+6$:    LDA PLUNG+1             ;PLUNGER FINISHED?\r
+       BNE 2$                  ;YES\r
+       LDA CONTRL              ;PLUNGER OVERFLOW?\r
+       AND I,B.PG1\r
+       BEQ 5$                  ;YES\r
+       STA NMIEN               ;NO. ENABLE NMI'S\r
+5$:    JMP PLAY\r
+2$:    DEC PLUNG+1             ;SUBTRACT 1\r
+       MULT VEL,PLUNG,#60      ;VEL=0.75*PLUNG + 1.5\r
+       LDA VEL\r
+       ADD #80\r
+       STA VEL                 ;ADD 1.5\r
+       LDA VEL+1\r
+       ADC #1\r
+       STA VEL+1\r
+       CLR <PLUNG+1,NMIDIS>\r
+       LDA #S.CLUB\r
+       STA SREG\r
+       LDA I,B.SLOK            ;LOCKS OUT FURTHER STARTS\r
+       ORA PLAYER\r
+       STA PLAYER\r
+       DEC SPOOL               ;TAKE A SHOT FROM POOL\r
+SBIM:  LDY I,0                 ;BIG BALL PIX\r
+       LDX SAVEX               ;INDEX=>X\r
+       JSR SWAPC               ;MAKE SURE THE RIGHT POSITION HERE\r
+       LDA SAVEX\r
+       EOR I,4\r
+       TAY\r
+       LDA I,B.SQR\r
+       BIT PLAYER              ;SQUIRREL RUNNING?\r
+       BEQ 1$                  ;NO, NEVER MIND.\r
+       EOR I,0FF               ;YES\r
+       AND PLAYER\r
+       STA PLAYER              ;STOP THE SQUIRREL\r
+       LDX OLDBPX              ;RESTORE OLD PICTURE\r
+       STX ZY,OBJPIX\r
+       LDX I,BLANK\r
+       STX ZY,OBJPIX+1\r
+       LDX OLDBX               ;PUT IT WHERE IT\r
+       STX ZY,XPOS+1           ; BELONGS\r
+       LDX SQRLY\r
+       STX ZY,YPOS+1\r
+       EMSG LOST               ;ERASE 'TOO LONG'\r
+       JSR WCMSG               ;RE-WRITE 'COURSE XX'\r
+       LDX SAVEX               ;RESTORE X\r
+1$:    LDA I,BB\r
+       STA ZX,OBJPIX           ;SELECT BALL PIX\r
+       LDA SAVEX\r
+       LSRS 2\r
+       TAX\r
+       BIT PLAYER              ;ATTRACT?\r
+       BMI 5$                  ;YES\r
+       INC ZX,STRKW            ;COUNT STROKE\r
+;\r
+;INCREMENT PAR AND SCORE\r
+;\r
+       LDA I,1                 ;FIRST STROKE?\r
+       CMP ZX,STRKW\r
+       BNE 3$                  ;NO\r
+       TXA\r
+       BEQ 6$                  ;WHITE PLAYER, SO INCREMENT\r
+       LDA I,B.WHDN            ;SPECIAL SQUIRREL CHECK\r
+       BIT STRTER              ;DID SQUIRREL TAKE WHITE BALL?\r
+       BEQ 3$                  ;NO, SO SKIP INCREMENT\r
+6$:    INC PAR                 ;BUMP PAR ON FIRST STROKE OF HOLE\r
+3$:    INC ZX,SCORE            ;GIVE 'IM A STROKE\r
+5$:    LDA I,MINDCL            ;START WITH MINIMUM DECELERATION\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BPL 2$                  ;NOPE. USE NORMAL FRICTION\r
+       LDA I,MINDCL/2          ;ELSE USE HALF OF NORMAL\r
+2$:    STA ACCEL\r
+       LDA PLAYER\r
+       ORA I,B.BMOV            ;PUT BALL IN MOTION\r
+       STA PLAYER\r
+       JMP PLAY\r
+       .PAGE\r
+;\r
+;PLAYER TOOK TOO MUCH TIME\r
+;\r
+SQUIRL:        LDA SAVEX\r
+       EOR I,4\r
+       TAX\r
+       LDA SNDCTL+2            ;GET INTERRUPT COUNTER\r
+       AND #0FC                ;GET THE FRAME BITS\r
+       CMP #60                 ;TIME?\r
+       BCC 1$                  ;NOPE\r
+       EOR SNDCTL+2            ;YES. RESET TIMER\r
+       STA SNDCTL+2\r
+       LDA #S.SQR\r
+       STA SREG                ;MAKE SQUIRREL SOUND\r
+1$:    LDA FRMCNT              ;EVEN FRAME?\r
+       LSR                     ;PIX SWAP?\r
+       BCC 10$                 ;EVEN\r
+       LDA SQRLX\r
+       AND I,0C\r
+       LSRS 2\r
+       STA ZX,OBJPIX           ;UPPER\r
+       ORA I,4\r
+       STA ZX,OBJPIX+1         ;LOWER\r
+       LDA PNTRY               ;PUT SQUIRL ON TV\r
+       ADC I,6                 ;MOVE THE SQUIRL UP A LITTLE\r
+       STA ZX,YPOS+1\r
+       LDA SQRLX\r
+       STA ZX,XPOS+1\r
+       BCC 11$                 ;(ALWAYS)\r
+10$:   LDA OLDBPX\r
+       STA ZX,OBJPIX           ;BALL PICTURE (UPPER)\r
+       LDA I,BLANK\r
+       STA ZX,OBJPIX+1         ;(LOWER)\r
+       LDA OLDBX\r
+       STA ZX,XPOS+1           ;BALL POSITION\r
+       LDA SQRLY\r
+       STA ZX,YPOS+1\r
+       LDA FRAME\r
+       CMP I,4                 ;INITIAL TIME?\r
+       BCC 2$                  ;YES. MOVE\r
+       CMP I,45.               ;WAIT PERIOD?\r
+       BCC 11$                 ;YES. DON'T MOVE\r
+2$:    DEC Z,SQRLX             ;MOVE SQUIRREL\r
+       DEC Z,SQRLX             ;SQUIRREL FINISHED?\r
+       BNE 11$                 ;NO.\r
+       LDA STRTER\r
+       ORA I,B.STOP\r
+       STA STRTER\r
+       LDA OLDBPX              ;RESTORE OLD PICTURE\r
+       STA ZX,OBJPIX\r
+       LDA I,BLANK             ;CLEAR LOWER HALF\r
+       STA ZX,OBJPIX+1\r
+       DEC SPOOL\r
+       BEQ 30$\r
+       DEC SPOOL               ;SQUIRREL COSTS TWO STROKES FROM POOL\r
+       BEQ 30$\r
+       LDA SAVEX               ;GET CURRENT PLAYER INDEX\r
+       LSRS 2\r
+       TAX\r
+       LDA I,MAXSTK            ;COMPUTE PENALTY\r
+       SUB <ZX,STRKW>\r
+       ADD <ZX,SCORE>          ;APPLY IT\r
+       STA ZX,SCORE\r
+       EMSG LOST               ;ERASE 'TOO LONG'\r
+       JSR WCMSG               ;PUT UP COURSE\r
+       JMP WHOSUP              ;CHANGE STATE\r
+11$:   LDA SQRLX               ;GET SQUIRRELS POSITION\r
+       SUB <I,0A>              ;-10\r
+       CMP PNTRX               ;MATCH BALL'S POSITION?\r
+       BCS 13$                 ;NO.\r
+       TAX                     ;USE SQUIRREL'S POSITION FOR THE BALL\r
+       INX                     ;AND MAKE SURE THAT THE ABOVE TEST FAILS AGAIN\r
+       STX PNTRX\r
+       CLR <NMIDIS,PLUNG+1>    ;CANCEL THE PLUNGER\r
+       LDX SAVEX\r
+       LDY I,0                 ;BIG BALL\r
+       JSR SWAPC               ;MAKE SURE OF PIX\r
+12$:   JMP PLAY\r
+13$:   JMP CNTRLS              ;LET HIM HIT THE BALL BEFORE SQUIRREL GETS IT\r
+30$:   JMP SETATR              ;GAME OVER\r
+\r
+CHKS1K:        .BYTE 55                ;CHECK SUM BYTE 2400-27FF\r
+\f      .SBTTL COURSE SELECT AND NUMBER\r
+PUTCRS: JSR CLEAR\r
+       CLI                     ;(CLEAR SETS MASK)\r
+       LDA POLYL               ;GET A RANDOM NUMBER\r
+       STA RANDOM\r
+       INC HOLE\r
+       LDA HOLE\r
+       AND I,0F\r
+       STA HOLE\r
+       JSR COURSE\r
+       LDA STRTER\r
+       AND I,B.PLY!B.BSTR\r
+       BEQ 2$                  ;1 PLAYER MODE\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BMI 2$                  ;YES. ALWAYS USE WHITE\r
+       LDA STRTER\r
+       EOR I,B.PLY\r
+       STA STRTER              ;SWITCH PLAYERS\r
+       ASL\r
+       BPL 2$                  ;WHITE'S UP\r
+       LDA I,4\r
+       STA SAVEX\r
+2$:    LDA SAVEX\r
+       LDA Z,TEEY              ;SET WHITE BALL ON TEE\r
+       STA ZX,YPOS+1\r
+       STA PNTRY               ;SAVE A COPY FOR THE POINTER\r
+       LDA Z,TEEX\r
+       STA ZX,XPOS+1\r
+       STA PNTRX\r
+       LDA POLYL               ;POINT BALL IN RANDOM DIRECTION\r
+       STA DIRECT\r
+       LDA SPOOL               ;SHOTS LEFT?\r
+       BEQ 1$                  ;NO. DON'T WORRY ABOUT IT THEN\r
+       MSG WH,REM1             ;WRITE SHOTS REMAINING\r
+       BIT PLAYER              ;ATTRACT MODE?\r
+       BMI 1$                  ;YEP. NO MESSAGE RQD\r
+       LDA STRTER\r
+       AND I,B.TUNE            ;BONUS?\r
+       BNE 1$                  ;YEP. SKIP MSG\r
+       JSR WCMSG               ;WRITE COURSE MESSAGE\r
+1$:    RTS\r
+       \r
+WCMSG: MSG WH,CORSE            ;WRITE 'COURSE'\r
+       LDA HOLE                ;TEST DATA => R0\r
+       ADD <I,1>               ;+1\r
+       JSR CVD                 ;PRINT IT\r
+       RTS\r
+       .PAGE\r
+       .SBTTL BALL MOTION\r
+MOVE:  MOV R8,VEL              ;COPY VELOCITY INTO R8\r
+       LDA I,1                 ;START LOOP COUNT @ 1\r
+       PHA\r
+       TSX                     ;GET A COPY OF STACK POINTER\r
+1$:    LDA R9                  ;GET MSB OF VEL\r
+       BEQ 2$                  ;ITS OK\r
+       LSR R9                  ;> OR =2\r
+       ROR R8                  ;DIVIDE BY 2\r
+       ASL ZX,1                ;DOUBLE LOOP COUNT\r
+       BNE 1$                  ;(ALWAYS)\r
+2$:\r
+7$:    CLR <HLCNST,HLCNST+1>\r
+       SAVE DIRECT             ;SAVE THIS\r
+       JSR COLLIS              ;RESET HLCNST IF NECESSARY\r
+       RESTOR DIRECT           ;RESTORE IT\r
+3$:    LDX I,R10               ;DELTA X GOES TO R10,R11\r
+       LDY I,COSPOL\r
+       LDA I,10                ;(COSINE REQUEST)\r
+       JSR CMPTXY              ;COMPUTE DELTA X\r
+       LDX I,R12               ;DELTA Y GOES TO R12,R13\r
+       LDY I,SINPOL\r
+       LDA I,0\r
+       JSR CMPTXY              ;COMPUTE DELTA Y\r
+6$:    LDX SAVEX               ;RESTORE X\r
+       SAVE <<ZX,XPOS+1>,<ZX,XPOS>,<ZX,YPOS+1>,<ZX,YPOS>,DIRECT>\r
+       ADDM <ZX,XPOS>,R10              ;APPLY DELTA X\r
+       ADDM <ZX,YPOS>,R12      ;APPLY DELTA Y\r
+       JSR COLLIS              ;SEE ABOUT COLLISIONS\r
+       LDY I,0                 ;FOR SAFETY'S SAKE\r
+       PLA                     ;GET OLD DIRECTION\r
+       CMP DIRECT              ;COLLISION?\r
+       BEQ 4$                  ;NO. NO PROBLEM\r
+       LDX SAVEX               ;YES. JMP BACK TO OLD POSITION\r
+       RESTOR <<ZX,YPOS>,<ZX,YPOS+1>,<ZX,XPOS>,<ZX,XPOS+1>>\r
+       DEY                     ;SIGNAL CHANGE\r
+       BMI 5$                  ;(ALWAYS)\r
+4$:    PLA                     ;DISCARD OLD POSITION\r
+       PLA\r
+       PLA\r
+       PLA\r
+5$:    TSX\r
+       DEC ZX,1                ;COUNT\r
+       BEQ 10$                 ;DONE.\r
+       TYA                     ;WHAT HAPPENED?\r
+       BPL 6$                  ;NOTHING\r
+       BMI 3$                  ;COLLISION. CHANGE DIRECTION\r
+10$:   PLA                     ;PURGE STACK\r
+       RTS                     ;EXIT\r
+\r
+APPACL:        LDA I,0\r
+       STA R0\r
+       LDA HLCNST              ;GET DELTA A\r
+       ASL\r
+       BCC 3$                  ;ITS +\r
+       DEC R0                  ;SIGN EXTEND\r
+       CLC\r
+3$:    ADC ANG                 ;APPLY DELTA A TO ANGLE\r
+       STA ANG\r
+       LDA R0\r
+       ADC DIRECT\r
+       AND I,3F                ;ONLY TO 6 BITS\r
+       STA DIRECT\r
+       LDA I,0\r
+       STA R0\r
+       LDA HLCNST+1            ;APPLY DELTA V TO VELOCITY\r
+       BPL 2$\r
+       DEC R0                  ;SIGN EXTEND\r
+2$:    CLC\r
+       ADC VEL\r
+       STA VEL\r
+       LDA R0\r
+       ADC VEL+1\r
+       STA VEL+1\r
+       BPL 4$                  ;ITS OK\r
+       LDA I,0                 ;ELSE NEGATE DIRECTION\r
+       SEC\r
+       SBC DIRECT\r
+       AND I,3F                ;ONLY TO 6 BITS\r
+       STA DIRECT\r
+4$:    LDA VEL\r
+       SEC\r
+       SBC ACCEL               ;DECELERATE THE BALL TO DO FRICTION\r
+       STA VEL\r
+       LDA VEL+1\r
+       SBC I,0\r
+       STA VEL+1\r
+8$:    CLC\r
+       BMI 7$                  ;ERROR\r
+       BNE 6$                  ;ITS OK\r
+       LDA HLCNST+1            ;ON A HILL?\r
+       BEQ 5$\r
+6$:    SEC\r
+5$:    RTS\r
+7$:    LDA HLCNST+1            ;ON A HILL\r
+       BEQ 5$                  ;NO.\r
+       LDA VEL\r
+       ADC ACCEL               ;PUT IT BACK\r
+       STA VEL\r
+       LDA VEL+1\r
+       ADC I,0\r
+       STA VEL+1\r
+       JMP 8$\r
+       .PAGE\r
+       .SBTTL MULTIPLY AND NEGATE\r
+;\r
+; AT ENTRY:\r
+; X= ADDRESS OF PRODUCT\r
+; Y= ADDRESS OF MULTIPLICAND\r
+; A= MULTIPLIER\r
+\r
+; AT EXIT:\r
+; X,Y UNCHANGED\r
+; A,R0,R1,R2 DESTROYED\r
+\r
+MULT:  STA R2          ;SAVE MULTIPLIER\r
+       LDA I,0\r
+       STA ZX,0        ;CLEAR PRODUCT INITIALLY\r
+       STA ZX,1        ;(DOUBLE PRECISION OUTPUT)\r
+       LDA AY,0        ;COPY MULTIPLICAND TO R0,R1\r
+       STA R0\r
+       LDA AY,1\r
+       STA R1\r
+3$:    ASL R2          ;PUT MULTPLIER BIT INTO CARRY\r
+       BCS 1$          ;THERE'S ONE THERE\r
+       BNE 2$          ;STILL SOMETHING IN A\r
+       RTS             ;DONE\r
+1$:    CLC             ;ACCUMULATE PRODUCT\r
+       LDA R0\r
+       ADC ZX,0\r
+       STA ZX,0\r
+       LDA R1\r
+       ADC ZX,1\r
+       STA ZX,1\r
+2$:    LDA R1          ;PROPAGATE SIGN BIT\r
+       ASL\r
+       ROR R1\r
+       ROR R0          ;WHILE HALVING MULTIPLICAND\r
+       JMP 3$          ;KEEP RUNNING\r
+\r
+NEGATE:        SEC                     ;NEGATE DOUBLE BYTE VALUE AT (X)\r
+       LDA I,0                 ;BY SUBTRACTING IT FROM 0\r
+       SBC ZX,0\r
+       STA ZX,0\r
+       LDA I,0\r
+       SBC ZX,1\r
+       STA ZX,1\r
+       CLC\r
+       RTS\r
+       .PAGE\r
+       .SBTTL COMPUTE X,Y POSITIONS\r
+\r
+; THIS ROUTINE COMPUTES NEW X AND Y POSITIONS OF BALL\r
+; AT ENTRY:\r
+; A = 10 FOR X POSITION, 0 FOR Y POSITION\r
+; Y = COSPOL FOR X POSITION, SINPOL FOR Y POSITION\r
+; X = ADDRESS OF REGISTER PAIR TO BE DESTINATION\r
+\r
+; AT EXIT:\r
+; A,Y,R0,R1,R2,R3,R4,R5,R6 DESTROYED\r
+; (X)=R8*SIN[COS](DIRECT)\r
+; X UNCHANGED\r
+\r
+CMPTXY:        STY R4          ;SAVE SINPOL [OR COSPOL]\r
+       JSR SINCOS      ;ACC = SIN(DIRECT) [COS(DIRECT)]; QUAD =>R3\r
+       MULT ,R8        ;(X)=VEL*SIN(DIRECT) [COS(DIRECT)\r
+       LDY R3          ;GET QUADRANT\r
+       LDA R4          ;GET POLARITY TABLE FOR SINE [COSINE]\r
+1$:    LSR             ;PUT QUADRANT POLARITY INTO CARRY\r
+       DEY\r
+       BPL 1$\r
+       BCC 2$          ;+\r
+       JSR NEGATE      ; (X)=-(X)\r
+2$:    RTS             ;DONE\r
+\r
+SINPOL =^B1100         ;SINE + IN QUAD I,II; - IN III,IV\r
+COSPOL =^B0110         ;COSINE + IN QUAD I,IV; - IN II,III\r
+\r
+;SINE/COSINE LOOKUP ROUTINE\r
+;AT ENTRY:\r
+;ACC = 0 FOR SINE; 10 FOR COSINE (90 DEGREE PHASE SHIFT)\r
+;AT EXIT:\r
+; ACC= SIN(DIRECT) [COS(DIRECT)]\r
+; R0 DESTROYED\r
+\r
+SINCOS:        EOR DIRECT      ;APPLY PHASE SHIFT\r
+       STA R3          ;KEEP RESULT\r
+       STX R0          ;SAVE X\r
+       ASLS 4          ;PUT 2^4 INTO CARRY\r
+       LDA R3\r
+       AND I,0F        ;GET THE ANGLE BITS ARE NEEDED\r
+       BCC 1$          ;THEY ARE OK AS IS\r
+       EOR I,0F        ;NEGATE THEM TO 5 BITS\r
+       ADC I,0         ; (CARRY ALREADY SET)\r
+1$:    TAX             ;PREPARE FOR TABLE LOOKUP\r
+       LDA DIRECT      ;GET QUADRANT\r
+       LSRS 4          ;INTO 2 LSB'S\r
+       STA R3          ;PASS IT BACK\r
+       LDA AX,SINE     ;GET SINE/COSINE\r
+       LDX R0          ;RESTORE X\r
+       RTS             ;DONE\r
+\r
+SINE:  .BYTE 000,00C,019,025,031,03C,047,051\r
+       .BYTE 05A,063,06A,071,076,07A,07D,07F,080\r
+       .PAGE\r
+       .SBTTL RANDOM NUMBER STUFF\r
+;\r
+;RAND-RANDOM NUMBER GENERATOR\r
+;\r
+; (A)=RANDOM NUMBER\r
+;\r
+RAND:  ASL POLYL\r
+       ROL POLYH\r
+       BPL 1$\r
+       INC POLYL\r
+1$:    LDA POLYL               ;CHANGE BIT 0 DEPENDING ON BIT 1\r
+       AND I,2\r
+       BEQ 2$\r
+       LDA POLYL\r
+       EOR I,1\r
+       STA POLYL\r
+2$:    LDA POLYH               ;CHECK FOR ZERO\r
+       ORA POLYL\r
+       BNE 3$\r
+       INC POLYL\r
+3$:    RTS\r
+       .PAGE\r
+       .SBTTL COLLISION DETECTION\r
+       .REPT 0\r
+THIS ROUTINE DOES COLLISION DETECTION BETWEEN THE MOVING BALL\r
+AND A PLAYFIELD STAMP. THERE ARE 28 DIFFERENT TYPES OF STAMPS\r
+INTO WHICH THE BALL MAY COLLIDE.\r
+       \r
+THE PRE-REQUISITE TO THIS ROUTINE'S OPERTAION IS THAT THE BALL STEP\r
+NO MORE THAN 1 LINE INTO THE STAMP PICTURE. THIS IS ACCOMPLISHED\r
+ON THE FASTER VELOCITIES BY DIVIDING THE VELOCITY DOWN UNITL IT\r
+IS EQUAL TO OR LESS THAN 1 AND THEN EXECUTING THIS ROUTINE\r
+UNTIL THE EFFECTIVE VELOCITY IS ACHIEVED.\r
+       \r
+AT ENTRY:\r
+ R8,R9=VELOCITY (ADJUSTED TO =< 1)\r
+\r
+AT EXIT:\r
+ A,X,Y,R0,R1,R2,R3,R4,R5,R6,R7 DESTROYED\r
+ SREG=SOUND TO MAKE, HLCNST=HILL CONSTANTS\r
+\r
+INTERNAL ASSIGNMENTS:\r
+ R0,R1-PLYFLD ADDRESS OF STAMP TO TEST\r
+ R2-X OFFSET\r
+ R3-Y OFFSET\r
+ R4- X+Y\r
+ R5- X-Y\r
+\r
+       .ENDR\r
+\r
+OFFS   =R2\r
+\r
+       .ENABL LSB\r
+COLLIS:        LDX SAVEX               ;GET PLAYER INDEX\r
+       LDA ZX,OBJPIX           ;BALL BLANK?\r
+       BEQ NULL                ;YEP. JUST EXIT\r
+       JSR CPPLYA              ;GET PLAYFIELD LOC OF BALL\r
+       LDY I,21                ;(STAMP 4)\r
+2$:    LDA NY,R0               ;GET STAMP BALL IS ON TOP OF\r
+       BEQ NULL                ;NO COLLISION\r
+1$:    CMP I,98                ;INVISIBLE BARRIER?\r
+       BEQ NULL                ;YEP.\r
+       AND I,78\r
+       BEQ 3$                  ;SPECIAL STAMP\r
+       CMP I,20                ;WATER?\r
+       BNE 5$                  ;NOPE\r
+JWTR:  JMP WATER\r
+5$:    CMP I,60                ;HILLS?\r
+       BCS 6$                  ;YEP\r
+       CMP I,8                 ;SAND?\r
+       BNE 8$                  ;NOPE\r
+       JMP SAND                ;YEP\r
+8$:    AND I,70\r
+       CMP I,10                ;BARRIER?\r
+       BEQ BARTST              ;YES\r
+9$:    INY                     ;SKIP UP 1 STAMP\r
+       CPY I,22                ;(TO KEEP FROM GETTING LOCKED UP)\r
+       BEQ 2$                  ;TRY AGAIN\r
+       BNE JWTR                ;TROUBLE. RESET\r
+6$:    CMP I,68                ;CONTOURS?\r
+       BCS 9$                  ;NO\r
+       LDA NY,R0               ;GET STAMP DATA\r
+       AND I,4                 ;GET POLARITY BIT (UP/DOWN)\r
+       ASLS 3                  ;MAKE IT THE MSB OF DIRECTION\r
+       JMP HILL                ;EXECUTE HILL STUFF\r
+3$:    LDA R2\r
+       ADD R3\r
+       STA R4                  ;X+Y\r
+       LDA R2\r
+       SUB R3\r
+       STA R5                  ;X-Y\r
+       LDA NY,R0               ;GET STAMP\r
+       ASL                     ;MAKE IT AN INDEX\r
+       TAX\r
+       LDA AX,SRVTBL+1         ;GET SERVICE ROUTINE ADDRESS\r
+       PHA\r
+       LDA AX,SRVTBL\r
+       PHA\r
+NULL:  RTS                     ;GO TO SERVICE ROUTINE\r
+       .DSABL LSB\r
+               \r
+       .MACRO SVC LAB          ;SUBROUTINE CALL\r
+       .WORD LAB-1\r
+       .ENDM\r
+       \r
+SRVTBL:        SVC NULL\r
+       SVC SOLID\r
+       SVC WATER\r
+       SVC AHOLE\r
+       SVC DIAG0               ;LOWER LEFT\r
+       SVC DIAG1               ;UPPER LEFT\r
+       SVC DIAG2               ;UPPER RIGHT\r
+       SVC DIAG3               ;LOWER RIGHT\r
+       .GLOBL CPPLYA,SLDTST\r
+CPPLYA:\r
+       LDA ZX,XPOS+1           ;COMPUTE X OFFSET\r
+       SUB <I,10>              ;ADJUST\r
+       TAY                     ;SAVE IT FOR A SEC\r
+       AND I,7\r
+       STA R2                  ;SAVE X OFFSET\r
+       TYA\r
+       AND I,0F8\r
+       ASL                     ;PUT '1' BIT INTO CARRY\r
+       STA R0\r
+       LDA I,PLYFLD/400        ;INITIALIZE A\r
+       ROL                     ;PUT THE BIT INTO A\r
+       ASL R0                  ;PUT ANOTHER BIT INTO CARRY\r
+       ROL                     ;AND THEN INTO A\r
+       STA R1                  ;MSB OF PLYFLD ADDRESS\r
+       LDA ZX,YPOS+1           ;GET Y\r
+       SBC I,0C                ;COMPUTE Y\r
+       TAY                     ;SAVE IT FOR A SEC\r
+       AND I,7\r
+       STA R3                  ;SAVE Y OFFSET\r
+       TYA\r
+       LSRS 3                  ;DIVIDE OUT OFFSET\r
+       ORA R0                  ;MERGE INTO FINAL ADDRESS\r
+       STA R0                  ;R0,R1 NOW POINTS TO LOWER LEFT STAMP\r
+       RTS\r
+       .PAGE\r
+BARTST:        LDA NY,R0               ;GET BARRIER #\r
+       AND I,0F                ;SOLID?\r
+       BEQ SOLID               ;YEP\r
+       LDX SAVEX\r
+       STA R4                  ;SAVE PIX #\r
+       AND I,8                 ;UPPER?\r
+       BNE 1$                  ;YES\r
+       LDA R3                  ;GET Y OFFSET\r
+       CMP R4                  ;MATCH PIX #?\r
+       BCC NULL                ;ITS A MISS\r
+       BNE SOLID               ;NOT ON THE EDGE\r
+4$:    LDA I,0                 ;FOOL THE SOLID ROUTINE\r
+       BEQ 3$                  ;(ALWAYS)\r
+1$:    EOR R4                  ;DROP BIT AND GET PIX #\r
+       CMP R3                  ;MATCH Y OFFSET?\r
+       BCC NULL                ;ITS A MISS\r
+       BNE SOLID               ;NOT ON THE EDGE\r
+       LDA I,7                 ;FOOL THE SOLID ROUTINE\r
+3$:    STA R3                  ;ADJUST Y OFFSET\r
+;      BPL SOLID               ;GO TO SOLID PROCESSOR (FALL THRU)\r
+       .PAGE\r
+       .ENABL LSB\r
+SOLID: LDA OFFS        ;GET X OFFSET\r
+       LDY I,0\r
+       CMP I,1         ;X < 1?(ON LEFT)?\r
+       BCC 1$          ;YES. SPECIAL CHECK REQUIRED\r
+       INY\r
+       CMP I,7         ;X > 6? ON RIGHT\r
+       BCC 1$          ;NO.\r
+       INY\r
+1$:    LDX OFFS+1      ;GET Y OFFSET\r
+       CPX I,1         ;Y < 1?\r
+       BCC 9$          ;YEP. SPECIAL CHECK REQUIRED\r
+       INYS 4\r
+       CPX I,7         ;Y > 7?\r
+       BCC 9$          ;NO. SPECIAL CHECK REQUIRED\r
+       INYS 4\r
+9$:    JSR JND         ;PUT PC ON STACK\r
+JND:   TSX\r
+       CLC\r
+       LDA AY,SLDT.4   ;GET OFFSET TO SERVICE ROUTINE\r
+       ADC ZX,1        ;COMPUTE ADDRESS\r
+       STA ZX,1\r
+       BCC 11$\r
+       INC ZX,2\r
+11$:   LDA DIRECT      ;INITIALISE A\r
+       RTS             ;JMP @SLDT.4(Y)\r
+WLL.C: LDX AY,SLDT.5\r
+       LDY AX,SLDT.0   ;GET SQUARE # TO TEST\r
+       JSR SLDTST      ;IS IT A SOLID?\r
+       BCC 5$          ;NO.\r
+       LDY AX,SLDT.0+1\r
+       JSR SLDTST      ;TEST THE OTHER SQUARE\r
+       BCC 6$          ;ITS A SPACE\r
+       BCS BNCDIA      ;BOUNCE OFF DIAGONAL\r
+5$:    LDY AX,SLDT.0+1 ;FIRST ONE'S A BLANK\r
+       JSR SLDTST      ;CHECK THE SECOND ONE\r
+       BCS 8$          ;ITS A SOLID. BOUNCE OFF A WALL\r
+BNCDIA:        LDA DIRECT      ;SPACES ON BOTH SIDES\r
+       ADD <I,8>       ;SKEW 45 DEG\r
+       LSRS 2          ;RHO IS THEN A\r
+       AND I,0C        ; FUNCTION OF CURRENT\r
+       STA R4          ; DIRECTION\r
+       TXA             ;  THEREFORE IT MUST BE COMPUTED\r
+       LSR\r
+       ORA R4\r
+       TAX\r
+       LDY AX,SLDT.2   ;GET RHO FOR 'STUBS'\r
+       BPL 3$          ;RHO IS OK\r
+       RTS             ;RHO IS UNDEFINED\r
+6$:    LDY AX,SLDT.0   ;FIRST IS A SOLID,SECOND IS A SPACE\r
+       INX             ;REVERSE THE SENSE\r
+8$:    TXA             ;COMPUTE RHO INDEX FOR CORNERS\r
+       STA R4          ;KEEP LOW ORDER BIT\r
+       LSRS 2          ;GET HIGH ORDER BIT\r
+       EOR R4\r
+       LSR             ;PUT BIT INTO CARRY\r
+       BCS 2$          ;BOUNCE HORIZ\r
+       BCC 10$         ;BOUNCE VERT\r
+WLL.T: CMP I,21        ;TOP WALL\r
+       BCS 2$          ;>20. BOUNCE HORIZONTAL\r
+WLL.X: RTS\r
+WLL.B: BEQ WLL.X       ;BOTTOM WALL.=0 NO GOOD\r
+       CMP I,20\r
+       BCS WLL.X       ;>20 .NO GOOD\r
+2$:    LDY I,0         ;BOUNCE HORIZONTAL\r
+3$:    JMP BNCE\r
+WLL.L: CMP I,10        ;LEFT SIDE. <10?\r
+       BCC 10$         ;YES. BOUNCE OFF VERT VALL\r
+       CMP I,31        ;<30?\r
+       BCC WLL.X       ;YES. NO GOOD\r
+10$:   LDY I,20        ;BOUNCE OFF VERT WALL\r
+       BNE 3$          ;(ALWAYS)\r
+WLL.R: CMP I,11        ;RIGHT WALL. >10?\r
+       BCC WLL.X       ;NO. NO GOOD\r
+       CMP I,30        ;< 30?\r
+       BCC 10$         ;YES. BOUNCE OFF VERT WALL\r
+       BCS WLL.X       ;NO GOOD\r
+WLL.TR:        JMP WATER       ;REAL BAD NEWS\r
+       .DSABL LSB\r
+\r
+SLDTST:        LDA NY,R0               ;GET STAMP\r
+       CMP I,1                 ;SOLID?\r
+       BEQ 1$                  ;YES (C=1)\r
+       AND I,-4\r
+       CMP I,4                 ;DIAG?\r
+       BEQ 2$                  ;YES (C=1)\r
+       CMP I,98                ;BLANK BARRIER?\r
+       BEQ 3$                  ;YEP. N.F.G.\r
+       AND I,0F0\r
+       CMP I,90                ;BARRIER?\r
+       BEQ 1$                  ;YES\r
+3$:    CLC                     ;NO BOUNCE ALLOWED\r
+2$:    LDA I,80                ;SET MINUS FLAG FOR DIAG ROUTINE\r
+1$:    RTS\r
+\r
+SLDT.0:        .BYTE 1,20,1,22,20,41,22,41\r
+SLDT.1:        .BYTE 30,0,10,0,10,0,30,0\r
+SLDT.2:        .BYTE 30,10,80,80\r
+       .BYTE 30,80,10,80\r
+       .BYTE 80,80,10,30\r
+       .BYTE 80,10,80,30\r
+SLDT.3:        .BYTE 6,30,7,10,5,10,4,30\r
+       .MACRO SLDSVC LABL\r
+       .IRP XYZ,<LABL>\r
+       .BYTE WLL.'XYZ-JND\r
+       .ENDR\r
+       .ENDM\r
+SLDT.4:        SLDSVC <C,B,C,TR,L,TR,R,TR,C,T,C,TR,TR,TR,TR,TR>        \r
+SLDT.5:        .BYTE 0,0,4,0,0,0,0,0,2,0,6\r
+       .PAGE\r
+       .SBTTL COLLISION: DIAGONAL PROCESSOR\r
+\r
+       .ENABL LSB\r
+DIAG0: LDA I,7\r
+       CMP R4          ;X+Y =< 7?\r
+       BCS DIAGT       ;YEP.\r
+DIAEND:        RTS             ;NO. IGNORE STAMP\r
+DIAG1: LDA R5          ;X-Y =< 0?\r
+       BMI DIAGT       ;YES\r
+       BEQ DIAGT       ;YES\r
+       RTS             ;NO\r
+DIAG2: LDA R4\r
+       CMP I,7         ;X+Y >= 7?\r
+       BCS DIAGT       ;YEP\r
+       RTS             ;NO.\r
+DIAG3: LDA R5          ;X-Y >= 0?\r
+       BMI DIAEND      ;NO\r
+DIAGT: CLV             ;(SOMETHING TO ALWAYS BRANCH ON)\r
+       LDA AX,OFSTBL-7 ;CHECK OFFSETS (START WITH Y)\r
+       BEQ 1$          ;CHECKING AGAINST 7\r
+       LSR             ;DROP BIT\r
+       CMP R3          ;CHECK Y AGAINST 0\r
+       BVC 2$          ;(ALWAYS)\r
+1$:    LDA R3\r
+       CMP I,7\r
+2$:    ROR R4          ;SAVE RESULT OF TEST (CARRY)\r
+       LDA AX,OFSTBL-8 ;GET X TEST\r
+       BEQ 3$          ;CHECK AGAINST 7\r
+       LSR             ;DROP BIT\r
+       CMP R2          ;ELSE CHECK AGAINST 0\r
+       BVC 4$          ;(ALWAYS)\r
+3$:    LDA R2\r
+       CMP I,7\r
+4$:    LDA R4          ;GET PREVIOUS RESULT\r
+       ROR             ;PUT IN CURRENT RESULT\r
+       AND I,0C0       ;MASK TO ONLY THE RESULTS\r
+       BNE 5$          ;WE'RE ON AN EDGE\r
+DI.CNV:        LDA AX,BNCVT-8\r
+       TAX\r
+       JMP BNCDIA\r
+5$:    CMP I,0C0       ;X & Y?\r
+       BNE XORY        ;NO. ITS X 'OR' Y\r
+       JMP SOLID       ;ITS X 'AND' Y\r
+       .DSABL LSB\r
+JBNCE: JMP BNCE\r
+\r
+XOYOT: .BYTE 20,1,22,1,22,41,20,41\r
+\r
+       .ENABL LSB\r
+XORY:  ASL\r
+       ROL R4          ;SAVE THE X BIT\r
+       TXA\r
+       LDY I,30        ;SET RHO=270\r
+       LSRS 2          ;STAMP # EVEN?\r
+       BCC 1$          ;YES\r
+       LDY I,10        ;ELSE SWITCH TO 90\r
+1$:    LSR             ;RANGE TEST 'AND'?\r
+       BCS 2$          ;NO. ITS 'OR'\r
+       LDA DIRECT\r
+       CMP AX,XYAND-8  ;DO 'AND' RANGE TEST\r
+       BCC 3$          ;FAIL\r
+       CMP AX,XYAND-7\r
+       BCC BNCE        ;PASS\r
+       BEQ BNCE        ;PASS\r
+3$:    TXA             ;FAIL\r
+       LSR R4          ;PUT X BIT INTO CARRY\r
+       ADC I,0         ;ADD IT TO ADDRESS\r
+       TAX             ;UPDATE THE INDEX\r
+       STY R4          ;SAVE CURRENT RHO FOR LATER\r
+       LDY AX,XOYOT-8  ;GET STAMP ADDRESS\r
+       JSR SLDTST      ;FIGURE THE TYPE\r
+       BCS 4$          ;ITS A SOLID OR DIAG\r
+6$:    LDY I,20        ;ITS A BLANK. SET RHO=180\r
+       TXA\r
+       LSR             ;STAMP TYPE EVEN OR ODD?\r
+       BCS BNCE        ;EVEN\r
+       LDY I,0         ;ODD SO SET RHO=0\r
+       BEQ BNCE        ;(ALWAYS)\r
+4$:    BMI 5$          ;ITS A DIAGONAL\r
+8$:    JMP DI.CNV\r
+5$:    LDA NY,R0\r
+       CMP AX,DIATST-8\r
+       BNE 8$\r
+       LDA R4          ;GET ORIGINAL RHO\r
+       EOR I,20        ;MAKE A NEW ONE\r
+DIAG:  TAY\r
+BNCE:  TYA\r
+       SUB DIRECT      ;COMPUTE NEW DIRECTION\r
+       AND I,3F        ;TO 6 BITS\r
+       STA DIRECT\r
+       LDA #S.HIT      ;BEEP OFF WALLS\r
+       STA SREG\r
+RSTSND:        LDA #0\r
+       STA SNDCTL      ;RESET SOUND GENERATOR\r
+       RTS             ;FINALLY DONE\r
+2$:    LDA AX,XYAND-8\r
+       CMP DIRECT\r
+       BCS BNCE        ;PASS\r
+       LDA DIRECT\r
+       CMP AX,XYAND-7  ;'OR'\r
+       BCS BNCE\r
+       BCC 3$          ;FAIL (ALWAYS)\r
+       .DSABL LSB\r
+\r
+OFSTBL:        .BYTE 1,1,1,0,0,0,0,1\r
+XYAND: .BYTE 18,38,08,28,18,38,08,28\r
+BNCVT: .BYTE 6,6,4,4,0,0,2,2\r
+DIATST:        .BYTE 7,5,4,6,7,5,6,4\r
+       .PAGE\r
+       .SBTTL COLLISION: SPECIAL COLLISIONS\r
+AHOLE: LDA VEL+1\r
+       CMP I,TOOFST            ;GOING TOO FAST?\r
+       BPL BV1                 ;YES. SKIP OVER HOLE\r
+1$:    LDA PLAYER              ;SINK THE PUTT\r
+       BMI BV1                 ;IGNORE THE FOLLOWING IN ATTRACT MODE\r
+       LDA I,10.\r
+       STA FREEZE              ;PAUSE\r
+       LDA #S.HOLE             ;BLOOOP....\r
+       STA SREG\r
+       LDA STRKW\r
+       BIT STRTER              ;WHICH SIDE UP?\r
+       BVC 15$                 ;WHITE\r
+       LDA STRKB\r
+15$:   CMP I,1                 ;HOLE-IN-ONE?\r
+       BNE 16$                 ;NO\r
+       EMSG CORSE\r
+       LDY I,20                ;ERASE COURSE AND NUMBER\r
+       STA NY,R2\r
+       LDY I,40\r
+       STA NY,R2\r
+       LDA STRTER              ;YES, PLAY FAN FARE\r
+       ORA I,B.TUNE\r
+       STA STRTER\r
+       LDA #S.FANF\r
+       STA SREG        ;DO THE FANFARE\r
+       INC SPOOL       ;GIVE 'IM A BONUS\r
+16$:   LDA I,B.DROP!B.SLOK\r
+BCHG:  ORA PLAYER\r
+       AND I,B.MSG!B.DROP!B.SLOK\r
+       STA Z,PLAYER\r
+       LDA STRTER\r
+       ORA I,B.STOP            ;PREPARE TO CHANGE STATES\r
+       STA STRTER\r
+BVNSH: LDX SAVEX\r
+       LDA I,BLANK\r
+       STA ZX,OBJPIX           ;BLANK THE BALL\r
+TOCONT:\r
+BV1:   RTS                     ;DONE\r
+\r
+WATER: LDA I,B.BMOV\r
+       BIT PLAYER              ;STOP THE BALL\r
+       BEQ BV1                 ;ITS JUST THE POINTER\r
+       BMI BVNSH               ;IGNORE WATER IN ATTRACT\r
+       LDA #S.H2O      ;SPLASH....\r
+       STA SREG\r
+       LDA I,6\r
+       STA FREEZE              ;PAUSE\r
+BV0:   LDA I,B.SLOK\r
+       BNE BCHG                ;(ALWAYS)\r
+;\r
+SAND:  LDA ACCEL\r
+       ORA I,SANDA     ;PUT IN SAND DECELERATION\r
+       STA ACCEL\r
+       LDA #S.SAND     ;SCRAPE....\r
+       STA SREG\r
+       JMP RSTSND\r
+\r
+;\r
+CKTAB: .BYTE 0,1,2,20,21,22,40,41,42\r
+\r
+CHKS2K:        .BYTE 55                ;SPOT FOR CHECKSUM\r
+\r
+\r
+HILL:  STA R4\r
+       LDA DIRECT      ;GET ANGLE\r
+       AND I,0F        ;(1 OF 16)\r
+       ASL             ;*2\r
+       TAY             ;USE AS INDEX\r
+       LDA DIRECT      ;GET ANGLE\r
+       EOR R4          ;APPLY POLARITY AS REQUESTED\r
+       ASLS 2          ;PUT DELTA A POLARITY TO OVF\r
+       STA R4          ;AND SAVE DELTA V POLARITY\r
+       BIT R4\r
+       BVC 3$          ;DELTA A +\r
+       TYA             ;ELSE NEGATE IT TO 5 BITS\r
+       EOR I,1E        ;(ACTUALLY TO 6 BITS CAUSE ITS *2)\r
+       TAY\r
+       INYS 2\r
+3$:    LDA AY,HILTBL   ;GET DELTA A\r
+       BIT R4          ;LOOK FOR DIRECT=00,30\r
+       BVC 4$          ;COULD BE 00,20\r
+       BPL 1$          ;ITS A 10 LEAVE IT +\r
+       BVS 5$          ;(ALWAYS) MAKE IT--\r
+4$:    BMI 1$          ;ITA A 20. LEAVE IT +\r
+5$:    EOR I,0FF       ;NEGATE\r
+       CLC\r
+       ADC I,1\r
+1$:    STA HLCNST      ;KEEP DELTA A\r
+       LDA AY,HILTBL+1 ;GET DELTA V\r
+       BIT R4          ;TEST DELAT V\r
+       BMI 2$          ;LEAVE IT +\r
+       CLC\r
+       EOR I,-1        ;-\r
+       ADC I,1         ;(2'S COMPLIMENT)\r
+2$:    STA HLCNST+1\r
+       RTS                     ;DONE\r
+\r
+HILTBL:        .BYTE 41,2,3D,7,3B,0B,39,10\r
+       .BYTE 37,14,34,18,2F,1E,2D,20\r
+       .BYTE 29,23,25,26,20,2A,1B,2B\r
+       .BYTE 15,2C,0F,2E,0A,2F,05,30,00,30\r
+       .PAGE\r
+       .PAGE\r
+       .SBTTL MESSAGE LINKAGES\r
+\r
+       .GLOBL MSTA,WELL,MEDIUM,POOR,WHITE,BLACK,LOST\r
+       .GLOBL GMEOVR,CORSE,CREDIT,ROMERR,ROMOK,SELFT,LANGM\r
+       .GLOBL WRN1,WRN2,REM1,REM2,BONUS,PARR,RAMBAD\r
+\r
+       .SBTTL INTERRUPT SERVICE\r
+;\r
+;IRQ SERICE (VBLANK)\r
+;THIS ROUTINE UPDATES THE MOTION OBJECT\r
+;POSITIONS AND SETS THE VBLANK FLAG.\r
+;\r
+IRQ:   PHA                     ;SAVE ACC\r
+       TXA\r
+       PHA\r
+       TYA\r
+       PHA\r
+       CLD\r
+       STA Z,IRQRST\r
+       LDA Z,OPSWB\r
+       AND I,08                ;VBLANK?\r
+       BNE 16$                 ;YEP\r
+17$:   JMP IRQRET              ;NOPE.\r
+16$:   LDA I,B.VBLK            ;SET VBLANK FLAG\r
+       ORA Z,PLAYER\r
+       STA Z,PLAYER\r
+       INC Z,FRMCNT\r
+       LDA FRMCNT\r
+       AND I,3\r
+       BNE 9$\r
+       LDA FREEZE\r
+       BEQ 9$\r
+       DEC FREEZE\r
+9$:    SAVE <R0,R1,R2,R3,R4>   ;SAVE THESE BECAUSE 'MSG' USES THEM\r
+       LDA I,B.WARN            ;WARNING MODE?\r
+       BIT PLAYER\r
+       BEQ 50$                 ;NOPE.\r
+       LDA FRMCNT\r
+       AND I,7                 ;BLINK TIME?\r
+       BNE 41$                 ;NO\r
+       LDY I,WRN1              ;PREPARE TO BLINK WARNING\r
+       LDA FRMCNT\r
+       AND I,8\r
+       BEQ 51$                 ;ON\r
+       EMSG                    ;OFF\r
+       BEQ 1$                  ;(ALWAYS)\r
+51$:   MSG WH                  ;ON\r
+1$:    JMP N18                 ;(ALWAYS)\r
+50$:   LDA FRMCNT\r
+       LSR\r
+       BCC 14$                 ;ODD FRAMES ONLY\r
+       AND RANDOM              ;FAST OR SLOW?\r
+       LSR\r
+       BCS 14$                 ;SLOW\r
+       JSR BARIER\r
+14$:   LDA Z,XPOS+1            ;RESTORE MOTION OBJECT\r
+       STA Z,PLAY1X            ;POSITIONS\r
+       STA Z,PLAY1X+2\r
+       LDA Z,YPOS+1\r
+       STA Z,PLAY1Y\r
+       LDA Z,XPOS2+1           ;PLAYER 2 PARAMETERS\r
+       STA Z,PLAY2X\r
+       STA Z,PLAY2X+2\r
+       LDA Z,YPOS2+1\r
+       STA Z,PLAY2Y\r
+       LDA OBJPIX\r
+       STA UPPER2\r
+       LDA OBJPIX+1\r
+       STA LOWER2\r
+       LDA OBJPIX+4\r
+       STA UPPER1\r
+       LDA OBJPIX+5\r
+       STA LOWER1\r
+40$:   LDA FRMCNT\r
+       AND I,7                 ;BLINK TIME?\r
+       BEQ N14                 ;YEP\r
+41$:   JMP N13                 ;NO. JUST EXIT\r
+N14:   LDA FRMCNT\r
+       AND I,8                 ;ISOLATE ON/OFF BIT\r
+       ASLS 3                  ;PUT IT WHERE IT MAY BE TESTED\r
+       STA R4                  ;KEEP IT (IN CASE WE DON'T XEQ MSG)\r
+       LDY I,LOST              ;PREPARE TO BLINK 'TOO LONG'\r
+       LDA I,B.SQR\r
+       BIT PLAYER              ;ATTRACT MODE? SQUIRREL MOVING?\r
+       BMI 15$                 ;ATTRACT MODE. DON'T CARE ABOUT SQUIRREL\r
+       BNE 1$                  ;SQUIRREL MOVING. BLINK 'TOO LONG'\r
+       LDY I,BONUS             ;MAYBE BONUS BLINK\r
+       LDA I,B.TUNE\r
+       BIT STRTER              ;BONUS?\r
+       BEQ 30$                 ;NO\r
+       BNE 1$                  ;YES\r
+15$:   LDY I,GMEOVR            ;START WITH GAME OVER\r
+       LDA SPOOL               ;ANY CREDIT?\r
+       BEQ 1$                  ;NOPE. STICK WITH GAME OVER\r
+       LDY I,CREDIT            ;ELSE BLINK CREDIT\r
+1$:    BIT R4                  ;ON?\r
+       BVC 2$                  ;OFF\r
+       MSG WH                  ;ON\r
+       BEQ 30$                 ;(ALWAYS)\r
+2$:    EMSG                    ;OFF\r
+30$:   LDA LITES               ;LOAD ATTRACTION LITES\r
+       AND I,7F                ;MASK OUT START BUTTON LITE\r
+       STA LITES               ;SAVE IT\r
+       BIT R4                  ;RUN LITES?\r
+       BVS 8$                  ;NO, LEAVE THEM ALONE\r
+       LDA LITES\r
+       CLC\r
+       BNE 7$                  ;IS THERE A LIGHT ON?\r
+       SEC                     ;NO, SO TURN ONE ON\r
+7$:    ROL\r
+       AND I,7F\r
+       STA LITES\r
+8$:    BIT PLAYER              ;START SW LOCK OUT?\r
+       BVS 10$                 ;YES. LAMP MUST ALWAYS BE ON\r
+       LDA SPOOL               ;ANY CREDITS?\r
+       BEQ 11$                 ;NO. LAMP MUST ALWAYS BE OFF\r
+       BIT R4                  ;YES. LAMP MUST BLINK. ON TIME?\r
+       BVS 11$                 ;NO. KEEP IT OFF\r
+10$:   LDA I,80                        ;YES. TURN IT ON\r
+       ORA LITES\r
+       STA LITES\r
+11$:   LDA LITES\r
+       STA LIGHTS              ;ACTUALLY TURN THEM ON\r
+       SAVE R4\r
+       CLC\r
+       NUMBER PLYFLD+224.+30.,WH,SCORE ;WHITE SCORE\r
+       LDA STRTER\r
+       AND I,B.BSTR            ;BLACK STARTED?\r
+       BEQ 3$                  ;NO. DON'T PRINT MSG\r
+       CLC\r
+       NUMBER PLYFLD+800.+30.,BK,SCORE2        ;BLACK SCORE\r
+3$:    MSG WH,PARR\r
+       LDA PAR\r
+       ASL\r
+       STA R0\r
+       LDA PAR\r
+       ADC R0\r
+       JSR CVD\r
+       RESTOR R4\r
+N18:   LDY I,REM1              ;PREPARE TO BLINK 'SHOTS LEFT'\r
+       LDA PLAYER\r
+       ASL\r
+       LDA I,B.TUNE\r
+       BIT STRTER              ;BONUS SEQUENCE?\r
+       BNE 4$                  ;YES. BLINK SHOTS\r
+       LDA SPOOL               ;ANY CREDIT?\r
+       BCC 3$                  ;NOT ATTRACT MODE. WRITE IT ANYWAY\r
+       BEQ N13                 ;NO. NEVER MIND BLINKING\r
+3$:    CMP I,6                 ;GETTING LOW?\r
+       BCS 1$                  ;NO. ALWAYS WRITE IT\r
+4$:    BIT R4                  ;YES. BLINK ON TIME?\r
+       BVC 1$                  ;YES\r
+       EMSG                    ;OFF.\r
+       BEQ 2$                  ;(ALWAYS)\r
+1$:    MSG WH                  ;WRITE IT\r
+2$:    LDA SPOOL               ;GET CREDIT COUNT\r
+       CLC\r
+       JSR CVD                 ;WRITE NUMBER\r
+N13:   RESTOR <R4,R3,R2,R1,R0> ;RESTORE REGS\r
+IRQRET:\r
+       INC SNDCTL+2\r
+       LDA SNDCTL+2            ;DO SOUNDS ONLY EVERY OTHER INTERRUPT\r
+       LSR\r
+       BCS 3$\r
+       JSR SOUND\r
+3$:    JSR MOOLAH              ;DO COIN STUFF\r
+       BCS 1$\r
+       STA COINOF              ;COIN COUNTER OFF\r
+       BCC 2$                  ;(ALWAYS)\r
+1$:    STA COINON              ;COIN COUNTER ON\r
+       LDY #0\r
+       LDA #0F8                ;FOOL THE SOUND ROUTINE\r
+       JSR SSOUND              ;INTO MAKING A BUNCH OF BEEPS\r
+2$:    JSR RAND                ;DO RANDOM NUMBER ROUTINE\r
+       PLA\r
+       TAY     \r
+       PLA\r
+       TAX\r
+       PLA\r
+       RTI\r
+CHKS3K:        .BYTE 55\r
+\r
+;      THE FOLLOWING CODE DETERMINES THE LINK ORDER.\r
+;      BY DOING IT THIS WAY IT DOES'NT MATTER WHAT ORDER THE\r
+;      FILES ARE ENTERED TO THE LINKER. THIS ORDER ALWAYS TAKES\r
+;      PRECEDENCE. (NOTE: THESE CSECTS ARE OVERLAYED WITH THE\r
+;      DATA FROM THE EXTERNAL OBJECT MODULES. IT IS NOT ADVISABLE\r
+;      TO SUPPLY CODE IN THESE CSECTS.\r
+;\r
+       .GLOBL SOUND,SSOUND\r
+       .CSECT ASCII            ;MESSAGES GO HERE\r
+       .CSECT COLLIS           ;FOLLOWED BY BARRIER STUFF\r
+       .CSECT CORSES           ;THE COURSES (HOLES)\r
+       .CSECT GFCORS           ;THE COURSE WRITER\r
+       .CSECT GFCOIN           ;THE COIN ROUTINE\r
+       .CSECT GFSND            ;SOUND GENERATOR\r
+       .CSECT GFWPLY           ;THE MESSAGE WRITER\r
+       .CSECT GFST             ;THE SELF-TEST ROUTINE\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
\ No newline at end of file
diff --git a/A33497.XX b/A33497.XX
new file mode 100644 (file)
index 0000000..2719648
Binary files /dev/null and b/A33497.XX differ
diff --git a/A33498.XX b/A33498.XX
new file mode 100644 (file)
index 0000000..920d20f
Binary files /dev/null and b/A33498.XX differ
diff --git a/A33499.XX b/A33499.XX
new file mode 100644 (file)
index 0000000..80687da
--- /dev/null
+++ b/A33499.XX
@@ -0,0 +1,1675 @@
+;      27-AUG-78\r
+;      19:15:00\r
+       .TITLE HOLES: MINI-GOLF COURSES\r
+       .SBTTL LINKAGES,DEFINITIONS AND MACROS\r
+       .CSECT CORSES\r
+       .RADIX 16\r
+       .LIST\r
+       .GLOBL HOLES\r
+HOLES:\r
+       .IRPC Z,<0123456789ABCDEF>\r
+       .WORD HOLE'Z\r
+       .ENDR\r
+       .NLIST\r
+\r
+PLYFLD =0800\r
+\r
+SPC    =0\r
+WLL    =1\r
+GRAS   =2\r
+HOLE   =3\r
+D4     =4\r
+D5     =5\r
+D6     =6\r
+D7     =7\r
+UP     =9\r
+DWN    =0A\r
+WTR    =0B\r
+WSN1   =0C\r
+WSN2   =0D\r
+BARR   =0E\r
+TEE    =0F\r
+\r
+       .RADIX 2\r
+\r
+XP     =0100\r
+XM     =1100\r
+YP     =0001\r
+YM     =0011\r
+XPYP   =0101\r
+XPYM   =0111\r
+XMYP   =1101\r
+XMYM   =1111\r
+\r
+       .RADIX 16\r
+\r
+       .MACRO TERM\r
+       .BYTE ^H0DA\r
+       .ENDM\r
+\r
+       .MACRO STM OP\r
+       .IRP Z,<OP>\r
+       UPSTMP Z\r
+       .ENDR\r
+       .ENDM\r
+\r
+       .MACRO UPSTMP COUNT,TYPE\r
+       .IF EQ,COUNT\r
+       .ERROR COUNT    ;TOO LITTLE\r
+       .MEXIT\r
+       .ENDC\r
+       .IF GT,COUNT-13\r
+       .ERROR COUNT    ;TOO BIG\r
+       .MEXIT\r
+       .ENDC\r
+       .BYTE COUNT-1*16+<TYPE&15>\r
+       .ENDM\r
+\r
+       .MACRO INCR OP\r
+       .BYTE 208+OP\r
+       .ENDM\r
+\r
+       .MACRO ADR OP\r
+       .IF LT,OP-895\r
+       .WORD 14*4096+PLYFLD+OP\r
+       .IFF\r
+       .ERROR OP       ;ADDRESS OUT OF RANGE\r
+       .ENDC\r
+       .ENDM\r
+\r
+       .MACRO ALP MSG\r
+       .BYTE 240+MSG\r
+       .ENDM\r
+\r
+SAND   =0\r
+WATER  =1\r
+UPHILL =2\r
+DWNHIL =3\r
+\r
+       .RADIX 10\r
+       .ENABL M68\r
+\r
+       .GLOBL CHKS5K,CHKS6K\r
+       .LIST MEB\r
+       .NLIST BYT\r
+       .PAGE\r
+       .SBTTL COURSES\r
+HOLE0: ADR 0+6\r
+       INCR XPYP\r
+       STM <<8,D7>>\r
+       INCR XMYP\r
+       STM <<9,D6>,<5,D6>>\r
+       INCR XMYM\r
+       STM <<8,D7>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       STM <<8,D4>>\r
+       INCR YM\r
+       STM <<1,GRAS>>\r
+       INCR XMYM\r
+       STM <<6,D7>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<5,D4>>\r
+       ADR 736+27\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XMYM\r
+       STM <<7,D5>>\r
+       INCR XMYP\r
+       STM <<1,SPC>>\r
+       STM <<7,D6>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XMYM\r
+       STM <<3,D5>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR XPYM\r
+       STM <<7,D4>>\r
+       INCR XMYM\r
+       STM <<8,D5>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XPYM\r
+       STM <<3,D6>>\r
+       INCR XP\r
+       STM <<3,D6>>\r
+       INCR XPYP\r
+       STM <<7,D5>>\r
+       INCR XPYM\r
+       STM <<7,D6>>\r
+       INCR XP\r
+       STM <<3,D6>>\r
+       INCR XPYP\r
+       STM <<4,D5>>\r
+       INCR XM\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<7,D4>>\r
+       INCR XPYP\r
+       STM <<7,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYM\r
+       STM <<7,D7>>\r
+       INCR XPYM\r
+       STM <<8,D6>>\r
+       ADR 832+4\r
+       INCR XMYM\r
+       STM <<3,D7>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XMYP\r
+       STM <<7,D4>>\r
+       INCR XMYM\r
+       STM <<8,D7>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XMYP\r
+       STM <<3,D4>>\r
+       ADR 288+6               ;WHITE SAND\r
+       STM <<4,WSN2>>\r
+       ADR 288+5\r
+       STM <<5,WSN2>>\r
+       ADR 320+6\r
+       STM <<5,WSN2>>\r
+       ADR 320+7\r
+       STM <<4,WSN2>>\r
+       ADR 704+19\r
+       STM <<4,WSN1>>\r
+       ADR 704+18\r
+       STM <<5,WSN1>>\r
+       ADR 736+19\r
+       STM <<5,WSN1>>\r
+       ADR 672+18\r
+       STM <<4,WSN1>>\r
+       INCR XP\r
+       ADR 256+7\r
+       ALP SAND\r
+       ADR 640+20\r
+       ALP SAND\r
+       ADR 160+5               ;HOLES\r
+       STM <<1,HOLE>>\r
+       ADR 736+23\r
+       STM <<1,HOLE>>\r
+       ADR 736+5               ;TEE\r
+       STM <<1,TEE>>\r
+       ADR 256+14\r
+       STM <<4,WLL>>\r
+       STM <<5,SPC>>\r
+       STM <<4,WLL>>\r
+       ADR 448+8\r
+       INCR YP\r
+       STM <<1,WLL>>\r
+       STM <<1,BARR>>\r
+       TERM\r
+HOLE1: ADR 576+12\r
+       INCR XM\r
+       STM <<5,WSN2>>\r
+       STM <<5,WLL>>\r
+       INCR XMYP\r
+       STM <<1,WLL>,<6,D4>>\r
+       INCR XPYP\r
+       STM <<6,D7>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       STM <<11,WLL>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       STM <<3,WLL>>\r
+       INCR XP\r
+       STM <<8,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<7,WLL>>\r
+       INCR YP\r
+       STM <<11,WLL>>\r
+       INCR XMYP\r
+       STM <<1,WLL>,<6,D6>>\r
+       ADR 832+20\r
+       STM <<2,D6>>\r
+       ADR 576+16\r
+       STM <<2,D6>>\r
+       ADR 544+22\r
+       INCR XP\r
+       STM <<4,WSN1>>\r
+       ADR 512+21\r
+       STM <<6,WSN1>>\r
+       ADR 416+13\r
+       STM <<5,WSN2>>\r
+       ADR 416+11\r
+       STM <<5,WSN2>>\r
+       ADR 544+20\r
+       STM <<4,WSN1>>\r
+       ADR 320+18\r
+       STM <<9,WLL>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       STM <<13,WLL>,<3,WLL>>\r
+       ADR 64+19\r
+       STM <<2,WLL>>\r
+       ADR 256+13\r
+       STM <<1,BARR>>\r
+       ADR 576+24\r
+       STM <<6,WSN1>>\r
+       ADR 608+24\r
+       STM <<6,WSN1>>\r
+       ADR 832+23\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<1,WLL>>\r
+       INCR XPYP\r
+       STM <<2,D7>>\r
+       ADR 96+20\r
+       STM <<5,D5>>\r
+       ADR 416+6\r
+       STM <<1,HOLE>>\r
+       ADR 736+4\r
+       STM <<1,TEE>>\r
+       ADR 576+17\r
+       STM <<1,WLL>>\r
+       ADR 256+2\r
+       STM <<1,D4>>\r
+       ADR 256+11\r
+       STM <<1,D5>>\r
+       ADR 576+2\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       ADR 480+12\r
+       ALP SAND\r
+       ADR 576+21\r
+       ALP SAND\r
+       TERM\r
+HOLE2: ADR 288+20\r
+       INCR XMYM\r
+       STM <<6,D7>>\r
+       INCR XPYM\r
+       STM <<6,D6>>\r
+       INCR YM\r
+       STM <<7,WLL>>\r
+       INCR XP\r
+       STM <<10,WLL>>\r
+       INCR YP\r
+       STM <<8,WLL>>\r
+       INCR XPYP\r
+       STM <<5,D7>>\r
+       INCR XMYP\r
+       STM <<6,D6>>\r
+       ADR 608+20\r
+       INCR XPYM\r
+       STM <<6,D4>>\r
+       INCR XMYM\r
+       STM <<6,D5>>\r
+       ADR 288+9\r
+       INCR XMYP\r
+       STM <<5,D4>>\r
+       INCR XPYP\r
+       STM <<6,D5>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<5,WLL>>\r
+       INCR YP\r
+       STM <<6,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<7,WLL>>\r
+       INCR YM\r
+       STM <<6,WLL>>\r
+       INCR XM\r
+       STM <<6,WLL>>\r
+       INCR YM\r
+       STM <<4,WLL>>\r
+       ADR 96+14\r
+       INCR XP\r
+       STM <<1,GRAS>>\r
+       STM <<1,WLL>>\r
+       STM <<5,WSN1>>\r
+       INCR XPYP\r
+       STM <<4,D7>>\r
+       INCR XPYM\r
+       STM <<4,D4>>\r
+       INCR XMYM\r
+       STM <<4,D5>>\r
+       INCR XMYP\r
+       STM <<4,D6>>\r
+       INCR XP\r
+       STM <<1,WSN1>>\r
+       STM <<7,WLL>>\r
+       STM <<6,WSN2>>\r
+       STM <<1,WLL>>\r
+       STM <<1,GRAS>>\r
+       ADR 224+14\r
+       ALP SAND\r
+       ADR 192+15\r
+       STM <<4,WSN1>>\r
+       ADR 192+13\r
+       STM <<4,WSN1>>\r
+       ADR 608+15\r
+       STM <<4,WSN2>>\r
+       ADR 608+13\r
+       STM <<4,WSN2>>\r
+       ADR 640+14\r
+       ALP SAND\r
+       ADR 448+10\r
+       INCR YP\r
+       STM <<1,SPC>>\r
+       STM <<7,WLL>,<1,SPC>>\r
+       STM <<1,BARR>>\r
+       ADR 384+13\r
+       STM <<3,WLL>>\r
+       ADR 416+12\r
+       STM <<5,WLL>>\r
+       ADR 480+12\r
+       STM <<5,WLL>>\r
+       ADR 512+13\r
+       STM <<3,WLL>>\r
+       ADR 224+26\r
+       STM <<1,HOLE>>\r
+       ADR 448+4\r
+       STM <<1,TEE>>\r
+       TERM\r
+HOLE3: ADR 288+8\r
+       INCR YP\r
+       STM <<7,WLL>,<2,SPC>,<7,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YM\r
+       STM <<8,WLL>,<2,SPC>,<7,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<8,WLL>,<2,SPC>,<7,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YM\r
+       STM <<7,WLL>,<1,D6>,<2,SPC>,<1,D7>,<6,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<6,WLL>,<1,D7>,<4,SPC>,<1,D6>,<5,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<1,WLL>>\r
+       INCR YM\r
+       STM <<4,WLL>>\r
+       INCR XMYM\r
+       STM <<4,D7>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XPYM\r
+       STM <<3,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<6,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR YM\r
+       STM <<4,WLL>>\r
+       INCR XM\r
+       STM <<3,WLL>>\r
+       INCR YM\r
+       STM <<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<3,WLL>>\r
+       INCR XPYM\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<8,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<5,WLL>>\r
+       INCR YP\r
+       STM <<7,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<1,D4>>\r
+       INCR XM\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<13,WLL>,<1,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<13,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XM\r
+       STM <<8,WLL>>\r
+       INCR YP\r
+       STM <<8,WLL>>\r
+       INCR XP\r
+       ADR 64+27\r
+       STM <<5,WSN1>>\r
+       ADR 64+28\r
+       STM <<1,D5>,<1,WSN1>>\r
+       ADR 64+26\r
+       STM <<6,WSN1>>\r
+       ADR 96+25\r
+       STM <<4,WSN1>>\r
+       ADR 512+28\r
+       STM <<5,WSN2>,<3,SPC>,<1,D6>,<2,WLL>>\r
+       ADR 480+27\r
+       STM <<6,WSN2>,<4,SPC>,<1,D6>,<1,WLL>>\r
+       ADR 512+26\r
+       STM <<5,WSN2>,<5,SPC>,<1,D6>>\r
+       ADR 544+27\r
+       ALP SAND\r
+       ADR 128+26\r
+       ALP SAND\r
+       ADR 608+25\r
+       STM <<1,WLL>>\r
+       ADR 512+20\r
+       STM <<1,HOLE>>\r
+       ADR 512+11\r
+       STM <<1,HOLE>>\r
+       ADR 736+4\r
+       STM <<1,TEE>>\r
+       ADR 352+12\r
+       STM <<1,BARR>>\r
+       TERM\r
+HOLE4: INCR YP\r
+       ADR 32+1\r
+       STM <<13,WLL>,<13,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<13,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<13,WLL>>\r
+       ADR 608+6\r
+       STM <<13,WLL>>\r
+       INCR YP\r
+       STM <<10,WLL>>\r
+       INCR XP\r
+       STM <<4,WLL>>\r
+       INCR XPYM\r
+       ADR 192+20\r
+       STM <<2,D6>,<2,SPC>,<10,D4>>\r
+       ADR 320+15\r
+       STM <<8,D6>,<1,WLL>>\r
+       ADR 256+22\r
+       STM <<2,D4>,<2,SPC>,<10,D6>>\r
+       ADR 416+18\r
+       STM <<8,D4>,<1,WLL>>\r
+       INCR YP\r
+       STM <<13,WLL>>\r
+       INCR XM\r
+       STM <<10,WLL>>\r
+       INCR YM\r
+       STM <<4,WLL>>\r
+       ADR 416+21\r
+       STM <<3,GRAS>>\r
+       ADR 448+21\r
+       STM <<4,GRAS>>\r
+       ADR 480+21\r
+       STM <<5,GRAS>>\r
+       ADR 512+21\r
+       STM <<6,GRAS>>\r
+       ADR 448+10\r
+       STM <<4,GRAS>>\r
+       ADR 480+9\r
+       STM <<3,GRAS>>\r
+       ADR 512+8\r
+       STM <<2,GRAS>>\r
+       ADR 544+7\r
+       STM <<1,GRAS>>\r
+       ADR 192+22\r
+       STM <<2,WLL>>\r
+       ADR 224+22\r
+       STM <<3,WLL>>\r
+       ADR 256+21\r
+       STM <<3,WLL>>\r
+       ADR 288+20\r
+       STM <<1,WLL>,<1,D5>>\r
+       ADR 128+24\r
+       STM <<1,HOLE>>\r
+       ADR 768+4\r
+       STM <<1,TEE>>\r
+       ADR 224+15\r
+       STM <<9,GRAS>>\r
+       ADR 256+15\r
+       STM <<9,GRAS>>\r
+       ADR 288+15\r
+       STM <<9,GRAS>>\r
+       ADR 320+14\r
+       STM <<8,GRAS>>\r
+       ADR 352+13\r
+       STM <<7,GRAS>>\r
+       ADR 384+12\r
+       STM <<6,GRAS>>\r
+       ADR 416+11\r
+       STM <<5,GRAS>>\r
+       ADR 544+21\r
+       STM <<7,GRAS>>\r
+       ADR 576+21\r
+       STM <<8,GRAS>>\r
+       ADR 608+21\r
+       STM <<9,GRAS>>\r
+       ADR 640+21\r
+       STM <<10,GRAS>>\r
+       ADR 672+21\r
+       STM <<11,GRAS>>\r
+       ADR 736+18\r
+       STM <<7,WSN1>>\r
+       ADR 768+18\r
+       STM <<7,WSN1>>\r
+       ADR 800+18\r
+       STM <<7,WSN1>>\r
+       ADR 832+18\r
+       STM <<7,WSN1>>\r
+       INCR XP\r
+       ADR 320+5\r
+       STM <<7,WSN2>>\r
+       ADR 320+4\r
+       STM <<7,WSN2>>\r
+       ADR 320+3\r
+       STM <<7,WSN2>>\r
+       ADR 320+2\r
+       STM <<7,WSN2>>\r
+       ADR 768+15\r
+       ALP SAND\r
+       ADR 384+3\r
+       ALP SAND\r
+       TERM\r
+HOLE5: INCR YP\r
+       ADR 160+1\r
+       STM <<13,WLL>,<13,WLL>>\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<3,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>>\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<4,WLL>>\r
+       ADR 640+16\r
+       STM <<13,UP>>\r
+       ADR 640+17\r
+       STM <<13,UP>>\r
+       ADR 640+18\r
+       STM <<13,UP>>\r
+       ADR 640+19\r
+       STM <<13,UP>>\r
+       ADR 640+20\r
+       STM <<13,UP>>\r
+       ADR 640+21\r
+       STM <<13,UP>>\r
+       ADR 640+22\r
+       STM <<13,UP>>\r
+       INCR YP\r
+       ADR 192+16\r
+       STM <<7,UP>>\r
+       ADR 224+16\r
+       STM <<7,UP>>\r
+       INCR XPYP\r
+       ADR 192+24\r
+       STM <<2,D5>>\r
+       ADR 448+8\r
+       STM <<2,D5>>\r
+       ADR 352+11\r
+       STM <<2,D7>>\r
+       INCR XMYP\r
+       ADR 640+24\r
+       STM <<2,D6>>\r
+       ADR 384+8\r
+       STM <<2,D6>>\r
+       ADR 480+11\r
+       STM <<2,D4>>\r
+       INCR YP\r
+       ADR 192+25\r
+       STM <<4,WLL>>\r
+       ADR 224+26\r
+       STM <<3,WLL>>\r
+       ADR 608+26\r
+       STM <<3,WLL>>\r
+       ADR 640+25\r
+       STM <<4,WLL>>\r
+       ADR 416+8\r
+       STM <<5,WLL>>\r
+       ADR 384+9\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       ADR 480+10\r
+       STM <<5,WLL>>\r
+       ADR 416+4\r
+       STM <<1,TEE>>\r
+       ADR 416+26\r
+       STM <<1,HOLE>>\r
+       INCR XP\r
+       ADR 352+19\r
+       ALP UPHILL\r
+       TERM\r
+HOLE6: ADR 768+25\r
+       STM <<1,HOLE>>\r
+       ADR 128+5\r
+       STM <<1,TEE>>\r
+       ADR 64+2\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<5,WLL>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<1,D7>,<13,WLL>,<4,WLL>>\r
+       INCR YP\r
+       STM <<1,D5>,<1,WLL>>\r
+       INCR XM\r
+       STM <<1,D4>,<13,WLL>,<2,WLL>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XM\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XM\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XM\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<1,D6>,<11,WLL>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<1,D7>,<13,WLL>,<8,WLL>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<1,D4>,<5,WLL>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<1,D5>,<13,WLL>,<4,WLL>>\r
+       INCR YM\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XP\r
+       STM <<1,D6>,<13,WLL>,<2,WLL>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<1,D4>,<11,WLL>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<1,D5>,<13,WLL>,<8,WLL>>\r
+       ADR 672+2\r
+       STM <<1,BARR>>\r
+       ADR 512+12\r
+       STM <<4,WSN1>>\r
+       INCR YP\r
+       STM <<6,WSN1>>\r
+       INCR XP\r
+       STM <<4,WSN1>>\r
+       INCR YM\r
+       STM <<5,WSN1>>\r
+       INCR XM\r
+       STM <<3,WSN1>>\r
+       INCR YP\r
+       STM <<4,WSN1>>\r
+       INCR XP\r
+       STM <<2,WSN1>>\r
+       INCR YM\r
+       STM <<3,WSN1>>\r
+       INCR XM\r
+       STM <<1,WSN1>>\r
+       INCR YP\r
+       STM <<3,WSN1>>\r
+       ADR 512+22\r
+       INCR XM\r
+       STM <<4,WSN2>>\r
+       INCR YP\r
+       STM <<6,WSN2>>\r
+       INCR XP\r
+       STM <<4,WSN2>>\r
+       INCR YM\r
+       STM <<5,WSN2>>\r
+       INCR XM\r
+       STM <<3,WSN2>>\r
+       INCR YP\r
+       STM <<4,WSN2>>\r
+       INCR XP\r
+       STM <<2,WSN2>>\r
+       INCR YM\r
+       STM <<3,WSN2>>\r
+       INCR XM\r
+       STM <<1,WSN2>>\r
+       INCR YP\r
+       STM <<3,WSN2>>\r
+       INCR XP\r
+       ADR 416+15\r
+       ALP SAND\r
+       ADR 416+25\r
+       ALP SAND\r
+       TERM\r
+\r
+CHKS5K:        .BYTE ^H55      ;CHECK SUM 3400-37FF\r
+\r
+HOLE7: ADR 32+6\r
+       INCR YP\r
+       STM <<10,WLL>,<9,WLL>>\r
+       INCR XPYP\r
+       STM <<4,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<10,WLL>,<7,WLL>>\r
+       INCR XPYM\r
+       STM <<4,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<10,WLL>,<9,WLL>>\r
+       INCR XMYM\r
+       STM <<4,D5>>\r
+       INCR XM\r
+       STM <<1,D5>,<10,WLL>,<7,WLL>>\r
+       INCR XMYP\r
+       STM <<5,D6>>\r
+       ADR 160+2\r
+       STM <<4,D4>>\r
+       ADR 832+25\r
+       STM <<4,D6>>\r
+       ADR 832+13\r
+       STM <<2,D6>>\r
+       INCR XPYP\r
+       STM <<1,SPC>,<2,D7>>\r
+       ADR 736+2\r
+       STM <<4,D7>>\r
+       ADR 64+25\r
+       STM <<4,D5>>\r
+       INCR XM\r
+       ADR 832+15\r
+       STM <<2,WLL>,<9,SPC>,<1,HOLE>,<9,SPC>,<1,TEE>>\r
+       ADR 576+2\r
+       STM <<7,WSN1>>\r
+       ADR 576+3\r
+       STM <<7,WSN1>>\r
+       ADR 576+4\r
+       STM <<7,WSN1>>\r
+       ADR 576+5\r
+       STM <<7,WSN1>>\r
+       ADR 576+6\r
+       STM <<7,WSN1>>\r
+       ADR 576+24\r
+       STM <<7,WSN2>>\r
+       ADR 576+25\r
+       STM <<7,WSN2>>\r
+       ADR 576+26\r
+       STM <<7,WSN2>>\r
+       ADR 576+27\r
+       STM <<7,WSN2>>\r
+       ADR 576+28\r
+       STM <<7,WSN2>>\r
+       ADR 640+23\r
+       STM <<1,D4>,<9,WLL>,<1,D7>>\r
+       INCR YM\r
+       STM <<1,SPC>,<1,D7>,<13,WLL>,<1,D6>>\r
+       INCR XP\r
+       STM <<1,SPC>,<1,D6>,<9,WLL>,<1,D5>>\r
+       INCR YP\r
+       STM <<1,SPC>>\r
+       INCR XM\r
+       STM <<1,D5>,<10,WLL>>\r
+       INCR YP\r
+       STM <<13,WLL>,<1,WLL>>\r
+       INCR XP\r
+       STM <<11,WLL>>\r
+       INCR YM\r
+       STM <<1,D4>,<11,SPC>,<1,BARR>>\r
+       INCR XM\r
+       STM <<10,WLL>>\r
+       INCR YP\r
+       STM <<12,WLL>>\r
+       INCR XP\r
+       STM <<11,WLL>>\r
+       ADR 448+4\r
+       ALP SAND\r
+       ADR 448+26\r
+       ALP SAND\r
+       ADR 384+10\r
+       STM <<1,D4>>\r
+       ADR 384+20\r
+       STM <<1,D5>>\r
+       ADR 832+14\r
+       INCR YP\r
+       STM <<3,WLL>>\r
+       TERM\r
+HOLE8: ADR 192+22\r
+       INCR XP\r
+       STM <<10,DWN>,<5,DWN>>\r
+       ADR 192+21\r
+       STM <<10,DWN>,<5,DWN>>\r
+       ADR 192+20\r
+       STM <<10,DWN>,<5,DWN>>\r
+       ADR 192+19\r
+       STM <<10,DWN>,<5,DWN>>\r
+       ADR 192+11\r
+       STM <<10,UP>,<5,UP>>\r
+       ADR 192+10\r
+       STM <<10,UP>,<5,UP>>\r
+       ADR 192+9\r
+       STM <<10,UP>,<5,UP>>\r
+       ADR 192+8\r
+       STM <<10,UP>,<5,UP>>\r
+       ADR 160+29\r
+       STM <<10,WLL>,<6,WLL>>\r
+       INCR YM\r
+       STM <<10,WLL>,<10,WLL>,<8,WLL>>\r
+       INCR XM\r
+       STM <<10,WLL>,<6,WLL>>\r
+       INCR YP\r
+       STM <<10,WLL>,<10,WLL>,<8,WLL>>\r
+       ADR 320+13\r
+       STM <<5,WLL>>\r
+       ADR 512+13\r
+       STM <<5,WLL>>\r
+       INCR XP\r
+       ADR 576+4\r
+       STM <<1,TEE>>\r
+       ADR 416+15\r
+       STM <<1,HOLE>>\r
+       ADR 320+20\r
+       ALP DWNHIL\r
+       ADR 352+9\r
+       ALP UPHILL\r
+       TERM\r
+HOLE9: ADR 448+5\r
+       STM <<1,TEE>>\r
+       ADR 448+15\r
+       STM <<1,HOLE>>\r
+       ADR 288+2\r
+       INCR XMYP\r
+       STM <<8,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<9,WLL>>\r
+       INCR XPYP\r
+       STM <<8,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<9,WLL>>\r
+       INCR XPYM\r
+       STM <<8,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<9,WLL>>\r
+       INCR XMYM\r
+       STM <<8,D5>>\r
+       INCR XM\r
+       STM <<1,D5>,<9,WLL>>\r
+       ADR 608+3\r
+       INCR XPYP\r
+       STM <<8,D7>>\r
+       ADR 832+20\r
+       INCR XMYP\r
+       STM <<8,D6>>\r
+       ADR 288+27\r
+       INCR XMYM\r
+       STM <<8,D5>>\r
+       ADR 288+3\r
+       INCR XMYP\r
+       STM <<8,D4>>\r
+       ADR 384+9\r
+       INCR XMYP\r
+       STM <<4,D6>>\r
+       INCR XP\r
+       STM <<1,D6>,<11,WLL>>\r
+       INCR XMYM\r
+       STM <<4,D5>>\r
+       INCR XM\r
+       STM <<1,D5>,<2,WLL>>\r
+       INCR XMYP\r
+       STM <<3,WLL>>\r
+       INCR XP\r
+       STM <<8,WLL>>\r
+       INCR XMYM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<3,WLL>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR XP\r
+       STM <<5,WLL>>\r
+       ADR 256+17\r
+       STM <<1,D7>,<11,WLL>>\r
+       INCR XMYP\r
+       STM <<4,D4>>\r
+       INCR XM\r
+       STM <<1,D4>,<3,WLL>>\r
+       INCR XMYM\r
+       STM <<3,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<8,WLL>>\r
+       INCR XMYP\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<4,WLL>>\r
+       INCR XMYM\r
+       STM <<1,WLL>>\r
+       INCR XP\r
+       STM <<6,WLL>>\r
+       ADR 160+11\r
+       INCR XMYP\r
+       STM <<2,WSN1>>\r
+       INCR YP\r
+       STM <<4,WSN1>>\r
+       INCR XPYP\r
+       STM <<2,WSN1>>\r
+       INCR XPYM\r
+       STM <<2,WSN1>>\r
+       INCR YM\r
+       STM <<4,WSN1>>\r
+       INCR XMYM\r
+       STM <<1,WSN1>>\r
+       INCR XM\r
+       STM <<1,WSN1>>\r
+       INCR XMYP\r
+       STM <<1,WSN1>>\r
+       INCR YP\r
+       STM <<4,WSN1>>\r
+       INCR XP\r
+       STM <<2,WSN1>>\r
+       INCR YM\r
+       STM <<4,WSN1>>\r
+       INCR XM\r
+       STM <<1,WSN1>>\r
+       INCR YP\r
+       STM <<6,WSN1>>\r
+       ADR 736+11\r
+       INCR XMYP\r
+       STM <<2,WSN2>>\r
+       INCR YP\r
+       STM <<4,WSN2>>\r
+       INCR XPYP\r
+       STM <<2,WSN2>>\r
+       INCR XPYM\r
+       STM <<2,WSN2>>\r
+       INCR YM\r
+       STM <<4,WSN2>>\r
+       INCR XMYM\r
+       STM <<1,WSN2>>\r
+       INCR XM\r
+       STM <<1,WSN2>>\r
+       INCR XMYP\r
+       STM <<1,WSN2>>\r
+       INCR YP\r
+       STM <<4,WSN2>>\r
+       INCR XP\r
+       STM <<2,WSN2>>\r
+       INCR YM\r
+       STM <<4,WSN2>>\r
+       INCR XM\r
+       STM <<1,WSN2>>\r
+       INCR YP\r
+       STM <<6,WSN2>>\r
+       INCR XP\r
+       ADR 128+15\r
+       ALP SAND\r
+       ADR 704+15\r
+       ALP SAND\r
+       TERM\r
+HOLEA: ADR 352+1\r
+       INCR XPYP\r
+       STM <<13,D5>,<4,D5>>\r
+       ADR 32+11\r
+       STM <<13,D7>,<4,D7>>\r
+       ADR 64+11\r
+       STM <<13,D5>,<3,D5>>\r
+       ADR 224+7\r
+       STM <<1,TEE>,<10,SPC>,<1,HOLE>>\r
+       ADR 352+2\r
+       STM <<13,D7>,<3,D7>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<8,D4>>\r
+       ADR 832+20\r
+       STM <<7,D6>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       ADR 320+1\r
+       STM <<2,WLL>>\r
+       INCR XMYP\r
+       STM <<8,D6>>\r
+       ADR 448+6\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 448+7\r
+       STM <<3,WTR>,<2,SPC>,<3,WTR>>\r
+       ADR 480+7\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 480+8\r
+       STM <<3,WTR>,<2,SPC>,<3,WTR>>\r
+       ADR 512+8\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 512+9\r
+       STM <<3,WTR>,<2,SPC>,<3,WTR>>\r
+       ADR 544+9\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 544+10\r
+       STM <<3,WTR>,<2,SPC>,<3,WTR>>\r
+       ADR 576+10\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 576+11\r
+       STM <<3,WTR>,<2,SPC>,<3,WTR>>\r
+       ADR 608+11\r
+       STM <<3,WTR>,<3,SPC>,<3,WTR>>\r
+       ADR 768+17\r
+       STM <<8,WTR>>\r
+       ADR 768+18\r
+       STM <<7,WTR>>\r
+       ADR 800+18\r
+       STM <<8,WTR>>\r
+       ADR 800+19\r
+       STM <<7,WTR>>\r
+       ADR 832+19\r
+       STM <<8,WTR>>\r
+       ADR 256+2\r
+       STM <<7,D4>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       ADR 256+14\r
+       ALP WATER\r
+       ADR 416+9\r
+       ALP WATER\r
+       ADR 640+22\r
+       ALP WATER\r
+       TERM\r
+HOLEB: ADR 32+19\r
+       INCR XP\r
+       STM <<8,WLL>>\r
+       INCR YP\r
+       STM <<10,WLL>>\r
+       INCR XP\r
+       STM <<10,WLL>,<8,WLL>>\r
+       INCR YM\r
+       STM <<10,WLL>,<10,WLL>,<8,WLL>>\r
+       INCR XM\r
+       STM <<10,WLL>,<8,WLL>>\r
+       INCR YP\r
+       STM <<10,WLL>>\r
+       INCR XM\r
+       STM <<8,WLL>>\r
+       INCR YP\r
+       STM <<8,WLL>>\r
+       ADR 544+8\r
+       STM <<10,WLL>,<5,WLL>>\r
+       INCR XP\r
+       ADR 320+2\r
+       STM <<1,WLL>,<1,D4>,<3,SPC>,<7,WSN1>,<3,SPC>,<1,D7>,<1,WLL>>\r
+       ADR 320+3\r
+       STM <<1,D4>,<4,SPC>,<7,WSN1>,<4,SPC>,<1,D7>>\r
+       ADR 480+4\r
+       STM <<7,WSN1>>\r
+       ADR 480+5\r
+       STM <<7,WSN1>>\r
+       ADR 480+6\r
+       STM <<7,WSN1>>\r
+       ADR 448+7\r
+       STM <<9,WLL>>\r
+       ADR 128+15\r
+       STM <<1,TEE>,<7,SPC>,<6,WLL>,<4,SPC>,<1,HOLE>>\r
+       ADR 448+23\r
+       STM <<9,WLL>>\r
+       ADR 480+24\r
+       STM <<7,WSN2>>\r
+       ADR 480+25\r
+       STM <<7,WSN2>>\r
+       ADR 480+26\r
+       STM <<7,WSN2>>\r
+       ADR 320+27\r
+       STM <<1,D5>,<4,SPC>,<7,WSN2>,<4,SPC>,<1,D6>>\r
+       ADR 320+28\r
+       STM <<1,WLL>,<1,D5>,<3,SPC>,<7,WSN2>,<3,SPC>,<1,D6>,<1,WLL>>\r
+       ADR 544+26\r
+       ALP SAND\r
+       ADR 544+4\r
+       ALP SAND\r
+       ADR 320+11\r
+       STM <<1,BARR>>\r
+       INCR XMYP\r
+       ADR 512+10\r
+       STM <<5,D6>>\r
+       INCR XPYP\r
+       STM <<1,SPC>,<4,D7>>\r
+       INCR YM\r
+       STM <<1,D7>,<8,WLL>>\r
+       INCR XMYP\r
+       STM <<4,WLL>>\r
+       INCR XPYP\r
+       STM <<3,WLL>>\r
+       INCR YM\r
+       STM <<5,WLL>>\r
+       INCR XMYP\r
+       STM <<2,WLL>>\r
+       INCR XPYP\r
+       STM <<2,WLL>>\r
+       TERM\r
+HOLEC: INCR YP\r
+       ADR 192+1\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<3,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<3,WLL>>\r
+       ADR 672+10\r
+       STM <<13,DWN>,<1,DWN>>\r
+       INCR YP\r
+       STM <<3,DWN>>\r
+       INCR XP\r
+       STM <<13,DWN>,<1,DWN>>\r
+       INCR YM\r
+       STM <<2,DWN>>\r
+       INCR XM\r
+       STM <<13,DWN>>\r
+       INCR YP\r
+       STM <<1,DWN>>\r
+       INCR XP\r
+       STM <<13,DWN>>\r
+       ADR 224+19\r
+       STM <<13,UP>,<1,UP>>\r
+       INCR YP\r
+       STM <<4,UP>>\r
+       INCR XM\r
+       STM <<13,UP>,<1,UP>>\r
+       INCR YM\r
+       STM <<4,UP>>\r
+       INCR XP\r
+       STM <<13,UP>>\r
+       INCR YP\r
+       STM <<3,UP>>\r
+       INCR XM\r
+       STM <<12,UP>>\r
+       INCR YM\r
+       STM <<2,UP>>\r
+       INCR XP\r
+       STM <<11,UP>>\r
+       INCR YP\r
+       STM <<1,UP>>\r
+       INCR XM\r
+       STM <<11,UP>>\r
+       ADR 512+15\r
+       STM <<4,WLL>>\r
+       INCR YP\r
+       STM <<1,WLL>>\r
+       INCR XP\r
+       STM <<5,WLL>>\r
+       ADR 448+4\r
+       STM <<1,TEE>>\r
+       ADR 448+26\r
+       STM <<1,HOLE>>\r
+       ADR 352+11\r
+       ALP DWNHIL\r
+       ADR 384+20\r
+       ALP UPHILL\r
+       TERM\r
+HOLED: INCR XM\r
+       ADR 96+15\r
+       STM <<1,TEE>>\r
+       ADR 704+15\r
+       STM <<1,HOLE>>\r
+       ADR 32+6\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<13,WLL>,<6,WLL>>\r
+       INCR XPYM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<13,WLL>,<12,WLL>>\r
+       INCR YM\r
+       STM <<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<13,WLL>,<6,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       ADR 672+8\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<1,WLL>>\r
+       INCR XMYM\r
+       STM <<1,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       ADR 672+18\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<1,WLL>>\r
+       INCR XMYM\r
+       STM <<1,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       ADR 448+13\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<1,WLL>>\r
+       INCR XMYM\r
+       STM <<1,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       ADR 224+8\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<1,WLL>>\r
+       INCR XMYM\r
+       STM <<1,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       ADR 224+18\r
+       INCR XMYP\r
+       STM <<1,D6>>\r
+       INCR YP\r
+       STM <<1,D6>,<1,WLL>>\r
+       INCR XPYP\r
+       STM <<1,D7>>\r
+       INCR XP\r
+       STM <<1,D7>,<1,WLL>>\r
+       INCR XPYM\r
+       STM <<1,D4>>\r
+       INCR YM\r
+       STM <<1,D4>,<1,WLL>>\r
+       INCR XMYM\r
+       STM <<1,D5>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR XMYP\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<1,WLL>>\r
+       INCR YP\r
+       STM <<2,WLL>>\r
+       ADR 416+6\r
+       INCR XP\r
+       STM <<4,WSN2>>\r
+       INCR XPYP\r
+       STM <<2,WSN2>>\r
+       INCR YP\r
+       STM <<2,WSN2>>\r
+       INCR XMYP\r
+       STM <<2,WSN2>>\r
+       INCR XM\r
+       STM <<4,WSN2>>\r
+       INCR XMYM\r
+       STM <<2,WSN2>>\r
+       INCR YM\r
+       STM <<2,WSN2>>\r
+       INCR XPYM\r
+       STM <<1,WSN2>>\r
+       INCR XP\r
+       STM <<5,WSN2>>\r
+       INCR XPYP\r
+       STM <<1,WSN2>>\r
+       INCR YP\r
+       STM <<2,WSN2>>\r
+       INCR XMYP\r
+       STM <<1,WSN2>>\r
+       INCR XM\r
+       STM <<4,WSN2>>\r
+       INCR XMYM\r
+       STM <<1,WSN2>>\r
+       INCR YM\r
+       STM <<2,WSN2>>\r
+       INCR XP\r
+       STM <<5,WSN2>>\r
+       INCR YP\r
+       STM <<2,WSN2>>\r
+       INCR XM\r
+       STM <<4,WSN2>>\r
+       INCR YM\r
+       STM <<1,WSN2>>\r
+       INCR XP\r
+       STM <<4,WSN2>>\r
+       ADR 416+18\r
+       INCR XP\r
+       STM <<4,WSN1>>\r
+       INCR XPYP\r
+       STM <<2,WSN1>>\r
+       INCR YP\r
+       STM <<2,WSN1>>\r
+       INCR XMYP\r
+       STM <<2,WSN1>>\r
+       INCR XM\r
+       STM <<4,WSN1>>\r
+       INCR XMYM\r
+       STM <<2,WSN1>>\r
+       INCR YM\r
+       STM <<2,WSN1>>\r
+       INCR XPYM\r
+       STM <<1,WSN1>>\r
+       INCR XP\r
+       STM <<5,WSN1>>\r
+       INCR XPYP\r
+       STM <<1,WSN1>>\r
+       INCR YP\r
+       STM <<2,WSN1>>\r
+       INCR XMYP\r
+       STM <<1,WSN1>>\r
+       INCR XM\r
+       STM <<4,WSN1>>\r
+       INCR XMYM\r
+       STM <<1,WSN1>>\r
+       INCR YM\r
+       STM <<2,WSN1>>\r
+       INCR XP\r
+       STM <<5,WSN1>>\r
+       INCR YP\r
+       STM <<2,WSN1>>\r
+       INCR XM\r
+       STM <<4,WSN1>>\r
+       INCR YM\r
+       STM <<1,WSN1>>\r
+       INCR XP\r
+       STM <<4,WSN1>>\r
+       ADR 448+9\r
+       ALP SAND\r
+       ADR 448+21\r
+       ALP SAND\r
+       TERM\r
+HOLEE: INCR YP\r
+       ADR 288+1\r
+       STM <<9,WLL>>\r
+       INCR XM\r
+       STM <<1,D4>>\r
+       INCR YP\r
+       STM <<1,D6>>\r
+       INCR XM\r
+       STM <<1,D4>,<7,WLL>>\r
+       INCR YP\r
+       STM <<8,WLL>>\r
+       INCR XP\r
+       STM <<8,WLL>>\r
+       INCR YP\r
+       STM <<1,D5>>\r
+       INCR XP\r
+       STM <<1,D7>>\r
+       INCR YP\r
+       STM <<1,D5>,<8,WLL>>\r
+       INCR XP\r
+       STM <<8,WLL>>\r
+       INCR YM\r
+       STM <<9,WLL>>\r
+       INCR XP\r
+       STM <<1,D6>>\r
+       INCR YM\r
+       STM <<1,D4>>\r
+       INCR XP\r
+       STM <<1,D6>,<8,WLL>>\r
+       INCR YM\r
+       STM <<8,WLL>>\r
+       INCR XM\r
+       STM <<9,WLL>>\r
+       INCR YM\r
+       STM <<1,D7>>\r
+       INCR XM\r
+       STM <<1,D5>>\r
+       INCR YM\r
+       STM <<1,D7>,<8,WLL>>\r
+       INCR XM\r
+       STM <<8,WLL>>\r
+       ADR 448+18\r
+       STM <<3,WSN1>>\r
+       ADR 480+19\r
+       STM <<5,WSN1>>\r
+       ADR 512+20\r
+       STM <<7,WSN1>>\r
+       ADR 512+21\r
+       STM <<7,WSN1>>\r
+       ADR 480+22\r
+       STM <<5,WSN1>>\r
+       ADR 448+23\r
+       STM <<3,WSN1>>\r
+       ADR 448+7\r
+       STM <<3,WSN2>>\r
+       ADR 480+8\r
+       STM <<5,WSN2>>\r
+       ADR 512+9\r
+       STM <<7,WSN2>>\r
+       ADR 512+10\r
+       STM <<7,WSN2>>\r
+       ADR 480+11\r
+       STM <<5,WSN2>>\r
+       ADR 448+12\r
+       STM <<3,WSN2>>\r
+       INCR XPYP\r
+       ADR 448+13\r
+       STM <<2,D5>>\r
+       ADR 352+16\r
+       STM <<2,D7>>\r
+       INCR XMYP\r
+       ADR 384+13\r
+       STM <<2,D6>>\r
+       ADR 480+16\r
+       STM <<2,D4>>\r
+       INCR YP\r
+       ADR 416+13\r
+       STM <<5,WLL>>\r
+       ADR 384+14\r
+       STM <<2,WLL>>\r
+       INCR XP\r
+       STM <<2,WLL>>\r
+       INCR YM\r
+       STM <<2,WLL>>\r
+       INCR XM\r
+       STM <<2,WLL>>\r
+       ADR 480+15\r
+       STM <<5,WLL>>\r
+       ADR 96+15\r
+       STM <<1,TEE>>\r
+       ADR 768+15\r
+       STM <<1,HOLE>>\r
+       INCR XP\r
+       ADR 384+9\r
+       ALP SAND\r
+       ADR 384+20\r
+       ALP SAND\r
+       TERM\r
+HOLEF: INCR YP\r
+       ADR 32+1\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XP\r
+       STM <<13,WLL>,<13,WLL>>\r
+       INCR YM\r
+       STM <<13,WLL>,<13,WLL>,<2,WLL>>\r
+       INCR XM\r
+       STM <<13,WLL>,<13,WLL>>\r
+       ADR 832+12\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+13\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+14\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+15\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+16\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+17\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+18\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+19\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+20\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+21\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+22\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+23\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+24\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+25\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+26\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+27\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 832+28\r
+       STM <<13,UP>,<12,UP>>\r
+       ADR 448+20\r
+       STM <<1,HOLE>>\r
+       ADR 672+4\r
+       STM <<1,TEE>>\r
+       INCR XP\r
+       ADR 384+15\r
+       ALP UPHILL\r
+       TERM\r
+\r
+CHKS6K:        .BYTE ^H55              ;CHECK SUM 3800-3BFF\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
\ No newline at end of file
diff --git a/A33500.XX b/A33500.XX
new file mode 100644 (file)
index 0000000..af5c785
--- /dev/null
+++ b/A33500.XX
@@ -0,0 +1,611 @@
+       .TITLE GFST GOLF SELF TEST STUFF\r
+       .SBTTL RAM ALLOCATIONS\r
+;\r
+;RAM ALLOCATIONS\r
+;\r
+       .ASECT\r
+       .RADIX 16\r
+       .=20\r
+VIDCON:        .BLKB 1                 ;COINCIDENCE READ\r
+       .=24\r
+SOUNDS:        .BLKB 1\r
+       .=40\r
+OPSWA:  .BLKB 1                        ;8 BITS OPTION SWITCH\r
+                               ;D7-COIN OPTION 1\r
+                               ;D6-COIN OPTION 0\r
+                               ;D5-LANGUAGE OPTION 1\r
+                               ;D4-LANGUAGE OPTION 0\r
+                               ;D3-(SPARE)\r
+                               ;D2-(SPARE) 1/2 BONUS STROKES\r
+SHOTS  =2                      ;D1-1/2 BONUS STROKES\r
+B.ATSD =1                      ;D0-ATTRACT MODE SOUNDS\r
+\r
+OPSWB: .BLKB 1\r
+                               ;D7=COLLISION-BLK BALL/PLYFLD\r
+                               ;D6=     "   -WHT BALL/PLYFLD\r
+                               ;D5=     "   -BLK BALL/WHT BALL\r
+                               ;D4=(SPARE)\r
+                               ;D3=V-BLANK\r
+                               ;D2=(SPARE)\r
+                               ;D1=STEERING A\r
+                               ;D0=STEERING B\r
+LIGHTS: .BLKB 2\r
+WATCH: .BLKB 2\r
+IRQRST:        .BLKB 1\r
+\r
+       .=60\r
+$COINA:\r
+$LAM:\r
+$CMODE:\r
+COINDR: .BLKB 1                ;COIN DOOR\r
+                               ;D7=RIGHT COIN MECH\r
+                               ;D6=LEFT COIN MECH\r
+B.SLAM =20                     ;D5=SLAM SWITCH\r
+B.TST  =10                     ;D4=TEST MODE SWITCH\r
+                               ;D3-D0=N.A.\r
+CONTRL:        .BLKB 1                 ;CONTROL INPUTS\r
+B.STRT =80                     ;D7=START SWITCH\r
+B.PG2  =40                     ;D6=PLUNGER SENSOR 2\r
+B.PG1  =20                     ;D5=PLUNGER SENSOR 1\r
+B.NEXT  =10                    ;D4=MOVE TO NEXT HOLE BUTTON\r
+                               ;D3=SPARE\r
+                               ;D2=SPARE\r
+                               ;D1=(SPARE)\r
+                               ;D0=(SPARE)\r
+SKIP3: .BLKB 2\r
+DIAGN: .BLKB 1\r
+       .=068\r
+NOISE: .BLKB 2         ; NOISE ENABLE\r
+SNDDSB:        .BLKB 2         ;SOUND ENABLE\r
+       .BLKB 2\r
+       .BLKB 2\r
+       .=080\r
+ZPAGE:\r
+       .IRP Z,<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15>\r
+       .LIST\r
+R'Z:   .BLKB\r
+       .NLIST\r
+       .ENDR\r
+\r
+; MOVING OBJECT CONTROLS\r
+\r
+PLAY2Y:        .BLKB 2         ;BLACK BALL\r
+PLAY1Y:        .BLKB 6         ;WHITE BALL\r
+PLAY2X: .BLKB 1\r
+UPPER1:        .BLKB 1\r
+SKIP1: .BLKB 1\r
+LOWER1:        .BLKB 1\r
+PLAY1X:        .BLKB 1\r
+UPPER2:        .BLKB 1\r
+SKIP2: .BLKB 1\r
+LOWER2:        .BLKB 1\r
+\r
+; WORKING MEMORY\r
+\r
+;****\r
+;DO NOT MOVE OR CHANGE THE ORDER OF THE\r
+;FOLLOWING!!!\r
+PLAY1:\r
+XPOS:  .BLKB 2\r
+XPARAM:\r
+YPOS:  .BLKB 2\r
+PLAY2:\r
+XPOS2: .BLKB 2\r
+YPOS2: .BLKB 2\r
+ACCEL: .BLKB\r
+PNTRX: .BLKB\r
+SAVEX: .BLKB\r
+PNTRY: .BLKB\r
+OBJPIX:        .BLKB 2         ;UPPER/LOWER PIX SELECT WHITE\r
+HLCNST:        .BLKB 2\r
+OBJ2PX:        .BLKB 2         ;UPPER/LOWER PIX SELECT BLACK\r
+;*END OF 'NOT NOT MOVE' ***\r
+VEL:   .BLKB 2         ;VELOCITY VECTOR\r
+SQRLX: .BLKB\r
+SQRLY: .BLKB\r
+OLDBX: .BLKB\r
+OLDBPX:        .BLKB\r
+ANG:   .BLKB 2\r
+DIRECT =ANG+1\r
+DIR:   .BLKB 1\r
+FRAME: .BLKB 1\r
+PLUNG: .BLKB 2\r
+ATRSEQ:        .BLKB 1         ;ATTRACT MODE SEQUENCER\r
+TEEY:  .BLKB 1\r
+TEEX:  .BLKB 1\r
+BARRL: .BLKB 1         ;LSB OF MOVING BARRIER\r
+BARRH: .BLKB 1         ;MSB OF MOVING BARRIER\r
+STRKW:  .BLKB 1                ;STROKE COUNTERS\r
+STRKB: .BLKB 1\r
+LITES: .BLKB 1         ;ATTRACTION LIGHT RING COUNTER\r
+NONVOL:                ;NON-VOLITILE STORAGE\r
+SCORE: .BLKB 1         ;WHITE PLAYER\r
+SCORE2:        .BLKB 1         ;BLACK PLAYER\r
+PLAYER:        .BLKB 1         ;MASTER CONTROL\r
+STRTER: .BLKB 1                ;GAME START CONTROL\r
+LNG:   .BLKB 2         ;LANGUAGE SELECT\r
+$CCTIM:        .BLKB 1         ;TIMER FOR ELECTRO-MECHANICAL COUNTER\r
+$PSTSL:        .BLKB 2\r
+$INTCT: .BLKB 1\r
+$LMTIM:        .BLKB 1\r
+$CNCT: .BLKB 1\r
+$CNSTT:        .BLKB 2\r
+SPOOL: .BLKB 1         ;SHOT POOL\r
+FRMCNT:        .BLKB 1\r
+DBOUNC: .BLKB 1                ;SWITCH DEBOUNCE COUNTER\r
+HOLE:  .BLKB 1         ;CURRENT HOLE #\r
+PAR:   .BLKB 1         ;ACCUM PAR VALUE\r
+FREEZE:        .BLKB 1         ;SHORT TIMER\r
+RANDOM: .BLKB 1\r
+POLYL: .BLKB 1         ;RANDOM NUMBER\r
+POLYH: .BLKB 1\r
+SREG:  .BLKB\r
+SNDCTL:        .BLKB 4\r
+ENDZPG:\r
+       .GLOBL NMI              ;NMI ADDRESS\r
+       .GLOBL IRQ              ;IRQ ADDRESS\r
+       .GLOBL PWRON,CLEAR      ;POWER-ON RESET ADDRESS\r
+       .GLOBL DSPLY,CLRSCN,CHKS7K\r
+\r
+       .IRPC X,<01234567>\r
+       .GLOBL CHKS'X'K\r
+       .ENDR\r
+       .SBTTL MACROS\r
+\r
+       .MACRO MSG COLOR,OP\r
+       .IIF EQ, COLOR-1,SEC\r
+       .IIF EQ, COLOR-2,CLC\r
+       .IIF NB,<OP>,LDY I,OP\r
+       JSR MSG\r
+       .ENDM\r
+\r
+       .MACRO EMSG OP\r
+       .IIF NB,<OP>,LDY I,OP\r
+       JSR EMSG\r
+       .ENDM\r
+\r
+       .MACRO NUMBER   DEST,COLOR,OP\r
+       .IF NB <DEST>\r
+       LDA I,DEST&0FF\r
+       STA R2\r
+       LDA I,DEST&-100/100\r
+       STA R3\r
+       .ENDC\r
+       .IF NB,COLOR\r
+       .IIF EQ,COLOR-1,LDA I,80\r
+       .IIF EQ,COLOR-2,LDA I,0\r
+       STA R4\r
+       .ENDC\r
+       LDA OP\r
+       JSR CVD\r
+       .ENDM\r
+\r
+       .MACRO MULT     P,M,ML\r
+       .IIF NB,<P>,LDX I,P     ;PRODUCT @\r
+       .IIF NB,<M>,LDY I,M     ;MULTIPLICAND @\r
+       .IIF NB,<ML>,LDA ML     ;MULTIPLIER \r
+       JSR MULT\r
+       .ENDM\r
+\r
+       .MACRO GENS OPCODE\r
+       .IRP    X,<OPCODE>\r
+       .MACRO X'S COUNT,LABEL\r
+       .REPT COUNT\r
+       X       LABEL\r
+       .ENDR\r
+       .ENDM X'S\r
+       .ENDR\r
+       .ENDM GENS\r
+\r
+       GENS <ASL,LSR,ROL,ROR,DEX,DEY,INX,INY,INC,DEC>\r
+\r
+       .MACRO SAVE OP\r
+       .IRP X,<OP>\r
+       LDA X\r
+       PHA\r
+       .ENDR\r
+       .ENDM\r
+\r
+       .MACRO RESTOR OP\r
+       .IRP X,<OP>\r
+       PLA\r
+       STA X\r
+       .ENDR\r
+       .ENDM\r
+       \r
+       .MACRO CLR OP\r
+        LDA I,0\r
+       .IRP X,<OP>\r
+       STA X\r
+       .ENDR\r
+       .ENDM\r
+               \r
+       .MACRO MOVB D,S\r
+       LDA S\r
+       STA D\r
+       .ENDM\r
+       \r
+       .MACRO MOV D,S\r
+       LDA S\r
+       STA D\r
+       LDA S+1\r
+       STA D+1\r
+       .ENDM\r
+       \r
+       .MACRO ADD OP\r
+       CLC\r
+       ADC OP\r
+       .ENDM\r
+       \r
+       .MACRO ADDM D,S1,S2,C\r
+       .IIF B,<C>,CLC\r
+       LDA S1\r
+       .IF B,<S2>\r
+       ADC D\r
+       .IFF\r
+       ADC S2\r
+       .IFTF\r
+       STA D\r
+       LDA S1+1\r
+       .IFT\r
+       ADC D+1\r
+       .IFF\r
+       ADC S2+1\r
+       .ENDC\r
+       STA D+1\r
+       .ENDM\r
+\r
+       .MACRO SUB OP\r
+       SEC\r
+       SBC OP\r
+       .ENDM\r
+\r
+       .MACRO SUBM D,S1,S2,C\r
+       .IIF B,<C>,SEC\r
+       .IF NB,<S2>\r
+       LDA S1\r
+       SBC S2\r
+       .IFF\r
+       LDA D\r
+       SBC S1\r
+       .IFTF\r
+       STA D\r
+       .IFT\r
+       LDA S1+1\r
+       SBC S2+1\r
+       .IFF\r
+       LDA D+1\r
+       SBC S1+1\r
+       .ENDC\r
+       STA D+1\r
+       .ENDM\r
+\r
+       .LIST MEB\r
+       .NLIST BYT\r
+       .ENABL AMA\r
+       .PAGE\r
+       .SBTTL CONSTANTS\r
+;\r
+;CONSTANT ASSIGNMENTS\r
+;\r
+DISPLL =00             ;ADDRESS OF DISPLAY RAM\r
+DISPLH =08     \r
+PLYFLD =0800                   ;DISPLAY RAM ADDRESS\r
+MAXFOR  =0D\r
+BLANK  =00             ;CODE FOR BLANKED BALL\r
+$LMBIT =20             ;SLAM SWITCH POSITION\r
+NMIDIS =60             ;NMI DISABLE\r
+NMIEN  =61             ;NMI ENABLE\r
+SNDSON =6A             ;SOUNDS ON\r
+SNDSOF =6B             ;SOUNDS OFF\r
+COINOF =6C\r
+COINON =6D\r
+WH     =1\r
+BK     =2\r
+OFFST  =PLAY2-PLAY1    ;OFFSET TO SECOND PLAYER'S PARAMETERS\r
+;\r
+;SOUNDS\r
+;\r
+HITSD  =74\r
+HOLESD =10\r
+SQRSD  =0FA\r
+H2OSD  =08\r
+CLOKSD =08\r
+SANDSD =0FF\r
+UPSD   =08\r
+DWNSD  =08\r
+COINSD  =08\r
+ATRSD  =08             ;ATTRACT MODE SOUND\r
+CLUBSD =76             ;CLUB HITS BALL\r
+;\r
+CNTBLK =XPARAM-PLAY1\r
+;\r
+;CONTROL WORD "PLAYER"\r
+;\r
+B.ATR  =80             ;ATTRACT MODE\r
+B.SLOK  =40            ;START LOCK OUT\r
+B.MSG  =20             ;WARNING GIVEN\r
+B.WARN =10             ;SHOTS LOW WARNING\r
+B.VBLK =08             ;V-BLANKING\r
+B.BMOV =04             ;BALL IN MOITION\r
+B.SQR  =02             ;SHOT TIMER\r
+B.DROP =01             ;HOLE SUNK\r
+;\r
+MINDCL  =0C            ;MINIMUM DECELERATION\r
+MAXSTK  =06            ;MAXIMUM NUMBER OF STROKES\r
+TOOFST =5              ;TOO FAST TO FALL IN CUP\r
+SANDA  =MINDCL*3       ;SAND DECELERATION\r
+PRGSPC  =2000          ;ROM IS AT 2000-3FFF\r
+;\r
+;CONTROL WORD "STRTER"\r
+;\r
+B.STOP  =80            ;BALL STOPPED\r
+B.PLY  =40             ;PLAYER SELECT\r
+B.WHDN =20             ;WHITE DONE\r
+B.BSTR =10             ;BLACK STARTED (2 PLAYER)\r
+B.BKDN =08             ;BLACK DONE\r
+B.TUNE =04             ;PLAY TUNE\r
+       .CSECT GFST\r
+\r
+       .GLOBL MSG,EMSG,CVD,MSTA\r
+       .PAGE\r
+CLEAR: LDA I,0\r
+       LDX I,NONVOL-ZPAGE-1\r
+3$:    STA ZX,ZPAGE\r
+       DEX\r
+       BPL 3$\r
+       LDA OPSWA       ;GET FORIEGN LANGUAGE OPTIONS\r
+       LSRS 3          ;(COMES IN BITS 4 AND 5)\r
+       AND I,6         ;ONLY 4 ALLOWED\r
+       SEI             ;MSG IS CALLED IN VBLANK.\r
+       TAX\r
+       LDA AX,MSTA\r
+       STA LNG\r
+       LDA AX,MSTA+1\r
+       STA LNG+1\r
+       STA IRQRST\r
+CLRSCN:        LDA I,PLYFLD+768.&-100/100\r
+       STA Z,R1\r
+       LDA I,0\r
+       STA Z,R0\r
+       LDX I,3\r
+       LDY I,127.\r
+1$:    STA NY,R0\r
+       DEY\r
+       BNE 1$\r
+       DEC R1\r
+       DEX\r
+       BPL 1$\r
+       STA A,PLYFLD+300        ;HE MISSES THIS ONE\r
+DSPLY: RTS\r
+       .PAGE\r
+       .SBTTL POWER ON ENTRY\r
+\r
+       .GLOBL WHITE,BLACK,ROMERR,ROMOK,SELFT,RAMBAD\r
+       .GLOBL SPCOIN,LANGM,SETATR\r
+PWRON: STA Z,NMIDIS            ;DISABLE NMI\r
+       CLD\r
+       SEI\r
+       LDX I,0FF               ;SET STACK POINTER\r
+       TXS\r
+       \r
+       .SBTTL SELF-TEST: RAM CHECK\r
+       \r
+       INX                     ;SET X TO 0\r
+       STA WATCH               ;KICK THE WATCHDG\r
+       TXA\r
+1$:    STA AX,PLYFLD\r
+       STA AX,PLYFLD+100\r
+       STA AX,PLYFLD+200\r
+       STA AX,PLYFLD+300       ;(PAGE 0 TOO)\r
+       DEX\r
+       BNE 1$\r
+       STA WATCH\r
+       LDX I,ZPAGE             ;PAGE 0 STARTS @ ZPAGE\r
+5$:    LDA I,1                 ;PUT 1 IN ACC\r
+4$:    STA ZX,0                ;WRITE IT\r
+       CMP ZX,0                ;DID IT WORK?\r
+       BEQ 2$                  ;YEP\r
+8$:    LDX I,0\r
+       LDY I,0\r
+3$:    LDA AX,RAMBAD           ;PUT UP RAM BAD MSG\r
+       STA AY,PLYFLD+320.+16.\r
+       BEQ .                   ;LET WATCHDOG TIME OUT\r
+       INX\r
+       TYA\r
+       CLC\r
+       ADC I,32.\r
+       TAY\r
+       BNE 3$                  ;ALWAYS\r
+2$:    ASL\r
+       BCC 4$                  ;CHECK EACH BIT IN EACH BYTE\r
+       INX\r
+       BNE 5$\r
+       LDX I,ZPAGE             ;NOW WRITE ADDRESS INTO PAGE 0\r
+6$:    TXA\r
+       STA ZX,0\r
+       INX\r
+       BNE 6$\r
+       LDX I,ZPAGE             ;SEE IF IT WORKED\r
+7$:    TXA\r
+       CMP ZX,0\r
+       BNE 8$                  ;NOPE. WRITE ERROR MESSAGE\r
+       INX\r
+       BNE 7$\r
+       STA WATCH               ;THE PRE-CEEDING MAY HAVE TAKEN A WHILE\r
+       .PAGE\r
+       .SBTTL SELF-TEST: ROM CHECK\r
+       \r
+;AT THIS POINT THE RAM IS ASSUMED TO BE GOOD. A CHECKSUM\r
+;IS COMPUTED ACCROSS EACH 4 BIT NIBBLE OF EACH 1024 BYTE\r
+;BLOCK. THE RESULTS OF THE TESTS ARE STORED IN R0 FOR\r
+;THE LS NIBBLE AND R1 FOR THE MS NIBBLE.\r
+\r
+ROMTST:        JSR CLEAR               ;CLEAR EVERYTHING\r
+       SEI\r
+       TAY                     ;AND THE Y TO 0\r
+       LDA I,PRGSPC&-100/100   ;START AT BEGINNING OF ROM\r
+       STA R3\r
+4$:    LDX I,3                 ;4 PAGES PER K\r
+       LDA I,55                ;START CHK SUM AT NON-ZERO\r
+1$:    EOR NY,R2               ;PUT IN PROGAM DATA\r
+       INY\r
+       BNE 1$\r
+       INC R3                  ;NEXT PAGE\r
+       DEX\r
+       BPL 1$                  ;(TAKES APPROX 1 FRAME)\r
+       TAX                     ;KEEP RESULT FOR A SEC\r
+       NOP                     ;ROOM FOR DEVELOPMENT\r
+       CLC\r
+       AND I,0F                ;ERROR?\r
+       BEQ 2$                  ;NO\r
+       SEC                     ;YEP\r
+2$:    ROR R0                  ;PASS ERROR FLAG FOR LSB'S\r
+       TXA                     ;GET CHKSUM\r
+       AND I,0F0               ;ERROR?\r
+       BEQ 3$                  ;NO\r
+       SEC                     ;YEP\r
+3$:    ROR R1                  ;PASS ERROR FLAG FOR MSB'S\r
+       STA WATCH\r
+       LDA R3  \r
+       CMP I,40                ;DONE?\r
+       BCC 4$                  ;NOPE. DO IT AGAIN\r
+       LDA R0                  ;ANY ERRORS?\r
+       ORA R1\r
+       BEQ SWTEST              ;NOPE. OFF TO SWITCH TEST\r
+       LDA I,PLYFLD+96.+20.&0FF\r
+       STA R2\r
+       LDA I,PLYFLD+96.+20.&-100/100\r
+       STA R3\r
+       LDX I,7\r
+8$:    LDY I,0\r
+       LDA I,'X\r
+       LSR R1                  ;MSB ERROR?\r
+       BCC 5$                  ;NO\r
+       STA NY,R2               ;PRINT X\r
+5$:    INYS 2\r
+       LSR R0                  ;LSB ERROR?\r
+       BCC 6$                  ;NO\r
+       STA NY,R2               ;PRINT X\r
+6$:    LDA R2\r
+       CLC\r
+       ADC I,96.\r
+       STA R2\r
+       BCC 7$\r
+       INC R3\r
+7$:    DEX\r
+       BPL 8$\r
+       MSG WH,ROMERR\r
+       BEQ SWT0                ;SKIP THE 'ROM OK' MSG\r
+       .PAGE\r
+       .SBTTL SELF-TEST: SWITCH CHECKS\r
+SWTEST: MSG WH,ROMOK           ;ROM OK\r
+SWT0:  MSG WH,SELFT            ;PUT UP SELF TEST STUFF\r
+       LDA I,8\r
+       STA R10                 ;OLD OPTIONS\r
+       STA SNDSON              ;MAKE SURE SOUNDS WORK\r
+SWT1:  LDA I,0FF               ;KEEP ALL THE LIGHTS ON\r
+       STA LIGHTS\r
+       MOVB R2,<I,128.+14.>\r
+       MOVB R3,<I,PLYFLD/100>\r
+       MOVB R4,<I,80>\r
+       LDA OPSWA               ;GET COINING OPTION\r
+       AND I,0C0\r
+       ASL\r
+       ROLS 2\r
+       TAX\r
+       LDA AX,SPCOIN\r
+       JSR CVD                 ;CONVERT COINING TO DECIMAL\r
+       LDA OPSWA\r
+       LSRS 3\r
+       AND I,6\r
+       STA R9\r
+       CMP R10                 ;MATCH OLD?\r
+       BEQ 1$                  ;YEP\r
+       STA R10\r
+       EMSG LANGM              ;ERASE OLD\r
+       LDX R10\r
+       LDA AX,MSTA\r
+       STA LNG\r
+       LDA AX,MSTA+1\r
+       STA LNG+1\r
+       MSG WH,LANGM            ;WRITE LANGUAGE OPTION\r
+1$:    LDA CONTRL              ;GET START/PLUNG2/PLUNG1/NXT HOLE\r
+       EOR I,0F0               ;START/NXT ARE - TRUE\r
+       AND I,0F0               ;ONLY THE UPPER BITS\r
+       STA R0\r
+       LDX #0E0                ;SELECT BEEP\r
+       STX SOUNDS\r
+       STX SNDDSB              ;TURN OFF SOUND\r
+       STX NOISE               ;AND NOISE\r
+       LDA COINDR              ;GET LEFT COIN/RIGHT COIN/SLAM/TEST\r
+       EOR I,20                ;SLAM IS - TRUE\r
+       AND I,0E0               ;IGNORE TEST SW\r
+       ORA R0                  ;ANY SWITCH ON?\r
+       BEQ 2$                  ;NOPE. PEACE AND QUIET\r
+       STX SNDDSB+1            ;TURN ON SOUND\r
+2$:    STA WATCH               ;KICK WATCHDOG\r
+PLTST:                 ;PLUNGER TEST\r
+       LDX I,'2+80             ;WHITE '2'\r
+       LDA CONTRL              ;GET START/PLUNG2/PLUNG1/NXT/VBLNK/N.U./STR1/STR2\r
+       ASLS 2                  ;PUT PLUNG2 INTO CARRY\r
+       BCS 1$                  ;PLUNG2 IS ON\r
+       LDX I,0                 ;ELSE ITS 0\r
+1$:    STX A,PLYFLD+512.+12.\r
+       LDX I,'1+80             ;WHITE '1'\r
+       ASL                     ;GET PLUNG2\r
+       BCS 2$                  ;ITS ON\r
+       LDX I,0\r
+2$:    STX A,PLYFLD+480.+12.\r
+       LDA OPSWB               ;PUT STR1 INTO CARRY\r
+       LSR\r
+       LDX I,'B+80             ;WHITE 'B'\r
+       BCS 4$                  ;ITS ON\r
+       LDX I,0\r
+4$:    STX A,PLYFLD+416.+10.\r
+       LSR                     ;PUT STR2 INTO CARRY\r
+       LDX I,'A+80             ;WHITE 'A'\r
+       BCS 5$                  ;ITS ON\r
+       LDX I,0\r
+5$:    STX A,PLYFLD+384.+10.\r
+       LDA COINDR\r
+       AND I,B.TST             ;TEST MODE?\r
+       BNE 6$                  ;YEP. LOOP\r
+       JMP SWT1\r
+6$:    LDX I,ENDZPG-NONVOL-1   ;NOPE. CLEAR OUT NON-VOL RAM\r
+       LDA I,0\r
+3$:    STA ZX,NONVOL\r
+       DEX\r
+       BPL 3$\r
+       STA IRQRST              ;ENABLE INTERUPTS\r
+       CLI\r
+       JMP SETATR              ;GO TO MAIN LOOP\r
+       .PAGE\r
+NMI:   STA NMIDIS              ;PREVENT NOISE\r
+       PHA\r
+       CLD\r
+       LDA I,0\r
+       STA Z,PLUNG\r
+       LDA I,07\r
+       STA Z,PLUNG+1\r
+       LDA #20                 ;PLUNGER NOISE TEST\r
+       BIT CONTRL              ;MASK WITH PLUNGER BIT\r
+       BNE 2$                  ;JUST NOISE ON NMI INPUT\r
+       BVC 2$                  ;UNDERFLOW\r
+       ASL                     ;SET B.PG2\r
+1$:    BIT Z,CONTRL            ;CHECK PLUNGER\r
+       BEQ 4$                  ;STOP COUNTING NOW\r
+       DEC Z,PLUNG\r
+       BNE 1$\r
+       DEC Z,PLUNG+1\r
+       BNE 1$\r
+2$:    LDA I,0\r
+       STA Z,PLUNG+1           ;SET ZERO VALUE\r
+4$:    PLA\r
+       RTI\r
+\r
+       .BLKB 256.\r
+       .VCTRS 3FF8,55,NMI,PWRON,IRQ\r
+CHKS7K =3FF8\r
+       .END PWRON\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\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\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/A33501.XX b/A33501.XX
new file mode 100644 (file)
index 0000000..23aa409
Binary files /dev/null and b/A33501.XX differ
diff --git a/A33502.XX b/A33502.XX
new file mode 100644 (file)
index 0000000..42e8ea5
--- /dev/null
+++ b/A33502.XX
@@ -0,0 +1,582 @@
+;      26-AUG-78\r
+;      16:45\r
+       .TITLE GFWPLY: MINI-GOLF PLAYFIELD UPDATE ROUTINES\r
+       .GLOBL EMSG,MSG,CVD,R0,R1,R2,R3,R4,LNG\r
+\r
+       .MACRO ADD OP\r
+       CLC\r
+       ADC OP\r
+       .ENDM\r
+\r
+       .MACRO SUB OP\r
+       SEC\r
+       SBC OP\r
+       .ENDM\r
+\r
+       .MACRO GENS OP\r
+       .IRP Z,<OP>\r
+       .MACRO Z'S COUNT,LAB\r
+       .REPT COUNT\r
+       Z LAB\r
+       .ENDR\r
+       .ENDM\r
+       .ENDR\r
+       .ENDM\r
+\r
+       GENS <ASL,LSR,ROL,ROR,INX,DEX,INY,DEY,INC,DEC>\r
+\r
+       .RADIX 16\r
+       .CSECT GFWPLY\r
+       .PAGE\r
+       .SBTTL MESSAGE WRITE\r
+;\r
+;THIS ROUTINE WILL WRITE A MESSAGE HORIZONTAL ON THE SCREEN.  THE MESSAGE\r
+;IS SELECTED BY THE CONTENTS OF THE Y-REGISTER.\r
+;\r
+;AT ENTRY:\r
+;CARRY =0 FOR BLACK MESSAGE; CARRY =1 FOR WHITE MESSAGE\r
+;Y = MESSAGE #\r
+;LNG,LNG+1 MUST CONTAIN THE ADDRESS OF THE MESSAGES\r
+\r
+;AT EXIT:\r
+;A,X,Y,R0,R1,R2,R3,R4 DESTROYED. (CC: EQUAL =1, N=0)\r
+;\r
+;\r
+       .ENABL LSB\r
+EMSG:  LDA I,80        ;ERASE MODE REQUEST ENTER HERE\r
+       BMI 6$          ; (ALWAYS)\r
+MSG:   LDA I,0         ;NORMAL ENTRY\r
+6$:    ROR             ;SAVE CARRY FOR COLOR SELECT\r
+       STA R4\r
+       LDA NY,LNG\r
+       STA R0\r
+       INY\r
+       LDA NY,LNG\r
+       STA R1          ;R0,R1 => ADDRESS OF MESSAGE IN TABLE\r
+       LDY I,0\r
+       LDX I,0\r
+3$:    LDA NY,R0       ;GET DATA. WHAT IS IT?\r
+       BEQ 1$          ;END.\r
+       BPL 2$          ;ASCII.\r
+       AND I,7F        ;ADDRESS. MASK UPPER BIT OUT\r
+       STA R3          ;MSB'S GO TO R3\r
+       INY\r
+       LDA NY,R0\r
+       STA R2          ;LSB'S GO TO R2\r
+4$:    INY\r
+       BNE 3$          ;(ALWAYS)\r
+2$:    ORA R4          ;PUT IN THE COLOR BIT (IF ANY)\r
+       BIT R4          ;WHAT ARE WE DOING?\r
+       BVC 5$          ;NORMAL STUFF\r
+       LDA I,0         ;ERASE. USE A SPACE\r
+5$:    STA NX,R2       ;TO THE SCREEN\r
+       CLC\r
+       LDA R2\r
+       ADC I,20        ;GOOFY HARDWARE REQUIRES HORIZONTAL WRITE\r
+       STA R2\r
+       BCC 4$\r
+       INC R3\r
+       BNE 4$          ;(ALWAYS)\r
+1$:    RTS\r
+       .DSABL LSB\r
+       .PAGE\r
+;THIS ROUTINE CONVERTS THE BINARY NUMBER IN 'A' (0-255) TO BCD ASCII\r
+\r
+;AT ENTRY:\r
+;A = BINARY NUMBER TO BE CONVERTED\r
+;R2,R3 = PLYFLD ADDRESS OF DESTINATION\r
+;R4 BIT 7 = COLOR (0 FOR BLACK; 1 FOR WHITE)\r
+\r
+;AT EXIT:\r
+;A=0; X,Y,R0,R1 DESTROYED; R2,R3,R4 UNDISTURBED\r
+\r
+CVD:   PHA             ;PUT NUMBER TO STACK\r
+       LDA I,0\r
+       TAY             ;Y IS TO BE ACCUMULATOR\r
+       STA R1          ;(DOUBLE PRECISION)\r
+       PHA             ;CONVERTER OVERFLOW SPACE\r
+       LDX I,0\r
+       BIT R4          ;BLANK MODE?\r
+       BVS 8$          ;YES. DO RIPPLE BLANKING FOR 3 DIGITS\r
+       LDA I,1         ;CONVERTER STARTS AT 1\r
+       STA R0\r
+       TSX             ;POINT TO DATA\r
+       SED             ;THIS ROUTINE RUNS ENTIRELY IN BCD MODE\r
+       BNE 1$          ;(ALWAYS)\r
+3$:    TYA             ;ACCUMULATE\r
+       ADD R0          ; THE 1'S AND 10'S\r
+       TAY\r
+       LDA R1\r
+       ADC ZX,1        ; AND 100'S\r
+       STA R1\r
+2$:    LDA R0          ;ADJUST CONVERTER\r
+       ADD R0          ; 1'S AND 10'S\r
+       STA R0\r
+       LDA ZX,1        ; 100'S\r
+       ADC ZX,1\r
+       STA ZX,1\r
+1$:    ROR ZX,2        ;REQUEST BIT SET?\r
+       BCS 3$          ;YES\r
+       BNE 2$          ;NO BUT THE REGISTER ISN'T EMPTY\r
+       STY R0          ;SAVE ACCUMULATOR LOW BITS\r
+       CLD             ;BACK TO BINARY MODE\r
+       LDX I,0         ;PREPARE TO PRINT. START WITH MSB'S\r
+       CLC             ;RIPPLE BLANK FLAG.\r
+       LDA R1          ;ANY 100'S?\r
+       BEQ 4$          ;NOPE. DON'T PRINT ANYTHING\r
+       SEC             ;STOP THE RIPPLE BLANK\r
+       ORA I,'0        ;ASCIFY DATA\r
+       ORA R4          ;ADD COLOR\r
+       LDY AX,PSPC     ;GET INDEX\r
+       INX             ;BUMP TO NEXT SPOT\r
+       STA NY,R2       ;PRINT IT\r
+4$:    LDA R0          ;GET MIDDLE BITS\r
+       BCS 5$          ;DON'T BLANK THEM\r
+       AND I,0F0       ;MIDDLE # = 0?\r
+       BEQ 6$          ;YEP. DON'T PRINT ANYTHING\r
+5$:    LSRS 4\r
+       ORA I,'0        ;ASCIFY IT\r
+       ORA R4          ;ADD IN COLOR\r
+       LDY AX,PSPC     ;GET INDEX\r
+       INX             ;BUMP TO NEXT SPACE\r
+       STA NY,R2       ;PRINT IT\r
+6$:    LDA R0          ;GET LSB'S\r
+       AND I,0F\r
+       ORA I,'0        ;ASCIFY IT\r
+       ORA R4          ;ADD COLOR\r
+       LDY AX,PSPC     ;GET INDEX\r
+       INX             ;BUMP IT\r
+       STA NY,R2       ;PRINT IT\r
+8$:    LDA I,0         ;BLANK\r
+       CPX I,3         ;DONE?\r
+       BCS 7$          ;YEP\r
+       LDY AX,PSPC     ;GET INDEX\r
+       INX\r
+       STA NY,R2       ;BLANK UNUSED PLACES\r
+       BNE 8$          ;(ALWAYS)\r
+7$:    PLA             ;PURGE STACK\r
+       PLA\r
+       RTS\r
+\r
+PSPC:  .BYTE 0,20,40\r
+       .PAGE\r
+       .SBTTL MOVING BARRIER\r
+       .GLOBL BARIER,FRMCNT,BARRL,BARRH,CPPLYA,SLDTST,XPOS,YPOS,DIRECT\r
+       .GLOBL STRTER,B.BSTR,B.BMOV,PLAYER\r
+\r
+;\r
+;BARRIER SUBROUTINE\r
+;THIS ROUTINE MOVES THE VERTICAL OBSTICLE.\r
+;THIS OBSTICLE IS 16 LINES LONG AND MOVES\r
+;OVER 8 STAMPS, STARTING AT THE\r
+;ADDRESS STORED AT BARRL & BARRH.\r
+;THIS ROUTINE IS CALLED BY VBLANK.\r
+;\r
+       .CSECT COLLIS\r
+BARIER: LDA FRMCNT\r
+       BPL 1$\r
+       EOR I,0FF\r
+1$:    LSR\r
+       STA R4                  ;SAVE STAMP TYPE\r
+       LSRS 3                  ;COMPUTE STAMP LOCATION\r
+       TAX                     ;(ALWAYS < 8)\r
+       LDA I,98                ;INVISIBLE BARRIER\r
+       LDY I,0\r
+3$:    STA NY,BARRL            ;CLEAR MOVING OBSTICLE\r
+       INY\r
+       CPY I,0A\r
+       BCC 3$\r
+       TXA\r
+       TAY\r
+       LDA R4                  ;GET STAMP #\r
+       AND I,7                 ;MASK TO 3 BITS\r
+       ORA I,90                ;MAKE A BARRIER PIX\r
+       STA NY,BARRL            ;WRITE BOTTOM STAMP\r
+       INY\r
+       INY\r
+       EOR I,8                 ;SWITCH TO OTHER PIX\r
+       STA NY,BARRL            ;WRITE TOP STAMP\r
+       DEY\r
+       LDA I,90\r
+       STA NY,BARRL            ;WRITE MIDDLE STAMP\r
+       LDX I,0\r
+       LDA I,B.BMOV\r
+       BIT PLAYER              ;BALL IN MOTION?\r
+       BNE 2$                  ;YES\r
+       BIT STRTER              ;WHITE UP?\r
+       BVS 2$                  ;NO. USE XPOS.\r
+       LDX I,8.                ;'PNTRX,PNTRY'\r
+2$:    JSR TSTBAL              ;GO TEST WHITE BALL\r
+       LDX I,4\r
+       LDA I,B.BMOV\r
+       BIT PLAYER              ;BALL IN MOTION?\r
+       BNE 5$                  ;YEP. USE XPOS\r
+       LDA I,B.BSTR            ;BLACK UP?\r
+       BIT STRTER              ;BLACK UP?\r
+       BEQ 4$                  ;NO. NOT STARTED\r
+       BVC 5$                  ;NOT UP\r
+       LDX I,8                 ;'PNTRX,PNTRY'\r
+5$:    JSR TSTBAL              ;GO TEST BLACK BALL\r
+4$:    RTS\r
+TSTBAL:        JSR CPPLYA              ;COMPUTE BALL'S POSITION\r
+       LDA R0\r
+       ASL\r
+       STA R4                  ;KEEP PIX #\r
+       LDA R1\r
+       ROL\r
+       ASL R4\r
+       ROL\r
+       ASL R4\r
+       ROL\r
+       AND I,31.               ;ISOLATE X CO-ORDINATE\r
+       TAY                     ;SAVE IT\r
+       INY                     ;BOOT IT RIGHT 1 SPACE\r
+       LDA BARRL\r
+       ASL\r
+       STA R4\r
+       LDA BARRH\r
+       ROL\r
+       ASL R4\r
+       ROL\r
+       ASL R4\r
+       ROL\r
+       AND I,31.\r
+       STA R4\r
+       CPY R4                  ;ARE WE ON X?\r
+       BEQ 1$                  ;YEP\r
+2$:    RTS                     ;NO PROBLEM\r
+1$:    LDY I,21\r
+       LDA NY,R0               ;GET STAMP\r
+       CMP I,98                ;BLANK?\r
+       BEQ 2$                  ;YES\r
+       CMP #90                 ;SOLID?\r
+       BNE 12$                 ;NOPE\r
+       BIT FRMCNT              ;MOVING?\r
+       BPL 13$                 ;UP\r
+       BMI 14$                 ;DOWN\r
+12$:   AND I,0F0               ;BARRIER AT ALL?\r
+       CMP I,90\r
+       BNE 2$                  ;NO\r
+       LDA NY,R0               ;RETRIEVE DATA\r
+       AND I,0F\r
+       STA R4\r
+       AND I,8                 ;UPPER?\r
+       BNE 3$                  ;YES.\r
+       LDA R3                  ;LOWER, GET Y OFFSET\r
+       CMP R4                  ;MATCH PIX #?\r
+       BCC 2$                  ;NO. ITS A MISS\r
+14$:   LDA R3                  ;IS Y 0?\r
+       BNE 4$                  ;NO. ITS OK TO MOVE IT\r
+       LDY I,20                ;WILL WE MOVE INTO A SOLID?\r
+       JSR SLDTST              ;IS IT A SOLID\r
+       BCC 4$                  ;NO. OK TO MOVE\r
+9$:    LDA DIRECT              ;WHICH WAY SHOULD WE GO?\r
+       ADC I,0F                ;ADD 90 DEGREES\r
+       LDY I,41\r
+       AND I,20\r
+       BEQ 5$                  ;MOVE RIGHT\r
+       LDY I,1                 ;MOVE LEFT\r
+5$:    JSR SLDTST              ;TEST\r
+       BCC 6$                  ;OK TO MOVE\r
+       TYA\r
+       EOR I,40                ;GO THE OTHER WAY\r
+       TAY\r
+6$:    LDA I,8\r
+       CPY I,41\r
+       BEQ 7$\r
+       LDA I,-1\r
+7$:    ADD XPOS+1(X)           ;MOVE BALL\r
+       SUB R2                  ;SUBTRACT X OFFSET\r
+       STA ZX,XPOS+1\r
+8$:    RTS                     ;DONE\r
+4$:    DEC ZX,YPOS+1           ;MOVE DOWN 2 SPACES\r
+15$:   JMP TSTBAL              ;RE-ITERATE\r
+3$:    EOR R4                  ;UPPER, GET PIX #\r
+       CMP R3                  ;MATCH Y OFFSET?\r
+       BCC 8$                  ;NOPE. ITS A MISS\r
+13$:   LDA R3                  ;IS Y A 7?\r
+       CMP I,7\r
+       BCS 10$                 ;YES. TROUBLE\r
+11$:   INC ZX,YPOS+1           ;MOVE UP 1 SPACE\r
+       BNE 15$                 ;(ALWAYS)\r
+10$:   LDY I,22                ;LOOK ABOVE.\r
+       JSR SLDTST              ;WHAT ARE WE RUNNING INTO?\r
+       BCC 11$                 ;A SPACE. ITS OK TO MOVE THERE\r
+       BCS 9$                  ;A SOLID. WE HAVE TO MOVE SIDEWAYS\r
+\r
+       .GLOBL CHKS4K\r
+CHKS4K:        .BYTE 55                ;CHECKSUM 3000-33FF\r
+       .PAGE\r
+       .PAGE\r
+       .SBTTL MESSAGES\r
+;\r
+;MESSAGES\r
+;\r
+       .CSECT GFWPLY\r
+       .RADIX 10\r
+       \r
+       \r
+$MAXMSG        =19             ;TOTAL # OF MESSAGES. IMPORTANT!!!!\r
+       \r
+       \r
+       .REPT 0\r
+THE MESSAGES ARE STORED AS ASCII STRINGS PRECEEDED BY A 2 BYTE ADDRESS\r
+AND TERMINATED BY A 0.  THE ADDRESS IS DISTINGUISHED FROM ASCII BY THE\r
+FACT THAT THE MSB OF THE MS BYTE (BIT 15) IS SET AND INDICATES WHERE IN\r
+THE 32K ADDRESS SPACE TO PUT THE ASCII STRING.\r
+\r
+MESSAGE SELECTION IS ACCOMPLISHED BY WAY OF 2 POINTERS.  EACH MESSAGE HAS\r
+AN ID NUMBER BETWEEN 0 AND $MAXMSG.  THIS ID NUMBER IS USED AS AN INDEX\r
+INTO AN OFFSET TABLE (MST).  THIS OFFSET, WHEN DOUBLED, IS ADDED TO\r
+'MSGS' TO OBTAIN THE ADDRESS OF THE STRING.  THERE ARE 4 OFFSET TABLES,\r
+ONE FOR EACH OF THE 4 LANGUAGES.  THE 'CLEAR' ROUTINE DETERMINES WHAT\r
+LANGUAGE TO USE AND SETS THE ADDRESS OF THE CORRECT OFFSET TABLE INTO\r
+LNG AND LNG+1.\r
+       .ENDR\r
+       .PAGE\r
+       .GLOBL MSTA,RAMBAD\r
+PLYFLD =^H0800\r
+..MSGN =0\r
+\r
+       .MACRO MSTOFS   OP\r
+       .IRP X,<OP>\r
+       .GLOBL X\r
+X      =..MSGN         ;MESSAGE #\r
+..MSGN =..MSGN+2\r
+       .IF LT,$MAXMSG-<..MSGN/2>\r
+       .ERROR $MAXMSG  ;MAXMSG TOO SMALL!!!!!!!\r
+       .IFF\r
+       .=MST+X\r
+       .IRP Z,<$E,$F,$S,$G>    ;FOUR LANGUAGES\r
+       .WORD Z''X\r
+       .=.+<$MAXMSG*2>-2\r
+       .ENDR\r
+       .ENDC\r
+       .ENDR\r
+       .ENDM\r
+\r
+       .MACRO BFILL\r
+       .ENDM\r
+\r
+;THE FOLLOWING MACRO CALL CREATES ENTRIES IN EACH OF THE 4\r
+;OFFSET TABLES\r
+\r
+MST:   MSTOFS <WELL,MEDIUM,POOR>       ;MUST BE FIRST!!!\r
+       MSTOFS <WHITE,BLACK,LOST,GMEOVR,CORSE>  ;       \r
+       MSTOFS <CREDIT,ROMERR,ROMOK,SELFT,LANGM>\r
+       MSTOFS <WRN1,WRN2,REM1,REM2,BONUS,PARR>\r
+       .=MST+<$MAXMSG*8>       ;SKIP OVER MST\r
+\r
+MSTA:  .WORD MST+<$MAXMSG*0>   ;ENGLISH\r
+       .WORD MST+<$MAXMSG*2>   ;FRENCH\r
+       .WORD MST+<$MAXMSG*4>   ;SPANISH\r
+       .WORD MST+<$MAXMSG*6>   ;GERMAN\r
+       .ENABL M68              ;ADDRESSES GET STORED REVERSED\r
+       .CSECT ASCII\r
+MSGS:\r
+$EGMEO:        .WORD PLYFLD+288+31+32768\r
+       .ASCII /GAME@OVER/\r
+       .WORD PLYFLD+256+32768\r
+       .ASCIZ /INSERT@COIN/\r
+       BFILL\r
+$FLOST:        .WORD PLYFLD+288+31+32768\r
+       .ASCIZ /TROP@LENT/\r
+       BFILL\r
+$SLOST:        .WORD PLYFLD+32768+288+31\r
+       .ASCIZ /MUY@LENTO/\r
+       BFILL\r
+$GLOST:        .WORD PLYFLD+32768+320+31\r
+       .ASCIZ /ZU@LANGE/\r
+       BFILL\r
+$ELOST:        .WORD PLYFLD+320+31+32768\r
+       .ASCIZ /TOO@LONG/\r
+       BFILL\r
+$ECRED:        .WORD PLYFLD+288+31+32768\r
+       .ASCIZ /PUSH@START/\r
+       BFILL\r
+$FREM1:        .WORD PLYFLD+320+32768\r
+       .ASCII /COUPS@RESTANT/\r
+$FREM2:        .WORD PLYFLD+32768+192\r
+       .BYTE 0\r
+       BFILL\r
+$SREM1:        .WORD PLYFLD+32768+192\r
+       .ASCII /QUEDIAN/\r
+       .WORD PLYFLD+32768+544\r
+       .ASCII /GOLPES/\r
+$SREM2:        .WORD PLYFLD+32768+448\r
+       .BYTE 0\r
+       BFILL\r
+$GREM1:        .WORD PLYFLD+32768+192\r
+       .ASCII /NOCH/\r
+       .WORD PLYFLD+32768+448\r
+       .ASCII /SCHLAGE/\r
+$GREM2:        .WORD PLYFLD+32768+352\r
+       .BYTE 0\r
+       BFILL\r
+$EREM1:        .WORD PLYFLD+352+32768\r
+       .ASCII /SHOTS@LEFT/\r
+$EREM2:        .WORD PLYFLD+224+32768\r
+       .BYTE 0\r
+       BFILL\r
+$EWHIT:        .WORD PLYFLD+32+32768+30\r
+       .ASCIZ /WHITE/\r
+       BFILL\r
+$EBLAC:        .WORD PLYFLD+608+32768+30\r
+       .ASCIZ /BLACK/\r
+       BFILL\r
+$FGMEO: .WORD PLYFLD+256+31+32768\r
+       .ASCII  /FIN@DE@PARTIE/\r
+       .WORD PLYFLD+160+32768\r
+       .ASCIZ /INTRODUIRE@1@PIECE/\r
+       BFILL\r
+$SGMEO:        .WORD PLYFLD+256+31+32768\r
+       .ASCII  /FIN@PARTIDA/\r
+       .WORD PLYFLD+160+32768\r
+       .ASCIZ /INTRODUCIR@MONEDA/\r
+       BFILL\r
+$GGMEO:        .WORD PLYFLD+288+31+32768\r
+       .ASCII  /SPIELENDE/\r
+       .WORD PLYFLD+192+32768\r
+       .ASCIZ /MUENZE@EINWERFEN/\r
+       BFILL\r
+$FCRED:        .WORD PLYFLD+224+31+32768\r
+       .ASCIZ  /APPUYER@START/\r
+       BFILL\r
+$SCRED:        .WORD PLYFLD+256+31+32768\r
+       .ASCIZ  /PULSAR@START/\r
+       BFILL\r
+$GCRED:        .WORD PLYFLD+256+31+32768\r
+       .ASCIZ  /DRUCKE@START/\r
+       BFILL\r
+$FWHIT:        .WORD PLYFLD+32+32768+30\r
+       .ASCIZ  /BLANC/\r
+       BFILL\r
+$SWHIT:        .WORD PLYFLD+32768+30\r
+       .ASCIZ  /BLANCO/\r
+       BFILL\r
+$GWHIT:        .WORD PLYFLD+32+32768+30\r
+       .ASCIZ  /WEISS/\r
+       BFILL\r
+$FBLAC:        .WORD PLYFLD+608+32768+30\r
+       .ASCIZ  /NOIR/\r
+       BFILL\r
+$SBLAC: .WORD PLYFLD+576+32768+30\r
+       .ASCIZ  /NEGRO/\r
+       BFILL\r
+$GBLAC:        .WORD PLYFLD+544+32768+30\r
+       .ASCIZ  /SCHWARZ/\r
+       BFILL\r
+$ELANG:        .WORD PLYFLD+128+16+32768\r
+       .ASCIZ  /ENGLISH/\r
+       BFILL\r
+$FLANG:        .WORD PLYFLD+128+16+32768\r
+       .ASCIZ  /FRANCAIS/\r
+       BFILL\r
+$SLANG:        .WORD PLYFLD+128+16+32768\r
+       .ASCIZ  /ESPANOL/\r
+       BFILL\r
+$GLANG:        .WORD PLYFLD+128+16+32768\r
+       .ASCIZ  /DEUTSCH/\r
+       BFILL\r
+$FCORS:\r
+$GCORS:\r
+$ECORS:        .WORD PLYFLD+288+31+32768\r
+       .ASCIZ /COURSE@/\r
+       BFILL\r
+$SCORS:        .WORD PLYFLD+32768+31+288\r
+       .ASCIZ /VUELTA@/\r
+       BFILL\r
+$FBONU:\r
+$SBONU:\r
+$GBONU:\r
+$EBONU:        .WORD PLYFLD+384+31+32768\r
+       .ASCIZ /BONUS/\r
+       BFILL\r
+$GPARR:        .WORD PLYFLD+32768+320+30\r
+       .ASCIZ  /PAR@/\r
+       BFILL\r
+$FPARR:\r
+$SPARR:\r
+$EPARR:        .WORD PLYFLD+352+32768+30\r
+       .ASCIZ /PAR@/\r
+       BFILL\r
+$GWRN1:        .WORD PLYFLD+32768+320+18\r
+       .ASCIZ /ACHTUNG/\r
+       BFILL\r
+$FWRN1:\r
+$SWRN1:\r
+$EWRN1:        .WORD PLYFLD+32768+320+16\r
+       .ASCIZ /SPECIAL/\r
+       BFILL\r
+$GWRN2:        .WORD PLYFLD+32768+192+16\r
+       .ASCII /LETZTE@SCHUESSE/\r
+       .WORD PLYFLD+32768+64+14\r
+       .ASCII /WEITER@MUENZEN@EINWERFEN/\r
+       .WORD PLYFLD+32768+64+12\r
+       .ASCII /FUER/\r
+       .WORD PLYFLD+32768+352+12\r
+       .ASCII /WEITERE@BAELLE/\r
+       .WORD PLYFLD+32768+320+10\r
+       .ASCIZ  /+@5@EXTRA/\r
+       .WORD PLYFLD+32768+256+12\r
+       .BYTE 0\r
+$FWRN2:\r
+$SWRN2:\r
+$EWRN2:        .WORD PLYFLD+32768+320+20\r
+       .ASCII /WARNING/\r
+       .WORD PLYFLD+32768+192+18\r
+       .ASCII /GAME@ALMOST@OVER/\r
+       .WORD PLYFLD+32768+160+14\r
+       .ASCII /COIN@INSERTED@NOW/\r
+       .WORD PLYFLD+32768+64+12\r
+       .ASCII /GIVES/\r
+       .WORD PLYFLD+32768+352+12\r
+       .ASCII  /SHOTS@+@5@EXTRA/\r
+       .WORD PLYFLD+32768+256+12\r
+       .BYTE 0\r
+$FWELL:\r
+$EWELL:        .ASCIZ /PRO/\r
+$SWELL:        .ASCIZ /EXPERTO/\r
+$GWELL:        .ASCIZ /PROFI/\r
+$FMEDI:        .ASCIZ /BIEN/\r
+$EMEDI:        .ASCIZ /AMATUER/\r
+$SMEDI:        .ASCIZ /REGULAR/\r
+$GMEDI:        .ASCIZ /ANFANGER/\r
+$FPOOR:        .ASCIZ /DESOLE/\r
+$EPOOR:        .ASCIZ /POOR/\r
+$SPOOR:        .ASCIZ /ASI@ASI/\r
+$GPOOR:        .ASCIZ /BEDAURE/\r
+$FROME:\r
+$SROME:\r
+$GROME:\r
+$EROME:        .WORD PLYFLD+128+26+32768\r
+       .ASCII  /ROM@ERROR/\r
+       .WORD PLYFLD+0+20+32768\r
+       .ASCII  /M/\r
+       .WORD PLYFLD+0+22+32768\r
+       .ASCII  /L/\r
+       .WORD PLYFLD+64+23+32768\r
+       .ASCIZ  /20@24@28@2C@30@34@38@3C/\r
+       BFILL\r
+$FROMO:\r
+$SROMO:\r
+$GROMO:\r
+$EROMO:        .WORD PLYFLD+128+20+32768\r
+       .ASCIZ  /ROM@OK/\r
+       BFILL\r
+$FSELF:\r
+$SSELF:\r
+$GSELF:\r
+$ESELF:        .WORD PLYFLD+128+18+32768\r
+       .ASCII  /RAM@OK/\r
+       .WORD PLYFLD+224+14+32768\r
+       .ASCII  /SHOTS@PER@COIN/\r
+       .WORD PLYFLD+224+12+32768\r
+       .ASCII /PLUNGER/\r
+       .WORD PLYFLD+224+10+32768\r
+       .ASCIZ /BALL/\r
+       BFILL\r
+       .CSECT GFWPLY\r
+RAMBAD: .ASCIZ /RAM@BAD/\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
\ No newline at end of file
diff --git a/A33524.ROM b/A33524.ROM
new file mode 100644 (file)
index 0000000..1514338
Binary files /dev/null and b/A33524.ROM differ
diff --git a/A33526.SKH b/A33526.SKH
new file mode 100644 (file)
index 0000000..4431987
Binary files /dev/null and b/A33526.SKH differ
diff --git a/A33527.ROM b/A33527.ROM
new file mode 100644 (file)
index 0000000..e419d11
--- /dev/null
@@ -0,0 +1,264 @@
+;ROM/PROM FILE CREATED BY ROMRDR 25-JAN-79  14:39:56  \r
+\r
+; DK1:GFBL02=DX0:GFBL02.BW\r
+\r
+CLR\r
+0000=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0010=00,00,00,00,00,00,00,00,00,00,01,03,03,03,01,00\r
+0020=00,00,00,00,00,00,00,00,00,00,01,01,01,01,00,00\r
+0030=00,00,00,00,00,00,00,00,00,00,01,03,03,03,01,00\r
+0040=E0,E0,E0,3C,3A,79,70,F1,F2,FC,C0,40,60,30,18,18\r
+0050=E0,E0,E0,3F,38,78,78,78,78,FF,80,00,00,00,80,C0\r
+0060=E0,E1,F2,3C,78,70,70,78,78,FC,C2,81,00,80,E0,70\r
+0070=E0,E0,E0,3F,38,78,78,78,78,FF,80,00,00,00,80,C0\r
+0080=00,00,00,00,00,00,18,3C,3C,18,00,00,00,00,00,00\r
+0090=00,00,00,00,00,00,10,38,10,00,00,00,00,00,00,00\r
+00A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+00B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+00C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+00D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+00E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+00F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0100=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0110=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0120=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0130=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0140=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0150=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0160=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0170=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0180=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0190=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+01F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0200=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0210=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0220=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0230=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0240=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0250=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0260=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0270=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0280=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0290=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+02F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0300=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0310=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0320=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0330=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0340=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0350=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0360=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0370=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0380=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0390=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+03F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0400=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0410=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0420=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0430=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0440=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0450=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0460=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0470=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0480=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0490=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+04F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0500=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0510=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0520=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0530=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0540=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0550=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0560=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0570=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0580=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0590=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+05F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0600=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0610=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0620=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0630=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0640=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0650=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0660=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0670=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0680=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0690=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+06F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0700=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0710=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0720=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0730=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0740=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0750=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0760=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0770=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0780=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0790=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+07F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0800=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0810=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0820=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0830=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0840=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0850=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0860=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0870=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0880=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0890=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+08F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0900=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0910=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0920=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0930=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0940=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0950=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0960=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0970=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0980=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0990=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09A0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09B0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09C0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09D0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09E0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+09F0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0A90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AD0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0AF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0B90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BD0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0BF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0C90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CD0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0CF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0D90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DD0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0DF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0E90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0EA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0EB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0EC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0ED0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0EE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0EF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F00=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F10=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F20=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F30=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F40=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F50=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F60=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F70=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F80=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0F90=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FA0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FB0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FC0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FD0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FE0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+0FF0=00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+END\r
+\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\0\0\0\0
\ No newline at end of file
diff --git a/GFCOIN.XX b/GFCOIN.XX
new file mode 100644 (file)
index 0000000..0b12e98
--- /dev/null
+++ b/GFCOIN.XX
@@ -0,0 +1,438 @@
+;        .TITLE PENNY- COIN & CREDIT ACCRUER\r
+        .SBTTL *********************************\r
+        .SBTTL * PROGRAMERS: DOWNEND & ALBAUGH *\r
+        .SBTTL *                               *\r
+        .SBTTL * CHECKER:                      *\r
+        .SBTTL *                               *\r
+        .SBTTL *********************************\r
+        .SBTTL EXPLANATION\r
+        .RADIX 16\r
+       .ENABL LC\r
+        .LIST MEB\r
+;COIN ROUTINE FOR 16-OPTION STANDARD AS PER MEMO\r
+;FROM STEVE BRISTOW DATED 9.27.77 OR 4-OPTION STANDARD\r
+;PER MEMO FROM FRANK BALLOUZ 4/20/78\r
+;\r
+        .SBTTL DEFAULT ASSIGNMENTS\r
+;THESE DEFAULTS CONFIGURE FOR SPRINT4 HARDWARE\r
+        .LIST CND\r
+        .IIF NDF,MODES,MODES=4          ;FOUR COIN MODES STANDARD\r
+        .IIF NDF,OFFSET,OFFSET=2        ;SWITCHES AND STATUS BYTES TWO-APART\r
+        .IIF NDF,COIN,COIN=0            ;COIN IS LOW-TRUE\r
+        .IIF NDF,CNTINT,CNTINT=1        ;COUNT INTERRUPTS (IN $INTCT)\r
+        .IIF NDF,SLAM,SLAM=1            ;SLAM IS HIGH-TRUE\r
+        .IIF NDF,CMZP,CMZP=1            ;COIN MODE IS IN ZERO-PAGE\r
+        .IIF NDF,SHRCMD,SHRCMD=1        ;SHARE A BYTE FOR CMODE, FIRST\r
+        .IIF NDF,LONGST,LONGST=1        ;USE LONG (1/2 SEC) STRINGTIMER\r
+        .IIF NDF,COIN67,COIN67=0        ;COINS NOT IN D7,D6 OF SAME BYTE\r
+        .IIF NDF,PRST,PRST=30.          ;PRE-COIN SLAM KILLS COINS FOR 30 FRAMES\r
+        .IIF NDF,POST,POST=30.          ;POST-COIN SLAM KILLS COINS WITHIN 30 FRAMES\r
+       .IIF NDF,CTCOIN,CTCOIN=0        ;SET TO ONE TO COUNT TOTAL COINS\r
+       .IIF NDF,CTCRED,CTCRED=0        ;SET TO ONE TO COUNT TOTAL CREDITS\r
+       .IIF NDF,PULSE,PULSE=4          ;4 FRAME (66 MS.) PULSE FOR COIN-COUNTER\r
+        .IF NE,CMZP\r
+        .MACRO GCM\r
+        LDA Z,$CMODE            ;GET COIN MODE FROM ZERO-PAGE\r
+        .IIF NE,SHRCMD, AND I,MODES-1&0FF       ;STRIP "FIRST"\r
+        .ENDM\r
+        .ENDC\r
+        .NLIST CND\r
+;ENTRY POINT\r
+        .GLOBL MOOLAH\r
+;\r
+;EXTERNAL REFERENCES\r
+       .IF NE,MODES\r
+       .IF NE,CMZP\r
+        .GLOBL $CMODE                   ;INPUT COIN MODE\r
+       .ENDC\r
+       .ENDC\r
+        .GLOBL $COINA,$LAM              ;SWITCH LOCATIONS (COIN & SLAM)\r
+        .GLOBL $LMBIT                   ;MASK WITH 1 IN BIT WHERE SLAM SW. IS\r
+        .GLOBL $CNSTT,$PSTSL           ;INTERNAL LOCATIONS\r
+       .IF NE,LONGST!PULSE-2           ;IF LONG STRING-TIMER OR PULSES, WE NEED\r
+       .GLOBL $INTCT                   ;INTERRUPT COUNTER\r
+       .ENDC\r
+       .IF EQ,MODES-16\r
+        .GLOBL $FIRST                   ;COULD SHARE BYTE WITH CMODE\r
+       .ENDC\r
+        .GLOBL $LMTIM,$CNCT             ;SLAM-TIMER, COINCOUNT\r
+       .IF NE,MODES\r
+        .GLOBL $$CRDT                   ;RESULT OF ALL THIS\r
+       .ENDC\r
+       .IF NE,CTCOIN!CTCRED\r
+       .GLOBL $CCTIM\r
+       .ENDC\r
+        .IF NE,MODES&<MODES-4>&<MODES-16.>\r
+        .ERROR                  ;3 FLAVORS-0,4, OR 16 MODES\r
+        .ENDC\r
+       .IF NE,<PULSE-2>&<PULSE-4>&<PULSE-8>    ;CHECK PULSE LENGTH SPEC'D\r
+       .ERROR                  ;2,4,OR 8 FRAME PULSES ONLY\r
+       .ENDC\r
+        .IIF GT,PRST-31.,PRST=31.\r
+        .IIF GT,POST-63.,POST=63.\r
+        .IF EQ,MODES-16\r
+        .REPT 0\r
+When a coin is detected, the coin-count ($CNCT) is incremented.  Then the  "price"  of  "x\r
+credits" is fetched from CPTAB.  If the coin-count.GE.price, then credit is incremented as\r
+indicated in CPTAB.\r
+An entry in CPTAB looks like:\r
+\r
+        (XXXXFAAA)=1 BYTE\r
+        XXXX = CREDIT, I.E., no. of plays\r
+        F    = 1 IF later coins count one more credit than first coin\r
+        AAA = PRICE, I.E., no. of coins for XXXX CREDITS\r
+\r
+Thus any variation from 1 PLAY/7 COINS to 16 PLAYS/1 COIN is possible\r
+\r
+The index into CPTAB is created as follows:\r
+        (XXXACCCC)=1 BYTE\r
+        X : ALWAYS ZERO\r
+        A : 0 = LEFT coin mech\r
+            1 = RIGHT coin mech\r
+        cccc:   coin mode (0000-1111)\r
+        .endr\r
+        .endc\r
+        .rept 0\r
+        The coin routine assumes the presence of the following .GLOBL variables:\r
+   1) $$CRDT:   base page byte initialized to 0 on restart.  This is where accrued  credit\r
+        is  kept.   Should  be  decremented  for each player-start.  Note that a DECREMENT\r
+        instruction must be used to insure  mutual  exclusion  between  the  main  program\r
+        accessing  $$CRDT  and  the  interrupt-driven coin routine accessing $$CRDT".  Not\r
+        used if MODES=0\r
+   2) $CMODE:   base page byte that contains the coin option  switches  in  its  low-order\r
+        nybble  (high true).  You must put it there.  this is not used if flag CMZP=0.  In\r
+        this case you must define a macro to get the coin mode in the lsb's  of  the  ACC,\r
+        clearing the msb's, not disturbing carry\r
+   3) $CNSTT:   Two base page bytes ($CNSTT, $CNSTT+OFFSET) which should be initialized to\r
+        00 (the timers for coin detection).\r
+   4) $COINA:   Two locations containing coin switches in D7 Left mech  at  $COINA,  Right\r
+        mech  at  $COINA+OFFSET.   If  COIN67=1,  Switches  are  both in $COINA, D7-Right,\r
+        D6-Left.\r
+   5) $FIRST:   Base page byte.  Flag indicating whether first  coin  has  been  accepted.\r
+        Must  be initialized to plus (or zero, if SHRCMD=0) and reset to plus (or zero) at\r
+        the end of a game.  All other bits are ignored/maintained if the  flag  SHRCMD  is\r
+        set non-zero.  Used only if MODES=16\r
+   6) $CNCT:    2 base page bytes ($CNCT, $CNCT+OFFSET) which must be initialized to  zero\r
+        on pwron - coin counters (only one is used if MODES = 0 or 4)\r
+   7) $PSTSL:   Pair of base page bytes  ($PSTSL,  $PSTSL+OFFSET)used  to  time  post-coin\r
+        slam.\r
+   8) $LAM:     Address of the SLAM switch.  the bit position inside $LAM is specified  by\r
+        $LMBIT (see below)\r
+   9) $LMTIM:   Base  page  byte  used  as  a  timer  for  pre-slam  protection.   May  be\r
+        initialized  to  FF  at  pwron  to  disallow  coin input for 4 seconds.  Coins are\r
+        disallowed for two frames anyway.\r
+   10) $INTCT:  Interrupt counter for  long  string-timer.   If  CNTINT=1,  this  will  be\r
+        incremented  (default  case).   If CNTINT=0, this should be equated to an existing\r
+        counter.\r
+   11) $LMBIT:  Mask used to select which bit in the slam switch  byte  should  be  tested\r
+        (used as I,$LMBIT).  NOT A LOCATION, JUST A VALUE!!\r
+   12) $CCTIM:  TIMER FOR PULSES OUTPUT TO ELECTRO-MECHANICAL COUNTER. IF CTCOIN\r
+       OR CTCRED IS NON-ZERO, ROUTINE WILL RETURN WITH CARRY SET IF COIN\r
+       COUNTER SHOULD BE TURNED ON, CLEARED FOR OFF.\r
+Space requirements:\r
+                RAM: 9 bytes (8 if CMZP=0 or SHRCMD=1)\r
+                ROM: About 200 bytes\r
+The coin routine also assumes it will be called 4 times  a  frame,  where  one  frame=1/60\r
+second.   In  most  cases  this may be accomplished by making the coin routine part of the\r
+interrupt routine.\r
+SAMPLE BASE PAGE ALLOCATION:  (WHERE OFFSET=2)\r
+        $FIRST: .BLKB 1\r
+       $CCTIM: .BLKB 1         ;COIN COUNTER TIMER (IF USED)\r
+        $$CRDT: .BLKB 1\r
+        $CMODE: .BLKB 1         ;OR CMODE=FIRST\r
+        $PSTSL: .BLKB 1\r
+        $LMTIM: .BLKB 1\r
+                .BLKB 1                ;$PSTSL FOR SECOND MECH\r
+        $CNCT:  .BLKB 4\r
+        $CNSTT  =$CNCT+1\r
+        .ENDR\r
+        .IF EQ,MODES-16\r
+        .REPT 0\r
+THE COIN MODES ARE:\r
+  0:    2 COINS/PLAY-LEFT AND RIGHT\r
+  1:    1 COIN/PLAY-LEFT AND RIGHT\r
+  2:    2 PLAYS/COIN-LEFT AND RIGHT\r
+  3:    3 PLAYS/COIN-LEFT AND RIGHT\r
+  4:    4 PLAYS/COIN-LEFT AND RIGHT\r
+  5:    FIRST COIN-1 PLAY; SECOND AND EXTRA COINS-2 PLAYS/COIN\r
+  6:    FIRST COIN-2 PLAYS; SECOND AND EXTRA COINS-3 PLAYS/COIN\r
+  7:    LEFT=2 COINS/PLAY\r
+        RIGHT=1 COIN/PLAY\r
+  8:    LEFT=1 COIN/PLAY\r
+        RIGHT=1 COIN/2 PLAYS\r
+  9:    LEFT=2 PLAYS/COIN\r
+        RIGHT=4 PLAYS/COIN\r
+  A:    LEFT=FIRST COIN-1 PLAY; SECOND AND EXTRA COINS-2 PLAYS/COIN\r
+        RIGHT=FIRST COIN-3 PLAYS; SECOND AND EXTRA COINS-4 PLAYS/COIN\r
+  B:    LEFT=FIRST COIN-2 PLAYS; SECOND AND EXTRA COINS-3 PLAYS/COIN\r
+        RIGHT=FIRST COIN-5 PLAYS; SECOND AND EXTRA COINS-6 PLAYS/COIN\r
+  C:    LEFT=FIRST COIN-3 PLAYS; SECOND AND EXTRA COINS-4 PLAYS/COIN\r
+        RIGHT=FIRST COIN-7 PLAYS; SECOND AND EXTRA COINS-8 PLAYS/COIN\r
+  D:    LEFT=3 COINS/PLAY\r
+        RIGHT=1 COIN/PLAY\r
+  E:    LEFT=1 COIN/PLAY\r
+        RIGHT=3 PLAYS/COIN\r
+  F:    LEFT=3 PLAYS/COIN\r
+        RIGHT=6 PLAYS/COIN\r
+        .ENDR\r
+        .ENDC\r
+        .IF EQ,MODES-4\r
+        .REPT 0\r
+THE COIN MODES ARE:\r
+  0:    FREE PLAY- $CNCT is zeroed, $$CRDT is not changed\r
+  1:    2 PLAYS PER COIN\r
+  2:    1 PLAY PER COIN\r
+  3:    2 COINS PER PLAY\r
+        .ENDR\r
+        .ENDC\r
+        .REPT 0\r
+                   *** COIN DETECTION ***\r
+Coin detection, courtesy of Mike Albaugh, uses two counters in one  byte  ($CNSTT).   This\r
+byte  is  used to remember the condition of the coin switch.  The upper counter (D7,D6,D5)\r
+runs when the coin is absent and is reset when the coin is  present.   The  lower  counter\r
+(D4-D0)  runs  when  the  coin is present and is reset when the coin is absent, unless the\r
+coin was present for 5 successive samples.  This "unless"  enables  $CNSTT  to  "remember"\r
+that a coin has been VALID-HIGH while waiting for VALID-LOW.\r
+Basically, a valid coin is defined as between 16 and 800 ms of coin present, preceded  and\r
+followed  by  33 ms of coin absent.  The 33 ms lows need not immediately precede or follow\r
+the high.  The lower five bits count  down  from  31  when  the  coin  is  present.   This\r
+countdown  is  fast  (once  per  interupt)  for the first five samples (31-26, about 16-20\r
+milliseconds) then slow (once per EIGHT interrupts) for the remaining counts (26-0,  about\r
+800  ms).   The  count  then  stops  at zero.  This counter is reset if the coin goes away\r
+during the first five counts, I.E., the coin must be present for at least  16  ms.   After\r
+that  the coin must go away for eight counts to reset it.  This is because after the first\r
+five counts a coin is VALID HIGH and must not be reset until VALID LOW occurs  to  prevent\r
+mid-coin glitches from making a valid coin into 0 or 2 (or more) coins.\r
+\r
+The upper three bits count up from zero when the coin is absent.  The count  is  reset  if\r
+coin  is  ever  found  present.   When  the  count  finally wraps (8 samples, 33 ms).  The\r
+coin-present counter is checked.  A count from 27-31 (less than 16-20 ms) is too short.  A\r
+count of 0 (more than 800 ms) is too long.  Both of these cases are simply reset to 31.  A\r
+count of 1-26 is a (tentatively) valid coin.  The counter is again set to 31, but  another\r
+counter ($PSTSL) is started.\r
+\r
+$PSTSL is the POST-COIN-SLAM timer.  Initially  set  to  120,  it  counts  down  once  per\r
+interrupt  (4  times per frame) to give a nominal 1/2 second delay.  If the slam switch is\r
+seen during this time, $PSTSL is cleared, invalidating the coin.  The length of the  delay\r
+(in  frames)  is  defined by POST which defaults to 30.  It may be set as high as 63 (1.05\r
+seconds) by definition E.G.\r
+\r
+        POST=50         ;POST-SLAM=50 FRAMES\r
+\r
+SIMILARY A SLAM IS "REMEMBERED" FOR PRST frames (default=30, max=31) and no  coin  can  be\r
+"seen" during this time.\r
+\r
+Note that the proper initial  state  of  all  these  counters  etc  is  0,  therefore  the\r
+traditional power-on clear does the trick.  Since coins "transit" from $CNSTT to $PSTSL to\r
+$CNCT to $$CRDT, locations should be cleared in that order, I.E.   $$CRDT  should  be  the\r
+last location cleared.\r
+        .ENDR\r
+\f        .SBTTL MAINLOOP\r
+;INSTRUCTIONS IN BRACKETS( "[" AND "]" ) ARE FOR ILLUSTRATION ONLY, AND ARE NOT\r
+;ACTUALLY ASSEMBLED.\r
+MOOLAH:\r
+        LDX I,OFFSET            ;X IS USED TO INDEX FROM RIGHT TO LEFT COIN MECH\r
+        .IF EQ,COIN67\r
+DETECT: LDA AX,$COINA\r
+        ASL\r
+        .IFF\r
+        LDA A,$COINA            ;GET COIN SWITCHES\r
+DETECT: ASL\r
+        .ENDC\r
+        LDA ZX,$CNSTT\r
+        AND I,31.               ;SHARED INST. SEE BELOW IN BRACKETS []\r
+        .IF EQ,COIN\r
+        BCS 5$                  ;BRANCH IF INPUT HIGH (COIN ABSENT)\r
+        .IFF\r
+        BCC 5$                  ;BRANCH IF INPUT LOW (COIN ABSENT)\r
+        .ENDC\r
+;       [AND I,31.]             ISOLATE COIN-ON DOWN-COUNTER, RESET COIN-OFF UP-CTR.\r
+        BEQ 1$                  ;STICK AT 0 (TERMINAL COUNT)\r
+        .IF NE,LONGST\r
+        CMP I,27.               ;IN FIRST FIVE SAMPLES\r
+        BCS 10$                 ;YES, RUN FAST\r
+        TAY                     ;ELSE SAVE STATUS\r
+        LDA Z,$INTCT            ;CHECK INTERUPT CTR\r
+        AND I,7                 ;ARE D0-D2 ALL ONES?\r
+        CMP I,7\r
+        TYA                     ;STATUS BACK INTO ACC\r
+        BCC 1$                  ;SKIP IF NOT BOTH ONES\r
+10$:    SBC I,1                 ;CARRY SET\r
+        .IFF\r
+        .IF EQ,COIN\r
+        SBC I,0                 ;CARRY CLEAR, THIS SUBTRACTS ONE\r
+        .IFF\r
+        SBC I,1                 ;CARRY SET OR WE WOULDN'T BE HERE\r
+        .ENDC                   ;COIN CONDITIONAL\r
+        .ENDC                   ;LONGST CONDITIONAL\r
+1$:     STA ZX,$CNSTT           ;SAVE UPDATED STATUS\r
+        LDA A,$LAM              ;CHECK SLAM SWITCH\r
+        AND I,$LMBIT\r
+        .IF NE,SLAM\r
+        BEQ 2$                  ;BRANCH IF BIT LO (SWITCH OFF)\r
+        .IFF\r
+        BNE 2$                  ;BRANCH IF BIT HI (SWITCH OFF)\r
+        .ENDC\r
+        LDA I,PRST*8            ;ELSE SET PRE-COIN SLAM TIMER\r
+        STA Z,$LMTIM            ;DECR. 8 TIMES/FRAME=PRST FRAMES\r
+2$:     LDA Z,$LMTIM            ;CHECK PRE-COIN SLAM TIMER\r
+        BEQ 3$                  ;O.K.\r
+        DEC Z,$LMTIM            ;ELSE RUN TIMER\r
+        LDA I,0\r
+        STA ZX,$CNSTT           ;CLEAR COIN STATUS\r
+        STA ZX,$PSTSL           ;CLEAR POST-COIN SLAM-TIMER\r
+3$:     CLC                     ;DEFAULT "NO COIN DETECTED"\r
+        LDA ZX,$PSTSL           ;CHECK POST-COIN SLAM-TIMER\r
+        BEQ 8$                  ;EMPTY, RETURN\r
+        DEC ZX,$PSTSL           ;RUN TIMER\r
+        BNE 8$                  ;NOT DONE, RETURN\r
+        SEC                     ;WHEN IT BECOMES ZERO, INDICATE A COIN\r
+        BCS 8$                  ;*** ALWAYS\r
+5$:;    [AND I,31.]             GET COIN-ON DOWN-CTR (ACTUALLY DONE BEFORE)\r
+        CMP I,27.               ;IS COIN VALID YET (ON FOR >4 SAMPLES)\r
+        BCS 6$                  ;NO, RESET IT\r
+        LDA ZX,$CNSTT           ;GET STATUS AGAIN\r
+        ADC I,32.               ;BUMP COIN-OFF UP-CTR.\r
+        BCC 1$                  ;IF IT DIDN'T WRAP, JUST STORE STATUS\r
+        BEQ 6$                  ;IT WRAPPED BUT COIN WAS ON TOO LONG, JUST RESET\r
+        CLC                     ;SET "VALIDITY" AGAIN\r
+6$:     LDA I,31.               ;RESET DOWN-COUNTER\r
+        BCS 1$                  ;BRANCH IF COIN TOO LONG OR TOO SHORT\r
+        STA ZX,$CNSTT           ;SAVE RESET STATUS\r
+;       [CLC]                   DEFAULT TO "NO COIN" (CARRY IS ALREADY CLEAR)\r
+        LDA ZX,$PSTSL           ;CHECK HOWIES ASSUMPTION\r
+        BEQ 7$                  ;BRANCH IF $PSTSL VACANT\r
+        SEC                     ;ELSE GIVE CREDIT A LITTLE EARLY\r
+7$:     LDA I,POST*4            ;/(4 COUNTS/FRAME)="POST" FRAMES\r
+        STA ZX,$PSTSL           ;DELAY ACCEPTANCE FOR POST 60 SEC.\r
+        \r
+8$:                             ;CARRY=1 IF COIN FALLS OUT\r
+        .IF EQ,MODES-4&MODES    ;IF MODES=0 OR 4\r
+        BCC 9$                  ;INC COIN CNT IF CARRY SET\r
+        INC $CNCT\r
+       .IF NE,CTCOIN           ;IF COIN COUNTER USED\r
+       INC $CCTIM              ;INIT COIN PULSE\r
+       .ENDC\r
+9$:\r
+        .IFF                    ;IF MODES=16\r
+CONVRT:                         ;CONVERT COINS TO CREDITS\r
+        GCM                     ;GET COIN MODE IN ACC 0-3\r
+        BCC 20$                 ;CARRY=1 IF COIN WAS DETECTED ELSE ZERO\r
+       .IF NE,CTCOIN           ;IF COIN COUNTER USED\r
+       INC $CCTIM              ;INIT COIN PULSE\r
+       .ENDC\r
+        CMP I,7                 ;MODES 0-6 ARE SPECIAL IN THAT BOTH MECHS COUNT\r
+                                ;THE SAME WAY SO USE ONLY ONE COIN COUNTER\r
+        BPL 10$\r
+        INC Z,$CNCT             ;INCREMENT COMMON COUNTER\r
+        JMP 20$\r
+10$:    INC ZX,$CNCT            ;ELSE INCREMENT APPROPRIATE COUNTER\r
+                                ;CREATE INDEX\r
+20$:\r
+        CPX I,0                 ;IS IT FIRST (LEFT) MECH\r
+        BEQ 40$\r
+        ORA I,10                ;PUT 0,1 AT BIT POITION "A"\r
+40$:    TAY                     ;ACC=INDEX INTO CPTAB\r
+        LDA AY,CPTAB            ;GET NO. OF COINS NEEDED FOR "X" CREDITS FROM CPTAB\r
+        AND I,07                ;  OF COINS IN 3 LSB\r
+        EOR I,0FF\r
+        SEC                     ;NEGATE\r
+        ADC ZX,$CNCT            ;ACC <- COINCT-CPTAP(Y)\r
+        BCC 100$                ;BRANCH ON BORROW\r
+        STA ZX,$CNCT            ;ELSE STORE REDUCED COINCT\r
+        LDA AY,CPTAB            ;GET BACK TABLE ENTRY\r
+        LSR\r
+        LSR\r
+        LSR\r
+        LSR                     ;GET   OF CREDITS IN ACC 0-3, "F" IN CARRY\r
+        LDY Z,$FIRST            ;CHECK FOR FIRST COIN\r
+        .IF NE,SHRCMD\r
+        BMI 50$\r
+        .IFF\r
+        BNE 50$\r
+        .ENDC                   ;SHRCMD CONDITIONAL\r
+        CLC                     ;IF FIRST COIN, CLEAR CARRY\r
+50$:    ADC Z,$$CRDT\r
+       .IF NE,CTCRED           ;IF COUNTING CREDITS\r
+       TAY                     ;SAVE NEW CREDIT\r
+       SEC\r
+       SBC $$CRDT              ;SUB OLD\r
+       CLC\r
+       ADC $CCTIM              ;ADD OFFSET\r
+       STA $CCTIM              ;TO COIN PULSE TIMER\r
+       STY $$CRDT              ;STORE NEW CREDIT\r
+       .IFF\r
+        STA Z,$$CRDT            ;CREDIT=CREDIT+CPTAB(Y)/16.+"F"&(NOT FIRST)\r
+       .ENDC                   ;CTCRED COND.\r
+       .IF NE,SHRCMD\r
+        LDA I,80\r
+        ORA Z,$FIRST\r
+        STA Z,$FIRST\r
+        .IFF\r
+        INC Z,$FIRST            ;A COIN IN EITHER COUNTS AS THE FIRST COIN\r
+        .ENDC                   ;SHRCMD CONDITIONAL\r
+100$:   .IFTF                   ;NO MATTER WHAT NMODES IS\r
+        .IF NE,COIN67\r
+        LDA A,$COINA            ;GET SWITCHES AGAIN\r
+        ASL                     ;D6 INTO SIGN\r
+        .ENDC\r
+        .REPT OFFSET\r
+        DEX\r
+        .ENDR\r
+        .IFF                    ;ONLY FOR MODES=16\r
+        BMI EXIT\r
+        JMP DETECT              ;LOOP FOR SECOND MECH\r
+CPTAB:                                  ;TABLE OF CREDIT/PRICE VALUES\r
+;I.E. FIRST ENTRY (12) READS: 1 CREDIT FOR 2 COINS\r
+        .BYTE 12,11,21,31,41,19,29,12   ;LEFT MECH\r
+        .BYTE 11,21,19,29,39,13,11,31\r
+        .BYTE 12,11,21,31,41,19,29,11   ;RIGHT MECH\r
+        .BYTE 21,41,39,59,79,11,31,61\r
+        .IFT                   ;THAT IS, IF MODES=0 OR 4\r
+        BPL DETECT\r
+        .ENDC\r
+        .IF EQ,MODES-4          ;ONLY IF MODES=4\r
+CONVRT: GCM                     ;GET COIN MODE IN ACC 0,1\r
+        TAY                     ;SAVE IT & TEST IT\r
+        BEQ 2$                  ;IF FREE PLAY, KEEP CREDIT CLEAR\r
+        LSR\r
+        ADC I,0                 ;FORM PRICE (0,1,1,2)\r
+        EOR I,0FF\r
+        SEC                     ;NEGATE\r
+        ADC $CNCT               ;ACC <- COINCT - PRICE\r
+        BCC EXIT                ;BRANCH ON BORROW\r
+        CPY I,2                 ;COIN MODE 2 OR 3?\r
+        BCS 1$                  ;YES, JUST ONE CREDIT\r
+        INC $$CRDT              ;ELSE GIVE TWO FOR MODES 0,1\r
+1$:    .IF NE,CTCRED           ;IF COUNTING CREDITS\r
+       INC $CCTIM              ;INIT COIN PULSE\r
+       .IFTF\r
+       INC $$CRDT\r
+       .IFT\r
+       INC $CCTIM\r
+       .ENDC\r
+2$:     STA $CNCT               ;STORE REDUCED (OR CLEARED) COINCT\r
+        .ENDC\r
+EXIT:  .IF NE,LONGST!<PULSE-2>         ;IF LONG STRING TIMER, OR PULSE>2 FRAMES\r
+       .IIF NE,CNTINT, INC Z,$INTCT            ;COUNT INTERUPTS WHEN REQUESTED\r
+       .ENDC\r
+       .IF NE,CTCRED!CTCOIN            ;INCLUDE PULSER\r
+       .IIF NE,PULSE-2,        LDA Z,$INTCT            ;NEED $INTCT IF PULSE>2\r
+       .IIF EQ,PULSE-4,        LSR                     ;USE LSB IF PULSE=4\r
+       .IF EQ,PULSE-8.\r
+       AND I,3                         ;ISOLATE 2 LSB'S\r
+       CMP I,1                         ;CLEAR CARRY IF 00\r
+       .ENDC\r
+       LDA Z,$CCTIM                    ;GET COIN-COUNTER TIMER\r
+       .IIF NE,PULSE-2,        BCS 2$\r
+       BEQ 2$                          ;BRANCH IF IDLE\r
+       CMP I,10                        ;MSB'S CLEAR?\r
+       BCS 1$                          ;NO,SKIP\r
+       ADC I,-1                        ;ELSE INIT PULSE, SET CARRY\r
+1$:    ADC I,0EF               ;(ONE LESS CUZ CARRY SET) DEC MSB'S OF TIMER\r
+       STA Z,$CCTIM                    ;STORE UPDATED TIMER\r
+2$:    ASL                             ;SET CARRY PER D7 OF TIMER\r
+       .ENDC\r
+       RTS\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
\ No newline at end of file
diff --git a/MINGLF.DOC b/MINGLF.DOC
new file mode 100644 (file)
index 0000000..dfc3ce1
Binary files /dev/null and b/MINGLF.DOC differ
diff --git a/MINGLF.MAP b/MINGLF.MAP
new file mode 100644 (file)
index 0000000..8583f45
Binary files /dev/null and b/MINGLF.MAP differ
diff --git a/SYSMAC.M65 b/SYSMAC.M65
new file mode 100644 (file)
index 0000000..09207a7
Binary files /dev/null and b/SYSMAC.M65 differ