.Z80 .PHASE 0 ;UNIVERSELLES DIENSTPROGRAMM ZUR CAOS-BETRIEBSART ;COPYRIGHT BY K.-D. KIRVES ; 07.02.89 ; GLOBAL FILTAB,GETPAR,ANZAHL,PARN,SORTIR,CLEND CAOS EQU 0F003H ARGN EQU 0B781H ARG1 EQU ARGN+1 ARG2 EQU ARG1+2 ARG3 EQU ARG2+2 PROL EQU 0FDFDH WINON EQU 0B79CH WINLG EQU WINON+2 CURSOR EQU WINLG+2 STBT EQU CURSOR+2 COLOR EQU STBT+1 STACK EQU 0B7AEH PUFF EQU 0B700H FKEY EQU 0B7D1H STBT EQU 0B7A2H NUMNX EQU 0B796h ;ANZAHL ZIFFERN NUMYX EQU 0B797H ;ZAHL ; VORBL: DEFS 16,0 DEFB 3 DEFW 300H DEFW PARN DEFW START DEFS 80H-$,0 .DEPHASE .PHASE 300H START: CALL DIR ;MENUEINABE MENIN: LD SP,(STACK) LD A,(COLOR) LD (COLMER),A LD A,3AH LD (COLOR),A LD A,'k' CALL CAOS DEFB 24H LD A,(COLMER) LD (COLOR),A XOR A LD (PAGAKT),A CALL CAOS DEFB 17H ;INLINE LD (IY+4),0 INC DE LD A,(DE) AND A JR Z,MENIN CP ' ' JR Z,MENIN LD A,LOW(PROL) LD HL,300H LD BC,1000H CALL CAOS DEFB 1DH JR C,MEN2 ;->GEFUNDEN CALL CAOS DEFB 23H DEFM 'kein Kommando - gib ? ein fuer Liste' DEFW 0A0DH DEFB 0 JR MENIN ; MEN2: PUSH HL CALL GETPAR JR NC,MEN3 MEN5: POP HL PARFEL: CALL CAOS DEFB 23H DEFM 'Parameter fehlerhaft' DEFW 0A0DH DEFB 0 JP MENIN ; MEN3: LD A,(PARN) CALL FILTAB JR C,MEN5 MEN4: LD HL,MENIN EX (SP),HL INC HL PUSH HL ;PROGRAMMAUFRUF PARA: LD A,(PARN) LD HL,(P1) LD DE,(P2) LD BC,(P3) RET ;TABELLE DER MIT NUMMERN AUSGEWAEHLTEN FILES FILTAB: XOR A LD (NUMANZ),A ;KEIN FILE LD A,(PARN) AND A RET Z LD B,A LD HL,P1+2 ;->'-' LD C,0 LD DE,FILES FIL1: LD A,M AND A ;- ? JR Z,FIL2 ;->NEIN DEC B JR NZ,FIL4 ;ENDE PAR INC B FIL7: LD A,C LD C,(IY) DEC C JR FIL5 ; FIL4: INC HL LD A,M ;NEXT PAR INC HL INC HL CP (IY) JR NC,FIL7 CP C RET C ;ENDE <= ANFANG PUSH DE LD E,A LD A,C LD C,E POP DE ;A<->C FIL5: FIL6: INC A AND 7FH PUSH HL PUSH BC CALL TESTIN POP BC POP HL CP C JR NZ,FIL6 FIL10: INC HL INC HL INC HL DJNZ FIL1 AND A RET ;FERTIG ! ;NORMALE PARAMETER FIL2: DEC HL DEC HL LD A,M CP (IY) JR NC,FIL12 ; FIL8: PUSH BC PUSH HL CALL TESTIN POP HL POP BC JR C,FIL12 LD C,A FIL12: INC HL INC HL JR FIL10 ;TEST A IN FILES TESTIN: LD HL,NUMANZ LD B,(HL) INC (HL) DEC (HL) JR Z,TESIN3 TESIN1: INC HL CP (HL) JR Z,TESIN2 DJNZ TESIN1 TESIN3: LD (DE),A INC DE LD HL,NUMANZ INC (HL) AND A RET ; TESIN2: SCF RET ; ; PARAMETERERFASSUNG GETPAR: LD BC,PARN PUSH BC PUSH DE XOR A LD E,31 GET0: LD (BC),A INC BC DEC E JR NZ,GET0 POP DE POP BC INC BC PAR3: LD A,(DE) AND A RET Z CP ' ' INC DE JR Z,PAR3 DEC DE CP '-' JR NZ,PAR4 XOR A LD (BC),A INC BC LD (BC),A INC BC INC A LD (BC),A INC BC INC DE PAR6: LD HL,PARN INC (HL) LD A,M CP 11 JP C,PAR3 SCF RET ; PAR4: CALL CAOS DEFB 18H LD A,(HL) OR A SCF RET Z INC HL LD A,M LD (BC),A INC HL INC BC LD A,M LD (BC),A INC BC INC BC JR PAR6 ; DIR-ERFASSUNG UND ANZEIGE DEFW PROL DEFM 'DIR' DEFB 1 LD A,(PARN) AND A JR Z,DIR1 LD A,(P1) AND 1 LD (DIR01),A DIR1: CALL DIR RET ; DIR: XOR A ; LD HL,SORFIL DIR00: LD M,A ;BELEGEN SORFIL NACH SORT 0 INC HL INC A BIT 7,A JR Z,DIR00 LD IY,ANZAHL LD (IY),0 LD A,0DH ;OPEN DIR LD HL,DIRPUF DIR5: CALL ANFORD JP NZ,ERROR BIT 2,A JR NZ,DIR6 ;ENDE ERFASSUNG LD BC,82F3H LD D,3 DIR4: LD E,11 EX AF,AF' AND A EX AF,AF' DIR2: IN A,(C) INC B AND A JR Z,DIRA CP 20H JR Z,DIRA EX AF,AF' SCF EX AF,AF' DIRA: LD (HL),A INC HL DEC E JR NZ,DIR2 INC B ;UEBERLESEN SPACE EX AF,AF' JR NC,DIR3 INC (IY) ;ERHOEHEN ANZAHL DIR3: EX AF,AF' DEC D JR NZ,DIR4 LD A,5 JR DIR5 ; DIR6: LD A,(SORT) ;SORTIEREN ? AND A JR Z,DIR60 CALL SORTIR DIR60: LD A,(WINDOW) ;MODUS ? AND A JP Z,NOWIND LD HL,0 LD (WINON),HL LD HL,2028H LD (WINLG),HL LD A,0CH ;CLS CALL CAOS DEFB 24H LD A,(COLOR) LD (COLMER),A ;MERKEN FARBE LD A,(IY) ;ANZAHL LD B,0 ;ANFANG SEITE 0/1 CP 65 JR C,DIR7 BIT 0,A JR Z,DIR8 INC A DIR8: RRA ;ANZAHL/2 LD C,A ;ANZAHL SEITE 0 LD B,0 ;ANFANG LD A,(DIR01) AND A JR Z,DIR9 ;SEITE 0 LD B,C ;ANFANG SEITE 1 LD A,(IY) SUB C DIR7: LD C,A ;ANZAHL SEITE 1 DIR9: LD HL,DIRPUF ; LD DE,SORFIL LD A,B ADD A,E LD E,A JR NC,DIR90 INC D DIR90: LD A,(DE) ;UMGERECHNETE NUMMER LD E,A ;ANFANG LD D,0 LD A,11 DIR10: ADD HL,DE DEC A JR NZ,DIR10 ;*11 DIR11: LD A,07 LD (COLOR),A LD A,B CALL CAOS DEFB 1CH ;AHEX INC B LD A,38H LD (COLOR),A LD E,11 DIR12: LD A,M CALL CAOS DEFB 24H INC HL DEC E JR NZ,DIR12 DEC C JR Z,DIR13 LD A,(CURSOR) CP 39 JR NZ,DIR9 CALL CAOS DEFB 2CH ;CRLF JR DIR9 ; DIR13: CALL CAOS DEFB 2CH ;CRLF LD A,(CURSOR+1) LD (WINON+1),A LD B,A LD A,32 SUB B LD (WINLG+1),A DEC A LD (PAGZAL),A ;PAGING ZAEHLER LD A,(COLMER) LD (COLOR),A ;ALTEFARBE LD HL,0 LD (CURSOR),HL RET ;DIRECTORY OHNE WINDOW NOWIND: LD HL,DIRPUF LD B,0 NOW1: LD C,3 NOW2: LD A,(COLOR) LD (COLMER),A LD A,7 LD (COLOR),A LD A,B CALL CAOS DEFB 1CH ;AHEX LD A,(COLMER) LD (COLOR),A CALL CAOS DEFB 2BH ;SPACE FUER DRUCKER LD A,(CURSOR) DEC A LD (CURSOR),A LD HL,SORFIL LD E,B LD D,0 ADD HL,DE LD A,(HL) ;UMGERECHNETE NUMMER LD HL,DIRPUF LD E,A LD A,11 NOW01: ADD HL,DE DEC A JR NZ,NOW01 LD E,11 NOW3: LD A,M CALL CAOS DEFB 24H INC HL DEC E JR NZ,NOW3 INC B LD A,(ANZAHL) CP B ;ENDE ? JR Z,NOW4 DEC C JR NZ,NOW20 CALL CRLF JR NOW1 ; NOW20: CALL CAOS DEFB 2BH ;SPACE FUER DRUCKER LD A,(CURSOR) DEC A LD (CURSOR),A JR NOW2 ; NOW4: CALL CRLF RET ; DEFW PROL DEFM 'EXIT' DEFB 1 LD SP,(STACK) JP 0E000H ; DEFW PROL DEFM 'SWITCH' DEFB 1 AND A JP Z,KEINP LD D,E CALL CAOS DEFB 26H CALL CAOS DEFB 23H DEFM 'Steckplatz:' DEFB 0 LD A,L CALL CAOS DEFB 1CH CALL CAOS DEFB 23H DEFM ' Steuerbyte:' DEFB 0 LD A,E CALL CAOS DEFB 1CH CALL CAOS DEFB 23H DEFM ' Struktur:' DEFB 0 LD A,H CALL CAOS DEFB 1CH CALL CAOS DEFB 2CH ;CRLF JP MENIN ; DEFW PROL DEFM 'STAT' DEFB 1 LD A,15H CALL ANFORD JP NZ,ERROR LD E,014H LD B,082H STAT1: IN A,(C) INC B PUSH DE PUSH BC CALL 0F003H DEFB 000H POP BC POP DE DEC E JR NZ,STAT1 RET ;ANZEIGE ERSTER FREIER SPEICHER DEFW PROL DEFM 'FREE' DEFB 1 CALL CAOS DEFB 23H DEFM 'freier Speicher ab: ' DEFB 0 LD HL,BEGIN INC HL CALL CAOS DEFB 1AH CALL CRLF RET ;HILFE ! DEFW PROL DEFM '?' DEFB 1 CALL CAOS DEFB 23H DEFM 'es stehen zur Verfuegung :' DEFW 0A0DH DEFM '? EXIT DIR STAT' DEFW 0A0DH DEFM 'JOBIN ERA REN SETWR' DEFW 0A0DH DEFM 'SETRO CHECK CLOAD CSAVE' DEFW 0A0DH DEFM 'DUMP TYPTX TYPTP DISP' DEFW 0A0DH DEFM 'WINDOW FREE SWITCH PAGE' DEFW 0A0DH DEFM 'READ WRITE SORT HELP' DEFW 0A0DH DEFB 0 RET ;WINDOW ON/OFF DEFW PROL DEFM 'WINDOW' DEFB 1 AND A JR NZ,WINDO1 KEINP: CALL CAOS DEFB 23H DEFM 'zu wenig Parameter' DEFW 0A0DH DEFB 0 RET ; WINDO1: LD A,L AND 1 LD (WINDOW),A JP NZ,DIR LD A,(WINON+1) LD B,A LD A,(CURSOR+1) ADD A,B LD (CURSOR+1),A LD A,0 LD (WINON+1),A LD A,32 LD (WINLG+1),A DEC A DEC A DEC A LD (PAGZAL),A RET ; DEFW PROL DEFM 'SORT' DEFB 1 AND A JP z,KEINP LD A,L CP 3 JP NC,KEINP LD (SORT),A JP START ; DEFW PROL DEFM 'REN' DEFB 1 CALL NUMTST JR NC,REN1 REN2: CALL NAMTAB JP C,START CALL REN4 JR REN2 ; REN1: CALL REN5 JP START ; REN5: CALL NAMIN REN4: LD A,029H CALL ANFORD CALL NAMIN LD A,021H REN3: CALL ANFORD JP NZ,ERROR RET ; DEFW PROL DEFM 'ERA' DEFB 1 CALL CAOS DEFB 23H DEFM 'loeschen (J/N) ?' DEFW 0A0DH DEFB 0 ERTAS: CALL CAOS DEFB 4 CP 'N' JP Z,MENIN CP 'J' JR NZ,ERTAS CALL NUMTST JR NC,ERA1 ERA2: CALL NAMTAB JP C,START CALL ERA3 JR ERA2 ; ERA1: CALL ERA11 JP START ; ERA11: CALL NAMIN ERA3: LD A,011H REN30: JR REN3 ; DEFW PROL DEFM 'SETRO' DEFB 1 CALL NUMTST JR NC,SR2 SR3: CALL NAMTAB JP C,START CALL SR1 JR SR3 ; SR2: CALL SR21 JP START ; SR21: CALL NAMIN SR1: LD A,025H JR REN30 ; DEFW PROL DEFM 'SETWR' DEFB 1 CALL NUMTST JR NC,SW1 SW3: CALL NAMTAB JP C,START CALL SW2 JR SW3 ; SW1: CALL SW1 JP START ; SW11: CALL NAMIN SW2: LD A,031H JR REN30 ; DEFW PROL DEFM 'CHECK' DEFB 1 CALL NUMTST JR NC,CHK2 CHK1: CALL NAMTAB RET C CALL CHK3 JR CHK1 ; CHK2: CALL NAMIN LD A,' ' LD (WRMER),A CHK3: LD A,9 CALL ANFORD JP NZ,ERROR CALL CHSUM ;ERSTE PRUEFSUMME LD BC,90F2H ;->PARAMETER LD HL,ARGMN LD E,7 CHK4: IN A,(C) LD (HL),A INC B INC HL DEC E JR NZ,CHK4 LD DE,1 ;ANZAHL SEKTOREN CHK5: LD A,1 CALL ANFORD JR NZ,CHK6 ;FEHLER ODER ENDE PUSH DE CALL CHSUM1 POP DE INC DE JR CHK5 ; CHK6: INC B IN A,(C) CP 81H JP NZ,ERROR EX DE,HL PUSH HL CALL CAOS DEFB 23H DEFM 'Sekt:' DEFB 0 POP HL CALL CAOS DEFB 1AH LD A,(WRMER) CALL CAOS DEFB 24H CALL CAOS DEFB 23H DEFM ' CHSUM:' DEFB 0 LD HL,(SUMPUF) CALL CAOS DEFB 1AH LD A,(ARGMN) CP 3 JR Z,CHK7 CP 2 JP NZ,CRLF LD HL,(ARGM1) CALL CAOS DEFB 1AH LD HL,(ARGM2) CALL CAOS DEFB 1AH JP CRLF ; CHK7: LD HL,(ARGM1) CALL CAOS DEFB 1AH LD HL,(ARGM2) CALL CAOS DEFB 1AH LD HL,(ARGM3) CALL CAOS DEFB 1AH JP CRLF ; ;TYPTX Type fuer TEXOR ; DEFW PROL DEFM 'TYPTX' DEFB 1 CALL NUMTST JR NC,TTX2 TTX1: CALL NAMTAB RET C CALL TTX3 JR TTX1 ; TTX2: CALL NAMIN TTX3: LD A,9 CALL ANFORD JP NZ,ERROR TTX5: LD A,1 CALL ANFORD JR NZ,TTX6 ;FEHLER ODER ENDE LD BC,80F2H ;SEKTOR AB 2. TTX10: IN A,(C) OR A JR NZ,TTX7 TTX19: CALL CRLF JR TTX9 ; TTX7: CP 3H RET Z ;ENDE CP 0FFH RET Z ;ENDE CP 0AH JR Z,TTX19 CP 0DH JR Z,TTX9 BIT 7,A JR Z,TTX13 LD A,5BH TTX13: CP 09H JR NZ,TTX8 CALL TAB ;TAB -> SPAC JR TTX9 ; TTX8: CP 20H JR NC,TTX11 LD A,'^' ;SONSTIGE STEUERZEICHEN TTX11: CALL CAOS DEFB 24H LD A,(CURSOR) AND A CALL Z,CRLW ;GGF. WARTEN TTX9: INC B JR NZ,TTX10 JR TTX5 ; TTX6: INC B IN A,(C) CP 81H JP NZ,ERROR CALL CRLF RET ; ; DEFW PROL DEFM 'TYPTP' DEFB 1 CALL NUMTST JR NC,TTP2 TTP1: CALL NAMTAB RET C CALL TTP3 JR TTP1 ; TTP2: CALL NAMIN TTP3: LD A,9 TTP5: CALL ANFORD JR NZ,TTP6 ;FEHLER ODER ENDE LD BC,80F2H ;SEKTOR AB 2. TTP10: IN A,(C) AND 7FH CP 0AH ;LF ? JR NZ,TTP7 CALL CRLF JR TTP9 ; TTP7: CP 1AH RET Z ;ENDE CP 0DH JR Z,TTP9 CP 09H ;TAB JR NZ,TTP11 Call TAB JR TTP9 ; TTP11: CP 20H JR NC,TTP8 PUSH AF LD A,'^' CALL CAOS DEFB 24H LD A,(CURSOR) OR A CALL Z,CRLW POP AF OR 40H TTP8: CALL CAOS DEFB 24H LD A,(CURSOR) OR A CALL Z,CRLW ;GGF. WARTEN TTP9: INC B JR NZ,TTP10 LD A,1 JR TTP5 ; TTP6: INC B IN A,(C) CP 81H JP NZ,ERROR CALL CRLF RET ; TAB: PUSH BC LD A,(CURSOR) AND 7 ;IN 8ER SCHRITTEN NEG ADD A,8 LD B,A TAB2: PUSH BC LD A,20H CALL CAOS DEFB 24H POP BC DJNZ TAB2 LD A,(CURSOR) AND A CALL Z,CRLW POP BC RET ;AUSGABE EINE ZEILE HEXDUMP DUMPLN: CALL CAOS DEFB 1AH PUSH HL LD B,8 DUMP1: LD A,(HL) CALL CAOS DEFB 1CH DEC B JR Z,DUMP2 CALL CAOS DEFB 2BH ;SPACE INC HL JR DUMP1 ; DUMP2: LD A,9 ;CURSOR RIGHT CALL CAOS DEFB 24H LD A,(STBT) XOR 8 LD (STBT),A ;DARSTELLUNG STEUERZEICHEN POP HL LD B,8 DUMP3: LD A,(HL) CALL CAOS DEFB 24H INC HL DJNZ DUMP3 LD A,(STBT) XOR 8 LD (STBT),A CALL CRLF RET ; NAMIN: CALL 0F003H DEFB 023H DEFM 'Name :' DEFB 000H CALL CAOS DEFB 017H LD HL,00006H ADD HL,DE NAME: LD E,12 NAME1: LD BC,082F3H NAME2: LD A,(HL) OUT (C),A INC HL INC B DEC E JR NZ,NAME2 LD B,080H AND A RET ; ANFORD: LD BC,080F3H OUT (C),A WAIT: IN A,(C) BIT 0,A JR NZ,WAIT BIT 7,A RET ; ; DEFW PROL DEFM 'JOBIN' DEFB 1 LD HL,PUFF LD IY,STBT JI4: LD (HL),3 ;ENDE CALL CAOS DEFB 4 ;TASTE CP 3 ;BREAK JR Z,JI1 CP 13H ;STOP JR Z,JI2 CP 1 ;CLEAR JR Z,JI3 LD B,A LD A,7FH CP L JR Z,JI4 LD A,B LD (HL),A INC HL SET 3,(IY) CALL CAOS DEFB 24H ;AUSGABE RES 3,(IY) JR JI4 ; JI3: DEC HL CALL CAOS DEFB 23H DEFB 8 DEFB 20H DEFB 8 DEFB 0 JR JI4 ; JI1: CALL CAOS DEFB 2CH RET ; JI2: LD HL,PUFF LD BC,80F2H JI5: LD A,(HL) OUT (C),A INC HL INC B JR NZ,JI5 CALL CAOS DEFB 23H DEFW 0A0DH DEFM 'NAME :' DEFB 0 CALL CAOS DEFB 17H LD HL,6 ADD HL,DE LD BC,82F3H LD E,8 JI6: LD A,(HL) OUT (C),A INC HL INC B DEC E JR NZ,JI6 LD A,'.' OUT (C),A INC B LD A,'U' OUT (C),A INC B OUT (C),A INC B OUT (C),A LD A,0BH LD E,2 JI8: CALL ANFORD JP NZ,ERROR DEC E JP Z,START LD A,43H ;CLOSE JR JI8 ; ;PROGRAMME ZUM DATEIAUSTAUSCH ; DISKETTE <-> KASSETTE ; DEF× PROL DEFM 'CSAVE' DEFB 1 LD (IX+5),0 LD (IX+6),0B7H CALL CAOS DEFB 23H DEFM 'NAME :' DEFB 0 CALL CAOS DEFB 17H ;INLINE LD HL,6 ADD HL,DE ;DE->NAME PUSH HL LD DE,PUFF LD BC,40 LDIR LD B,84 XOR A CS1: LD (DE),A INC DE DJNZ CS1 LD HL,'CO' LD (0B77Ch),HL LD HL,'PY' LD (0B77EH),HL POP HL LD E,12 LD BC,82F3H CS2: LD A,M OUT (C),A INC HL INC B DEC E JR NZ,CS2 LD A,9 LD B,80H OUT (C),A ;OPEN-READ CS3: IN A,(C) BIT 0,A ;READY JR NZ,CS3 BIT 7,A ;ERROR JR Z,CS4 JP ERROR ; CS4: CALL CAOS ;AUSGABE-VORBLOK DEFB 8 ;OPEN-SAVE CS7: LD BC,80F2H LD HL,PUFF CS5: IN A,(C) LD M,A INC HL INC B JR NZ,CS5 LD BC,80F3H LD A,1 OUT (C),A LD BC,170 LD A,(IX+2) AND 7FH CP 3 JR NZ,CSX LD BC,2000 CSX: CALL CAOS DEFB 1 ;AUSGABE BLOCK LD A,(IX+2) ;BLOCKNUMMER CALL CAOS DEFB 1CH LD A,(IX+2) CP 0FEH ;NAECHSTER FF JR NZ,CSA LD (IX+2),0FFH ;UEBERGEHEN FF CSA: XOR A LD (CURSOR),A LD A,(IX+13) CP 3 RET Z ;TASTE ? ->CAOS LD BC,80F3H CS6: IN A,(C) BIT 0,A JR NZ,CS6 BIT 7,A JR Z,CS7 INC B IN A,(C) CP 81H ;ENDE ? JP NZ,ERROR LD BC,160 CALL CAOS DEFB 9 ;CLOSE CALL CAOS DEFB 2CH ;CRLF RET ; CLERR: CALL CAOS DEFB 23H DEFM 'keine Kassettenkopie !' DEFW 0A0DH DEFB 0 JP MENIN ; DEFW PROL DEFM 'CLOAD' DEFB 1 LD (IX+5),0 LD (IX+6),0B7H CALL CAOS DEFB 0AH ;OPEN LOAD LD A,0 LD BC,80F3H ;RESET ERROR OUT (C),A EX AF,AF' LD A,0BH EX AF,AF' ;RETTEN CL2: LD A,(IX+2) JR NC,CL1 CL3: CALL CAOS DEFB 1CH ;BLOCK-NR. CALL CAOS DEFB 23H DEFM ' ?' ;LESEFEHLER DEFW 0A0DH DEFB 0 LD A,(IX+13) CP 3 RET Z ;->BREAK CALL CAOS DEFB 5 ;BLOCKREAD JR CL2 ; CL1: DEC A JR NZ,CL3 ;FALSCHE NR. LD HL,PUFF LD DE,NAMMER LD BC,82F3H CL4: LD A,(HL) LD (DE),A OUT (C),A ;NAME CALL CAOS DEFB 24H INC HL INC DE INC B LD A,82H+12 CP B JR NZ,CL4 LD B,28 CL01: LD A,(HL) INC HL CALL CAOS DEFB 24H DJNZ CL01 CALL CAOS DEFB 2CH ;CRLF YYY: LD HL,(0B77CH) LD DE,'CO' AND A SBC HL,DE JP NZ,CLERR LD HL,(0B77EH) LD DE,'PY' SBC HL,DE JP NZ,CLERR LD (IX+3),2 ;SOLL-BL-NR. CL10: LD A,(IX+13) CP 3 RET Z CALL CAOS ;BLOCKLESEN DEFB 5 LD A,(IX+2) PUSH AF CALL CAOS DEFB 1CH ;ANZEIGE NR. POP AF JR NC,CL5 LD A,'?' ;LESEFEHLER CALL CAOS DEFB 24H CL8: CALL CAOS DEFB 2CH ;CRLF JR CL10 ; CL5: CP (IX+3) JR Z,CL7 CP 0FFH JR Z,CL7 LD A,'*' ;WRONG NUMBER CALL CAOS DEFB 24H JR CL8 ; CL7: XOR A LD (CURSOR),A INC (IX+3) ;SOLL-BL-NR. LD A,(IX+3) INC A JR NZ,CL9A LD (IX+3),A CL9A: LD BC,80F3H CL9: IN A,(C) BIT 0,A JR NZ,CL9 BIT 7,A JP NZ,ERROR LD HL,PUFF DEC C CL11: LD A,(HL) OUT (C),A INC HL INC B JR NZ,CL11 ;UEBEGABE SEKTOR LD BC,80F3H LD A,(IX+2) INC A JR Z,CLEND EX AF,AF' OUT (C),A LD A,3 ;SEKTOR-WRITE EX AF,AF' JR CL10 ; CLEND: LD A,43H CALL ANFORD JP NZ,ERROR CALL CAOS DEFB 0BH ;CLOSE READ LD HL,NAMMER ;TEST OB COM LD B,12 CLE2: LD A,M CP '.' INC HL JR Z,CLE3 DJNZ CLE2 STARTC: JP START ; CLE3: LD A,M CP 'C' JR NZ,STARTC INC HL LD A,(HL) CP 'O' JR NZ,STARTC INC HL LD A,(HL) CP 'M' JR NZ,STARTC LD M,'C' DEC HL LD M,'C' DEC HL LD M,'K' PUSH HL LD HL,NAMMER CALL NAME LD A,029H CALL ANFORD POP HL JP NZ,ERROR LD M,'C' INC HL LD M,'O' INC HL LD M,'M' LD HL,NAMMER CALL NAME LD A,021H CALL ANFORD JP NZ,ERROR JP START ; DEFW PROL DEFM 'PAGE' DEFB 1 AND A JR NZ,PAGE1 CALL CAOS DEFB 23H DEFM 'kein Parameter einegeben' DEFW 0A0DH DEFB 0 RET ; PAGE1: LD A,L AND 1 LD (PAGE),A RET ; AUSGABE EINER ZEILE ; HL: Anfang ; C: L{nge ; VR: AF,B,HL ; HL: Ende DLINE: CALL CAOS ;Adr. DEFB 1AH PUSH HL LD B,C DL1: LD A,M ;HEX-Dump INC HL CALL CAOS DEFB 1CH ;A HEX CALL CAOS DEFB 2BH ;SPACE DJNZ DL1 POP HL LD B,C LD A,9 CALL CAOS DEFB 24H DL2: LD A,M ;ASCII's INC HL CALL PCTRL DJNZ DL2 RET ; ; Ausdrucken ohne Ausf}hrung von ; Steuerzeichen PCTRL: PUSH HL LD HL,STBT SET 3,M ;setzen CALL CAOS DEFB 24H RES 3,M ;r}cksetzen POP HL RET ; Display ; HL: Anfang ; E: Zeilen (bei ARGN>1), sonst FENSTERLAENGE ; C: Bytes/Zeile(-""->2), sonst 8 DEFW PROL DEFM 'DISP' DEFB 1 DISPL: CP 3 JR NC,DIS1 LD C,8 CP 2 JR NC,DIS1 LD A,(PAGZAL) DEC A LD E,A ;4 Zeilen DIS1: PUSH DE DIS2: CALL DLINE CALL CAOS DEFB 2CH ;CRLF LD A,(IX+13) AND A JR NZ,DIS3 DEC E JR NZ,DIS2 CALL CAOS DEFB 4 DIS3: POP DE CP 3H RET Z CP 13H JR NZ,DIS1 JR MOD1 ; Modify Kommando MOD0: LD C,E CP 2 JR NC,MOD1 LD C,1 MOD1: CALL DLINE ;Anzeige Adr., ;Bytes, ASCII's LD A,5 LD (CURSOR),A ;Crsr auf Anf. CALL CAOS ;Zeileneingabe DEFB 17H PUSH HL CALL CAOS ;Erfassen der ADRESSE DEFB 18H LD A,M POP HL JR C,MODR ;Fehler ? AND A ;Adr.erfa~t ? JR Z,MOD1 LD HL,(NUMYX);Adr. lesen ; Erfassen der Eingaben MOD2: PUSH HL CALL CAOS DEFB 18H LD A,M AND A INC HL LD A,M POP HL JR Z,MOD4 ;Zahl erfa~t ? ; Eingabe in den Speicher MOD3: LD M,A INC HL MOD4: LD A,(DE) ;IF "." return CP '.' RET Z ;IF "," Erfassen eines ASCII-Zeichens CP ',' JR NZ,MOD5 INC DE LD A,(DE) ;Erh|hen Zei- INC DE ;lenposition JR MOD3 ;IF ":" Adresse um 1 erniedrigen MOD5: CP ':' JR NZ,MOD6 DEC HL JR MOD1 ;IF "/" neue Adresse erfolgt MOD6: CP '/' JR NZ,MOD7 INC DE CALL CAOS DEFB 18H ;ZAHLEINLESEN JR C,MODR LD HL,(NUMYX) JR MOD1 ;IF "'" String bis 00h oder ' lesen MOD7: CP 27H JR NZ,MOD9 INC DE MOD8: LD A,(DE) INC DE AND A JR Z,MOD1 CP 27H JR Z,MOD4 LD M,A INC HL JR MOD8 MOD9: AND A JR Z,MOD1 CP ' ' JR Z,MOD2 MODR: CALL CAOS DEFB 23H DEFM 'Parameterfehler' DEFW 0A0DH DEFB 0 JR MOD1 ; ; DEFW PROL DEFM 'DUMP' DEFB 1 CALL NUMTST JR NC,DU2 DU1: CALL NAMTAB RET C CALL DU3 JR DU1 ; DU2: CALL NAMIN DU3: LD A,9 DU5: CALL ANFORD JP NZ,TTP6 ;FEHLER ODER ENDE LD BC,80F2H ;SEKTOR AB 1. LD HL,PUFF ;PUFFER DU10: IN A,(C) LD (HL),A INC HL INC B JR NZ,DU10 LD HL,PUFF LD C,16 DU4: CALL DUMPLN DEC C JR NZ,DU4 LD A,1 JR DU5 ;NAECHSTEN SEKTOR ;LADEN IN SPEICHER DEFW PROL DEFM 'READ' DEFB 1 LD A,(PARN) AND A JP Z,KEINP ;KEINE ADRESSE CP 4 JR C,READ0 VIELP: CALL CAOS DEFB 23H DEFM 'zu viele Parameter' DEFW 0A0DH DEFB 0 JP MENIN ; READ0: LD DE,BEGIN SBC HL,DE JR NC,READ1 CALL CAOS DEFB 23H DEFM 'Ladeadresse zu niedrig' DEFB 0 JP MENIN ; READ1: CALL NAMIN READ3: LD A,(PARN) EXX LD BC,0 LD HL,0 ;1.SEKTOR LD DE,(P2) ;ANZAHL CP 3 JR NZ,READA LD HL,(P2) ;ERSTER SEKTOR LD DE,(P3) ;ANZAHL ZU LADENDER READA: CP 1 JR NZ,READB LD DE,-1 ;MAX. ANZAHL READB: EXX LD A,9 ;OPEN LD HL,(P1) ;LADEADRESSE READ5: CALL ANFORD JR Z,READZ ;FEHLER ODER ENDE INC B IN A,(C) CP 81H JP NZ,ERROR XOR A LD (PARN),A JR READD ;ENDE ; READZ: LD BC,80F2H ;SEKTOR AB 1. EXX PUSH HL AND A SBC HL,BC POP HL EXX JR Z,READ10 JR NC,READC READ10: IN A,(C) LD (HL),A INC HL INC B JR NZ,READ10 EXX DEC DE ;ANZAHL-1 LD A,E OR D EXX JR Z,READD ;GENUG GELADEN READC: EXX INC BC ;ZAEHLER+1 EXX LD A,0E0H CP H JR Z,READE LD A,1 JR READ5 ;NAECHSTEN SEKTOR ; READE: CALL CAOS DEFB 'Datei zu lang ->Abbruch' DEFW 0A0DH DEFB 0 ; READD: CALL CAOS DEFB 23H DEFM 'ENDE: ' DEFB 0 CALL CAOS DEFB 1AH ;ADRESSE EXX PUSH HL PUSH BC EXX CALL CAOS DEFB 23H DEFM 'Sektoren:' DEFB 0 POP HL POP BC AND A SBC HL,BC LD A,(PARN) CP 2 JR C,READXX INC HL READXX: CALL CAOS DEFB 1AH CALL CAOS DEFB 2CH JP MENIN ; DEFW PROL DEFM 'WRITE' DEFB 1 LD A,(PARN) LD HL,(P1) LD DE,(P2) CP 2 JP C,KEINP JP NZ,VIELP LD A,0DFH CP H JP C,PARFEL SBC HL,DE JP NC,PARFEL CALL NAMIN LD IY,0 ;SEKTORZAEHLER LD E,0BH ;OPENWRITE LD HL,(P1) ;ANFANGSADRESSE WR01: LD BC,80F2H WR1: LD A,(HL) OUT (C),A INC HL INC B JR NZ,WR1 INC IY LD A,E CALL ANFORD JP NZ,ERROR PUSH HL LD DE,(P2) AND A SBC HL,DE POP HL LD E,3 JR C,WR01 LD A,43H ;CLOSE CALL ANFORD JP NZ,ERROR PUSH IY POP HL CALL CAOS DEFB 1AH CALL CAOS DEFB 23H DEFM ' Sektoren abgespeichert' DEFW 0A0DH DEFB 0 CALL CAOS DEFB 4 JP START ; KIRNAM: DEFM 'KIRVES.MSG' ; DEFW PROL DEFM 'HELP' DEFB 1 HELPIN: LD HL,KIRNAM CALL NAME LD A,9 CALL ANFORD JR Z,HELP1 CALL CAOS DEFB 23H DEFM 'KIRVES.MSG fehlt oder fehlerhaft' DEFW 0A0DH DEFB 0 JP MENIN ; HELP1: LD BC,80F2H HELP3: IN A,(C) CP '*' JR Z,HELP2 CALL CAOS DEFB 24H INC B JR NZ,HELP3 LD A,1 CALL ANFORD JP NZ,ERROR JR HELP1 ; HELP2: CALL CAOS DEFB 4 CP 3 JP Z,MENIN CP '+' JP Z,TTP10 SUB 40H JR C,HELP2 CP 'Y'-40H JR NC,HELP2 LD E,A LD A,9 HELP6: CALL ANFORD JP NZ,ERROR LD BC,80F2H HELP5: IN A,(C) CP '*' JR NZ,HELP4 DEC E JR Z,HELP7 HELP4: INC B JR NZ,HELP5 LD A,1 JR HELP6 ; HELP7: INC B JR Z,HELP8 HELP70: IN A,(C) CP '*' JR Z,HELP9 CALL CAOS DEFB 24H JR HELP7 ; HELP8: LD A,1 CALL ANFORD JP NZ,ERROR LD BC,80F2H JR HELP70 ; HELP9: CALL CAOS DEFB 23H DEFM '(E) -ENDE/ (F) -FORTSETZEN' DEFW 0A0DH DEFB 0 HELP11: CALl CAOS DEFB 4 CP 3 HELP10: JP Z,MENIN CP 'E' JR Z,HELP10 CP 'F' JP Z,HELPIN JR HELP11 ;HILFSUNTERPROGRAMME ;TEST OB NUMMERN EINGEGEBEN NUMTST: LD A,(NUMANZ) AND A RET Z LD (FILZAL),A LD HL,FILES LD (FILMER),HL SCF RET ;UEBERGABE NAMEN AUS FILES UND WEITERSTELLEN NAMTAB: LD HL,(FILMER) LD E,(HL) LD A,(FILZAL) INC HL LD (FILMER),HL SUB 1 LD (FILZAL),A RET C ;->ENDE CY=1 LD HL,SORFIL LD D,0 ADD HL,DE ;E-EXT. NUMMER LD A,(HL) ;UMGERECHNETE NUMMER LD HL,DIRPUF AND A LD DE,11 JR Z,MT1 ;FILE 0 MT2: ADD HL,DE DEC A JR NZ,MT2 MT1: LD BC,082F3H NME2: LD A,8AH CP B JR NZ,NME09 LD A,'.' OUT (C),A CALL CAOS DEFB 24H INC B NME09: LD A,(HL) AND 7FH OUT (C),A CALL CAOS DEFB 24H XXX: LD A,3 CP E JR NZ,NME01 LD A,'W' BIT 7,M JR Z,NME02 LD A,'R' NME02: LD (WRMER),A NME01: INC HL INC B DEC E JR NZ,NME2 CALL CRLF AND A RET ;NEWLINE MIT PAGING ; CRLF: CALL CAOS DEFB 2CH ;CRLF CRLW: LD A,(IX+13) ;EINTRITT ZUM WARTEN CP 3 JP Z,MENIN ;BREAK -> KOMMANDO CP 13H JR Z,CRLF1 LD A,(PAGE) AND A RET Z LD A,(IY+3) INC (IY+4) CP (IY+4) RET NZ CRLF1: LD (IY+4),0 ;WARTEN AUF TASTE CALL CAOS DEFB 4 CP 13H JR Z,CRLF1 CP 3 RET NZ CALL CAOS DEFB 2CH ;CRLF JP MENIN ;ABBRUCH ; ;PRUEFSUMMENBILDUNG CHSUM: LD DE,0FFFFH LD (SUMPUF),DE CHSUM1: LD BC,80F2H ;SEKTOR LD DE,(SUMPUF) CH1: IN A,(C) XOR D LD D,A RRCA RRCA RRCA RRCA AND 00FH XOR D LD D,A RRCA RRCA RRCA PUSH AF AND 01FH XOR E LD E,A POP AF PUSH AF RRCA AND 0F0H XOR E LD E,A POP AF AND 0E0H XOR D LD D,E LD E,A INC B JR NZ ,CH1 LD (SUMPUF),DE RET ;FEHLERMELDUNG DISKETTE ERROR: LD BC,81F3H IN A,(C) LD HL,ERTAB LD B,14 ERR1: CP M INC HL JR Z,ERR2 INC HL INC HL DJNZ ERR1 LD HL,FEH1 ERR3: LD A,M AND A JR Z,ERR4 INC HL PUSH HL CALL CAOS DEFB 24H POP HL JR ERR3 ; ERR4: CALL CRLF JP MENIN ; ERR2: LD E,M INC HL LD D,M EX DE,HL JR ERR3 ;SORTIEREN DES DIRECTORY SORTIR: LD A,(SORT) DEC A LD HL,COMNAM JR Z,SOT0 LD HL,COMTYP SOT0: LD (UPADR),HL ;AUSWAHL UP LD A,(ANZAHL) ;ANZAHL FILES DEC A ;ANZAHL DURCHLAEUFE LD B,A SOT2: LD HL,SORFIL ;NUMMERNTABELLE LD C,B SOT1: LD E,M INC HL LD D,M DEFB 0CDH ;CALL UPADR: DEFW COMNAM LD M,D DEC HL LD M,E INC HL DEC C JR NZ,SOT1 DEC B JR NZ,SOT2 RET ; ;VERGLEICH ZWEIER NAMEN NUMMERN IN D UND E ; GROESSERE IN D COMNAM: LD A,E CALL COMUP LD A,D CALL COMUP EXX ;[D]-DE [E]-HL LD B,11 COMP2: LD A,(DE) CP M JR NZ,COMP1 INC HL INC DE DJNZ COMP2 EXX RET ; COMP1: EXX RET NC ;(DE)>(HL) LD A,E ;(HL)>(DE) LD E,D LD D,A ;D<->E TAUSCHEN RET ; ; COMTYP: LD A,E CALL COMUP LD A,D CALL COMUP EXX ;[D]-DE [E]-HL LD BC,8 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD BC,302H COMT2: LD A,(DE) PUSH BC LD C,M RES 7,A RES 7,C CP C POP BC JR Z,COMT1 EXX RET NC ;(DE)>(HL) LD A,E ;(HL)>(DE) LD E,D LD D,A ;D<->E TAUSCHEN RET ; COMT1: INC HL INC DE DEC B JR NZ,COMT2 DEC C JR NZ,COMT3 EXX RET ; COMT3: LD BC,-11 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD BC,801H JR COMT2 ; COMUP: EXX LD HL,DIRPUF LD C,A LD B,0 ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC ADD HL,BC EX DE,HL EXX RET ; ERTAB: DEFB 0 DEFW FEH0 DEFB 1 DEFW FEH1 DEFB 2 DEFW FEH2 DEFB 3 DEFW FEH3 DEFB 4 DEFW FEH4 DEFB 8 DEFW FEH5 DEFB 9 DEFW FEH6 DEFB 43H DEFW FEH7 DEFB 49H DEFW FEH8 DEFB 52H DEFW FEH9 DEFB 53H DEFW FEH10 DEFB 56H DEFW FEH11 DEFB 77H DEFW FEH12 DEFB 81H DEFW FEH13 DEFB 82H DEFW FEH14 ; FEH0: DEFM 'Datei nicht vorhanden' NOP FEH1: DEFM 'Diskettenfehler' NOP FEH2: DEFM 'Diskette voll' NOP FEH3: DEFM 'Datei schreibgeschuetzt' NOP FEH4: DEFM 'falsches Format' NOP FEH5: DEFM 'Datei bereits vorhanden' NOP FEH6: DEFM 'Bezeichnung mehrdeutig' NOP FEH7: DEFM 'Sektor fehlerhaft' NOP FEH8: DEFM 'Indexfehler' NOP FEH9: DEFM 'Laufwerk nicht bereit' NOP FEH10 EQU FEH3 FEH11: DEFM 'ID-Feld-Fehler' NOP FEH12: DEFM 'unzulaessige Codes im Namen' NOP FEH13: DEFM 'Dateiende ueberschritten' NOP FEH14 EQU FEH0 ANZAHL: DEFB 0 ;ANZAHL DIR-EINTRAEGE WINDOW: DEFB 1 ;WINDOW-MODUS PAGE: DEFB 1 ;PAGING-MODUS PAGZAL: DEFB 32 ;ZEILENZAEHLER PAGAKT: DEFB 0 ;AKT. ZEILE DIR01: DEFB 0 ;DIR-SEITE COLMER: DEFB 39H ;FARBMERKER WRMER: DEFB 20H ;MERKER WR ODER RO SUMPUF: DEFW 0FFFFH ;PUFFER FUER CHECKSUMME ARGMN: DEFB 0 ;MERKER FUER ARGN ARGM1: DEFW 0 ARGM2: DEFW 0 ARGM3: DEFW 0 FILMER: DEFW 0 ;ZEIGER AUF FILES FILZAL: DEFB 0 ;FILES ZAEHLER SORT: DEFB 1 ;SORTIERMODUS NAMMER: DEFS 12 ;NAMENSPUFFER PARN: DEFB 0 P1º DEFS 3 P2º DEFS 3 P3º DEFS 3 P4º DEFS 3 P5º DEFS 3 P6º DEFS 3 P7º DEFS 3 P8º DEFS 3 P9º DEFS 3 P10º DEFS 3 NUMANZ: DEFS 1 ;ANZAHL ZUBEARB. FILES FILES: DEFS 128 SORFIL: DEFS 128 ; DIRPUF: DEFS 1308 ;PUFFER FUER DIRECTORY BEGIN EQU $ .DEPHASE END