1988-Club80-29, S.40-42

HRG, daß die Schwarte kracht

Arnulf Sopp

Im Sonderheft über die Aufrüstung des Genie 3s stellten Helmut und ich
unsere Erweiterung vor, mit der alle Speicherbaugruppen dieses Computers
eine vierfache Kapazität erhielten. Dazu gehörten auch der Bildschirm mit 8
kB (zuvor 2 kB) und die Graphik mit 256 kB (vorher 64).

Viel später fiel mir auf, daß der Video-Controller (6845 CRTC) 14
Adreßleitungen hat. Damit könnte er sogar 16 kB Bildschirm verwalten. Er war
aber noch immer wegen der ursprüng1ichen 2 kB nur mit 11 Leitungen verka-
belt. So wurden die Addressen A11 und A12 des 6845 auch noch an den Bild-
wiederholspeicher angelötet. Das sieht nun so aus:

<img src="HRG, daß die Schwarte kracht.jpg" width="100%">

Nach dieser Operation ist die Hardware des Videoteils nun folgendermaßen
konfiguriert: wie in alten Zeiten kann die CPU nur höchtens 2 kB von
3800-3FFFh gleichzeitig erreichen. Das langt z.B. für 80 X 26 Zeichen. Den
Zugriff auf die vollen 8 kB erhält sie in Portionen zu 2 kB über die Bits 2
und 3 des Ports F3h (per OUT-Befehl). So ergeben sich aus der Perspektive
des Z80 vier Einzelbildschirme zu 2048 Zeichen. Sie können selbstverständ-
lich nacheinander mit einem zusammenhängenden Text befüllt werden. Das
selbe gilt für die Graphik mit achtmal 32 kB oder zweimal 128 kB.

Der CRTC aber ist über 13 Adreßleitungen direkt mit dem Video-RAM
verbunden; für ihn ist es ein einziger Speicher, den er stückweise oder
auch ganz anzeigen kann (sofern der Monitor mitspielt - meiner tut es nicht:
s.u.). Daher besteht nun die Möglichkeit, die CPU in einen Teilbereich des
Bildschirms von max. 2 kB Größe werkeln zu lassen, während auf Wunsch
wesentlich mehr angezeigt wird.

Nun war es theoretisch möglich, den kompletten Videospeicher von 8192
Zeichen anzuzeigen. Da wäre aber in dem Gedränge nicht nur nichts mehr zu
erkennen. Die Hardware des Monitors (nicht des Computers) setzt auch Grenzen
in der vertikalen und horizontalen Punktdichte und damit in der Anzahl der
angezeigbaren Zeichen senkrecht und waagerecht.

Helmut und ich wollten es wissen. Zum Ausprobieren der maximal möglichen
Auflösung ging ich von dem Bildschirmformat 92 X 22 Zeichen bei einer
Zeichenhöhe von 12 Scan-Zeilen aus. 92 Zeichen ist bei meinem Monitor die
höchstmögliche Zeilenlänge, was ich früher schon einmal ausgetestet hatte.
Bei 22 Zeilen ergibt sich eine Bildspeichergröße von knapp 2 kB, also das
alte Maximum. 12 Zeilen pro Zeichen erwiesen sich als Obergrenze denn bei
13 Scan-Zeilen begann mein Bildschirm zu schwimmen.

Um die größtmögliche Höhe des Bildschirms rauszukriegen, programmierte
ich zunächst den Interlace-Modus. Dabei werden abwechselnd zwei Halbbilder
angezeigt, um die Anzahl der möglichen Scan-Zeilen zu verdoppeln. Nach der
Schimpansen-Methode (Rumprobieren) fand ich anschließend nach und nach die
Maximaldaten für die Register 4-7 des CRTC heraus, um den Bildschirm auch
vertikal bis zum Anschlag auszureizen.

