GPC
De Ge Wit't Oit Noit Nie Programma Compiler!
Programma
Een programma wordt geschreven in een textfile. Deze kan een willekeurige
extentie hebben, maar .gpc
is de standaard.
Een programma bestaat uit een instructie per regel.
Iedere regel wordt afgesloten met een ';'.
In principe heeft een instructie 0, 1, 2 of 3 parameters. Iedere parameter wordt
voorzien van de volgende structuur: <<INSTRUCTIE>> (<<PARAM>>);
.
Wanneer een parameter gezet wordt, dan bestaad deze uit een identifier en een numerieke waarde.
Numerieke waarde
In een programma kan gebruikt worden van een numerieke waarde. Deze waarde kan opgegeven worden in Hexadecimaal, binair en decimaal.
Standaard wordt decimaal gebruikt: 123.
Wanneer er gebruik gemaakt wordt van hexadecimaal, dan wordt de
waarde voorzien van de prefic: 0x
. Het getal wordt vervolgens
geschreven met normale hexadecimale getallen: 0-9A-F.
Voor het gebruik van een binair getal wordt de prefix 0b
gebruikt.
De waarde wordt dan gezet met behulp van 1 en 0.
De volgende getallen zijn dan allemaal hetzelfde:
- 163
- 0xA3
- 0b10100011
Voorbeeld
Bekijk het volgende voorbeeld
BEGIN_PROGRAMMA:
ZET_POORT_AAN (POORT=0x00, HSIO=0x00);
ZET_POORT_UIT (POORT=0x01, HSIO=0x00);
WACHTEN (delay=0x05DC);
FLIP_POORT (POORT=0x01, HSIO=1);
BEWAAR_STATUS;
SPRING (index=0x0003);
PAUZE_PROGRAMMA:
ZET_POORT_AAN (POORT=0x0F, HSIO=0x00);
PAUZE;
EINDE_PROGRAMMA:
BEWAAR_STATUS;
STOPPEN;
In dit programma, worden de volgende stappen uitgevoerd:
- Identificeer het begin programma
- Zet de IO Port 0 aan
- Zet de IO Port 1 uit
- Wachten voor 0x05dc seconden
- Bewaar de status op dit moment
- Spring terug naar index 0x03
- Identificeer het pauze programma
- Zet de IO Port 0x0F aan
- Identifiveer het einde programma
- Bewaar de status
- Stop het programma
Compileren
Taskfile.dev
Voor het eenvoudig compileren is er een taskfile aangemaakt. Deze kan aangeroepen worden met:
task board_01
In dit geval zal een bestand aangemaakt worden in de build directory met de naam board_01.bin.
Uiteraard kan de naam board_01 vervangen worden door een van de andere programma's.
Note
Zorg wel dat je in een virtuele python omgeving zit (Zie Python starten)
Python
Start een python sessie en type het volgende
python src/gpc.py -i <input_file> -o <output_file> -v
Met de volgende parameters:
- -i, --input: de broncode die gecompileerd moet worden
- -o, --output: het .bin bestand dat gemaakt wordt
- -v, --verbose: Volg de uitput
Binair bestand
De output van de compiler is een binair bestand. Deze kan met speciale progarmma's gelezen worden. VSCode met een HEX Editor plugin kan dit bestand gelezen worden.
Note
Het bestand wordt geschreven in een big-endian setup. Dit houdt in dat per
byte de eerste 4 bits als laatste geschreven worden. Bijvoorbeeld WACHTEN(INDEX=1500);
wordt vertaald naar 0x25DC
. Het wordt vervolgens geschreven als DC 25
.
Toevoegen aan de firmware
Voor het gebruik van het programma in de firmware:
- copieer het bestand
binary_file.bin
naar de repository 2025-software in de root. - Maak de cache voor
CMake
leeg een compileer de firmware. - Upload de firmware.
Voorbeeld
python src/gpc.py -i .\examples\simpel_programma_2.gpc -o .\binary_file.bin -v
Python starten
Voor de compiler gebruiken we een virtuele python omgeving.
.\.venv\Scripts\activate.ps1
Virtual env aanmaken
Dit kan gedaan worden met de volgende commande:
python -m venv .venv