Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nzeemin/vilnius-basic-compiler

Writing cross compiler from Vilnius BASIC into MACRO11. WIP 🚧
https://github.com/nzeemin/vilnius-basic-compiler

basic basic-compiler basic-programming-language compiler retrocomputing soviet-computer

Last synced: 2 days ago
JSON representation

Writing cross compiler from Vilnius BASIC into MACRO11. WIP 🚧

Awesome Lists containing this project

README

        

# vilnius-basic-compiler
[![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e6afa5b97cf04e169570eca8d9579c04)](https://app.codacy.com/gh/nzeemin/vilnius-basic-compiler/dashboard)
[![CodeFactor](https://www.codefactor.io/repository/github/nzeemin/vilnius-basic-compiler/badge)](https://www.codefactor.io/repository/github/nzeemin/vilnius-basic-compiler)

## 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
Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ машинС.

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

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

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π° БСйсикС:
```basic
10 A%=23.42
20 PRINT A%
```
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции:
```assembler
.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
```