Resultat waren 92 X 60 Zeichen, also fast fünfeinhalb kByte Fernsehen.
Für ASCII-Texte wird man diese Format kaum je brauchen. Es ist witzlos,
halbe Bibeln gleichzeitig auf dem Bildschirm zu haben. Für Graphik-
Anwendungen kann jedoch eine etxrem hohe Auflösung sehr interessant
sein. Bei einer Zeichenbreite von 8 Punkten und einer Höhe von 12 Dots gibt
dieses Format eine Auflösung von 736 X 720 Pixeln her. Und das mal 2 weil
der G3s zwei Graphikseiten speichern und anzeigen kann. Theoretisch sind
sogar 1024 X 1024 Dots denkbar, was ein Monitor mit hinreichender Bandbreite
dann auch anzeigen sollte. Daher das überlebensgroße 'H' in der Überschrift.

Das im Anschluß gelistete Programm füllt den Bildschirm mit einem Graphik-
muster, das erkennen läßt, wo welche 32-kB-Seite des Graphikspeichers
beginnt. Zunächst werden die experimentell ermittelten Daten auf den CRTC
ausgegeben. Es folgt ein wenig G3s-spezifisches Vorgeplänkel (ASCII-Bild-
schirm aus- und Graphik einblenden). Danach werden über die Bits 2 und 3 des
Port F3h nacheinander die 4 Bildschirme bzw. Graphik-Memories selektiert
und mit dem Punktmuster des Bildschirmzählers beladen. Es entstehen senkrechte
Streifen unterchiedlicher Länge und Dicke. Wo sich die Form eines
Streifens ändert, beginnt ein neuer der 4 Bildschirme alter Größe.

Diese äußerst üppige Auflösung wird man wohl selten brauchen. Durchaus
sinnvoll ist aber die Möglichkeit, in einem gesonderten Abschnitt des
Bildschirms ständig ein Menü, eine oder mehrere Statuszeilen oder ein DIR
in der Anzeige zu haben, während die CPU darunter oder darüber noch immer
über volle 2 kB Videospeicher verfügen kann. Das Menü wird auch nicht durch
einen Scroll oder CLS gelöscht, weil nur der CRTC, nicht aber die CPU
gleichzeitig den vollen Bildwiederholspeicher von 8 kB beherrscht.


Arnulf Sopp


		00001 ; Testroutine, mit der die höchstmögliche Graphikauflösung
		00002 : beim Genie 3s mit Helmut Bernhardts Mega-Banker
		00003 ; durch Probieren ermittelt werden kann
		00004 ;
		00005 ; Sopp
		00006
5200		00007
		00008
