10 FAST :DIM MM(3,3)
20 VA=PEEK(&105)+256*PEEK(&106):CS=PEEK(&103)+256*PEEK(&104)+9
30 FILL 32:VPRINT 4*80+20,"BREAKOUT FROM HAWKEYE GRAFIX"
40 VPRINT 6*80+25,"COPYRIGHT 1980,1981"
50 VPRINT 11*80+11,"SOUNDS GENERATED FOR AY-3-8910 CHIPS ON PORT 128"
60 VPRINT 13*80+12,"(DIGITAL RESEARCH OF TEXAS STEREO SOUND BOARD)"
70 VPRINT 20*80+10,"MOVE YOUR PADDLE BY PRESSING NUMBERS 1 (LEFT) THRU 0 (RIGHT)"
80 VINPUT 22*80+20,"SELECT SPEED 0 THRU 9 (0=FAST) ";,A:DE=A*10
90 VINPUT 22*80+20,"PRESS RETURN WHEN READY TO BEGIN ";,A
100 RESTORE 150
110 REM     SET UP VARIOUS PADDLE REFLECTION ANGLES 
120 FOR I=0 TO 3:FOR J=0 TO 3
130 READ MM(J,I)
140 NEXT J,I
150 DATA -3,-1,1,3
160 DATA -6,-3,3,6
170 DATA -3,-2,2,3
180 DATA -2,-1,1,2
190 REM     SET UP SOUND CONTROL PORTS 
200 FOR I=0 TO 12
210 READ C1,C2
220 OUT 128,I:OUT 129,C1
230 OUT 130,I:OUT 131,C2
240 NEXT I
250 DATA 64,10,0,0,0,0,0,0,0,0,0,0,0,0
260 DATA 254,254,16,16,0,0,0,0,87,87,3,3
270 POKE VA+&7FF,12
280 BL=1
290 SC=0
300 FILL 32
310 REM     LOAD A LINE OF NULLS TO DETECT OFF BOTTOM OF SCREEN 
320 FOR I=VA+1920 TO VA+2000
330 POKE I,0
340 NEXT 
350 REM     BUILD BORDER AND HEADING
360 FOR I=80 TO 159
370 VPRINT I,CHR$(&7F)
380 NEXT 
390 FOR I=2 TO 23
400 VPRINT I*80-1,CHR$(&7F);CHR$(&7F)
410 NEXT 
420 VPRINT 24*80-1,CHR$(&7F)
430 VPRINT 10,"BALL:"
440 VPRINT 30,"SCORE:"
450 VPRINT 50,"HIGH SCORE:"
460 REM     BUILD BRICK WALL 
470 FOR I=0 TO 4
480 FOR J=0 TO 18
490 DRAW J*8+4,54-(3*I),J*8+10,54-(3*I),1
500 NEXT J,I
510 PP=VA+7*80+2:P1=PEEK(PP):P2=PEEK(PP+3)
520 PD$="--------":PA=&6E0+31:VPRINT PA,PD$
530 REM   PF IS PADDLE FUNCTION, 2 FOR FULL SIZE, 1 FOR HALF SIZE 
540 PF=2
550 REM   BX IS BALL, X POSITION; BY IS BALL Y 
560 REM   VX IS BALL X VECTOR, VY IS Y 
570 BX=INT(RND(1)*75+5)
580 BY=10
590 IF BX<40 THEN VX=1 ELSE VX=-1
600 VY=1
610 REM     SP IS SPEED FACTOR, HALVED WHEN TOP WALL IS HIT
620 SP=2
630 VPRINT 61,HS
640 VPRINT 15,BL
650 VPRINT 36,SC
660 PF=2
670 REM     FF IS FAST SPEED FLAG, SET FOR HITTING TOP WALL 
680 FF=0
690 REM     HT IS HIT COUNT, SETS UP DIFFERENT PADDLE ANGLES 
700 HT=0
710 REM     BN IS BOUNCE FLAG, SET WHEN BALL HITS TOP OF BOARD 
720 BN=0
730 REM     WAIT HERE FOR STARTING ACTIVITY (PRESS BUTTON) 
740 FOR I=0 TO 500:NEXT 
750 POKE CS,0
760 VINPUT 80*15+25,"PRESS RETURN TO SERVE ";,AN:VPRINT 80*15+25,"                            "
770 FOR I=0 TO 500:NEXT 
780 POKE CS,&FF
790 VPRINT 36,SC
800 SA=CINP(1):SA=SA OR 128:IF SA=OA THEN 880
810 IF SA<176 OR SA>185 THEN 880
820 OA=SA
830 IF SA=176 THEN SA=186
840 SA=SA-177:SA=SA*8+1:IF SA>71 THEN SA=SA-2
850 VPRINT PA,"        "
860 PA=&6E0+SA
870 VPRINT PA,PD$
880 SN=SN+1:IF SN<SP THEN 800 ELSE SN=0
890 FOR I=1 TO DE:NEXT 
900 IF PEEK(VA+BP)=45 THEN 1040
910 VPRINT BY*80+BX," "
920 BX=BX+VX
930 IF BX<1 THEN VX=ABS(VX):BX=1
940 IF BX>78 THEN BX=78:VX=-ABS(VX)
950 BY=BY+VY
960 BP=BY*80+BX
970 IF PEEK(BP+VA)<>32 THEN 1000
980 VPRINT BP,"o"
990 GOTO 800
1000 IT=PEEK(BP+VA)
1010 REM     BALL HIT SOMETHING;127 IS TOP OF BOARD;45 IS PADDLE
1020 IF IT=127 THEN VY=-VY:BY=BY+VY:BN=1:GOTO 960
1030 IF IT<>45 THEN 1170
1040 OUT 128,13:OUT 129,0
1050 HT=HT+1:BN=0
1060 IF HT<6 THEN II=0 ELSE II=1
1070 IF HT>11 THEN II=2
1080 IF FF=1 THEN II=3
1090 PP=PA-&6E0
1100 PB=INT((BX-PP)/PF)
1110 IF PB>3 THEN PB=3
1120 IF PB<1 THEN PB=0
1130 VX=MM(PB,II)
1140 VY=-VY
1150 GOTO 920
1160 REM     HIT < 128 IS OFF BOTTOM, ELSE HIT BRICK 
1170 IF IT=P1 OR IT=P2 THEN 1180 ELSE 1290
1180 OUT 130,13:OUT 131,0
1190 VPRINT BY*80+INT((BX-2)/4)*4+2,"    "
1200 IF VY=-1 THEN VY=1:GOTO 1220
1210 IF BN=1 THEN BN=0:VY=-1
1220 VPRINT BY*80+BX,"o"
1230 IF BY>7 THEN PT=1 ELSE PT=3
1240 IF BY=5 THEN PT=7
1250 SC=SC+PT
1260 IF PT=7 THEN FF=1:SP=1
1270 GOTO 790
1280 REM     BALL LOST 
1290 BL=BL+1
1300 IF BL<6 THEN 570
1310 IF SC>HS THEN HS=SC:VPRINT 21*80+30,"NEW HIGH SCORE"
1320 POKE CS,0
1330 VINPUT 19*80+30,"PLAY AGAIN";Y$
1340 IF LEFT$(Y$,1)="Y" THEN 80
1350 IF LEFT$(Y$,1)="y" THEN 80
1360 END