Der CRT-chip 6545 im PET : ========================== (For an English version see "pet_crt_6545.doc") Informationen ueber den im PET verwendeten CRT chip 6545 finden sich in "ftp.funet.fi/pub/cbm/firmware/pet/petio.doc", doch dieses enthaelt leider einige Fehler oder Unklarheiten: In "PETIO.DOC" heisst es, der Chip werde in 80-Spalten-Modellen mit 2 MHz getaktet. Das ist falsch, und so erklaert sich auch das Wunder, warum Register R1 (Anzahl der angezeigten Zeichen) in allen Modellen, 40 wie 80 Spalten, mit 40 programmiert wird (nur das Programm "CBM4032V2.1 50HZ" setzt R1 auf 20, um auf dem 80-Spalten-Modell 40 Zeichen pro Zeile darzustellen, s. unten). Tatsaechlich laesst sich an Pin 21 (CLK) des CRT nur ein Takt von 1 MHz messen, es kommen aber 2 Zeichen / usec heraus ! Ich habe keine Schaltplaene, aber die einzig logische Erklaerung scheint mir diese zu sein: waehrend der CRT fuer 1 usec die Bildschirm-RAM-Adresse fuer 1 Zeichen ausgibt, werden ueber eine weitere, nicht vom CRT gesteuerte Adressleitung nacheinander 2 Zeichen aus dem RAM gelesen, deren Werte als Adressen ans Character-ROM weitergegeben, und die Character-Daten beider Zeichen nacheinander durchs Schieberegister gejagt. Die Verdoppelung der Spaltenzahl erfolgt also rein durch externe Hardware, nicht durch Programmierung des CRT ! Nun zu den Registern: die Beschreibung in "PETIO.DOC" ist zum Teil verwirrend, schwer zu verstehen oder falsch. Neben einer weiteren Quelle, einer auch nicht viel klareren Kopie aus dem Buch "Mikrocomputer Hard- und Software-Praxis" von R.D. Klein, halfen mir ein paar Messungen und Versuche und die Tatsache, dass nur mit der im folgenden beschriebenen Bedeutung der Register die Werte in den verschiedenen PET-ROMs plausible Ergebnisse liefern: R0: (8 Bit) bestimmt die Gesamtdauer des Zeilensignals von einem HSync- Impuls zum naechsten und somit die Zeilenfrequenz. Dabei ist die Dauer des Horizontal-Signals: t(H) = (+1) * t(CLK) , im 8032 mit 1 MHz also: t(H) = (+1) usec , und die Zeilenfrequenz f(H) = 1 / t(H) = 1000 / (+1) kHz R1: (8 Bit) Anzahl der gezeigten Zeichen pro Zeile (im 80-Spalten-Modell die halbe Anzahl der tatsaechlich gezeigten Zeichen, daher im 8032 immer 40, s. oben) R2: (8 Bit) Position des HSync-Impulses relativ zum Zeilenanfang (in Zeichen, dh. in CLK-Zyklen, d.h. im 8032 in usec). Veraenderung bewirkt hor. Verschiebung des Bildes). Muss kleiner als R0 sein. R3: (4Bit) Breite des HSync-Signals (in Zeichen)(falsch in PETIO.DOC !) R4: (7 Bit) Dauer eines Bildwechsels von einem VSync-Impuls zum naechsten (grob, in Zeichenzeilen !! Die Dauer einer Zeichenzeile haengt von R9 ab). Anzahl der Zeichenzeilen = +1 ! R5: (5 Bit) Zusaetzliche Rasterzeilen (!!) zur Feinabstimmung der Bildfrequenz. R6: (7 Bit) Anzahl der gezeigten Zeichenzeilen pro Bild (im 8032 immer 25) R7: (7 Bit) Position des VSync-Impulses relativ zum Bildanfang (in Zeichenzeilen). Veraenderung bewirkt vert. Verschiebung des Bildes). Muss kleiner als R4 sein. R9: (5 Bit) Abstand zweier Zeichenzeilen (in Rasterzeilen). Zum Aufbau einer Zeichenzeile werden +1 Rasterzeilen (Horizontalimpulse) erzeugt. Damit ergibt sich die Berechnung der Zeit zum Aufbau eines Bildes: t(V) = ((+1) * (+1) + ) * t(H) , im 8032 also: t(V) = ((+1) * (+1) + ) * (+1) usec , und die Bildfrequenz: f(V) = 1 / t(V) = 1000000 / (((+1) * (+1) + ) * (+1)) Hz Hier die Werte einiger ROMs aus "ftp.funet.fi/pub/CBM/firmware/pet/pet/": petedit-4-40-n-60Hz : vert. 60 Hz / hor. 20 kHz, Tabelle ab $E7B1 petedit-4-40-n-50Hz-reconstruc : vert. 50 Hz / hor. 20 kHz, Tabelle ab $E7B1 petedit-4-80-b-60Hz : vert. 60 Hz / hor. 20 kHz, Tabelle ab $E72A petedit-4-80-b-50Hz : vert. 50 Hz / hor. 19,61 kHz (!!), Tabelle ab $E72A (In "README" schreibt Olaf 'Rhialto' Seibert, dies sei der Inhalt des ROMs 901474-04 (in 8032sk, 8296). Stimmt, bis auf die Werte fuer die CRT-Register:) ROM 901474-04 (aus meinem 8296): vert. 50 Hz / hor. 20 kHz, Tabelle ab $E72A (Dies sind auch die Werte im Listing "petdis", das vom ROM 901474-04 zu sein scheint) EPROM (aus meinem gepatchten 8296-D): vert. 50 Hz / hor. 16,95 kHz (!!), Tabelle ab $E72A (Ich weiss nicht, ob dies Original-Werte sind, oder ob hier ein anderer Monitor aufgesetzt wurde, evtl. vom 7x0 oder so ?!?) Das in den .LHA-Archiven in "ftp.funet.fi/pub/cbm/pet/" enthaltene Programm "CBM4032V2.1 50HZ", das die Ausfuehrung von Programmen fuer die alten PET mit 40 Zeichen/Zeile auf den neueren 80-Zeichen-PETs erlaubt, benutzt eine eigene Tabelle, die bis auf R1 (# Zeichen/Zeile) und R2 (horizontale Verschiebung) der Tabelle dem ROM 901474-04 entspricht (vert. 50 Hz / hor. 20 kHz). Leider bringt dies einen PET-Monitor mit anderen Ablenkfrequenzen durcheinander. Insbesondere kann sich bei Monitoren mit niedrigerer Zeilenfrequenz (wie mein 8296-D) die Bildroehren-Hochspannung unzulaessig erhoehen, was zu Schaeden fuehren kann !! Ich habe daher eine gepachte Version "CBM4032 ANY HZ" nach "ftp.funet.fi/pub/cbm/incoming" geladen, die auf PET mit beliebigen Frequenzen laeuft. Das Archiv "8296d-systemdisk.lha" (auch in "ftp.funet.fi/pub/cbm/pet/") enthaelt das Programm "ADD-ON-LOAD", mit dem ein ROM-image in das an den entsprechenden Adressen zusaetzlich vorhandene RAM eines CBM 8296 geladen und dort gestartet werden kann. Hier der Zusammenhang zwischen den in diesem Archiv enthaltenen ROM-Dateien und denen in "ftp.funet.fi/pub/CBM/firmware/pet/pet/" : "BASIC.4.0/80": "petbasic-4-unpatched" + "petedit-4-80-b-60Hz" + "petkernel-4" "BASIC.4.0/80(D)": "petbasic-4" + "petedit-4-80-b-50Hz" + "petkernel-4" "BASIC.4.0/40": "petbasic-4" + "petedit-4-40-b-noCRTC" + "petkernel-4", gepatcht (*) "BASIC.2.0": "petrom-2-b, gepatcht (*) (*): "BASIC.4.0/40" und "BASIC.2.0", die im Original-ROM den CRT-Chip nicht kennen, enthalten einen Patch, der den CRT zur Darstellung von 40 Spalten auf 80 Spalten-PET initializiert (aehnlich dem Programm "CBM4032V2.1 50HZ", aber fuer 60-Hz-Monitore). ------------------------------------------------------------------------ Wolfgang Guenther, September '97 woll@informatik.uni-bremen.de http://www.informatik.uni-bremen.de/~woll