BASIC Vilnius is an implementation of the BASIC programming language for Soviet machines with PDP-11 architecture: DVK, BK, UKNC, Nemiga. This BASIC is a semi-compiler: it converts the program text into a so-called threaded code, which executes faster than regular interpretation.
The aim of this project is to develop a full-fledged cross-compiler from the BASIC Vilnius language to MACRO assembly code.
The compiler runs on PC (Windows, Linux, macOS) and generates a text file with assembly code (with .MAC extension) from a BASIC program, plus a text file VIBAS.MAC with runtime assembly code for this program. There is also an option to generate a single common assembly file containing both the main program code and the runtime code.
Current state of the project: prototype
ΠΠ΅ΠΉΡΠΈΠΊ ΠΠΈΠ»ΡΠ½ΡΡ β ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΡΠΊΠ° BASIC Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠΊΠΈΡ ΠΌΠ°ΡΠΈΠ½ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ PDP-11: ΠΠ, Π£ΠΠΠ¦, ΠΠ΅ΠΌΠΈΠ³Π°. ΠΡΠΎΡ ΠΠ΅ΠΉΡΠΈΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ "ΠΏΠΎΠ»Ρ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ": ΠΎΠ½ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠΈΡΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΡΡΠ°Π²ΠΈΡ ΡΠ΅Π»ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΡΠ·ΡΠΊΠ° ΠΠ΅ΠΉΡΠΈΠΊ ΠΠΈΠ»ΡΠ½ΡΡ Π² ΠΊΠΎΠ΄ Π΄Π»Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° MACRO (Π΄Π»Ρ Π£ΠΠΠ¦) Π»ΠΈΠ±ΠΎ BKTurbo8 (Π΄Π»Ρ ΠΠ-0010).
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΠ (Windows, Linux, Mac), ΠΈ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ BASIC Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .MAC), ΠΏΠ»ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» VIBAS.MAC Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° Π΄Π»Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠΈΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠΈΠ°ΡΠΈΠΉ ΠΈ ΠΊΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°Π½ΡΠ°ΠΉΠΌ (ΠΎΠΏΡΠΈΡ --onefile).
Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°: ΠΏΡΠΎΡΠΎΡΠΈΠΏ
ΠΠ»ΠΈΠΆΠ°ΠΉΡΠ°Ρ ΡΠ΅Π»Ρ ΡΡΠΎ Π²Π΅ΡΡΠΈΡ 0.1, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ:
- ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ° Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Integer ΠΈ Single, Π±Π΅Π· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅
- ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΠ°ΡΡΠΈΠ½Π³ Π²ΡΠ΅Ρ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΡΠ·ΡΠΊΠ°, ΠΊΡΠΎΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°
DATA - Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Integer ΠΈ Single Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ String Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
PRINTΠ΄Π»Ρ Integer/Single ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ΡΡΡΠΎΠΊ,INPUTΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»- ΡΡΠ½ΠΊΡΠΈΠΈ:
PI,ABS,FIX,INT,SGN,CINT,CSNG,PEEK,INP,SQR,SIN,COS,TAN,ATN,RND - ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ:
LET(ΠΊΡΠΎΠΌΠ΅LET MID$),GOTO,GOSUB,RETURN,IF/THEN/ELSE,FOR,NEXT,ON/GOTO/GOSUB,STOP,END,REM,PRINT(Π²ΠΊΠ»ΡΡΠ°ΡAT,TAB,SPC, Π·Π°ΠΏΡΡΠ°Ρ),INPUT(ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Integer),POKE,OUT,CLS,COLOR,LOCATE,BEEP - Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, Π±Π΅Π· Π³ΡΠ°ΡΠΈΠΊΠΈ, Π±Π΅Π·
DATA/READ/RESTORE - ΠΠ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:,
CSRLIN,POS,EXP,LOG,FRE,CDBL,ASC,CHR$,LRN,MID$,STRING$,VAL,INKEY$,STR$,BIN$,OCT$,HEX$,LPOS,EOF,FN,USR - ΠΠ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ:
LET MID$,DIM,KEY,CLEAR,DATA,READ,RESTORE,DEF USR,DEF FN,PRINTΠ΄Π»Ρ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ,INPUTΠ΄Π»Ρ Single ΠΈ ΡΡΡΠΎΠΊ,OPEN,CLOSE,SCREEN,PSET,PRESET,LINE,CIRCLE,PAINT,DRAW,TRON,TROFF,WIDTH,SYSTEM,MONIT
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°:
- ΠΠ»Ρ ΠΠ-0010. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ
vibasc, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΠΎΠΏΡΠΈΡΠΌΠΈ:--platform=BK0010 --turbo8 --onefile. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° PC Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ BKTurbo8, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΡΠ°ΠΉΠ» .BIN, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΡΡΠΊΠ°ΡΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ΠΠ ΠΈΠ»ΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. - ΠΠ»Ρ Π£ΠΠΠ¦. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° BASIC Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
--platfom=UKNC, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ .MAC ΡΠ°ΠΉΠ» ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈVIBAS.MACΠ΄Π»Ρ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°. ΠΠ°Π»Π΅Π΅, ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ RT-11, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠΈ .MAC ΡΠ°ΠΉΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ Π΄Π»Ρ RT-11 Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌMACRO, ΠΏΠΎΠ»ΡΡΠ°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ.OBJ. ΠΠ°ΡΠ΅ΠΌ, Π»ΠΈΠ½ΠΊΡΠ΅ΠΌ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉLINK. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ.SAV, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ Π² ΡΡΠ΅Π΄Π΅ RT-11, ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΈΠ΄Π°RU MYPROG.SAV. - ΠΠ»Ρ Π£ΠΠΠ¦, ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. Π’ΠΎ ΠΆΠ΅ ΡΡΠΎ ΠΈ Π² ΠΏ.2, Π½ΠΎ Π²ΡΡ Π΄Π΅Π»Π°Π΅ΠΌ Π½Π° ΠΠ. ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ .MAC ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ
macro11ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊpclink11, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ .SAV ΡΠ°ΠΉΠ» Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ Π£ΠΠΠ¦ ΠΈΠ»ΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
vibasc [ΠΎΠΏΡΠΈΠΈ] filename.ASC [ΠΎΠΏΡΠΈΠΈ]
Π³Π΄Π΅ filename.ASC β ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π½Π° BASIC.
ΠΠΏΡΠΈΠΈ:
--quiet,-qβ Π½Π΅ Π²ΡΠ΄Π°Π²Π°ΡΡ ΡΡΡΠΎΠΊΡ "ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅" Π² Π½Π°ΡΠ°Π»Π΅.--onefileβ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ», ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈ ΠΊΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΊΠΎΠ΄ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°; Π±Π΅Π· ΡΡΠΎΠΉ ΠΎΠΏΡΠΈΠΈ ΡΠ°ΠΉΠ» ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌVIBAS.MAC.--turbo8β ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° BKTurbo8; ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΠ΄ ΠΠ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΠ΄ Π£ΠΠΠ¦. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ΅Π· BKTurbo8 .BIN ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² .SAV ΡΠ°ΠΉΠ» ΡΡΠΈΠ»ΠΈΡΠΎΠΉBkBin2Sav. ΠΠ΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΈ--turbo8, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΡ MACRO.--platform={BK0010|UKNC}β ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΠ-0010 ΠΈΠ»ΠΈ Π£ΠΠΠ¦, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡUKNC; ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²ΡΠ±ΠΎΡ ΡΠ°ΠΉΠ»Π° Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°, Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌruntime-{platform}.tmac. Π€Π°ΠΉΠ» ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΌ ΠΆΠ΅, Π³Π΄Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» Π½Π° ΠΠ΅ΠΉΡΠΈΠΊΠ΅:
10 A%=23.42
20 PRINT A%Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ΄, Π±Π΅Π· ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°):
START:
; ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
MTPS #340 ; disable interrupts
CLR @#177560
MTPS #0 ; enable interrupts
MOV SP, SAVESP
; 10 A%=23.42
N10:
MOV #23., VARIA ; var A% assignment
; 20 PRINT A%
N20:
MOV VARIA, R0 ; var A%
CALL WRINT ; PRINT Integer
CALL WREOL
LEND:
; ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
SAVESP = . + 2
MOV #776, SP ; restore SP
EMT 350 ; .EXIT
; VARIABLES
.EVEN
VARIA: .WORD 0 ; A%
; RUNTIME CALLS
.GLOBL WREOL, WRINT
.END START
Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΠΠ΅ΠΉΡΠΈΠΊ ΠΠΈΠ»ΡΠ½ΡΡ:
- ΠΠ΄ΠΈΠ½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΡΡΡΠΎΠΊΡ.
- ΠΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΏΠΎΠ·Π½Π°ΡΡΡΡ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ Π±ΡΠΊΠ²Π°ΠΌ + ΡΠΈΠΏ.
- ΠΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π»ΡΠΉ ΡΠΈΠΏ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (
=,<>,>,<ΠΈ Ρ.ΠΏ.) ΡΡΠΎ Π»ΠΈΠ±ΠΎ-1("ΠΈΡΡΠΈΠ½Π°") Π»ΠΈΠ±ΠΎ0("Π»ΠΎΠΆΡ").
ΠΡΠ»ΠΈΡΠΈΡ ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°:
- ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΠ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ.
- ΠΠ»Ρ Π²Π΅Π»ΠΈΡΠΈΠ½/ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏ "ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ" (Single, 32 Π±ΠΈΡΠ°, 7 Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ
ΡΠΈΡΡ). Π§ΠΈΡΠ»Π° Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
1234#ΠΈΠ»ΠΈ235.988D-7) Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΠ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ. ΠΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈCDBL. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅PIΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ Single. ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π²Π΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ΄Π°ΡΡ ΡΠΈΠΏ Single. - ΠΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ ΠΠ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ, ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π½Π° ΡΡΡΠΎΠΊΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°ΡΡΡΡ Π²
GOTO/GOSUB/ONΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Ρ . - ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ
IFΠ²THEN/ELSEΠΠ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΡΠ°Π²ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡFOR/NEXT/DIM/DATA - ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΉ
CSRLINΠΈPOSΠ½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ, ΡΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ), Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ON .. GOTO/GOSUB: ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ONΠ½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°.- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
IIFΡ ΡΡΠ΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:X=IIF(<ΠΠΠ.ΠΠ«Π ΠΠΠΠΠΠ>,<ΠΠ ΠΠ€Π.ΠΠ«Π ΠΠΠΠΠΠ>,<ΠΠ ΠΠ€Π.ΠΠ«Π ΠΠΠΠΠΠ>). ΠΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ; Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠΉ (Ρ.Π΅. TRUE), ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΈΠ½Π°ΡΠ΅ (Π΄Π»Ρ FALSE) - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. Π’ΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΈ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²: Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±Π° Integer, ΡΠΎ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Integer; Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ Single, ΡΠΎ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Single. CALL <ΠΠΠ’ΠΠ>Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠ΄Π°Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΎΠΉ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΡΠΌΠ»ΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° MACRO/BKTurbo8 ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° ΡΡΠ°ΠΏΠ΅ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ.- ΠΠΎΠΌΠ°Π½Π΄Ρ/ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΠ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈ ΠΠ ΠΠ£ΠΠ£Π’ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ:
RUN,CONTKEY(ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠ»Π°Π²ΠΈΡ)LOAD,SAVE,CLOAD,CSAVE(Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ)LIST,MERGE,DELETE,RENUM,AUTO,NEW(ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ)TRON,TROFF(ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ)SYSTEM,MONIT(Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΠ΅ΠΉΡΠΈΠΊΠ°)
- ΠΠ΅Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΠΠ΅ΠΉΡΠΈΠΊ ΠΠΈΠ»ΡΠ½ΡΡ ΠΎΠΏΠΎΠ·Π½Π°ΡΡΡΡ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π²ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΠΈΠΌΠ΅Π½ΠΈ + ΡΠΈΠΏ.
ΠΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄: VAR + ΡΠΈΠΏ (I,F,S) + ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΡΠΈΠΌΠ΅ΡΡ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
A% VARIA
B ΠΈΠ»ΠΈ B! VARFB
C$ VARSC
AA ΠΈΠ»ΠΈ AAA ΠΈΠ»ΠΈ AA1 VARNAA