.Z80 title sysloop ; SYSTEMSCHLEIFE FUER D004 MicroDOS ; K.-D. KIRVES ; 06.02.88 ; VEREINBAHRUNGEN EXTERNAL SIDE0,SIDE1,SIDE2,SIDE3,CIBUFF EXTERNAL COBUFF,LOBUFF,AIBUFF,AOBUFF,ZCIK EXTERNAL ZCIF,ZAIK,ZAIF,ZCOK,ZCOF,ZAOK EXTERNAL ZAOF,ZLOK,ZLOF,AIANF,MEMANF,TRACK EXTERNAL SECTOR,CONTR,SIZE EXTERNAL IOBYTE GLOBAL BST1,BSMOD,CLS8,LOPLD,LOPEND GLOBAL KTAB,ESCTAB,SCR,SCR4EN,SCR4LD GLOBAL KC4,CC4,CC4LD,CC4END,OUT4,OUT4LD GLOBAL OUT4EN,OUTINC,CC KOPIN EQU 384H KOPOUT EQU 382H OUTLST EQU 202H bst1 EQU 3D00H CAOS EQU 0F003H KOPPUF EQU 0FD00H ;UEBERGABEPUFFER ; LOPLD EQU $ .PHASE 400H ;SYSTEMSCHLEIFE VERSION 1.1 ; GENERIERT FUER BILDSCHIRM,TASTATUR ,DRUCKER ; V.24KOPPLUNG, RAM-FD 16 UND 64K SYSLOP: LD BC,256*ZCOF+SIDE3 IN E,(C) ;ZEIGER FD DEC B IN A,(C) CP E ;AUSGABEDATEN? LD D,A ;ZEIGER KC JR NZ,SY1 ;->VORH. LD A,(CURMER) AND A JR NZ,SY2 ;CURSOR=ON? CALL CUCPL ;CURSOR ON LD A,1 LD (CURMER),A JR SY2 ; SY1: LD A,(CURMER) AND A JR Z,SY01 CALL CUCPL XOR A LD (CURMER),A SY01: LD A,COBUFF ADD A,D ;KC-ZEIGER INC D PUSH BC LD B,A IN A,(C) LD L,0 CALL ADR POP BC JR C,SY2 LD A,D AND 1FH OUT (C),A SY2: LD B,ZCIF ;TASTATURABFRAGE IN E,(C) ;ZEIGER FLOPPY DEC B IN D,(C) ;ZEIGER KC LD A,D INC A AND 1FH LD L,A CP E ;PUFFER VOLL ? JR Z,SY3 ;VOLL -> CALL KEY80 ;TASTATURROUTINE JR Z,SY3 ;Z=1 KEINE TASTE PUSH BC LD B,D OUT (C),A ;DATEN -> PUFFER POP BC OUT (C),L ;ERHOEHTER ZEIGER SY3: LD B,ZLOF ;LISTAUSGABE IN E,(C) DEC B IN D,(C) LD A,D CP E ;DATEN VORH.? JR Z,SERANF LD A,LOBUFF ;PUFFER ADD A,D ;ZEIGER IN PUFFER INC D ; ERHOEHT PUSH BC ;ZEIGERADRESSE LD B,A IN A,(C) LD L,3 ;LISTKANAL CALL ADR ;DRUCKERAUSGABE POP BC LD A,D AND 1FH ;BEGRENZUNG OUT (C),A ;ERHOEHTER ZEIGER SERANF: LD B,AIANF ;ANF. SERIO IN A,(C) AND A JR Z,SER1 XOR A OUT (C),A LD B,ZAIF IN E,(C) DEC B IN D,(C) LD A,D INC A AND 1FH LD L,A CP E JR Z,SER1 PUSH HL LD L,2 CALL ADR POP HL PUSH BC LD H,A LD A,AIBUFF ADD A,D LD B,A OUT (C),H POP BC OUT (C),L SER1: LD B,ZAOF ;ZEIGER AUSG. IN E,(C) DEC B IN D,(C) LD A,D CP E JR Z,RFDANF LD A,AOBUFF ADD A,D INC D PUSH BC LD B,A IN A,(C) LD L,1 CALL ADR POP BC LD A,D AND 1FH OUT (C),A RFDANF: LD B,SIZE ;ANF RAM-FD IN L,(C) ;GROESSE DEC B IN H,(C) ;CONTROL LD A,H CP 2 ;ANF? JR C,SYSLP1 DEC B IN D,(C) ;SEKTOR DEC B IN E,(C) ;SPUR INC B INC B LD A,L INC A CP E JR NC,RF1 ;NICHT VORH. RFER: LD A,1 ;FEHLER RFEND: OUT (C),A SYSLP1: JP SYSLOP ; RF1: PUSH BC ;CONTR-ADR LD C,E ;TRACK LD E,H ;CONTR LD HL,BST1-1 LD B,0 AND A SBC HL,BC SBC HL,BC LD B,M ;MODULSCHACHT DEC HL LD A,M ;STEUERWORT PUSH DE LD L,B LD D,A LD E,A LD A,2 CALL CAOS DEFB 26H IN A,(88H) ;PIO RES 2,A ;IRM off OUT (88H),A POP DE ;SWITCH PUSH HL ;MODULADR. LD C,D ;SEKTOR LD B,0 LD A,7 RF2: SLA C RL B DEC A JR NZ,RF2 ;SEKTOR*80H LD HL,8000H ;BASISADRESSE ADD HL,BC ;HL=SEKTORANFANG LD A,E ;CONTR CP 6 LD C,0F2H ;PUFFERADRESSE LOW JR Z,RFWRIT RFREAD: LD E,80H LD BC,1F2H RFR1: OUTI INC B INC B DEC E JR NZ,RFR1 RFR2: POP HL ;MODULADRESSE IN A,(88H) ;PIO SET 2,A ;IRM ON OUT (88H),A LD D,0 ;MODUL OFF LD E,D LD A,2 CALL CAOS DEFB 26H ;SWITCH POP BC ;CONTR-ADR XOR A JR RFEND ; RFWRIT: LD B,0 LD E,80H RFW1: INI INC B INC B DEC E JR NZ,RFW1 JR RFR2 ; ;I/O-TABELLE IOTAB: DEFW OUT80 ;COM TTY DEFW OUT80 ;CRT DEFW OUTLST ;BAT DEFW KOPOUT ;UC1 DEFW KOPOUT ;PUN TTY DEFW OUTLST ;PTP DEFW CUOUT1 ;UP1 DEFW CUOUT2 ;UP2 DEFW KOPIN ;RDR TTY DEFW PRET ;PTR DEFW CUIN1 ;UR1 DEFW CUIN2 ;UR2 DEFW OUTLST ;LST TTY DEFW OUT80 ;CRT DEFW KOPOUT ;LPT DEFW CUOUT1 ;UL1 PRET: RET ADR: PUSH DE PUSH AF LD A,L PUSH BC LD B,IOBYTE IN C,(C) LD B,A LD HL,IOTAB AND A LD A,C JR Z,AR1 AR2: RRCA RRCA INC HL INC HL INC HL INC HL INC HL INC HL INC HL INC HL DJNZ AR2 AR1: AND 3 JR Z,AR3 AR4: INC HL INC HL DEC A JR NZ,AR4 AR3: LD A,M INC HL LD H,M LD L,A POP BC POP AF CALL CALLM POP DE RET ; CALLM: JP (HL) ; CUOUT1: LD E,2 DEFB 21H CUOUT2: LD E,3 DEFB 21H CUIN1: LD E,6 DEFB 21H CUIN2: LD E,7 JP 0F009H ;--> CAOS ; INCLUDE TAST80.MAC INCLUDE OUT80.MAC .DEPHASE LOPEND EQU $ SCR4LD EQU $ .PHASE SCR SCR4: LD DE,8008H LD HL,8012H LD A,40 SCR40: LD BC,0EEH LDIR LD BC,12H ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL DEC A JR NZ,SCR40 LD H,080H LD C,028H S42: LD B,8 LD L,0F8H S41: LD M,0 INC HL DJNZ S41 DEC C JR NZ,S42 RET .DEPHASE SCR4EN EQU $ CC4LD EQU $ .PHASE CC CC4: CALL UPAD4 CC41: LD A,(HL) XOR C LD (HL),A INC HL DJNZ CC41 JP CUCPOP .DEPHASE CC4END EQU $ OUT4LD EQU $ .PHASE OUTINC OUT4: PUSH BC ;CURSOR->HL POP HL CALL UPAD4 OUT44: PUSH BC LD A,(DE) AND C LD B,A LD A,C CPL AND M OR B LD M,A POP BC INC HL INC DE DJNZ OUT44 JP CUR8 ; UPAD4: SRL L LD C,0F0H JR NC,OUT42 LD C,0FH OUT42: LD A,80H ;INPUT:HL=CURSOR ADD A,L OUT40: LD B,H LD H,A LD A,B ADD A,A ;*2 ADD A,A ;*4 ADD A,A ;*8 ADD A,B ;*9 ADD A,B ;*10 ADD A,8 ;ANFANGSWERT LD L,A LD B,8 RET .DEPHASE OUT4EN EQU $ END