<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Reference</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>Recent changes to Reference</description><atom:link href="https://sourceforge.net/p/terminal-basic/wiki/Reference/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 02 Sep 2017 10:20:38 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/terminal-basic/wiki/Reference/feed" rel="self" type="application/rss+xml"/><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v10
+++ v11
@@ -231,465 +231,3 @@

 * 115200 baud rate
 * Backspace send Ctrl-H (0x08)
-
-## Working program examples
-
-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
-
-### 1. Neuton method for finding extremums of the 1 argument function
-
-```basic
-
-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)&amp;gt;E GOTO 80
-130 PRINT " "
-140 LET X=Z:GOSUB 1000:GOSUB 2000:GOSUB 3000
-150 IF D&amp;gt;0 THEN PRINT "MINIMUM:":GOTO 190
-160 IF D&amp;lt;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
-```
-### 2. Fibonacci method for finding unimodal function extremums
-
-``` basic
-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 &amp;gt; F2 THEN GOTO 400 
-320 IF X2 &amp;lt; 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 &amp;lt; 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 &amp;lt;= 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 
-```
-### 3. Classic TETRIS game ###
-
-``` basic
-   10 REM TETRIS MAIN PROGRAM
-   15 RANDOMIZE
-   20 SCREEN 1
-   25 CLS
-   30 W% = 10
-   35 H% = 20
-   40 DIM FIG!(6,4,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,1,0) = TRUE : FIG!(1,0,1,1) = TRUE
-  100 FIG!(1,0,1,2) = TRUE : FIG!(1,0,1,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,1,0) = TRUE : FIG!(1,2,1,1) = TRUE
-  104 FIG!(1,2,1,2) = TRUE : FIG!(1,2,1,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
-  153 PRD = 1
-  154 SPC% = 8
-  155 RES!=FALSE
-  156 CFG% = 0
-  160 CFX% = 0
-  165 CFY%=-3
-  170 X% = 0
-  175 Y% = 0
-  180 MV% = 0
-  185 STG% = 0
-  190 CFP% = 0
-  193 GOSUB 5000
-  195 REM MAIN LOOP
-  200 CT = TIME()
-  205 IF CT &amp;lt; CYC THEN GOTO 225
-  210 CYC = CT+PRD-STG%/3000
-  215 STG% = STG%+1
-  220 GOSUB 1000
-  225 K$ = GET$()
-  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% &amp;lt; 1 THEN GOTO 30000
- 1060 FOR I%=0 TO 3
- 1065   FOR J% = 0 TO 3
- 1070     IF CFY%+J% &amp;lt; 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% = -3
- 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
- 4000 REM DRAW FIGURE FUNCTION
- 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% &amp;lt; 0 THEN GOTO 4040
- 4030     IF FIG!(CFG%, CFP%, J%, I%) = FALSE THEN  GOTO 4040
- 4035     BOX (SPC%+(CFX%+I%)*SPC%),(CFY%+J%)*SPC%,SPC%,SPC%
- 4040   NEXT J%
- 4045 NEXT I%
- 4990 RETURN
- 5000 REM DRAW FIELD FUNCTION
- 5005 COLOR 1,1
- 5010 BOX 0,0,SPC%,(H%+1)*SPC%
- 5015 BOX (W%+1)*SPC%,0,SPC%,(H%+1)*SPC%
- 5020 BOX (SPC%), H%*SPC%, W%*SPC%, SPC%
- 5025 COLOR 0,0
- 5030 BOX (SPC%), 0, W%*SPC%, H%*SPC%
- 5035 COLOR 1, 0
- 5040 FOR I%=0 TO H%-1
- 5045   LINE (SPC%), I%*SPC%, (W%+1)*SPC%, I%*SPC%
- 5050 NEXT I%
- 5055 FOR I%=2 TO W%
- 5060   LINE (I%*SPC%), 0, I%*SPC%, H%*SPC%
- 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%*SPC%), J%*SPC%, SPC%, SPC%
- 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 &amp;lt; 0 THEN GOTO 6045
- 6025     IF Y%+J% &amp;lt; 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
- 8990 RETURN
- 9000 REM ROTATE SUBPROGRAM
- 9005 T% = CFP%
- 9010 CFP% = CFP%+1
- 9015 IF CFP% &amp;gt; 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
-30000 REM EXIT TO BASIC SHELL
-30005 SCREEN 0
-30010 END
-```
-or size optimized variant 
-
-``` basic
-15 RANDOMIZE : SCREEN 1 : CLS : W% = 10 : H% = 20
-40 DIM FIG!(6,4,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,1,0) = TRUE : FIG!(1,0,1,1) = TRUE
-100 FIG!(1,0,1,2) = TRUE : FIG!(1,0,1,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,1,0) = TRUE : FIG!(1,2,1,1) = TRUE
-104 FIG!(1,2,1,2) = TRUE : FIG!(1,2,1,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 CYC = 0 : PRD = 1 : SPC% = 8 : RES!=FALSE : CFG% = 0 : CFX% = 0
-165 CFY%=-3 : X% = 0 : Y% = 0 : MV% = 0 : STG% = 0 : CFP% = 0
-193 GOSUB 5000
-195 REM
-200 CT = TIME() : IF CT &amp;lt; CYC THEN GOTO 225
-210 CYC = CT+PRD-STG%/3000 : STG% = STG%+1 : GOSUB 1000
-225 K$ = GET$() : 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% &amp;lt; 1 THEN GOTO 30000
-1060 FOR I%=0 TO 3 : FOR J% = 0 TO 3 : IF CFY%+J% &amp;lt; 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% = -3 : 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
-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% &amp;lt; 0 THEN GOTO 4040
-4030 IF FIG!(CFG%, CFP%, J%, I%) = FALSE THEN  GOTO 4040
-4035 BOX (SPC%+(CFX%+I%)*SPC%),(CFY%+J%)*SPC%,SPC%,SPC%
-4040 NEXT J% : NEXT I%
-4990 RETURN
-5000 REM
-5005 COLOR 1,1 : BOX 0,0,SPC%,(H%+1)*SPC%
-5015 BOX (W%+1)*SPC%,0,SPC%,(H%+1)*SPC%
-5020 BOX (SPC%), H%*SPC%, W%*SPC%, SPC% : COLOR 0,0
-5030 BOX (SPC%), 0, W%*SPC%, H%*SPC% : COLOR 1, 0
-5040 FOR I%=0 TO H%-1
-5045 LINE (SPC%), I%*SPC%, (W%+1)*SPC%, I%*SPC%
-5050 NEXT I% : FOR I%=2 TO W%
-5060 LINE (I%*SPC%), 0, I%*SPC%, H%*SPC%
-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%*SPC%), J%*SPC%, SPC%, SPC%
-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 &amp;lt; 0 THEN GOTO 6045
-6025 IF Y%+J% &amp;lt; 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
-8990 RETURN
-9000 REM
-9005 T% = CFP% : CFP% = CFP%+1 : IF CFP% &amp;gt; 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
-30000 REM
-30005 SCREEN 0
-30010 END
-```
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Sat, 02 Sep 2017 10:20:38 -0000</pubDate><guid>https://sourceforge.net283b81d842b045f7a8de8db239cddf1dd85194e2</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v9
+++ v10
@@ -599,7 +599,6 @@
 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
