Ich fand BASIC-Erweiterungen immer sehr interessant, aber schwer zu schreiben! Die Vorbilder, die ich fand, waren entweder gar nicht kommentiert oder nur sehr spärlich. Außerdem arbeiteten viele ohne Tokenizer, sodass mein armer C64 die Befehle bei der Ausführung immer im Klartext abklappern musste. Das wollte ich nicht!
Ich wollte eine BASIC-Erweiterung:
* mit (möglichst) verständlichem Source-Code
* mit einem anständigen Tokenizer
* mit (möglichst) leichter Erweiterbarkeit
Ich bin kein Profi mit 20 Jahren Hacker-Erfahrung, sondern nur ein kleiner Hobby-Programmierer. Insgesamt habe ich mich vielleicht ein gutes Jahr mit Maschinensprache beschäftigt. Aber ich habe mir immer gesagt: Wenn ich mal eine solche Erweiterung fertig habe, dann haue ich sie raus. Vielleicht bringt sie ja anderen etwas.
Ein gewisses Aha-Erlebnis brachte dann das Buch von Riemenschneider: "Alles über Maschinensprache". Das hat gewissermaßen das Eis gebrochen.
Jetzt habe ich etwas fertig: "GIST BASIC". Der Name ist Programm. Ich habe wirklich nur das aus meiner Sicht Nötigste eingebaut.
Der Source-Code wurde mit dem C64 Studio erstellt. Start mit "SYS 49152"!
Die Erweiterung läuft meines Wissens ohne echte Bugs, kann aber sicher noch an etlichen Stellen verbessert werden!
Also, falls gewünscht: Viel Spaß mit Programm und/oder Source-Code.
Zum Abschluss zitiere ich noch ein paar Infos aus dem source file:
- ; *=$c000
- ;
- ; GIST BASIC v1.05
- ; 17.10.2021
- ;
- ; Neue BASIC-Befehle:
- ; CLS // (Text-)Bildschirm löschen
- ; DIR // Directory (#8) anzeigen
- ; DISK // Disk-Status (#8) anzeigen
- ; GRON // Hires-Grafik einschalten (bei $e000)
- ; GRCLR // Hires-Grafik löschen
- ; GRCOL FG,BG // Hires-Farben setzen (Farb-RAM bei $cc00)
- ; GROFF // Hires-Grafik ausschalten
- ; PLOT X,Y // Punkt setzen
- ;
- ; Neue BASIC-Funktionen
- ; BIN$() // wandelt Bytewert in Binärstring um
- ; // Beispiel: PRINT BIN$(65)
- ; // Ausgabe : 01000001
- ;
- ; Um weitere Befehle hinzuzufügen:
- ; 1.) "lastcmd" um 1 erhöhen
- ; 2.) Einen pointcmd-Block hinzufügen:
- ; // lda #>cmd8
- ; // ldx #<cmd8
- ; // jsr pointcmd
- ; 3.) In hightab und lowtab jeweils
- ; ein dummy-Byte hinzufügen
- ;
- ; Hilfreiche Quellen waren:
- ; * Frank Riemenschneider - Alles über Maschinensprache
- ; // gute Erklärung des Tokenizers, gute Erklärung des
- ; // Grundprinzips einer BASIC-Erweiterung
- ; * Florian Müller - C64 für Insider
- ; // einfach in jeder Hinsicht gut :)
- ; * Floppy-Kurs von Magic Disk
- ; // gute Erklärung zum Directory
- ;
- ; TODO-Liste:
- ; * Die Ausführung der BIN$()-Funktion ist im Moment in "neweval"
- ; integriert und müsste von dort ausgelagert werden.
- ; * Das Hinzufügen weiterer Funktionen müsste dementsprechend
- ; schematisiert werden.
- ; * Kleinigkeiten, siehe Kommentare (FIXME)
- ; * Auf Wunsch natürlich weitere Befehle...
- ; * .... ?