
               00020 *BREAKOUT    GAME - BY DAN PINAL
               00030 *ZERO PAGE EQUATES
00F0:          00040 WINDOW    EQ $F0
00F2:          00050 MSG    EQ $F2
00F4:          00060 LINE2    EQ $F4
00F6:          00070 PO    EQ $F6
               00080 *MISC EQUATES

0014:          00090 RTCLOC    EQ $14
0041:          00100 ATRACT    EQ $41
0230:          00110 SDLSTL    EQ $230
0278:          00120 STICKO    EQ $278
0284:          00130 STRIGO    EQ $284
D200:          00140 AUDF1     EQ $D200    PITCH I
D201:          00150 AUDC1     EQ $D201    DISTORTION/VOLUME I
D20A:          00160 RANDOM    EQ $D20A
E45C:          00170 SETVBV    EQ $E45C    SET VBLANK ROUTINE
E462:          00180 XITVBV    EQ $E462    DEFFERED VBLANK EXIT
D01F:          00190 CONSOL    EQ $D01F

               00200 * EQUATES    FOR CIO
E456:          00210 CIOV    EQ $E456    ; ENTRY VECTOR

               00220 * COMMANDS *

0003:          00230 OPEN    EQ $03    ; OPEN FOR INPUT/OUTPUT
0005:          00240 GETREC    EQ $05    ; GET RECORD
0007:          00250 GETCHR    EQ $07    ; GET CHARACTER(S)
0009:          00260 PUTREC    EQ $09    ; PUT RECORD
000B:          00270 PUTCHR    EQ $OB    ; PUT CHARACTER(S)
000C:          00280 CLOSE    EQ $OC    ; CLOSE DEVICE
000D:          00290 STATIS    EQ $01)    ; STATUS REQUEST
000E:          00300 SPECIL    EQ $OE    ; BEGINNING OF SPECIAL ENTRY COMMANDS
               00310 *
               00320 * SPECIAL    COMMANDS
               00330 *
0011:          00340 DRAWLN    EQ $11    ; DRAW LINE
0012:          00350 FILLIN    EQ $12    ; DRAW LINE WITH RIGHT FILL
               00360 *
               00370 * AUX1 VALUES
               00380 *

0001:          00390 APPEND    EQ $01    OPEN FOR WRITE APPEND
0004:          00400 OPNIN    EQ $04    OPEN FOR INPUT
0008:          00410 OPNOT    EQ $08    OPEN FOR OUTPUT
000C:          00420 OPNINO    EQ OPNIN+OPNOT    OPEN FOR INPUT AND OUTPUT
0010:          00430 MXDMOD    EQ $10    OPEN FOR MIXED MODE (E:,S:)
0020:          00440 INSCLR    EQ $20    OPEN WITHOUT CLEARING SCREEN (E:,S:)
               00450 *

               00460 * O.S. RAM EQUATES
               00470 *1/0 CONTROL BLOCK EQUATES

0054:          00480 ROWCRS    EQ $54    CURRENT GRAPHICS CURSOR ROW
0055:          00490 COLCRS    EQ $55    & $56. LSB MSB OF CURRENT GRAPHICS CURSOR COLUMN
02FB:          00500 ATACHR    EQ $2FB    LAST GRAPHICS CHARACTER READ OR WRITTEN
               00510 *
0340:          00520 ICHID    EQ $340    HANDLER INDEX SET BY O.S.

0341:          00530 ICDNO    EQ $341    DEVICE # AS IN D1:,D2: ETC
0342:          00540 ICCOM    EQ $342    COMMAND
0343:          00550 ICSTA    EQ $343    STATUS RETURNED
0344:          00560 ICBAL    EQ $344    BUFFER ADDRESS LO
0345:          00570 ICBAH    EQ $345    BUFFER ADDRESS HI
0346:          00580 ICPTL    EQ $346    PUT ONE BYTE VECTOR LO
0347:          00590 ICPTH    EQ $347    PUT ONE BYTE VECTOR HI
0348:          00600 ICBLL    EQ $348    BUFFER LENGTH LO
0349:          00610 ICBLH    EQ $349    BUFFER LENGTH HI
034A:          00620 ICAUX1    EQ $34A    AUXI
034B:          00630 ICAUX2    EQ $34B    AUX2
               00640 *
4000: 4C 30 42 00650    JMP START    SKIP PAST SUBROUTINES

               00660 * GRAPHICS CALLS TO O.S.

               00670 *
               00680 *   GRAPHICS
               00690 *   ACC=GR. MODE
4003: 48       00700 GRAPHICS PHA    SAVE MODE

4004: A2 60    00710    LDX #$60    IOCB #6 FOR GRAPHICS