@@ -693,5 +692,4 @@
 30000 REM
 30005 SCREEN 0
 30010 END
-
-```
+```
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Fri, 01 Sep 2017 11:12:38 -0000</pubDate><guid>https://sourceforge.netb4d31720ec1b142c09b62e7fa484f5b32f55b288</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v8
+++ v9
@@ -307,3 +307,391 @@
 1000 Z = X^4 - 14*X^3 + 60*X^2 - 70*X 
 1010 RETURN 
 ```
+### 3. Classic TETRIS game ###
+
+``` basic
+   10 REM TETRIS MAIN PROGRAM
+   15 RANDOMIZE
+   20 SCREEN 1
+   25 CLS
+   30 W% = 10
+   35 H% = 20
+   40 DIM FIG!(6,4,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,1,0) = TRUE : FIG!(1,0,1,1) = TRUE
+  100 FIG!(1,0,1,2) = TRUE : FIG!(1,0,1,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,1,0) = TRUE : FIG!(1,2,1,1) = TRUE
+  104 FIG!(1,2,1,2) = TRUE : FIG!(1,2,1,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
+  153 PRD = 1
+  154 SPC% = 8
+  155 RES!=FALSE
+  156 CFG% = 0
+  160 CFX% = 0
+  165 CFY%=-3
+  170 X% = 0
+  175 Y% = 0
+  180 MV% = 0
+  185 STG% = 0
+  190 CFP% = 0
+  193 GOSUB 5000
+  195 REM MAIN LOOP
+  200 CT = TIME()
+  205 IF CT &amp;lt; CYC THEN GOTO 225
+  210 CYC = CT+PRD-STG%/3000
+  215 STG% = STG%+1
+  220 GOSUB 1000
+  225 K$ = GET$()
+  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% &amp;lt; 1 THEN GOTO 30000
+ 1060 FOR I%=0 TO 3
+ 1065   FOR J% = 0 TO 3
+ 1070     IF CFY%+J% &amp;lt; 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% = -3
+ 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
+ 4000 REM DRAW FIGURE FUNCTION
+ 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% &amp;lt; 0 THEN GOTO 4040
+ 4030     IF FIG!(CFG%, CFP%, J%, I%) = FALSE THEN  GOTO 4040
+ 4035     BOX (SPC%+(CFX%+I%)*SPC%),(CFY%+J%)*SPC%,SPC%,SPC%
+ 4040   NEXT J%
+ 4045 NEXT I%
+ 4990 RETURN
+ 5000 REM DRAW FIELD FUNCTION
+ 5005 COLOR 1,1
+ 5010 BOX 0,0,SPC%,(H%+1)*SPC%
+ 5015 BOX (W%+1)*SPC%,0,SPC%,(H%+1)*SPC%
+ 5020 BOX (SPC%), H%*SPC%, W%*SPC%, SPC%
+ 5025 COLOR 0,0
+ 5030 BOX (SPC%), 0, W%*SPC%, H%*SPC%
+ 5035 COLOR 1, 0
+ 5040 FOR I%=0 TO H%-1
+ 5045   LINE (SPC%), I%*SPC%, (W%+1)*SPC%, I%*SPC%
+ 5050 NEXT I%
+ 5055 FOR I%=2 TO W%
+ 5060   LINE (I%*SPC%), 0, I%*SPC%, H%*SPC%
+ 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%*SPC%), J%*SPC%, SPC%, SPC%
+ 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 &amp;lt; 0 THEN GOTO 6045
+ 6025     IF Y%+J% &amp;lt; 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
+ 8990 RETURN
+ 9000 REM ROTATE SUBPROGRAM
+ 9005 T% = CFP%
+ 9010 CFP% = CFP%+1
+ 9015 IF CFP% &amp;gt; 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
+30000 REM EXIT TO BASIC SHELL
+30005 SCREEN 0
+30010 END
+```
+or size optimized variant 
+
+``` basic
+15 RANDOMIZE : SCREEN 1 : CLS : W% = 10 : H% = 20
+40 DIM FIG!(6,4,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,1,0) = TRUE : FIG!(1,0,1,1) = TRUE
+100 FIG!(1,0,1,2) = TRUE : FIG!(1,0,1,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,1,0) = TRUE : FIG!(1,2,1,1) = TRUE
+104 FIG!(1,2,1,2) = TRUE : FIG!(1,2,1,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
+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 : PRD = 1 : SPC% = 8 : RES!=FALSE : CFG% = 0 : CFX% = 0
+165 CFY%=-3 : X% = 0 : Y% = 0 : MV% = 0 : STG% = 0 : CFP% = 0
+193 GOSUB 5000
+195 REM
+200 CT = TIME() : IF CT &amp;lt; CYC THEN GOTO 225
+210 CYC = CT+PRD-STG%/3000 : STG% = STG%+1 : GOSUB 1000
+225 K$ = GET$() : 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% &amp;lt; 1 THEN GOTO 30000
+1060 FOR I%=0 TO 3 : FOR J% = 0 TO 3 : IF CFY%+J% &amp;lt; 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% = -3 : 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
+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% &amp;lt; 0 THEN GOTO 4040
+4030 IF FIG!(CFG%, CFP%, J%, I%) = FALSE THEN  GOTO 4040
+4035 BOX (SPC%+(CFX%+I%)*SPC%),(CFY%+J%)*SPC%,SPC%,SPC%
+4040 NEXT J% : NEXT I%
+4990 RETURN
+5000 REM
+5005 COLOR 1,1 : BOX 0,0,SPC%,(H%+1)*SPC%
+5015 BOX (W%+1)*SPC%,0,SPC%,(H%+1)*SPC%
+5020 BOX (SPC%), H%*SPC%, W%*SPC%, SPC% : COLOR 0,0
+5030 BOX (SPC%), 0, W%*SPC%, H%*SPC% : COLOR 1, 0
+5040 FOR I%=0 TO H%-1
+5045 LINE (SPC%), I%*SPC%, (W%+1)*SPC%, I%*SPC%
+5050 NEXT I% : FOR I%=2 TO W%
+5060 LINE (I%*SPC%), 0, I%*SPC%, H%*SPC%
+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%*SPC%), J%*SPC%, SPC%, SPC%
+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 &amp;lt; 0 THEN GOTO 6045
+6025 IF Y%+J% &amp;lt; 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
+8990 RETURN
+9000 REM
+9005 T% = CFP% : CFP% = CFP%+1 : IF CFP% &amp;gt; 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
+30000 REM
+30005 SCREEN 0
+30010 END
+
+```
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Fri, 01 Sep 2017 11:09:07 -0000</pubDate><guid>https://sourceforge.netacdcc2a551a36940ffce6873bd133f9d8266410e</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v7
+++ v8
@@ -158,6 +158,20 @@
 90 MAT PRINT B
 100 END
 ```
