the cutting room mirror

Golf Game

This article has a talk page!
view on tcrf.net

This page contains notes for the game Golf Game.

MSX-BASIC Listing#

This is the de-tokenized form of the MSX-BASIC code contained in the ROM.

1000 'GOLF GAME FOR MSX AUG.5 1983
1010 'WRITTEN BY N.U.
1020 'INIT
1030 CLEAR 300,&HEFFF:COLOR 15,5,4:SCREEN 2,0,0:KEY OFF
1035 ON ERROR GOTO 1370
1040 DEFINT A-Z:SCREEN 1,0,0:WIDTH 30
1050 DEFUSR1=&O176:L=USR1(0)
1060 DEFUSR2=&H41
1070 DEFUSR3=&H44
1080 PT=BASE(12):CT=BASE(11)
1090 L1=&H10*8+CT:L2=&H7F*8+CT
1100 LOCATE 7,12:PRINT">> GOLF  GAME <<"
1110 FOR L=L1 TO L2:VPOKE L,&HF5:NEXT
1120 VDP(3)=159:VDP(4)=0
1130 DEFFNSS=STICK(0)+STICK(1)+STICK(2)
1140 DEFFNST=STICK(S(PL))
1150 DEFFNTR=STRIG(S(PL))
1160 DEFFNTT=STRIG(0)+STRIG(1)+STRIG(2)
1170 'READ FONT DATA
1180 GOSUB 8192:GOSUB 3616
1190 DIM PA(9),ME(9),SC(1,9),MS$(7),HI(1),UX(1),UY(1)
1200 IX=120:IY=72:CL=1:IP=1:A=RND(-TIME)
1210 RESTORE 1250
1220 FOR L=1 TO 3:READ MS$(L):NEXT
1230 FOR L=1 TO 9:READ CL$(L):NEXT
1240 FOR L=1 TO 9:FOR LL=1 TO 2:READ CL(L,LL):NEXT:NEXT
1250 DATA WATER HAZARD !!!,OB !!!,HOLE IN !!!
1260 DATA PT,SW,9I,7I,5I,3I,1I,3W,1W
1270 DATA 1,9,6,10,6,15,6,20,6,23,7,25,7,29,6,37,6,42
1280 GOSUB 5615:HN=0:RESTORE 4890:TT(0)=0:TT(1)=0:CLS
1290 VDP(4)=3:VDP(3)=255
1300 LOCATE 0,9:PRINT STRING$(30,CHR$(&H98));
1310 FOR L=10 TO 21
1320 LOCATE 0,L:PRINT CHR$(&H98);:LOCATE 29,L:PRINT CHR$(&H98);
1330 NEXT
1340 LOCATE 0,22:PRINT STRING$(30,CHR$(&H98));
1350 LOCATE 5,0:PRINT">>>  GOLF  GAME  <<<"
1360 'LOOP HOLE
1370 LOCATE 1,5:PRINTSPC(20):GOSUB 14925:HN=HN+1:FOR LL=0 TO 6:PUTSPRITELL,(0,209):NEXT
1380 IF HN=10 THEN 40507
1390 'LS
1400 READ PA(HN),ME(HN),PX,PY,UX(1),UY(1)
1410 SH(0)=0:SH(1)=0:HI(0)=0:HI(1)=0:GR=0:UX(0)=UX(1):UY(0)=UY(1)
1420 'CONDITION DISP
1430 GOSUB 8238
1440 'DRAW HOLE
1450 GOSUB 62601
1460 CL=9
1470 IF MB=1 THEN 61260
1480 IF HN=1 THEN PL=0:GOTO 19536
1490 IF SC(0,HN-1)>SC(1,HN-1) THEN PL=1 ELSE PL=0
1500 GOTO 19536
1510 'LOOP SHOT
1520 GOSUB 14925:IF MB=1 THEN PL=1:GOTO 19536
1530 IF (UX(0)-PX)^2+(UY(0)-PY)^2>(UX(1)-PX)^2+(UY(1)-PY)^2 AND HI(0)<>2 THEN PL=0 ELSE PL=1
1540 BX=UX(PL):BY=UY(PL)
1550 GOSUB 8992:SW=0:GOSUB 6642
1560 GOSUB 8408
1570 GOSUB 8333
1580 IF HA=0 THEN MS=1:GOSUB 17712:GOSUB 8337:GOSUB 30208:GOSUB 10572:HI(PL)=0:GOTO 35616
1590 IF HA=1 THEN MS=2:GOSUB 17712:GOSUB 8337:GOSUB 30208:SH(PL)=SH(PL)+2:HI(PL)=0:GOTO 35616
1600 BX=FX:BY=FY:UX(PL)=BX:UY(PL)=BY
1610 IF (PX-BX)^2+(PY-BY)^2>49 THEN HI(PL)=0:GOTO 35616
1620 IF ABS(PX-BX)=<1 AND ABS(PY-BY)=<1 THEN MS=3:GOSUB 18224:GOSUB 8337:GOSUB 39936:HI(PL)=2:TT(PL)=TT(PL)+SH(PL)-PA(HN):SC(PL,HN)=SH(PL):UX(PL)=PX:UY(PL)=PY ELSE GOSUB 18224:HI(PL)=1
1630 '
1640 IF MB=1 THEN IF HI(PL)=0 THEN 62249 ELSE IF HI(PL)=1 THEN GR=1:GOTO 3040 ELSE 14854
1650 IF HI(0)=2 AND HI(1)=2 THEN 14854
1660 IF (HI(0)=1 OR HI(0)=2) AND (HI(1)=1 OR HI(1)=2) THEN GR=1:GOTO 3040
1670 VP=VPEEK(BX\8+(BY\8)*32+BASE(10)):IF HI(PL)=0 THEN IF VP=&H90 OR VP=&H91 OR VP=&H95 THEN GOSUB 18224 ELSE GOSUB 17712
1680 GOTO 36101
1690 'NEXT HOLE
1700 '
1710 IF MB=1 THEN 14992
1720 IF HI(0)=2 AND HI(1)=2 THEN 14992 ELSE 36101
1730 'MESSAGE
1740 GOSUB 14925
1750 LOCATE 5,6:PRINT MS$(MS):RETURN
1760 'DRAW HOLE
1770 VDP(4)=3:VDP(3)=255
1780 FOR DY=10 TO 21
1790 READ DD$
1800 FOR DX=1 TO 28
1810 LOCATE DX,DY:PRINT CHR$(&H90+VAL("&H"+MID$(DD$,DX,1)));
1820 NEXT:NEXT
1830 VDP(4)=0:VDP(3)=159:RETURN
1840 'INPUT DATA
1850 GOSUB14925:FOR IL=0 TO 5:LOCATE 1,5:IF IL MOD2 THEN PRINT"PLAYER ";PL$(PL);SPC(9); ELSE PRINT SPC(20);
1860 FOR II=0 TO 700:NEXT
1870 NEXT
1880 SH(PL)=SH(PL)+1
1890 GOSUB 8992
1900 IF GR=1 THEN CL=1:GOTO 21836
1910 GOSUB 14925
1920 LOCATE 1,6:PRINT"INPUT CLUB"
1930 LOCATE 13,6:PRINT CL$(CL)
1940 IF FNST=3 THEN CL=CL MOD9+1
1950 IF FNST=7 THEN CL=CL-1:IF CL<1 THEN CL=9
1960 IF FNTR THEN 21836
1970 FOR LL=0 TO 200:NEXT
1980 GOTO 28160
1990 GOSUB 14925:LOCATE 18,4:PRINT"CLUB    ";CL$(CL);
2000 FOR LS=0 TO 2000:NEXT
2010 LOCATE 1,6:PRINT"INPUT DIRECTION"
2020 IL=1:IE=1
2030 IF FNST<>3 THEN 8331
2040 IF IY=72 THEN 18927
2050 IF IY=176 THEN 22601
2060 IF IX=8 THEN 18927 ELSE 18927
2070 IF FNST<>7 THEN 61260
2080 IF IY=72 THEN 22601
2090 IF IY=176 THEN 18927
2100 IF IX=8 THEN 18927 ELSE 18927
2110 IF FNST=0 THEN IE=1:IL=1 ELSE IE=IE+1
2120 IF IE>6 THEN IL=4
2130 IF IE>12 THEN IL=8
2140 IF IE>18 THEN IL=12
2150 PUT SPRITE 3,(IX,IY),1,1
2160 IF GR=0 THEN SW=2:GOSUB 6642
2170 IF FNTR THEN 16936
2180 GOTO 63627
2190 'A
2200 IF IY-IL>=72 THEN IY=IY-IL ELSE IY=72 ELSE IX=IX+IL
2210 GOTO 61260
2220 'A
2230 IF IY-IL>=72 THEN IY=IY-IL ELSE IY=72 ELSE IX=IX-IL
2240 GOTO 61260
2250 'B
2260 IF IX+IL<=240 THEN IX=IX+IL ELSE IX=240:IY=IY+IL
2270 GOTO 61260
2280 'B
2290 IF IX+IL<=240 THEN IX=IX+IL ELSE IX=240:IY=IY-IL
2300 GOTO 61260
2310 'C
2320 IF IY+IL<=176 THEN IY=IY+IL ELSE IY=176:IX=IX-IL
2330 GOTO 61260
2340 'C
2350 IF IY+IL<=176 THEN IY=IY+IL ELSE IY=176:IX=IX+IL
2360 GOTO 61260
2370 'D
2380 IF IX-IL>=8 THEN IX=IX-IL ELSE IX=8:IY=IY-IL
2390 GOTO 61260
2400 'D
2410 IF IX-IL>=8 THEN IX=IX-IL ELSE IX=8:IY=IY+IL
2420 GOTO 61260
2430 II=SQR((BX-IX)^2+(BY-IY)^2)
2440 SI=(IY-BY)*10/II:CO=(IX-BX)*10/II
2450 'POWER
2460 PUTSPRITE3,(0,209):GOSUB 14925
2470 FOR LS=0 TO 2000:NEXT
2480 LOCATE 1,6:PRINT"INPUT SHOT POWER"
2490 IF FNST=3 THEN IP=IP+1:IF IP>30 THEN IP=30
2500 IF FNST=7 THEN IP=IP-1:IF IP<1 THEN IP=1
2510 LOCATE 0,8:PRINT STRING$(IP,CHR$(&H99));STRING$(30-IP," ");
2520 IF GR=1 THEN 2560
2530 IF IP>20 THEN IS=0 ELSE IF IP>10 THEN IS=1 ELSE IS=2
2540 SW=IS:GOSUB 6642
2550 IF NOT FNTR THEN 14866
2560 SP=IP/3
2570 LOCATE 0,8:PRINT SPC(30);
2580 GOSUB 14925:LOCATE 18,4:PRINT SPC(10);
2590 RETURN
2600 'CLEAR MSGL
2610 FOR CM=6 TO 7:LOCATE 0,CM:PRINT SPC(30);:NEXT:RETURN
2620 'PAUSE 10
2630 FOR PP=0 TO 2000:NEXT:RETURN
2640 'PAUSE 30
2650 FOR PP=0 TO 6500:NEXT:RETURN
2660 'CONDITION
2670 LOCATE 1,2:PRINTUSING"HOLE No. #";HN
2680 LOCATE 1,3:PRINTUSING"PAR  #";PA(HN)
2690 LOCATE 1,4:PRINTUSING"### METER";ME(HN):RETURN
2700 LOCATE 18,2:PRINTUSING"TOTAL  ###";TT(PL)
2710 LOCATE 18,3:PRINTUSING"SHOT   ###";SH(PL)
2720 LOCATE 1,5:PRINT"PLAYER ";PL$(PL);SPC(9);
2730 RETURN
2740 'SHOT
2750 FOR SW=IS TO 6
2760 GOSUB 6642
2770 NEXT:PLAY"S1M1900L8N40"
2780 VU=CL(CL,1):VV=CL(CL,2):HA=2
2790 FX=BX*100:FY=BY*100:SP=SP+1:ZB=BASE(10):Z=0:ZP=0
2800 VP=VPEEK(FX/100\8+(FY/100\8)*32+ZB)
2810 IF VP=&H94 AND (CL=1 OR CL>3) THEN VV=VV/10:VU=VU/10
2820 IF VP=&H93 AND (CL=1 OR CL=9) THEN VV=VV/3:VU=VU/3
2830 R1=RND(PL)*300:R2=RND(PL)*300:R3=RND(0)*2
2840 HX=(VV*CO*SP+R1)/10
2850 HY=(VV*SI*SP+R2)/10
2860 VU=VU-1:Z=Z+VU
2870 FX=FX+HX:FY=FY+HY
2880 IF FX>24000 OR FX<1600 OR FY>17600 OR FY<8000 THEN HA=1:GOTO 25615
2890 PUTSPRITE PL+1,(FX/100-4,FY/100-Z-8),15,0
2900 VP=VPEEK(FX/100\8+(FY/100\8)*32+ZB)
2910 IF Z<=0 THEN IF CL<>1 THEN PLAY"S1M1200L10N20":GOTO 61269 ELSE 61269
2920 IF Z>4 THEN 13970
2930 IF VP=&H97 THEN HX=-HX:HY=-HY:IF PLAY(0) THEN 13970 ELSE PLAY"S1M1200L10N20":GOTO 13970 ELSE 13970
2940 IF VP=&H94 THEN Z=0:VU=0
2950 IF VP=&H96 THEN Z=0:VU=0:HA=0
2960 IF Z<=0 AND ABS(VU)<=1 THEN 25615 ELSE VU=-VU/1.1:GOTO 13970
2970 IF CL<>1 THEN FX=FX/100:FY=FY/100:RETURN ELSE ZP=ZP+1:VU=1:IF ZP>SP+R3 THEN FX=FX/100:FY=FY/100:RETURN ELSE 13970
2980 'SET MAN AND BALL
2990 PUTSPRITE PL+1,(BX-4,BY-8),15,0
3000 SD=-(IX<BX)*7
3010 PUTSPRITE 0,(BX-4,BY-8),1,2+SW+SD
3020 RETURN
3030 'DRAW GREEN
3040 FOR L9=0 TO 2:PUTSPRITE L9,(0,209):NEXT
3050 FOR G1=10 TO 21
3060 LOCATE 1,G1:PRINT SPC(8);STRING$(12,CHR$(&H90));SPC(8);
3070 NEXT
3080 PUTSPRITE 4,(126,118),1,16
3090 FOR L9=0 TO 1
3100 UX(L9)=(UX(L9)-PX)*6+128:UY(L9)=(UY(L9)-PY)*6+120:NEXT
3110 IF MB=1 THEN PL=1:GOTO 19536
3120 IF (UX(0)-128)^2+(UY(0)-120)^2>(UX(1)-128)^2+(UY(1)-120)^2 AND HI(0)<>2 THEN PL=0 ELSE PL=1
3130 PUTSPRITE 5,(UX(0)-1,UY(0)-1),6,17:PUTSPRITE 6,(UX(1)-1,UY(1)-1),6,17
3140 BX=UX(PL):BY=UY(PL)
3150 IF MB=1 THEN PUTSPRITE 5+PL,(BX-1,BY-1),15,17 ELSE PUTSPRITE 5+PL,(BX-1,BY-1),15,17
3160 GOSUB 8408:PLAY"S1M1900L8N40"
3170 SP=IP/3+RND(PL)*2+1
3180 BX=BX+SP*CO/10:BY=BY+SP*SI/10
3190 SP=SP-1:PUTSPRITE PL+5,(BX-1,BY-1),15,17
3200 IF ABS(BX-128)=<2 AND ABS(BY-120)=<2 THEN BX=128:BY=120:PUTSPRITE 5+PL,(0,209):MS=3:GOSUB 18224:GOSUB 8337:GOSUB 39936:HI(PL)=2:TT(PL)=TT(PL)+SH(PL)-PA(HN):SC(PL,HN)=SH(PL):GOTO35596
3210 O=0
3220 IF BX<81 THEN BX=81:O=1
3230 IF BX>173 THEN BX=173:O=1
3240 IF BY<81 THEN BY=81:O=1
3250 IF BY>173 THEN BY=173:O=1
3260 IF O=1 THEN GOSUB 17135:GOTO 44301
3270 IF SP=0 THEN GOSUB 17135:GOTO 44301 ELSE PUTSPRITE 5+PL,(BX-1,BY-1),15,17:FOR Z=0 TO SP*4:NEXT:GOTO 61273
3280 IF MB=1 THEN 14992
3290 IF HI(0)=2 AND HI(1)=2 THEN 14992 ELSE GOSUB 17135:GOTO 44301
3300 UX(PL)=BX:UY(PL)=BY:RETURN
3310 'GAME END
3320 CLS
3330 IF MB=2 THEN 8261
3340 LOCATE 5,0:PRINT"*** SCORE  SHEET ***"
3350 LOCATE 4,1:PRINT"�X�W�W�W�R�W�W�W�W�W�R�W�W�W�R�W�W�W�W�W�Y"
3360 LOCATE 4,2:PRINT"�VNo.�VMETER�VPAR�VSCORE�V"
3370 FOR GT=0 TO 8
3380 LOCATE 4,3+GT*2:PRINT"�T�W�W�W�U�W�W�W�W�W�U�W�W�W�U�W�W�W�W�W�S"
3390 LOCATE 4,4+GT*2:PRINTUSING"�V # �V ### �V # �V ### �V";GT+1;ME(GT+1);PA(GT+1);SC(1,GT+1)
3400 NEXT
3410 LOCATE 4,21:PRINT"�Z�W�W�W�Q�W�W�W�W�W�Q�W�W�W�Q�W�W�W�W�W�["
3420 LOCATE 5,22:PRINTUSING"TOTAL     #### ";ABS(TT(1));:PL=1:GOSUB 17750
3430 LOCATE 4,23:PRINT"PRESS TRIGGER TO START";
3440 IF FNTT THEN CLS:GOTO 21562 ELSE 41274
3450 IF TT(PL)>0 THEN PRINT"OVER"; ELSE IF TT(PL)<0 THEN PRINT"UNDER";
3460 RETURN
3470 'WATER
3480 BX=FX:BY=FY:SH(PL)=SH(PL)+1:GOSUB 8992
3490 BX=BX-1
3500 PUTSPRITE PL+1,(BX-4,BY-8),15,0
3510 IF VPEEK(BX\8+(BY\8)*32+BASE(10))=&H96 THEN 61772 ELSE UX(PL)=BX:UY(PL)=BY:RETURN
3520 'READ FONT DATA
3530 RESTORE 4670
3540 FOR L=&H90 TO &H99
3550 READ P$,C$
3560 FOR LL=0 TO 7
3570 VPOKE PT+L*8+LL,VAL("&H"+MID$(P$,LL*2+1,2))
3580 VPOKE CT+L*8+LL,VAL("&H"+MID$(C$,LL*2+1,2))
3590 NEXT:NEXT
3600 SN=0:GOSUB 40422:SN=1:GOSUB 40422
3610 FOR L=0 TO 6
3620 SN=L+2:GOSUB 40422:SP$=""
3630 FOR LL=0 TO 7
3640 R$="&B00000000"
3650 Z$=BIN$(VAL("&H"+MID$(D$,LL*2+1,2))):R1=LEN(Z$)+2:R2=R1+1
3660 FOR R3=3 TO R1:MID$(R$,R3,1)=MID$(Z$,R2-R3,1):NEXT
3670 SP$=SP$+CHR$(VAL(R$))
3680 NEXT
3690 SPRITE$(9+L)=SP$
3700 NEXT
3710 SN=16:GOSUB 40422:SN=17:GOSUB 40422
3720 RETURN
3730 '
3740 READ D$
3750 SP$=""
3760 FOR SL=0 TO 7
3770 SP$=SP$+CHR$(VAL("&H"+MID$(D$,SL*2+1,2)))
3780 NEXT
3790 SPRITE$(SN)=SP$
3800 RETURN
3810 LOCATE 5,0:PRINT"*** SCORE  SHEET ***"
3820 LOCATE 1,1:PRINT"�X�W�W�W�R�W�W�W�W�W�R�W�W�W�R�W�W�W�W�W�R�W�W�W�W�W�Y"
3830 LOCATE 1,2:PRINTUSING"�VNo.�VMETER�VPAR�V&   &�V&   &�V";PL$(0);PL$(1)
3840 FOR GT=0 TO 8
3850 LOCATE 1,3+GT*2:PRINT"�T�W�W�W�U�W�W�W�W�W�U�W�W�W�U�W�W�W�W�W�U�W�W�W�W�W�S"
3860 LOCATE 1,4+GT*2:PRINTUSING"�V # �V ### �V # �V ### �V ### �V";GT+1;ME(GT+1);PA(GT+1);SC(0,GT+1);SC(1,GT+1)
3870 NEXT
3880 LOCATE 1,21:PRINT"�Z�W�W�W�Q�W�W�W�W�W�Q�W�W�W�Q�W�W�W�W�W�Q�W�W�W�W�W�["
3890 LOCATE 2,22:PRINTUSING"TOTAL         +###  +###";TT(0);TT(1):GOTO 18770
3900 PLAY"T120V15O4C20E20G20D20F20O5C20O4C20":RETURN
3910 PLAY"T120V15O2G20F20E20D20C10":RETURN
3920 PLAY"T120V15O2C20D10E20C20C20":RETURN
3930 PLAY"T120V15O3C20E20G20C20":RETURN
3940 'START
3950 CLS
3960 CLS:L=USR2(0)
3970 BY=4:BX=2:NM=0:FC=&HB5:GOSUB 55584
3980 BX=9:NM=1:FC=&H35:GOSUB 55584:BX=16:NM=2:FC=&H25:GOSUB 55584:BX=22:NM=3:FC=&HC5:GOSUB 55584:L=USR3(0)
3990 LOCATE 10,13:PRINT"G  A  M  E"
4000 LOCATE 8,16:PRINT"(C) 1983 ASCII"
4010 LOCATE 4,20:PRINT"PRESS TRIGGER TO START"
4020 IF NOT FNTT THEN 4030
4030 FOR L=0 TO 1800:NEXT:CLS
4040 LOCATE 6,6:PRINT"HOW MANY PLAYERS ?":LOCATE9,10:PRINT"> 1 PLAYER":LOCATE11,13:PRINT"2 PLAYERS"
4050 MB=1
4060 IF FNSS=1 THEN MB=1:LOCATE 9,13:PRINT" ":LOCATE 9,10:PRINT">"
4070 IF FNSS=5 THEN MB=2:LOCATE 9,10:PRINT" ":LOCATE 9,13:PRINT">"
4080 IF NOT FNTT THEN 6688
4090 CLS
4100 LOCATE 3,4:PRINT"INPUT YOUR NAME (MAX 8)":LOCATE13,5:PRINT"AND":LOCATE7,6:PRINT"PRESS TRIGGER"
4110 FOR Z=1 TO MB:PL$(2-Z)="":FOR L=0 TO 1000:NEXT
4120 X=0:Y=6+Z*3:LOCATE 6,Y:PRINTUSING"PLAYER #";Z
4130 I$=INKEY$:IF FNTT THEN 4591
4140 IF I$<=" " THEN 14080 ELSE 4591
4150 I$=INKEY$
4160 IF STRIG(0) THEN S(2-Z)=0:GOTO 55840
4170 IF STRIG(1) THEN S(2-Z)=1:GOTO 55840
4180 IF STRIG(2) THEN S(2-Z)=2:GOTO 55840
4190 IF I$="" THEN 55840
4200 IF ASC(I$)=8 OR ASC(I$)=29 THEN 14865
4210 IF I$>"~" OR I$<" " THEN BEEP:GOTO 55840
4220 X=X+1:IF X>8 THEN X=8:BEEP:GOTO 55840
4230 PL$(2-Z)=PL$(2-Z)+I$:LOCATE 14+X,Y:PRINT I$;:GOTO 55840
4240 '
4250 NEXT:IF MB=1 THEN IF PL$(1)="" THEN PL$(1)="1":RETURN ELSE RETURN
4260 SWAP PL$(0),PL$(1):SWAP S(0),S(1):IF PL$(0)="" THEN PL$(0)="1"
4270 IF PL$(1)="" THEN PL$(1)="2"
4280 RETURN
4290 X=X-1:IF X<0 THEN X=0:GOTO 55840
4300 LOCATE X+15,Y:PRINT" ";:
4310 PL$(2-Z)=LEFT$(PL$(2-Z),LEN(PL$(2-Z))-1):GOTO 55840
4320 'INIT FONT
4330 DIM FD$(3,6)
4340 RESTORE 4630
4350 FOR FX=0 TO 3
4360 FOR FY=0 TO 6
4370 READ FD$(FX,FY)
4380 NEXT:NEXT
4390 FOR BX=0 TO 3
4400 L=(&H9A+BX*5)*8:LT=PT+L:LU=LT+8:LV=LT+39:LW=LT+24:LX=LT+23
4410 FOR Z=0 TO 7
4420 VPOKE LT+Z,&HFF:NEXT
4430 Z0=&H80:Z4=1:Z1=Z0:Z2=1
4440 FOR Z=0 TO 7
4450 VPOKE LU+Z,Z1:VPOKE LV-Z,Z1
4460 Z0=Z0/2:Z1=Z1+Z0
4470 VPOKE LW+Z,Z2:VPOKE LX-Z,Z2
4480 Z4=Z4*2:Z2=Z2+Z4
4490 NEXT:NEXT
4500 RETURN
4510 'SET COLOR
4520 L9=CT+(&H9A+NM*5)*8
4530 FOR L8=0 TO 39
4540 VPOKE L9+L8,FC:NEXT:RETURN
4550 'OUT FONT
4560 GOSUB 6643
4570 FOR FY=0 TO 6
4580 FOR FX=0 TO 4
4590 LOCATE BX+FX,BY+FY
4600 C=VAL(MID$(FD$(NM,FY),FX+1,1))
4610 IF C=0 THEN PRINT" "; ELSE PRINT CHR$(&H99+5*NM+C);
4620 NEXT:NEXT:RETURN
4630 DATA 04120,45032,10000,10011,10001,32045,03150
4640 DATA 04120,45032,10001,10001,10001,32045,03150
4650 DATA 10000,10000,10000,10000,10000,10000,11110
4660 DATA 11111,10000,10000,11110,10000,10000,10000
4670 DATA AA55AA55AA55AA55,B3B3B3B3B3B3B3B3
4680 DATA 55AA55AA55AA55AA,C3C3C3C3C3C3C3C3
4690 DATA 0000000000000000,6A6A6A6A6A6A6A6A
4700 DATA 002222CC002222CC,2C2C2C2C2C2C2C2C
4710 DATA 0000000000000000,9E9E9E9E9E9E9E9E
4720 DATA 10181C1E10101018,6A6A6A6A1A1A1A1A
4730 DATA 0000669900006699,4545454545454545
4740 DATA 10387CFE7C101010,C3C3C3C3C3D3D3D3
4750 DATA 81423C24243C4281,e2e2e2e2e2e2e2e2
4760 DATA C0F0FCFFFCF0C000,1515151515151515
4770 DATA 0000000000001818
4780 DATA 3C4281999981423C
4790 DATA 9898701010282824
4800 DATA 181890F010282824
4810 DATA 1818103050A8A824
4820 DATA 1818103810383834
4830 DATA 18181018142A2948
4840 DATA 1818111F10282828
4850 DATA 1919121C10282828
4860 DATA 60F0F06000000000
4870 DATA 40E0400000000000
4880 'COURSE DATA
4890 DATA 4,320,180,103,20,104
4900 DATA 3333333333333333333333377333
4910 DATA 3333333333334433333000337733
4920 DATA 2311133333444433330050333733
4930 DATA 2311111173344443313000333733
4940 DATA 2311111111134431111333333733
4950 DATA 3331111111111111111133333333
4960 DATA 3333111111117111111344433333
4970 DATA 3333333111111111113334443333
4980 DATA 3377733333111113333344333333
4990 DATA 3333777333333333333333333333
5000 DATA 3333337777777333333333333333
5010 DATA 3333333333377773333333333333
5020 DATA 5,460,220,103,20,95
5030 DATA 2333333333773333333334443333
5040 DATA 2311133337333377733344330007
5050 DATA 2311111333336663773343330507
5060 DATA 3331111113333666673331130003
5070 DATA 3333111111133666671111111343
5080 DATA 3373311111116666311111113444
5090 DATA 3337331111111666111111113444
5100 DATA 3337733111111111111111113333
5110 DATA 3333773311111711111111333333
5120 DATA 3333337733311111111333333333
5130 DATA 3333333377331111133333333333
5140 DATA 3333333333333333333333333333
5150 DATA 3,210,100,111,20,132
5160 DATA 3333777733333333333333333333
5170 DATA 3337733333334443773333333333
5180 DATA 3377333444344444377333333333
5190 DATA 3333113440500344333773333333
5200 DATA 3333113440000344333333333333
5210 DATA 2311111333000334333773333333
5220 DATA 2311111134433344337733333333
5230 DATA 2311111133444443337773333333
5240 DATA 3333111113344337777333333333
5250 DATA 3333331111337773773333333333
5260 DATA 3333733337773333333333333333
5270 DATA 3333377773333333333333333333
5280 DATA 4,330,180,143,20,135
5290 DATA 3333377333333333333333333333
5300 DATA 3337733333113333333337773333
5310 DATA 3373331111111133333333337733
5320 DATA 3333111111111111133344333373
5330 DATA 3311111111111111113444433333
5340 DATA 2311111166661111111333443333
5350 DATA 2331113666666311113000333333
5360 DATA 2333333366666373113050333373
5370 DATA 3337733336666637733000333377
5380 DATA 3333773333666663774433433373
5390 DATA 3333333333366633333444433773
5400 DATA 3333333333333333333333333733
5410 DATA 5,400,188,87,20,143
5420 DATA 3333333336663333333305034333
5430 DATA 3333733366633311111300034437
5440 DATA 3337333366631111111110044437
5450 DATA 3373311666311111111111344373
5460 DATA 3333111666311111111111343373
5470 DATA 3331111366611113333333333333
5480 DATA 2311111366633773337773333333
5490 DATA 2311113666377333377333333333
5500 DATA 2311136663773333733333333733
5510 DATA 3333366637733333333333377333
5520 DATA 3333666373333333333337733333
5530 DATA 3336663333333333333333333333
5540 DATA 3,170,84,119,20,119
5550 DATA 3337777733333333333333333333
5560 DATA 3333333333333377333333333333
5570 DATA 3333111134333777333333333333
5580 DATA 2311116134433337733333333333
5590 DATA 2311166050444333773333333333
5600 DATA 2311166000443333377333333333
5610 DATA 3333166000443333337733333333
5620 DATA 3333366663433333337777333333
5630 DATA 3373336663333333777773333333
5640 DATA 3337733333333337777333333333
5650 DATA 3333777333333333333333333333
5660 DATA 3333337777773333333333333333
5670 DATA 5,450,228,87,20,167
5680 DATA 3333333333333333333337773050
5690 DATA 3333333333336666333373337000
5700 DATA 3333333333336666637733311114
5710 DATA 3333337333666666377331111144
5720 DATA 3333373336666663337111111144
5730 DATA 3333733333666633171111113333
5740 DATA 3337333333311111111111333333
5750 DATA 3337333111111111111113333773
5760 DATA 3333111111114411113333773333
5770 DATA 2311111111114443333777333333
5780 DATA 2311111133333443773333333333
5790 DATA 2331133333333337333333333333
5800 DATA 4,300,172,135,20,111
5810 DATA 3333333333333333333333333333
5820 DATA 3333333333377773333333333333
5830 DATA 2311113333733337773333333333
5840 DATA 2311111111333333333337733333
5850 DATA 2311111171111113344334373333
5860 DATA 3333311111111111440004437733
5870 DATA 3333333311111111440504443733
5880 DATA 3333373333111114440004433333
5890 DATA 3333337333333333444344333333
5900 DATA 3333333733333333333333773333
5910 DATA 3333333377733333337777333333
5920 DATA 3333333333333333333333333333
5930 DATA 4,380,204,111,20,135
5940 DATA 3333333377333333777666773433
5950 DATA 3333377733331111176667344443
5960 DATA 3337733331111111166671000443
5970 DATA 3333333111111113666311050343
5980 DATA 3333311111111366644311000333
5990 DATA 2311111111113666334431133333
6000 DATA 2311111111111366663444333333
6010 DATA 2311111111111111166644433333
6020 DATA 3333331111111111366633337733
6030 DATA 3333377333333333666333373333
6040 DATA 3333333773333336663333733333
6050 DATA 3333333337733366633333333333