4006: A9 0C    00720    LDA #CLOSE    ;CLOSE #6 FOR SAFETY (CAN'T OPEN AN ALREADY OPEN DEVICE)

4008: 9D 42 03 00730        STA ICCOM,X
400B: 20 56 E4 00740        JSR CIOV
400E: A9 03    00750    LDA #OPEN
4010: 9D 42 03 00760        STA ICCOM,X
4013: A9 AC    00770    LDA #FNAME    FILENAME IS S:
4015: 9D 44 03 00780        STA ICBAL,X
4018: A9 41    00790    LDA /FNAME
401A: 9D 45 03 00800        STA ICBAH,X
401D: 68       00810    PLA    GR. MODE
401E: 9D 4B 03 00820        STA ICAUX2,X

4021: 29 F0    00830    AND #$F0        KEEP UPPER NIBBLE FOR FULLSCREEN
               00835        ;& NO SCREEN ERASE FLAGS(+16 & +32)
               00840 *O.S. FULL SCREEN FLAG IS THE OPPOSITE OF THE WAY BASIC USES IT.
               00845 *i.e. +16 = SPLIT SCREEN NOT FULL SCREEN
4023: 49 10    00850    EOR #$10        FLIP-FLOP IT LIKE BASIC
4025: 09 0C    00860    ORA #OPNINO        OPEN S: FOR READING & WRITING

4027: 9D 4A 03 00870        STA ICAUXI,X
402A: 4C 56 E4 00880        imp Clov    GO DO IT IT WILL RTS FROM THERE
               00890 ;
               00900 *   POSITION
               00910 *   EVEN THOUGH THIS IS SIMPLE IT IS HERE AS A SUBROUTINE
               00920 *   BECAUSE IT IS USED OFTEN BY OTHER ROUTINES

               00930 *   ACC. = VERT.
               00940 *   X = HORIZ. HI : Y HORIZ. LO

               00950 POSITION
402D: 84 55    00960    STY COLCRS    CURSOR COLUMN LO
402F: 86 56    00970    STX COLCFS+l    ;CURSOR COLUMN HI

4031: 85 54    00980        STA ROWCRS ; CURSOR ROW
4033: 60       00990        RTS
               01000 ;
               01010 *   PLOT
               01020 *   ENTRY REG. ARE SAME AS POSITION
               01030 *   WILL PLOT A POINT USING VALUE IN COLOR
               01040

