Programme fürs Turbo Chameleon 64 entwickeln
Vielleicht denkt ihr gerade: Wie jetzt? Programme fürs Turbo Chameleon 64 erstellen?? Ist doch klar, dass man seine C64-Schöpfungen darauf laufen lassen kann!
Schon wahr, aber man kann auch direkt vom C64 auf Funktionen des TC64 zugreifen! Ihr könnt also mit einem C64-Programm feststellen, ob ein Turbo Chameleon vorhanden ist und dann von eurem Programm das Modul ansprechen, um z. B. einen anderen Core zu starten, den Turbo-Modus zu aktivieren oder den zusätzlichen Speicher zunutzen.
Da es (bisher? 😉 ) keine TC64 Emulation für VICE gibt, ist es auf den ersten Blick nicht ganz so einfach Programme für das Chameleon zu entwickeln oder besser gesagt, zu testen. Natürlich könnten wir direkt am C64 bzw. TC64 arbeiten, aber dann verzichten wir auf die Vorteile der modernen Computerwelt. Auch jedes Mal das Programm am PC zu erstellen, dann die SD-Karte vom Chameleon in den PC stöpseln, das Programm kopieren, die Karte zurück ins TC64 stecken und schließlich das Programm per Filebrowser zu starten, nur um festzustellen, dass man einen kleinen Fehler eingebaut hat, ist sicher nicht erbaulich.
Wäre es nicht schön, wenn man erstellte Programme direkt vom PC in den Speicher des C64 / Chameleons kopieren könnte? Dies geht in der Tat und es gibt sogar verschiedene Möglichkeiten (z. B. mittels CODENET über das RR-Net), aber da wir hier das Chameleon am Wickel haben, nutzen wir selbstverständlich dieses.
Falls ihr zu den Wenigen gehört, die das Handbuch des Chameleons oder den Beitrag ‚TC64: Updaten (Cores einspielen)‚ gelesen haben, dann ist euch ChaCo sicherlich bereits bekannt. Mit ChaCo könnt ihr nicht nur euer Chameleon updaten bzw. neue Cores einspielen, sondern diese Kerne auch starten oder wie in der Anleitung zu lesen, auf den Speicher des C64 zugreifen. Allerdings ist es mir zu umständlich nach jeder Programmerstellung über die grafische ChaCo-Oberfläche das erstellte Programm zum C64 zu schicken. Da trifft es sich doch gut, dass es auch eine Kommandozeilen-Version mit dem Namen ChaCoCMD.exe gibt. Infos hierzu finden sich natürlich auch im Handbuch oder unter ‚TC64: Updaten (Cores einspielen)‚.
Daten per ChaCoCMD zum C64 übertragen
Für einen ersten Test solltet ihr nun euer Chameleon anschließen (egal ob Standalone, Dockingstation oder direkt an den C64) und über das USB-Kabel mit dem PC verbinden, auf dem auch das CBM prg Studio installiert ist. Startet alles, sodass ihr den C64-Startbildschirm seht!
Das Programm ChaCoCMD findet ihr im ZIP mit dem Chameleon-Update, es liegt im Verzeichnis ChaCo_Win32. Entpackt die ChaCoCMD.exe in ein für euch leicht zu merkendes und zu erreichendes Verzeichnis und öffnet dann die Eingabeaufforderung. Wechselt anschließend ins Verzeichnis in das ihr ChaCoCMD eben entpackt habt und gebt chacocmd –status ein. Damit rufen wir den Status vom Chameleon ab und können somit ebenfalls prüfen, ob unsere Verbindung überhaupt klappt. Eure Ausgabe sollte dieser ähneln:
Gehen wir nun einmal das Beispiel aus dem Chameleon-Handbuch durch (dort wurde es allerdings für ChaCo erklärt). Wir wollen jetzt Daten aus dem C64-Speicher lesen und auf dem PC speichern (ja das geht auch!). Gebt dazu einfach chacocmd –addr 1024 –len 1000 –readmem test.bin ein. Über –addr <Speicheradresse> legen wir fest, ab welcher Speicheradresse wir Daten lesen wollen, wir nehmen hier den uns bekannten Beginn des Bildschirmspeichers. Mit –len <BYTES> bestimmen wir wieviele BYTES gelesen werden sollen, hier 1000, also den gesamten sichtbaren Bildschirm. Das eigentliche Speichern lösen wir mit –readmem <Dateiname> aus, dieser Parameter speichert die gewählten BYTES in der angegebenen Datei ab.
Jetzt findet ihr im Verzeichnis mit der ChaCoCMD.exe auch die eben erzeugte Datei test.bin.
Wir wollen aber eigentlich Daten zum C64 kopieren, dies probieren wir einmal indem wir die eben gelesenen Daten zurück in den Bildschirmspeicher kopieren. Damit wir eine Änderung sehen, wählen wir eine etwas versetzte Zieladresse. Das Zurückschreiben ist noch einfacher, mit chacocmd –addr 0x04A0 –writemem test.bin werden die Daten aus der Datei test.bin zurück in den C64-Speicher geschrieben. Diesmal haben wir auf die Längenangabe verzichtet und somit den gesamten Dateiinhalt zurückgeschrieben. Das ist natürlich nicht ganz unproblematisch. Da wir die Startadresse etwas nach hinten verschoben haben, sind wir so im BASIC-Speicher gelandet. Aber für diesen Test ist das egal.
Wie ihr seht, können wir die Adressen sowohl dezimal, als auch hexadezimal angeben.
Durch das Kopieren haben wir die ‚Startzeilen‘ verdoppelt. Wir haben also erfolgreich auf den Speicher des C64 zugegriffen.
Die Übertragung automatisieren
Natürlich wollen wir nicht jedes Mal von Hand über die Kommandozeile ein von uns erstelltes Programm zum C64 / Chameleon kopieren. Daher richten wir unsere Entwicklungsumgebung (hier am Beispiel des CBM prg Studio) so ein, dass das Programm ohne großes Zutun kopiert wird. Wir können das prg Studio anweisen, bei jeder (erfolgreichen) Programmerstellung weitere Befehle / Programme auszuführen. Öffnet das prg Studio und legt ein kleines Programm an, dass z. B. den Rahmen blinken läßt.
Operator Calc ;wird erst ab CBM prg Studio 2.8.0 benötigt! *=$0801 ; 2014 SYS 2062 BYTE $0B,$08,$DE,$07,$9E," 2062",$00,$00,$00 main inc $D020 jmp main
Klickt nun im Menü auf Build -> Build Events…
Dann öffnet sich ein neues Fenster…
In diesem Dialog könnt ihr festlegen, was das CBM prg Studio vor und / oder nach der Programmerstellung noch so ‚tun‘ soll. Wir möchten ja nach der erfolgreichen Assemblierung das neue Programm in den Speicher des C64 / Chameleon kopieren, also setzen wir den Haken bei Enable Post-Build Commands und achten außerdem darauf, dass weiter unten After successful build markiert ist.
Jetzt legen wir über Edit Post-build… erstmal eine Variable für den Pfad zur ChaCoCMD.exe fest. Klickt dazu im neuen Fenster zunächst auf den zweiten Tab User Defined und dort doppelt auf den leeren Parametereintrag hinter dem *. Gebt hier einen Namen (am besten mit [ ]) ein. Ich nehme [chacocmd]. Anschließend müssen wir noch die Programmdatei suchen. Klickt dazu auf dem Button ganz rechts in dieser Zeile. Dann öffnet sich der Datei-Dialog von Windows. Sucht die ChaCoCMD.exe und wählt diese per Doppelklick aus.
Lasst die Zeile makiert und bestätigt den Dialog mit OK. Die neue Variable wurde in die Eingabe übernommen.
Jetzt brauchen wir den Aufruf nur zu vervollständigen: [chacocmd] –addr 0x0801 –writemem [ProjectDir][prg]. Die beiden Variablen [ProjectDir] & [prg] werden vom CBM prg Studio ‚mitgeliefert‘. Eine Liste aller Variablen findet ihr nach einem Klick auf Edit Post-build… auf dem ersten Tab Presets. Eventuell müsst ihr [prg] durch den Namen ersetzen, den ihr unter Emulator Control, hinter Autolaunch .prg Name in den Optionen eingetragen habt. Dies ist dann der Fall, wenn ihr das Programm automatisch im Emulator startet.
Jetzt ist das Skipt vollständig und wird über OK gespeichert. Die Build-Ereignisse werden übrigens für jedes Projekt getrennt gespeichert! Ihr könnt also für jedes Projekt festlegen, ob es in den Speicher des C64 / Chameleons kopiert werden soll. Nur die Variablen sind übergreifend und müssen nicht jedes Mal neu festgelegt werden.
Erstellt ihr nun das Programm, so wird es direkt in den C64-Speicher kopiert. Allerdings haben wir noch ein Problem. Beim Start auf dem C64 kommt es zu einer Fehlermeldung.
Mit LIST können wir unsere Startzeile überprüfen und sehen, dass diese Unfug enthält (s. oben). Wir kopieren unser erstelltes Programm an die Adresse $0801, dies ist bekanntlich unsere Startadresse. Allerdings müssen wir beachten, dass wir eine prg-Datei vom Assembler erhalten und dort steht, wie jeder von uns weiß, in den ersten beiden BYTEs die Ladeadresse für das Programm.
Diese beiden BYTEs kopieren wir durch unsere Anweisung [chacocmd] –addr 0x0801 –writemem [ProjectDir]retro-programming.prg aber mit zum C64!
Wir müssen uns also um diese beiden BYTEs kümmern. Dazu gibt es zwei Möglichkeiten. Die einfache Lösung wäre es die Startadresse fürs Kopieren auf — addr 0x07FF zu ändern. Bei anderen Zieladresse wäre die Lösung durchaus OK, aber wenn wir unser Programm mit RUN starten möchten, haben wir bei $0801 damit keinen Erfolg:
Beim RUN erhalten wir wieder eine Fehlermeldung! Ein LIST zeigt uns aber, dass die Startzeile diesmal korrekt ist. Durch die direkte Eingabe von SYS 2062 läßt sich das Programm allerdings starten.
Der Grund für dieses Verhalten ist, dass ein BASIC-Programm (hier unsere Startzeile) nur erfolgreich gestartet wird, wenn an $0800 der Wert $00 steht, sonst kommt es zu einem Fehler! Durch unser Kopieren überschreiben wir die Adresse aber mit dem MSB der Ladeadresse.
Die zweite Möglichkeit besteht darin, den Assembler anzuweisen keine Ladeadresse in die prg-Datei zu schreiben. Dann kann unser Programm einfach nach $0801 kopiert werden. Erreichen können wir dies durch die Assembler-Direktive NoLoadAddr.
Schon kann das Programm nach der Übertragung zum C64 / Chameleon direkt mit RUN ausgeführt werden.
Ihr könnt nun also ganz einfach mit dem Turbo Chameleon und einem USB-Kabel eure Programme direkt übertragen. Selbstverständlich bieten auch andere Entwicklungsumgebungen eine ähnliche Steuerung, wie eben beschrieben. Ihr könnt natürlich auch Batche / Skripte anlegen, die ihr durch einen einfachen Doppelklick oder als Tool ausführen könnt.
Ich bereite mich z. B. gerade auf ein Chameleon-Projekt vor. Dabei kommt der Assembler (bzw. Linker) von cc65, einem Cross-C-Compiler u. a. für den C64, zum Einsatz. Da die Tools des cc65 ‚nur‘ über die Kommandozeile arbeiten, habe ich mir Notepad++ entsprechend eingerichtet und dort auch die obige Übertragung zum C64 / Turbo Chameleon eingebettet.
Damit haben wir die Voraussetzungen geschaffen, um relativ einfach speziell angepasste Programme für das Turbo Chameleon 64 testen zu können. Im nächsten Beitrag kümmern wir uns dann erstmal um die Erkennung des TC64.
Hallo,
schön wäre es, wenn du einen Programmierkurs für das TC64 erstellen könntest.
Interessant dabei wäre es, ob es möglich ist, vom C64 aus direkt auf diverse Funktionen des Moduls zugreifen zu können (z.B. höhere VGA Auflösung, mehr Farben, sonstige besondere graphische Besonderheiten, Multitasking(?) etc.).
Viele Grüße
Dirk
Hallo Dirk,
weitere Programmierprojekte mit dem Turbo Chameleon 64 sind auf jeden Fall geplant. Allerdings nehmen meine ‘Baustellen’ langsam überhand.
Wobei deine Erwartungen wohl enttäuscht werden. Die Schnittstelle zum Chameleon bietet in erster Linie die Möglichkeit direkt vom C64 auf die Chameleon-Einstellungen zuzugreifen.
Du kannst so z. B. die gewählte VGA-Auflösung umschalten, an der Auflösung des C64 ändert dies freilich nichts.
Wenn ich mich richtig entsinne, war die einzige graphische Spielerei der Zugriff auf die VGA-Farbpaletten. Dies ist aber seit BETA-8 nicht mehr möglich.
Gruß,
Jörn
Hallo Jörn,
Schade, hatte einige Ideen für die zusätzlichen Möglichkeiten:-)
Gruß
Dirk
Dafür musst du dann schon eher einen eigenen Core entwickeln.
Da der Hauptkern laut Peter schon 85% des verfügbaren Platzes ‘frisst’, werden solche Änderungen dort wohl auch nicht einfließen. Außerdem würde es der von Jens verfolgten Philosophie wiedersprechen. Er wollte eigentlich nie, dass es ‘spezielle Turbo-Chameleon Programme’ gibt. Das Modul sollte sich nahtlos in ein C64-System integrieren lassen und ‘nur’ bereits vorhandene Hardware nachbilden.