Lab · Playground
Retro BASIC playground
Classic line-numbered BASIC, the way the 8-bit machines did it — PRINT, INPUT, GOTO, GOSUB, and a lunar lander to fly.
The language most of us started on. This is a small Microsoft-style BASIC interpreter written for
the site: line numbers (optional), PRINT with ;, ,, TAB and SPC, INPUT, IF…THEN…ELSE,
GOTO, GOSUB/RETURN, ON…GOTO, FOR…NEXT…STEP, WHILE…WEND, DIM, DATA/READ,
DEF FN, RND, and the usual numeric and string functions (LEFT$, MID$, INSTR, CHR$…).
When a program asks for INPUT, a box appears in the output. Stop breaks out of any loop —
the modern RUN/STOP key.
10 PRINT, the famous one-liner (press Stop to end it)
10 PRINT MID$("╱╲", INT(RND(1) * 2) + 1, 1);
20 GOTO 10
Loops, TAB, and a sine wave
10 FOR A = 0 TO 6.3 STEP 0.3
20 PRINT TAB(INT(20 + 18 * SIN(A))); "*"
30 NEXT A
40 PRINT "DONE"
Lunar lander — burn fuel each second to land softly
10 REM LUNAR LANDER: GRAVITY ADDS 5 M/S EACH SECOND, EACH UNIT OF FUEL REMOVES 0.5
20 H = 500: V = 50: F = 150: T = 0
30 PRINT "TIME"; TAB(7); "HEIGHT"; TAB(16); "SPEED"; TAB(24); "FUEL"
40 PRINT T; TAB(7); INT(H); TAB(16); INT(V * 10) / 10; TAB(24); F
50 IF F <= 0 THEN B = 0: GOTO 80
60 INPUT "BURN (0-30)"; B
70 IF B < 0 OR B > 30 THEN PRINT "0 TO 30, PLEASE": GOTO 60
75 IF B > F THEN B = F
80 F = F - B: T = T + 1
90 V1 = V + 5 - B * 0.5
100 H = H - (V + V1) / 2: V = V1
110 IF H > 0 THEN 40
120 PRINT: PRINT "TOUCHDOWN AT"; INT(V * 10) / 10; "M/S AFTER"; T; "SECONDS"
130 IF V <= 5 THEN PRINT "PERFECT - LANDED SAFELY": END
140 IF V <= 15 THEN PRINT "LANDED, BUT THE LEGS ARE BENT": END
150 PRINT "CRASHED - YOU MADE A NEW CRATER"; INT(V * 0.5); "METRES DEEP"
Guess the number
10 RANDOMIZE TIMER * 1000
20 N = INT(RND(1) * 100) + 1: G = 0
30 PRINT "I'M THINKING OF A NUMBER FROM 1 TO 100."
40 INPUT "YOUR GUESS"; X
50 G = G + 1
60 IF X < N THEN PRINT "HIGHER": GOTO 40
70 IF X > N THEN PRINT "LOWER": GOTO 40
80 PRINT "YES! YOU GOT IT IN"; G; "GUESSES."
DATA, READ, and GOSUB: a bar chart
10 PRINT "LANGUAGE", "STARS"
20 FOR I = 1 TO 5
30 READ L$, S
40 GOSUB 100
50 NEXT I
60 END
100 PRINT L$, STRING$(S, "#"); S
110 RETURN
200 DATA BASIC, 9, PASCAL, 5, C, 8, FORTH, 3, LOGO, 4