4034: 20 2D 40 01050 PLOT    JSR POSITION
4037: A2 60    01060    LDX #$60    IOCB #6
4039: A9 0B    01070    LDA #PUTCHR
403B: 9D 42 03 01080    STA ICCOM,X
403E: A9 00    01090    LDA #$0    0 BUFFER LENGTH
4040: 9D 48 03 01100    STA ICBLL,X
4043: 9D 49 03 01110    STA ICBLH,X
4046: AD 15 42 01120    LDA COLOR    CIO WILL DEFAULT TO VALUE IN ACC
4049: 4C 56 E4 01130    imp Ciov    & SEND IT TO SCREEN (IT WILL RTS To PROGRAM FROM CIO
               01140
               01150 *DRAWTO

               01160 *   ENTRY SETUP SAME AS POSITION

404C: 20 2D 40 01170 DRAWTO    JSR POSITION
404F: AD 15 42 01180    LDA COLOR
4052: 8D FB 02 01190    STA ATACHR    TELL O.S.
4055: A2 60    01200    LDX #$60    IOCB #6
4057: A9 11    01210    LDA #DRAWLN    DRAWTO HAS ITS OWN SPECIAL COMMAND
4059: 9D 42 03 01220    STA ICCOM,X
405C: A9 0C    01230    LDA #OPNINO

405E: 9D 4A 03 01240    STA ICAUXI,X; MAKE SURE O.S. KNOWS WHAT IT IS SUPPOSED TO DO
4061: A9 00    01250    LDA #$0
4063: 9D 4B 03 01260    STA ICAUX2,X

4066: 4C 56 E4 01270    imp CIOV    GO DO IT & RTS TO PROGRAM FROM THERE
               01280
               01290 *LOCATE

               01300 *   SETUP SAME AS POSITION
               01310 *   ACC. & COLOR HAVE VALUE LOCATED

4069: 20 2D 40 01320 LOCATE        JSR POSITION
406C: A2 60    01330    LDX #$60    IOCB #6
406E: A9 07    01340    LDA #GETCHR
4070: 9D 42 03 01350        STA ICCOM,X
4073: A9 00    01360    LDA #$0    0 OUT BUFFER LENGTH
4075: 9D 48 03 01370        STA ICBLL,X
4078: 9D 49 03 01380        STA ICBLH,X
407B: 20 56 E4 01390        JSR CIOV    THIS WORKS EXACTLY THE OPPOSITE OF PLOT
407E: 8D 15 42 01400        STA COLOR

4081: 60       01410    RTS
               01420

               01430 *   MISC. ROUTINES
               01440 *   8 BIT DIVISION
               01450 *   X= NUM TO DIVIDE BY
               01460 *   A= LOBYTE OF NUM TO DIVIDE INTO
               01470 *   Y= HIBYTE OF NUM TO DIVIDE INTO
               01480 *   RESULT & REMAIN HAVE ANSWER ON EXIT
               01490 *    A=REMAINDER

4082: 8D 16 42 01500 DIVIDE        STA RESULT
4085: 8E 18 42 01510        STX DIVISOR
4088: 98       01520    TYA
4089: A2 08    01530    LDX #$08
408B: 0E 16 42 01540 .1        ASL RESULT
408E: 2A       01550    ROL
408F: CD 18 42 01560        CMP DIVISOR
4092: 90 06    01570    BCC .2
4094: ED 18 42 01580        SBC DIVISOR
4097: EE 16 42 01590        INC RESULT

409A: CA       01600 .2    DEX
409B: D0 EE    01610    BNE .1
409D: 8D 17 42 01620    STA REMAIN

40A0: 60       01630    RTS
               01640 ;

               01650 *   8 BIT MULTIPLY
               01660 *   MULTIPLIES ACC BY X REG.
               01670 *   STORES RESULT (L,H) IN RESULT & RESULT+l

40A1: 8D 19 42 01680 MULTIPLY STA Ml    MULTIPLIER

40A4: 8E 1A 42 01690        STX M2    MULTIPLICAND
40A7: A9 00    01700    LDA #$0
40A9: 8D 16 42 01710        STA RESULT
40AC: 8D 17 42 01720        STA RESULT+l
40AF: A2 08    01730    LDX #$08
40B1: 0E 16 42 01740 .1        ASL RESULT
40B4: 2E 17 42 01750        ROL RESULT+l
40B7: 0E 1A 42 01760        ASL M2
40BA: 90 0F    01770    BCC .2
40BC: 18       01780    CLC
40BD: AD 16 42 01790        LDA RESULT
40C0: 6D 19 42 01800        ADC MI
40C3: 8D 16 42 01810        STA RESULT
40C6: 90 03    01820    BCC .2
40C8: EE 17 42 01830        INC RESULT+l

40CB: CA       01840 .2    DEX
40CC: D0 E3    01850    BNE .1
40CE: 60       01860    RTS
               01870 ;
40CF: A9 01    01880 NEWBALL    LDA #$Ol    BALL COLOR

40D1: 8D 15 42 01890    STA COLOR
40D4: 18       01900    CLC
40D5: AD 0A D2 01910    LDA RANDOM
40D8: 29 7F    01920    AND #$7F    0-128
40DA: 69 10    01930    ADC #$10    16-144

40DC: 8D 20 42 01940    STA BALLX; BALL HORIZ. POS. IS DOUBLED SO IT CAN BE MOVED IN HALF INC

40DF: 4A       01950    LSR    /2    FOR ACTUAL BALL POSITION
40E0: 8D 25 42 01960    STA OLDX
40E3: A8       01970    TAY
40E4: A2 00    01980    LDX #$00
40E6: A9 11    01990    LDA #$11        17
40E8: 8D 21 42 02000    STA BALLY
40EB: 8D 26 42 02010    STA OLDY
40EE: 20 34 40 02020    JSR PLOT        PUT NEW BALL STARTING POS. ON SCREEN
40F1: A9 01    02030    LDA #$Ol
40F3: 8D 23 42 02040    STA DY        SET FOR DOWN
40F6: AD 0A D2 02050    LDA RANDOM
40F9: 29 03    02060    AND #$03        0-3
40FB: AA       02070    TAX
40FC: BD 0D 42 02080    LDA VX,X        PICK RANDOM HORIZ. VECTOR
40FF: 8D 22 42 02090    STA DX        SAVE IT
4102: A9 26    02100    LDA #$26        38
4104: 8D 27 42 02110    STA PADDLE        REPOSITION TO MIDDLE OF SCREEN
4107: 20 17 41 02120 .1    JSR DOPADDLE
410A: AD 78 02 02130    LDA STICKO
410D: C9 0F    02140    CMP #$0F        STICK CENTER?
410F: D0 F6    02150    BNE .1        WAIT TILL IT IS.
4111: AD 84 02 02160    LDA STRIGO        BUTTON PRESSSED?
4114: D0 F1    02170    BNE .1        WAIT TILL TRIGGER PRESSED
4116: 60       02180    RTS
               02190

4117: AE 78 02 02200 DOPADDLE LDX STICKO    GET STICK VALUE
411A: AD 84 02 02210    LDA STRIGO    BUTTON PRESSED
411D: D0 06    02220    BNE .1    USE NORMAL SPEED PADDLE MOVEMENT
411F: BD FD 41 02230    LDA FHOFFS,X    TRIPLE SPEED TABLE
4122: 4C 28 41 02240    JMP .2

4125: BD ED 41 02250 .1    LDA HOFFS,X    NORMAL SPEED TABLE
4128: A2 00    02260 .2    LDX #$00    PADDLE MINIMUM
412A: A0 4C    02270    LDY #$4C    76 PADDLE MAXIMUM
412C: 18       02280    CLC
412D: 6D 27 42 02290    ADC PADDLE

4130: 10 01    02300    BPL .3
4132: 8A       02310    TXA    PADDLE H. CAN'T GO LESS THAN 0 SO SET IT TO 0
4133: C9 4D    02320 .3    CMP #$4D    77 GONE PAST UPPER LIMIT
4135: 90 01    02330    BCC .4    OK IF <
4137: 98       02340    TYA

4138: 8D 27 42 02350 .4    STA PADDLE

               02360 *   NOW ERASE OLD PADDLE & DRAW NEW

413B: A9 00    02370 *   LDA #$00
413D: 8D 15 42 02380 *   STA COLOR
4140: 20 52 41 02390 *   JSR DRPADDLE
4143: AD 27 42 02400 *   LDA PADDLE
4146: 8D 28 42 02410 *   STA PX
4149: A9 01    02420 *   LDA #$Ol
414B: 8D 15 42 02430 *   STA COLOR
414E: 20 52 41 02440 *   JSR DRPADDLE,    4
4151: 60       02450 *   RTS
               02460

               02470 *   DRAW PADDLE
4152: A9 24    02480 DRPADDLE LDA #$24    36TH ROW

4154: AC 28 42 02490    LDY PX    PADDLE H.
4157: A2 00    02500    LDX #$00    HI BYTE OF PADDLE H. ALWAYS 0 UNLESS GR. 8
4159: 20 34 40 02510    JSR PLOT
415C: 18       02520    CLC
415D: AD 28 42 02530    LDA PX
4160: 69 03    02540    ADC #$03    END OF PADDLE IS PADDLE H. + 3
4162: A8       02550    TAY    SET UP FOR DRAWTO CALL
4163: A2 00    02560    LDX #$00
4165: A9 24    02570    LDA #$24
4167: 20 4C 40 02580    JSR DRAWTO

416A: 60       02590    RTS
               02600
               02610 *EBRICK

               02620 * ERASES BRICK ONE LINE AT A TIME

416B: A2 00    02630 EBRICK    LDX #$00

416D: 8E 15 42 02640        STX COLOR
4170: AD 2C 42 02650        LDA BRICKY
4173: AC 2B 42 02660        LDY BRICKX
4176: 20 34 40 02670        JSR PLOT
4179: 18       02680    CLC
417A: AD 2B 42 02690        LDA BRICKX
417D: 69 04    02700    ADC #$04
417F: A8       02710    TAY
4180: A2 00    02720    LDX #$00
4182: AD 2C 42 02730        LDA BRICKY
4185: 20 4C 40 02740        JSR DRAWTO

4188: 60       02750    RTS
               02760 *
4189: A5 14    02770 JDELAY    LDA RTCLOC
418B: C5 14    02780 .1    CMP RTCLOC
418D: F0 FC    02790    BEQ .1
418F: CA       02800    DEX
4190: D0 F7    02810    BNE JDELAY
4192: 60       02820    RTS
               02830 *

               02840 * VBI ROUTINE IS USED SO SOUND DOES NOT INTERFERE WITH PLAY

               02850 *VBI
4193: D8       02860    CLD
4194: AD 2F 42 02870    LDA TIMER    SOUND TO DO
4197: F0 10    02880    BEQ XVBI    NO. LEAVE
4199: CE 2F 42 02890    DEC TIMER    COUNTDOWN
419C: AD 2F 42 02900    LDA TIMER    USE TIMER AS VOLUME
419F: 09 A0    02910    ORA #$AO    DISTORTION 10
41A1: 8D 01 D2 02920    STA AUDCI    TELL POKEY
41A4: A9 20    02930    LDA #$20
41A6: 8D 00 D2 02940    STA AUDFI
               02950 XVBI
41A9: 4C 62 E4 02960    JMP XITVBV
               02970 *

               02980 *   PROGRAM DATA

               02990
41AC: 53 3A    03000 FNAME    AS "S:"
41AE: 9B       03010    HS 9B
41AF: 27 21 2D
41B2: 25 00 2F

41B5: 36 25 32 03020 MSGO    AT "GAME OVER"
41B8: 00 30 25
41BB: 32 26 25
41BE: 23 34 01 03030 MSGI    AT " PERFECT!"
41C1: AF 41 B8

41C4: 41       03040 MSGTAB    DA MSGO,MSGI
41C5: 00 00 22
41C8: 21 2C 2C
41CB: 1A 00 10
41CE: 00 00 00
41D1: 00 00 00
41D4: 00 00 00

41D7: 00 00    03050 TOPLINE    AT    BALL: 0
41D9: 00 00 00
41DC: 00 00 00
41DF: 00 00 33
41E2: 23 2F 32
41E5: 25 1A 00
41E8: 10 10 10
41EB: 10 00    03060    AT        SCORE: 0000
41ED: 00 00 00
41F0: 00 00 01

41F3: 01 01    03070 HOFFS    HS 0000000000010101
41F5: 00 FF FF
41F8: FF 00 00

41FB: 00 00    03080    HS OOFFFFFF0OOOOOOO
41FD: 00 00 00
4200: 00 00 03

4203: 03 03    03090 FHOFFS    HS 0000000000030303
4205: 00 FD FD
4208: FD 00 00
420B: 00 00    03100    HS OOFDFDFDOOOOOOOO
420D: FE FF 01
4210: 02       03110 VX    HS FEFF0102
4211: 00 10 05
4214: 03       03120 POINTS    HS 00100503
4215: 00       03130 COLOR    BS 1

4216: 00       03140 RESULT    BS 1    RESULT & REMAIN MUST STAY
4217: 00       03150 REMAIN    BS 1    NEXT TO EACH OTHER
4218: 00       03160 DIVISOR    BS 1
4219: 00       03170 MI    BS 1
421A: 00       03180 M2    BS 1

421B: 00       03190 TEMPI    BS 1
421C: 00       03200 TEMP2    BS 1
421D: 00       03210 TEMP3    BS 1
421E: 00       03220 TEMP4    BS 1
421F: 00       03230 ROW    BS 1
4220: 00       03240 BALLX    BS 1    ;BALL'S X POSITION (DOUBLED)
4221: 00       03250 BALLY    BS 1    ;BALL'S Y POSITION
4222: 00       03260 DX    BS 1    ;DOUBLED HORIZONTAL DIRECTION VALUE
4223: 00       03270 DY    BS 1    ;VERTICAL DIRECTION VALUE
4224: 00       03280 TX    BS 1    ;TRUE HORIZONTAL DIRECTION VALUE
4225: 00       03290 OLDX    BS 1    ;BALL'S OLD HORIZ POSITION
4226: 00       03300 OLDY    BS 1    ;BALL'S OLD VERTICAL POSITION
4227: 00       03310 PADDLE    BS 1    ;HORIZ PADDLE POSITION
4228: 00       03320 PX    BS 1    ;NEW HORIZ PADDLE POSITION
4229: 00       03330 BALLS    BS 1
422A: 00       03340 BRICKS    BS 1
422B: 00       03350 BRICKX    BS 1    ;HORIZ POSITION OF BRICK TO BE REMOVED
422C: 00       03360 BRICKY    BS 1    ;VERTICAL POSITION
422D: 00 00    03370 SCORE    BS 2
422F: 00       03380 TIMER    BS 1
               03390 ;

               03400 *BEGINNING OF 14AIN PROGRAM

4230: A9 07    03410 START    LDA #$07    DEFFERED
4232: A0 93    03420    LDY #VBI
4234: A2 41    03430    LDX /VBI

4236: 20 5C E4 03440        JSR SETVBV    ENABLE SOUND ROUTINE
4239: A9 05    03450    LDA #$05    START WITH GRAPHICS 5
423B: 20 03 40 03460        JSR GRAPHICS
423E: AD 30 02 03470        LDA SDLSTL    FIND DISPLAY LIST
4241: 85 F6    03480    STA PO
4243: AD 31 02 03490        LDA SDLSTL+l

4246: 85 F7    03500    STA PO+l
4248: A0 2F    03510    LDY #$2F
424A: B1 F6    03520    LDA (PO),Y    FIND OUT WHERE IT PUT TEXT WINDOW
424C: 85 F1    03530    STA WINDOW+l
424E: 85 F5    03540    STA LINE2+1
4250: 88       03550    DEY
4251: B1 F6    03560    LDA (PO),Y
4253: 85 F0    03570    STA WINDOW
4255: 18       03580    CLC
4256: 69 38    03590    ADC #$38    56 ALMOST HALFWAY INTO 2ND LINE OF TEXT WINDOW
4258: 85 F4    03600    STA LINE2
425A: 90 02    03610    BLT .1
425C: E6 F5    03620    INC LINE2+1
425E: A0 27    03630 .1    LDY #$27    39

4260: B9 C5 41 03640 .2    LDA TOPLINE,Y    BLOCK MOVE THE TOPLINE INTO TEXT WINDOW

4263: 91 F0    03650    STA (WINDOW),Y
4265: 88       03660    DEY
4266: 10 F8    03670    BPL .2

               03680 * NOW DRAW BRICKS
4268: A9 03    03690 DOBRICKS LDA #$03

426A: 8D 1B 42 03700        STA TEMPI
426D: AD 1B 42 03710 .1        LDA TEMPI
4270: 8D 15 42 03720        STA COLOR
4273: A9 02    03730    LDA #$02
4275: 8D 1C 42 03740        STA TEMP2
4278: AD 1B 42 03750 .2        LDA TEMPI
427B: 0A       03760    ASL    X 2
427C: 0A       03770    ASL    X 4
427D: 18       03780    CLC
427E: 6D 1C 42 03790        ADC TEMP2
4281: 8D 1F 42 03800        STA

4284: A9 02    03810    LDA #$02
4286: 8D 1D 42 03820    STA TEMP3
4289: AD 1F 42 03830 .3    LDA ROW
428C: A2 00    03840    LDX #$00
428E: A0 00    03850    LDY #$00
4290: 20 34 40 03860    JSR PLOT    PLOT O,ROW
4293: AD 1F 42 03870    LDA ROW
4296: A2 00    03880    LDX #$0
4298: A0 4F    03890    LDY #$4F    79
429A: 20 4C 40 03900    JSR DRAWTO    DRAWTO 79,ROW
429D: EE 1F 42 03910    INC ROW
42A0: CE 1D 42 03920    DEC TEMP3
42A3: D0 E4    03930    BNE .3    TWO ROWS PER BRICK
42A5: CE 1C 42 03940    DEC TEMP2
42A8: CE 1C 42 03950    DEC TEMP2
42AB: 10 CB    03960    BPL .2    TWO ROWS OF BRICKS PER COLOR
42AD: CE 1B 42 03970    DEC TEMPI
42B0: D0 BB    03980    BNE .1    3 COLORS OF BRICKS
42B2: A9 01    03990    LDA #$Ol
42B4: 8D 29 42 04000    STA BALLS
42B7: 09 10    04010    ORA #$10    MAKE INTERNERNAL CHR
42B9: A0 08    04020    LDY #$08

42BB: 91 F0    04030    STA (WINDOW),Y
42BD: A9 60    04040    LDA #$60    96 6 ROWS OF 16 BRICKS

42BF: 8D 2A 42 04050    STA BRICKS
42C2: A9 00    04060    LDA #$00
42C4: 8D 2D 42 04070    STA SCORE
42C7: 8D 2E 42 04080    STA SCORE+l

               04090 * MAIN GAME LOOP BEGINS HERE

               04100 *
42CA: 20 CF 40 04110 CAME    JSR NEWBALL    INITIALIZE NEW BALL DATA WAIT FOR BUTTON PRESS

42CD: A2 08    04120 GAMELDOP    LDX #$08
42CF: 86 4D    04130    STX ATRACT
42D1: 20 89 41 04140    JSR JDELAY
42D4: 20 17 41 04150    JSR DOPADDLE UPDATE PADDLE POS.
               04160 * GET NEW BALL POS.

42D7: 18       04170 DOBALL    CLC
42D8: AD 20 42 04180    LDA BALLX
42DB: 6D 22 42 04190    ADC DX    HORIZONTAL CHANCE. -2 TO +2

42DE: C9 F0    04200    CMP #$F0
42E0: 90 02    04210    BCC .0
42E2: A9 00    04220    LDA #$00
42E4: C9 A0    04230 .0    CMP #$AO
42E6: 90 02    04240    BCC .10
42E8: A9 9F    04250    LDA #$9F

42EA: 8D 20 42 04260 .10        STA BALLX
42ED: 4A       04270    LSR    TRUE H. POS.
42EE: 8D 24 42 04280        STA TX
42F1: F0 04    04290    BEQ .1
42F3: C9 4F    04300    CMP #$4F    79 AT RIGHT EDGE?
42F5: 90 10    04310    BLT .2    OK IF
42F7: CE 22 42 04320 .1        DEC DX
42FA: AD 22 42 04330        LDA DX
42FD: 49 FF    04340    EOR #$FF    REVERSE HORIZONTAL
42FF: 8D 22 42 04350        STA DX
4302: A9 10    04360    LDA #$10
4304: 8D 2F 42 04370        STA TIMER    PING!
4307: 18       04380 .2    CLC
4308: AD 21 42 04390        LDA BALLY
430B: 6D 23 42 04400        ADC DY
430E: 8D 21 42 04410        STA BALLY
4311: C9 02    04420    CMP #$02
4313: B0 0C    04430    BGE .3
4315: A9 01    04440    LDA #$Ol    AT TOP
4317: 8D 23 42 04450    STA DY    SET VERTICAL DIRECTION TO DOWN
431A: A9 10    04460    LDA #$10
431C: 8D 2F 42 04470    STA TIMER    PING!
431F: D0 07    04480    BNE HITCK    BRANCH ALWAYS
4321: C9 27    04490 .3    CMP #$27    PAST PADDLE?

4323: 90 03    04500    BLT HITCK    OK IF <
4325: 4C ED 43 04510    JMP ENDBALL

               04520 ; ACC HAS V.

4328: A2 00    04530 HITCK    LDX #$00
432A: AC 24 42 04540    LDY TX
432D: 20 69 40 04550    JSR LOCATE    ACC. HAS COLOR VALUE OF PIXEL

4330: C9 00    04560    CMP #$00
4332: D0 03    04570    BNE .1
4334: 4C C4 43 04580    JMP XHITCK
4337; A0 10    04590 .1    LDY #$10
4339: 8C 2F 42 04600    STY TIMER        PING!
433C: AC 21 42 04610    LDY BALLY
433F: C0 20    04620    CPY #$20        HAS IT HIT PADDLE OR BRICKS?
4341: 90 15    04630    BCC .2        BRICKS
4343: AD 24 42 04640    LDA TX        COMPARE PADDLE H. TO BALL H.
4346: ED 28 42 04650    SBC PX        DIFFERENCE IS 0-3
4349: AA       04660    TAX        AND WILL DECIDE NEW HORIZ. VELOCITY
434A: BD 0D 42 04670    LDA VX,X
434D: 8D 22 42 04680    STA DX    ;STORE NEW HORIZ VELOCITY
4350: A9 FF    04690    LDA #$FF

4352: 8D 23 42 04700    STA DY    SET VERTICAL DIRECTION TO UP
4355: 4C C4 43 04710    JMP XHITCK    LEAVE
               04720 *ACC. STILL HAS COLOR    VALUE HIT. USE IT TO GET BRICK VALUE
4358: AA       04730 .2    TAX
4359: F8       04740    SED

435A: AD 2E 42 04750    LDA SCORE+l ;LOAD TWO LOW DIGITS
435D: 7D 11 42 04760    ADC POINTS,X ;ADD POINT VALUE OF BRICK
4360: 8D 2E 42 04770    STA SCORE+l

4363: A9 00    04780    LDA #$00    ;WILL ALSO ADD CARRY BIT IF NECESSARY

4365: 6D 2D 42 04790    ADC SCORE
4368: 8D 2D 42 04800    STA SCORE

436B: D8       04810    CLD

               04820 * NOW PRINT NEW SCORE ON SCREEN

               04830 DOSCORE
436C: A2 00    04840    LDX #$00
436E: A0 23    04850    LDY #$23
4370: BD 2D 42 04860 .1    LDA SCORE,X

4373: 4A       04870    LSR    EACH BYTE HOLDS 2 NUMBERS
4374: 4A       04880    LSR    SHIFT UPPER NIBBLE OVER
4375: 4A       04890    LSR    AND DO IT
4376: 4A       04900    LSR    FIRST.
4377: 09 10    04910    ORA #$10    TRANSLATE NUMBER INTO INTERNAL CHARACTER

4379: 91 F0    04920    STA (WINDOW),Y ;STORE HIGHER DIGIT OF PAIR IN TEXT AREA
437B: C8       04930    INY     ;NEXT

437C: BD 2D 42 04940    LDA SCORE,X

437F: 29 0F    04950    AND #$OF    NOW DO LOWER NIBBLE

4381: 09 10    04960    ORA #$10    MAKE A CHR
4383: 91 F0    04970    STA (WINDOW),Y ;STORE LOWER DIGIT OF PAIR IN TEXT AREA
4385: C8       04980    INY
4386: E8       04990    INK
4387: E0 02    05000    CPX 002    DONE BOTH BYTES? (ALL 4 SCORE DIGITS)
4389: D0 E5    05010    BNE .1
               05020 *NOW CALCULATE BRICK POSITION

               05030 *   BRICK HORIZONTAL IS THE INTEGER OF TX/5

438B: AD 24 42 05040        LDA TX
438E: A0 00    05050    LDY #$00    TX HAS NO HIBYTE SO Y=O
4390: A2 05    05060    LDX #$05        TO DIVIDE BY
4392: 20 82 40 05070        JSR DIVIDE
4395: AD 16 42 05080        LDA RESULT
4398: A2 05    05090    LDX #$05
439A: 20 A1 40 05100        JSR MULTIPLY
439D: AD 16 42 05110        LDA RESULT
43A0: 8D 2B 42 05120        STA BRICKX
43A3: AD 21 42 05130        LDA BALLY    BALL VERT.
43A6: 4A       05140    LSR    /2
43A7: 0A       05150    ASL    X2 THIS INSURES AN EVEN NUMBER
43A8: 8D 2C 42 05160        STA BRICKY    THE 'FOP OF ANY BRICK IS AN EVEN ROW.
43AB: 20 6B 41 05170        JSR EBRICK    ERASE TOP 1,INE OF BRICK
43AE: EE 2C 42 05180        INC BRICKY    BRICKS ARE 2 [,INES HIGH
43B1: 20 6B 41 05190        JSR EBRICK    ERASE SECOND LINE

               05200 *   BRICK IS GONE
               05210 *   FLIP FLOP VERTICAL DIRECTION

43B4: CE 23 42 05220        DEC DY
43B7: AD 23 42 05230        LDA DY
43BA: 49 FF    05240    EOR #$FF
43BC: 8D 23 42 05250        STA DY
43BF: CE 2A 42 05260        DEC BRICKS    ONE LESS BRICK
43C2: F0 4A    05270    BEQ ENDGAME    IF ALL ARE GONE END GAME
               05280 *XHITCK
43C4: A9 00    05290    LDA #$0
43C6: 8D 15 42 05300        STA COLOR
43C9: AD 26 42 05310        LDA OLDY
43CC: A2 00    05320    LDX #$00
43CE: AC 25 42 05330        LDY OLDX
43D1: 20 34 40 05340        JSR PLOT    ERASE OLD BALL
43D4: A9 01    05350    LDA #$Ol
43D6: 8D 15 42 05360        STA COLOR
43D9: AD 21 42 05370        LDA BALLY
43DC: 8D 26 42 05380        STA OLDY
43DF: A2 00    05390    LDX #$00
43E1: AC 24 42 05400        LDY TX
43E4: 8C 25 42 05410        STY OLDX
43E7: 20 34 40 05420        JSR PLOT    PUT BALL ON IN NEW POSITION
43EA: 4C CD 42 05430        JMP GAMELOOP        DO IT AGAIN
43ED: A2 00    05440 ENDBALL    LDX #$00
43EF: 8E 15 42 05450        STX COLOR
43F2: AC 25 42 05460        LDY OLDX
43F5: AD 26 42 05470        LDA OLDY
43F8: 20 34 40 05480        JSR PLOT    ERASE BALL
43FB: EE 29 42 05490        INC BALLS
43FE: AD 29 42 05500        LDA BALLS    2-6

4401: C9 06    05510    CMP #$06
4403: B0 09    05520    BCS ENDGAME
4405: 09 10    05530    ORA #$10    MAKE INTO CHR.
4407: A0 08    05540    LDY #$08
4409: 91 F0    05550    STA (WINDOW),Y

440B: 4C CA 42 05560    JMP GAME    GO BACK TO NEWBALL ROUTINE
               05570 ENDGAME
440E: A2 00    05580    LDX #$00
4410: AD 2A 42 05590    LDA BRICKS
4413: D0 01    05600    BNE .1
4415: E8       05610    INX    THEN 2ND MESSAGE
4416: 8A       05620 .1    TXA
4417: 0A       05630       ASL
4418: AA       05640    TAX
4419: BD C1 41 05650    LDA MSGTAB,X
441C: 85 F2    05660    STA MSG
441E: BD C2 41 05670    LDA MSGTAB+1,X

4421: 85 F3    05680    STA MSG+l
4423: A0 08    05690    LDY #$08
4425: B1 F2    05700 .2    LDA (MSG),Y
4427: 91 F4    05710    STA (LINE2),Y
4429: 88       05720    DEY
442A: 10 F9    05730    BPL .2

442C: AD 1F D0 05740 .3    LDA CONSOL
442F: C9 06    05750    CMP #$06
4431: D0 F9    05760    BNE .3
4433: 4C 30 42 05770    JMP START