+
+**MAT** **DET** A
+&amp;gt; computes a determinant of the matrix A and stores it in the global variable RESULT()
+
+Example:
+```basic
+10 DIM A(1,1)
+20 A(0,0)=1:A(0,1)=2
+30 A(1,0)=3:A(1,1)=4
+40 MAT DET A
+50 PRINT RESULT()
+```
+&amp;gt; outputs 
+-2.000000

 ## Math module functions

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Sat, 27 May 2017 09:42:32 -0000</pubDate><guid>https://sourceforge.net399fbaa421a8e9772d9d9d93afc84a0a97ccf2ae</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v6
+++ v7
@@ -22,7 +22,7 @@

 * **SAVE** save current program into EEPROM

-## Variables declaration:
+## Variables declaration

 **LET** ABC = 3
 &amp;gt; declares ABC real number variable (single precision)
@@ -44,7 +44,7 @@
 **DIM** AB%(3,3,3)
 &amp;gt; declares 3 dimensional array with each dimension from 0 to 3 of integer data

-## Aritmetics
+## Arithmetic

 **LET** A=3.0:**LET** B=2.0

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Tue, 16 May 2017 12:52:10 -0000</pubDate><guid>https://sourceforge.netbeeaf9799c0bcc29fb8bfb28b0fa11a7337e03e2</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -215,7 +215,7 @@
 [Downloads section](https://bitbucket.org/starling13/terminal-basic/downloads) contains precompiled images for different AVR boards.
 After programming the flash use following terminal settings:

-* 57600 baud rate
+* 115200 baud rate
 * Backspace send Ctrl-H (0x08)

 ## Working program examples
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Tue, 16 May 2017 12:51:17 -0000</pubDate><guid>https://sourceforge.net2b9628458264639ac391d48e59ed193d0bde43f9</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -2,6 +2,8 @@

 ## List of the commands

+* **CHAIN**  load program from EEPROM, preserving the state (variables and arrays)
+
 * **CLS** clear screen and move cursor to home position

 * **DUMP [ARRAYS|VARS]** debug info of BASIC memory, variables and arrays
@@ -16,7 +18,7 @@

 * **RANDOMIZE** initialize pseudo-random number generator

-* **RUN** run inputed program
+* **RUN** run stored program

 * **SAVE** save current program into EEPROM

@@ -195,6 +197,8 @@
 * **DWRITE** &amp;lt;PIN&amp;gt;, &amp;lt;VALUE&amp;gt; write digital value to pin

 ## SDCard module commands
+
+* **DCHAIN** &amp;lt;file name="" without="" extension=""&amp;gt; load program from card, preserving the state

 * **DIRECTORY** list files on the card

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Tue, 16 May 2017 12:50:35 -0000</pubDate><guid>https://sourceforge.net7ee47b9541ac67c8fbc33779ecb93b082546de11</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -26,7 +26,10 @@
 &amp;gt; declares ABC real number variable (single precision)

 **LET** Y% = 4
-&amp;gt; declares integer variable [-32768; 32767]
+&amp;gt; declares integer variable [-32768; 32768)
+
+**LET** Z1%% = 65536
+&amp;gt; declares long integer variable [-2147483648; 2147483648)

 **LET** SS$ = "HELLO, WORLD"
 &amp;gt; declares string variable
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Tue, 16 May 2017 12:48:25 -0000</pubDate><guid>https://sourceforge.net27ed8741163080a76d9b6573eabc74214b19ed09</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -2,13 +2,15 @@

 ## List of the commands

-* **CLS** clear screen and move cursor 
+* **CLS** clear screen and move cursor to home position

 * **DUMP [ARRAYS|VARS]** debug info of BASIC memory, variables and arrays

 * **LIST** inputed program listing

 * **LOAD** load program from EEPROM
+
+* **MAT** perform matrix operation

 * **NEW** clear BASIC memory

@@ -50,6 +52,7 @@
 &amp;gt;A:      3.00000000

 &amp;gt;B:      2.00000000
+

 ## Program, which outputs a multiplication table

@@ -75,6 +78,80 @@
 30 NEXT J% : NEXT I%
 40 END

+```
+
+## Matrix operations
+
+Matrix operations are based on the 2-dimensional arrays and the **MAT** keyword.
+This syntax is similar to the original Darthmouth BASIC with the following restrictions:
+- Matrix occupies whole array, including elements with the 0 index (i.e. **DIM** A(3,3) allows to use
+A as 4x4 matrix).
+- **ZER**, **CON** and **IDN** initializers can not be applied to subset of the matrix elements
+- **MAT** **PRINT** command can use only one matrix identifier.
+
+### 1. Initialization
+
+**MAT** A = ZER
+&amp;gt; initializes elements of previously dimensioned real array A with value of 0.
+
+**MAT** IA% = CON
+&amp;gt; initializes elements of previously dimensioned integer array IA% with value of 1.
+
+**MAT** B = IDN
+&amp;gt; initializes array B as identity matrix
+
+### 2. Output
+
+**DIM** A(3,3)
+...
+**MAT** A = IDN
+...
+**MAT** PRINT A
+&amp;gt; outputs array elements in table form
+
+&amp;gt; 1.0000000  0.0000000  0.0000000  0.0000000
+&amp;gt; 0.0000000  1.0000000  0.0000000  0.0000000
+&amp;gt; 0.0000000  0.0000000  1.0000000  0.0000000
+&amp;gt; 0.0000000  0.0000000  0.0000000  1.0000000
+
+### 3. Operations
+
+**MAT** A = B
+&amp;gt; resizes matrix A to the B size and copy elements of B to A
+
+**MAT** A = B+C
+**MAT** A = A-B
+&amp;gt; performs matrix per-element addition/subtraction.
+
+**MAT** ARR1 = (BVAL)*ARR2
+&amp;gt; performs scaling the elements (multiply by scalar) of the matrix ARR1 with
+&amp;gt; the real variable BVAL.
+&amp;gt; Note, that in this example
+**MAT** A = (A)*A
+&amp;gt; two objects are affected by the operation: 2-dimensional array A, which is scaled by the real scalar variable with the same name A. Matrix can participate in both right and left parts of the asignment expression
+
+**MAT** A = B*C
+&amp;gt; performs matrix product of B and C and writes the result to A. This operation requires the M*N*s (M - number of rows in B, N - number of columns in C, s - matrix element size) additional storage and can suffer from the lack of memory, if the operands have significant size.
+
+**MAT** A = TRN(A)
+&amp;gt; does transpositions of matrix A. Operations uses additional storage of 1 element of matrix type.
+
+**MAT** B = INV(B)
+&amp;gt; finds the inversion of matrix B. This operation requires the ((2+M)*M)*s (M - number of rows and columns in B, s - matrix element size) additional storage and can suffer from the lack of memory, if the operand have significant size. Only square matrix can be used in this opertation. If the inversion was found successfuly, global result variable is set to **TRUE**, otherwise to **FALSE**.
+
+Example:
+
+```basic
+10 DIM A(1,1)
+20 A(0,0)=1:A(0,1)=2
+30 A(1,0)=3:A(1,1)=4
+40 DIM  B(1,1)
+50 MAT B = INV(A)
+60 IF RESULT() THEN GOTO 80
+70 PRINT "NO INVERSION FOR MATRIX":MAT PRINT A: GOTO 100
+80 PRINT "INVERSION FOR MATRIX":MAT PRINT A:"IS"
+90 MAT PRINT B
+100 END
 ```

 ## Math module functions
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Tue, 16 May 2017 12:23:07 -0000</pubDate><guid>https://sourceforge.net49d93542e338d7ffdda3d712f353675497fc5067</guid></item><item><title>Reference modified by Andrey Skvortsov</title><link>https://sourceforge.net/p/terminal-basic/wiki/Reference/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -209,25 +209,3 @@
 1000 Z = X^4 - 14*X^3 + 60*X^2 - 70*X 
 1010 RETURN 
 ```
-
-## Variants
-
-* Terminal-BASIC on Arduino MEGA 2560. Saving and chaining programs with EEPROM.
-
-[[embed url=https://www.youtube.com/watch?v=1aQhjFCwP28]]
-
-* Terminal-BASIC on Arduino MEGA 2560 with 480x320 TFT:
-
-[[embed url=https://www.youtube.com/watch?v=gMFkW4pVq3A]]
-
-* Terminal-BASIC on Arduino MEGA 2560 with [external 32 Kb RAM module](http://starling13.clan.su/index/avr_boards_memory_expansion/0-4)
-
-[[embed url=https://www.youtube.com/watch?v=SfT1yn-ZEss]]
-
-* The smallest variant, running on ARduino NANO Atmega168, simulated in Proteus 8
-
-[[embed url=https://www.youtube.com/watch?v=STGbfv4q6Hc]]
-
-* Microcomputer from ARduino MEGA
-
-[[embed url=https://www.youtube.com/watch?v=qluo-D4c4js]]
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Skvortsov</dc:creator><pubDate>Wed, 10 May 2017 14:57:07 -0000</pubDate><guid>https://sourceforge.netbb5cca9486697b2d4a9d58e0f0ea49921897bd2d</guid></item></channel></rss>