	PAGE 60
	ENTRY GETGW
	EXT XMIN,YMIN,XMAX,YMAX,MULTAC
	.Z80
	.COMMENT #

Subroutine  GETGW  liefert das Grafik-Wort, das den Plottpunkt (x,y) enthaelt,
aus dem Video-RAM.

Einsprung ueber Entry  GETGW  mit Adresse von x in HL, Adr.von y in DE
und Adr.von Byte in BC	 ( z.B. FORTRAN-Aufruf  CALL GETGW(IX,IY,IW) ).
Die Koordinaten gelten bezgl. des Fensters XMIN <= x <= XMAX und
YMIN <= y <= YMAX.
Falls die Grenzen ueberschritten sind oder das Video-Byte kein Grafik-
zeichen ist, ist Wort = 0.

Die Byte-Position im Video-RAM wird wie folgt bestimmt:
x' = x+XMIN	x"=[x'/2]
y' = y+YMIN	y"=[y'/4]
DE = VRAMA + (LINES - 1 - y")*COLS + x"	Attribut-Byte-Pos. im Video RAM
HL = COFFS + DE				Char.-Byte-Pos.

Bitkombinationen mit gesetztem 7.Bit sind als invertiertes Komplement
dargestellt (Attribut-Bit 0 gesetzt).

Die externen Variablen XMIN,YMIN und XMAX,YMAX im Modul PUTP enthalten
die Grenzen des momentanen Plott-Fensters. Sie werden mit der Routine
WINDOW gesetzt.

A.Herrmann	27.11.83
#
LINES	EQU 24		; Zeilen auf Bildschirm
COLS	EQU 80		; Spalten auf Bildschirm
VRAMA	EQU 0E000H	; Video RAM Adresse der Attribute
COFFS	EQU 00800H	; Offset zur Video RAM Adresse der Zeichen
VPORT	EQU 28H		; Video Port Adresse
GCS	EQU 02		; Attribut fuer graf. Zeichensatz
;
GETGW:	PUSH BC		; Rette Pointer auf Ausgangsvariable
	LD C,(HL)
	INC HL
	LD B,(HL)	; x in BC
	EX DE,HL
	LD E,(HL)
	INC HL
	LD D,(HL)	; y in DE
;
	XOR A		; Ausgangswert init.
	LD HL,(XMIN)
	PUSH HL
	ADD HL,BC
	LD B,H
	LD C,L		; x' in BC
	POP HL
	SCF
	SBC HL,BC
	JP P,GETGW6	; x' < XMIN ?
	LD HL,(XMAX)
	SCF
	CCF
	SBC HL,BC
	JP C,GETGW6	; x' > XMAX ?
	LD HL,(YMIN)
	PUSH HL
	ADD HL,DE
	EX DE,HL	; y' in DE
	POP HL
	SCF
	SBC HL,DE
	JP P,GETGW6	; y' < YMIN ?
	LD HL,(YMAX)
	SCF
	CCF
	SBC HL,DE
	JP C,GETGW6	; y' > YMAX ?
;
	LD D,E		; D=y'
	LD E,C		; E=x'
;
	LD A,D
	AND 3
	NEG
	ADD A,3
	SRL D
	SRL D		; D = y"
	SRL E		; E = x"
	LD A,LINES-1
	SUB D
	LD C,COLS
	CALL MULTAC	; HL = A*C
	LD D,0
	ADD HL,DE
	LD DE,VRAMA
	ADD HL,DE	; Attribut-Byte Adresse
	LD DE,COFFS
	EX DE,HL
	ADD HL,DE	; Character-Byte Adresse
	OUT (VPORT),A
	LD A,(DE)	; Lies Attribut Byte
	OUT (VPORT),A
	BIT 1,A		; Im Graphic Char.Set?
	JR NZ,GETGW4
	XOR A		; Nein, Ausgabe = 0
	JR GETGW6
GETGW4:	BIT 0,A		; Ja, invertiertes Komplement
	OUT (VPORT),A
	LD A,(HL)	; des Grafik-Byte ?
	OUT (VPORT),A
	JR Z,GETGW6
	CPL		; Ja, komplementieren.
GETGW6:	POP BC
	LD (BC),A	; In Ausgangsvariable schreiben
	RET		; Exit
;
	END



