Skip to content

nzeemin/vilnius-basic-compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

184 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

vilnius-basic-compiler

License: LGPL v3 Codacy Badge CodeFactor

Vilnius BASIC Compiler

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

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ сцСнарии использования компилятора:

  1. Для Π‘Πš-0010. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ vibasc, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ассСмблСрный Ρ„Π°ΠΉΠ» с опциями: --platform=BK0010 --turbo8 --onefile. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ассСмблСрный Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° PC ассСмблСром BKTurbo8, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„Π°ΠΉΠ» .BIN, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΡƒΡΠΊΠ°Ρ‚ΡŒ Π² эмуляторС Π‘Πš ΠΈΠ»ΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ машинС.
  2. Для УКНЦ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° BASIC с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ --platfom=UKNC, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ .MAC Ρ„Π°ΠΉΠ» основного ΠΊΠΎΠ΄Π° ΠΈ VIBAS.MAC для Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°. Π”Π°Π»Π΅Π΅, ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой RT-11, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ эти .MAC Ρ„Π°ΠΉΠ»Ρ‹ стандартным для RT-11 ассСмблСром MACRO, получатся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .OBJ. Π—Π°Ρ‚Π΅ΠΌ, Π»ΠΈΠ½ΠΊΡƒΠ΅ΠΌ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ LINK. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся исполнимый Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .SAV, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исполнСн Π² срСдС RT-11, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΈΠ΄Π° RU MYPROG.SAV.
  3. Для УКНЦ, кросс-компиляция. Π’ΠΎ ΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏ.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, CONT
    • KEY (ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… клавиш)
    • 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

About

Writing cross compiler from Vilnius BASIC into MACRO11. WIP 🚧

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages