Skip to content

nzeemin/vilnius-basic-compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

135 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.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ПК (Windows, Linux, Mac), ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС BASIC Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ тСкстовый Ρ„Π°ΠΉΠ» с ассСмблСрным ΠΊΠΎΠ΄ΠΎΠΌ (с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .MAC), плюс тСкстовый Ρ„Π°ΠΉΠ» VIBAS.MAC с ассСмблСрным ΠΊΠΎΠ΄ΠΎΠΌ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ° для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ ассСмблСрный Ρ„Π°ΠΉΠ», содСрТиащий ΠΈ ΠΊΠΎΠ΄ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ.

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ

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

  1. Для Π‘Πš-0010. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ vibasc, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ассСмблСрный Ρ„Π°ΠΉΠ» с опциями: --platform=BK0010 --turbo8 --onefile. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ассСмблСрный Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° PC ассСмблСром BKTurbo8, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„Π°ΠΉΠ» .BIN, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΡƒΡΠΊΠ°Ρ‚ΡŒ Π² эмуляторС Π‘Πš ΠΈΠ»ΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ машинС.
  2. Для УКНЦ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° BASIC, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ .MAC Ρ„Π°ΠΉΠ» основного ΠΊΠΎΠ΄Π° ΠΈ VIBAS.MAC для Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°. Под ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой RT-11, .MAC ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ эти Ρ„Π°ΠΉΠ»Ρ‹ стандартным для RT-11 ассСмблСром MACRO, получаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .OBJ. Π—Π°Ρ‚Π΅ΠΌ Π»ΠΈΠ½ΠΊΡƒΠ΅ΠΌ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ LINK. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся исполнимый Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .SAV, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исполнСн Π² срСдС RT-11 Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС.
  3. Для УКНЦ, кросс-компиляция. Π’ΠΎ ΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏ.2, Π½ΠΎ всё Π΄Π΅Π»Π°Π΅ΠΌ Π½Π° ПК, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ассСмблСр 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:
	MOV	SP, SAVESP
; 10 A%=23.42
L10:
	MOV	#23., VARIA	; assignment
; 20 PRINT A%
L20:
	MOV	VARIA, R0
	CALL	WRINT
	CALL	WREOL
L65536:
SAVESP = . + 2
	MOV	#776, SP	; restore SP
	EMT	350	; .EXIT
; VARIABLES
	.EVEN
VARIA:	.WORD	0	; A%
; RUNTIME CALLS
	.GLOBL	WREOL, WRINT
	.END	START

Π”Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΡ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² БСйсик Π’ΠΈΠ»ΡŒΠ½ΡŽΡ ΠΎΠΏΠΎΠ·Π½Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π²ΡƒΠΌ символам ΠΈΠΌΠ΅Π½ΠΈ + Ρ‚ΠΈΠΏ.

ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ΄Π΅ для MACRO ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄: VAR + Ρ‚ΠΈΠΏ (I,N,S) + ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° символа ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ дСкорирования:

A%                    VARIA
B ΠΈΠ»ΠΈ B!              VARNB
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