5200  214152	00009 start	LD	HL,data		;Parametertabelle für den CRTC
5203  D1F710	00010		LD	BC,10f7h	;Zähler 16 Register, CRTC Datenport F7
5206  AF	00011		XOR	A		;A <= 00h CRTC ab Register 0 programmieren
5207  D3F6	00012 setcrtc	OUT	(0f6h),A	;internes CRTC-Register adressieren
5209  3C	00013		INC	A		;auf nächstes von 16 Registern stellen
520A  EDA3	00014		OUTI			;Datum auf CRTC ausgeben, Zeiger weiter
520C  20F9	00015		JR	NZ,setcrtc	;falls noch nicht 16 Daten ausgegeben
520E  DBFA	00016		IN	A,(0fah)	;Systemport 1 des G3s
5210  F5	00017		PUSH	AF		;Inhalt retten
5211  F602	00018		OR	02h		;Graphik anzeigen
5213  E67F	00019		AND	7fh		;ASCII-Bildschirm ausschalten
5215  F5	00020		PUSH	AF		;diesen Zustand auch retten
5216  F608	00021		OR	08h		;Graphik für die CPU für RD/WR freigeben
5218  F3	00022		DI			;vorsichtshalber
5219  D3FA	00023		OUT	(0fah),A	;Systembyte 1 neu schreiben
521B  0604	00024		LD	B,04h		;Zähler für 4 Bildsch. des Vierfach G3s
521D  AF	00025		XOR	A		;A <= 00h, ab Bildsch. 0 des 4fach G3s
521E  210080	00026 fillscr	LD	HL,8000h	;Anfangsadresse des Grafikspeichers
5221  54	00027		LD	D,H		;DE <= 8000h = 32kB Graphik pro Bildsch.
5222  5D	00028		LD	E,L
5223  D3F3	00029		OUT	(0f3h),A	;einen v. 4 Gr.-Bildschirmen selektieren
5225  4F	00030		LD	C,A		;Inhalt von Port F3h retten
5226  70	00031 setpix	LD	(HL),B		;Pixelmuster 04, 03, 02, 01 anzeigen
5227  23	00032		INC	HL		;nächste Stelle des Graphikspeichers
5228  1B	00033		DEC	DE		;Bytezähler herunterzählen
5229  7A	00034		LD	A,D		;prüfen ob
522A  B3	00035		OR	E		;der Zähler schon abgelaufen ist
522B  20F9	00036		JR	NZ,setpix	;falls nein: weiter Pixels anzeigen
522D  79	00037		LD	A,C		;A <= Inhalt von Port F3h
522E  C604	00038		ADD	A,04h		;abgelaufen: nächsten Bildschirm selekt.
5230  10EC	00039		DJNZ	fillscr		;nächst. Bildsch. mir einem Muster füllen
5232  AF	00040		XOR	A		;A <= 0, Bildschirm 0 des Vierfach G3s
5233  D3F3	00041		OUT	(0f3h),A	;zurückstellen
5235  F1	00042		POP	AF		;Systenbyte 1 (noch alt angez. Graphik)
5236  D3FA	00043		OUT	(0fah),A	;ab 8000h wieder RAM einblenden
5238  CD490	00044		CALL	0049h		;auf irgendeinen Tastendruck warten
523B  F1	00045		POP	AF		;ursprüngl. Inhalt von Port FAh (o. Gr.)
523C  D3FA	00046		OUT	(0fah),A	;restaurieren
523E  C3C901	00047		JP	01c9h		;CLS (Videoformat restaur.) EI und ENDE
		00048
		00049 ; Die daten für den CRTC können nach Belieben zum Test geändert werden
		00050
5241  70	00051 data	DB	70h	;Reg. 0: Bildschirmbreite112 Zeichen
5242  5V	00052		DB	5ch	;     1: angezeigt 92 Zeichen
5243  61	00053		DB	61h	;     2: horizontale Sync-Position
5244  08	00054		DB	08h	;     3: Breite des Sync-Impulses
5245  20	00055		DB	20h	;     4: Bildhöhe 64 Z. (Hälfte von Interlace)
5246  10	00056		DB	10h	;     5: Bildhöhenjustage in Zeilen
5247  1E	00057		DB	1eh	;     6: angezeigt 60 Zeilen (Hälfte v. Interl.)
5248  1F	00058		DB	1fh	;     7: vertikale Sync-Position
5249  03	00059		DB	03h	;     8: Interlace-Modus
524A  08	00060		DB	0bh	;     9: Zeilen pro Zeichen -1 (=12 lpc)
524B  29	00061		DB	29h	;    10: Cursor: oberer Rand und Anzeigemodus
524C  09	00062		DB	09h	;    11: dto. unterer Rand
524D  00	00063		DB	00h	;    12: Bildschirmanfang (relativ zu 3800h) MSB
524E  00	00064		DB	00h	;    13: dto. LSB
524F  00	00065		DB	00h	;    14: Cursoradresse (relativ zu 3800h) MSB
5250  00	00066		DB	99h	;    15: dto. LSB
		00067
5200		00068		END	start	; dort Einsprung

00000 Fehler

data	5241	fillscr	521F	setcrtc	5207	setpix	5226	start	5200

