Vollgrafik

Es gab verschiedene Lösungen für Vollgrafik, ein Standard hat sich jedoch nicht durchgesetzt.

In practic 2/88, S. 87-90 wird eine Schwarz-Weiß-Vollgrafik von Andrea und Ulf Kindermann mit einer Auflösung von 256*192 Bildpunkten beschrieben. Der Aufbau des Grafikspeichers ist kompatibel zum ZX Spectrum.

Die Schaltung ist als separate Grafikkarte entworfen. Bis auf den Austausch einer Lötbrücke gegen einen Schalter sind auf der Grundplatine keine Eingriffe notwendig. Allerdings sind dafür auch 32 Schaltkreise notwendig!

Bild 1 Bild 2

Im Heft „Kleinstrechnertipps 11“ beschreiben Klaus Röbenack und Jork Hobohm eine Schwarz-Weiß-Vollgrafik-Hardware mit einer Auflösung von 256*256 Bildpunkten. Die Hardware selbst ist extrem minimalistisch, es werden nur 4 normale Schaltkreise benötigt. Leider wird keine Software mit veröffentlicht.

Basis ist ein 8K-SRAM.

  • Kleinstrechnertipps 11, S. 38-39

In der Folge erscheinen 2 zusätzliche Beiträge im Funkamateur, die eine Leiterplattenvorlage und erste Software und im zweiten Artikel einen Zusatz für das HCBASIC+ beschreiben, mit dem vom BASIC aus komfortabel die Grafik genutzt werden kann.

  • fa-91-7, S.384ff. A. KÖHLER: Punkt für Punkt - Vollgrafikroutinen für den Z1013
  • fa-92-8, S.561ff. V. Göritz: KC-BASIC+ mit Vollgrafik

Clever gelöst: Berechnen der Position im Bildspeicher, der Grafik-Block-Nr. und des zu bearbeitenden Bits. Mit selbstmodifizierendem Code genügt eine Routine zum Setzen und Löschen von Punkten. Dabei wird die Kodierung der Bitbefehle SET b,(HL) bzw. RES b,(HL) geschickt ausgenutzt:

;-------------------------------------------------------------------------------
; Punkt setzen
; in: L = X (Zeile), H = Y (Spalte)
;-------------------------------------------------------------------------------
 
; Adr := 0EC00h + 20h * (Zeile DIV 8) + Spalte DIV 8  
; Bit := 7-(Spalte MOD 8), Block := Zeile MOD 8
; Punkt (0,0) ist links oben
 
gpoint:		call	gr_on
gpoint1:	ld	a, h		; Spalte
		and	7		; Spalte MOD 8
		rlca
		rlca
		rlca			; * 8 f. Befehlsberechnung
		ld	b, a		; 
gpoint2:	ld	a, 0BEh		; Bitbefehl wird gepatcht
					; 0BEh RES 7, (HL) Bit löschen,
					; 0FEh SET 7, (HL) Bit setzen
					; SET b,(HL)     CB C6+8*b
					; RES b,(HL)     CB 86+8*b
		sub	b		; Bit einrechnen (7-Bit)
		ld	(gpoint4+1), a	; Befehl patchen
;
		srl	h		; Spalte DIV 8
		srl	h
		srl	h
		ld	c, h		; merken
;
		ld	a, l		; Zeile
		and	7		; Block := Zeile MOD 8
		out	(8), a
;
		srl	l		; Zeile
		srl	l
		srl	l		; Zeile DIV 8
		ld	b, l
		inc	b		; um 1 erhöhen, damit bei 0. Zeile keine 256 
					; Schleifendurchläufe
		ld	hl, 0EC00h-20h	; und hier deshalb wieder 1x Länge Bildzeile abziehen
		ld	de, 20h		; Länge Bildzeile
gpoint3:	add	hl, de		; 20h * (Zeile DIV 8)
		djnz	gpoint3
		add	hl, bc		; B=0; C=Spalte DIV 8
gpoint4:	set	0, (hl)		; Befehl Set/Res und Bit-Nr. wird gepatcht
		ret

© 1988,1989 by Tino Sander, Springen

  • Vollgrafik 256×256 Pixel, keine Farbe
  • Teilung des Bildschirms in 8 Bereiche; für jeden von diesen arbeitet ein 1K-RAM-Sektor des Grafikspeichers als programmierbarer Zeichengenerator mit 128 darstellbaren Zeichen
    oder
  • programmierbarer Zeichengenerator mit 256 darstellbaren Zeichen für den gesamten Bildschirmbereich
  • der 8KB-Grafikspeicher ist außerdem als zusätzlicher User-RAM nutzbar („Datenbank“)

Diese Lösung hat als Kern den gleichen Ansatz wie die Vollgrafik aus Kleinstrechnertipps 11, erweitert um die Nutzung des 8K-SRAMs als programmierbarer Zeichengenerator.

Zur Vollgrafik von Tino Sander gibt es ein umfangreiches Paket an Dokumentation und Software.