0010 ; EMDOS 13.07.84
0014 ; Änderungen : **** ab 6606
0018 ; Last change : 17.09.84
0022 ; D O S
0026 ;
0030 ;
0034 ; COPYRIGHT (C) 1983 BY HELMUT EMMELMANN
0038 ;
0042 ;
0046 ; BENANW:  MODUL ZUR AUSFUEHRUNG DER
0050 ;          ANWEISUNGEN DES BENUTZERS
0054 ;
0058 ; DAS MODUL BILDET GLEICHZEITIG DEN START
0062 ; DES SYSTEMS UND BEGINNT DESHALB MIT DER
0066 ; BETRIEBSSYSTEMSCHNITTSTELE
0070 ;.Z80
0074 ;DDNASSYS
0078        ORG #A000
0082 NL     EQU #0D
0086 BS     EQU #08
0090 FF     EQU #0C
0094 ESC    EQU #1B
0098 IN     EQU #62
0102 MRET   EQU #5B
0106 INLIN  EQU #63
0110 RLIN   EQU #79
0114 TX1    EQU #6C
0118 TBCD2  EQU #67
0122 TBCD3  EQU #66
0126 PRS    EQU #28
0130 ROUT   EQU #30
0134 UOUT   EQU #C77
0138 UIN    EQU #C7A
0142 URET   EQU #2F
0146 CURSOR EQU #C29
0150 ARGN   EQU #C0B
0154 ARG1   EQU #C0C
0158 ARG2   EQU ARG1+2
0162 ARG3   EQU ARG2+2
0166 ARG4   EQU ARG3+2
0170 ARG5   EQU ARG4+2
0174 MBUF   DEFS 256
0178 ;
0182 ;SYSSTADS 0
0186 ;
0190        JP BENMON   ; START VOM MONITOR AUS
0194 MCALLS JP MCALL    ; CALL SCHNITTST. ERMOEGL.
0198 ;AUFRUF VON BENANW, PHEAS, LEAS, FILEEAS
0202        JP NASPHE   ; NASSYS BEFEHLE ZUM DIREKTEN
0206 ;           DISKZUGRIFF
0210        JP BASIC    ; BASIC EINSPRUNGPUNKT
0214 ;
0218 ;
0222 ;
0226        JP PHEAS##  ; SPURNG F. DIREKTE PHEASAUFR.
0230        DEFW DRVA## ; UM ALLE FORMATE ZUZUWEISEN
0234 ;
0238 ;
0242        DEFM "EMDOS (C) 1983 BY HELMUT EMMELMANN"
0246 ;
0250 ;
0254 FCBH   DEFS 36     ; PUFFER FUER FILE-LINKS
0258 ; FREIE  SEKTOREN TABELLE
0262 FCBHLE EQU FCBH+2  ; LAENGE DER DATEI
0266 ;
0270 ;
0274 BAM    DEFS 33     ; 1+32 : 256 GROUPS
0278 ;
0282        DEFS 8      ;DEFS 128-$+SYSSTA
0286 ;
0290 INVEK  DEFW 0      ; INTERRUPT-VEKTOR
0294 ;
0298 ;
0302 BENMON LD SP,1000H
0306        CALL BENANW
0310        SCAL  MRET
0314 ;
0318 ;
0322 BENANW OR A
0326        JR C,B100   ; -> KEIN KALTSTART
0330 ;
0334        RST PRS
0338        DEFB FF,NL,NL
0342        DEFM "  E M D O S - fuer  NASCOM  I,II"
0346        DEFB NL,NL
0350        DEFM "  (C) 1983 BY HELMUT EMMELMANN"
0354        DEFB NL,NL,0
0358        LD A,37H
0362        LD (BENANW),A
0366        XOR A
0370        CALL PHEAS
0374 ;
0378 B100   DEFS 0
0382        RST PRS 
0386        DEFB "X-40H,
0390        DEFM "EMDOS "
0394        DEFB NL,0
0398 SOSW   LD HL,SO400  ; WIRD SPAETER IN CALL
0402        LD A,0C3H        ; UMGEWANDELT
0406        LD (0C1DH),A
0410        LD HL,MCALLS
0414        LD (0C1EH),HL
0418        LD HL,FCBH
0422        LD A,4
0426        CALL LEAS
0430        SCAL INLIN  ; ANWEISUNG EINLESEN
0434 B110   LD A,(DE)
0438        CP "
0442        INC DE
0446        JR Z,B110
0450        LD B,A
0454        LD A,(DE)
0458        CP "
0462        JR NZ,C100  ; KEIN KOMMANDO
0466        LD A,B
0470        CP "N
0474        JR Z,B115
0478        CP "M
0482        JR NZ,B120
0486 B115    LD A,1
0490        CALL PHEAS
0494        RET
0498 B120   CP "D
0502        JP Z,DI000  ; DIRECTORY
0506        CP "F
0510        JP Z,F000   ; FORMAT FESTLEGEN
0514        CP "S
0518        JP Z,S000   ; SAVE
0522        CP "E
0526        JP Z,E000   ; DATEI LOESCHEN
0530        CP "L
0534        JP Z,L000   ; LOAD
0538        CP "R
0542        JP Z,R000   ; READ CPM
0546        CP "W
0550        JP Z,W000   ; WRITE CPM
0554        CP "B
0558        JP Z,BA000  ; BASIC PROGRAMM ABSPEICHERN
0562        CP "I
0566        JP Z,SI000  ; INPUT  <- FILE
0570        CP "O
0574        JP Z,SO000  ; OUTPUT -> FILE
0578        CP "C
0582        JP Z,K000   ; KOPIEREN
0586        LD A,41H
0590 ;
0594 ;
0598 ERROR  PUSH AF
0602        RST PRS
0606        DEFB "X-40H,ESC
0610        DEFM "EMDOS-Error "
0614        DEFB 0
0618        POP AF
0622        SCAL TBCD2
0626        RST PRS
0630        DEFB NL,0
0634 B100J1 JP B100
0638 ;
0642 ; KOMMANDO NUR DATEINAME
0646 C100   DEC DE
0650        CALL FN000
0654        JR C,ERROR
0658        LD A,3
0662        LD DE,-1
0666        CALL FILEEA
0670        JR C,ERROR
0674        LD A,7
0678        CALL FILEEA
0682        OR A
0686        JR Z,B100J1
0690        DEC A
0694        RET Z
0698        DEC A
0702        JR NZ,C110
0706        POP HL
0710        PUSH BC
0714        LD A,1
0718        JP PHEAS
0722 C110   DEC A
0726        JR NZ,C130
0730        LD HL,B100
0734        PUSH HL
0738        PUSH BC     ; LADEFUNKTION 2
0742        LD A,1
0746        JP PHEAS
0750 C130   SCAL "U     ; LADEFUNKTION 4 (SUBMIT)
0754        LD HL,SIN
0758        LD (0C7BH),HL ; AKTIVIERE EINGBERST ROUTINE
0762        LD (SINP),BC
0766        JR B100J1
0770 ;
0774 ; SUBMIT - INPUT-RST ROUTINE
0778 SIN    LD HL,(SINP)
0782        INC HL
0786        LD (SINP),HL
0790        DEC HL
0794        LD A,(HL)
0798        OR A
0802        SCF
0806        RET NZ
0810        SCAL 78H    ; =NNIM
0814        OR A
0818        RET
0822 SINP   DEFW 0
0826 ;
0830 ; DIREKTORY ANZEIGEN
0834 DI000  LD A,(DE)
0838        INC DE
0842        CP "
0846        JR Z,DI000
0850        OR A
0854        JR Z,DI100
0858        SUB "A
0862 DI100  LD C,A
0866        LD A,"
0870        RST ROUT
0874        LD A,5
0878        CALL LEAS##
0882 DI200  LD A,6
0886        CALL LEAS
0890        JR C,DI900
0894        SCAL IN
0898        LD A,0
0902        JR C,DI900  ; ABBRUCH DURCH TASTENDRUCK
0906        LD HL,MBUF
0910 DI210  PUSH HL
0914        LD A,(HL)
0918        OR A
0922        JR NZ,DI400 ; GELOESCHTES FILE
0926        EX DE,HL
0930        LD HL,15
0934        ADD HL,DE
0938        BIT 7,(HL)
0942        JR NZ,DI400
0946        EX DE,HL
0950        INC HL
0954        LD B,8
0958 DI220  LD A,(HL)
0962        CP "
0966        JR NZ,DI230
0970        LD A,05FH
0974 DI230  RST ROUT
0978        INC HL
0982        DJNZ DI220
0986        LD A,".
0990        RST ROUT
0994        LD B,3
0998 DI240  LD A,(HL)
1002        OR A
1006        JR NZ,DI250
1010 DI250  RST ROUT
1014        INC HL
1018        DJNZ DI240
1022        RST PRS
1026        DEFM " :  "
1030        DEFB 0
1034 DI400  POP HL
1038        LD DE,32
1042        ADD HL,DE
1046        INC L
1050        DEC L
1054        JR NZ,DI210
1058        JR DI200
1062 ;
1066 DI900  OR A
1070        JP NZ,ERROR
1074        RST PRS
1078        DEFB BS,BS,03BH,NL,0
1082        JP B100
1086 ;
1090 ;
1094 ; I - ANWEISUNG
1098 SI000  CALL FN000
1102        JP C,SERR
1106        LD A,8
1110        CALL FILEEA
1114        LD HL,SI300
1118        LD (UIN+1),HL
1122        RET         ; SYSTEM EXIT
1126 ; USER INPUT RST ROUTINE
1130 SI300  LD (SPS),SP
1134        LD SP,STACK
1138        LD A,9
1142        CALL FILEEA
1146        JR C,SI310
1150        CP "Z-40H
1154        SCF
1158        JR NZ,SI350
1162 SI310  LD HL,URET
1166        LD (UIN+1),HL
1170        OR A
1174 SI350  LD SP,(SPS)
1178        RET
1182 ;
1186 ;  O - ANWEISUNG
1190 SO000  CALL FN000
1194        JP C,SERR
1198        LD A,10
1202        CALL FILEEA
1206        JP C,LERR
1210        LD A,0CDH
1214        LD (SOSW),A
1218        LD HL,SO300
1222        LD (UOUT+1),HL
1226        RET         ; SYSTEM EXIT
1230 ;  USER - OUTPUT  RST ROUTINE
1234 SO300  LD (SPS),SP
1238        LD SP,STACK
1242        PUSH AF
1246        LD L,A
1250        LD A,11
1254        CALL FILEEA
1258        CALL C,SO400
1262        POP AF
1266        JR SI350
1270 ;
1274 ;
1278 ;  CLOSE (BEI FEHLER ODER EMDOSAUFRUF)
1282 SO400  LD HL,FN
1286        LD A,12
1290        CALL FILEEA
1294        LD HL,URET
1298        LD (UOUT+1),HL
1302        LD A,21H
1306        LD (SOSW),A
1310        RET
1314 ;
1318 SPS    DEFW 0
1322        DEFS 50
1326 STACK  DEFS 2
1330 ;
1334 ;
1338 ; FORMATSTEUERANWEISUNG
1342 F000   CALL FN000
1346        JR C,LERR
1350        SCAL RLIN
1354        LD A,45H
1358        JR C,LERR
1362        LD A,(FN)
1366        SUB "A
1370        LD C,A
1374        LD HL,(ARG1)
1378        LD A,5
1382        CALL PHEAS
1386        JP C,ERROR
1390 B100J2 JP B100
1394 ;
1398 ;
1402 ; FILE LADEN
1406 L000   CALL FN000
1410 LERR   JP C,ERROR
1414        SCAL RLIN
1418 LERR1  LD A,42H
1422        JR C,LERR
1426        LD DE,-1
1430        LD A,(ARGN)
1434        CP 2
1438        CCF
1442        JR C,LERR1
1446        OR A
1450        JR Z,L020
1454        LD DE,(ARG1)
1458 L020   LD HL,FN
1462        LD A,3
1466        CALL FILEEA ; S##
1470        JR C,LERR
1474        LD A,7
1478        CALL FILEEA
1482        PUSH BC
1486        SCAL TX1
1490        POP HL
1494        SCAL TBCD3
1498 L100   JR B100J2
1502 ;
1506 S000   CALL FN000
1510        JR C,LERR
1514        LD HL,0
1518        LD (ARG3),HL
1522        LD (ARG4),HL
1526        SCAL RLIN
1530 SERR1  LD A,43H
1534        RET C
1538        LD A,(ARGN)
1542        CP 2
1546        JR C,S060
1550 ;
1554 ; MEHR ALS 1 PARAM.
1558        LD HL,(ARG1)
1562        EX DE,HL
1566        LD HL,(ARG2)
1570 ; HIER EINSPRUNG VON BA000 (BASIC SAVE)
1574 S040   SBC HL,DE
1578        EX DE,HL
1582        LD A,5
1586        CALL FILEEA
1590        EX DE,HL
1594        LD HL,(ARG3)
1598        LD A,(ARG4)
1602        LD C,A
1606        LD A,6
1610        CALL FILEEA
1614        LD A,(ARGN)
1618        CP 5
1622        JR NZ,S050
1626        LD DE,(ARG5)
1630 S050   JR S100
1634 S060   OR A
1638        JR NZ,SERR1
1642        LD A,7
1646        CALL FILEEA
1650        LD A,D
1654        OR E
1658        JR Z,SERR1
1662        EX DE,HL
1666 ; DE Ladeadresse
1670 S100   LD HL,FN
1674        LD A,4
1678        CALL FILEEA
1682        LD HL,0
1686        LD (ARG4),HL ; FUER TABULATE
1690 SERR   JP C,ERROR
1694        JR L100
1698 ;
1702 ; BASIC PROGRAMM ABSPEICHERN
1706 BA000  CALL FN000
1710        JR C,SERR   ; FILENAMEN HOHLEN
1714        LD DE,10D6H
1718        LD HL,(10D6H)
1722        LD A,1
1726        LD (ARGN),A
1730        LD (ARG4),A
1734        JR S040
1738 ;
1742 ;
1746 R000   LD A,1
1750        JR R100
1754 W000   LD A,2
1758 ;
1762 R100   LD (R250+1),A
1766        CALL FN000
1770        JR C,SERR
1774        SCAL RLIN
1778 RERR1  LD A,44H
1782        JR C,SERR
1786        LD A,(ARGN)
1790        CP 2
1794        JR NZ,RERR1
1798        LD DE,(ARG1)
1802        LD BC,(ARG2)
1806 R250   LD A,1
1810        LD HL,FN
1814        CALL FILEEA
1818 RERR   JR SERR
1822 ;
1826 ;
1830 ; DATEIEN KOPIEREN
1834 K000   LD A,(DE)
1838        INC DE
1842        CP "
1846        JR Z,K000   ; LEERZEICHEN UEBERLESEN
1850        LD (KDEDRV),A         ; DESTINATION DRIVE
1854 K010   LD A,(DE)
1858        INC DE
1862        CP "
1866        JR Z,K010   ; LEERZEICHEN
1870        LD (KSODRV),A         ; SOURCE DRIVE
1874 ;
1878 ; KOPIERSCHLEIFE
1882 K100   LD A,(DE)
1886        INC DE
1890        CP "
1894        JR Z,K100
1898        OR A
1902        JR Z,K100
1906        CP "*
1910        JR Z,K100
1914        CP ":
1918        JR Z,K100
1922        CP 03BH
1926        JR Z,K400
1930        INC A
1934        JR Z,K400   ; ALLES KOPIERT
1938 ;
1942        DEC DE
1946 ; DE ZEIGT NUN AUF EINEN DATEINAMEN
1950        DEC DE
1954        LD A,"*
1958        LD (DE),A
1962        INC DE      ; ALS KOPIERKENNZEICHEN
1966        LD (CURSOR),DE
1970        CALL FN000  ; DATEINAMEN UEBERNEHMEN
1974        PUSH DE
1978 ;
1982        LD HL,FNDRV
1986        LD A,(KSODRV)
1990        LD (HL),A   ; LAUFWERK
1994        LD DE,1000H
1998        LD BC,8000H
2002        LD A,1
2006        CALL FILEEA
2010        JR C,KERRP  ; DATEI EINL.
2014 ;
2018        LD A,(FCBHLE)
2022        RRCA
2026        LD B,A
2030        RES 7,B
2034        AND 80H
2038        LD C,A      ; LAENGE ->BC
2042        LD HL,FNDRV
2046        LD A,(KDEDRV)
2050        LD (HL),A
2054        LD DE,1000H
2058        LD A,2
2062        CALL FILEEA
2066        JR C,KERRP     ; SCHREIBEN
2070 ;
2074        POP DE
2078        JR K100
2082 ;
2086 K400   OR A
2090        JR RERR
2094 KERRP  POP DE
2098        JR RERR
2102 ;
2106 ;
2110 ;
2114 ; ERASE FILE
2118 E000   CALL FN000
2122        LD A,11
2126        CALL LEAS
2130        JR RERR
2134 ;
2138 KSODRV DEFB 0
2142 KDEDRV DEFB 0
2146 ;
2150 FN000  DEFS 0      ; FILENAMEN SPEICHERN
2154 FN010  LD A,(DE)
2158        INC DE
2162        CP "
2166        JR Z,FN010
2170        LD HL,FN
2174        LD B,14
2178 FN020  CP "_
2182        JR Z,FN025
2186        LD (HL),A
2190        INC HL
2194 FN025  LD A,(DE)
2198        INC DE
2202        CP "
2206        JR Z,FN030
2210        DJNZ FN020
2214 FN030  LD (HL),"
2218        LD HL,FN
2222        RET
2226 ;
2230 FNDRV  DEFM "A:"
2234 FN     DEFS 15
2238 ;
2242 ;
2246 ;
2250 ;*****************************************
2254 ;**  SCHNITTSTELLE  FUER  EMDOS-AUFRUFE **
2258 ;**       VON BENUTZERPROGRAMMEN        **
2262 ;*****************************************
2266 ;
2270 ; AUFRUFNUMMER  IN   A
2274 ;   0.....1FH   BENANW-AUFRUFE (s.u)
2278 ;   20H...3FH   PHEAS-AUFRUFE+20H
2282 ;   40H...5FH   LEAS-AUFRUFE+40H
2286 ;   60H...80H   FILEEAS-AUFRUFE+60H
2290 ;
2294 MCALL  SUB 60H
2298        JP NC,FILEEA ; S##
2302        ADD A,20H
2306        JP C,LEAS##
2310        ADD A,20H
2314        JP C,PHEAS##
2318        ADD A,20H
2322        CCF
2326        RET C       ; FALSCHE NUMMER
2330 ;
2334 ; NUMMER DES BENANW-CALLS IN A
2338        OR A
2342        JP Z,BENANW
2346        DEC A
2350        JR Z,BENINF
2354        SCF
2358        RET
2362 ;
2366 ;
2370 BENINF LD HL,MBUF
2374        LD DE,BAM
2378        RET
2382 ;
2386 ;
2390 ;
2394 ;*****************************************
2398 ;**     DIREKTZUGRIFF VON NASSYS        **
2402 ;*****************************************
2406 ;
2410 ;
2414 ; NASSYS BEFEHL
2418 ;   E x106  A HL DE   -> PHEAS
2422 ;
2426 NASPHE LD A,(ARG2)
2430        LD HL,(ARG3)
2434        LD DE,(ARG4)
2438        CALL PHEAS
2442        SCAL MRET
2446 ;
2450 ;
2454 ;*****************************************
2458 ;**        BASIC EINSPRUNGPUNKT         **
2462 ;*****************************************
2466 ; DIE ADRESSE  x109 MUSS NACH 1055H
2470 ;              (BASIC SET BEFEHL)
2474 BASIC  LD A,(HL)
2478        CP ":
2482        JP NZ,0FF40H ; NORMALER SET
2486        PUSH HL
2490        PUSH DE
2494        PUSH BC
2498        CALL BENANW
2502        POP BC
2506        POP DE
2510        POP HL
2514        RET
2518 ;
2522 ;END BENANW
2526 ;
2530 ;
2534 ;
2538 ;
2542 ; L E A S  -  LOGISCHEN EIN- AUSGABESYSTEM
2546 ;
2550 ;
2554 ; (C) 1983 BY HELMUT EMMELMANN
2558 ;
2562 ;
2566 ; LEAS - AUFRUFE
2570 ;  0 INIT LEAS
2574 ;  1 OPR  FILE ZUM LESEN EROEFFNEN
2578 ;  2 RDN  HL. SEKTOR DES FILES LESEN
2582 ;  3 REWR HL. SEKTOR DES FILES ZURUECKSCH.
2586 ;  4 FCBA FCB ADRESSE AUF HL SETZEN
2590 ;  5 DII  DIR. LESEFOLGE AUF ANFANG
2594 ;  6 DIN  NAECHSTEN DIRECTORY SEKTOR LESEN
2598 ;  7 DIR  DIRECTORY SEKTOR ZURUECKSCHREIBEN
2602 ;  8 OPW  FILE ZUM SCHREIBEN EROEFFNEN
2606 ;  9 CLW  SCHREIB-FILE ABSCHLIESSEN
2610 ;  10 WRN  NAECHSTEN SEKTOR SCHREIBEN
2614 ;  11 ERA  FILE LOESCHEN
2618 ;
2622 ;.Z80
2626 LEAS   OR A
2630        RET Z
2634        DEC A
2638        JR Z,OPR
2642        DEC A
2646        JR Z,RDN
2650        DEC A
2654        JR Z,REWR
2658        DEC A
2662        JR Z,FCBA
2666        DEC A
2670        JR Z,DII
2674        DEC A
2678        JR Z,DIN
2682        DEC A
2686        JR Z,DIR 
2690        DEC A
2694        JP Z,OPW
2698        DEC A
2702        JP Z,CLW
2706        DEC A
2710        JP Z,WRN 
2714        DEC A
2718        JP Z,ERA
2722 ;
2726 DII    LD A,C
2730        LD (DIDRV),A
2734        LD A,2
2738        CALL PHEAS
2742        RET C
2746        LD A,(HL)
2750        DEC A
2754        LD (DICUS),A
2758        INC A
2762        INC HL
2766        ADD A,(HL)
2770        LD (DILS),A
2774        RET
2778 ;
2782 DIN    LD HL,DICUS
2786        INC (HL)
2790        LD A,(DILS)
2794        CP (HL)
2798        JR Z,DIN8
2802        LD L,(HL)
2806        LD H,0
2810        LD DE,MBUF
2814        LD A,3
2818        JP PHEAS
2822 DIN8   DEC (HL)
2826        XOR A
2830        SCF
2834        RET
2838 ;
2842 DIR    LD HL,DICUS
2846        LD L,(HL)
2850        LD H,0
2854        LD DE,MBUF
2858        LD A,4
2862        JP PHEAS
2866 ;
2870 DICUS  DEFB 0
2874 DILS   DEFB 0
2878 DIDRV  DEFB 0
2882 ;
2886 RDN    PUSH DE
2890        CALL RDNS
2894        POP DE
2898        RET C
2902        LD A,3
2906        JP PHEAS##
2910 REWR   PUSH DE
2914        CALL RDNS
2918        POP DE
2922        RET C
2926        LD A,4
2930        JP PHEAS
2934 FCBA   LD (FCB),HL
2938        RET
2942 ;
2946 ;
2950 ;
2954 ; HL FILENAME
2958 OPR    CALL FNLW
2962        RET C
2966        LD HL,(FCB)
2970        LD (HL),C
2974        INC HL
2978        INC HL
2982        LD (HL),0
2986        INC HL
2990        LD (OPRH1),HL
2994        LD (HL),255
2998        LD B,32
3002 OPR5   INC HL
3006        LD (HL),0
3010        DJNZ OPR5 
3014        CALL DII
3018 OPR10  CALL DIN
3022        JR C,OPR30
3026        LD HL,MBUF
3030 OPR15  CALL FNSEA
3034        OR A
3038        JR Z,OPR10 
3042        DEC A
3046        JR NZ,OPR40
3050        LD DE,15
3054        ADD HL,DE
3058        LD DE,(FCB)
3062        INC DE
3066        INC DE
3070        LD A,(DE)
3074        ADD A,(HL)
3078        LD (DE),A
3082        LD DE,(OPRH1)
3086        LD B,16
3090        LD C,A
3094 OPR20  INC HL
3098        LD A,(HL)
3102        LD (DE),A
3106        INC DE
3110        DJNZ OPR20
3114        XOR A
3118        LD (DE),A
3122        LD (OPRH1),DE
3126        LD A,C
3130        CP 80H
3134        INC HL
3138        JR Z,OPR15  ; ZWEITE EXTENSION FOLGT
3142        JR OPR35
3146 OPR30  OR A
3150        SCF
3154        RET NZ      ; LESEFEHLER
3158        LD HL,(OPRH1)
3162        LD A,(HL)
3166        OR A
3170        LD A,20H
3174        SCF
3178        RET NZ
3182 OPR35  OR A
3186        RET
3190 OPR40  LD DE,32
3194        ADD HL,DE
3198        JR OPR15
3202 ;
3206 OPRH1  DEFW 0
3210 ;
3214 ;
3218 ;
3222 RDNS   LD A,L
3226        RRA
3230        RRA
3234        AND 1FH
3238        LD B,L
3242        LD HL,(FCB)
3246        LD C,(HL)
3250        ADD A,3
3254        CALL DADA
3258        LD L,(HL)
3262        LD A,L
3266        LD H,0
3270        ADD HL,HL
3274        ADD HL,HL
3278        OR A
3282        LD A,22H
3286        SCF
3290        RET Z       ; FILEENDE
3294        LD A,B
3298        AND 3
3302        CALL DADA
3306 RDNS2  SET 7,H
3310        OR A
3314        RET
3318 ;
3322 ;
3326 ;
3330 ;
3334 ; FILE LOESCHEN
3338 ERA    CALL FNLW
3342        RET C
3346        CALL DII
3350 ERA10  CALL DIN
3354        JR C,ERA80
3358        LD HL,MBUF
3362 ERA20  CALL FNSEA
3366        DEC A
3370        JR NZ,ERA10
3374        LD (HL),0E5H
3378        LD DE,16
3382        ADD HL,DE
3386        PUSH HL
3390        CALL DIR
3394        POP HL
3398        RET C
3402        JR ERA20
3406 ERA80  OR A
3410        RET Z
3414        SCF
3418        RET
3422 ;
3426 ;
3430 ;
3434 ; FILE ZUM SCHREIBEN EROEFFNEN HL FILEN
3438 OPW    CALL FNLW
3442        RET C
3446        LD HL,(FCB)
3450        LD (HL),C
3454        INC HL
3458        INC HL
3462        LD B,34
3466 OPW10  LD (HL),0
3470        INC HL
3474        DJNZ OPW10
3478 ;
3482        CALL DII
3486        CALL BAMI
3490 OPW20  CALL DIN
3494        JR C,OPW100
3498        LD HL,MBUF
3502 OPW30  CALL FNSEA
3506        CP 1
3510        JR NZ,OPW50
3514 ;  FILE GEFUNDEN -> BAK FILE
3518         PUSH HL
3522        LD DE,9
3526        ADD HL,DE
3530        LD (HL),"B
3534        INC HL
3538         LD (HL),"A
3542        INC HL
3546        LD (HL),"K
3550         LD DE,4
3554        ADD HL,DE
3558        LD A,(HL)
3562        CP 80H
3566        JR Z,OPW60
3570         INC HL
3574        LD A,(HL)
3578        LD (FSEK),A 
3582        JR OPW60
3586 OPW50  CP 2
3590        JR NZ,OPW70
3594 ;  BAK-FILE GEFUNDEN - LOESCHEN
3598         PUSH HL
3602        LD (HL),0E5H
3606 OPW60  CALL DIR
3610        POP HL
3614        RET C
3618         LD DE,32
3622        ADD HL,DE
3626        JR OPW30
3630 OPW70  CALL BAMR
3634        JR OPW20
3638 ;
3642 OPW100 OR A
3646        SCF
3650        RET NZ
3654        OR A
3658        RET
3662 ;
3666 ;
3670 ;
3674 ; NAECHSTEN SEKTOR EINES FILES SCHREIBEN
3678 ; DE ADRESSE
3682 WRN    PUSH DE
3686        LD HL,(FCB)
3690        LD C,(HL)
3694        INC HL
3698        INC HL
3702        LD B,(HL)
3706        INC (HL)
3710        INC (HL)
3714        LD A,B      ; LAENGE
3718 ;
3722 ;*********  6-FEB-84
3726        CP 254
3730        JR C,WRN050
3734        POP DE
3738        LD A,24H
3742        SCF
3746        RET         ; ZU LANG
3750 ;
3754 WRN050 RRA
3758        RRA
3762        RRA
3766        AND 01FH
3770        CALL DADA
3774        INC HL
3778        LD A,(HL)
3782        OR A
3786        JR Z,WRN100
3790         LD L,A
3794        LD H,0
3798        ADD HL,HL
3802        ADD HL,HL
3806         LD A,B
3810        RRA
3814        AND 3
3818        CALL DADA
3822        POP DE
3826        JR WRN200
3830 WRN100 LD A,B
3834        OR A
3838        JR Z,WRN110
3842         DEC HL
3846        LD A,(HL)
3850        INC HL
3854 WRN110 PUSH HL
3858        CALL BAMG
3862        POP HL
3866        POP DE
3870        RET C
3874        LD (HL),A
3878        LD L,A
3882        LD H,0
3886        ADD HL,HL
3890        ADD HL,HL
3894 ;
3898 ; HL SEKTORNUMMER DE ADRESSE
3902 WRN200 SET 7,H
3906        LD A,4
3910        JP PHEAS
3914 ;
3918 ; SCHREIBFILE ABSCHLIESSEN
3922 ; HL FILENAME
3926 CLW    CALL FNLW
3930        CALL DII
3934        LD A,0B7H
3938        LD (CLWEXT),A ; EXT. SCHALTER RUECKSETZEN
3942 CLW20  CALL DIN
3946        JR C,CLW100
3950        LD HL,MBUF
3954 CLW30  LD A,(HL)
3958        CP 0E5H
3962        JR Z,CLW150
3966        LD DE,32
3970        ADD HL,DE
3974 CLW40  BIT 0,H
3978        JR Z,CLW30
3982        JR CLW20
3986 ;
3990 ;
3994 CLW100 OR A
3998        SCF
4002        LD A,24H
4006        RET NZ
4010        RET         ; DIR. VOLL
4014 ;
4018 CLW150 LD (HL),0
4022        INC HL      ; USER
4026        EX DE,HL
4030        LD HL,(FNADR)
4034        LD B,8
4038 CLW160 LD A,(HL)
4042        CP "
4046        JR Z,CLW180
4050        CP ".
4054        JR Z,CLW180
4058        LD (DE),A
4062        INC HL
4066        INC DE
4070        DJNZ CLW160
4074        JR CLW190
4078 CLW180 LD A,"
4082        LD (DE),A
4086        INC DE
4090        DJNZ CLW180
4094 ;
4098 CLW190 LD A,(HL)
4102        CP ".
4106        JR Z,CLW195
4110        LD HL,DEFEXT-1
4114 CLW195 LD B,3
4118        INC HL
4122 CLW200 LD A,(HL)
4126        LD (DE),A
4130        INC HL
4134        INC DE
4138        DJNZ CLW200
4142        EX DE,HL
4146 ;
4150 CLWEXT OR A
4154        JR C,CLW300
4158        LD (HL),0   ; EXT-NUMMER
4162        INC HL
4166        LD (HL),0   ; S1
4170        INC HL
4174        LD (HL),0   ; S2
4178        INC HL
4182        LD DE,(FCB)
4186        INC DE
4190        INC DE
4194        LD A,(DE)
4198        BIT 7,A
4202        JR Z,CLW220
4206          LD A,80H    ; LAENGE =80H BEI FILE MIT
4210 CLW220 LD (HL),A   ;EXTENSION
4214        INC HL
4218        INC DE      ; LAENGE
4222        LD BC,16
4226        EX DE,HL
4230        LDIR        ; GROUP-ZEIGER UEBERTRAGEN
4234        OR A
4238        PUSH AF
4242        CALL DIR
4246        POP AF
4250        RET P
4254 ; WENN KEINE EXTENSION RET
4258 ;
4262 ; BEIM NAECHSTEN MAL EXTENSION SCHREIBEN
4266        LD A,37H
4270        LD (CLWEXT),A ; EXTENSION SCHALTER
4274        EX DE,HL    ; HL : NAECHSTER DIRECTORY-EINTR
4278        JR CLW40    ; WEITER SUCHEN
4282 ;
4286 CLW300 LD (HL),1
4290        INC HL
4294        LD (HL),0
4298        INC HL
4302        LD (HL),0
4306        INC HL
4310        PUSH HL
4314        LD HL,(FCB)
4318        INC HL
4322        INC HL
4326        LD A,(HL)   ; LAENGE
4330        RES 7,A     ; RESTLICHE LAENGE
4334        LD DE,17
4338        ADD HL,DE
4342        POP DE
4346        LD (DE),A   ; LAENGE
4350        INC DE
4354        LD BC,16
4358        LDIR        ; GROUP ZEIGER UEBERTRAGEN
4362        JP DIR
4366 ;
4370 BAMI   LD HL,BAM##
4374        LD (HL),C
4378        INC HL
4382        LD B,30
4386 BAMI10 LD (HL),0
4390        INC HL
4394        DJNZ BAMI10
4398        LD A,2
4402        CALL PHEAS
4406        INC HL
4410        LD A,(HL)   ; LAENGE DIR.
4414        RRCA
4418        RRCA
4422        LD B,A
4426 BAMI20 LD A,B
4430        DEC A
4434        CALL BAMB
4438        DJNZ BAMI20
4442 BAMI30 INC HL
4446        LD B,(HL)   ; LETZTE GROUP
4450 BAMI40 INC B
4454        RET Z
4458        LD A,B
4462        CALL BAMB
4466        JR BAMI40
4470 ;
4474 ;
4478 ;
4482 BAMR   LD HL,MBUF##
4486 BAMR10 BIT 0,H
4490        RET NZ      ; FERTIG
4494        LD A,(HL)
4498        CP 0E5H
4502        JR Z,BAMR90
4506        PUSH HL
4510        LD DE,16
4514        ADD HL,DE
4518        LD B,16
4522 BAMR20 LD A,(HL)
4526        CALL BAMB
4530        INC HL
4534        DJNZ BAMR20
4538        POP HL
4542 BAMR90 LD DE,32
4546        ADD HL,DE
4550        JR BAMR10
4554 ;
4558 ; BIT, DAS DER GROUP IM A ENTSPRICHT SETZEN UND TESTEN
4562 BAMB   PUSH HL
4566        PUSH BC
4570        LD B,A
4574        RRA
4578        RRA
4582        RRA
4586        AND 1FH
4590        LD HL,BAM+1
4594        CALL DADA
4598        LD A,B
4602        AND 7
4606        LD B,A
4610        LD A,80H
4614 BAMB20 RRCA
4618        DJNZ BAMB20
4622        LD B,A
4626        OR (HL)
4630        LD C,A
4634        LD A,(HL)
4638        AND B
4642        LD (HL),C
4646        POP BC
4650        POP HL
4654        OR A
4658        RET
4662 ;
4666 ;
4670 ; NAECHSTE FREIE GROUP SUCHEN
4674 BAMG   LD C,A
4678        LD B,A
4682 BAMG1  CALL BAMB
4686        JR Z,BAMG9  ; GEFUNDEN
4690        INC B
4694        LD A,B
4698        CP C
4702        JR NZ,BAMG1
4706        LD A,21H
4710        SCF
4714        RET
4718 BAMG9  LD A,B
4722 RETO1  OR A
4726        RET
4730 ;
4734 ;
4738 ; HL FILENAME
4742 FNLW   LD (FNADR),HL
4746        INC HL
4750        LD A,(HL)
4754        DEC HL
4758        LD C,0
4762        CP ":
4766        JR  NZ,RETO1
4770        LD A,(HL)
4774        INC HL
4778        INC HL
4782        LD (FNADR),HL
4786        SUB "A
4790        LD C,A
4794        CP 26
4798        LD A,23H
4802        CCF
4806        RET
4810 ;
4814 FNSEA  XOR A
4818        BIT 0,H
4822        RET NZ      ; PUFFER ZU ENDE
4826        PUSH HL
4830        EX DE,HL
4834        LD A,(DE)
4838        OR A
4842        JR NZ,FNSEA8  ; USER
4846        INC DE
4850        LD HL,(FNADR)
4854        LD B,8
4858 FNSEA2 LD A,(DE)
4862        CP (HL)
4866        JR NZ,FNSEA8
4870        INC DE
4874        INC HL
4878        LD A,(HL)
4882        CP ".
4886        JR Z,FNSEA3
4890        CP "
4894        JR Z,FNSEA3
4898        DJNZ FNSEA2
4902        JR FNSEA8
4906 FNSEA3 DEC B
4910        JR Z,FNSEA4
4914        LD A,(DE)
4918        CP "
4922        JR NZ,FNSEA8
4926        INC DE
4930        JR FNSEA3
4934 FNSEA4 LD A,(HL)
4938        CP "
4942        JR NZ,FNSEAA
4946         LD HL,DEFEXT-1
4950 FNSEAA INC HL
4954        LD B,3
4958        PUSH DE
4962 FNSEA5 LD A,(DE)
4966        CP (HL)
4970        JR NZ,FNSEA6
4974        INC DE
4978        INC HL
4982        DJNZ FNSEA5
4986        POP HL
4990        POP HL
4994        XOR A
4998        INC A
5002        RET
5006 FNSEA6 POP HL
5010        LD A,(HL)
5014        CP "B
5018        JR NZ,FNSEA8
5022        INC HL
5026        LD A,(HL)
5030        CP "A
5034        JR NZ,FNSEA8
5038        INC HL
5042        LD A,(HL)
5046        CP "K
5050        JR NZ,FNSEA8
5054        POP HL
5058        OR A
5062        LD A,2
5066        RET
5070 FNSEA8 POP HL
5074        LD DE,32
5078        ADD HL,DE
5082        JR FNSEA
5086 ;
5090 DEFEXT DEFM "NAS"
5094 ;
5098 DADA   ADD A,L
5102        LD L,A
5106        RET NC
5110        INC H
5114        RET
5118 ;
5122 ;
5126 ;
5130 ;
5134 ;
5138 ;
5142 FSEK   DEFB 0
5146 ;
5150 FNADR  DEFW 0
5154 ;
5158 ;
5162 FCB    DEFW 0
5166 ;END LEAS
5170 ;
5174 ;
5178 ;
5182 ; E M D O S
5186 ;
5190 ; (C) 1983 BY HELMUT EMMELMANN
5194 ;
5198 ; MODUL FILEEAS - AUSFUEHREN  LOAD,SAVE
5202 ;  FILE  Ein-  AusgabeSystem
5206 ;
5210 ; AUFRUFE :
5214 ;  1 CPM - FILE   LESEN
5218 ;  HL Fname  DE Ladeadresse  BC Maxlen
5222 ;  2 CPM - FILE   SCHREIBEN
5226 ;  HL Fname  DE Adresse   BC Laenge
5230 ;  3 Lade NAS-File
5234 ;  HL Fname  DE Adresse bzw. FFFF oder FFFE
5238 ;  -> HL Startadresse  C Ladefunktion
5242 ;  4 Save NAS-File
5246 ;  HL Fname, Fileheader
5250 ;  5 Setzen Fileheader 1
5254 ;  HL Ladeadresse  DE Laenge
5258 ;  6 Setzen Fileheader 2
5262 ;  HL Startadresse  C  Ladefunktion
5266 ;  7 Fileheader bereitstellen
5270 ;  HL Ladeadresse  DE Laenge
5274 ;  BC Startadresse  A  Ladefunktion
5278 ;  8 Sequentielles Lesefile eroeffnen
5282 ;  HL Filename
5286 ;  9 Byte lesen
5290 ;  -> A  bzw. Fehlermeldung
5294 ;  10 Sequentielles Schreibfile eroeffnen
5298 ;  HL Filename
5302 ;  11 Byte schreiben (L)
5306 ;  12 Schreibfile abschliessen
5310 ;  HL: Filename
5314 ;
5318 ;
5322 ;
5326 ;
5330 ;.Z80
5334 ;
5338 ;ORG #A94E
5342 FILEEA DEC A
5346        JP Z,RF000
5350        DEC A
5354        JP Z,WF000
5358        DEC A
5362        JP Z,LN000
5366        DEC A
5370        JP Z,SN000
5374        DEC A
5378        JR Z,SFH1
5382        DEC A
5386        JR Z,SFH2
5390        DEC A
5394        JR Z,GFH  
5398        DEC A
5402        JP Z,SLO000
5406        DEC A
5410        JP Z,SL000
5414        DEC A
5418        JP Z,SWO000
5422        DEC A
5426        JP Z,SW000
5430        DEC A
5434        JP Z,SWC000
5438        SCF
5442        RET
5446 ;
5450 ;
5454 SFH1   LD (FHLADR),HL
5458        LD (FHLEN),DE
5462        RET
5466 SFH2   LD (FHSADR),HL
5470        LD A,C
5474        LD (FHSFUN),A
5478        RET
5482 GFH    LD HL,(FHLADR)
5486        LD DE,(FHLEN)
5490        LD BC,(FHSADR)
5494        LD A,(FHSFUN)
5498        RET
5502 ;
5506 ;
5510 ;
5514 ; FILE LESEN
5518 RF000  LD A,1
5522        CALL LEASP
5526        RET C
5530        LD HL,0
5534        CALL RF100
5538        RET NC
5542        CP 22H
5546        SCF
5550        RET NZ
5554        OR A
5558        RET         ; FEHLER 22 - FILEENDE IGNORIEREN
5562 ;
5566 RF100  LD A,B
5570        OR A
5574        RET Z
5578        LD A,2
5582        CALL LEASP
5586        RET C
5590        INC HL
5594        DEC B
5598        INC D
5602        JR RF100
5606 ;
5610 ;
5614 ;
5618 ; FILE SCHREIBEN
5622 WF000  LD A,8
5626        CALL LEASP
5630        RET C
5634        LD (WFH1),HL ; FILENAMEN ADRESSE
5638        CALL WF100
5642        RET C
5646        BIT 7,C
5650        JR Z,WF050
5654        LD A,10
5658        CALL LEASP
5662        RET C
5666        LD HL,(FCB##)
5670        INC HL
5674        INC HL
5678        DEC (HL)
5682 WF050  LD HL,(WFH1)
5686        LD  A,9 
5690        JP LEAS
5694 ;
5698 WFH1   DEFW 0
5702 ;
5706 WF100  LD A,B
5710        OR A
5714        RET Z
5718        LD A,10
5722        CALL LEASP
5726        RET C
5730        INC D
5734        DEC B
5738        JR WF100
5742 ;
5746 LEASP  PUSH HL
5750        PUSH DE
5754        PUSH BC
5758        CALL LEAS##
5762        POP BC
5766        POP DE
5770        POP HL
5774        RET
5778 ;
5782 ;
5786 LN000  LD A,1
5790        CALL LEASP
5794        RET C
5798        LD (LNH1),DE
5802        LD DE,MBUF##
5806        LD HL,0
5810        LD A,2
5814        CALL LEAS
5818        RET C
5822        LD HL,MBUF
5826        LD A,11H
5830        LD B,4
5834 LN020  CP (HL)
5838        JR Z,LN030
5842        LD A,40H
5846        SCF
5850        RET
5854 LN030  ADD A,A
5858        INC HL
5862        DJNZ LN020
5866        LD DE,FH
5870        LD BC,FHL
5874        LDIR
5878        LD HL,(LNH1)
5882        INC H
5886        JR NZ,LN050
5890        INC L
5894        JR NZ,LN040
5898         LD HL,(FHLADR)
5902        JR LN060
5906 LN040  INC L
5910        JR Z,LN200  ; DE=FFFE : NUR HEADER LESEN
5914 LN050  LD HL,(LNH1)
5918 ; RICHTIGE LADEADRESSE IN HL
5922 LN060  PUSH HL
5926        LD HL,(FHLEN)
5930        LD DE,-256+16
5934        OR A
5938        ADC HL,DE
5942        JR Z,LN070
5946        JR C,LN100
5950 LN070  LD BC,(FHLEN)
5954        LD A,B
5958        OR C
5962        JR Z,LN200
5966        LD HL,MBUF+16
5970        POP DE
5974        LDIR
5978        OR A
5982        RET
5986 ;
5990 LN100  POP DE
5994        PUSH HL
5998        LD HL,MBUF+16
6002        LD BC,256-16
6006        LDIR
6010        POP BC      ; RESTLICHE LAENGE
6014        LD HL,1
6018        CALL RF100
6022        RET C
6026        LD A,C
6030        OR A
6034        RET Z
6038        PUSH DE
6042        LD DE,MBUF
6046        LD A,2
6050        CALL LEASP
6054        POP DE
6058        RET C
6062        LD HL,MBUF
6066        LDIR
6070 LN200  OR A
6074        RET
6078 ;
6082 LNH1   DEFW 0
6086 ;
6090 ;
6094 SN000  LD A,8
6098        CALL LEASP
6102        RET C
6106        LD (WFH1),HL
6110        LD HL,MBUF
6114        LD A,11H
6118        LD B,4
6122 SN020  LD (HL),A
6126        INC HL
6130        ADD A,A
6134        DJNZ SN020
6138        PUSH DE
6142        EX DE,HL
6146        LD HL,FH
6150        LD BC,FHL
6154        LDIR
6158        POP HL
6162        LD DE,MBUF+16
6166        LD BC,256-16
6170        LDIR
6174        LD DE,MBUF
6178        LD A,10
6182        CALL LEASP
6186        RET C
6190        PUSH HL
6194        LD HL,(FHLEN)
6198        LD DE,-256+16
6202        ADD HL,DE
6206        DEC HL
6210        INC H
6214        LD B,H
6218        POP DE
6222        CALL WF100
6226        RET C
6230        JP WF050
6234 ;
6238 ;
6242 ; SEQUENTIELLES LESEFILE EROEFFNEN
6246 SLO000 LD A,1
6250        CALL LEAS
6254        LD HL,0FF00H
6258        LD (SLOP),HL
6262        RET
6266 ;
6270 ; BYTE LESEN
6274 SL000  PUSH HL
6278        LD HL,SLOP
6282        LD A,(HL)
6286        OR A
6290        JR NZ,SL150
6294         PUSH BC
6298        PUSH DE
6302        LD DE,MBUF
6306         INC HL
6310        INC (HL)
6314        LD L,(HL)
6318        LD H,0
6322         LD A,2
6326        CALL LEAS
6330        JR C,SL160
6334        POP DE
6338        POP BC
6342 SL150  LD HL,SLOP
6346        LD A,(HL)
6350        INC (HL)
6354        LD HL,MBUF
6358        LD L,A
6362        LD A,(HL)
6366        OR A
6370 SL160  POP HL
6374        RET
6378 ;
6382 SLOP   DEFB 0
6386 SLOSEK DEFB 0
6390 ;
6394 ; SCHREIBFILE EROEFFNEN
6398 SWO000 LD A,8
6402        CALL LEAS
6406        RET C
6410        XOR A
6414        LD (SWOP),A
6418        RET
6422 ;
6426 ; BYTE SCHREIBEN
6430 SW000  EX DE,HL
6434        PUSH HL
6438        LD HL,SWOP
6442        LD A,(HL)
6446        INC (HL)
6450        LD HL,MBUF
6454        LD L,A
6458        LD (HL),E
6462        CP 255
6466        CCF
6470        JR NZ,SW210
6474        PUSH BC
6478        LD DE,MBUF
6482        LD A,10
6486        CALL LEAS
6490        POP BC
6494 SW210  POP DE
6498        RET
6502 ;
6506 SWOP   DEFB 0
6510 ;
6514 ;
6518 ;
6522 ; SCHREIBFILE ABSCHLIESSEN
6526 SWC000 PUSH HL
6530        LD L,"Z-40H
6534        CALL SW000
6538        PUSH BC
6542        LD B,0
6546 SWC020 LD L,0
6550        CALL SW000
6554        DJNZ SWC020
6558        POP BC
6562        POP HL
6566        LD A,9
6570        JP LEAS
6574 ;
6578 ;
6582 FH     DEFS 0      ; FILEHEADER ZWISCHENSPEICHER
6586 FHLADR DEFW 0
6590 FHLEN  DEFW 0
6594 FHSADR DEFW 0
6598 FHSFUN DEFB 0
6602 FHL    EQU 8
6606 FHLSP  DEFS 1      ;Platz für LDIR in LN030****
6610 ;
6614 ;END FILEEAS
6618 ;
6622 ;-----------------------------------------
6626 ;PHEAS-ANPASSUNG VER. 2.5  80-bus 4/5/6/84
6630 ;GUENTER BOEHM KARLSRUHE
6634 ;nach 80-Bus Journal  10/83
6638 ;-----------------------------------------
6642 ;ORG #AB48 !;Anpass. an "NSYS"
6646 PHEAS  CALL IINIT  ;**** I-Register !
6650        OR A
6654        JP Z PINIT  ;KARTE INITIIEREN
6658        DEC A
6662        JP Z TSTHOM  ;LAUFWERKTEST
6666        DEC A
6670        JR Z, PSEL  ;LAUFWERK SELEKTIEREN
6674        DEC A
6678        JP Z PREAD  ;SEKTOR LESEN
6682        DEC A
6686        JP Z PWRITE ;SEKTOR SCHREIBEN
6690        SCF
6694        RET
6698 ;----------------------------------------
6702 INTVEK DEFW FLPINT ;INTERRUPT TABELLE
6706 ;----------------------------------------
6710 PSEL   CALL TRKMEM ;TRACK SPEICHERN
6714        LD A,C
6718        CP 3        ;max. Laufwerkszahl  ****
6722        JR NC,FALWNR;                    ****
6726        LD (LWNR),A ;NEUES LAUFWERK
6730        OR A
6734        JR Z PSELA
6738        CP 1
6742        JR Z PSELB
6746        CP 2
6750        JR Z PSELC
6754        CP 3
6758        JR Z PSELD
6762 FALWNR  LD A,#17   ;****
6766        SCF
6770        RET
6774 ;
6778 PSELA  LD A ,#21   ; LAUFW. A DD
6782        OUT (10H),A
6786        LD HL,DSBA
6790        LD A,16     ;Sekt.
6794        LD (SEKT),A
6798        LD A,64
6802        LD (SYS),A
6806        LD A,(TRACKA) ;GESPEICHERTE TRACKNR
6810        OUT (FDCTRK),A;AKTUALISIEREN
6814        RET
6818 ;
6822 ;
6826 PSELB  LD A,#22    ; LAUFWERK B DD
6830        OUT (10H),A
6834        LD HL,DSBA  ;gleiches Format wie Lw A
6838        LD A,16     ;Sekt.
6842        LD (SEKT),A
6846        LD A,64
6850        LD (SYS),A
6854        LD A,(TRACKB)
6858        OUT (FDCTRK),A
6862        RET
6866 ;
6870 PSELC  LD A,#31    ;Laufwerk A SD
6874        OUT (#10),A
6878        LD HL,DSBB
6882        LD A,10     ;Sekt.
6886        LD (SEKT),A
6890        LD A,40
6894        LD (SYS),A
6898        LD A,(TRACKC)
6902        OUT (FDCTRK),A
6906        RET
6910 ;
6914 PSELD  LD A,#32    ;Laufwerk B SD
6918        OUT (#10),A
6922        LD HL,DSBB
6926        LD A,10     ;Sekt.
6930        LD (SEKT),A
6934        LD A,40
6938        LD (SYS),A
6942        LD A,(TRACKD)
6946        OUT (FDCTRK),A
6950        RET
6954 ;
6958 DSBA   DEFB 64     ;4 X SEKTORANZAHL (res.System)
6962        DEFB 8      ;8 Sekt. DIRECTORY
6966        DEFB 143    ;max.Gruppenanzahl-1
6970 ;
6974 DSBB   DEFB 40,8,87 ;NEUES FORMAT mc !
6978 SEKT   DEFW 0       ;SEKTOREN PRO SPUR
6982 SYS    DEFW 0      ;SEKT. FUER SYSTEM
6986 TRACKA DEFB 0
6990 TRACKB DEFB 0
6994 TRACKC DEFB 0
6998 TRACKD DEFB 0
7002 LWNR   DEFB 0
7006 ;
7010 TSTHOM CALL HOME   ;WARUM IST LAUFWERK
7014        CALL CTDEL  ;NICHT BEREIT?
7018        CALL TRKMEM ;TRACK0 AKTUALISIEREN
7022        IN A,(FDCSTA)
7026        BIT 2,A
7030        JR NZ NODISK
7034        LD A,#1F    ;KEIN LAUFWERK
7038        JR TSTERR
7042 NODISK BIT 1,A
7046        JR Z NOTRDY
7050        LD A,#10    ;KEINE DISKETTE
7054        JR TSTERR
7058 NOTRDY BIT 7,A
7062        RET Z
7066        LD A, #1A
7070 TSTERR SCF
7074        RET
7078 ;-----------------------------------------
7082 TRKMEM PUSH HL     ;ROUTINE ZUM ABSPEICHERN
7086        PUSH BC        ;DES AKTUELLEN TRACKS
7090        LD A,(LWNR)
7094        LD B,A
7098        INC B
7102        LD HL,TRACKA-1
7106 LOOP   INC HL
7110        DJNZ LOOP   ;AKT. LAUFWERK
7114        IN A,(FDCTRK)
7118        LD (HL),A
7122        POP BC
7126        POP HL
7130        RET
7134 ;
7138 ;-----------------------------------------
7142 PREAD  PUSH BC
7146        PUSH HL
7150        CALL PSEEK
7154        PUSH DE
7158        POP HL      ;BUFFER
7162        LD BC,#0502 ;2 X 5 RETRIES
7166 RRETRY CALL READ
7170        OR A
7174        JR Z OKREAD
7178        DJNZ RRETRY
7182        DEC C
7186        JR Z OKREAD
7190        CALL HOME
7194        POP HL      ;SEKTORNUMMER
7198        PUSH HL
7202        CALL PSEEK
7206        PUSH DE
7210        POP HL      ;BUFFER
7214        LD B,5      ;NOCH 5 RETRIES
7218        JR RRETRY
7222 OKREAD POP HL
7226        POP BC
7230        OR A
7234        JR NZ RDERR
7238        RET
7242 ;-----------------------------------------
7246 CTDEL  PUSH AF
7250        PUSH BC
7254        LD B,4      ;1 sec Verz. bei 4 MHz
7258 DELAY4 LD C,250
7262        CALL DELAY
7266        DJNZ DELAY4
7270        POP BC
7274        POP AF
7278        RET
7282 ;
7286 ;-----------------------------------------
7290 RDERR  LD A,11H    ;Lesefehler
7294        SCF
7298        RET
7302 ;-----------------------------------------
7306 PSEEK  IN A,(FDCSTA)
7310        BIT 7,A     ;READY?
7314        CALL NZ TSTHOM
7318        JR NC PSE050
7322        POP HL      ;RETURN ADDRESS
7326        POP HL      ; "
7330        POP HL      ; "
7334        RET
7338 PSE050 PUSH BC
7342        BIT 7,H
7346        JR Z PSE100 ;phys.=log. Sektornummer
7350        RES 7,H     ;Bit 7 rücksetzen
7354        LD BC,(SYS) ;reserviert fuer System
7358        ADD HL,BC   ;phys.=relat.+Anzahl Syst.Sekt.
7362 PSE100 PUSH DE
7366        LD DE,(SEKT);Sekt.pro Spur
7370        LD A,0FFH
7374        OR A        ;Reset Carry
7378 PSE200 LD B,L      ;Rest
7382        SBC HL,DE   ;DIVISION
7386        INC A       ;Ergebnis=Spur
7390        JR NC PSE200
7394        POP DE
7398        CALL SEEK
7402        LD A,B
7406        INC A       ;Sekt.0-9=Sekt.1-10
7410        POP BC
7414        JP SETSEK
7418 ;-----------------------------------------
7422 PWRITE PUSH BC
7426        PUSH HL
7430        CALL PSEEK
7434        PUSH DE
7438        POP HL      ;BUFFER
7442        LD B,10
7446 WRETRY CALL WRITE
7450        OR A
7454        JR Z OKWRIT
7458        DJNZ WRETRY
7462 OKWRIT POP HL
7466        POP BC
7470        OR A
7474        JR NZ WTERR
7478        RET
7482 ;
7486 WTERR  BIT 6,A     ;WRITE PROTECT?
7490        LD A,#15
7494        JR NZ WTERR1
7498        LD A,#16
7502 WTERR1 SCF
7506        RET
7510 ;-----------------------------------------
7514 ;FDC CONTR. VER 1.7  19.11.83
7518 ;G.Böhm/H.Emmelmann
7522 ;nach Routinen von Oberle/Zippel
7526 FDCCMD EQU 0CH
7530 FDCTRK EQU 0DH
7534 FDCSEK EQU 0EH
7538 FDCDAT EQU 0FH
7542 FDCSTA EQU 0CH
7546 ;
7550 PIOAD  EQU 10H
7554 PIOAC  EQU 11H
7558 PIOBD  EQU 12H
7562 PIOBC  EQU 13H
7566 ;
7570 FHOME  EQU 03      ;SPEED STEPPER MOTOR
7574 FSEEK  EQU 1BH     ;SPUR SUCHEN
7578 FSEEKV EQU 1FH     ;SUCHEN MIT VERIFY
7582 FREAD  EQU 8CH     ;SEKTOR LESEN
7586 FWRITE EQU 0ACH    ;SEKTOR SCHREIBEN
7590 FINT0  EQU 0D0H    ;FDC RÜCKSETZEN
7594 FWRTRK EQU 0F4H    ;GANZE SPUR SCHREIBEN
7598 FRDTRK EQU 0E4H    ;GANZE SPUR LESEN
7602 ;-----------------------------------------
7606 ;
7610 INIT   DI          ;PIOs u. FDC initiieren
7614        LD A,0CFH
7618        OUT (PIOAC),A ;CONTROLMODE
7622        LD A,0C0H
7626        OUT (PIOAC),A ;I/O Maske
7630 ;
7634        LD A,0CFH
7638        OUT (PIOBC),A ;CONTROLMODE
7642        LD A,0F0H
7646        OUT (PIOBC),A ;I/O Maske
7650 ;
7654        LD A,0B7H   ;INTERRUPT CONTROL MODE
7658        OUT (PIOAC),A
7662        LD A,7FH
7666        OUT (PIOAC),A ;MASKE:BIT7 macht Interr.
7670 ;
7674        LD A,8      ;FDC RÜCKSETZEN
7678        OUT (PIOAD),A
7682        LD C,1
7686        CALL DELAY
7690        LD A,28H
7694        OUT (PIOAD),A
7698        LD A,FINT0
7702        OUT (FDCCMD),A
7706        EX (SP),HL
7710        EX (SP),HL
7714        IN A,(FDCSTA)
7718        LD HL,INTVEK              ;*****
7722        LD A,H      ;INTERR.VECTOR MSB ;*
7726        LD I,A                    ;*
7730        LD A,L      ;LSB                ;*****
7734        OUT (PIOAC),A
7738        LD A,21H    ;LAUFWERKNUMMER HIER A
7742        OUT (PIOAD),A
7746        EI
7750        IM 2        ;INTERRUPT MODE
7754        RET
7758 ;-----------------------------------------
7762 HOME   LD A,FHOME
7766        OUT (FDCCMD),A
7770        EI
7774 HOMEW  JR HOMEW
7778        IN A,(FDCSTA)
7782        RET
7786 ;-----------------------------------------
7790 ;   SEEK PARAMETER IN A
7794 SEEK   OUT (FDCDAT),A ;TRACK NUMBER
7798        LD A,FSEEK
7802        EI
7806        OUT (FDCCMD),A
7810 SEEKW  JR SEEKW
7814        IN A,(FDCSTA)
7818        RET
7822 ;----------------------------------------
7826 SETSEK OUT (FDCSEK),A ;SEKTORNUMMER
7830        RET
7834 ;-----------------------------------------
7838 READ   PUSH BC
7842        PUSH DE
7846        PUSH HL
7850        CALL SAV66
7854        LD HL,NMIR
7858        CALL RE66HL
7862        POP HL
7866        LD C,FDCDAT
7870        LD A,FREAD
7874        PUSH HL
7878        EI
7882        OUT (FDCCMD),A
7886 READW  JR READW
7890        IN A,(FDCSTA)
7894        CALL RE66
7898        POP HL
7902        POP DE
7906        POP BC
7910        RET
7914 ;-----------------------------------------
7918 WRITE  PUSH BC
7922        PUSH DE
7926        PUSH HL
7930        CALL SAV66
7934        LD HL,NMIW
7938        CALL RE66HL
7942        POP HL
7946        LD C,FDCDAT
7950        LD A,FWRITE
7954        EI
7958        PUSH HL
7962        OUT (FDCCMD),A
7966 WRITEW JR WRITEW
7970        IN A,(FDCSTA)
7974        CALL RE66
7978        POP HL
7982        POP DE
7986        POP BC
7990        RET
7994 ;-----------------------------------------
7998 SAV66  LD HL,66H   ;RAMBEREICH 66H RETTEN
8002        LD DE,SAVE
8006        LD BC,4
8010        LDIR
8014        RET
8018 ;
8022 RE66   LD HL,SAVE  ;UND WIEDER HERSTELLEN
8026 RE66HL LD DE,66H
8030        LD BC,4
8034        LDIR
8038        RET
8042 ;-----------------------------------------
8046 SAVE   DEFS 4
8050 ;-----------------------------------------
8054 NMIR   INI
8058        RETN
8062 NMIW   OUTI
8066        RETN
8070 ;-----------------------------------------
8074 DELAY  PUSH HL
8078        PUSH DE
8082        PUSH BC
8086 DELAY1 LD B,100
8090 DELAY2 RLA
8094        ADD HL,HL
8098        ADD HL,HL
8102        DEC B
8106        JP NZ,DELAY2
8110        DEC C
8114        JP NZ,DELAY1
8118        POP BC
8122        POP DE
8126        POP HL
8130        RET
8134 ;-----------------------------------------
8138 ; INTERRUPTROUTINE  AUSGELOEST VOM  FDC
8142 ;
8146 FLPINT PUSH AF
8150        PUSH BC
8154        PUSH HL
8158        LD HL,6
8162        ADD HL,SP
8166        LD C,(HL)
8170        INC HL
8174        LD B,(HL)
8178        LD A,(BC)
8182        CP 18H
8186        JR NZ,NOLOOP
8190        INC BC
8194        LD A,(BC)
8198        CP 0FEH
8202        JR NZ,NOLOOP
8206        INC BC
8210        LD (HL),B
8214        DEC HL
8218        LD (HL),C
8222 NOLOOP POP HL
8226        POP BC
8230        POP AF
8234        RETI
8238        EI
8242 ;-----------------------------------------
8246 PINIT  CALL INIT
8250        CALL TSTHOM
8254        RET
8258 ;-----------------------------------------
8262 ;
8266 IINIT  PUSH HL     ;****
8270        PUSH AF      ;*
8274        DI           ;falls andere Software,
8278        LD HL,INTVEK ;die EMDOS aufruft,
8282        LD A,H       ;Interupts benutzt
8286        LD I,A       ;(z.B. CASMON ...)
8290        IM 2
8294        EI
8298        POP AF
8302        POP HL      ;*
8306        RET         ;****
8310 ;
8314 ;
8318 DRVA## DEFS 0
8322 ;
8326 ;END EMDOS
8330 ;
