Skip to content

Writing cross compiler from Vilnius BASIC into MACRO11. WIP 🚧

License

Notifications You must be signed in to change notification settings

nzeemin/vilnius-basic-compiler

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. In other words, the compiler runs on a PC (Windows, Linux, Mac) and generates a text file with the .MAC extension. Then, under the RT-11 operating system, the .MAC file is compiled using the standard RT-11 MACRO assembler, resulting in an object file with the .OBJ extension. The object file is then linked with other object modules using the LINK program, including the language's runtime, and optionally, custom assembly procedures. As a result, an executable file with the .SAV extension is produced, which can be executed under the RT-11 on the target machine.

Current state of the project: prototype

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ БСйсик Π’ΠΈΠ»ΡŒΠ½ΡŽΡ

БСйсик Π’ΠΈΠ»ΡŒΠ½ΡŽΡ β€” это рСализация языка BASIC для совСтских машин с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ PDP-11: Π”Π’Πš, Π‘Πš, УКНЦ, НСмига. Π­Ρ‚ΠΎΡ‚ БСйсик являСтся ΠΏΠΎΠ»Ρƒ-компилятором: ΠΎΠ½ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΡˆΠΈΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ставит Ρ†Π΅Π»ΡŒΡŽ написаниС ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ кросс-компилятора с языка БСйсик Π’ΠΈΠ»ΡŒΠ½ΡŽΡ Π² ΠΊΠΎΠ΄ для ассСмблСра MACRO. Π’ΠΎ Π΅ΡΡ‚ΡŒ, компилятор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° PC (Windows, Linux, Mac), Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ тСкстовый Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .MAC. Π”Π°Π»Π΅Π΅, ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой RT-11, .MAC Ρ„Π°ΠΉΠ» компилируСтся стандартным для RT-11 ассСмблСром MACRO, получаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .OBJ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» линкуСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ LINK с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ модулями β€” это runtime языка, плюс, Ссли Π½ΡƒΠΆΠ½ΠΎ, свои собствСнныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π° ассСмблСрС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся исполнимый Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .SAV, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исполнСн Π² срСдС RT-11 Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π° БСйсикС:

10 A%=23.42
20 PRINT A%

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции:

	.MCALL	.EXIT
START:
; 10 A%=23.42
L10:
	MOV	#23., VARA.I	; assignment
; 20 PRINT A%
L20:
	MOV	VARIA, R0
	CALL	WRINT
	CALL	WRCRLF
L65536:
	.EXIT
; VARIABLES
VARIA:	.WORD	0	; A%
	.END	START

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

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

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

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

A%                    VARIA
B ΠΈΠ»ΠΈ B!              VARNB
C$                    VARSC
AA ΠΈΠ»ΠΈ AAA ΠΈΠ»ΠΈ AA1    VARNAA

Releases

No releases published

Languages