ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace
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 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace