˙˙˙˙ 6Ÿd; NASSYS CRT DRIVER WITH DMA SUPPORT ; ----------------------------------0;@; for original 48*16 Video Ram 800..BFFP; and FDC Card (80 BUS JOURNAL).`; Option: Synchronisation Video <> CPUp; with WAIT€; Constantin Olbrich 27.7.8ă˙˙˙˙!64;; EQUATES; ------- ;0CR EQU #0D@LF EQU #0APCLS EQU #0C`BS EQU #08pCUL EQU #11€CH EQU #17ESC EQU #1BCCR EQU #18CUU EQU #13 CUD EQU #140CSL EQU #15@CSR EQU #16PCUR š˙˙˙˙"6 EQU #12`;€CURSOR EQU #0C29 ;VL1 EQU #080A‚VL15 EQU #0B8ADMA EQU #14 ;DMA ADRESS;; DRIVER ; ------0CRT OR A ;IGNORE NULL@ RET Z ; ORP PUSHp˙˙˙˙#6 AF ; LF` CP LFp JR Z,CRT2€; CP CLS ; CLEAR JR NZ,CRT6; CLEAR TOP LINE  LD HL,VL10 PUSH HL@ LD (HL),"P LD C,DMA` LD HL,TAB3p LD B×˙˙˙˙$6,TAB4-TAB3€ OTIR PUSH HL LD B,16CR3 LD (HL),0  INC HL0 DJNZ CR3@; COPY DOWN SCREENP POP HL` LD B,TABEND+1-TAB4p OTIR€ POP HL; SET HL TO LEFT SIDECRT0 CALL ˙˙˙˙%6CPOS; SAVE CURSOR CRT1 LD (CURSOR),HL0;@; RETURNPCRT2 POP AF` RET;; SET HL TO CURSOR CRT6 LD HL,(CURSOR)0;@ CP BS ;BACKSPC?P JR NZ,CRT14`CRT8 PUSH AFp; IGNORE MARGINS€CRT10 ˙˙˙˙&6 DEC HL LD A,(HL) OR A JR Z,CRT10  POP AF0 CP CUL ;CURSOR LEFT1 JR Z,CRT12@ LD (HL),"PCRT12 RCAL CTST` JR CRT2pCRT14 CP CUL ;CURSOR LEFT€ ś˙˙˙˙'6 JR Z,CRT8; ; HOME, ESC CP CH ;HOME JR Z,CRT00 CP ESC ;ESCAPE@ JR NZ,CRT20P CALL CPOS` LD B,48p CRT18 LD (HL)," ;******€ INC HL ™˙˙˙˙(6 ;****** DJNZ CRT18 ;***** JR CRT0; ; NEW LINE, CCR0CRT20 CP CR ;CR@ JR Z,CRT38P CP CCR` JR NZ,CRT25p PUSH HL€ CALL CPOS POP DE (˙˙˙˙) 6 OR A SBC HL,DE  ADD HL,DE0 JR Z,CRT1@ JR CRT38P;`; CUU, CUDpCRT25 CP CUU ;CURSOR UP€ JR NZ,CRT28 LD DE,-64CRT26 ADD HL,DE RCAL CTST  JR CRT20CRT28 ×˙˙˙˙* 6 CP CUD ;CURSOR DOWN@ JR NZ,CRT29P LD DE,64` JR CRT26p;€; CSL, CSRCRT29 CP CSL ;CSL JR NZ,CRT32CRT30 INC HL  LD A,(HL)0 DEC HL@ OR AP JR Nö˙˙˙˙+ 6Z,CRT31` LD (HL),"p JR CRT2€CRT31 LD (HL),A INC HL JR CRT30CRT32 CP CSR ;CSR  JR NZ,CRT340 LD B,"@CRT33 LD A,(HL)P OR A` JR Z,CRT2p LD (HL),B€ ą˙˙˙˙, 6 LD B,A INC HL JR CRT33; ; TEST IF CURSOR ON SCREEN0CTST LD DE,VL1@ OR AP SBC HL,DE` ADD HL,DEp RET C€ LD DE,VL15+48 OR A SBC HL,DE ADD HL,DE  ˙˙˙˙- 6 RET NC0 POP AF@CT8 JP CRT1P;`; CUR, OTHERSpCRT34 CP CUR ;CUR€ JR Z,CRT36 LD (HL),A; IGNORE MARGINSCRT36 INC HL  LD A,(HL)0 OR A@ JR Z,CRT36P;`; TEST NEEDc˙˙˙˙.6 FOR CRp LD DE,VL15+64€ OR A SBC HL,DE ADD HL,DE JR NZ,CT8 ;0; DO NEW LINE@CRT38 RCAL CPOSP LD DE,64` ADD HL,DEp RCAL CTST€;; SCROLL UPCRT40 LD C,DMA LD ř˙˙˙˙/6HL,TAB1  LD B,TAB2-TAB10 OTIR@; CLEAR BOTTOM LINEP LD A,"` LD (#0B8A),Ap LD B,TAB3-TAB2€ OTIR… POP HL JR CT8 ; ; SET HL TO START OF LINE CPOS LD A,L0 AND #C0@ ÷˙˙˙˙06 ADD A,#0AP LD L,A` RETp ;€ ; TABLES ; ------!TAB1 DEFB #C3 ;RESET DMA! DEFB #7D ;WR 0 ! DEFW #084A ;VL20! DEFW #0370 ; LENGTH@! DEFB #AD ˙˙˙˙16 ;WR 4P! DEFW VL1 ;VL1`! DEFB #54 ;WR 1p! DEFB #CD ;PORTA TIME€! DEFB #50 ;WR 2! DEFB #CD ;PORTB TIME" DEFB #92 ;WR5" Ř˙˙˙˙26 DEFB #CF ;LD STARTADR " DEFB #B3 ;FORCE RDY0" DEFB #87 ;ENABLE DMA@";P"; LOESCHE UNTERSTE ZEILE`"TAB2 DEFB #C3,#7Dp" DEFW #0B8A€" DEFW #0046" DEFB #AD# DEFWˆ˙˙˙˙36 #0B8B# DEFB #54,#CD,#50,#CD # DEFB #92,#CF,#B3,#870#;@#; LOESCHE OBERSTE ZEILEP#TAB3 DEFB #C3,#7D`# DEFW VL1p# DEFW #0046€# DEFB #AD# DEFW #080B$ DEFB #54,#CD,#50,#CD$ DEFB #92,#CF,”˙˙˙˙46#B3,#87 $;0$; COPIERE OBERSTE ZEILE NACH UNTEN@$TAB4 DEFB #C3,#7DP$ DEFW VL1`$ DEFW #03B0p$ DEFB #AD€$ DEFW #084A$ DEFB #54,#CD,#50,#CD% DEFB #92,#CF,#B3,#87%TABEND EQU $-1 %;0 ENT0LOOP5˙˙˙˙56 PUSH HL0 PUSH DE0 SCAL #7B0 POP DE0 POP HL 0 CALL CRT00 CP "@@0 JR NZ,LOOPP0 SCAL #5B˙ ) Š 6 6+6.61636:6;6G6K6\6c6x66„66‘6›6Ÿ6Ľ6Ž6ż6Â6Ç6Ő6Ý6ň6ů6 77,7<Ś˙˙˙˙6:7=7ç’