Terminal-BASIC Wiki
BASIC-like language interpreter for embedded systems
Brought to you by:
starling13
Actual list of working tests from "NBS Minimal BASIC Test Programs - Version 2" with sources,
suitable to type in or load from SD card available at https://cloud.mail.ru/public/45SG/gGc2kFpBk
10 PRINT "FUNCTION EXTREMUMS FINDING" 20 REM FUNCTION F(X) IS COMPUTED AT LINE 3000 30 REM FIRST DERIVATIVE F'(X) IS COMPUTED AT LINE 1000 40 REM SECOND DERIVATIVE F''(X) IS COMPUTED AT LINE 2000 50 PRINT "PRECISION:":INPUT E 60 PRINT "INITIAL VALUE:":INPUT Z 70 PRINT "":PRINT "SEQUATIONAL APPROXYMATIONS":PRINT "X","Z" 80 LET X=Z 90 GOSUB 1000:GOSUB 2000 100 LET Z=X-F/D 110 PRINT X,Z 120 IF ABS(Z-X)>E GOTO 80 130 PRINT " " 140 LET X=Z:GOSUB 1000:GOSUB 2000:GOSUB 3000 150 IF D>0 THEN PRINT "MINIMUM:":GOTO 190 160 IF D<0 THEN PRINT "MAXIMUM:":GOTO 190 190 PRINT FF,"AT",X 200 END 1000 LET F=X-COS(X) 1010 RETURN 2000 LET D=1+SIN(X) 2010 RETURN 3000 LET FF=X^2/2-SIN(X) 3010 RETURN
20 PRINT "FIBBONACCI SEARCH" : PRINT "" 30 REM PROGRAM TO SEARCH FOR INTERVAL(A,B) 40 REM CONTAINING MINIMUM POINT 50 REM OF UNIMODAL FUNCTION F(X) THROUGH 60 REM N COMPUTATION OF THE F(X) 100 DIM F (40) 110 PRINT "INPUT N" : INPUT N 120 F (0) = 0 : F (1) = 1 130 FOR I = 2 TO N 140 F (I) = F (I - 1) + F (I - 2) 150 NEXT I 160 PRINT "INPUT EPSILON" : INPUT E 200 PRINT "INPUT (A,B) INTERVAL" 210 INPUT A, B 250 X1 = A : X2 = A + ((B - A) * F(N - 1) + E * (-1)^N)/F(N) : X3 = B 260 X = X2 : GOSUB 1000 : F2 = Z 270 PRINT "CURRENT INTERVAL" 280 K = 1 : PRINT X1 , X3 290 X4 = X1 - X2 + X3 300 X = X4 : GOSUB 1000 : F4 = Z 310 IF F4 > F2 THEN GOTO 400 320 IF X2 < X4 THEN GOTO 360 330 X3 = X2 : X2 = X4 : F2 = F4 : PRINT X1 , X3 340 GOTO 500 360 X1 = X2 : X2 = X4 : F2 = F4 : PRINT X1 , X3 370 GOTO 500 400 IF X2 < X4 THEN GOTO 460 420 X1 = X4 : PRINT X1 , X3 430 GOTO 500 460 X3 = X4 : PRINT X1 , X3 500 K = K + 1 510 IF K <= N THEN GOTO 290 600 PRINT "FINAL INTERVAL" : PRINT X1, X3 610 PRINT "FUNCTION VALUE IS", F2 650 END 1000 Z = X^4 - 14*X^3 + 60*X^2 - 70*X 1010 RETURN
10 REM TETRIS MAIN PROGRAM, WRITTEN BY ANDREY SCVORTSOV, 2017 12 REM SOURCE IS IN PUBLIC DOMAIN 15 RANDOMIZE 20 SCREEN 1 25 CLS 30 W% = 10 35 H% = 20 40 DIM FIG@(6,3,3,3) 45 DIM SCR@(H%, W%+1) 50 FOR I%=0 TO H%-1 55 SCR@(I%, 0) = TRUE 60 SCR@(I%, W%+1) = TRUE 65 NEXT I% 70 FOR I%=1 TO W% 75 SCR@(H%, I%) = TRUE 80 NEXT I% 85 REM BOX 90 FIG@(0,0,1,1) = TRUE : FIG@(0,0,1,2) = TRUE 91 FIG@(0,0,2,1) = TRUE : FIG@(0,0,2,2) = TRUE 92 FIG@(0,1,1,1) = TRUE : FIG@(0,1,1,2) = TRUE 93 FIG@(0,1,2,1) = TRUE : FIG@(0,1,2,2) = TRUE 94 FIG@(0,2,1,1) = TRUE : FIG@(0,2,1,2) = TRUE 95 FIG@(0,2,2,1) = TRUE : FIG@(0,2,2,2) = TRUE 96 FIG@(0,3,1,1) = TRUE : FIG@(0,3,1,2) = TRUE 97 FIG@(0,3,2,1) = TRUE : FIG@(0,3,2,2) = TRUE 98 REM STICK 99 FIG@(1,0,2,0) = TRUE : FIG@(1,0,2,1) = TRUE 100 FIG@(1,0,2,2) = TRUE : FIG@(1,0,2,3) = TRUE 101 FIG@(1,1,0,1) = TRUE : FIG@(1,1,1,1) = TRUE 102 FIG@(1,1,2,1) = TRUE : FIG@(1,1,3,1) = TRUE 103 FIG@(1,2,2,0) = TRUE : FIG@(1,2,2,1) = TRUE 104 FIG@(1,2,2,2) = TRUE : FIG@(1,2,2,3) = TRUE 105 FIG@(1,3,0,1) = TRUE : FIG@(1,3,1,1) = TRUE 106 FIG@(1,3,2,1) = TRUE : FIG@(1,3,3,1) = TRUE 107 REM ZORB 108 FIG@(2,0,1,1) = TRUE : FIG@(2,0,2,0) = TRUE 109 FIG@(2,0,2,1) = TRUE : FIG@(2,0,2,2) = TRUE 110 FIG@(2,1,0,1) = TRUE : FIG@(2,1,1,1) = TRUE 111 FIG@(2,1,2,1) = TRUE : FIG@(2,1,1,2) = TRUE 112 FIG@(2,2,2,1) = TRUE : FIG@(2,2,1,0) = TRUE 113 FIG@(2,2,1,1) = TRUE : FIG@(2,2,1,2) = TRUE 114 FIG@(2,3,0,1) = TRUE : FIG@(2,3,1,1) = TRUE 115 FIG@(2,3,2,1) = TRUE : FIG@(2,3,1,0) = TRUE 116 REM F 117 FIG@(3,0,0,1) = TRUE : FIG@(3,0,1,1) = TRUE 118 FIG@(3,0,2,1) = TRUE : FIG@(3,0,0,2) = TRUE 119 FIG@(3,1,1,0) = TRUE : FIG@(3,1,1,1) = TRUE 120 FIG@(3,1,1,2) = TRUE : FIG@(3,1,2,2) = TRUE 121 FIG@(3,2,0,2) = TRUE : FIG@(3,2,1,2) = TRUE 122 FIG@(3,2,2,2) = TRUE : FIG@(3,2,2,1) = TRUE 123 FIG@(3,3,0,1) = TRUE : FIG@(3,3,1,1) = TRUE 124 FIG@(3,3,1,2) = TRUE : FIG@(3,3,1,3) = TRUE 125 REM 7 126 FIG@(4,0,0,1) = TRUE : FIG@(4,0,0,2) = TRUE 127 FIG@(4,0,1,2) = TRUE : FIG@(4,0,2,2) = TRUE 128 FIG@(4,1,1,3) = TRUE : FIG@(4,1,2,1) = TRUE 129 FIG@(4,1,2,2) = TRUE : FIG@(4,1,2,3) = TRUE 130 FIG@(4,2,0,1) = TRUE : FIG@(4,2,1,1) = TRUE 131 FIG@(4,2,2,1) = TRUE : FIG@(4,2,2,2) = TRUE 132 FIG@(4,3,1,1) = TRUE : FIG@(4,3,1,2) = TRUE 133 FIG@(4,3,1,3) = TRUE : FIG@(4,3,2,1) = TRUE 134 REM S 135 FIG@(5,0,0,2) = TRUE : FIG@(5,0,1,1) = TRUE 136 FIG@(5,0,1,2) = TRUE : FIG@(5,0,2,1) = TRUE 137 FIG@(5,1,1,1) = TRUE : FIG@(5,1,1,2) = TRUE 138 FIG@(5,1,2,2) = TRUE : FIG@(5,1,2,3) = TRUE 139 FIG@(5,2,0,2) = TRUE : FIG@(5,2,1,1) = TRUE 140 FIG@(5,2,1,2) = TRUE : FIG@(5,2,2,1) = TRUE 141 FIG@(5,3,1,1) = TRUE : FIG@(5,3,1,2) = TRUE 142 FIG@(5,3,2,2) = TRUE : FIG@(5,3,2,3) = TRUE 143 REM G 144 FIG@(6,0,0,1) = TRUE : FIG@(6,0,1,1) = TRUE 145 FIG@(6,0,1,2) = TRUE : FIG@(6,0,2,2) = TRUE 146 FIG@(6,1,1,2) = TRUE : FIG@(6,1,1,3) = TRUE 147 FIG@(6,1,2,1) = TRUE : FIG@(6,1,2,2) = TRUE 148 FIG@(6,2,0,1) = TRUE : FIG@(6,2,1,1) = TRUE 149 FIG@(6,2,1,2) = TRUE : FIG@(6,2,2,2) = TRUE 150 FIG@(6,3,1,2) = TRUE : FIG@(6,3,1,3) = TRUE 151 FIG@(6,3,2,1) = TRUE : FIG@(6,3,2,2) = TRUE 152 CYC = 0 : REM NEXT GAME STEP TIME 153 PRD = 1 154 SP% = 8 155 RES@=FALSE 156 CFG% = 0 : REM CURRENT ACTIVE FIGURE 158 CT = 0 : REM CURRENT TIME 170 CFX% = 0 172 CFY%=-2 174 X% = 0 176 Y% = 0 178 SC% = 0 180 MV% = 0 185 STG% = 0 190 CFP% = 0 192 GOSUB 10000 193 GOSUB 5000 194 GOSUB 3000 195 REM MAIN LOOP 200 CT = TIME() 205 IF CT < CYC THEN GOTO 225 210 CYC = CT+PRD-STG%/3000 215 STG% = STG%+1 220 GOSUB 1000 225 K$ = INKEY$() 230 IF K$ = "q" THEN GOTO 30000 235 IF K$ = "a" THEN MV% = -1 : GOSUB 2000 240 IF K$ = "d" THEN MV% = 1 : GOSUB 2000 245 IF K$ = "s" THEN GOSUB 1000 250 IF K$ = "w" THEN GOSUB 9000 990 GOTO 195 1000 REM GAME STEP SUBPROGRAM 1005 X% = CFX% 1010 Y% = CFY%+1 1015 GOSUB 6000 1020 IF RES@ THEN GOTO 1055 1025 RES@ = FALSE 1030 GOSUB 4000 1035 CFY% = Y% 1040 RES@ = TRUE 1045 GOSUB 4000 1050 RETURN 1055 IF CFY% < 1 THEN GOTO 30000 1056 SC% = SC%+1 1057 GOSUB 3000 1060 FOR I%=0 TO 3 1065 FOR J% = 0 TO 3 1070 IF CFY%+J% < 0 THEN GOTO 1085 1075 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 1085 1080 SCR@(CFY%+J%, CFX%+I%+1) = TRUE 1085 NEXT J% 1090 NEXT I% 1095 GOSUB 7000 1100 GOSUB 5000 1105 CFX% = 0 1110 CFY% = -2 1115 CFG% = RND() * 7 1990 RETURN 2000 REM MOVE FIGURE SUBPROGRAM 2005 X% = CFX%+MV% 2010 Y% = CFY% 2015 GOSUB 6000 2020 IF RES@ THEN GOTO 2990 2025 RES@ = FALSE 2030 GOSUB 4000 2035 CFX% = X% 2040 RES@ = TRUE 2045 GOSUB 4000 2990 RETURN 3000 REM PRINT SCORES SUBPROGRAM 3005 COLOR 1,0 3015 LOCATE 4,18 3020 PRINT SC% 3990 RETURN 4000 REM DRAW FIGURE SUBPROGRAM 4005 IF RES@ THEN COLOR 0,1 : GOTO 4015 4010 COLOR 1,0 4015 FOR I%=0 TO 3 4020 FOR J%=0 TO 3 4025 IF CFY%+J% < 0 THEN GOTO 4040 4030 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 4040 4035 BOX (SP%+(CFX%+I%)*SP%),(CFY%+J%)*SP%,SP%,SP% 4040 NEXT J% 4045 NEXT I% 4990 RETURN 5000 REM DRAW FIELD SUBPROGRAM 5025 COLOR 0,0 5030 BOX (SP%), 0, W%*SP%, H%*SP% 5035 COLOR 1, 0 5040 FOR I%=0 TO H%-1 5045 LINE (SP%), I%*SP%, (W%+1)*SP%, I%*SP% 5050 NEXT I% 5055 FOR I%=1 TO W%+1 5060 LINE (I%*SP%), 0, I%*SP%, H%*SP% 5065 NEXT I% 5070 COLOR 0,1 5075 FOR I%=1 TO W% 5080 FOR J% = 0 TO H%-1 5085 IF SCR@(J%, I%) = FALSE THEN GOTO 5095 5090 BOX (I%*SP%), J%*SP%, SP%, SP% 5095 NEXT J% 5100 NEXT I% 5990 RETURN 6000 REM TEST MOVE SUBPROGRAM 6005 RES@ = FALSE 6010 FOR I%=0 TO 3 6015 FOR J% = 0 TO 3 6020 IF X%+I%+1 < 0 THEN GOTO 6050 6025 IF Y%+J% < 0 THEN GOTO 6045 6030 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 6045 6035 IF SCR@(Y%+J%, X%+I%+1) = FALSE THEN GOTO 6045 6040 RES@ = TRUE 6045 NEXT J% 6050 NEXT I% 6990 RETURN 7000 REM TEST ROWS SUBPROGRAM 7005 DL@ = FALSE 7010 FOR I% = H%-1 TO 1 STEP -1 7015 RES@ = TRUE 7020 FOR J% = 1 TO W% 7025 IF SCR@(I%, J%) = FALSE THEN RES@ = FALSE 7030 NEXT J% 7035 IF RES@ THEN DL@ = TRUE : Y% = I% : GOSUB 8000 7040 NEXT I% 7045 IF DL@ THEN GOTO 7005 7990 RETURN 8000 REM DELETE ROW SUBPROGRAM 8005 FOR K% = 1 TO W% 8010 SCR@(Y%,K%) = FALSE 8015 NEXT K% 8020 GOSUB 5000 8030 DELAY 300 8035 FOR K% = Y% TO 1 STEP -1 8040 FOR L% = 1 TO W% 8045 SCR@(K%,L%) = SCR@(K%-1, L%) 8050 NEXT L% 8055 NEXT K% 8060 FOR K% = 1 TO W% 8065 SCR@(0,K%) = FALSE 8070 NEXT K% 8075 GOSUB 5000 8080 DELAY 300 8085 SC% = SC%+10 8090 GOSUB 3000 8990 RETURN 9000 REM ROTATE SUBPROGRAM 9005 T% = CFP% 9010 CFP% = CFP%+1 9015 IF CFP% > 3 THEN CFP% = 0 9020 X%=CFX% 9025 Y%=CFY% 9030 GOSUB 6000 9035 IF RES@ THEN CFP% = T% : GOTO 9990 9040 T1% = CFP% 9045 CFP% = T% 9050 RES@ = FALSE 9055 GOSUB 4000 9060 CFP% = T1% 9065 RES@ = TRUE 9070 GOSUB 4000 9990 RETURN 10000 REM STATIC BACKGROUND SUBPROGRAM 10005 COLOR 1,0 10010 BOX 100,18,40,15 10015 COLOR 1,1 10020 BOX 0,0,SP%,(H%+1)*SP% 10025 BOX (W%+1)*SP%,0,SP%,(H%+1)*SP% 10030 BOX (SP%), H%*SP%, W%*SP%, SP% 10035 LOCATE 2,18 10040 PRINT "POINTS" 10045 LOCATE 7,20 10050 PRINT "TERMINAL-BASIC" 10055 LOCATE 9,21 10060 PRINT "TETRIS V 1.0" 10990 RETURN 30000 REM EXIT TO BASIC SHELL 30005 SCREEN 0 30010 PRINT "YOU'V GOT";SC%;"POINTS" 30015 END
or size optimized variant
15 RANDOMIZE : SCREEN 1 : CLS : W% = 10 : H% = 20 40 DIM FIG@(6,3,3,3), SCR@(H%, W%+1) 50 FOR I%=0 TO H%-1 : SCR@(I%, 0) = TRUE : 60 SCR@(I%, W%+1) = TRUE : NEXT I% 70 FOR I%=1 TO W% : SCR@(H%, I%) = TRUE : NEXT I% 90 FIG@(0,0,1,1) = TRUE : FIG@(0,0,1,2) = TRUE 91 FIG@(0,0,2,1) = TRUE : FIG@(0,0,2,2) = TRUE 92 FIG@(0,1,1,1) = TRUE : FIG@(0,1,1,2) = TRUE 93 FIG@(0,1,2,1) = TRUE : FIG@(0,1,2,2) = TRUE 94 FIG@(0,2,1,1) = TRUE : FIG@(0,2,1,2) = TRUE 95 FIG@(0,2,2,1) = TRUE : FIG@(0,2,2,2) = TRUE 96 FIG@(0,3,1,1) = TRUE : FIG@(0,3,1,2) = TRUE 97 FIG@(0,3,2,1) = TRUE : FIG@(0,3,2,2) = TRUE 99 FIG@(1,0,2,0) = TRUE : FIG@(1,0,2,1) = TRUE 100 FIG@(1,0,2,2) = TRUE : FIG@(1,0,2,3) = TRUE 101 FIG@(1,1,0,1) = TRUE : FIG@(1,1,1,1) = TRUE 102 FIG@(1,1,2,1) = TRUE : FIG@(1,1,3,1) = TRUE 103 FIG@(1,2,2,0) = TRUE : FIG@(1,2,2,1) = TRUE 104 FIG@(1,2,2,2) = TRUE : FIG@(1,2,2,3) = TRUE 105 FIG@(1,3,0,1) = TRUE : FIG@(1,3,1,1) = TRUE 106 FIG@(1,3,2,1) = TRUE : FIG@(1,3,3,1) = TRUE 108 FIG@(2,0,1,1) = TRUE : FIG@(2,0,2,0) = TRUE 109 FIG@(2,0,2,1) = TRUE : FIG@(2,0,2,2) = TRUE 110 FIG@(2,1,0,1) = TRUE : FIG@(2,1,1,1) = TRUE 111 FIG@(2,1,2,1) = TRUE : FIG@(2,1,1,2) = TRUE 112 FIG@(2,2,2,1) = TRUE : FIG@(2,2,1,0) = TRUE 113 FIG@(2,2,1,1) = TRUE : FIG@(2,2,1,2) = TRUE 114 FIG@(2,3,0,1) = TRUE : FIG@(2,3,1,1) = TRUE 115 FIG@(2,3,2,1) = TRUE : FIG@(2,3,1,0) = TRUE 117 FIG@(3,0,0,1) = TRUE : FIG@(3,0,1,1) = TRUE 118 FIG@(3,0,2,1) = TRUE : FIG@(3,0,0,2) = TRUE 119 FIG@(3,1,1,0) = TRUE : FIG@(3,1,1,1) = TRUE 120 FIG@(3,1,1,2) = TRUE : FIG@(3,1,2,2) = TRUE 121 FIG@(3,2,0,2) = TRUE : FIG@(3,2,1,2) = TRUE 122 FIG@(3,2,2,2) = TRUE : FIG@(3,2,2,1) = TRUE 123 FIG@(3,3,0,1) = TRUE : FIG@(3,3,1,1) = TRUE 124 FIG@(3,3,1,2) = TRUE : FIG@(3,3,1,3) = TRUE 126 FIG@(4,0,0,1) = TRUE : FIG@(4,0,0,2) = TRUE 127 FIG@(4,0,1,2) = TRUE : FIG@(4,0,2,2) = TRUE 128 FIG@(4,1,1,3) = TRUE : FIG@(4,1,2,1) = TRUE 129 FIG@(4,1,2,2) = TRUE : FIG@(4,1,2,3) = TRUE 130 FIG@(4,2,0,1) = TRUE : FIG@(4,2,1,1) = TRUE 131 FIG@(4,2,2,1) = TRUE : FIG@(4,2,2,2) = TRUE 132 FIG@(4,3,1,1) = TRUE : FIG@(4,3,1,2) = TRUE 133 FIG@(4,3,1,3) = TRUE : FIG@(4,3,2,1) = TRUE 135 FIG@(5,0,0,2) = TRUE : FIG@(5,0,1,1) = TRUE 136 FIG@(5,0,1,2) = TRUE : FIG@(5,0,2,1) = TRUE 137 FIG@(5,1,1,1) = TRUE : FIG@(5,1,1,2) = TRUE 138 FIG@(5,1,2,2) = TRUE : FIG@(5,1,2,3) = TRUE 139 FIG@(5,2,0,2) = TRUE : FIG@(5,2,1,1) = TRUE 140 FIG@(5,2,1,2) = TRUE : FIG@(5,2,2,1) = TRUE 141 FIG@(5,3,1,1) = TRUE : FIG@(5,3,1,2) = TRUE 142 FIG@(5,3,2,2) = TRUE : FIG@(5,3,2,3) = TRUE 144 FIG@(6,0,0,1) = TRUE : FIG@(6,0,1,1) = TRUE 145 FIG@(6,0,1,2) = TRUE : FIG@(6,0,2,2) = TRUE 146 FIG@(6,1,1,2) = TRUE : FIG@(6,1,1,3) = TRUE 147 FIG@(6,1,2,1) = TRUE : FIG@(6,1,2,2) = TRUE 148 FIG@(6,2,0,1) = TRUE : FIG@(6,2,1,1) = TRUE 149 FIG@(6,2,1,2) = TRUE : FIG@(6,2,2,2) = TRUE 150 FIG@(6,3,1,2) = TRUE : FIG@(6,3,1,3) = TRUE 151 FIG@(6,3,2,1) = TRUE : FIG@(6,3,2,2) = TRUE 152 PRD = 1 : SP% = 8 : RES@=FALSE : CFY%=-2 192 GOSUB 10000 : GOSUB 5000 : GOSUB 3000 195 REM 200 CT = TIME() : IF CT < CYC THEN GOTO 225 210 CYC = CT+PRD-STG%/3000 : STG% = STG%+1 : GOSUB 1000 225 K$ = INKEY$() : IF K$ = "q" THEN GOTO 30000 235 IF K$ = "a" THEN MV% = -1 : GOSUB 2000 240 IF K$ = "d" THEN MV% = 1 : GOSUB 2000 245 IF K$ = "s" THEN GOSUB 1000 250 IF K$ = "w" THEN GOSUB 9000 990 GOTO 195 1000 REM 1005 X% = CFX% : Y% = CFY%+1 : GOSUB 6000 1020 IF RES@ THEN GOTO 1055 1025 RES@ = FALSE : GOSUB 4000 : CFY% = Y% : RES@ = TRUE : GOSUB 4000 1050 RETURN 1055 IF CFY% < 1 THEN GOTO 30000 1056 SC% = SC%+1 : GOSUB 3000 1060 FOR I%=0 TO 3 : FOR J% = 0 TO 3 : IF CFY%+J% < 0 THEN GOTO 1085 1075 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 1085 1080 SCR@(CFY%+J%, CFX%+I%+1) = TRUE 1085 NEXT J% : NEXT I% 1095 GOSUB 7000 : GOSUB 5000 : CFX% = 0 : CFY% = -2 : CFG% = RND() * 7 1990 RETURN 2000 REM 2005 X% = CFX%+MV% : Y% = CFY% : GOSUB 6000 : IF RES@ THEN GOTO 2990 2025 RES@ = FALSE : GOSUB 4000 : CFX% = X% : RES@ = TRUE : GOSUB 4000 2990 RETURN 3000 REM 3005 COLOR 1,0 : LOCATE 4,18 : PRINT SC% 3990 RETURN 4000 REM 4005 IF RES@ THEN COLOR 0,1 : GOTO 4015 4010 COLOR 1,0 4015 FOR I%=0 TO 3 : FOR J%=0 TO 3 4025 IF CFY%+J% < 0 THEN GOTO 4040 4030 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 4040 4035 BOX (SP%+(CFX%+I%)*SP%),(CFY%+J%)*SP%,SP%,SP% 4040 NEXT J% : NEXT I% 4990 RETURN 5000 REM 5025 COLOR 0,0 : BOX (SP%), 0, W%*SP%, H%*SP% : COLOR 1, 0 5040 FOR I%=0 TO H%-1 5045 LINE (SP%), I%*SP%, (W%+1)*SP%, I%*SP% 5050 NEXT I% : FOR I%=1 TO W%+1 5060 LINE (I%*SP%), 0, I%*SP%, H%*SP% 5065 NEXT I% : COLOR 0,1 : FOR I%=1 TO W% : FOR J% = 0 TO H%-1 5085 IF SCR@(J%, I%) = FALSE THEN GOTO 5095 5090 BOX (I%*SP%), J%*SP%, SP%, SP% 5095 NEXT J% : NEXT I% 5990 RETURN 6000 REM 6005 RES@ = FALSE : FOR I%=0 TO 3 : FOR J% = 0 TO 3 6020 IF X%+I%+1 < 0 THEN GOTO 6045 6025 IF Y%+J% < 0 THEN GOTO 6045 6030 IF FIG@(CFG%, CFP%, J%, I%) = FALSE THEN GOTO 6045 6035 IF SCR@(Y%+J%, X%+I%+1) = FALSE THEN GOTO 6045 6040 RES@ = TRUE 6045 NEXT J% : NEXT I% 6990 RETURN 7000 REM 7005 DL@ = FALSE : FOR I% = H%-1 TO 1 STEP -1 : RES@ = TRUE 7020 FOR J% = 1 TO W% : IF SCR@(I%, J%) = FALSE THEN RES@ = FALSE 7030 NEXT J% : IF RES@ THEN DL@ = TRUE : Y% = I% : GOSUB 8000 7035 NEXT I% 7040 IF DL@ THEN GOTO 7005 7990 RETURN 8000 REM 8005 FOR K% = 1 TO W% : SCR@(Y%,K%) = FALSE : NEXT K% 8020 GOSUB 5000 : DELAY 300 8035 FOR K% = Y% TO 1 STEP -1 : FOR L% = 1 TO W% 8045 SCR@(K%,L%) = SCR@(K%-1, L%) : NEXT L% : NEXT K% 8060 FOR K% = 1 TO W% : SCR@(0,K%) = FALSE : NEXT K% 8075 GOSUB 5000 : DELAY 300 : SC% = SC%+10 : GOSUB 3000 8990 RETURN 9000 REM 9005 T% = CFP% : CFP% = CFP%+1 : IF CFP% > 3 THEN CFP% = 0 9020 X%=CFX% : Y%=CFY% : GOSUB 6000 9035 IF RES@ THEN CFP% = T% : GOTO 9990 9040 T1% = CFP% : CFP% = T% : RES@ = FALSE : GOSUB 4000 9060 CFP% = T1% : RES@ = TRUE : GOSUB 4000 9990 RETURN 10000 REM 10005 COLOR 1,0 : BOX 100,18,40,15 : COLOR 1,1 10020 BOX 0,0,SP%,(H%+1)*SP% 10025 BOX (W%+1)*SP%,0,SP%,(H%+1)*SP% 10030 BOX (SP%), H%*SP%, W%*SP%, SP% 10035 LOCATE 2,18 : PRINT "POINTS" 10045 LOCATE 7,20 : PRINT "TERMINAL-BASIC" 10055 LOCATE 9,21 : PRINT "TETRIS V 1.0" 10990 RETURN 30000 REM 30005 SCREEN 0 : PRINT "YOU'V GOT";SC%;"POINTS" 30010 END