Simulates instrument flying of a light aircraft from a cockpit panel with an artificial horizon, ADF needle, VOR/ILS course and glideslope indicator, DME, fuel gauge, flap and gear status and a wind readout, plus heading, altitude, vertical speed, RPM, airspeed and time across the bottom. Seven modes are offered: final approach, inbound NDB, inbound VOR, take-off, random position, autopilot and autolanding. The aircraft can stall, exceed its never-exceed, gear or flap speeds, run out of fuel, hit one of two mountain areas or land off the airfield, and the landing check reports faults such as an undershoot, overshoot, heavy landing or gear-up landing. After each flight the program gives a navigation and skill score, then plots the ground track and the approach profile.
The cassette label reads “MINDWARE – PILOT, by M. Male – A QUICKLOAD PROGRAM – (c) Mindware 1982 16K”, and the title line reads “PILOT-(C)M.MALE 1982”. The tape starts with a short loader, saved as AUTOBOOT, that shows a notice that the program is being loaded “USING QUICKLOAD (TM), A PROPRIETARY PRODUCT OF MINDWARE, INC.”, “PAT PENDING”, and then calls machine code in its REM line to load the main program at higher speed.
Program Analysis
Program Structure
- Line 5: a REM holding the panel artwork and the machine code that draws and updates the display.
- 10–211: initial state. Wind direction and speed are random (
W(1),W(2)); the arrayG(100,3)holds the beacon positions (NDB atG(1), VOR atG(2), runway atG(3)) and then the aircraft’s track, one row per step. - 215–311: mode menu and a
GOTO 230+10*VAL Q$jump to a block that sets the start position, heading, altitude, speed and fuel for that mode. - 330–780: the flight loop: read keys, redraw the horizon with
PLOT/UNPLOT, compute airspeed, climb rate, heading, position (including wind drift) and fuel use. - 833–1115: update the readouts, the ADF needle, the course deviation bar and, after ILS is selected, the glideslope bar.
- 1120–1390: warnings, crash and landing checks and the score deductions for each fault.
- 1855–2130: score screen, ground-track plot and approach-profile plot.
- 2200–2790: the autopilot and autolanding logic, which adjusts heading, bank, pitch, power, flaps and gear and prints what it is doing; pressing T hands control back to the player.
Controls
From the listing: 5 and 8 change the bank angle, 6 and 7 pitch, 4 and 9 nudge the heading, J and K lower and raise RPM between 800 and 2500, F toggles flaps, G toggles the gear, I switches the course indicator to the ILS, and 0 halves the time step.
Notable Techniques
- If no key is pressed at the menu, the routine at line 3000 times out using the high byte of the
FRAMEScounter (16437) and the program starts mode 7, autolanding. After an autolanding it restarts withGOTO 0, so it runs as a self-playing demonstration. - Bearings to the beacons are computed with
ATNplus quadrant corrections, and the needles are moved by unplotting the old position and plotting the new one only when the value has changed. - Wind is applied as a separate drift vector in the position update (lines 700–705).
- Near the runway, line 1360 computes two screen columns from the lateral offset and distance and POKEs them into the machine code at 16932–16933 before calling 16934, apparently to draw the runway as it comes into view.
- Many flags are folded into arithmetic, for example
LET R=R+(INKEY$="K" AND R<2500)*100-(INKEY$="J" AND R>800)*100.
Potential Issues
- The track index
Egrows by 0.5 every step andGis dimensioned to 100 rows, so a very long flight will stop with a subscript error. - Line 1345 adds
(V>=-200)*50+(V<-200)*50, which is always 50, so the heavy-landing test has no effect on the score. - Several jumps target lines that do not exist (1331, 2215, 2241, 2250); the ZX81 continues at the next line, which gives the intended result in each case.
Source Code
5 REM ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄███[A][/][H]███[A][D][F]██[V][O][R][3][6][0][R]██[D][M][E]███████▀▀▀▀▀▀▜▀▀▜▀▀▜▀▀▀▛▀▀▜████████████ ▐ ▐▘ ▐██[F][U][E][L]██████ ▐ ▐▘ ▐████████████▄▖▄▄▖▄▟▘ ▝ ▜▌ ▟██[F][L][A][P]█UP███ ▐ ▝ ▐▘ ▐████████████ ▐ ▐ ▐▘ ▐██[G][E][A][R]█UP███ ▐██████▘ ▖ ▐██████████████████████████████████[W][N][D]███████[H][D][G]█[A][L][T]██[V][S][I]██[R][P][M]███[A][S][I]██[T][I][M][E]██5£RND#7#5E▘;##5▙RND▘4 GOSUB [K]<# RETURN LLIST 4 PRINT # RETURNINKEY$ 4 LIST TAN A #ACS 9ACS 9ACS 9ACS 9ACS =ACS 9ACS =#- ;#; GOSUB #£RND;)▘ ;#TAN ▌.:▖▞3Y LN ▝PI( CLSLN ▝PI£# RETURN▒4 INPUT 58PI#7#:▖VAL Y[▒]STR$ LN ▝PISGN ▖#[U]4 POKE AT # RETURN▛COS £# RETURN C▘▌# RETURN3C▘=/ TO :~~Y[▒]▞▀LN ▝PI( CLS£# RETURN$4 LET :"▞▛Y[▒]LN ▝PI▖# RETURN$4 PRINT £# RETURN:4 GOSUB :▖▞▌Y[V]LN ▝PI:(▞=Y[N]LN ▝PI▞~~Y[R]LN ▝PI▖Y[W]LN ▝PITAN -0:+▞ #STR$ LN ▝PISGN #CHR$ ▝##LEN ▀#=# RETURNA4 GOTO TAN :=▞3Y█LN ▝PI( CLSLN ▝PI£# RETURN-4 INPUT TAN ▞~~5£RND#7#5CHR$ ▝;, RETURN#C~~ PAUSE LET PICHR$ █/▝LEN █><#[X]4 GOTO #[W]4 CONT (>=TAN QQQQQQQQQI
10 LET B=0
15 LET M=180
20 LET P=B
25 LET N=-6
30 LET R=2000
35 LET O=N
40 LET H=270
45 LET V=B
50 LET T=B
55 LET S=70
60 LET GS=1
61 LET FS=GS
65 LET K=120
70 LET A$="UP"
80 LET B$=A$
85 LET TA=10
90 LET C=B
93 LET EA=5
95 LET NT=B
96 LET NV=B
97 LET NA=B
100 LET D=B
105 LET E=EA
110 LET F=360
115 LET V$="V"
120 DIM W(2)
125 RAND
130 LET W(1)=RND*PI+PI
140 LET W(2)=INT (RND*20)
145 LET AA=1600+(-(W(1)<3/2*PI)+(W(1)>3/2*PI))*100+(RND>.5)*50
150 LET A=AA
155 DIM G(100,3)
160 LET G(3,1)=20
170 LET G(3,2)=10
180 LET G(2,1)=10
190 LET G(2,2)=35
200 LET G(1,1)=40
210 LET G(1,2)=10
211 CLS
215 LET C$="1 FINAL APP 2 INBOUND NDB3 INBOUND VOR4 TAKE OFF 5 RANDOM POSN6 AUTOPILOT 7 AUTOLANDING"
216 PRINT TAB 4;"█[P][I][L][O][T][-][(][C][)][M][.][M][A][L][E]█[1][9][8][2]█"
217 PRINT
218 PRINT " SELECT MODE-";
219 FOR Z=1 TO 79 STEP 13
220 PRINT TAB 15;C$(Z TO Z+12)
221 NEXT Z
222 GOSUB 3000
225 LET Q$=INKEY$
226 IF Q$="" THEN LET Q$="7"
228 IF ABS (CODE Q$-32)>3 THEN GOTO 222
231 CLS
232 LET Z=13*(CODE Q$-29)+1
233 PRINT AT 0,4;"PILOT-MODE ";C$(Z TO Z+12)
235 GOTO 230+10*VAL Q$
240 LET G(4,1)=52
241 LET G(4,2)=6+RND*8
242 LET W(2)=INT (W(2)/2)
244 LET TA=5
247 LET U=53
249 GOTO 311
250 LET G(4,1)=30
251 LET G(4,2)=20+RND*8
252 LET H=130
257 LET U=80
259 GOTO 311
260 LET G(4,1)=8+RND*4
261 LET G(4,2)=15
262 LET U=140
263 LET H=360
264 LET A=(AA-1000+RND*2000)
265 PRINT "MAINTAIN ";
269 GOTO 310
270 LET G(4,1)=20
271 LET G(4,2)=10
272 LET A=0
273 LET R=2300
274 LET K=A
275 LET A$="DN"
276 LET U=180
277 PRINT "CLIMB TO ";
278 LET GS=-1
279 GOTO 310
280 LET G(4,1)=28+RND*30
281 LET G(4,2)=RND*40
282 LET H=360
283 LET U=180
284 PRINT "MAINTAIN ";
285 LET W(2)=W(2)+20
286 LET F=270
287 LET NT=50
289 GOTO 310
290 LET G(4,1)=52
291 LET G(4,2)=7.5+(RND>.5)*5
292 LET TA=5
293 LET W(2)=0
294 LET U=60
295 LET AA=1200
296 LET A=AA
299 GOTO 311
300 LET G(4,1)=26
301 LET G(4,2)=10
302 LET TA=5
303 LET W(2)=0
304 LET A=395
305 LET R=1600
306 LET V=-400
307 LET K=70
308 LET U=15
309 GOTO 311
310 PRINT AA;"FT CROSS VOR LEVEL"
311 RAND USR 16866
315 IF VAL Q$<3 OR VAL Q$>5 THEN GOSUB 790
320 PRINT AT 18,26;INT (W(1)*180/PI);"/";W(2)
325 IF Q$="5" THEN PRINT AT 10,17;"[2][7][0]"
330 PRINT AT 10,0;"I"
332 LET B=B+(INKEY$ ="5" AND B<4)*2-(INKEY$ ="8" AND B>-4)*2
335 LET H=H+(INKEY$ ="9")*5-(INKEY$ ="4")*5
350 LET P=P+(INKEY$ ="7" AND P<6)-(INKEY$ ="6" AND P>-6)
365 IF INKEY$ ="0" THEN LET TA=5
370 IF C=P AND D=B THEN GOTO 510
380 LET Y=B
390 LET X=D
400 FOR Z=1 TO 5
410 IF ABS (X-C)<7 THEN UNPLOT 5+Z,14-X+C
430 IF ABS (Y-P)<7 THEN PLOT 5+Z,14-Y+P
450 LET Y=Y-B/2
460 LET X=X-D/2
470 NEXT Z
480 LET C=P
490 LET D=B
510 IF INKEY$ <>"F" THEN GOTO 550
520 LET FS=-FS
530 LET B$="UP"
540 IF FS<0 THEN LET B$="DN"
550 IF INKEY$ <>"G" THEN GOTO 600
560 LET GS=-GS
570 LET A$="UP"
580 IF GS<0 THEN LET A$="DN"
600 LET R=R+(INKEY$ ="K" AND R<2500)*100-(INKEY$ ="J" AND R>800)*100
620 IF INKEY$ ="I" THEN GOSUB 790
625 PRINT AT 10,0;"█"
627 IF P>0 AND K<S THEN GOTO 650
630 LET S=65+FS*5+2.5*ABS B
640 LET I=5-2.5*(FS+GS)
645 LET Z=((R-800)/10-P*7-I)
646 IF Z>K+10 THEN LET Z=K+10
647 IF Z<K-10 THEN LET Z=K-10
648 LET K=Z
650 LET Z=(R-2000+P*70)*(K>=S)
660 LET H=H-TA*B*1.5
662 LET H=H+((H<=0)-(H>360))*360
670 IF Z>V+100 THEN LET Z=V+100
680 IF Z<V-100 THEN LET Z=V-100
685 LET V=Z
690 LET A=INT (A+V/60*TA)
695 IF A<0 THEN LET A=0
700 LET G(E,1)=G(E-1,1)+SIN (H/180*PI)*K/720*TA-SIN W(1)*W(2)/720*TA
705 LET G(E,2)=G(E-1,2)+COS (H/180*PI)*K/720*TA-COS W(1)*W(2)/720*TA
710 LET T=T+TA
715 IF T/100-INT (T/100)>.55 THEN LET T=T+40
720 LET G(E,3)=A/100
731 LET X=100-ABS (G(E,1)-10)*50-ABS (G(E,2)-35)*50
732 IF X>NV THEN LET NV=X
733 IF H>210 THEN GOTO 736
734 LET X=100-ABS (G(E,1)-40)*50-ABS (G(E,2)-10)*50
735 IF X>NA THEN LET NA=X
736 IF TA=10 THEN LET NT=NT+1
737 IF G(E,1)>12 AND G(E,2)>15 THEN LET NT=NT-ABS (A-AA)/10
740 LET X=(G(2,1)-G(E,1))*.25
745 LET Y=(G(2,2)-G(E,2))*.25
750 LET L=INT (SQR (X*X+Y*Y)*100)/100
760 LET U=U-R*TA/10000
763 IF U>0 THEN GOTO 780
765 LET U=0
770 LET R=800
775 PRINT AT 2,0;"[O][U][T]█[O][F]█[F][U][E][L]"
780 GOTO 833
790 LET G(2,1)=G(3,1)
800 LET G(2,2)=G(3,2)
810 PRINT AT 10,13;"██[I][L][S]███"
820 LET F=270
830 LET V$="I"
832 RETURN
833 PRINT AT 10,27;"█████";AT 10,27;L
834 IF V$="I" AND G(E,1)<20 THEN PRINT AT 10,27;"-"
835 PRINT AT 12,28;"███";AT 12,28;INT U;AT 14,28;B$;AT 16,28;A$
836 RAND USR 17092
837 PRINT AT 20,1;H;TAB 5;A;TAB 10;V;TAB 15;R;TAB 21;K;TAB 26;T/100
840 LET X=G(1,1)-INT (G(E,1)*10)/10+.01
850 LET Y=G(1,2)-INT (G(E,2)*10)/10+.01
860 LET Z=(ATN (X/Y)+(X<0)*2*PI+(Y<0)*PI)*180/PI
870 LET Z=Z-H+360*(Z-H<=0)
880 IF INT (Z/16)=INT (M/16) THEN GOTO 930
890 FOR Y=0 TO 4 STEP 2
900 UNPLOT 21+SIN (M/180*PI)*Y,15+COS (M/180*PI)*Y
910 PLOT 21+SIN (Z/180*PI)*Y,15+COS (Z/180*PI)*Y
920 NEXT Y
925 LET M=Z
930 LET X=G(E,1)-G(2,1)
935 LET X=X+(X=0)*.01
940 LET Y=G(E,2)-G(2,2)
945 LET Y=Y+(Y=0)*.01
950 LET Z=(ATN (X/Y)+(X<0)*2*PI+(Y<0)*PI)*180/PI
960 LET Z=INT (Z-F+180+.5)-(Z>360)*360
970 IF Z>12 THEN LET Z=12
975 IF Z<-12 THEN LET Z=-12
980 IF Z/2=N THEN GOTO 1040
990 FOR X=9 TO 19 STEP 2
1000 UNPLOT 34+N,X
1010 PLOT 34+Z/2,X
1020 NEXT X
1030 LET N=Z/2
1040 IF V$="V" OR L<.1 THEN GOTO 1120
1050 LET Z=INT (A/L/50+.5)
1060 IF Z>10 THEN LET Z=10
1070 IF Z<1 THEN LET Z=1
1080 IF O=Z THEN GOTO 1120
1090 FOR X=29 TO 39 STEP 2
1095 UNPLOT X,20-O
1100 PLOT X,20-Z
1110 NEXT X
1115 LET O=Z
1120 IF G(E,1)>40 AND G(E,2)<15 AND H<300 THEN PRINT AT 1,0;" COMMENCE DESCENT WHEN READY "
1125 PRINT AT 2,0;
1130 IF G(E,1)<2 OR G(E,1)>8 OR G(E,2)<17 OR G(E,2)>23 THEN GOTO 1138
1136 GOTO 1140
1138 IF G(E,1)<14 OR G(E,1)>28 OR G(E,2)<15 OR G(E,2)>21 THEN GOTO 1144
1140 PRINT "HIT MOUNTAIN"
1143 GOTO 1760
1144 IF A<>0 OR K>=70 OR A$="DN" THEN GOTO 1150
1145 PRINT "GEAR RETRACTED"
1147 GOTO 1750
1150 IF A>10 THEN GOTO 1220
1160 IF V=0 AND A=0 THEN GOTO 1220
1161 IF A>0 AND K>60 THEN GOTO 1220
1164 IF G(E,1)>22 OR G(E,1)<17 OR G(E,2)>12 OR G(E,2)<8 THEN GOTO 1380
1170 IF G(E,2)<9.8 OR G(E,2)>10.2 THEN PRINT ;"MISSED RUNWAY",
1180 IF G(E,1)>20 THEN PRINT ;"UNDERSHOT R/WAY",
1190 IF V<-300 THEN PRINT ;"CRASH LANDING",
1195 IF B<>0 THEN PRINT ;"WINGTIP GROUNDED",
1200 IF G(E,1)<18.5 THEN PRINT ;"OVERSHOT R/WAY",
1203 IF K>60 THEN PRINT "TOO FAST",
1205 IF A$="UP" THEN PRINT ;"GEAR UP LANDING"
1206 LET NT=NT-(G(E,1)>20)*50-(G(E,1)<18.5)*50-(G(E,2)<9.8 OR G(E,2)>10.2)*100
1207 LET NT=NT-(V<-300)*100-(B<>0)*50-(A$="UP")*100
1210 IF K<=60 AND G(E,1)<=20 AND G(E,1)>=18.5 AND G(E,2)<=10.2 AND G(E,2)>=9.8 AND V>=-300 AND B=0 AND A$="DN" THEN GOTO 1330
1215 GOTO 1850
1220 IF K>=S OR A=0 THEN GOTO 1250
1230 PRINT "STALLED FROM ";INT A;" FT "
1235 LET NT=NT-100*(A>50)
1240 GOTO 1780
1250 IF K<=145 THEN GOTO 1270
1260 PRINT "VNE EXCEEDED-CRASH"
1265 GOTO 1760
1270 IF A$="UP" OR K<=90 THEN GOTO 1290
1280 PRINT "GEAR LIMIT EXCEEDED-CRASH"
1285 GOTO 1760
1290 IF B$="UP" OR K<=85 THEN GOTO 1310
1300 PRINT "FLAP LIMIT EXCEEDED-CRASH "
1305 GOTO 1760
1310 IF G(E,2)<12 AND ABS (G(E,1)-22)<2 THEN GOSUB 1360
1312 IF G(E,1)<20 AND G(E,2)>14 THEN LET EA=E
1313 LET G(E-1,2)=G(E,2)
1314 LET G(E-1,1)=G(E,1)
1315 LET E=E+.5
1317 IF VAL Q$>5 THEN GOTO 2200
1320 GOTO 330
1330 LET Z=6
1335 PRINT AT 6,9;"LANDED SAFELY"
1340 IF V<-200 THEN PRINT TAB 8;"HEAVY LANDING"
1342 PRINT AT 6,9;"[L][A][N][D][E][D]█[S][A][F][E][L][Y]"
1343 LET Z=Z-1
1344 IF Z>0 THEN GOTO 1331
1345 LET NT=NT+(V>=-200)*50+(V<-200)*50+(G(E,1)-18.5)*50+50-ABS (G(E,2)-10)*50
1350 GOTO 1855
1360 LET Z=30-INT ((G(E,2)-9.8)*75)
1361 LET X=2+INT (10-10*L)
1362 LET Y=Z-X
1363 IF Y>31 THEN GOTO 1371
1364 IF Y<0 THEN LET Y=0
1365 POKE 16932,Y
1366 LET Y=Z+X
1367 IF Y<0 THEN GOTO 1371
1368 IF Y>31 THEN LET Y=31
1369 POKE 16933,Y
1370 RAND USR 16934
1371 RETURN
1380 PRINT "CRASH-OFF AIRFIELD "
1390 GOTO 1206
1750 LET NT=NT-50
1760 LET NT=NT-50
1770 LET NT=NT-50
1780 LET NT=NT-50
1850 RAND USR 17113
1855 PRINT AT 8,2;"PRESS N/L FOR SCORE AND PLOT"
1856 IF Q$="7" THEN GOTO 0
1860 GOSUB 3000
1865 CLS
1866 PRINT "NAV=";INT (NA+NV);"+SKILL=";INT (NT+U/4);" TOTAL=";INT (NT+U/4)+INT (NV+NA)
1900 RAND USR 16995
1910 FOR Z=4 TO E-2 STEP 2
1920 IF G(Z,1)>0 AND G(Z,1)<64 AND G(Z,2)>0 AND G(Z,2)<42 THEN PLOT G(Z,1),G(Z,2)
1930 NEXT Z
1940 RAND USR 16995
2010 PRINT AT 21,0;"PRESS N/L FOR APP PROFILE"
2020 GOSUB 3000
2030 CLS
2060 RAND USR 17065
2065 FOR Z=EA TO E STEP 2
2070 PLOT (G(Z,1)-20)*1.5,G(Z,3)/10*14.6
2080 NEXT Z
2090 PRINT AT 0,0;"PRESS S TO STOP,ANY KEY TO GO "
2100 GOSUB 3000
2110 IF INKEY$ ="S" THEN STOP
2120 CLS
2130 GOTO 0
2200 PRINT AT 1,0;" "
2201 PRINT AT 1,0;
2202 IF INKEY$ ="T" THEN GOTO 2600
2203 IF ABS (H-270)<=5 THEN LET H=270
2204 IF K<85 AND FS>0 THEN GOTO 2730
2205 IF K<91 AND GS>0 THEN GOTO 2700
2211 IF L<.9 THEN GOTO 2300
2212 IF O<6 THEN GOTO 2330
2213 IF O>=6 THEN GOTO 2380
2230 IF ABS N<=1 AND ABS (H-270)<=5 AND B=0 THEN GOTO 2300
2235 LET B=(N<0 AND H>260)*2-(N>0 AND H<280)*2
2238 IF B<>0 THEN GOTO 2241
2240 LET B=(N=0 AND H>275)*2-(N=0 AND H<265)*2
2245 IF B<>0 THEN GOTO 2760
2290 GOTO 370
2300 LET H=270+(N>0)*5-(N<0)*5
2305 IF L<.9 THEN GOTO 2500
2306 IF H=270 THEN GOTO 2250
2307 PRINT "[A][D][J][U][S][T]█[H][D][G]█[T][O]█[S][T][A][Y]█[O][N]█[C][E][N][T][R][E][L][I][N][E]"
2310 GOTO 370
2330 IF A=AA THEN GOTO 2215
2340 LET Z=(K<70)
2350 LET R=R+100*(Z=1)
2360 LET P=P+(Z=0)
2365 PRINT "█[A][D][J][U][S][T][S]█[P][O][W][E][R]█[O][R]█[P][I][T][C][H]█[T][O]█[K][E][E][P]██[O][N]█[R][E][C][O][M][M][E][N][D][E][D]█[G][L][I][D][E]█[S][L][O][P][E]█████"
2370 GOTO 370
2380 LET Z=(K>75)
2385 IF V<-500 THEN GOTO 2215
2390 LET R=R-100*(Z=1)
2400 LET P=P-(Z=0)
2410 GOTO 2365
2500 IF L<.5 THEN LET H=270
2505 PRINT "█[A][D][J][U][S][T][S]█[P][O][W][E][R][,][P][I][T][C][H]█[A][N][D]█[H][D][G]█[T][O]██[S][T][A][L][L]█[O][N][T][O]█[R][U][N][W][A][Y]█[F][R][O][M]█[<][=][1][0][F][T]██"
2510 LET R=1500+(A<180)*100+(A<55)*100
2520 LET P=(A<80)+(A<31)+(A<17)
2530 GOTO 370
2600 PRINT AT 1,0;"PLAYER HAS CONTROL"
2610 LET Q$="1"
2620 GOTO 330
2700 LET A$="DN"
2705 LET GS=-1
2710 PRINT "[G][E][A][R]█[D][O][W][N]"
2720 GOTO 370
2730 LET B$="DN"
2735 LET FS=-1
2740 PRINT "[F][L][A][P]█[D][O][W][N]"
2750 GOTO 370
2760 PRINT "[T][U][R][N][I][N][G]█";
2770 IF N<>0 THEN PRINT "[O][N][T][O]█[C][L][O][S][I][N][G]█[H][E][A][D][I][N][G]"
2780 IF N=0 THEN PRINT "[O][N][T][O]█[T][H][E]█[C][E][N][T][R][E][L][I][N][E]"
2790 GOTO 370
3000 LET X=PEEK 16437-8
3005 IF X<128 THEN LET X=128
3010 IF INKEY$ ="" AND PEEK 16437>X THEN GOTO 3010
3020 RETURN
4000 SAVE "PILO[T]"
4005 SLOW
4010 RUNNote: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


