Level up: C64-Assembler nach c't-Art
Der Artikel in der c't retro legt nahe, den Cross-Compiler acme für die C64 Assemblerprogrammierung zu verwenden. Leider gibts dafür kein Binary in den Ubuntu-Quellen - und auch keins auf der Sourceforge-Website. Aber kein Problem. Linux-User können sich das C64-Devkit von cliffordcarnmo aus dem Github laden. Das enthält den ACME Compiler, sowie diverse Hilfsprogramme zum kompilieren. Zunächst gilt es das Devkit runterzuladen. Dies geht ganz einfach mit dem Befehl
git clone https://github.com/cliffordcarnmo/c64-devkit
mit cd c64-devkit
wechselt man nun in das Verzeichnis.
Um loszulegen löscht man erstmal sämtliche Inhalte der Verzeichnisse source, sprites, tables, graphics, music, charset mit dem Befehl
rm source/*
rm sprites/*
rm tables/*
...
Damit hat man nun ein leeres Projekt, in das die entsprechenden Dateien eingefügt werden können. Sämtlicher Sourcecode gehört in das Verzeichnis
source/
Da das Projekt nur aus einer Quelltext-Datei besteht, wird in diesem Verzeichnis die Datei 'main.asm' angelegt in die die Assembler-Befehle kommen.
Soviel zur Vorbereitung.... Jetzt gehts ans eingemachte. Und da beginnt bereits die Geschichte voller Widersprüche. In der c't retro ist ein Listing abgedruckt, welches weder ich, noch der Compiler verstehen:
Die Bedeutung dieser Zeilen erschließt sich mir weder mit Logik noch aus dem Text. Viel eher erschließt sich die Bedeutung aus dem Quellcode von der c't-Website, welcher andere Zeilen an dieser Stelle enthält:
; BASIC-Header
*= $0801; Ladeadresse = BASIC
!by $0b,$08,10,0,$9e,'2'
!by '0','6','1',$00,$00,$00
Der Reihe nach: *= $0801
ist die Startadresse für dieses Programm $0801 ist der Anfang des Basic-Speichers, hierhin wird also das Programm zunächst geladen. danach folgen eine Reihe von Bytes die übersetzt die Basic-Zeilen
10 SYS 2061
ergeben. Ein Basic-Befehl an die Speicherstelle (dezimal) 2061 zu springen und den Code dort auszuführen. Diese Zeile ist nötig, um das Programm später mit dem BASIC-Befehl run
zu starten.
[Fortsetzung folgt]
Tags: assemblerkurs, retro, vintagecomputing, assembler, c64, commodore, coding, level-up