ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM BDOS


Výpis programu BDOS


PAGE 66
;*******************************************************
;*                                                     *
;*              B D O S   p r o   Z P S 2              *
;*                                                     *
;*******************************************************
;
;                   modify  Jiri  Hlavac
;                       22.3.1988
;
;*************************************************************
.z80


longBD  EQU     $next - bdosb   ;delka BDOSu (max 0E00H)
;*******************************************************

iobyte  EQU     40E2H           ;adresa IOBYTU v MONITORU ZPS2
dmaad   EQU     4280H           ;implicitni buffer
ramb    EQU     4300H           ;zacatek pouzitelne RAM
TPA     EQU     4400H           ;zacatek uzivatelske oblasti

bdosl   EQU     0E00H           ;delka BDOS
bdosb   EQU     0F000H          ;baze BDOS
biosb   EQU     bdosb + bdosl   ;baze BIOS

bdos    EQU     bdosb + 6       ;vstupni bod BDOS
bios    EQU     biosb           ;vstupni bod BIOS
reboot  EQU     bios+3          ;adresa restartu
;*******************************************************

.PHASE  bdosb

SSEQ:   DEFB    'ZPS-2 '        ; SYNCHRO SEKVENCE
        JP      BD100           ; VSTUPNI BOD   B D O S

;       TABULKA ADRES PROCEDUR ZPRACOVANI CHYBOVYCH STAVU

BDSJPA: DEFW    BADSEC          ; BAD SECTOR
SLEJPA: DEFW    SELERR          ; ERROR SELECT
ROEJPA: DEFW    ROERR           ; READ ONLY ERROR
FROJPA: DEFW    FROERR          ; FILE READ ONLY ERROR
;
;
;
BD100:  EX      DE,HL           ; ADRESA FCB DO [HL]
        LD      (FCBSAV),HL     ; USCHOVA ADRESY FCB
        EX      DE,HL           ;
        LD      A,E             ; USCHOVA REG.[E]
        LD      (ESAV),A        ;
        LD      HL,0            ; NULA DO [HL]
        LD      (RETPRM),HL     ; NULOVANI NAVRATOVEHO PAR.
        ADD     HL,SP           ; [SP] DO [HL]
        LD      (SPSAV),HL      ; USCHOVA UZIV. ZASOBNIKU
        LD      SP,BDSP         ; NASTAVENI [SP] PRO BDOS
        XOR     A               ; NULA DO [A]
        LD      (UNITNO),A      ; NULOVANI # DISK. JEDNOTKY
        LD      (DSKFLG),A      ; NILOVANI DISK FLAG
        LD      HL,RTBDOS       ; PRIPRAVA NAVRATOVE ADRESY
        PUSH    HL              ; Z BDOS DO [SP]
        LD      A,C             ; CISLO SLUZBY DO [A]
        CP      41              ; TEST CISLA SLUZBY < 40
        RET     NC              ; NAVRAT PRI NEPLATNEH # SLUZBY
        LD      C,E             ; PRESUN [E] DO [C]
        LD      HL,CHDJPT       ; VST.BOD TAB.ADRES SLUZEB BDOS
        LD      E,A             ; # SLUZBY DO [E]
        LD      D,0             ; NULA DO [D]
        ADD     HL,DE           ; VYPOCET ADRESY PROCEDURY
        ADD     HL,DE           ; SLUZBY BDOS
        LD      E,(HL)          ; A JEJI PRESUN DO [DE]
        INC     HL
        LD      D,(HL)          ;
        LD      HL,(FCBSAV)     ; INICIALIZACE FCB ADR
        EX      DE,HL           ;
        JP      (HL)            ; SKOK DO PROCEDURY SLUZBY
;
;
;       PRI SKOKU DO PROCEDURY SLUZBY BDOS JSOU PAMET A REGIST-
;       RY NASTAVENY TAKTO:
;
;       REG     [C]     OBSAHUJE [E] PRED VOLANIM BDOS
;               [DE]    OBSAHUJE [DE] PRED VOLANIM BDOS
;
;       PAMET   ESAV    OBSAHUJE USCHOVANY [E]
;               FCBSAV  OBSAHUJE USCHOVANY [DE]
;               SPSAV   OBSAHUJE USCHOVANY UZIVATELSKY [SP]
;
;               STACK   ADRESA NAVRATOVE PROCEDURY Z BDOS
;
;
;
;       TABULKA ADRES SLUZEB BDOS
;
;
CHDJPT: DEFW    BIOS+03H        ; CMD 00- RESET SYSTEMU (BOOT)
        DEFW    CONINP          ; CMD 01- VSTUP ZNAKU Z KONZOLY
        DEFW    CONOUT          ; CMD 02- VYST.ZNAKU NA KONZOLU
        DEFW    RDINP           ; CMD 03- VST.ZNAKU ZE SNIMACE
        DEFW    BIOS+12H        ; CMD 04- VYST.ZNAKU NA DEROVAC
        DEFW    BIOS+0FH        ; CMD 05- VYST.ZNAKU NA TISKARN
        DEFW    DCONIO          ; CMD 06- PRIHY I/O NA KONZOLU
        DEFW    GETIOB          ; CMD 07- DEJ I/O BYTE
        DEFW    SETIOB          ; CMD 08- NASTAV I/O BYTE
        DEFW    PRTSTG          ; CMD 09- VYPIS ASCII RETEZEC
        DEFW    RDCONB          ; CMD 10- CTI RETEZEC Z KONZOLY
        DEFW    GCOSTS          ; CMD 11- DEJ STATUS KONZOLY
        DEFW    RETVER          ; CMD 12- DEJ CISLO VERZE OS
        DEFW    RESDSY          ; CMD 13- RESET DISK. SYSTEHU
        DEFW    SELDSK          ; CMD 14- VYBER DISK
        DEFW    OPFIL           ; CMD 15- OTEVRI SOUBOR
        DEFW    CLFIL           ; CMD 16- ZAVRI SOUBOR
        DEFW    SFFRST          ; CMD 17- HLEDEJ PRVNI VYSKYT
                                ;         V ADRESARI
        DEFW    SFNEXT          ; CMD 18- HLEDEJ DALSI VYSKYT
                                ;         V ADRESARI
        DEFW    DELFIL          ; CMD 19- ZRUS SOUBOR
        DEFW    RDSEQ           ; CMD 20- SEKVENCNI CTENI
        DEFW    WRTSEQ          ; CMD 21- SEKVENCNI ZAPIS
        DEFW    MAKFIL          ; CMD 22- ZALOZ SOUBOR
        DEFW    RENFIL          ; CMD 23- PREJHENUJ SOUBOR
        DEFW    RETLOG          ; CMD 24- VRAT VEKTOR AKTIVNICH
                                ;         DISKU
        DEFW    RETCDK          ; CMD 25- VRAT # VYBRANEHO DISKU
        DEFW    SETDMA          ; CMD 26- NASTAV DMA ADREQU
        DEFW    GETALC          ; CMD 27- DEJ ADR.ALOKACN.VEKT,
        DEFW    WRTPRT          ; CMD 28- OZNAC DISK JAKO R/O
        DEFW    GETROV          ; CMD 29- DEJ ADRESU R/O VEKTORU
        DEFW    SETFAT          ; CMD 30- NASTAV ATRIB. SOUBORU
        DEFW    GETDPA          ; CMD 31- DEJ ADR.PARAM. DISKU
        DEFW    SGUCD           ; CMD 32- DEJ/ZMEN # UZIVATELE
        DEFW    RDRND           ; CMD 33- PRIME CTENI ZE SOUBORU
        DEFW    WRTRND          ; CMD 34- PRIMY ZAPIS DO SOUBORU
        DEFW    CFSIZE          ; CMD 35- VYPOC. DELKU SOUBORU
        DEFW    SRNDRC          ; CMD 36- NASTAV CISLO ZAZNAMU
                                ;         PRO PRIMY ZAPIS
        DEFW    RESDSK          ; CMD 37- RESET DISK. JEDNOTKY
        DEFW    RETRET          ; CMD 38- NEIMPLEMENTOVANO
        DEFW    RETRET          ; CMD 39- NEIMPLEMENTOVANO
        DEFW    WRRDZF          ; CMD 48- POPIS ALOKACNI BLOK
                                ;         NULANI A ULOZ ZAZNAM
;
;
;       CHYBOVE PROCEDURY BDOS
;
BADSEC: LD      HL,BDSMSG       ; ADRESA HLASENI DO [HL]
        CALL    BDOSER          ; VYPIS HLASENI
        CP      03H             ; TEST ZADANI CTRL-C
        JP      Z,REBOOT        ; CTRL-C ZADANO => REBOOT
        RET                     ; JINAK RETURN
;
SELERR: LD      HL,SELMSG       ; ADRESA CHYB. HLASENI DO [HL]
        JP      COHEER          ; VYPIS HLASENI + REBOOT
;
ROERR:  LD      HL,ROMSG        ; ADRESA CHYB, HLASENI DO [HL]
        JP      COHEER          ; VYPIS HLASENI + REBOOT
;
FROERR: LD      HL,FILMSG       ; ADRESA CHYB. HLASENI DO [HL]
COHEER: CALL    BDOSER          ; VYPIS HLASENI
        JP      REBOOT          ; A REBOOT
;
BDEMSG: DEFB    'BDOS ERR ON '
BDEUNI: DEFB    ' : $'
BDSMSG: DEFB    'BAD SECTOR$'
SELMSG: DEFB    'SELECT$'
FILMSG: DEFB    'FILE '
ROMSG:  DEFB    'R/O$'
;
;
;       PROCEDURA VYPISU CHYBOVYCH HLASENI BDOS
;
BDOSER: PUSH    HL              ; USCHOVA ADRESY HLASENI
        CALL    CRLF            ; VYPIS CR + LF
        LD      A,(DSKNO)       ; CISLO DISKU DO [A]
        ADD     A,41H           ; JEHO UPRAVA NA ASCII
        LD      (BDEUNI),A      ; A PRESUN DO TEXTU HLASENI
        LD      BC,BDEMSG       ; INICIALIZACE ADRES A VYPIS
        CALL    TYPSTG          ; HLASENI
        POP     BC              ;
        CALL    TYPSTG          ;
;                                 CEKANI NA VSTUP ZNAKU
;
;
;       CTENI ZNAKU Z KONZOLY
;
COIN:   LD      HL,INBYT        ; ADRECA VCTUPNIHO BYTE DO [HL]
        LD      A,(HL)          ; VST. BYTE (ZNAK) DO [A]
        LD      (HL),0          ; NULOVANI VST. BYTE
        OR      A               ; TEST VST. BYTE
        RET     NZ              ; RET KDYZ VST.BYTE JIZ BYL
                                ; NAPLNEN
        JP      BIOS+09H        ; JINAK CTENI ZNAKU + RETURN
;
;
;       PROCEDURA VSTUPU ZNAKU Z KONZOLY
;
CORD:   CALL    COIN            ; CTENI ZNAKU Z KONZOLY
        CALL    TSTCTL          ; TEST MOZNOSTI ZOBRAZENI
        RET     C               ; KDYZ NELZE ZOBRAZIT
        PUSH    AF              ; USCHOVA ZNAKU DO ZACOBNIKU
        LD      C,A             ; A DO [C]
        CALL    CONOUT          ; ZOBRAZENI (ECHO) ZNAKU
        POP     AF              ; PRIPRAVA ZNAKU DO [A]
        RET
;
;
;       TEST MOZNOCTI ZOBRAZENI ZNAKU
;
TSTCTL: CP      0DH             ; TEST NA CR
        RET     Z               ; RETURN KDYZ CR
        CP      0AH             ; TEST NA LF
        RET     Z               ; RETURN KDYZ LF
        CP      09H             ; TEST NA TAB
        RET     Z               ; RETURN KDYZ TAB
        CP      08H             ; TEST NA BACKCPACE
        RET     Z               ; RETURN KDYZ BACKCPACE
        CP      ' '             ; TEST NA MEZERU (20H)
        RET                     ; RETURN
;
;
;       TEST VSTUPU - OBSLUHA CTRL-S (STOP) A CTRL-C
;
TSTINP: LD      A,(INBYT)       ; VSTUPNI BYTE DO [A]
        OR      A               ; JEHO TEST
        JP      NZ,TCP130       ; CKOK KDYZ JIZ BYL NAPLNEN
        ;
        CALL    BIOS+06H        ; TEST STATUSU CONSOLY
        AND     01H             ;
        RET     Z               ; RET KDYZ JE ZNAK V BUFFERU
        CALL    BIOS+09H        ; CTENI VST. BYTU (ZNAKU)
        CP      13H             ; JE TO CTRL-S (STOP)?
        JP      NZ,TCP120       ; CKOK KDYZ NE
        CALL    BIOS+09H        ; CEKANI NA VSTUP DALSIHO ZNAKU
        CP      03H             ; JE TO CTRL-C (REBOOT)
        JP      Z,REBOOT        ; REBOOT KDYZ ANO
        XOR     A               ; NULOVANI [A]
        RET
;
TCP120: LD      (INBYT),A       ; ULOZENI VST. BYTE
TCP130: LD      A,01            ; INDIKACE DO [A]
        RET
;
;
;       OBSLUHA NEGRAFICKEHO VYSTUPNIHO BYTE (ZNAK S CTRL)
;
CTLBYT: LD      A,C             ; BYTE DO [A]
        CALL    TSTCTL          ; TEST NA PLATNY CTRL ZNAK
                                ; NEBO HEZERU
        JP      NC,CONOUT       ; VYSTUP BYTU + RETURN
        PUSH    AF              ; USCHOVA BYTU
        LD      C,'^'           ; '^' K INDIKACI CTRL BYTU
        CALL    COOUT           ; TISK '^'
        POP     AF              ; OBNOVA BYTU
        OR      40H             ; NASTAV 6 BIT ZNAKU(JE ASCII)
        LD      C,A             ; A JEHO PRESUN DO [C]
;
;
;       PROCEDURA VYSTUPU ZNAKU NA KONZOLU
;
COOUT:  LD      A,(BSFLAG)      ; BACKSPACE FLAG DO [A]
        OR      A               ; JEHO TEST
        JP      NZ,COO110       ; SKOK KDYZ JE BACKSPACE FLAG
                                ; NASTAVENY
        PUSH    BC              ; USCHOVA [BC]
        CALL    TSTINP          ; TEST VSTUPU (CTRL-S)
        POP     BC              ; INICIALIZACE [BC]
        PUSH    BC              ; USCHOVA [BC]
        CALL    BIOS+0CH        ; VYPIS NA CONSOLU
        POP     BC              ; INICIALIZACE [BC]
        PUSH    BC              ; USCHOVA [BC]
        LD      A,(CTLPF)       ; CTRL-P FLAG DO [A]
        OR      A               ; TEST CTRL-P FLAG
        CALL    NZ,BIOS+0FH     ; KDYZ JE NASTAVENY => TISK
        POP     BC              ; INICIALIZACE [BC]
;
COO110: LD      A,C             ; VYSTUPNI BYTE DO [A]
        LD      HL,CHRPOS       ; ADRESA POZICE VYST. ZNAKU
        CP      7FH             ; JE TO RUBOUT / DELETE ?
        RET     Z               ; RET KDYZ RUBOUT/DELETE
        INC     (HL)            ; INIC. POZICE VYST. ZNAKU
        CP      20H             ; TEST HODNOTY ZNAKU (ASCII)
        RET     NC              ; RET KDYZ NEBYL S CTRL
        DEC     (HL)            ; RESET POZICE VYST. ZNAKU
        LD      A,(HL)          ; POZICE ZNAKU DO [A]
        OR      A               ; JEHO TEST NA NULU
        RET     Z               ; RET KDYZ JE ROVEN NULE
        LD      A,C             ; VYSTUPNI ZNAK DO [A]
        CP      08H             ; JE TO BACKSPACE
        JP      NZ,COO120       ; SKOK KDYZ NE
        DEC     (HL)            ; ANO,UPRAV POZICI VYST.ZNAKU
        RET                     ; RETURN
COO120: CP      0AH             ; JE TO LINE FEED ?
        RET     NZ              ; RET KDYZ NE
        LD      (HL),0          ; NULOVANI POZICE VYST.ZNAKU
        RET                     ; RETURN
;
;
;       VYSTUP ZNAKU NA KONZOLU         CMD 02
;       =======================
;
CONOUT: LD      A,C             ; VYST.ZNAK DO [A]
        CP      09H             ; JE TO TAB ?
        JP      NZ,COOUT        ; SKOK KDYZ NENI TAB
CO10:   LD      C, ' '          ; MEZERA DO [C]
        CALL    COOUT           ; VYPIS MEZERY
        LD      A,(CHRPOS)      ; POZICE VYST.ZNAKU DO [A]
        AND     07H             ; TEST NA TAB STOP
        JP      NZ,CO10         ; OPAKOVANI PO TAB STOP
        RET                     ; RETURN
