Dieser CBM 8032 spielt nicht gern

StarCruiser auf einem zum CBM 8032 umgebauten CBM 4032Er war mir schon auf der letzten Classic Computing aufgefallen und als ich ihn auf der Hobby & Elektronik wiedersah, war klar, dass das dahinter stehende Rätsel gelöst werden musste.

Ein CBM 8032 (genauer gesagt ein zum 8032 umgebauter CBM 4032) zeigte im Text/Grafik-Modus die für den Textmodus (Groß-/Kleinschrift) typischen leeren Rasterzeilen zwischen den Textzeilen und sowas sieht bei Spielen einfach blöd aus.

Aufgefallen ist dies bei Verwendung des bekannten 40-Zeichen-Patches “CBM4032 ANY HZ” von Wolfgang Guenther, der hier benutzt wurde, um die auf einem CBM 4032 lauffähigen ActionGames auch auf einem CBM mit 80-Zeichen-Bildschirm spielen zu können. Dabei wird das Bild mittig und etwas gequetscht dargestellt (soweit korrekt) aber leere Rasterzeilen dürften nicht vorhanden sein.

Stochern im Nebel
Motiviert von kpanic vom Stand des Vereins zum Erhalt klassischer Computer (denn dort war der Rechner ausgestellt) versuchten wir zusammen diesem Phänomen noch auf der Messe in Stuttgart tiefer auf den Grund zu gehen. Doch in der Messehektik fehlte einfach die Zeit für eine eingehende Analyse.

Was wir noch herausfanden, war die Erkenntnis, dass die Steuercodes, die auf einem CBM 8032 den Zeichensatz umstellen (und dabei auch dafür sorgen, dass im Textmodus die zusätzlichen Leerzeilen eingefügt werden und im Text/Grafik-Modus nicht) nach Aktivierung des 40-Zeichen-Patches nicht mehr funktionieren. Die „klassische“ Zeichensatzumstellung mittels POKE 59468,12 bzw POKE 59468,14 half ebenfalls nicht weiter, denn diese betraf ja nicht die Art wie der CRTC-Grafikbaustein die Zeilen(abstände) darstellte.

Es war klar, das ein, zwei POKEs helfen würden, den Zeilenabstand zu korrigieren. Doch es war zum einen unklar, warum das überhaupt erforderlich war, denn normalerweise sollte der Patch die korrekte CRTC-Konfiguration von sich aus einstellen und zum anderen fehlte uns auf der Messe die nötige Ruhe, um die Dokumentation zum CBM zu sichten, den Fehler zu lokalisieren und einen Korrekturvorschlag zu erarbeiten. Jetzt, zwischen den Jahren, habe ich mir das ganze nochmal vorgenommen und … verstehe was passieren müsste und wundere mich immer noch, warum es bei diesem Rechner nicht funktioniert.

Sichten der Fakten
Die erforderlichen Informationen zu den Registern des CRTCs habe ich aus der CRTC-Dokumentation bei André Fachat entnommen, ein passendes 8032-ROM-Listing habe ich auf Zimmers.Net gefunden. Mit diesen Dokumenten bewaffnet habe ich mir die im Editor-ROM liegende Steuerzeichen-Auswerte­routine vorgenommen, um dem Problem auf den Zahn zu fühlen.

Der Code $0E, für CHR$(14), führt bei E5AE zu einem JSR $E07A (Textmodus) und der Code $8E, für CHR$(142), führt bei E5F1 zu einem JSR $E082 (Text/Grafik-Modus). Die entscheidende Stelle im ROM-Listing (8032 mit Business-Tastatur) sieht dann so aus:

; Initialize CRTC (Gross/Klein) -- (57466)
 E07A    iE07A    LDA #$2A    ; CRT-Init-Tabelle Low
 E07C             LDX #$E7    ; CRT-Init-Tabelle High
 E07E             LDY #$0E    ; Charset 2 (POKE 59468,14)
 E080             BNE $E088

; Initialize CRTC (Text/Grafik) -- (57474)
 E082    iE082    LDA #$3C    ; CRT-Init-Tabelle Low
 E084             LDX #$E7    ; CRT-Init-Tabelle High
 E086             LDY #$0C    ; Charset 1 (POKE 59468,12)
 E088    iE088    STA $C7     ; Pointer: Tape Buffer/ Screen Scrolling
 E08A             STX $C8
 E08C             LDA $E84C
 E08F             AND #$F0
 E091             STA $D1     ; Length of Current File Name / Screen Temp Data
 E093             TYA
 E094             ORA $D1     ; Length of Current File Name / Screen Temp Data
 E096             STA $E84C   ; Select Charset (POKE 59468,Y)
 E099             LDY #$11    ; Update CRTC Register 0 - 17
 E09B    iE09B    LDA ($C7),Y ; Pointer: Tape Buffer/ Screen Scrolling
 E09D             STY $E880   ; 6545/6845 CRT    CHIP (59520)
 E0A0             STA $E881
 E0A3             DEY
 E0A4             BPL $E09B   ; Loop Register Update
 E0A6             RTS

