Infos zum CBM 4001 Series

Die unterschiedlichen ROMs der 4001er Serie


[CBM 4008 Aufsicht]

[CBM 4008 Typenschild]

BASIC 4.0 ist BASIC 4.0 ?
Fehlanzeige !

Als ich meine alten CBM-Programme, geschrieben auf meinem CBM 4008, auf dem Vice-Emulator für PET-Computer laufen lassen wollte, erlebte ich eine sehr unangenehme Überraschung. Die Emulation für den 4032 (ein spezieller CBM 4008 Emulator fehlt) führte entweder zu Abstürzen oder "passivem" Verhalten. Natürlich schob ich das erstmal auf eine fehlerhafte Emulation! Ich stellte dann nach einigem Herumprobieren fest, dass die ebenfalls angebotene Emulation des CBM 4032B (Businesstastatur ohne Grafiksymbole) bessere Ergebnisse erzielte (zumindest gab es keine Abstürze mehr). 

Nach und nach konnte ich einige Unterschiede in den ROMs der verschiedenen Computer (Emulationen), die alle als Modelle der 4001 Series verkauft wurden, feststellen. Man kann das als Chaos oder als Evolution bezeichnen; festzuhalten ist, dass das ROM mehrfach überarbeitet wurde. Dabei wurden zwar Verbesserungen (zusätzliche Möglichkeiten) eingeführt, allerdings zugleich die Kompatibilität mit bestehender Software eingeschränkt (verschlimmbessern nennt man sowas auch). Letztendlich muss festgehalten werden, dass sich die ROMs meines CBM 4008 (im alten 3001er Gehäuse) deutlich von denen des in VICE emulierten CBM 4032 (mit CRTC) unterscheiden.

Historisch sind die ROMs von meinem CBM 4008 (derartige Modelle gab es wohl nur in der Anfangszeit auf Basis der gleichen Hardware wie die 3001er Modelle) und die des emulierten CBM 4032B als die älteren anzusehen. Sie sind sich sehr ähnlich. Die Unterschiede liegen vor allem in der unterschiedlichen Tastaturmatrix (Grafiktastatur / Businesstastatur). Der in VICE emulierte CBM 4032 arbeitet bereits mit einem neuen ROM, dass deutlich stärker an den 8032 angelehnt ist.

Die folgende Tabelle zeigt einige Unterschiede, die mir beim Patchen meiner Programme begegnet sind.


 
Problembeschreibung Speicherstelle CBM 4008 CBM 4032 B (VICE) CBM 4032 (VICE)
Tastaturabfrage (letzte gedrückte Taste)
Der Grund, warum bei meinen Spielen im Emulator die Tastatursteuerung mit [RETURN] und [RVS/OFF] versagte.
$97 (151)
oder auch
$A6 (166)
Inhalt: Position der gedrückten Taste in der Tastaturcodetabelle (Grafiktastatur).
[Tastatur technisch]
Dies ist die gleiche Methode wie bei der 3001 Serie. Z.B.:
27 für [RETURN] und 
8 für [RVS/OFF] 
Inhalt: Position der gedrückten Taste in der Tastaturcodetabelle (Businesstastatur).
[Tastatur business]
Leider unterscheiden sich die Tabellen total! Z.B.:
52 für [RETURN] und
16 für [RVS/OFF]
Inhalt: PETSCII-Code der gedrückten Taste.
Diese Änderung findet sich auch beim 8032 und sorgt dafür, dass unabhängig vom Tastaturtyp (technisch / business / national) in der Speicherstelle immer der gleiche Wert steht. Z.B.:
13 für [RETURN] und 
18 für [RVS/OFF]
IRQ-Routine benutzt Cassettepuffer #2 
($033A bis $03F9)
Leider der Grund für diverse Abstürze, da der Casettenpuffer #2 schon immer gern für Maschinencode benutzt wurde...
Besonders fatal wirkt sich $03EB aus. Hier wird im neuen ROM die Länge des Tastaturpuffers bestimmt. Wird der Wert über 10 erhöht, überschreibt der Tastaturpuffer den Cassettenpuffer #1. Dort abgelegte Maschinenroutinen werden gnadenlos zerschossen.
$03E9 - $03F9 Für Umrechnungen in der IRQ-Routine (Tastaturabfrage) wird nur die Speicherstelle $03F8 benötigt. identisch zum 4008 
Für Umrechnungen in der IRQ-Routine (Tastaturabfrage) und als zusätzliche Datenspeicher werden die Speicherstellen $03E9 bis $03EE benötigt.
Das ist eine fatale Änderung (mit garentiertem Absturz), denn dieser Bereich wird üblicherweise von Maschinenprogrammen benutzt. Man kann dies nur als undurchdacht bezeichen (es ist auch keine Notwendigkeit für diese Änderung an eben dieser Stelle erkennbar).
Editor-Sprungtabelle / [CLR/HOME]-Routine $E04B
bzw. 
$E015
Der direkte Einsprung in die CLR-Home-Routine liegt bei $E04B.
Es gibt (wie beim CBM 3001 Series) noch keine Sprungtabelle für den Editor (bei $E000). 
identisch zum 4008
Der Einsprung erfolgt über eine Sprungtabelle  bei $E015. 
Wie auch beim 8032 wurde bei $E000 eine Editor-Sprungtabelle eingeführt (auch noch beim C64 und C128 vorhanden).  Die eigentliche CLR/HOME-Routiene liegt beim 4032 bei $E042 und beim 8032 bei $E051.
Zeilenanfang Low-Byte-Tabelle $E65b
bzw.
$E798
Tabelle der Low-Bytes der Zeilenanfänge ab $E65b im ROM. identisch zum 4008
Tabelle der Low-Bytes der Zeilenanfänge ab $E798 im ROM.
Beim CBM 8032 liegt diese Tabelle im ROM ab $E755
Zeilenanfang High-Byte-Tabelle
Nur ein Problem bei Verwendung eines CBM 8032 im 40-Zeichen-Modus (via "cbm4032_any_hz")
$E0 - $F8 Tabelle der High-Bytes der Zeilenanfänge ab $E0 in der Zeropage. identisch zum 4008
identisch zum 4008
Beim CBM 8032 liegt diese Tabelle im ROM bei $E76E (andere Tabelle, da 80 Zeichen pro Zeile verwaltet werden müssen und gleichzeitig die Zeilenverkettung entfällt)
Der Bereich bei $E0 bis $F8 wird für andere Parameter des Editors benutzt


Zusammenfassung der Unterschiede (Verbesserungen) bei den neuen ROMs:
Beschreibung Speicherstelle
Tastaturabfrage (letzte gedrückte Taste) PETSCII statt Tastaturmatrixcode $97 / $A6
Tastaturpuffer programmierbarer Länge $03EB
Auto-Repeat Funktion für Cursorstasten und [SPACE] $03EE (Bit 6)
Beep (integrierter Mini-Lautsprecher)  
Sprungtabelle für den Editor ab $E000
Programmierbarer CRT Controller $E880 - $E881


[Zurück zum Seitenanfang] [CBM 4001 Series Info] [Specials] [MySoft Homepage
Erstellt von Wan Tu-Eit, am 10. Mai 2004; überarbeitet am 10. Mai 2004