OLD*_åVAÿ_#¶+ é##"×Éÿ/ÿ/0@;;	*************************;	*			*;	*    Fast CRT-Routine	*;	*    for the KC 85/2	*;	*			*;	*************************;;;		(C) F.Klemm '87 Gera;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Konstanten:;HCADR	EQU 0B799HWINAN	EQU 0B79CHWINLG	EQU 0B79EHCRSR	EQU 0B7A0HSTBT	EQU 0B7A2HCOLOR	EQU 0B7A3HWEND	EQU 0B7A4HCCTL	EQU 0B7A6H;; Einschaltroutine;	ORG 3CC1H	;7CC1H;	DEFW 7F7FH	DEFM 'CRT'	DEFB 1	LD HL,CRT	LD (0B7C4H),HL	LD HL,POINT3	LD (0B7B9H),HL	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Bestimmen der Pixel- und Coloradr.; aus der rel. Cursorpos.; DE: rel. Cursor;   DE: Color;   HL: Pixel;   CY: au~erhalb; VR: AF,DE,HL;CADR	LD HL,(WINAN)	ADD HL,DENADR	LD A,H	ADD A	ADD A	ADD A	LD H,A;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Bestimmen der Pixel- und Coloradr.; aus der Zeile/Spalte; H: Zeile; L: Spalte; VR: F,DE,HL;PADR	PUSH AF	LD A,L	CP 32	JR NC,PADR2	ADD A		;erster Teil	ADD A	ADD A	PUSH BC	LD B,H	SRL H	SRL H	SCF	RR H	RRA	SRL H	RRA	LD D,H	SCF	RR D	SET 3,D	LD E,A	RR E	RR B	RRA	LD L,A	RR B	RL H	POP BC	POP AF	AND A	RET;PADR2	CP 40	JR NC,PADR3	AND 7		;zweiter Teil	ADD A	LD L,A	LD A,H	RLCA	AND 1	OR 0B0H	LD D,A		;H-Teil Farbe;	LD A,HPOINT7	RLCA	RLCA	PUSH BC	LD C,A	AND 3	OR 50H	LD B,H	LD H,A		;H-Teil Pixel			;ohne V1	LD A,B	AND 30H	OR L	LD L,A	LD A,C	RLCA	RLCA	AND 0C0H	OR L	LD L,A		;L-Teil Pixel u.			;Farbe ohne V0			;b.z.w. V6	RR B	RR L	RR B	RL H	RR C		;fehlende Bits	RRA		;einschieben	LD E,A	POP BC	POP AF	AND A	RET;PADR3	POP AF		;au~erhalb	SCF	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Pr}fen ob Cursor im Window; DE: rel. Cursor;   CY: au~erhalb; VR: AF;TCIF	LD A,(WINLG)	DEC A	SUB E	RET C	LD A,(WINLG+1)	DEC A	SUB D	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Bestimmen der Video-RAM Adr.; DE: rel. Cursor;   HL: Video-RAM Adr.;   CY:	au~erhalb; VR: F,HL;VADR	PUSH AF	CALL TCIF	JR C,PADR3	LD A,(WINAN)	ADD E	PUSH DE	LD E,A	LD A,(WINAN+1)	ADD D	ADD A	ADD A	ADD A	LD L,A	LD H,0	ADD HL,HL	ADD HL,HL	LD D,59H	ADD HL,DE	LD E,A	ADD HL,DE	POP DE	POP AF	AND A	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Vorder- und Hintergrundfarbe; vertauschen; A: alte Farbe;   A: neue Farbe; VR: A,C;COMPL	PUSH AF	AND 0C0H	LD C,A	POP AF	PUSH AF	AND 7	RLCA	RLCA	RLCA	OR C	LD C,A	POP AF	RRCA	RRCA	RRCA	AND 7	OR C	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Ausdrucken eines Zeichens in A auf; der rel. Pos. DE; A: ASCII; DE: rel. Cursor;   VR: /;DISP	PUSH HL	PUSH DE	PUSH BC	PUSH AF	LD C,A	LD A,(STBT)	LD B,A	CALL CADR	JR C,DISP5	BIT 1,B	JR NZ,DISP1	LD A,(COLOR)	;Farbe drucken	LD (DE),A	SET 5,E	LD (DE),ADISP1	BIT 0,B	JR NZ,DISP5	EX DE,HL	;Zeichen drucken	LD A,C	LD HL,CCTL	BIT 7,A	JR Z,DISP2	AND 7FH	LD L,CCTL+4DISP2	SUB 20H	JR C,DISP3	CP 40H	JR C,DISP4DISP3	ADD 20H	INC L	INC LDISP4	LD C,M	INC HL	LD H,M	LD L,C	ADD A	ADD A	LD C,A	LD B,0	ADD HL,BC	ADD HL,BC	;Anfang Zeichen	CALL DTETR	;in HL	SET 5,E	CALL DTETRDISP5	POP AF	POP BC	POP DE	POP HL	RET;DTETR	RES 0,D	CALL DDOUB	SET 0,DDDOUB	RES 7,E	LD A,M	INC HL	LD (DE),A	SET 7,E	LD A,M	INC HL	LD (DE),A	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Zerlegen des Windows in einen linken; und rechten Teil;   B: Anfang Teil I;   C: L{nge  Teil I;   D: Anfang Teil II;   E: L{nge  Teil II oder 00h; VR: AF,BC,DE;WIND	LD E,0	LD A,(WINAN)	LD B,A	CP 32	LD A,(WINLG)	LD C,A	RET NC	ADD B	CP 32	RET C	LD D,32	SUB D	LD E,A	LD A,D	SUB B	LD C,A	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Scrollen einer Zeile (8 Pixelzeilen); H: Zeile (0,4 ... 255); L: Anfang Zeile; A: L{nge; VR: F;LROLL	PUSH HL	PUSH DE	PUSH BC	LD C,A	PUSH HL	CALL PADR	JR C,LROLL1	EX (SP),HL	PUSH DE	LD A,H	ADD 8	LD H,A	CALL PADR	EX (SP),HL	EX DE,HL	LD B,0	LD A,C	CALL LINES	;Farbe scrollen	POP HL	POP DE	CALL TETR	;4 Pixel -""-	SET 0,H	SET 0,D	CALL TETR	;4 Pixel -""-LROLL2	POP BC	POP DE	POP HL	RET;LROLL1	POP HL	JR LROLL2;TETR	RES 7,L	RES 7,E	CALL LINES	SET 7,L	SET 7,ELINES	RES 5,L	RES 5,E	CALL LINE	SET 5,L	SET 5,ELINE	PUSH DE	PUSH HL	LD C,A	LDIR	POP HL	POP DE	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; Ausdrucken eines Zeichen auf dem; CRT mit Cursorsteuerung; A: ASCII;   DE: neuer Cursor; VR: AF,BC,DE,HL;CRT1	LD DE,(CRSR)	CP ' '	JR NC,PZEI	LD HL,STBT	BIT 3,M	JR NZ,PZEI	ADD A	LD HL,ACTAB	;Achtung !!!	LD C,A	LD B,0	ADD HL,BC	LD A,M	INC HL	LD H,M	LD L,ACHL	JP (HL);ATAB	LD A,E	AND 0F8H	ADD 8	LD E,A	JR ACUR+1;PZEI	CALL VADR	RET CPZEI1	LD M,A	CALL DISPACUR	INC E		;Cursor right	LD A,(WINLG)	DEC A	CP E	RET NCACR	LD E,0		;Cursor CRACUD	INC D		;Cursor down	LD A,(WINLG+1)	CP D	RET NZ	LD HL,(WEND)	JP (HL);AHCOPY	LD HL,(HCADR)	;Hardcopy	JP (HL);ACUL	LD A,E		;Cursor left	AND A	JR Z,CU1	DEC E	RETCU1	LD A,D	AND A	RET Z	DEC DACEOLN	LD A,(WINLG)	;Cursor eoln	DEC A	LD E,A	RET;ACUU	LD A,D		;Cursor down	AND A	RET Z	DEC D	RET;APAGE	LD HL,AHOME	;Page einsch.PA1	LD (WEND),HL	RETASCROLL	LD HL,SCR	;Scroll einsch.	JR PA1;ACLR	CALL ACUL	;ClearADEL	PUSH DE		;DeleteDEL1	CALL VADR	LD A,M	AND A	JR Z,DEL3	PUSH DE	PUSH HL	CALL ACUR	CALL VADR	LD A,M	POP HL	POP DE	AND A	JR Z,DEL2	CALL PZEI1	JR DEL1;AINS	PUSH DE		;Insert	LD A,' 'INS1	CALL VADR	LD B,M	CALL PZEI1	LD A,B	AND A	JR NZ,INS1DEL2	CALL VADR	LD M,A	LD A,' '	CALL DISPDEL3	POP DE	RET;CLLN	LD L,B		;L|schen einer	CALL PADR	;Zeile	RET C		; B: Anfang	LD A,(COLOR)	; C: L{nge	CALL CLINES	; H: Zeile	EX DE,HL	; VR:AF,BC,DE,HL	XOR A		;   A: 00h	CALL CTETR	SET 0,DCTETR	RES 7,E	CALL CLINES	SET 7,ECLINES	RES 5,E	CALL CLINE	SET 5,ECLINE	PUSH DE	LD B,CCLN1	LD (DE),A	INC E		;kein Seiten-	DJNZ CLN1	;}bertrag	POP DE	RET;ACLS	LD A,(WINLG+1)	;Cls	LD D,0CLS1	PUSH AF	CALL AESC	POP AF	INC D	DEC A	JR NZ,CLS1AHOME	LD D,0		;Home,PagemodusACCR	LD E,0		;CCR	RET;SCR	LD A,(WINLG)	;Scroll-Routine	LD C,A	LD B,0	LD A,(WINLG+1)	DEC A	JR Z,ONESC	;nur eine Zeile	PUSH DE	PUSH AF	LD DE,0	CALL VADR	JR C,SCR4	EX DE,HLSCR1	LD HL,40	ADD HL,DE	PUSH HL	PUSH BC	LDIR	POP BC	POP DE	INC H	BIT 3,H	JR NZ,SCR9	;illeg. Window	DEC A	JR NZ,SCR1	;VRAM gescrolltSCR9	LD A,(WINAN+1)	ADD A	ADD A	ADD A	LD H,A	CALL WINDSCR2	LD A,C	LD L,B	CALL LROLL	;1. Teil gescr.	LD A,E	AND A	JR Z,SCR3	;nur ein Teil	LD L,D	CALL LROLL	;2. Teil gescr.SCR3	LD A,H	ADD 8	LD H,A	POP AF	DEC A	PUSH AF	JR NZ,SCR2SCR4	POP AF	POP DEONESC	DEC D			;letzte Zeile			;l|schen ->;AESC	LD E,0		;Escape	PUSH DE	CALL VADR	LD A,(WINLG)	LD B,A	XOR AESC1	LD M,A	INC HL	DJNZ ESC1	;VADR gel|scht	POP DE	PUSH DE	LD A,(WINAN+1)	ADD D	ADD A	ADD A	ADD A	LD H,A		;Zeile in H	CALL WIND	PUSH DE	PUSH HL	CALL CLLN	POP HL	POP BC		;A=0	CP C		;Kontrolle,ob	JR Z,ESC2	;nur ein Teil	CALL CLLNESC2	POP DE	RET;ABEEP	LD A,7		;langer BeepsPOINT3	EQU $+1	CALL 0F003H	;f}r Error	DEFB 0	RET;AINVS	LD HL,COLOR	LD A,M	CALL COMPLLDHLA	LD M,A	RET;LDAHL	LD A,M	RET;AKBEEP	LD A,(IX+8)	XOR 20H	LD (IX+8),ARET	RET;; Startadressen;ACTAB	DEFW RET	DEFW ACLR	DEFW AESC	DEFW RET	;BRK	DEFW RET	DEFW ATAB	;Tabulator !!!	DEFW AINVS	;Invers !!!	DEFW ABEEP	DEFW ACUL	DEFW ACUR	DEFW ACUD	DEFW ACUU	DEFW ACLS	DEFW ACCR	DEFW RET	DEFW AHCOPY	DEFW AHOME	DEFW APAGE	DEFW ASCROLL	DEFW RET	DEFW AKBEEP	DEFW RET	DEFW RET	DEFW RET	DEFW ACEOLN	DEFW ACCR	DEFW AINS	DEFW RET	DEFW RET	DEFW RET	DEFW ACR	;Newline	DEFW ADEL;;*__*__*__*__*__*__*__*__*__*__*__*__*__;; CRT-Routine; A: ASCII; VR: /;CRT	PUSH HL	PUSH DE	PUSH BC	PUSH AF	CALL CRT1	LD (CRSR),DE	POP AF	POP BC	POP DE	POP HL	RET;;*__*__*__*__*__*__*__*__*__*__*__*__*__;.;Ende