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

WRWIN(IFELD)

Subroutine  WRWIN  schreibt das Integer-Feld IFELD in das momentane Plott-
Fenster im Video-RAM.

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

Die Ausgabe erfolgt von YMAX nach YMIN und von XMIN nach XMAX, also zeilen-
weise von oben nach unten und von links nach rechts.
Das Attribut-Byte wird aus dem Low Byte, das Character-Byte aus dem High Byte
des Integer-Elements geholt.
Das Feld muss ausreichend dimensioniert worden sein.

Die Byte-Position jeder Zeile im Video-RAM wird wie folgt bestimmt:
x' = XMIN	x"=[x'/2]
B  = [XMAX/2]-[XMIN/2]+1		Spaltenzaehler
y' = YMAX	y"=[y'/4]
C  = [YMAX/4]-[YMIN/4]+1		Zeilenzaehler
DE = VRAMA + (LINES - 1 - y")*COLS + x"	Attribut-Byte-Pos. im Video RAM
HL = COFFS + DE				Char.-Byte-Pos.
DE = DE+1 usw. bis B=0
y' = y'-4 usw. bis C=0

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	18.12.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
;
WRWIN:	LD (FELD),HL	; Rette Pointer auf Eingangsfeld
	LD A,(XMIN)
	SRL A
	LD B,A
	LD A,(XMAX)
	SRL A
	SUB B
	INC A
	LD B,A		; B = x-Count
	LD A,(YMIN)
	SRL A
	SRL A
	LD C,A
	LD A,(YMAX)
	SRL A
	SRL A
	SUB C
	INC A
	LD C,A		; C = y-Count
;
	LD HL,XMIN
	LD E,(HL)	; xmin in E
	LD HL,YMAX
	LD D,(HL)	; ymax in D
;
WRWIN1:	PUSH DE		; Rette Anf'koord. der Zeile
	PUSH BC		; Rette Anf'stand der Counter
	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
	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
;
WRWIN2:	PUSH BC		; Spalten-Loop
	LD HL,(FELD)
	LD A,(HL)	; Hole Attr.Byte
	INC HL
	LD B,(HL)	; Hole Char.Byte
	INC HL
	LD (FELD),HL
	LD HL,COFFS
	ADD HL,DE	; Character-Byte Adresse in HL
	DI
	OUT (VPORT),A
	LD (DE),A	; Schreibe Attribut Byte
	LD (HL),B	; Schreibe Character Byte
	OUT (VPORT),A
	EI
	INC DE
	POP BC
	DJNZ WRWIN2	; Naechste Spalte
	LD A,C
	POP BC
	LD C,A
	POP DE
	LD A,-4
	ADD A,D
	LD D,A
	DEC C
	JP NZ,WRWIN1	; Naechste Zeile
	RET		; Exit
;
FELD:	DW 0		; Feld-Index
;
	END



