	PAGE 60
	ENTRY RDWING
	EXT XMING,YMING,XMAXG,YMAXG,MULTAC
	.Z80
	.COMMENT #

RDWING(IFELD)

Subroutine  RDWING  schreibt das gesamte momentane Grauwert-Fenster aus dem 
Video-RAM in das Integer-Feld IFELD.

Einsprung ueber Entry  RDWING  mit Anfangsadresse des Integer-Feldes in HL.

Die Ausgabe erfolgt von YMING nach YMAXG und von XMING nach XMAXG, 
also zeilenweise von oben nach unten und von links nach rechts.
Das Attribut-Byte wird ins Low Byte, das Character-Byte ins High Byte des
Integer-Elements geschrieben
Das Feld muss passend dimensioniert worden sein.

Die Byte-Position jeder Zeile im Video-RAM wird wie folgt bestimmt:
x' = XMING
B  = XMAXG-XMING+1		Spaltenzaehler
y' = YMING	y"=[y'/2]
C  = [YMAXG/2]-[YMING/2]+1	Zeilenzaehler
DE = VRAMA + y"*COLS + x'	Attribut-Byte-Pos. im Video RAM
HL = COFFS + DE			Char.-Byte-Pos.
DE = DE+1 usw. bis B=0
y' = y'+2 usw. bis C=0

Die externen Variablen XMING,YMING und XMAXG,YMAXG im Modul PUTG enthalten
die Grenzen des momentanen Plott-Fensters. Sie werden mit der Routine
WINDWG gesetzt.

A.Herrmann	21.02.85
#
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
;
RDWING:	LD (FELD),HL	; Rette Pointer auf Ausgangsfeld
	LD A,(XMING)
	LD B,A
	LD A,(XMAXG)
	SUB B
	INC A
	LD B,A		; B = x-Count
	LD A,(YMING)
	SRL A
	LD C,A
	LD A,(YMAXG)
	SRL A
	SUB C
	INC A
	LD C,A		; C = y-Count
;
	LD HL,XMING
	LD E,(HL)	; xmin in E
	LD HL,YMING
	LD D,(HL)	; ymin in D
;
RDWIN1:	PUSH DE		; Rette Anf'koord. der Zeile
	PUSH BC		; Rette Anf'stand der Counter
	SRL D		; D = y", E = x'
	LD A,D
	PUSH BC
	LD C,COLS
	CALL MULTAC	; HL = A*C
	POP BC
	LD D,0
	ADD HL,DE
	LD DE,VRAMA
	ADD HL,DE	; 1.Attribut-Byte Adresse
	EX DE,HL	; in DE
;
RDWIN2:	PUSH BC		; Spalten-Loop
	LD HL,COFFS
	ADD HL,DE	; Character-Byte Adresse in HL
	DI
	OUT (VPORT),A
	LD A,(DE)	; Lies Attribut Byte
	LD B,(HL)	; Lies Character Byte
	OUT (VPORT),A
	EI
	LD HL,(FELD)
	LD (HL),A	; Schreibe Attr.Byte
	INC HL
	LD (HL),B	; Schreibe Char.Byte
	INC HL
	LD (FELD),HL
	INC DE
	POP BC
	DJNZ RDWIN2	; Naechste Spalte
	LD A,C
	POP BC
	LD C,A
	POP DE
	INC D
	INC D
	DEC C
	JP NZ,RDWIN1	; Naechste Zeile
	RET		; Exit
;
FELD:	DW 0		; Feld-Index
;
	END
