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