1988-Club80-24, 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ünglichen 2 kB nur mit 11 Leitungen verkabelt. So wurden die Addressen A11 und A12 des 6845 auch noch an den Bildwiederholspeicher angelötet. Das sieht nun so aus: 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ändlich 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