Habe heute Programmiersprachen abgeschlossen. Die Aufgabe war es für eine erfundene, nicht existierende CPU, bzw. Architektur ein nicht-triviales Programmset zu schreiben.
Ich habe einige (negative) Erfahrungen mit Assembler und Displaysteuerungen, siehe mein Maturaprojekt und wollte mir so etwas ersparen. Deshalb wollte ich mir eine möglichst komfortable Programmierumgebung schaffen.
Da das Entwerfen einer eigenen Programmiersprache nicht so mein Fall ist und ich den Aufwand ein gcc Backend zu schreiben als zu hoch geschätzt habe, haben wir uns entschlossen eine existierende Architektur zu verwenden und denn Assembler-Code auf unsere Architektur zu transformieren.
---------- | C-File | ---------- || || \/ -------------- -------------- ------------ ------------- | h8/300-gcc |--- | h8/300-asm |--- | basicasm |--- | simulator | -------------- -------------- ------------ -------------
C steht nur so dort, in Wirklichkeit ist es natürlich nur ein Dialekt. Es sind nur vordefinierte globale Variablen erlaubt, ausserdem funktionieren Vergleiche nicht (es wird nicht gültiger Code erzeugt, die Architektur unterstützt es einfach nicht).
Trotz dieser starken Limitationen konnte ich recht viel sogar von C++ zum laufen bekommen. Was sehr gut geht sind Funktionen, diese funktionieren sogar rekursiv und die Stackverwaltung ist sehr zuverlässig. Der mov Befehl wird auch sehr zuverlässig unterstützt. Von C++ waren namespaces und sogar Klassen überhaupt kein Problem. Es funktioniert sogar der Destruktor und damit RAII. Auch Operatoren überladen und Referenzen tun ihren Dienst. Exceptions, RTTI und virtual Dispatch gehen allerdings überhaupt nicht.
Downloaden kann man das ganze hier. Das Skript welches die ganze toolchain der Reihe nach ausführt gibt es hier. Viel Spaß beim ausprobieren, ich freue mich auf Feedback.