; -    Video Chip Setup Table -- e07a        DATA (Gross/Klein)
 E72A             .byte 31 28 29 0F 27 00 19 20  ;1().'.. 
 E732             .byte 00 09 00 00 10 00 00 00  ;........
 E73A             .byte 00                       ;.

; -    Video Chip Setup Table -- e08a        DATA (Text/Grafik)
 E73C             .byte 31 28 29 0F 31 00 19 25  ;1().1..%
 E744             .byte 00 07 00 00 10 00 00 00  ;........
 E74C             .byte 00                       ;.

Die hier im Listing angegebenen „Video Chip Setup Tables“ entsprechen den Angaben im ROM edit-4-80-b-50Hz.901474-04-3681.bin. Es gibt allerdings weitere Editor-ROM-Varianten, die andere Setup-Werte enthalten, was entweder auf andere Bildschirmgrößen, eine andere Taktfrequenz (60 Hz statt 50 Hz), einen anderen CRTC-Chip-Hersteller oder auf den oben Rot markierten Parameter (für Register 9) zurückzuführen ist; bzw. auf eine Kombination dieser vier Faktoren.

Ziel erkannt Gefahr gebannt
Der Rot markierte Parameter legt die Anzahl der Rasterzeilen (-1) fest und ist genau der, den wir zur Lösung unseres Problems benötigen. Interessanterweise haben einige andere ROMs hier nicht das Datenpaar 9/7 sondern  8/7 hinterlegt, fügen also im Textmodus nur eine leere Zeile und nicht zwei ein, was wiederum Auswirkungen auf die anderen Parameter erklären könnte.

Die Lösung des beobachteten Problems für unserem speziellen Freund kann ich nicht überprüfen, da ich kein ROM-Image von diesem Rechner habe. Mein eigener CBM 8032, der ebenfalls eine Naturwissenschaftlich-Technische-Tastatur hat, zeigt leider auch nur noch Datenmüll und hat Teile seines ROM-Gedachtnisses verloren. Prinzipiell könnte es jedoch genügen, nach der Aktivierung des 40-Zeichen-Patches die Zahl der Rasterzeilen in Register 9 zu korrigieren. Das ginge mit zwei einfachen POKEs:

POKE 59520,9: POKE 59521,7 : REM Selektiere Register 9 & setze Wert 7

Ursachenforschung
Selbst wenn der Fix funktioniert, bleibt immer noch die Ursache für das seltsame Verhalten dieses Rechners zu ergründen. In VICE gibt es bekanntlich keine Probleme und von anderen Seiten ist mir bisher auch noch keine Klage vorgetragen worden. Um die Fehlerquelle einzukreisen, habe ich daher den Code des 40-Zeichen-Patches analysiert, um zu schauen, wie da die Register des CRTCs manipuliert werden.

Zu meiner Überraschung passiert im Patch eigentlich recht wenig spektakuläres. Zuerst wird die Routine bei $E082 angesprungen, was den Text/Grafik-Modus aktiviert. Damit sollten eigentlich die gefundenen Probleme nicht auftreten dürfen. Dann werden die Register 1 (Horizontal Display) und 2 (Horizontal Sync position) angepasst, um die Anzeige auf 40-Zeichen umzustellen und zu zentrieren. Der Rest ist das Umbiegen einiger Vektoren, um eine eigene Steuerzeichenerkennung zu etablieren, da u.a. die ROM-Routinen für Scrolling und Bildschirmlöschen durch solche für den 40-Zeichen-Modus ersetzt werden müssen. Auch die Steuerzeichen 14 und 142 werden deaktiviert, weil diese die CRTC-Standardwerte aktivieren und somit den 40-Zeichen-Modus ausschalten würden.

Dass der auf der CC und der Messe gezeigte CBM 8032 anders reagiert als er sollte, kann nur mit einem speziellen ROM erklärt werden. Möglicherweise wurden die Tabellen bei $E72a und $E73C vertauscht, vielleicht liegt ein Bit-Fehler im ROM vor. Ohne Zugriff auf den Rechner wird sich diese Frage nicht beantworten lassen. Zumindest ist jetzt klar, dass es kein Fehler im Patch ist und das ist ja auch irgendwie beruhigend.

Dieser Beitrag wurde unter CBM, Soft veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

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

Time limit is exhausted. Please reload CAPTCHA.