;
;
;       VYMAZ ZNAKU Z OBRAZOVKY
;
BACKSP: CALL    BCKSP           ; NAVRAT KURZORU O JEDNU POZ.
        LD      C, ' '          ; MEZERA DO [C]
        CALL    BIOS+0CH        ; VYSTUP NA CONSOLU
BCKSP:  LD      C,08H           ; BACKSPACE DO [C]
        JP      BIOS+0CH        ; VYSTUP NA CONSOLU + RETURN
;
;
;       ZRUSENI VSTUPNIHO RADKU - OSETRENI CTRL-U
;
CTLU:   LD      A,'#'           ; PRIPRAVA ZNAKU '#'
        CALL    COOUT           ; JEHO VYPIS
        CALL    CRLF            ; A CR + LF
CTLU20: LD      A,(CHRPOS)      ; POZICE VYST. ZNAKU DO [A]
        LD      HL,ICPOS        ; ADRESA POZICE VST.ZNAKU
        CP      (HL)            ; POROVNANI OBOU
        RET     NC              ; RET PRI JEJICH ROVNOSTI
        LD      C, ' '          ; MEZERA DO [C]
        CALL    COOUT           ; JEJI VYPIS
        JP      CTLU20          ; OPAKOVANI
;
;
;       PROCEDURA VYPISU CR + LF
;
CRLF:   LD      C,0DH           ; PRIPRAVA CR
        CALL    COOUT           ; VYPIS CR
        LD      C,0AH           ; PRIPRAVA LF
        JP      COOUT           ; VYPIS LF + RETURN
;
;
;       PROCEDURA VYPISU ASCII RETEZCE
;
TYPSTG: LD      A,(BC)          ; PRIPRAVA VYST. BYTU
        CP      '$'             ; JE TO TERMINATOR ?
        RET     Z               ; RET KDYZ ANO
        INC     BC              ; UPRAVA UKAZATELE
        PUSH    BC              ; USCHOVA UKAZATELE
        LD      C,A             ; VYSTUPNI BYTE DO [C]
        CALL    CONOUT          ; JEHO VYPIS
        POP     BC              ; INICIALIZACE UKAZATELE
        JP      TYPSTG          ; OPAKOVANI
;
;
;       CTI RETEZEC ZNAKU Z KONZOLY     CMD 10
;       ===========================
;
RDCONB: LD      A,(CHRPOS)      ; INICIALIZACE HODNOTY POZICE
        LD      (ICPOS),A       ; VSTUPNIHO ZNAKU
        ;
        LD      HL,(FCBSAV)     ; ADRESA VST. BUFFERU DO [HL]
        LD      C,(HL)          ; DELKA BUFFERU DO [C]
        INC     HL              ; ADR. ULOZENI SKUTECNEHO POCTU
        PUSH    HL              ; JEJI USCHOVA DO ZASOBNIKU
        LD      B,0             ; NULOVANI POCITADLA VST.BYTU
;
RCB110: PUSH    BC              ; USCHOVA [BC]
        PUSH    HL              ; USCHOVA ADR. VSTUP. BUFFERU
;
RCB120: CALL    COIN            ; CTI VSTUPNI BYTE Z KONZOLY
        AND     7FH             ; NULUJ 7 BIT
        POP     HL              ; OBNOVA ADR. VSTUP.
        POP     BC              ; BUFFERU OBNOVA [BC]
        CP      0DH             ; TEST VSTUPU NA CR
        JP      Z,RCB350        ; SKOK KDYZ JE VSTUP CR
        CP      0FH             ; TEST VSTUPU NA LF
        JP      Z,RCB350        ; SKOK KDYZ JE VSTUP LF
        CP      08H             ; TEST VSTUPU NA BACKSPACE
        JP      NZ,RCB130       ; SKOK KDYZ VSTUP NENI BACKPACE
;
        LD      A,B             ; POCET VST. BYTU DO [A]
        OR      A               ; TEST NA NULU
        JP      Z,RCB110        ; KDYZ NULA - CTI DALSI
        DEC     B               ; UPRAVA POCTU VST.BYTU
        LD      A,(CHRPOS)      ; POZICE VYST. ZNAKU DO [A]
        LD      (BSFLAG),A      ; ULOZENI NA BACKSPACE FLAG
        JP      RCB240
;
;
RCB130: CP      7FH             ; TEST VSTUPU NA RUBOUT/DELETE
        JP      NZ,RCB150       ; SKOK KDYZ NENI RUBOUT/DELETE
        LD      A,B             ; POCET VST.BYTU DO [A]
        OR      A               ; JEHO TEST NA NULU
        JP      Z,RCB110        ; CTI DALSI
        LD      A,(HL)          ; POSLEDNI VSTUP. BYTE DO [A]
        DEC     B               ; UPRAVA POCTU VST. BYTU
        DEC     HL              ; UPRAVA ADRESY VST.BUFFERU
        JP      RCB320          ; SKOK NA "ECHO" VST. BYTU
;
;
RCB150: CP      05H             ; TEST VSTUPU NA CTRL-E
                                ; (END-OF-LINE)
        JP      NZ,RCB170       ; SKOK KDYZ NEBYLO CTRL-E
        PUSH    BC              ; USCHOVA [BC]
        PUSH    HL              ; USCHOVA ADR. VST. BUFFERU
        CALL    CRLF            ; VYPIS CR + LF
        XOR     A
        LD      (ICPOS),A       ; NULOVANI POZICE VST. ZNAKU
        JP      RCB120          ; SKOK NA DALSI CTENI
;
;
RCB170: CP      10H             ; TEST VSTUPU NA CTRL-P
                                ; (TOGGLE PRINT)
        JP      NZ,RCB190       ; SKOK KDYZ NOT CTRL-P
        PUSH    HL              ; USCHOVA ADRESY VST.BUFFERU
        LD      HL,CTLPF        ; ADRESA CTRL-P FLAG DO [HL]
        LD      A,1             ; INICIALIZACE CTRL-P FLAGU
        SUB     (HL)
        LD      (HL),A
        POP     HL              ; OBNOVENI ADR. VST. BUFFERU
        JP      RCB110          ; SKOK NA DALSI CTENI
;
;
RCB190: CP      18H             ; TEST NA VSTUP CTRL-X
                                ; (WIPE-OUT LINE)
        JP      NZ,RCB210       ; NENI TO CTRL-X
        POP     HL              ; RESET ADRESY ZASOBNIKU
RCB200: LD      A,(ICPOS)       ; POZICE VST. ZNAKU DO [A]
        LD      HL,CHRPOS       ; ADRESA POZICE VYST. ZNAKU
        CP      (HL)            ; JEJICH POROVNANI
        JP      NC,RDCONB       ; RESTART KDYZ SE ROVNAJI
        DEC     (HL)            ; DEC POZICE VYST. ZNAKU
        CALL    BACKSP          ; VYMAZ POSLEDNIHO ZNAKU
        JP      RCB200          ; OPAKOVANI
;
;
RCB210: CP      15H             ; TEST NA CTRL-U (#,CR,LF,...)
        JP      NZ,RCB230       ; NENI TO CTRL-U
        CALL    CTLU            ; OSETRENI CTRL-U
        POP     HL              ; RESET ADRESY ZASOBNIKU
        JP      RDCONB          ; SKOK NA RESTART
;
;
RCB230: CP      12H             ; TEST NA VSTUP CTRL-R
                                ; (#,CR,LF,...,INPUT)
        JP      NZ,RCB310       ; NENI TO CTRL-R
RCB240: PUSH    BC              ; USCHOVA [BC]
        CALL    CTLU            ; OSETRENI CTRL-U
        POP     BC              ; INICIALIZACE [BC]
        POP     HL              ; INICIALIZACE [HL]
                                ; (LINE POINTER)
        PUSH    HL              ; JEHO USCHOVA
        PUSH    BC              ; USCHOVA [BC]
RCB250: LD      A,B             ; POCET VST.BYTU DO [A]
        OR      A               ; JEHO TEST NA NULU
        JP      Z,RCB270        ; SKOK KDYZ VSECHNY VSTUPY
                                ; MELY "ECHO"
        INC     HL              ; UPRAVA ADR.VST. BUFFERU
        LD      C,(HL)          ; VST. BYTE DO [C]
        DEC     B               ; DEC POCTU VST. BYTU
        PUSH    BC              ; USCHOVA POCTU VST. BYTU
        PUSH    HL              ; USCHOVA ADR. VST. BYTU
        CALL    CTLBYT          ; TEST NA CTRL-BYTE A VYSTUP
        POP     HL              ; INICIALIZACE ADR. VST. BYTU
        POP     BC              ; INICIALIZACE POCTU VST. BYTU
        JP      RCB250          ; OPAKOVANI
;
RCB270: PUSH    HL              ; USCHOVA ADR. VST. BUFFERU
        LD      A,(BSFLAG)      ; BACKSPACE FLAG DO [A]
        OR      A               ; JEHO TEST
        JP      Z,RCB120        ; KDYZ NENI NAST.-DALSI CTENI
        LD      HL,CHRPOS       ; ADR. POZICE VYST. ZNAKU
        SUB     (HL)            ; SUBTRACT S BACKSPACE FLAG
        LD      (BSFLAG),A      ; USCHOVA BACKSPACE FLAG
RCB290: CALL    BACKSP          ; VYMAZ POSLEDNIHO BYTE
        LD      HL,BSFLAG       ; ADRESA BACKSPACE FLAG DO [HL]
        DEC     (HL)            ; DEC BACKSPACE FLAG
        JP      NZ,RCB290       ; OPAKOVANI KDYZ .NE. NULE
        JP      RCB120          ; DALSI CTENI
;
;
RCB310: INC     HL              ; UPRAVA ADRESY VST. BUFFERU
        LD      (HL),A          ; ULOZENI VST. BYTU DO BUFFERU
        INC     B               ; INC POCTU VST. BYTU
RCB320: PUSH    BC              ; USCHOVA POCTU VST. BYTU
        PUSH    HL              ; USCHOVA ADR. VST. BUFFERU
        LD      C,A             ; VST. BYTE DO [C]
        CALL    CTLBYT          ; JEHO TEST NA CTRL-BYTE A
                                ; A VYSTUP
        POP     HL              ; INIC. ADR. VST. BUFFERU
        POP     BC              ; INIC. POCTU ZNAKU
        LD      A,(HL)          ; VST. BYTE DO [A]
        CP      03H             ; TEST NA CTRL-C (REBOOT)
        LD      A,B             ; POCET VST.BYTU DO [A]
        JP      NZ,RCB330       ; NENI TO CTRL-C
        CP      01H             ; JE TO PRVNI VST.BYTE
        JP      Z,REBOOT        ; KDYZ ANO => REBOOT
RCB330: CP      C               ; JE VST. BUFFER PLNY ?
        JP      C,RCB110        ; NE - DALSI CTENI
;
RCB350: POP     HL              ; OBNOVA ADR. POCTU VST.ZNAKU
        LD      (HL),B          ; ULOZENI POCTU VST. ZNAKU
        LD      C,0DH           ; CR DO [C]
        JP      COOUT           ; VYPIS CR + RETURN
;
;
;       VSTUP ZNAKU Z KONZOLY           CMD 01
;       =====================
;
CONINP: CALL    CORD            ; ROCEDURA CTENI Z KONZOLY
        JP      SVSING          ; NAVRAT S NASTAVENIM
                                ; NAVRATOVEHO PARAMETRU
;
;
;       VSTUP ZNAKU ZE SNIMACE          CMD 03
;       ======================
;
RDINP:  CALL    BIOS+15H        ; NACTENI ZNAKU ZE SNIMACE
        JP      SVSING          ; NAVRAT S NASTAVENIM NAVRATO-
                                ; VEHO PARAMETRU
;
;
;       PRIMY I/O NA KONZOLU            CMD 06
;       ====================
;
DCONIO: LD      A,C             ; PRESUN [E](PRI CALL 5) DO [A]
        INC     A               ; JEHO TEST NA 0FFH = VSTUP
        JP      NZ,BIOS+0CH     ; VYPIS NA KONZOLU + RETURN
;
DCIO10: CALL    BIOS+06H        ; STATUS KONZOLY
        OR      A               ; TEST STATUSU
        JP      Z,RSTSP         ; NAVRAT KDYZ STATUS = 0
        CALL    BIOS+09H        ; CTENI VST. BYTU Z KONZOLY
        JP      SVSING          ; NAVRAT S NASTAVENIM
                                ; NAVRATOVEHO PARAMETERU
;
;
;       DEJ HODNOTU I/O BYTU            CMD 07
;       ====================
;
GETIOB: LD      A,(IOBYTE)      ; I/O byte MONITORU do [A]
        JP      SVSING          ; INICIALIZACE NAVRATOVEHO
                                ; PARAMETRU + NAVRAT
;
;
;       NASTAV I/O BYTE                 CMD 08
;       ===============
;
SETIOB: LD      HL,iobyte
        LD      (HL),C          ; ulozeni I/O bytu MONITORU
        RET                     ; RETURN NA RETURN
;
;
;       VYPIS ASCII RETEZCE             CMD 09
;       ===================
;
PRTSTG: EX      DE,HL           ; ADR. ULOZENI TEXTU DO [HL]
        LD      C,L             ; A DO [BC]
        LD      B,H
        JP      TYPSTG          ; SKOK NA VYPIS RETEZCE
;
;
;       DEJ STATUS KONZOLY              CMD 11
;       ==================
;
GCOSTS: CALL    TSTINP          ; TEST VSTUPU
;
;
;       ULOZENI NAVRATOVEHO PARAMETRU PRED NAVRATEM
;
SVSING: LD      (RETPRM),A      ; PRESUN NAVRATOVEHO PARAMETRU
RETRET: RET                     ; RETURN NA RETURN
;
;
SREPRM: LD      A,1             ; NASTAVENI NAVR.PARAM.NA 1
        JP      SVSING          ; SKOK NA ULOZENI NAVR.PARAM.
;
;
;
;       POLE PRACOVNICH PROMENNYCH
;       ==========================
;
BSFLAG: DEFB    0               ; BACKSPACE FLAG
ICPOS:  DEFB    0               ; POZICE VSTUPUJICICH ZNAKU
CHRPOS: DEFB    0               ; POZICE VYSTUPUJICICH ZNAKU
CTLPF:  DEFB    0               ; CTRL-P FLAS
INBYT:  DEFB    0               ; BUFFER VSTUPUJICIHO BYTU
        DEFS    42H             ; ZASOBNIK BDOS
BDSP    EQU     $               ; VRCHOL ZASOBNIKU
SPSAV:  DEFW    0               ; ULOZENI UZIV. [SP]
USRNO:  DEFB    0               ; CISLO UZIVATELE
DSKNO:  DEFB    0               ; CISLO DISKU
FCBSAV: DEFW    0               ; ULOZENI ADRESY FCB
RETPRM: DEFW    0               ; ULOZENI NAVR. PARAMETRU
;
;
;
;       PROCEDURA SKOKU PODLE [HL]
;
VJUMP:  LD      HL,SLEJPA       ; ADRESA ULOZENI ADRESY
                                ; SKOKU DO [HL]
VJUMP1: LD      E,(HL)          ; PRESUN ADRESY SKOKU DO [DE]
        INC     HL
        LD      D,(HL)
        EX      DE,HL           ; JEJI PRESUN DO [HL]
        JP      (HL)            ; A SKOK
;
;
;       VYBER DISKU A VYHLEDANI PARAMETRU DISKU
;
SD110:  LD      A,(DSKNO)       ; CISLO DISKU DO [A]
        LD      C,A             ; A DO [C]
        CALL    BIOS+1BH        ; VYBER DISKU - [HL]
                                ; OBSAHUJE PO NAVRATU
                                ; ADRESU DISKOVYCH PA-
                                ; RAMETRU
        LD      A,H
        OR      L               ; TEST [HL] NA NULU => CHYBA
        RET     Z               ; RETURN PRI CHYBE
        LD      E,(HL)          ; ADRESA PREKLADOVE TABULKY
        INC     HL              ; DO [DE]
        LD      D,(HL)
        INC     HL              ; ADRESA PRACOVNI OBLASTI 1
        LD      (DPSC1),HL      ; JEJI ULOZENI
        INC     HL
        INC     HL              ; ADRESA PRACOVNI OBLASTI 2
        LD      (DPSC2),HL      ; JEJI ULOZENI
        INC     HL
        INC     HL              ; ADRESA PRACOVNI OBLASTI 3
        LD      (DPSC3),HL      ; JEJI ULOZENI
        INC     HL
        INC     HL              ;
        EX      DE,HL           ; ADRESA ADRESY BUFFERU
                                ; ADRESARE DO [DE]-
                                ; (DIRBUF-VIZ BIOS)
        LD      (STRNP),HL      ; ULOZENI ADR. PREKLADOVE TAB
        LD      HL,DIRBUP       ; PRESUN CASTI PARAMETRU DISKU
        LD      C,8             ;
        CALL    MOVE            ;
;
        LD      HL,(DPBP)       ; PRESUN DRUHE CASTI PARAMETRU
        EX      DE,HL           ; DISKU
        LD      HL,CUDPB        ;
        LD      C,15            ;
        CALL    MOVE            ;
;
        LD      HL,(CUDSM)      ; VELIKOST DISKU (V BLOCICH)
        LD      A,H             ; HORNI BYTE DO [A]
        LD      HL,DSKSFL       ; ADR. DISK-SIZE-FLAGU DO [HL]
        LD      (HL),0FFH       ; A JEJI INICIALIZACE
        OR      A               ; TEST DISK-SIZE .GT.256 BLOKU
        JP      Z,SD150         ; SKOK DISK-SIZE .LE.256
        LD      (HL),0          ; NULOVANI DISK-SIZE FLAGU
SD150:  LD      A,0FFH          ; NASTAVENI NZ-FLAGU PRED RET
        OR      A               ;
        RET
;
;
;       'HOME' A NULOVANI POCITADLA (#) STOP A MAX. POCTU
;       SEKTORU NA STOPE
;
;
HOMCLR: CALL    BIOS+18H        ; 'HOME'-JEN PRO FLOPPY
        XOR     A               ; NULA DO [A]
        LD      HL,(TRACK)      ; ADR. # STOP DO [HL]
        LD      (HL),A          ; NULOVANI # STOP
        INC     HL              ;
        LD      (HL),A          ;
;
        LD      HL,(MAXSOT)     ; ADR. MAX. # SEKTORU NA STOPE
        LD      (HL),A          ; JEHO NULOVANI
        INC     HL              ;
        LD      (HL),A
        RET
;
;
;       PROCEDURA CTENI A ZAPISU NA DISK
;
READ:   CALL    BIOS+27H        ; CTI VYBRANY SEKTOR
        JP      WRITE1
;
WRITE:  CALL    BIOS+2AH        ; ZAPIS VYBRANY SEKTOR
WRITE1: OR      A               ; TEST [A] NA CHYBU
        RET     Z               ; RET KDYZ DISK I/O OK
;
        LD      HL,BDSJPA       ; ADR. NAVRATU S CHYBOU
        JP      VJUMP1          ; SKOK NA NAVRAT
;
;
;
;       VYPOCET SEKTORU A STOPY A NASTAVENI SEKTORU A STOPY
;
DSKCAL: LD      HL,(DETYNO)     ; # AKT.VST.ADRESARE DO [HL]
        LD      C,2             ; CITAC POSUNU = 2
        CALL    RSHHL           ; # AKT. VSTUPU/4
        LD      (BLOCK),HL      ; ULOZENI CISLA SECTOR
        LD      (DETYSC),HL     ; V NEMZ JE AKT. FCB ULOZENE
DSKCA1: LD      HL,BLOCK        ; ADR. ULOZENI # SEKTORU
        LD      C,(HL)          ; PRESUN # SEKTORU DO [BC]
        INC     HL              ;
        LD      B,(HL)          ;
        LD      HL,(MAXSOT)     ; HAX. # SEKTORU NA STOPE
        LD      E,(HL)          ; DO [DE]
        INC     HL              ;
        LD      D,(HL)          ;
;
        LD      HL,(TRACK)      ; AKT. # STOPY DO [HL]
        LD      A,(HL)          ;
        INC     HL              ;
        LD      H,(HL)          ;
        LD      L,A             ;
;
DC120:  LD      A,C             ; POROVNANI HAX. A AKT.
        SUB     E               ; CISLA SEKTORU
        LD      A,B             ; [BC] - [DE]
        SBC     A,D             ;
        JP      NC,DC140        ; AKT.# SEKTORU .GE. HAX.# SEK
;
        PUSH    HL              ; UCHOVANI CISLA STOPY
        LD      HL,(CUSPT)      ; AKT. # STOPY DO [HL]
        LD      A,E             ; [DE] - [HL] = [DE]
        SUB     L               ; MAX. # SEKT. NA STOPE -
        LD      E,A             ; AKT. # SEKTORU
        LD      A,D
        SBC     A,H
        LD      D,A
        POP     HL              ; OBNOVA # STOPY
        DEC     HL ;            ; DEC CISLA STOPY
        JP      DC120           ; OPAKOVANI
;
DC140:  PUSH    HL              ; USCHOVA # STOPY
        LD      HL,(CUSPT)      ; AKT. CISLO SEKTORU DO [HL]
        ADD     HL, DE          ; AKT. # SEKTORU + MAX. A SEK.
        JP      C,DC160         ; SKOK PRI OVERFLOW (65536)
        LD      A,C             ; [BC] - [HL]
        SUB     L               ;
        LD      A,B
        SBC     A,H
        JP      C,DC160         ; SKOK KDYZ SEKTOR JE NA
                                ; .AKT. STOPE
        EX      DE,HL           ; MAX # SEKTORU NA STOPE-> [DE]
        POP     HL              ; # STOPY DO [HL]
        INC     HL              ; INC # STOPY
        JP      DC140           ; OPAKOVANI
;
DC160:  POP     HL              ; # STOPY DO [HL]
        PUSH    BC              ; USCHOVA # VSTUPU ADRESARE
        PUSH    DE              ; USCH.MAX # SECTORU NA STOPE
        PUSH    HL              ; USCH. # STOPY
        EX      DE,HL           ; # STOPY DO [DE]
        LD      HL,(CUOFF)      ; OFFSET STOPY DO [HL]
        ADD     HL,DE           ; URCENI FYZICKEHO # STOPY
        LD      B,H             ; # STOPY DO [BC]
        LD      C,L
        CALL    BIOS+1EH        ; NASTAVENI STOPY
        POP     DE              ; OBNOVA # STOPY
        LD      HL,(TRACK)      ; ADRESA ULOZENI # STOPY V BLO-
        LD      (HL),E          ; KU DISKOVYCH PARAMETRU A ULO-
        INC     HL              ; ZENI # STOPY
        LD      (HL),D
        POP     DE              ; OBNOVA MAX # SEKTORU NA STOPE
        LD      HL,(MAXSOT)     ; A JEHO ULOZENI DO BLOKU
        LD      (HL),E          ; DISKOVYCH PARAMETRU (DPBASE)
        INC     HL
        LD      (HL),D
        POP     BC              ; OBNOVA # SEKTORU
        LD      A,C             ; [BC] - [CD] = [BC]
        SUB     E               ; VYPOCET LOG. # SEKTORU
        LD      C,A
        LD      A,B
        SBC     A,D
        LD      B,A
        LD      HL,(STRNP)      ; ADR. PREKLADOVE TAB SEKTORU
        EX      DE,HL           ; DO [DE]
        CALL    BIOS+30H        ; PREVOD LOG. # NA FYZICKE
        LD      C,L             ; FYZ. # DO [BC]
        LD      B,H
        JP      BIOS+21H        ; NASTAVENI SEKTORU + RET
;
;
;       VYPOCET ADRESY ULOZENI CISLA BLOKU V FCB
;
BSHIFT: LD      HL,CUBSH        ; ADR BLOK-SHIFT-FAKTORU DO [HL]
        LD      C,(HL)          ; BLOK-SHIFT-FAKTOR DO [C]
        LD      A,(D9)          ; AKT. # ZAZNAMU DO [A]
BSH120: OR      A               ; NULA DO CARRY
        RRA                     ; ROTACE VPRAVO
        DEC     C               ; DEC BL-SH-FA
        JP      NZ,BSH120       ; OPAKOVANI
;
        LD      B,A             ; VYSLEDEK DO [B]
        LD      A,08H           ;
        SUB     (HL)            ; ODECT. HODN. BL-SH-FA
        LD      C,A             ; VYSLEDEK JAKO CITAC ROTACE
        LD      A,(MEX)         ; MASKA ROZSIRENI DO [A]
BSH140: DEC     C               ; DEC CITACE
        JP      Z,BSH160        ; UKONCENI ROTACEXH
        OR      A               ; NULOVANI CARRY
        RLA                     ; ROTACE VLEVO
        JP      BSH140          ; OPAKOVANI
;
BSH160: ADD     A,B             ; CISLO BLOKU DO [A]
        RET
;
;
;       VYHLEDANI CISLA ALOKACNIHO BLOKU Z FCB
;
RETBLK: LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        LD      DE,0010H        ; OFFSET DO [DE]
        ADD     HL,DE           ; ADR. ULOZENI # ALOK.BLOKU
        ADD     HL,BC           ; AKT. ADRESA ULOZ.# AL.BLOKU
        LD      A,(DSKSFL)      ; DISKSIZE FLAG DO A
        OR      A               ; JEHO TEST
        JP      Z,RTBL10        ; SKOK PRI # BLOKU NAD 256
        LD      L,(HL)          ; # BLOKU Z FCB DO [L]
        LD      H,0             ; NULOVANI HIGH BYTU # BLOKU
        RET
;
RTBL10: ADD     HL,BC           ; AKT. ADRESA # BLOKU
        LD      E,(HL)          ; # BLOKU Z FCB DO [DE]
        INC     HL
        LD      D,(HL)
        EX      DE,HL           ; PRESUN # BLOKU DO [HL]
        RET
;
;
;       ZJISTI CISLO BLOKU
;
GETBLK: CALL    BSHIFT          ; VYPOCET # BLOKU
        LD      C,A             ; VYSLEDEK DO [C]
        LD      B,0             ; NULA DO HORNIHO BYTU
        CALL    RETBLK          ; VYHLEDANI # AL. BLOKU Z FCB
        LD      (BLOCK),HL      ; ULOZENI CISLA BLOKU
        RET
;
;
;       TEST CISLA BLOKU NA NULU
;
TSTBLK: LD      HL,(BLOCK)      ; CISLO BLOKU DO [HL]
        LD      A,L
        OR      H               ; A JEHO TEST NA NULU
        RET
;
;
;       ZJISTI CISLO SEKTORU
;
GETSEC: LD      A,(CUBSH)       ; BL-SH-FA DO [A]
        LD      HL,(BLOCK)      ; # BLOKU DO [HL]
GET10:  ADD     HL,HL           ; # BLOKU * 2
        DEC     A               ; DEC BL-SH-FA
        JP      NZ,GET10        ; OPAKOVANI
        LD      (SECTOR),HL     ; ULOZENI # SEKTORU
        LD      A,(CUBLM)       ; HASKA BLOKU DO [A]
        LD      C,A             ; A DO [C]
        LD      A,(D9)          ; CITAC AKT.ZAZNAHU DO [A]
        AND     C               ; JEHO MASKOVANI MASKOU BLOKU
        OR      L               ; OR S # SEKTORU
        LD      L,A             ;
        LD      (BLOCK),HL      ; ULOZENI VYSLEDKU
        RET
;
;
;       ZJISTI ADRESU EXTENT Z FCB
;
EXADD:  LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      DE,12           ; OFFSET NA EX Z FCB
        ADD     HL,DE           ; ADRESA EX Z FCB
        RET
;
;
;       ZJISTI ADRESU RC [DE] A D9 [HL] Z FCB
;
RCADD:  LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        LD      DE,15           ; RC OFFSET DQ [DE]
        ADD     HL,DE           ; ADR. RC Z FCB
        EX      DE,HL           ; DO [DE]
        LD      HL,17           ; OFFSET NA D9
        ADD     HL,DE           ; ADR. D9
        RET
;
;
;       DEJ D9 (AKTUALNI CLTAC ZAZNAMU) A RC (CITAC ZAZNAMU)
;
LDD9RC: CALL    RCADD           ; PRIPRAVA ADR.D9 [HL] A RC [DE]
        LD      A,(HL)          ; AKT.CITAC ZAZNAMU DO [A]
        LD      (D9),A          ; ULOZENI D9
        EX      DE,HL           ; ADR.RC DO [HL]
        LD      A,(HL)          ; RC DO [A]
        LD      (RC),A          ; ULOZENI RC
        CALL    EXADD           ; ADR.NA EXTENT DO [HL]
        LD      A,(CUEXM)       ; EXTENT-MASKA DO [A]
        AND     (HL)            ; AND S EX Z FCB
        LD      (MEX),A         ; ULOZENI MASKY ROZSIRENI
        RET
;
;
;       ULOZENI D9 A RC DO FCB
;
SVD9RC: CALL    RCADD           ; PRIPRAVA ADR.D9 [HL] A RC [DE]
        LD      A,(SECSE)       ; INDIKACE DISKOVE SLUZBY DO [A]
        CP      02              ; JE TO CMD 48?
        JP      NZ,SVRD10       ; NENI TO CMD 40
        XOR     A               ; NULA DO [A]
SVRD10: LD      C,A             ; INDIKACE DO [C]
        LD      A,(D9)          ; D9 DO [A]
        ADD     A,C             ; D9+1 KDYZ CMD 20,21
                                ; JINAK D9+0
        LD      (HL),A          ; ULOZENI D9
        EX      DE,HL           ; ADR.RC DO [HL]
        LD      A,(RC)          ; RC DO [A]
        LD      (HL),A          ; ULOZENI RC DO FCB
        RET
;
;
;       POSUN SPOJENYCH RESISTRU [HL] VPRAVO [C] KRAT
;
RSHHL:  INC     C               ; TEST CITACE POSUNU
RSHHL1: DEC     C               ;
        RET     Z               ; RET PO UKONCENI
        LD      A,H             ; HORNI BYTE DO [A]
        OR      A               ; NULOVANI CARRY
        RRA                     ; ROTACE VPRAVO
        LD      H,A             ; BYTE DO [H]
        LD      A,L             ; DOLNI BYTE DO [A]
        RRA                     ; ROTACE VPRAVO
        LD      L,A             ; BYTE ZPET DO [L]
        JP      RSHHL1          ; OPAKOVANI
;
;
;       GENEROVANI KONTROLNIHO SOUCTU ADRESARE
;
DIRCKS: LD      C,128           ; DELKA BUFFERU ADRESARE
        LD      HL,(DIRBUP)     ; ADR.BUFFERU ADRESARE DO [HL]
        XOR     A               ; NULA DO [A]
DIRCK1: ADD     A,(HL)          ; VYPOCET SOUCTU
        INC     HL              ; UPRAVA ADRESY
        DEC     C               ; DEC POCITADLA
        JP      NZ,DIRCK1       ; OPAKOVANI
        RET
;
;
;       GENEROVANI MASKY DISKU
;
;       REG     C       CISLO DISKU PRI VOLANI - NULA PO RET
;               HL      0001 PRI CALL - MASKA DISKU PRI RET
;
GENMSK: INC     C               ; TEST CISLA DISKU
GEMSK1: DEC     C               ;
        RET     Z               ; RETURN
        ADD     HL,HL           ; SHIFT BIT MASKY O 1 POZ.VLEVO
        JP      GEMSK1          ; OPAKOVANI
;
;
;       NASTAVENI BITU VEKTORU DISKU
;
;       REG     BC      PUVODNI VEKTOR DISKU PRI CALL
;               HL      NOVY VEKTOR DISKU PRI RET
;
SETVEC: PUSH    BC              ; USCHOVA PUVODNIHO VEKTORU
        LD      A,(DSKNO)       ; CISLO DISKU DO [A]
        LD      C,A             ; A DO [C]
        LD      HL,0001         ; NASTAVENI MASKY PRO JEDN. A:
        CALL    GENMSK          ; GENEROVANI MASKY
        POP     BC              ; OBNOVA PUVODNIHO VEKTORU
        LD      A,C             ; SPODNI BYTE DO [A]
        OR      L               ; JEHO AKTUALIZACE
        LD      L,A             ; A PRESUN DO [L]
        LD      A,B             ; HORNI BYTE DO [A]
        OR      H               ; JEHO AKTUALIZACE
        LD      H,A             ; A PRESUN DO [H]
        RET
;
;
;       TEST NA DISK R/O
;
TSTDRO: LD      HL,(ROVEC)      ; READ ONLY VEKTOR DO [HL]
        LD      A,(DSKNO)       ; # DISKU DO [A]
        LD      C,A             ;   DO [C]
        CALL    RSHHL           ; NASTAVENI ODPOV, BITU R/O VEKT.
        LD      A,L             ; LOW BYTE (0 BIT) DO [A]
        AND     01              ; NASTAVENI 0 BITU
        RET
;
;
;       OZNAC DISK JAKO CHRANENY PROTI ZAPISU   CMD 28
;       =====================================
;
WRTPRT: LD      HL,ROVEC        ; ADR.READ ONLY VECTORU
        LD      C,(HL)          ; JEHO PRESUN DO [BC]
        INC     HL
        LD      B,(HL)
        CALL    SETVEC          ; NASTAVENI BITU V R/O VEKTORU
        LD      (ROVEC),HL      ; ULOZENI R/O VEKTORU
;
        LD      HL,(CUDRM)      ; KAX.# VSTUPU ADRESARE
        INC     HL              ; JEHO INC
        EX      DE,HL           ; A PRESUN DO [DE]
        LD      HL,(DPSC1)      ; ADR.PRAC.POLE 1 V DPBASE
        LD      (HL),E          ; ULOZENI MAX. #+1 ADRESARE
        INC     HL
        LD      (HL),D
        RET
;
;
;       TEST NA READ ONLY
;
TSTRO:  CALL    DIRADR          ; DEJ ADR. VSTUPU ADRESARE
TST1:   LD      DE,9            ; OFFSET NA T1 NAZVU SOUBORU
        ADD     HL,DE           ; ADRESA T1
        LD      A,(HL)          ; T1 DO [A]
        RLA                     ; TEST HIGH BITU
        RET     NC              ; RET KDYZ NENI NAST.=>NOT R/O
        LD      HL,FROJPA       ; ADR. NA "FILE R/O ERROR"
        JP      VJUMP1          ; SKOK NA SKOK PODLE [HL]
;
;       TEST NA NOT R/O
;
TSTNRO: CALL    TSTDRO          ; TEST NA R/O
        RET     Z               ; RET KDYZ NOT READ ONLY
        LD      HL,ROEJPA       ; ADR. NA "READ ONLY ERROR"
        JP      VJUMP1          ; SKOK NA SKOK PODLE [HL]
;
;
;       GENEROVANI ADRESY AKT. FCB V BUFFERU ADRESARE
;
DIRADR: LD      HL,(DIRBUP)     ; ADRESA BUFFERU ADRESACE
        LD      A,(DIROFF)      ; OFFSET ADRESARE
DIRAD1: ADD     A,L             ; ADRESA AKT. FCB DO [HL]
        LD      L,A
        RET     NC
        INC     H
        RET
;
;
;       PRESUN S2 Z FCB
;
LDS2:   LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      DE,14           ; OFFSET NA S2
        ADD     HL,DE           ; ADRESA S2
        LD      A,(HL)          ; S2 DO [A]
        RET
;
;
;       NULOVANI S2 V FCB
;
CLRS2:  CALL    LDS2            ; PRIPRAVA ADRESY S2
        LD      (HL),0          ; NULA DO S2
        RET
;
;
;       NASTAVENI 7 BITU S2 V FCB
;
ST7S2:  CALL    LDS2            ; ADR. S2 DO [A]
        OR      80H             ; NAST.7 BITU S2
        LD      (HL),A          ; ULOZENI S2
        RET
;
;
;       POROVNANI AKT. # VSTUPU ADRESARE S MAX # VSTUPU
;       ADRESARE
;
TDIRET: LD      HL,(DETYNO)     ; # VSTUPU DO [HL]
        EX      DE,HL           ; A DO [DE]
        LD      HL,(MAXDIE)     ; MAX.# VSTUPU DO [HL]
        LD      A,E             ; JEJICH POROVNANI
        SUB     (HL)            ;
        INC     HL
        LD      A,D
        SBC     A,(HL)
        RET
;
;
;       VYPOCET A TEST CISLA VSTUPU ADRESARE
;
TSTMDI: CALL    TDIRET          ; POROVNANI AKT. A MAX # VST.
        RET     C               ; RET KDYZ AKT. .LE. MAX
        INC     DE              ; INC AKT. # VSTUPU
        LD      (HL),D          ; JEHO PRESUN DO [HL]
        DEC     HL
        LD      (HL),E
        RET
;
;
;       POROVNANI AKTUALNIHO CITACE VSTUPU ADRESARE S MAX.
;       REG     DE - MAX.
;               HL - AKT.
;
;
SDEMHL: LD      A,E             ; [DE] - [HL] = [HL]
        SUB     L
        LD      L,A
        LD      A,D
        SBC     A,H
        LD      H,A
        RET
;
;
;       KONTROLA NA ZMENU ADRESARE
;
CKDS00: LD      C,0FFH          ; 0FFH DO [C]
;
CKDSKC: LD      HL,(DETYSC)     ; # AKT.SEKTORU ADRESARE DO [HL]
        EX      DE,HL           ;   DO [DE]
        LD      HL,(CUCKS)      ; VELIKOST VEKT. ADRESARE DO [HL]
        CALL    SDEMHL          ; [DE] - [HL] = [HL]
        RET     NC              ; RET KDYZ VEKT.ADR.LE.#AKT SEK
        PUSH    BC              ; USCHOVA [BC]
        CALL    DIRCKS          ; GENER.KONTROLNIHO SOUCTU
                                ; SEKTORU ADRESARE DO [A]
        LD      HL,(CSVP)       ; ADR.PRAC.POLE PRO VYM.DISKU
        EX      DE,HL           ;   DO [DE]
        LD      HL,(DETYSC)     ; # SEKTORE VSTUPU ADRESARE
        ADD     HL,DE           ; ADR. ULOZ. KONTR. SOUCTU
                                ; PUVODNIHO
        POP     BC              ; OBNOVENI [BC]
        INC     C
        JP      Z,CKDS10        ; SKOK BYL VST.BOD CKD00
        CP      (HL)            ; POROVNANI S NOVYM
                                ; KONTROLNIM SOUCTEM
        RET     Z               ; RET KDYZ SOUHLASI
        CALL    TDIRET          ; TEST VSTUPU ADRESARE
        RET     NC              ;
        CALL    WRTPRT          ; PRI VYMENE DISKU =>
                                ; WRITE PROTECT DISK
        RET
CKDS10: LD      (HL),A          ; ULOZENI KONTROLNIHO SOUCTU
        RET
;
;
;       ZAPIS A CTENI BUFFERU ADRESARE
;
WDB:    CALL    CKDS00          ; KONTROLA NA ZMENU ADRESARE
;
        CALL    DMA120          ; NASTAVENI DMA-ADR PRO
                                ; BUFFER ADRESARE
        LD      C,01            ; INDIKACE DO [C]
        CALL    WRITE           ; ZAPIS SEKTORU ADRESARE
        JP      DMA110          ; RESET DMA ADR + RETURN
;
WDB1:   CALL    DMA120          ; NAST.DMA-ADR PRO BUFFER
        CALL    READ            ; CTENI SEKTORU ADRESARE
;
;
;       NASTAVENI DMA ADRESY
;
DMA110: LD      HL,DMAADR       ; DMA ADR. DO [HL]
        JP      DMA130
DMA120: LD      HL,DIRBUP       ; ADR. BUFFERU ADRESARE DO [HL]
;
DMA130: LD      C, (HL)         ; DMA ADR DO [BC]
        INC     HL
        LD      B,(HL)
        JP      BIOS+24H        ; SKOK NA NASTAVENI DMA + RET
;
;
;       PRESUN SEKTORU ADRESARE DO DMA-ZONY
;
MOVDIR: LD      HL,(DIRBUP)     ; ADR. BUFFERU ADRESARE DO [HL]
        EX      DE,HL           ; A DO [DE]
        LD      HL,(DMAADR)     ; DMA ADR DO [HL]
        LD      C, 128          ; NASTAVENI DELKY
;
;
;       PROCEDURA PRESUNU
;
;       PRESUN [C] BYTU Z ADRESY V [DE] NA ADRESU V [HL]
;
MOVE:   INC     C               ; TEST PRENESENEHO POCTU ZNAKU
MOVE10: DEC     C               ;
        RET     Z               ; RETURN PO UKONCENI PRESUNU
        LD      A,(DE)          ; BYTE DO [A]
        LD      (HL),A          ; JEHO ULOZENI
        INC     DE              ; UPRAVA ADRES ZDROJOVEHO
                                ; A CILOVEHO POLE
        INC     HL
        JP      MOVE10          ; OPAKOVANI
;
;
;       TEST AKT.CLSLA VSTUPU => LOW BYTE .EQ. HIGH BYTE
;
TSTDIE: LD      HL,DETYNO       ; ADR. ULOZENI # VSTUPU
        LD      A,(HL)          ; LOW BYTE DO [A]
        INC     HL
        CP      (HL)            ; TEST LOW BYTE .EQ. HI5H BYTE
        RET     NZ              ; RET KDYZ .NE.
        INC     A               ;
        RET
;
;
;       OBSLUHA ADRESARE
;
DIR:    LD      HL,(CUDRM)      ; MAX.# POLOZEK ADRESARE
        EX      DE,HL           ;   DO [DE]
        LD      HL,(DETYNO)     ; AKT. CITAC VSTUPU DO [HL]
        INC     HL              ; NASTAVENI PRVNIHO (0)
        LD      (DETYNO),HL     ;
        CALL    SDEMHL          ; POROVNANI AKT. CITACE VSTUPU
                                ; S MAX.
        JP      NC,DIR120       ; AKT.CITAC .LE. MAX.
;
;
;       NASTAVENI AKT. CISLA (#) VSTUPU ADRESARE NA -1
;
CLRDIR: LD      HL,-1           ; NASTAVENI [HL]
        LD      (DETYNO),HL     ; NASTAVENI # VSTUPU NA -1
        RET
;
DIR120: LD      A,(DETYNO)      ; AKT. CITAC VSTUPU DO [A]
        AND     03H             ; VYPOCET POSUNUTI (OFFSET)
        LD      B,5             ; V ULOZENI SEKTORU ADRESARE
DIR140: ADD     A,A             ;
        DEC     B               ;
        JP      NZ,DIR140       ;
        LD      (DIROFF),A      ; ULOZENI OFFSETU
        OR      A               ; TEST OFFSETU NA NULU
        RET     NZ              ; RET KDYZ VSTUP NENI PRVNI
;
;       NACTENI DALSIHO SEKTORU ADRESARE
;
        PUSH    BC              ; USCHOVA [BC] B=0 C=-1
        CALL    DSKCAL          ; VYPOCET A NASTAVENI # SEKTORU
                                ; A # STOPY ADRESARE
        CALL    WDB1            ; NACTENI SEKTORU ADRESARE
        POP     BC              ; OBNOVA [BC]
        JP      CKDSKC          ; KONTROLA NA VYMENU DISKU+RET
;
;       PRIPRAVA ZAZNAMU DO ALOKACNI KAPY
;
TL100:  LD      A,C             ; CISLO ALOKACNIHO BLOKU DO [A]
        AND     07H             ; URCENI BITU V ALOKACNIH BYTU
        INC     A               ;
        LD      E,A             ; JEHO USCHOVA
;
        LD      D,A             ; VYPOCET OFFSETU V ALOKACNI
        LD      A,C             ; MAPE
        RRCA                    ; [BC] - CISLO BLOKU
        RRCA
        RRCA
        AND     1FH             ; ROTOVANEHO LOW BYTU
        LD      C,A             ; # ALOKACNIHO BLOKU DO [C]
        LD      A,B
        ADD     A,A             ; ([A] * 32)OR(# BLOKU/MOD 8)
        ADD     A,A
        ADD     A,A
        ADD     A,A
        ADD     A,A
        OR      C
        LD      C,A             ; VYSLEDEK DO [C]
;
        LD      A,B             ; HORNI BYTE # AL. BLOKU
        RRCA
        RRCA
        RRCA
        AND     1FH             ; EX. BITU 5,6,7
        LD      B,A
        LD      HL,(ALVP)       ; ADR. ULOZENI ALOKACNI MAPY
        ADD     HL,BC           ; ADR. AKT.BYTU AL. MAPY
        LD      A,(HL)          ; ALOKACNI BYT DO [A]
TL120:  RLCA                    ; ROTACE ALOKACNIHO BYTU
        DEC     E               ; A NAST.AKT.BITU K ZAZNAMU
        JP      NZ,TL120
        RET
;
;       ZAZNAM DO ALOKACNIHO BYTU A JEHO ULOZENI
;
TL140:  PUSH    DE              ; USCHOVA [DE]
        CALL    TL100           ; PRIPRAVA ZAZNAMU DO AL. MAPY
        AND     0FEH            ; VYMAZ AKT.BITU Z MAPY
        POP     BC              ; OBNOVA ZAZN. KONSTANTY
        OR      C               ; ZAPIS AL. BITU
TL160:  RRCA                    ; ZPETNA ROTACE ALOKACNIHO
        DEC     D               ; BYTU
        JP      NZ,TL160        ;
        LD      (HL),A          ; ULOZENI ALOKACNIHO BYTU
        RET
;
;       GENEROVANI ALOKACNI MAPY
;
TL180:  CALL    DIRADR          ; ADR. AKT. FCB DO [HL]
        LD      DE,16           ; OFFSET NA PRVNI # AL.BLOK(D0)
        ADD     HL,DE           ; ADR. D0 V ADRESARI
        PUSH    BC              ; USCHOVA [BC]
        LD      C,11H           ; POCITADLO ULOZENI # AL.BLOKU
TL190:  POP     DE              ; E=L, D=0
        DEC     C
        RET     Z               ;
        PUSH    DE              ; USCHOVA [DE]
        LD      A,(DSKSFL)      ; VELIKOST DISKU DO [A]
        OR      A               ; JEHO TEST
        JP      Z,TL200         ; VELIKOST .GT. 256
        PUSH    BC              ; USCHOVA POCITADLA
        PUSH    HL              ; USCHOVA ADR. # AL.BLOKU
        LD      C,(HL)          ; # ALOKACNIHO BLOKU DO [C]
        LD      B,0             ; NULA DO [B]
        JP      TL220           ;
;
TL200:  DEC     C               ; UPRAVA POCITADLA
        PUSH    BC              ; JEHO USCHOVA
        LD      C,(HL)          ; # AL. BLOKU DO [BC]
        INC     HL              ;
        LD      B,(HL)          ;
        PUSH    HL              ; USCHOVA ADR.# AL. BLOKU
;
TL220:  LD      A,C             ; TEST # ALOKACNIHO BLOKU NA
        OR      B               ; NULU
        JP      Z,TL240         ; SKOK KDYZ # A. BL. .EQ. 0
        LD      HL,(CUDSM)      ; TEST NA PREKROCENI MAX.
        LD      A,L             ; VELIKOSTI DISKU
        SUB     C               ; [HL] - [BC]
        LD      A,H             ;
        SBC     A,B             ;
        CALL    NC,TL140        ; VELIKOST NENI PREKROCENA
;
TL240:  POP     HL              ; AKTUALIZACE ADRESY # AL.BLOKU
        INC     HL              ;
        POP     BC              ;
        JP      TL190           ;
;
;
;
;
;       NULOVANI ALOKACNI MAPY (VEKTORU)
;
CLRALV: LD      HL,(CUDSM)      ; VELIKOST DISKU V BLOCICH DO HL
        LD      C,3             ; CITAC = 3
        CALL    RSHHL           ; DELENO 8 =>POCET BYTU AL. VEKT.
        INC     HL              ;
        LD      B,H             ; PRESUN VYSLEDKU DO [BC]
        LD      C,L             ;
        LD      HL,(ALVP)       ; PRVNI BYTE AL.VEKTORU DO [HL]
CLALV1: LD      (HL),0          ; NULOVANI JEDNOTLIVYCH BYTU
        INC     HL              ;
        DEC     BC              ;
        LD      A,B             ; TEST POCITADLA BYTU
        OR      C
        JP      NZ,CLALV1       ; OPAKOVANI
;
        LD      HL,(CUAL)       ; AL. VEKTOR ADRESARE DO [HL]
        EX      DE,HL           ;   DO [DE]
        LD      HL,(ALVP)       ; ADR. ALOKACNIHO VEKTORU
        LD      (HL),E          ; INICIALIZACE AL. VEKTORU
        INC     HL
        LD      (HL),D
;
        CALL    HOMCLR          ; "HOHE" A NULOVANI #STOPY
                                ; A MAX. POCTU SEKTORU NA STOPE
        LD      HL,(MAXDIE)     ; NAST. MAX. CISLA VSTUPU DO
        LD      (HL),3          ; SEKTORU ADRESARE NA 3
        INC     HL              ; ADR. HIGH BYTU MAXDIE
        LD      (HL),0
        CALL    CLRDIR          ; NASTAVENI # VSTUPU DO SEKTORU
                                ; ADRESARE NA -1
TL260:  LD      C,0FFH          ; [C] DO -1
        CALL    DIR             ; OBSLUHA ADRESARE
        CALL    TSTDIE          ; TEST # VST.ADRESARE NA NULU
        RET     Z               ; RET KDYZ A VSTUPU .EQ. 0
;
        CALL    DIRADR          ; GENER.ADR. ULOZENI AKT, FCB
        LD      A,0E5H          ; PRIZNAK INICIALIZACE FCB [A]
        CP      (HL)            ; JE FCB INICIALIZOVANE
        JP      Z,TL260         ; SKOK KDYZ NENI
;
        LD      A,(USRNO)       ; # UZIVATELE DO [A]
        CP      (HL)            ; JEHO TEST
        JP      NZ,TL280        ; # UZIVATELE NESOUHLASI
        INC     HL              ; ADR. DRUHEHO BYTU ADRESARE
        LD      A,(HL)          ; DO [A]
        SUB     24H             ; SUBTRACT '$'
        JP      NZ,TL280        ; SKOK KDYZ .NE. $
        DEC     A               ; INICIALIZACE RETPRM
        LD      (RETPRM),A      ; NA 0FFH
;
TL280:  LD      C,1             ;
        CALL    TL180           ; GENEROVANI ALOKACNI MAPY
        CALL    TSTMDI          ; PRIPRAVA DALSIHO # VSTUPU
        JP      TL260           ; ADRESARE A OPAKOVANI
;
;       PRIPRAVA NAVRATOVEHO PARAMETRU PROCEDURY
;
TL300:  LD      A,(RPSAV)       ; NAVR. PARAMETER DO [A]
        JP      SVSING          ; JEHO ULOZENI + RET
;
;
TL320:  PUSH    BC              ; USCHOVA "EX" Z DIR
        PUSH    AF              ; USCHOVA "EX" Z FCB
        LD      A,(CUEXM)       ; EXTEND-HASK DO [A]
        CPL                     ; JEJI KOMPLEMENT
        LD      B,A             ;   DO [B]
        LD      A,C             ; "EX" Z DIR DO [A]
        AND     B               ; JEHO .AND. S KOHPL. CUEXM
        LD      C,A             ; VYSLEDEK DO [C]
        POP     AF              ; "EX" Z FCB DO [A]
        AND     B               ; JEHO .AND. S KOMPL. CUEXM
        SUB     C               ; ODECTENI UPRAVENEHO EX
        AND     1FH             ; A MASKA
        POP     BC              ; OBNOVENI [BC]
        RET                     ;
;
;       HLEDEJ PRVNI VYSKYT V ADRESARI
;
SFFP:   LD      A,0FFH          ; INICIALIZACE NAVRAT. PARAM.
        LD      (RPSAV),A       ; PROCEDURY
        LD      HL,SRGSAV       ; ADR.ROZSAHU SHODY PRI HLEDANI
        LD      (HL),C          ; JEJI NASTAVENI
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        LD      (FCBP),HL       ; JEJI POMOCNE ULOZENI
        CALL    CLRDIR          ; NAST. # VST. DO SEKT.DIR =-1
        CALL    HOMCLR          ; "HOME" A NULOVANI # STOPY A
                                ; MAX. POCTU SEKTORU NA STOPE
;
;       HLEDEJ DALSI VYSKYT SOUBORU V ADRESARI
;
TL400:  LD      C,0             ; 0 DO [C]
        CALL    DIR             ; OBSLUHA ADRESARE
        CALL    TSTDIE          ; TEST # VSTUPU ADRESARE NA 0
        JP      Z,TL500         ; SKOK KDYZ # VSTUPU .EQ. 0
        LD      HL,(FCBP)       ; ADRESA FCB DO [HL]
        EX      DE,HL           ;     DO [DE]
        LD      A,(DE)          ; TEST PLATNOSTI FCB
        CP      0E5H            ;
        JP      Z,TL420         ; FCB JE ZRUSENE
        PUSH    DE              ; USCHOVA ADRESY FCB
        CALL    TDIRET          ; TEST PREK. MAX.# VST.ADRESARE
        POP     DE              ; OBNOVA ADRESY FCB
        JP      NC,TL500        ; SKOK KDYZ # VSTUPU PREKROCENO
;
TL420:  CALL    DIRADR          ; GENEROVANI ADRESY ADRESARE
        LD      A,(SRGSAV)      ; ROZSAH POROVNANI DO [A]
        LD      C,A             ;   DO [BC]
        LD      B,0             ;
;
TL430:  LD      A,C             ; TEST UKONCENI
        OR      A               ;
        JP      Z,TL480         ; POROVNANI UKONCENE
        LD      A,(DE)          ; ZNAK NAZVU DO [A]
        CP      '?'             ; JE TO ?
        JP      Z,TL460         ; ANO,HUZE TO BYT JAKYKOLIV ZNAK
        LD      A,B             ; PORADI ZNAKU DO [A]
        CP      0DH             ; POROVNANO VCETNE "EX" ?
        JP      Z,TL460         ; ANO
        CP      0CH             ; POROVNANO AZ PO "EX" ?
        LD      A,(DE)          ; PRUBEZNE POROVNAVANY ZNAK DO [A]
        JP      Z,TL440         ; NASLEDUJE POROVNANI "EX"
        SUB     (HL)            ; POROVNANI PRUBEZNYCH ZNAKU
        AND     7FH             ;
        JP      NZ,TL400        ; NESOUHLASI
        JP      TL460           ; JSOU SHODNE
;
TL440:  PUSH    BC              ; USCH.CITACE PORADI A POR.ZNAKU
        LD      C,(HL)          ; "EX" Z DIR DO [C]
        CALL    TL320           ; UPRAVA "EX"
        POP     BC              ; OBN.CITACE PORADI A POR. ZNAKU
        JP      NZ,TL400        ; SKOK KDYZ UPRAVA "EX" .NE. 0
;
TL460:  INC     DE              ; ADR. DALSIHO ZNAKU V UZIV FCB
        INC     HL              ; ADR. DALSIHO ZNAKU V DIR-FCB
        INC     B               ; INC CITACE PORADI
        DEC     C               ; DEC CITACE POR. ZNAKU
        JP      TL430           ; OPAKOVANI
;
TL480:  LD      A,(DETYNO)      ; AKT.# VSTUPU ADRESARE DO [A]
        AND     03              ; EXTRAKT SPODNICH 2 BITU
        LD      (RETPRM),A      ; AKT.# VSTUPU DO NAVR.PAR.SLUZBY
        LD      HL,RPSAV        ; TEST A NASTAVENI NAVRATOVEHO
        LD      A,(HL)          ; PARAHETRU SLUZBY
        RLA                     ; TEST BITU 7
        RET     NC              ; RET KDYZ NENI NASTAVENY
        XOR     A               ; NULA DO [A]
        LD      (HL),A          ; A DO NAVRATOVEHO PARAHETRU
        RET                     ; PROCEDURY
;
;       HLEDANY SOUBOR SE NENASEL
;
TL500:  CALL    CLRDIR          ; NAST.AKT,# VSTUPU NA -1
        LD      A,0FFH          ; INDIKACE CHYBY DO [A]
        JP      SVSING          ; NACTAVENI NAVR.PAR. SLUZBY+RET
;
;
;       PROCEDURA ZRUSENI SOUBORU
;
;
DELFP:  CALL    TSTNRO          ; TEST NA NOT READ ONLY
                                ; HLEDANI PRVNIHO EXTENDU SOUBORU
        LD      C,12            ; ROZSAH POROVNANI (JHENO)
        CALL    SFFP            ; HLEDANI PRVNIHO VYSKYTU V ADRESARI
LB004:                          ; TEST NALEZENI HLEDANEHO SOUBORU
        CALL    TSTDIE          ;
        RET     Z               ; RET KDYZ NENALEZEN
                                ; OZNACENI EXTENDU JAKO ZRUSENEHO
        CALL    TSTRO           ; TEST NA R/O SOUBORU
        CALL    DIRADR          ; GENEROVANI ADRESY ADRESARE
        LD      (HL),0E5H       ; OZNACENI FCB
        LD      C,0             ; NULA DO [C]
        CALL    TL180           ; NULOVANI ODPOVIDAJICICH BITU AL.HAPY
        CALL    WDB             ; ZAPIS BUFFERU ADRESARE
        CALL    TL400           ; HLEDANI DALSIHG EXTENDU ADRESARE
        JP      LB004           ;
;
;
;
;       VYPOCET ALOKACE BLOKU
;
COBLLO:                         ; HLEDANI NEJBLIZSIHO VOLNEHO
        LD      D,B             ; BLOKU V OBOU SHERECH
        LD      E,C             ; PREDCHOZI OBSAZENE # BLOKU DO [BC]
LB018:                          ;
                                ; TEST CLSLA BLOKU NA NULU
        LD      A,C
        OR      B
        JP      Z,LB015         ; KDYZ NULA =>HLEDANI V SMERE DOLU
                                ; JINAK TEST DALSIHO BLOKU
        DEC     BC              ;  DEKREMENT # BLOKU
        PUSH    DE              ;  USCH. # BLOKU PRO HLEDANI
                                ;  VE SHERU NAHORU
        PUSH    BC              ;  VE SHERU DOLU
        CALL    TL100           ;  TEST BITU Z ALOKACNI HAPY
        RRA                     ;
                                ;
        JP      NC,LB016        ; BLOK JE VOLNY-JEHO REZERVACE
                                ;  A RETURN
                                ; OBNOVA # BLOKU PRO HLEDANI
        POP     BC              ; VE SMERU NAHORU
        POP     DE              ; VE SMERU DOLU
LB015:                          ;
                                ;
        LD      HL,(CUDSM)      ; VELIKOST DISKU (POCET BLOKU)DO [HL]
                                ;    [DE] - [HL] TO TDE]
        LD      A,E             ; TEST PREKROCENI VELIKOSTI
        SUB     L
        LD      A,D
        SBC     A,H
        JP      NC,LB017        ; VELIKOST PREKROCENA
                                ; HLEDANI DALSIHO BLOKU
        INC     DE              ; INC # BLOKU
        PUSH    BC              ; SUSCHOVA # BLOKU PRO HLEDANI
        PUSH    DE              ; V OBOU SMERECH
                                ;
        LD      B,D             ; PRESUN # BLOKU DO [BC]
        LD      C,E
        CALL    TL100           ; TEST BITU V ALOKACNI MAPE
        RRA                     ;
        JP      NC,LB016        ; REZERVOVANI + RET
;
        POP     DE              ; OBNOVA # BLOKU PRO HLEDANI V
        POP     BC              ; OBOU SMERECH
        JP      LB018           ; OPAKOVANI
LB016:                          ; ZPETNE ULOZENI DO ALOKACNI
                                ; MAPY
        RLA
        INC     A               ; OBSAZENI BITU V AL. MAPE
        CALL    TL160           ;
                                ; OBNOVA # BLOKU
        POP     HL              ; # VOLNEHO BLOKU
        POP     DE              ; # POSLEDNIHO BLOKU
        RET                     ;
LB017:                          ;
        LD      A,C             ; TEST # BLOKU NA NULU (V SMERE DOLU)
        OR      B
        JP      NZ,LB018        ; OPAKOVANI
        LD      HL,0            ; JINAK 0=>[HL] - DISK PLNY
        RET                     ;
;
;
;       PRESUN FCB DO SEKTORU ADRESARE A ZAPIS
;
                                ; PRIPRAVA VST. PARAMETRU
LB020:  LD      C,0             ; RELATIVNI ADRESA PRESOUVAME CASTI
        LD      E,32            ; ROZSAH PRESOUVANE CASTI
;
;     PRESUN CASTI FCB DO SEKTORU ADRESARE A ZAPIS
;
;
MOVFCB:                         ;
        PUSH    DE              ; USCHOVA ROZSAHU PRESUNU
        LD      B,0             ; NULA DO [B]
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        ADD     HL,BC           ; POC. ADRESA PRESUNU DO [HL]
        EX      DE,HL           ; A DO [DE]
        CALL    DIRADR          ; ADRESA VOLNEHO FCB
        POP     BC              ; ROZSAH PRESUNU DO [BC]
        CALL    MOVE            ; PRESUN [C] BYTO Z [DE] DO [HL]
LB014:  CALL    DSKCAL          ; VYPOCET A NASTAVENI SEKTORU A STOPY
        JP      WDB             ; ZAPIS SEKTORU ADRESARE
;
;
;       PROCEDURA PREJMENOVANI SUBORU
;       =============================
;
RENFP:  CALL    TSTNRO          ; TEST NA DISK NOT READ ONLY
                                ; HLEDANI PRVNIHO EXTENDU SOUBORU
        LD      C,12            ; ROZSAH POROVNANI (JMENO)
        CALL    SFFP            ; HLEDANI PRVNIHO VYSKYTU
                                ; PRESUN # DISKU A # UZIVATELE
        LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      A,(HL)          ; # DISKU A # UZIVATELE DO [A]
                                ; ADRESA 1 ZNAKU NOVEHO JMENA
        LD      DE,16           ; DO [HL]
        ADD     HL,DE
        LD      (HL),A          ; ULOZENI # DISKU A # UZIVATELE
                                ;
LB003:  CALL    TSTDIE          ; EXTEND NALEZEN ?
        RET     Z               ; RET KDYZ NE
                                ; PREJMENOVANI PRVNIHO EXTENDU A
                                ; HLEDANI DALSIHO
        CALL    TSTRO           ; TEST NA READ ONLY SOUBORU
                                ;
        LD      C,16            ; REL. ADRESA NOVEHO
        LD      E,12            ; ROZSAH PRESUNU
        CALL    MOVFCB          ; PRESUN JMENA DO DIR-FCB A ZAPIS
        CALL    TL400           ; HLEDANI DALSIHO EXTENDU SOUBORU
        JP      LB003           ;
;
;
;       PROCEDURA NACTAVENI ATRIBUTU SOUBORU
;       ====================================
;
                                ; HLEDANI PRVNIHO EXTENDU SOUBORU
SETFAP: LD      C,12            ; NACTAVENI ROZSAHU POROVNANI
        CALL    SFFP            ; HLEDANI PRVNIHO VYSKYTU SOUBORU
                                ;
LBA14:  CALL    TSTDIE          ; TEST NALEZENI
        RET     Z               ; RET KDYZ NENALEZEN
;
        LD      C,0             ; REL. ADR. PRESUNU DO [C]
        LD      E,12            ; ROZSAH POROVNAVANI DO [E]
        CALL    MOVFCB          ; PRESUN JMENA DO DIR-FCB + ZAPIS
        CALL    TL400           ; HLEDANI DALSIHO EXTENDU SOUBORU
        JP      LBA14           ;
;
;
;       PROCEDURA OTEVRENI SOUBORU
;       ==========================
;
OPFP:                           ; HLEDANI EXTENDU SOUBORU
        LD      C,15            ; NASTAVENI ROZSAHU POROVNANI
        CALL    SFFP            ; HLEDANI PRVNIHO VYSKYTU
        CALL    TSTDIE          ; TEST NALEZENI
        RET     Z               ; RET KDYZ NENALEZEN
                                ; ULOZENI "EX" Z UZIV. FCB
OPFP1:
        CALL    EXADD           ; ADRESA NA "EX"
        LD      A,(HL)          ; "EX" Z UZIV. FCB DO [A]
        PUSH    AF              ; USCHOVA "EX"
        PUSH    HL              ; A JEHO ADRESY
                                ; PRESUN DIR-FCB DO UZIV. FCB
                                ; PRIPRAVA PARAMETRU
        CALL    DIRADR          ; GENEROVANI ADRESY ADRESARE
        EX      DE,HL           ; PRESUN DIR.ADR DO [DE]
        LD      HL,(FCBSAV)     ; ADRESA UZIV. FCB DO [HL]
        LD      C,32            ; ROZSAH PRESUNU DO [C]
        PUSH    DE              ; USCHOVA DIR. ADR
        CALL    MOVE            ; PRESUN FCB
        CALL    ST7S2           ; NASTAVENI BITU 7 V S2
                                ; PRESUN "EX" Z DIR-FCB DO [C]
        POP     DE              ; OBNOVA DIR. ADR
        LD      HL,12           ; OFFSET NA "EX"
        ADD     HL,DE           ; ADR. "EX" Z DIR-FCB DO [HL]
        LD      C,(HL)          ; "EX" DO [C]
                                ; "RC" Z DIR-FCB DO [B]
        LD      HL,15           ; OFFSET NA "RC"
        ADD     HL,DE           ; ADRESA "RC" Z DIR-FCB DO [HL]
        LD      B,(HL)          ; "RC" DO [B]
                                ; ZPETNE ULOZENI "EX" DO UZIV.FCB
        POP     HL              ; ADRESA UZIV. "EX" DO [HL]
        POP     AF              ; OBNOVA "EX"
        LD      (HL),A          ; ULOZENI"EX"
                                ; POROVNANI "EX" Z UZIV. A DIR. FCB
        LD      A,C             ; "EX" Z DIR-FCB DO [A]
        CP      (HL)            ; POROVNANI
                                ; KDYZ SE ROVNAJI
        LD      A,B             ; ULOZENI "RC"
        JP      Z,LB005
                                ; KDYZ "EX" Z DIR-FCB .LT."EX" UZIV.
        LD      A,0             ; NULOVANI "RC"
        JP      C,LB005
                                ; KDYZ "EX" Z DIR-FCB .GT. "EX" UZIV.
        LD      A,80H           ; NASTAVENI "RC" NA 80H
                                ; ULOZENI "RC"
                                ; ADRESA "RC" DO [HL]
LB005:  LD      HL,(FCBSAV)
        LD      DE,15           ; OFFSET NA "RC"
        ADD     HL,DE
        LD      (HL),A          ; ULOZENI
        RET                     ; RETURN
;
;
;       PRESUN 2 BYTU Z ADRESY V [DE] NA ADRESU V [HL] KDYZ
;       [HL].EQ.[HL+1]
;
LB011:                          ; KDYZ [HL].EQ.[HL+1]
        LD      A,(HL)
        INC     HL
        OR      (HL)
        DEC     HL

        RET     NZ
                                ; POTOM
                                ; PRESUN LOW BYTU
        LD      A,(DE)
        LD      (HL),A
                                ; PRESUN HIGH BYTU
        INC     DE
        INC     HL
        LD      A,(DE)
        LD      (HL),A
                                ; UPRAVA ADRES
        DEC     DE
        DEC     HL
        RET                     ; RETURN
;
;
;       PROCEDURA UZAVRENI SOUBORU
;       ==========================
;
CLFP:                           ; NULOVANI PRAC. PARAMETRU
        XOR     A               ; NULA DO [A]
        LD      (RETPRM),A      ; NULOVANI NAVRATOVEHO PARAMETRU
                                ; NULOVANI CISLA VSTUPU ADRESARE
        LD      (DETYNO),A      ;      LOW BYTE
        LD      (DETYNO+1),A    ;      HIGH BYTE
                                ; RET KDYZ JE DISK READ ONLY
        CALL    TSTDRO          ; TEST
        RET     NZ              ; RETURN
                                ; RET KDYZ EXTEND NENI NASTAVEN
                                ; K ZAPISU
        CALL    LDS2            ; S2 DO A
        AND     80H             ; EX. 7 BITU
        RET     NZ              ; RET KDYZ 7. BIT S2 = 1
                                ; HLEDANI ODPOVIDAJICI POLOZKY V
        LD      C,15            ; ADRESARI - NAST. ROZSAHU
        CALL    SFFP            ; HLEDANI PRVNIHO VYSKYTU
        CALL    TSTDIE          ; TEST NALEZENI
        RET     Z               ; NENALEZEN => RET
                                ; PRIPRAVA PARAM. K PRESUNU # BLOKU
                                ; DO [DE] ADR, PRVNIHO # BLOKU Z FCB
        LD      BC,16           ; 16 DO [BC]
        CALL    DIRADR          ; GENEROVANI ADRESY ULOZENI ADRESARE
        ADD     HL,BC           ; VYPOCET ADRESY ULOZENI PRVNIHO
                                ; # BLOKU (D0) V ADRESARE
        EX      DE,HL           ; A JEJI PRESUN DO [DE]
                                ; NASTAVENI ADR. D0 V UZIV. FCB
        LD      HL,(FCBSAV)     ; ADR, UZIV. FCB DO [HL]
        ADD     HL,BC           ; ADR. D0 V UZIV FCB
        LD      C,16            ; NASTAVENI CITACE PRESUNU
LB012:                          ;
        LD      A,(DSKSFL)      ; TEST VELIKOSTI DISKU
        OR      A               ;
        JP      Z,LB006         ; SKOK KDYZ VELIKOST .GT. 256 KB
                                ;
                                ; KDYZ # BLOKU Z UZIV.FCB JE NULA
        LD      A,(HL)          ; OAD D(N) OF USER FCB TO [A]
        OR      A               ;
        LD      A,(DE)          ; PRESUN # BLOKU Z FCB V ADRESARI
                                ; (DIR-FCB)
        JP      NZ,LB007        ; SKOK KDYZ NOT .EQ. 0
                                ; PRESUN # BLOKU Z DIR-FCB DO
        LD      (HL),A          ; UZIVATELSKEHO FCB
LB007:                          ;
        OR      A               ; TEST # BBLOKU Z DIR-FCB NA NULU
        JP      NZ,LB008
;
        LD      A,(HL)          ; PRESUN # BLOKU DO UZIV. FCB
        LD      (DE),A
LB008:                          ; POROVNANI # BLOKU Z UZIVATELSKEHO
        CP      (HL)            ; A DIR-FCB
        JP      NZ,LB009        ; NEJSOU SHODNA => CHYBA + RET
        JP      LB010           ; JSOU SHODNA
;
LB006:                          ; PRESUN # BLOKU Z DIR-FCB
        CALL    LB011           ; DO UZIVATELSKEHO FCB A NAOPAK
        EX      DE,HL
        CALL    LB011
;
;       POROVNANI # BLOKU V UZIV. PCB A DLR-FCB
;
        EX      DE, HL          ; POROVNANI DOLNIHO BYTE
        LD      A,(DE)
        CP      (HL)
        JP      NZ,LB009        ; NEROVNAJI SE => NAST. NAVR.
                                ; PARAMETRU NA 255 + RET
                                ;
        INC     DE              ; POROVNANI HORNIHO BYTE
        INC     HL
        LD      A,(DE)
        CP      (HL)
        JP      NZ,LB009        ; NEROVNAJI SE => NAVR. PAR=255 +
                                ; RET
        DEC     C               ; DEC CITACE PRESUNU
LB010:                          ;
        INC     DE              ; UPRAVA ADRES CISEL BLOKU
        INC     HL
        DEC     C               ; DEC CITACE OPAKOVANI
        JP      NZ,LB012        ; OPAKOVANI
;
;       POROVNANI "EX" Z UZIV. FCB A DIR-FCB
;
                                ; NASTAVENI ADRES "EX"
        LD      BC,0FFECH       ; -20 DO [BC]
        ADD     HL,BC           ; SOUCET S [HL]
        EX      DE,HL           ; ADRESA UZIV."EX"
        ADD     HL,BC           ; ADRESA DIR."EX" V [HL]
                                ; POROVNANI
        LD      A,(DE)
        CP      (HL)
        JP      C,LB013
;
;       PRESUN "EX" A "RC" DO UZIV. FCB
;
;
        LD      (HL),A          ; PRESUN "EX"
        LD      BC,3            ; PRIPRAVA ADRESY "RC"
        ADD     HL,BC
        EX      DE,HL
        ADD     HL,BC
                                ; PRESUN "RC"
        LD      A,(HL)
        LD      (DE),A
LB013:                          ;
                                ; NASTAVENI SAV NA -1
        LD      A,0FFH          ;
        LD      (SAV),A
        JP      LB014           ; ZAPIS SEKTORU ADRESARE + RET
LB009:                          ; NASTAVENI NAVRATOVEHO PARAMETRU
        LD      HL,RETPRM       ; NA -1 + RET
        DEC     (HL)
        RET
;
;
;
;       PROCEDURA VYTVORENI SOUBORU
;       ===========================
;
MKFLP:  CALL    TSTNRO          ; TEST NA NOT READ ONLY
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        PUSH    HL              ; USCHOVA ADRESY FCB
        LD      HL,FFAT         ; ADR. PRIZNAKU VOLNEHO FCB(E5)
        LD      (FCBSAV),HL     ; A JEHO USCHOVA
        LD      C,1             ; ROZSAH POROVNANI
        CALL    SFFP            ; HLEDANI VOLNEHO FCB
        CALL    TSTDIE          ; TEST NALEZENI - NAST. VLAJEK
        POP     HL              ; OBNOVA ADRESY FCB
        LD      (FCBSAV),HL     ; A PRIPRAVA JEJIHO ZPRACOVANI
        RET     Z               ; RET KDYZ JE ADRESAR PLNY
;
;
;
        EX      DE,HL           ; ADRESA FCB DO [DE]
        LD      HL,0FH          ; OFFSET NA S2 DO [HL]
        ADD     HL,DE           ; ADRESA S2 DO [HL]
        LD      C,11H           ; PARAMETR CYKLU DO [C]
        XOR     A               ; NULA DO [A]
LB100:  LD      (HL),A          ; NULOVANI ALOKACNIHO VEKTORU
        INC     HL              ; V FCB
        DEC     C
        JP      NZ,LB100
        LD      HL,000DH        ; OFFSET NA "EX"
        ADD     HL,DE           ; ADRESA "EX" DO [HL]
        LD      (HL),A          ; NULOVANI HEXH
        CALL    TSTMDI          ; TEST NA MAX. # VSTUPU ADRESARE
        CALL    LB020           ; PRESUN FCB DO ADRESARE DICKU
        JP      ST7S2           ; NASTAVENI 7 BITU C2 + RET
;
;
;       OBSLUHA CTENI A ZAPICU SOUBORU
;       ==============================
;
;
FLHAN:  XOR     A               ; NULOVANI RIDICIHO BYTE S2
        LD      (THSE),A        ;
        CALL    CLFP            ; PRESUN FCB DO ADRESARE
        CALL    TSTDIE          ; JE PRESUN KOREKTNI?
        RET     Z               ; NE, CHYBOVY NAVRAT
;
;
;
        LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      BC,0CH          ; OFFSET NA "EX" DO [BC]
        ADD     HL,BC           ; VYPOCET ADRESY "EX"
        LD      A,(HL)          ; "EX" DO [A]
        INC     A               ; PRIPRAVA HODNOTY NASLEDUJI-
        AND     1FH             ; CIHO "EX"
        LD      (HL),A          ; A JEJI ULOZENI
        JP      Z,LB102         ; CKOK KDYZ [EX] .GT. 32
        LD      B,A             ; "EX" DO [B]
        LD      A,(CUEXM)       ; TEST POCTU EXTENTU
        AND     B               ;
        LD      HL,THSE         ; ADRESA RIDICIHO BYTE C2(FCB)
        AND     (HL)            ;
        JP      Z,LB103         ;
        JP      LB104           ;
;
;       ZVYSENI INDIKACE POCTU EXTENTU V S2
;
LB102:  LD      BC,2            ; ADRESA S2 DO [HL]
        ADD     HL,BC           ;
        INC     (HL)            ; S2=S2+1
        LD      A,(HL)          ; ULOZENI S2
        AND     0FH             ; TEST POCTU EVID. EXTENTU
        JP      Z,LB106         ; POCET PREKROCEN
;
;
;
LB103:  LD      C,0FH           ; ROZSAH POROVNANI DO [C]
        CALL    SFFP            ; HLEDEJ VYCKYT V ADRESARI
        CALL    TSTDIE          ; TEST NALEZENI
        JP      NZ,LB104        ; NENALEZEN DALCI EXTENT
        LD      A,(FRSE)        ; INDIKACE CLUZBY DO [A]
        INC     A               ; TEST PROVADENE CLUZBY
        JP      Z,LB106         ; READ
        CALL    MKFLP           ; WRITE-VYTVORENI NOVEHO EXTENTU
        CALL    TSTDIE          ; TEST VYTVORENI
        JP      Z,LB106         ; NE, CHYBA + RET
        JP      LB105           ; O.K.
;
;
;
LB104:  CALL    OPFP1           ; PRIPRAVA FCB DALSIHO EXTENTU
LB105:  CALL    LDD9RC          ; NASTAVENI"D9"(CR) A "RC" Z FCB
        XOR     A               ; NULA DO NAVR. PARAHETRU
        JP      SVSING          ; + RET
LB106:  CALL    SREPRM          ; 1 DO NAVR. PARAMETRU => CHYBA
        JP      ST7S2           ; NASTAVENI 7 BITU V S2 + RET
;
;
;       PRIPRAVA CTENI A CTENI
;
RPR:    LD      A,01H           ; NASTAVENI ATRIBUTU
        LD      (SECSE),A       ; SEKVENCNIHO CTENI
LB107:  LD      A,0FFH          ;
        LD      (FRSE),A
        CALL    LDD9RC          ; PRIPRAVA "D9" A "RC" Z FCB
        LD      A,(D9)          ; "D9" DO [A]
        LD      HL,RC           ; ADR. "RC" DO [HL]
        CP      (HL)            ; POROVNANI "D9" A "RC"
        JP      C,LB108         ; RC .GE. D9=> O.K. CTENI
        CP      80H             ; D9 .GT. RC, JE .EQ. 128 ?
        JP      NZ,LB109        ; D9 .NE. 128 =>IND. CHYBY + RET
;
;
;
        CALL    FLHAN           ; PRIPRAVA DALSIHO EXTENTU
        XOR     A               ; NULOVANI "D9" (AKTUALNIHO
        LD      (D9),A          ; CITACE ZAZNAMU)
        LD      A,(RETPRM)      ; TEST NAVRATOVEHO PARAHETRU
        OR      A               ;
        JP      NZ,LB109        ; IND. CHYBY + RET
;
;
;
LB108:  CALL    GETBLK          ; ZJISTENI # BLOKU
        CALL    TSTBLK          ; TEST # BLOKU NA NULU
        JP      Z,LB109         ; KONEC CTENI
        CALL    GETSEC          ; ZJISTENI CISLA SEKTORU
        CALL    DSKCA1          ; VYPOCET A NASTAVENI # STOPY
                                ; A # SEKTORU
        CALL    READ            ; CTENI SEKTORU
        JP      SVD9RC          ; ULOZENI "D9" A "RC"
LB109:  JP      SREPRM          ; NASTAVENI NAVR. PARAM. + RET
;
;
;       PRIPRAVA ZAPISU A ZAPIS
;
WPR:    LD      A,01H           ; NASTAVENI ATRIBUTU SEKV.
        LD      (SECSE),A       ; ZAPISU
WPR1:   LD      A,00H           ;
LB110:  LD      (FRSE),A
        CALL    TSTNRO          ; TEST NA R/O DISKU
        LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        CALL    TST1            ; TEST NA R/O SOUBORU
        CALL    LDD9RC          ; PRIPRAVA "D9" A "RC
        LD      A,(D9)          ; "D9" DO [A]
        CP      80H             ; TEST "D9"
        JP      NC,SREPRM       ; INDIKACE CHYBY + RET
        CALL    GETBLK          ; ZJISTENI# BLOKU
        CALL    TSTBLK          ; TEST # BLOKU NA NULU
        LD      C,00H           ; NAST. INDIKACE SLUZBY
        JP      NZ,LB115        ; SKOK KDYZ # BLOKU .NE. 0
        CALL    BSHIFT          ; VYPOCET ULOZENI # BLOKU V FCB
        LD      (ESAV+1),A      ; JEHO ULOZENI
        LD      BC,0            ; PRIPRAVA REL. ADR. ULOZENI
        OR      A               ; # ALOKOVANEHO BLOKU V FCB
        JP      Z,LB111         ;
        LD      C,A             ; # BLOKU DO [C]
        DEC     BC              ;
        CALL    RETBLK          ; VYHLEDANI PREDCH. AL. BLOKU
        LD      B,H             ; JEHO PRESUN DO [BC]
        LD      C,L             ;
LB111:  CALL    COBLLO          ; PRIPRAVA ALOKACE BLOKU
        LD      A,L             ; TEST VYSLEDKU
        OR      H
        JP      NZ,LB112        ; O.K.
        LD      A,02            ; NENALEZEN DALSI VOLNY BLOK
        JP      SVSING          ; IND. CHYBY + RET
;
;
;
LB112:  LD      (BLOCK),HL      ; ULOZENI # BLOKU K ZAPISU
        EX      DE,HL           ; # BLOKU DO [DE]
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        LD      BC,0010H        ; OFFSET NA D0
        ADD     HL,BC           ; ADRESA D0 V FCB
        LD      A,(DSKSFL)      ; DISKSIZE FLAS DO [A]
        OR      A               ; TESt VELIKOSTI DISKU
        LD      A,(ESAV+1)      ; # BLOKU DO [A]
        JP      Z,LB113         ; SKOK PRI ZAPISU NAD 256 BLOKU
        CALL    DIRAD1          ; GENEROVANI ADRESY ULOZ. ADRESARE
        LD      (HL),E          ; ULOZENI # BLOKU DO ALOK. VEKTORU
        JP      LB114           ;
;
;       PRI ZAPISU NAD 256 BLOKU
;
LB113:  LD      C,A             ; OFFSET ULOZENI D0 DO [C]
        LD      B,0 ;           ; NULA DO [B]
        ADD     HL,BC           ; ADRESA NA MISTO ULOZENI # BLOKU
        ADD     HL,BC ;         ; V FCB
        LD      (HL),E          ; PRESUN 1 BLOKU
        INC     HL
        LD      (HL),D
LB114:  LD      C,02H           ; NAST. INDIKACE VELIKOSTI DISKU
LB115:  LD      A,(RETPRM)      ; TEST NAVRATOVEHO PARAMETRU
        OR      A               ;
        RET     NZ              ; RET KDYZ RETPRM .NE. 0
;
;
;
;
        PUSH    BC              ; USCHOVA INDIKACE SLUZBY
        CALL    GETSEC          ; ZJISTENI # SEKTORU
        LD      A,(SECSE)       ; ATRIBUT PROVADENE SLUZBY DO [A]
        DEC     A               ; TEST SLUZBY
        DEC     A
        JP      NZ,LB118        ; SKOK KYZ SLUZBA .NE.40
        POP     BC              ; OBNOVA [BC]
        PUSH    BC              ;
        LD      A,C             ; TEST PREDCH. VYKONAVANI PROCEDURY
        DEC     A
        DEC     A
        JP      NZ,LB118        ; SKOK KDYZ CMD .NE. 40
;
;
;
        PUSH    HL              ; USCH.ADR.ULOZENI DALSIHO # BLOKU
        LD      HL,(DIRBUP)     ; ADR. BUFFERU ADRESARE DO [HL]
        LD      D,A             ; NULA DO [D]
LB116:  LD      (HL),A          ; NULOVANI BUFFERU ADRESARE
        INC     HL
        INC     D
        JP      P,LB116
        CALL    DMA120          ; NAST DMA NA ADRESU BUFFERU
        LD      HL,(SECTOR)     ; # SECTORU DO [HLJ
        LD      C,02H           ; 02 DO [C] - IND. PRUCHODU
LB117:  LD      (BLOCK),HL      ; USCHOVA # SEKTORU
        PUSH    BC              ; USCHOVA [BC]
        CALL    DSKCA1          ; VYPOCET A NASTAVENI # SECTORU
                                ; A # STOPY
        POP     BC              ; OBNOVA [BC]
        CALL    WRITE           ; ZAPIS VYBRANEHO SECTORU NULAMI
        LD      HL,(BLOCK)      ; # SECTORU DO [HL]
        LD      C,0             ; NULA DO [C]
        LD      A,(CUBLM)       ; BLOCK MASK DO [A]
        LD      B,A             ; BLOCK MASK DO [B]
        AND     L               ; .AND. [A] S # SECTORU
        CP      B               ; POROVNANI VYSLEDKU S BLOK-MASKOU
        INC     HL              ; INICIALIZACE ADRESY
        JP      NZ,LB117        ; ZAPIS DALSIHO SECTORU NULAMI
        POP     HL              ; OBNOVA [HL] - # SEKTORU
        LD      (BLOCK),HL      ; ULOZENI # SEKTORU
        CALL    DMA110          ; PRIPRAVA DMA ADRESY
;
;
;
LB118:  CALL    DSKCA1          ; VYPOCET A NASTAVENI # STOPY
                                ; A # SEKTORU
        POP     BC              ; AKTUALIZACE [BC]
        PUSH    BC


        CALL    WRITE           ; ZAPIS VYBRANEHO SEKTORU
        POP     BC
        LD      A,(D9)          ; "D9" DO [A]
        LD      HL,RC           ; ADR. "RC" DO [HL]
        CP      (HL)            ; POROVNANI "D9","RC"
        JP      C,LB119         ; "RC" > "D9"
        LD      (HL),A          ; SAVE "RC"
        INC     (HL)            ; RC = RC + 1
        LD      C,02H           ; 2 DO [C]
LB119:  DEC     C               ; TEST PROVADENE SLUZBY
        DEC     C
        JP      NZ,LB120        ; SKOK KDYZ CMD .NE. 40
        PUSH    AF
        CALL    LDS2            ; PRIPRAVA S2 Z FCB
        AND     7FH             ; EXTRAKCE 7 BITU
        LD      (HL),A          ; USCHOVA S2
        POP     AF
LB120:  CP      7FH             ; POROVNANI"RC"(D9)
        JP      NZ,LB122        ; O.K.
        LD      A,(SECSE)       ; TEST PROVADENE SLUZBY
        CP      01
        JP      NZ,LB122        ; SKOK PRI NESEKVENCNIM ZAPISU
        CALL    SVD9RC          ; PRESUN "D9" A "RC"
        CALL    FLHAN           ; OBSLUHA ZAPISU SOUBORU
        LD      HL,RETPRM
        LD      A,(HL)          ; NAVR. PAR. DO [A]
        OR      A               ; JEHO TEST NA NULU
        JP      NZ,LB121        ; SKOK KDYZ .NE. NULE
        DEC     A               ; INICIALIZACE "D9"
        LD      (D9),A          ;
LB121:  LD      (HL),0          ; NULOVANI NAVR. PARAMETRU
LB122:  JP      SVD9RC          ; PRESUN "D9 A" "RC" DO FCB + RET
;
;
;       PROCEDURA PRIMEHO CTENI A ZAPISU DO SOUBORU
;       ===========================================
;
;
RAWR:   XOR     A               ; NASTAVENI INDIKACE SLUZBY
        LD      (SECSE),A       ;
;
;
;       PROCEDURA ZAPISU ALOK. BLOKU NULAMI A ZAPISU ZAZNAMU
;
;
RAWRZ:  PUSH    BC              ; USCHOVA INDIKACE CTENI NEBO
                                ; ZAPISU
        LD      HL,(FCBSAV)     ; ADR.FCB DO [HL]
        EX      DE,HL           ;   DO [DE]
        LD      HL,0021H        ; OFFSET NA NEJNIZSI BYTE # ZAZNAMU
        ADD     HL,DE           ; ADRESA NA FCB+33
        LD      A,(HL)          ; [FCB+33] DO [A]
        AND     7FH             ; VYPOCET POCTU ZAZNAMU V RAMCI
        PUSH    AF              ; POSLEDNIHO EXTENTU + USCHOVA
        LD      A,(HL)          ; [FCB+33] DO [A]
        RLA                     ; ROTACE DOLEVA
        INC     HL              ; ADRESA FCB+34
        LD      A,(HL)          ; [FCB+34] DO [A]
        RLA                     ; VYPOCET [EX]
        AND     1FH             ; EXT.BITU 5,6,7
        LD      C,A             ; PRESUN [EX] TO [C]
        LD      A,(HL)          ; [FCB+34] DO [A]
        RRA                     ; [A] / 16
        RRA
        RRA
        RRA
        AND     0FH             ; EXT.BITU 4,5,6,7
        LD      B,A             ; PRESUN [S2] TO [B]
        POP     AF              ; POCET ZAZNAMU V RAMCI POSLEDNIHO
                                ; "EX" DO [A]
        INC     HL              ; ADRESA FCB+35
        LD      L,(HL)          ; [FCB+35] DO [L]
        INC     L               ; TEST NA [FCB+35]
        DEC     L               ;    .EQ. 0
        LD      L,06H           ; PRIPRAVA # CHYBY
        JP      NZ,LB204        ; CHYBA KDYZ [FCB+35] .NE. NULA
        LD      HL,20H          ; OFFSET NA "D9" DO [HL]
        ADD     HL,DE           ; ADRESA "D9"(AKT. CITAC ZAZNAMU)
        LD      (HL),A          ; [A] DO "D9"
        LD      HL,000CH        ; OFFSET NA "EX" DO [HL]
        ADD     HL,DE           ; ADRESA "EX"
        LD      A,C             ; VYPOCITANY "EX" DO [A]
        SUB     (HL)            ; "EX"- "EX" Z FCB
        JP      NZ,LB205        ; SKOK KDYZ "EX" NOT.EQ."EX" Z FCB
        LD      HL,0EH          ; OFFSET NA S2 Z FCB
        ADD     HL,DE           ; ADRESA S2 V [HL]
        LD      A,B             ; VYPOCITANE S2 DO [A]
        SUB     (HL)            ; S2 - S2 Z FCB
        AND     7FH             ; EXT. BITU 7
        JP      Z,LB206         ; SKOK KDYZ S2 .EQ. S2 Z FCB
;
;
;
LB205:  PUSH    BC
        PUSH    DE
        CALL    CLFP            ; ZAPIS FCB DO ADRESARE(TEST NA R/O)
        POP     DE
        POP     BC
        LD      L,03H           ; PRIPRAVA KODU CHYBY
        LD      A,(RETPRM)      ; NAVR. PARAMETR DO [A]
        INC     A               ; TEST [RETPRM] .EQ. -1
        JP      Z,LB207         ; SKOK KDYZ READ ONLY
        LD      HL,0CH          ; OFFSET NA "EX" Z FCB
        ADD     HL,DE           ; ADRESA "EX"
        LD      (HL),C          ; VYPOCITANY "EX" DO FCB
        LD      HL,0EH          ; OFFSET NA S2 Z FCB
        ADD     HL,DE           ; ADRESA S2 DO [HL]
        LD      (HL),B          ; VYPOCITANA S2 DO FCB
        CALL    OPFP            ; VYHLEDANI ODPOVIDAJICIHO FCB
        LD      A,(RETPRM)      ; NAVR. PARAMETR DO [A]
        INC     A               ; TEST [RETPRM] .EQ. -1
        JP      NZ,LB206        ; SKOK KDYZ SE ODPOVIDAJICI FCB
                                ; NENASLO
        POP     BC              ; OBNOVA [C] (0 NEBO FFH)
        PUSH    BC
        LD      L,04H           ; PRIPRAVA CHYBOVEHO RODU
        INC     C               ; TEST PROVADENE SLUZBY
        JP      Z,LB207         ; SKOK KDYZ SLUZBA 33
        CALL    MKFLP           ; VYTVORENI DALSIHO EXTENTU
        LD      L,05H           ; PRIPRAVA CHYBOVEHO KODU
        LD      A,(RETPRM)      ; NAVR. PARAMETR DO [A]
        INC     A               ; TEST [RETPRM] .EQ. -1
        JP      Z,LB207         ; SKOK KDYZ JE PLNY ADRESAR
;
;
;
LB206:  POP     BC              ; OBNOVA [C] (0 NEBO FFH)
        XOR     A               ; TEST
        JP      SVSING          ; NULOVANI NAVR. PAR. + RET
;
;
;
LB207:  PUSH    HL              ; USCHOVA # CHYBY
        CALL    LDS2            ; PRIPRAVA S2 Z FCB
        LD      (HL),0C0H       ; C0H DO CS23
        POP     HL              ; OBNOVA # CHYBY
LB204:  POP     BC              ; OBNOVA [C]
        LD      A,L             ; # CHYBY DO [A]
        LD      (RETPRM),A      ; PRESUN # DO (RETPRM)
        JP      ST7S2           ; NAST 7 BITU S2 + RET
;
;
;       PROCEDURA PRIMEHO CTENI ZE SOUBORU
;       ==================================
;
RRP:    LD      C,0FFH          ; INDIKACE PRIHEHO CTENI DO [C]
        CALL    RAWR            ; PRIPRAVA PRIHEHO CTENI
        CALL    Z,LB107         ; KDYZ O.K. => SEKV. CTENI
        RET                     ;
;
;
;       PROCEDURA PRIMEHO ZAPISU
;       ========================
;
WRP:    LD      C,00H           ; INDIKACE PRIMEHO ZAPISU DO [C]
        CALL    RAWR            ; PRIPRAVA PRIMEHO ZAPISU
        CALL    Z,LB110         ; KDYZ O.K. SEKV. ZAPIS
        RET                     ;
;
;
;       PROCEDURA NASTAVENI CISLA ZAZNAMU
;       =================================
;
;
OCFS:   EX      DE,HL           ; OFFSET "D9" DO [HL]
        ADD     HL,DE           ; ADR."D9" Z FCB
        LD      C,(HL)          ; "D9" DO [C]
        LD      B,00H           ; NULA DO [B]
        LD      HL,0CH          ; OFFSET NA "EX" Z FCB
        ADD     HL,DE           ; ADRESA "EX" Z FCB V [HL]
        LD      A,(HL)          ; VYPOCET NEJNIZSIHO BYTE DELKY
        RRCA                    ;
        AND     80H             ;
        ADD     A,C             ;
        LD      C,A             ; PRESUN VYSLEDKU DO [C]
        LD      A,0             ; NULA DO [A]
        ADC     A,B             ; PRIPADNE PRETECENI DO [A]
        LD      B,A             ;   DO [B]
        LD      A,(HL)          ; [EX] DO CFL]
        RRCA                    ;
        AND     0FH             ; ZBYLY POCET EX V [A]
        ADD     A,B             ; SOUCET S PRETEC.V PREDCH. OPERACI
        LD      B,A             ; VYSLEDEK DO [B]
        LD      HL,000EH        ; LOAD OFFSET FOR S2 IN FCB
        ADD     HL,DE           ; ADRESA NA S2
        LD      A,(HL)          ; [S2] TO [A]
        ADD     A,A             ; [S2] * 16
        ADD     A,A
        ADD     A,A
        ADD     A,A
        PUSH    AF              ; USCHOVA VYSLEDKU
        ADD     A,B             ; DOPOCITANI DALSIHO BYTE VYSLEDKU
        LD      B,A             ;
        PUSH    AF              ; A NASTAVENI PRIPAD. PRETECENI
        POP     HL              ; DO [A]
        LD      A,L
        POP     HL
        OR      L               ;
        AND     01              ;
        RET
;
;
;       PROCEDURA VYPOCTU DELKY SOUBORU
;       ===============================
;
CFSP:   LD      C,0CH           ; ROZSAH POROVNANI DO [C]
        CALL    SFFP            ; HLEDEJ PRVNI VYSKYT V ADRESARI
        LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      DE,21H          ; OFFSET NA FCB+33
        ADD     HL,DE           ; ADRESA FCB+33
        PUSH    HL              ; USCH. ADRESY FCB+33
        LD      (HL),D          ; NULOVANI [FCB+33]
        INC     HL              ;
        LD      (HL),D          ; NULOVANI [FCB+34]
        INC     HL              ;
        LD      (HL),D          ; NULOVANI [FCB+35]
;
;
;
LB212:  CALL    TSTDIE          ; TEST NALEZENI SOUBORU
        JP      Z,LB209         ; NENALEZEN
        CALL    DIRADR          ; GENEROVANI ADRESY ADRESARE
        LD      DE,0FH          ; OFFSET NA "RC" DO [DE]
        CALL    OCFS            ; VYPOCET DELKY SOUBORU
                                ; DANEHO FCB
        POP     HL              ; ADRESA FCB+33 DO [HL]
        PUSH    HL
        LD      E,A
        LD      A,C
        SUB     (HL)            ; TEST CHYBY V NAVAZNOSTI BYTU
                                ; TVORICICH VYPOCTENOU DELKU
                                ; (NBTVD)
        INC     HL              ; ADRESA FCB+34
        LD      A,B
        SBC     A,(HL)          ; TEST NA NBTVD
        INC     HL              ; ADRESA FCB+35
        LD      A,E
        SBC     A,(HL)          ; TEST NA NBTVD
        JP      C,LB211         ; SKOK PRI CHYBE NBTVD
        LD      (HL),E          ; PRESUN [E] DO [FCB+3]
        DEC     HL              ; ADRESA FCB+34
        LD      (HL),B          ; PRESUN [B] DO [FCB+34]
        DEC     HL              ; ADRESA FCB+33
        LD      (HL),C          ; PRESUN [C] DO [FCB+33]
LB211:  CALL    TL400           ; HLEDANI DALSIHO EXTENTU
        JP      LB212           ; OPAKOVANI
LB209:  POP     HL              ; ADRESA FCB+33 DO [HL]
        RET                     ;
;
;
;       PROCEDURA NASTAVENI CISLA ZAZNAMU
;       =================================
;
;
SRRP:   LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      DE,20H          ; OFFSET NA "D?" DO [DE]
        CALL    OCFS            ; VYPOCET DELKY SOUBORU
        LD      HL,0021H        ; ULOZENI VYSLEDKU NA ADRESACH:
        ADD     HL,DE           ;
        LD      (HL),C          ; FCB + 33
        INC     HL              ;
        LD      (HL),B          ; FCB + 34
        INC     HL              ;
        LD      (HL),A          ; FCB + 35
        RET                     ;
;
;
;
;       OSETRENI VEKTORU AKTIVNICH DISKU
;       ================================
;
LGV120: LD      HL,(LOGVEC)     ; VEKTOR AKT. DISKU DO [HL]
        LD      A,(DSKNO)       ; CISLO DISKU DO [A]
        LD      C,A             ; A DO [C]
        CALL    RSHHL           ; SHIFT VEKTORU V [HL] [C] KRAT
        PUSH    HL              ; USCHOVA [HL]
        EX      DE,HL
        CALL    SD110           ; VYBER DISKU
        POP     HL              ; OBNOVA [HL]
        CALL    Z,VJUMP         ; PRI CHYBE - SKOK
        LD      A,L             ; SHIFT. VEKTOR DO [A]-LOW BYTE
        RRA                     ; JE JIZ DISK AKTIVNI ? - TEST
        RET     C               ; ANO, RET
        LD      HL,(LOGVEC)     ; VEKTOR AKT. DISKU DO [HL]
        LD      C,L             ; A DO [BC]
        LD      B,H
        CALL    SETVEC          ; NASTAV BIT DISKU VE VEKTORU
        LD      (LOGVEC),HL     ; ULOZENI VEKTORU AKT.DISKU
        JP      CLRALV          ; NULOVANI ALOKACNIHO VEKTORU
;
;
;       VYBER   DISK                    CMD 14
;       ============
;
SELDSK: LD      A,(ESAV)        ; CISLO DISKU DO [A]
        LD      HL,DSKNO        ; ADR. ULOZENI # DISKU DO [HL]
        CP      (HL)            ; POROVNANI CLSEL DISKU
        RET     Z               ; RET KDYZ SE ROVNAJI
        LD      (HL),A          ; NAST. NOVEHO # DISKU
        JP      LGV120          ; UPRAVA VEKTORU AKT. DISKU
;
;
;       OSETRENI # JEDNOTKY(DISKU) A # UZIVATELE
;
UU110:  LD      A,0FFH          ; 0FFH DO [A]
        LD      (DSKFLG),A      ; NASTAVENI DISK FLASU
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        LD      A,(HL)          ; # JEDNOTKY DO [A]
        AND     1FH             ; EXT. BITU 5,6,7
        DEC     A               ; DEC # JEDNOTKY
        LD      (ESAV),A        ; ULOZENI # JEDNOTKY
        CP      1EH             ; BYLA JEDNOTKA VYBRANA?
                                ; JE STANDARTNI?
        JP      NC,UU120        ; ANO
        LD      A,(DSKNO)       ; JINAK 1 DISKU DO
        LD      (UNITSV),A      ; # VYBRANEHO DISKU
;
        LD      A,(HL)          ; # JEDNOTKY DO [A]
        LD      (UNITNO),A      ; JEJI ULOZENI
        AND     11100000B       ; EXT. BITU 4-0
        LD      (HL),A          ; ZPETNE NASTAVENI
        CALL    SELDSK          ; VYBER DISKU(JEDNOTKY)
UU120:  LD      A,(USRNO)       ; # UZIVATELE DO [A]
        LD      HL,(FCBSAV)     ; ADR. FCB DO [HL]
        OR      (HL)            ; .OR. # JEDN. A # UZIV.
        LD      (HL),A          ; ULOZENI VYSLEDKU DO FCB
        RET
;
;
;       ZJISTI CISLO VERZE              CMD 12
;       ==================
;
RETVER: LD      A,22H           ; NASTAV VERZI 2.2
        JP      SVSING          ; NASTAVENI NAVR. PARAN.+ RET
;
;
;       RESET DISKOVEHO SYSTEHU         CMD 13
;       =======================
;
RESDSY: LD      HL,0            ; NULY DO [HL]
        LD      (ROVEC),HL      ; NULOVANI R/O VEKTORU
        LD      (LOGVEC),HL     ; NULOVANI VEKTORU AKT. DISKU
        XOR     A               ; NULA DO [A]
        LD      (DSKNO),A       ; NASTAVENI CISLA DISKU NA NULU
        LD      HL,DMAAD        ; DMA ADRESY NA 80H
        LD      (DMAADR),HL     ;
        CALL    DMA110          ; NASTAVENI DMA ADR
        JP      LGV120          ; OSETRENI VEKTORU AKT. DISKU
;
;
;       OTEVRI SOUBOR                   CMD 15
;       =============
;
OPFIL:  CALL    CLRS2           ; NULOVANI S2 V FCB
        CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      OPFP            ; PROCEDURA OTEVRENI SOUBORU
;
;
;       UZAVRI SOUBOR                   CMD 16
;       =============
;
CLFIL:  CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      CLFP            ; PROCEDURA UZAVRENI SOUBORU
;
;
;       HLEDEJ PRVNI ODPOVIDAJICI       CMD 17
;       POLOZKU V ADRESARI
;       ==================
;
SFFRST: LD      C,0             ; NULA DO [C]
        EX      DE,HL           ; ADR. FCB DO [HL]
        LD      A,(HL)          ; # DISKU DO [A]
        CP      '?'             ; TEST NA '?'
        JP      Z,SF120         ; SKOK KDYZ # DISKU = '?'
        CALL    EXADD           ; ADRESA "EX" DO [HL]
        LD      A,(HL)          ; "EX" DO [A]
        CP      '?'             ; TEST NA '?'
        CALL    NZ,CLRS2        ; NULOVANI S2 KDYZ "EX" NOT '?'
        CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        LD      C,0FH           ; ROZSAH SHODY PRI PROHLEDAVANI
                                ; ADRESARE DO [C]
SF120:  CALL    SFFP            ; HLEDANI SHODY V POLOZKACH
                                ; ADRESARE
        JP      MOVDIR          ; PRESUN ADRESARE + RET
;
;
;       HLEDEJ NASLEDUJICI ODPOVIDAJICI         CMD 18
;       ODPOVIDAJICI POLOZKU V ADRESARI
;       ===============================
;
;
SFNEXT: LD      HL,(FCBP)       ; ADR. FCB DO [HL]
        LD      (FCBSAV),HL     ; AKTUALIZACE ULOZENI ADR.FCB
        CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        CALL    TL400           ; HLEDEJ DALSI VYSKYT V ARESARI
        JP      MOVDIR          ; PRESUN ADRESARE + RET
;
;
;       ZRUS SOUBOR                     CMD 19
;       ===========
;
DELFIL: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        CALL    DELFP           ; PROCEDURA ZRUSENI SOUBORU
        JP      TL300           ; PRIPRAVA NAVR. PAR.+ RET
;
;
;       SEKVENCNI CTENI                 CMD 20
;       ===============
;
RDSEQ:  CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      RPR             ; PRIPRAVA CTENI A CTENI
;                               ; + RET
;
;       SEKVENCNI ZAPIS                 CMD 21
;       ===============
;
WRTSEQ: CALL    UU110           ; OSETRENU # DISKU A # UZIV.
        JP      WPR             ; PRIPRAVA ZAPISU A ZAPIS
;
;
;       ZALOZ SOUBOR                    CMD 22
;       ============
;
MAKFIL: CALL    CLRS2           ; NULOVANI S2 V FCB
        CALL    UU110           ; OSETRENI # DISKU # UZIVATELE
        JP      MKFLP           ; PROCEDURA VYTVORENI SOUBORU
;
;
;       PREJMENUJ SOUBOR                CMD 23
;       ================
;
RENFIL: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        CALL    RENFP           ; PROCED. PREJMENOVANI SOUBORU
        JP      TL300           ; PRIPRAVA NAVRATOVEHO PARAMET.
;                               ; PROCEDURY + RET
;
;       VRAT VEKTOR AKTIVNICH DISKU     CMD 24
;       ===========================
;
RETLOG: LD      HL,(LOGVEC)     ; SEKTOR AKT. DISKU DO [HL]
        JP      SVPAIR          ; NAST. NAVR. PAR. + RET
;
;
;       VRAT CISLO VYBRANEHO DISKU      CMD 25
;       ==========================
;
RETCDK: LD      A,(DSKNO)       ; CISLO DISKU DO [A]
        JP      SVSING          ; NAST. NAVR. PARAM. + RET
;
;
;       NASTAV DMA ADRESU               CMD 26
;       =================
;
SETDMA: EX      DE,HL           ; DMA ADRESA DO [HL]
        LD      (DMAADR),HL     ; ULOZENI DMA ADRESY
        JP      DMA110          ; NASTAVENI DMA ADRESY +RET
;
;
;       NASTAV CISLO ZAZNAMU            CMD 36
;       PRO PRIMY ZAPIS
;       ====================
;
;
SRNDRC: JP      SRRP            ; PROCEDURA NASTAVENI CISLA
;                               ; ZAZNAMU
;
;       DEJ ADRESU ALOKACNIHO VEKTORU   CMD 27
;       =============================
;
GETALC: LD      HL,(ALVP)       ; ALOKACNY VEKTOR DO [HL]
        JP      SVPAIR          ; NAST. NAVR. PARAM.+ RET
;
;
;
;
;       DEJ ADRESU R/O VEKTORU          CMD 28
;       ======================
;
GETROV: LD      HL,(ROVEC)      ; READ ONLY VEKTOR DO [HL]
        JP      SVPAIR          ; NAST. NAVR. PARAM.+ RET
;
;
;       NASTAV ATRIBUTY SOUBORU         CMD 30
;       =======================
;
SETFAT: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        CALL    SETFAP          ; PROCEDURA NASTAVENI ATRIBUTU
        JP      TL300           ; NAST. NAVR. PARAM. + RET
;
;
;       DEJ ADRESU BLOKU DISKOVYCH      CMD 31
;       PARAMETRU
;       ==========================
;
GETDPA: LD      HL,(DPBP)       ; ADRESA BLOKU DO [HL]
SVPAIR: LD      (RETPRM),HL     ; JEJI PRESUN DO NAVR. PARAM.
        RET
;
;
;       POSKYTNI/ZMEN KOD UZIVATELE     CMD 32
;       ===========================
;
SGUCD:  LD      A,(ESAV)        ; # UZIVATELE DO [A]
        CP      0FFH            ; TEST POZADAVKU
        JP      NZ,SGU120       ; SKOK NA NASTAVENI # UZIVATELE
        LD      A,(USRNO)       ; # UZIVATELE DO [A]
        JP      SVSING          ; NAST. NAVR. PARAM. + RET
SGU120: AND     1FH             ; EXT. BITU 5,6,7
        LD      (USRNO),A       ; PRESUN # UZIVATELE
        RET                     ;
;
;
;       PRIME CTENI ZE SOUBORU          CMD 33
;       ======================
;
RDRND:  CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      RRP             ; PROCEDURA PRIMEHO CTENI
;
;
;       PRIMY ZAPIS DO SOUBORU          CMD 34
;       ======================
;
WRTRND: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      WRP             ; PROCEDURA PRIMEHO ZAPISU
;
;
;       VYPOCITEJ DELKU SOUBORU         CMD 35
;       =======================
;
CFSIZE: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        JP      CFSP            ; PROCEDURA VYPOCTU DELKY
;
;
;
;       RESET DISKOVE JEDNOTKY          CMD 37
;       ======================
;
RESDSK: LD      HL,(FCBSAV)     ; VEKTOR DISK.JEDNOTEK
                                ; (PARAMETR VOLANI) DO [HL]
        LD      A,L             ;
        CPL                     ; KOMPLEMENT LOW BYTU VEKTORU
        LD      E,A             ; A JEHO PRESUN DO [E]
        LD      A,H             ;
        CPL                     ; KOHPLEHENT HIGH BYTU VEKTORU
        LD      HL,(LOGVEC)     ; INICIALIZACE VEKT.AKT. DISKU
        AND     H               ; HIGH BYTU
        LD      D,A             ; KOMPLEMENT HIGH BYTU DO [D]
        LD      A,L             ; PRIPRAVA LOH BYTU VEK.AKT.DISKU
        AND     E               ;
        LD      E,A             ; PRESUN LOW BYTU DO [E]
        LD      HL,(ROVEC)      ; VEKTOR R/O DO [HL]
        EX      DE,HL           ;   DO [DE]
        LD      (LOGVEC),HL     ; ULOZENI VEKTORU AKT. DISKU
        LD      A,L             ; INICIALIZACE VEKTORU R/O
        AND     E               ;
        LD      L,A             ;
        LD      A,H             ;
        AND     D               ;
        LD      H,A             ;
        LD      (ROVEC),HL      ; ULOZENI R/O VEKTORU
        RET                     ;
;
;
;
;       NAVRAT Z BDOS
;       =============
;
;
RTBDOS: LD      A,(DSKFLG)      ; DISK-FLAG DO [A]
        OR      A               ; JEHO TEST
        JP      Z,RSTSP         ; SKOK PRI NEDISKOVE SLUZBE
        LD      HL,(FCBSAV)     ; ADRESA FCB DO [HL]
        LD      (HL),0          ; NULOVANI # JEDNOTKY V FCB
        LD      A,(UNITNO)      ; # JEDNOTKY DO [A]
        OR      A               ; JEJI TEST NA NULU
        JP      Z,RSTSP         ; BEZNY DISK
        LD      (HL),A          ; NASTAVENI # JEDNOTKY V FCB
        LD      A,(UNITSV)      ; # JEDNOTKY DO [A]
        LD      (ESAV),A        ; USCHOVA # VYBRANEHO DISKU
        CALL    SELDSK          ; VYBER DISKU
;
RSTSP:  LD      HL,(SPSAV)      ; ADRESA UZIV.ZASOBNIKU DO [HL]
        LD      SP,HL           ; A JEHO INICIALIZACE
        LD      HL,(RETPRM)     ; NAVRATOVY PARAMETR DO [HL]
        LD      A,L             ;   DO [A]
        LD      B,H             ;   DO [B]
        RET                     ; RET DO MISTA VOLANI BDOS
;
;
;       POPIS ALOKACNI BLOK NULAMI      CMD 40
;       A POTOM DO NEJ VLOZ ZAZNAM
;       ==========================
;
WRRDZF: CALL    UU110           ; OSETRENI # DISKU A # UZIV.
        LD      A,02
        LD      (SECSE),A       ; NASTAVENI INDIKACE PROV.SLUZBY
        LD      C,0             ; INDIKACE PRUCHODU
        CALL    RAWRZ           ; PRIPRAVA ZAPISU
        CALL    Z,WPR1          ; KDYZ O.K. ZAPIS
        RET                     ;
;
;
;
;       POLE PRACOVNICH PROMENNYCH
;       ==========================
;
FFAT:   DEFB    0E5H            ; ATRIBUT VOLNEHO FCB
ROVEC:  DEFW    0               ; READ ONLY VEKTOR
LOGVEC: DEFW    0               ; VEKTOR AKTIVNICH DISKU
DMAADR: DEFW    0               ; DMA ADRESA
MAXDIE:                         ; MAX # VSTUPU ADRESARE
DPSC1:  DEFW    0               ; ADRESA PRAC.POLE 1 V DPBASE
                                ; DPBASE=>BAZE ULOZENI PAR.DISKU
TRACK:                          ; # STOPY
DPSC2:  DEFW    0               ; ADRESA PRAC.POLE 2 V DPBASE
MAXSOT:                         ; MAX POCET SEKTORU NA STOPE
DPSC3:  DEFW    0               ; ADRESA PRAC.POLE 3 V DPBASE
DIRBUP: DEFW    0               ; ADRESA BUFFERU ADRESARE
DPBP:   DEFW    0               ; ADRESA BLOKU DISK. PARAMETRU
CSVP:   DEFW    0               ; ADRESA PRAC.POLE POUZITEHO
                                ; PRI ZMENE DISKU
ALVP:   DEFW    0               ; ADRESA ULOZENI ALOKACNI MAPY
                                ; DISKU
;
CUDPB:                          ; BLOK PARAMETRU VYBRANEHO DISKU
CUSPT:  DEFW    0               ; POCET SEKTORU NA STOPE
CUBSH:  DEFB    0               ; BLOCK SHIFT FAKTOR
CUBLM:  DEFB    0               ; BLOCK MASKA(DELKA BLOKU)
CUEXM:  DEFB    0               ; MASKA ROZSIRENI BLOKU
CUDSM:  DEFW    0               ; VELIKOST DISKU-1(# BLOKU)
CUDRM:  DEFW    0               ; MAX. VELIKOST ADRESARE
CUAL:   DEFW    0               ; # BLOKU PRIRAZENE ADRESARI
CUCKS:  DEFW    0               ; POCET SEKTORU ZNICHZ SE PO-
                                ; CITA KONTROLNI SOUCET
CUOFF:  DEFW    0               ; POCET STOP OBSAZENYCH OS
;
STRNP:  DEFW    0               ; ADRESA PREKLADOVE TABULKY
THSE:   DEFB    0               ; S2(FCB) RIDICI BYTE
FRSE:   DEFB    0               ; INDIKACE SLUZBY:
                                ; READ SEQ. => FFH
                                ; WRITE SEQ. => 0
RPSAV:  DEFB    0               ; NAVRATOVY PARAM. PROCEDURY
SECSE:  DEFB    0               ; INDIKACE SLUZBY:
                                ; WRITE RENDOM ZERO FILE = 2
                                ; READ  SEQUENTAL        = 1
                                ; WRITE SEQUENTAL        = 1
                                ; READ  RANDOM           = 0
                                ; WRITE RANDOM           = 0
ESAV:   DEFB    0               ; ULOZENI E-REG
        DEFB    0               ; ULOZENI # BLOKU
SRGSAV: DEFB    0               ; ULOZENI ROZSAHU POROVNAVANI
FCBP:   DEFW    0               ; ADRESA FCB
        DEFW    0
DSKSFL: DEFB    1               ; DISKSIZE FLAG<0 KDYZ M > 256)
                                ; 0 KDYZ VELIKOST DISKU > 256
                                ; 1 KDYZ VELIKOST DISKU <= 256
DSKFLG: DEFB    0               ; DISK FLAG
UNITSV: DEFB    0               ; ULOZENI # JEDNOTKY
UNITNO: DEFB    0               ; # JEDNOTKY
RC:     DEFB    0               ; CITAC ZAZNAMU
MEX:    DEFB    0               ; ULOZENI MASKOVANEHO CISLA EX
D9:     DEFB    0               ; AKTUALNI CITAC ZAZNAMU
SAV:    DEFB    0               ; PRACOVNI BYTE
BLOCK:  DEFW    0               ; CISLO BLOKU
SECTOR: DEFW    0               ; CISLO SEKTORU
DIROFF: DEFB    0               ; OFFSET VSTUPU ADRESARE
                                ; ( 0,32,64,96 )
DETYNO: DEFW    0               ; AKT. CISLO VSTUPU ADRESARE
DETYSC: DEFW    0               ; AKT. CISLO SEKTORU ADRESARE
        DEFW    0
        DEFB    0
;
$next:                          ;prvni volny byte
        X       EQU     ($NEXT - BDOSB)
        IF      X GT 0E00H
        .PRINTX 'BD0S JE DELSI NEZ 0E00H !'
        ENDIF
        IF1
        .PRINTX 'konec prvniho pruchodu'
        ENDIF
.DEPHASE
;
        END

ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM BDOS



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz