Erstellt: 25. Mai 2014

TC64: Erkennen

Turbo Chameleon 64CBM prg Studio 
Prüfen, ob ein Turbo Chameleon 64 vorhanden ist

 

Wie bei einigen anderen Modulen (z. B. GeoRAM oder REU) ist es auch beim Turbo Chameleon möglich, mit einem C64-Programm, darauf zuzugreifen. Wer schon mal die Unterordner des TC64-Update-ZIPs durchstöbert hat, ist bestimmt bereits auf die Datei ‚Chameleon_progmanual.pdf‘ im Ordner ‚Documentation‘ gestoßen. Im PDF wird von Peter Wendrich beschrieben, wie man das TC64 erkennen kann und was für Möglichkeiten es bei der Programmierung gibt. Beginnen wir damit nach einem Turbo Chameleon 64 zu suchen.

 

Das Turbo Chameleon 64 erkennen
Bevor euer Programm etwas mit dem Turbo Chameleon anstellt, ist es als Erstes sicher hilfreich, zu prüfen, ob überhaupt ein TC64 vorhanden ist.

Da das Turbo Chameleon euch ebenfalls die Möglichkeit bietet bekannte Module, wie z. B. eine Final Cartridge III oder die oben bereits erwähnte REU zu emulieren, scheiden die bekannten Prüfungen des Adressbereiches $DE00-$DFFF für das Erkennen des TC64 aus. Stattdessen blendet es, im sich wiederholenden Teil der VIC-II-Register, einige neue Register ein (das macht die SuperCPU übrigens genauso). Ihr erinnert euch doch sicher, dass der Adressbereich für die VIC-II-Register von $D000 bis $D3FF geht, obwohl nur 47 bzw. 49 Register verwendet werden und dass sich die Register alle 64 BYTES wiederholen, oder?

Prüfen wir also eines dieser neuen Register, um festzustellen, ob ein TC64 vorhanden ist.

Wie ihr seht schreiben wir eigentlich nur den Wert 42 oder $2A in das Register $D0FE und lesen das Register dann direkt wieder aus. Erhalten wir dabei den Wert #$FF, dann wurde kein Chameleon gefunden! Beim Zugriff auf ein unbelegtes VIC-II-Register erhält man immer den Wert #$FF. Bekommen wir aber einen anderen Wert, dann ist ein TC64 vorhanden. Wir zeigen hier mit rot (kein TC64) und gelb (Chameleon vorhanden) in der Rahmenfarbe das Ergebnis unserer Prüfung an.

Da wir jetzt wissen, dass ein Turbo Chameleon im System hängt, was fangen wir damit an?
Zunächst werfen wir noch mal einen Blick auf unser Programm von eben. Die Adresse $D0FE wird als CFGENA (ConFiG ENAble) bezeichnet. Über dieses Register können wir das TC64 in den sog. Config-Modus versetzt. Den Config-Modus aktivert man also, wenn die Zahl 42 / $2A in diese Speicherstelle geschrieben wird (so wie wir eben). Sobald dies geschehen ist, hat man Zugriff auf weitere Register und kann Einstellungen des TC64 verändern. Liest man direkt nach der Aktivierung des Config-Modes CFGENA wieder aus, dann erhält man nicht nur den Hinweis, ob ein Chameleon vorhanden ist, sondern auch gleich, wie es betrieben wird.

Rückgabewert
Bedeutung
$01
Das Chameleon steckt als Modul in einem C64
$A1
Das TC64 wird einzeln betrieben
$C1
Chameleon-Core auf dem C-One
$D1
Betrieb in der Docking-Station (4-Joystickports!!!)
$FF
C64 ohne Turbo Chameleon

 

Lasst uns unser Checkprogramm doch gleich mal so erweitern, dass es zusätzlich den Betriebsmodus anzeigt. Dazu beginnen wir mit einem neuen Programm…

Hier legen wir erstmal einige Konstanten fest. Die ersten beiden benutzen wir gleich für unsere Ausgabe, wir verwenden mal wieder Kernal-Routinen über die Jump-Table. Konstanten für das Turbo Chameleon 64 lassen wir einfach mit TC64_ beginnen und legen gleich eine fürs CFGENA-Register und für den Wert 42 / $2A an.

 

Unser Hauptprogramm löscht erstmal über den Bildschirm und springt dann nach TC64_detect, um den Betriebsmodus des Chameleon zu ermitteln. Anschließend wird die Bildschirmposition für die Textausgabe über das X- & Y-Register bestimmt (die Zählung beginnt bei 0!) und schließlich der Modus über TC64_showMode angezeigt. Zum Schluß setzen wir noch die Rahmenfarbe und kehren zum BASIC zurück.

 

Die Funktion  TC64_detect verhält sich fast so, wie unser obiges Programm zum Erkennen des Chameleons und sollte somit kein Problem darstellen. Der einzige Unterschied ist die Verwendung von Konstanten und dass wir uns den Modus in der Variablen TC64_Mode merken.

 

Die Funktion sieht komplizierter aus, als sie ist. Zu Beginn setzen wir erstmal unsere Cursor-Position. Über das X-Register ‚finden‘ wir nachher die Adresse des Textes, den wir über textout ausgeben wollen. Um den Beginn der einzelnen Texte leichter zufinden, verwenden wir eine Tabelle. In dieser stehen einfach nur die Anfangsadressen der Texte. Wir gehen erstmal davon aus, dass es einen unbekannten Modus gibt und füllen X mit $00. Dann holen wir uns den in TC64_mode gemerkten Modus in den Akku und vergleichen diesen mit allen Werten aus obiger Tabelle. Wird ein passender Wert gefunden, dann setzen wir das X-Register auf die Nr. der Adresse für den jeweiligen Text und springen zur Ausgabe nach @doWork, wenn nichts gefunden wird, landen wir automatisch auch dort. Hier wird nun über das X-Register, aus der Tabelle TC64_modenames_Adr das LSB des gewünschten Textes ins Y- und das MSB ins X-Register geladen, bevor wir für die Ausgabe nach textout springen und anschließend die Funktion verlassen.

 

Die Textausgabe ist nun ganz simpel. Zunächst ändern wir die Adresse des  lda bei @loop auf die im X- und Y-Register angegeben Textquelle und lesen dann in einer Schleife solange die einzelnen Zeichen ein, bis wir eine 0 erhalten. Zeichen geben wir über die Kernalfunktion an der aktuellen Cursor-Position aus, die dabei automatisch erhöht wird.

 

Jetzt brauchen wir noch die Variable für den Modus…

…die Liste der Startadressen der Texte…

Wie ihr seht, verwenden wir WORD um das  LSB und MSB der Adressen in der Tabelle zu speichern.

…und schließlich die Texte selbst…

Nun könnt ihr das Programm übersetzen und zum TC64 übertragen, eure Ausgabe könnte dann so aussehen:

Es wurde ein TC64 in der Docking-Station gefunden.
Es wurde ein TC64 in der Docking-Station gefunden.

oder falls kein Chameleon vorhanden ist

Kein Turbo Chameleon
Kein Turbo Chameleon

 


So, dies waren die ersten Zugriffe auf die Register des Chameleons. Da wir nun feststellen können, ob ein Turbo Chameleon vorhanden ist, können wir beim nächsten Mal endlich einige Funktionen auslösen oder Einstellungen auslesen.


Schrott!!Naja...Geht so...Ganz gut...SUPER! (2 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück |

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam