Ú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


8 bity / PLAN-80A

Výpis programu OVLADACI PROGRAM MODEMU MAGNETOFONU V.3.X


Obsah:




TITLE   'OVLADACI PROGRAM MODEMU MAGNETOFONU V.3.X'




















;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;X                                                          X
;X                                                          X
;X            PLAN-80A      V.3.X     27.09.88              X
;X                                                          X
;X     OVLADACI PROGRAM MODEMU KAZETOVEHO MAGNETOFONU       X
;X                                                          X
;X                                                          X
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


























;################################################################
;
;       POZOR:  U MODEMU MAGNETOPASKOVE MAGNETICKE JEDNOTKY
;               BYLO POZADANO O OCHRANU AUTORSKYM ASVEDCENIM.
;                               PV-7752-85
;               TENTO PROGRAM JE FUNKCNI SOUCASTI MODEMU.
;               JE ZAKAZANO KOPIRONAT NEBO POZIVAT TOHOTO
;               PROGRAMU NEBO JEHO CASTI BEZ SOUHLASU MAJITELE
;               PATENTU:        LAMORATORNI PRISTROJE
;                               NA OKRAJI 335
;               (C) 1985        PRAHA - PETRINY
;
;################################################################
;
;       PREDPOKLADA SE ZAKLADNI RYCHLOST 2400 BD, PRO KTEROU JSOU
;       VYTVARENY MEZERY (0.8S A 0.01S). PRI NIZSICH RYCHLOSTECH
;       BUDOU MEZERY PRISLUSNE DELSI.
;
;       KODOVANI NUL A JEDNICEK JE NASLEDUJICI:
;
;       0 ... F = 1600 HZ ... T = 62.5 US
;       1 ... F = 3200 HZ ... T = 31.25 US
;
;       DOVOLENE KOLISANI FREKVENCE ... +/- 10 %
;
;
;       KODEM JE OVLADAN POMOCI OBVODU STIKU mhb 8255 NASLEDOVNE:
;
;       PORT PC : VYSTUPNI
;
;       PC0  ... VYSTUPNI DATA
;       PC1  ... ZABLOKOVANI DEMODULATORU NA HODNOTU 0
;       PC2  ... ZABLOKOVANI DEMODULATORU NA HODNOTU 1
;       PC3  ... OVLADANI MOTORKU (LED MOTOREK)
;       PC4  ... ZABLOKOVANI MODULATORU (UZEMNENI VYSTUPU)
;       PC5  ... LED CTENI
;       PC6  ... LED CHYBA
;       PC7  ... LED ZAPIS
;
;       PORT PA: VSTUPNI
;
;       PA0  ... VSTUPNI DATA
;       PA1  ... SYNCHRONIZACE ZAPISU
;       PA2  ... NEPOUZITO
;       PA3  ... NEPOUZITO
;       PA4  ... NEPOUZITO
;       PA5  ... NEPOUZITO
;       PA6  ... NEPOUZITO
;       PA7  ... SYNCHRONIZACE CTENI
;
;       PORT PB: VSTUPNI (NENI POUZIT)
;
;
;       PRO ROZBEH MOTORKU SE VYCLENUJE DOBA WAITTR MS. PO KTEROU
;       JE MODEM ZABLOKOVANY.
;
;       DOPORUCUJE SE POUZIT PASKY TYPU:
;       - ORWO K-60 CHROMDIOXID
;       - AUDIOSTAR HS_I60
;
;       CINOST PRIKAZU A POPIS MODEMU VIZ:
;       "UZIVATELSKY A SERVISNI MANUAL"
;
;################################################################
;
;       OBLAST DEFINIC:
;
TAPREC  EQU     0F000H
;
COLDST  EQU     0F800H
CI      EQU     0F803H
RI      EQU     0F806H
CO      EQU     0F809H
PO      EQU     0F80CH
LO      EQU     0F80FH
CSTS    EQU     0F812H
IOCHK   EQU     0F815H
IOSET   EQU     0F818H
MEMCK   EQU     0F81BH
IODEF   EQU     0F81EH
INTER   EQU     0F821H
CRLF    EQU     0F824H
EXPR    EQU     0F827H
ERROR   EQU     0F82AH
ASHEX   EQU     0F82DH
DADR    EQU     0F830H
DBYTE   EQU     0F833H
HILO    EQU     0F836H
NEXT    EQU     0F839H
SPACE   EQU     0F83CH
CINCR   EQU     0F83FH
IMTXT   EQU     0F842H
ADRKUR  EQU     0F845H
HXASC   EQU     0F848H
TIMER   EQU     0F84BH
GETADR  EQU     0F84EH
STJMB   EQU     0F851H
ECHO    EQU     0F854H
BACST   EQU     0F857H
;
;       DEFINICE ODSTUPU SKRYTYCH PROMENNYCH DO DISRAM
;
UREND   EQU     31H
LINECO  EQU     35H
NAME1   EQU     130H
NAME2   EQU     170H
PNADR   EQU     1B0H
PNPOI   EQU     1B2H
RDADR   EQU     1B3H
RDPOI   EQU     1B5H
PBLKC   EQU     1B6H
PFILC   EQU     1B7H
RBLKC   EQU     1B8H
RFILC   EQU     1B9H
PNSTS   EQU     1BAH
RDSTS   EQU     1BBH
TMPAR   EQU     1F0H
;
;       DEFINICE I/O PORTU
;
ADRCIN  EQU     04H     ; DATOVY PORT CI
ADRDCT  EQU     00H     ; STAVOVY PORT CI
RDYCIN  EQU     08H     ; MASKA STAVOVEHO BITU KLAVESNICE (RDY=0)
ADRPA   EQU     08H     ; ADRESA PORTU PA OBVODU 8255
ADRPB   EQU     09H     ; ADRESA PORTU PB OBVODU 8255
ADRPC   EQU     0AH     ; ADRESA PORTU PC OBVODU 8255
ADRCT   EQU     0BH     ; ADRESA RIDICIHO PORTU OBVODU 8255
CTRLWD  EQU     92H     ; RIDICI SLOVO PA-IN,PB-IN,PC-OUT,M0
PASWD   EQU     10H     ; MASIVACNI SLOVO INTERFACE
PC0RES  EQU     00H     ; NOLOVANI PC0
PC0SET  EQU     01H     ; NASTAVENI PC0
PC1RES  EQU     02H     ; NOLOVANI PC1
PC1SET  EQU     03H     ; NASTAVENI PC1
PC3RES  EQU     06H     ; NOLOVANI PC3
PC3SET  EQU     07H     ; NASTAVENI PC3
PC4RES  EQU     08H     ; NOLOVANI PC4
PC4SET  EQU     09H     ; NASTAVENI PC4
PC5RES  EQU     0AH     ; NOLOVANI PC5
PC5SET  EQU     0BH     ; NASTAVENI PC5
PC6RES  EQU     0CH     ; NOLOVANI PC6
PC6SET  EQU     0DH     ; NASTAVENI PC6
PC7RES  EQU     0EH     ; NOLOVANI PC7
PC7SET  EQU     0FH     ; NASTAVENI PC7
GAPBIT  EQU     320     ; POCET JEDNICKOVICH BITU PRO 100 MS
G1LEN   EQU     2880    ; POCET JEDNICKOVICH BITU PRO 900 MS
G2LEN   EQU     160     ; POCET JEDNICKOVICH BITU PRO 50 MS
G3LEN   EQU     32000   ; POCET JEDNICKOVICH BITU PRO 10 MS
WAITTR  EQU     100     ; POCET MS CEKANI NA ROZBEHNUTI MOTORKU
;
;       DEFINICE KONSTANT
;
SPC     EQU     20H
ETX     EQU     0A0H
EOT     EQU     03H
CR      EQU     0DH
BS      EQU     08H
LF      EQU     0AH
DEL     EQU     7FH
BELL    EQU     07H
BLANK   EQU     00H
SUBS    EQU     1AH
ESC     EQU     1BH
COMLEN  EQU     239    ; DELKA ZOBRAZOVANE POZNAMKY
NAMLEN  EQU     11     ; DELKA NAZVU
BUFLEN  EQU     255    ; DELKA BUFFERU
;
;
;
;################################################################
;
;
;       C H Y B O V N I K
;       =================
;
;       PRI VYSKYTU KRITICKE CHYBY SE PRERUSI VESKERA PRACE, ZASTAVI
;       SE MAGNETOFON, PASIVUJI SE STATUSY A NULUJI CITACE. DALE SE
;       SKOCI DO OBSTUHY PRERUSENI TAK, ABI V PC BYLA ADRESA CHYBY,
;       KTERA NASTALA.
;
EER1    EQU     ERR1    ; CHYBA HANDLERU PO
EER2    EQU     ERR2    ; POSLEDNE ZAPSANY SOUBOR NEBIL UZAVREN
EER3    EQU     ERR3    ; CHYBA V OBSAHU PAMETI PRI READ
EER4    EQU     ERR4    ; CHYBA V KONTROLNIM SOUCTU PRI READ
EER5    EQU     ERR5    ; CHYBA V KONTROLNIM SOUCTU PRI READ
EER6    EQU     ERR6    ; CHYBA HANDLERU RI
EER7    EQU     ERR7    ; MENE NEZ 1 KBYTE UZIV. PAMETI
EER8    EQU     ERR8    ; CTENI NEBINARNIHO SOUBORU PRIKAZEM QUAFF
EER9    EQU     ERR9    ; CHYBI LEVA ADR. ZAVORKA PRI CTENI BIN. SOUB.
EER10   EQU     ERR10   ; CHYBI PRAVA ADR. ZAVORKA PRI CTENI BIN. SOUB.
EER11   EQU     ERR11   ; CHYBA V KONTR. SOUCTU ADR. CASTI BIN. SOUB.
EER12   EQU     ERR12   ; CHYBA V KONTR. SOUCTU DAT. CASTI BIN. SOUB.
EER13   EQU     ERR13   ; CHYBI UKONCOVACI ZNAK SUBS = 1AH U BIN. SOUB.
EER14   EQU     ERR14   ; UZAVIRANI NEOTEVRENEHO SOUBORU
EER15   EQU     ERR15   ; CHYBI KONCOVY PARAMBLE PRI RDBUF
EER16   EQU     ERR16   ; CHYBA V KONTROLNIM SOUCTU PRI RDBUF
EER17   EQU     ERR17   ; POSLEDNE ZAPSANY SOUBOR NEBYL UZAVREN
EER18   EQU     ERR18   ; POSLEDNE CTENY SOUBOR NEBYL UZAVREN
EER19   EQU     ERR19   ; CHYBA V SOUSLEDNOSTI BLOKU
EER20   EQU     ERR20   ; CHYBA V SOUSLEDNOSTI SOUBORU
EER21   EQU     ERR21   ; PRERUSENI FUNKCE KLAVESOU 'ESC'
EER22   EQU     ERR22   ; CHYBA HANDLERU PO
;
;
;
;################################################################
;
;       OBLAST SPOJOVACICH ADRES
;       ************************
;
;
        .PHASE  TAPREC
;
        DB      055H    ; PRIZNAKOVY KOD MAGNETOFONU
;
        JMP     JOIN    ; INICIACE A PRIRAZENI ADRES
        JMP     JOIN0   ; PASIVACE STATUSU A PRIRAZENI ADRES
        JMP     QUAFF   ; CTENI BINARNIHO SOUBORU Z KAZETY
        JMP     PUT     ; ULOZENI BINARNIHO SOUBORU NA KAZETU
        JMP     APEND   ; ULOZENI BIN. SOUBORU BEZPROSTREDNE
        JMP     LOAD    ; ZAPNUTI MOTORKU
        JMP     DIR     ; DIRECTORY PASKY
        JMP     UNNAM   ; POJMENOVANI NOVE PASKY
        JMP     KI      ; VSTUP BYTU Z KAZETY
        JMP     KO      ; VYSTUP BYTU NA KAZETU
        JMP     WRITE   ; ZAPIS HEX. SOUBORU
        JMP     READ    ; CTENI HEX. SOUBORU
        JMP     EOF     ; UZAVRENI HEX. SOUBORU
        JMP     CLOSE   ; UZAVRENI SOUBORU
;
;
;
;################################################################
;
;       OBLAST PRIKAZU
;       **************
;
;
;       W R I T E
;       =========
;
;       PRIKAZ PRO VYDEROVANI PRES ZARIZENI PO OBLASTI PAMETI O
;       ZADAVYCH ADRESACH ZACATKU A KONCE V HEXADECIMALNI FORME
;       PODLE NORMY INTEL. ZAPIS JE TVOREN BLOKY PRO DATA, Z NICHZ
;       PRVNI AZ PREDPOSLEDNI OBSAHUJE 16 BYTU, POSLEDNI MUZE
;       OBSAHOVAT MENE, PODLE VELIKOSTI OBLASTI PAMETI. NA KONCI
;       JE UZAVIRACI BLOK OBSAHUJICI STARTOVACI ADRESU. FORMAT
;       BLOKU MA TVAR:
;
;       CR,LF,':',N,A,T,D,D,D,...,D,C
;
;       KDE:    CR      JE ZNAK 'CR' = 0DH
;               LF      JE ZNAK 'LF' = 0AH
;               ':'     JE ZNAK ':' = 3AH
;               N       JE POCET BYTU DAT, NULOVY INDIKUJE UZAVIRACI BLOK
;               A       JE ADRESA UMISTENI PRVEHO BYTU DAT
;               T       JE TYP BLOKU, 0...DATOVY, 1...UZAVIRACI (TEZ 0)
;               D       JSOU JEDNOTLIVE BYTY DAT HEXADECIMALNE, NAPRED
;                       HORNI A PAK DOLNI NIBBLE
;               C       JE KONTROLNI SOUCET Z HODNOT N,A,T,D. SOUCET
;                       VSECH HODNOT N,A,T,D,C MA DAT NULU!
;
;       POSLEDNI, UZAVIRACI BLOK MA TVAR:
;
;       CR,LF,':',00,A,T,C
;
;       KDE:    A       JE STARTOVACI ADRESA
;               T       JE TYP BLOKU (1)
;               C       JE KONTROLNI SOUCET (DVOJKOVY DOPLNEK)
;
;
WRITE:  CALL    GETPST  ; V <HL> ADRESA STATUSU ZAPISU
        ORA     A       ; JE PASIVNI ?
        CNZ     BREA1   ; NE CHYBA
ERR2:   MVI     M,0     ; PASIVACE STATUSU ZAPISU
        CALL    EXPR    ; VSTUP DVOU ADRES
        POP     D       ; KONCOVA ADRESA
        POP     H       ; POCATECNI ADRESA
WRIT1:  MOV     A,L
        ADI     10H
        MOV     C,A
        MOV     A,H
        ACI     0
        MOV     B,A     ; V <BC> JE <HL> + 16
        MOV     A,E
        SUB     C
        MOV     C,A
        MOV     A,D
        SBB     B       ; ROZDIL OD KONCOVE ADRESY
        JC      WRIT2   ; ZBIVA VICE NEZ 16 BYTU ?
        MVI     A,10H   ; ANO
        JMP     WRIT3   ; DALSI BLOK
WRIT2:  MOV     A,C     ; NE
        ADI     11H     ; OBNOVENI POCTU V <A>
WRIT3:  ORA     A       ; KONEC ?
        RZ              ; ANO --> MONITOR
        PUSH    D
        MOV     E,A     ; POCET BYTU
        XRA     A       ; PARAMETR
        MOV     B,A     ; TYP 0
        CALL    PBEG    ; UVODNI BLOK
WRIT4:  MOV     A,M     ; CTI ZNAK
        INX     H       ; CITAC
        CALL    PBYTE   ; VYSLI ZNAK
        DCR     E       ; VSECHNY ZNAKY BLOKU ?
        JNZ     WRIT4
        XRA     A
        SUB     D       ; DVOJKOVY DOPLNEK KONTR. SOUCTU
        CALL    PBYTE   ; VYSLI KONTROLNI SOUCET
        POP     D       ; OBNOVENI KONCOVE ADRESY
        JMP     WRIT1   ;DALSI BLOK
;
PBEG:   MOV     D,A
        MVI     C,CR
        CALL    POC     ; DERUJ CR
        MVI     C,LF
        CALL    POC     ; DRERUJ LF
        MVI     C,':'
        CALL    POC     ; DERUJ DVOJTECKU
        MOV     A,E
        CALL    PBYTE   ; DERUJ POCET BYTU BLOKU
        MOV     A,H
        CALL    PBYTE   ; DERUJ HORNI BYTE ADRESY
        MOV     A,L
        CALL    PBYTE   ; DERUJ DOLNI BYTE ADRESY
        MOV     A,B
PBYTE:  PUSH    PSW
        RRC
        RRC
        RRC
        RRC
        ANI     0FH
        CALL    HXASC
        CALL    POC     ; DERUJ HORNI NIBBLE HEX.
        POP     PSW
        PUSH    PSW
        ANI     0FH
        CALL    HXASC
        CALL    POC     ; DERUJ DOLNI NIBBLE HEX.
        POP     PSW
        ADD     D
        MOV     D,A     ; KONTROLNI SOUCET
        RET
;
POC:    CALL    PO      ; VYSTUP NA DEROVAC
        CC      BREA1   ; NASTALA CHYBA ?
ERR1:   RET
;
;
;
;       READ
;       ====
;
;       PRIKAZ READ PROVADI CTENI SOUBORU V INTEL HEX FORME PRES
;       PODPROGRAM RI.
;
READ:   CALL    GETRST  ; V <HL> ADRESA STATUSU CTENI
        MVI     M,0     ; PASIVACE STATUSU CTENI
        DCR     C
        CALL    EXPR    ; VSTUP OFFSETU
READ1:  POP     H       ; DO <HL>
        PUSH    H
READ2:  CALL    RIC
        CPI     CR      ; JDE O 'CR' ?
        JNZ     READ2   ; NE - CTI ZNOVU
        CALL    RIC
        CPI     LF      ; JDE O 'LF' ?
        JNZ     READ2   ; NE - CTI ZNOVU
        CALL    RIC
        SBI     ':'     ; JDE O DVOJTECKU ?
        JNZ     READ2   ; NE CTI ZNOVU
        MOV     D,A     ; VYNULOVANI KONTR. SOUCTU V <D>
        CALL    READ5   ; VSTUP DELKY BLOKU
        JZ      READ3   ; KONEC PRI NULOVE DELCE
        MOV     E,A     ; CITAC BYTU DAT
        CALL    READ5   ; VYSSI BYTE ADRESY
        MOV     B,A
        CALL    READ5   ; NIZSI BYTE ADRESY
        MOV     C,A
        DAD     B       ; SKOTUCNA ADRESA ( S OFFSETEM ) V <HL>
        CALL    READ5   ; PRIZNAK (IMP. 0)
READ4:  CALL    READ5   ; VLASTNI KOD SOUBORU
        MOV     M,A     ; ULOZENI DO PAMETI
        CMP     M       ; KONTROLA OBSAHU
        CNZ     BREA1   ; CHYBA V OBSAHU PAMETI ?
ERR3:   INX     H       ; INKREMENTACE ADRESY PAMETI
        DCR     E       ; DEKREMENTACE CITACE BYTU
        JNZ     READ4   ; VSECHNY BYTY BLOKU PRECTENY ?
        CALL    READ5   ; CTENI KONR. SOUCTU
        CNZ     BREA1   ; CHYBA V KONTR. SOUCTU ?
ERR4:   JMP     READ1
READ3:  PUSH    H       ; OFFSET
        CALL    READ5   ; VYSSI BYTE STARTOVACI ADRESY
        MOV     H,A
        CALL    READ5   ; NIZSI BYTE STARTOVACI ADRESY
        MOV     L,A
        CALL    READ5   ; PRIZNAK
        CALL    READ5   ; KONTROLNI SOUCET
        CNZ     BREA1   ; CHYBA V KONTROLNIM SOUCTU ?
ERR5:   POP     D       ; OFFSET
        MOV     A,D
        ORA     E
        POP     D       ; OPRAVA UKAZETELE ZASOBNIKU
        RNZ             ; NENULOVY OFFSET -> MONITOR
        MOV     A,H
        ORA     L
        PUSH    PSW
        PUSH    H
        CALL    JOIN0   ; PASIVACE PRIZNAKU
        POP     H
        POP     PSW
        RZ              ; NULOVA STARTOVACI ADRESA -> MONITOR
        PCHL            ; SKOK DO PROGRAMU
;
READ5:  PUSH    B
        CALL    RIC
        CALL    ASHEX   ; VYSSI NIBBLE
        RLC
        RLC
        RLC
        RLC
        MOV     C,A
        CALL    RIC     ; NIZSI NIBBLE
        CALL    ASHEX
        ORA     C
        MOV     C,A
        ADD     D       ; KONTROLNI SOUCET
        MOV     D,A
        MOV     A,C     ; PRECTENY BYTE V <A>
        POP     B
        RET
;
RIC:    CALL    RI      ; CTI BYTE ZE SNIMACE
        CC      BREA1   ; CHYBA NEBO PORUCHA ?
ERR6:   ANI     7FH
        RET
;
;
;       E O F
;       =====
;
;       PRIKAZ EOF PROVEDE ZAKONCENI PRAVE VYSLANEHO SOUBORU
;       PRIKAZEM W.
;
EOF:    DCR     C
        CALL    EXPR    ; STARTONACI ADRESA
        POP     H
        MVI     B,1     ; TYP 1
        XRA     A
        MOV     E,A     ; NULOVY POCET BYTU
        CALL    PBEG    ; PRIZNAK
        XRA     A
        SUB     D       ; DVOJKOVY DOPLNEK KONTR. SOUCTU
        CALL    PBYTE
        CALL    GETPST  ; OBSAH STATUSU ZAPISU DO <A>
        ORA     A
        JNZ     CLOSE   ; POKUD BYL AKTIVOVAN ZAPIS - UZAVRI BLOK
        RET
;
;
;
;       J O I N
;       =======
;
;       PRIKAZ PRO ZAKLADNI INICIALIZACI PROGRAMONEHO VYBAVENI
;       MAGNETOFONU. VYSILA RIDICI SLOVO DO OBVODU 8255. NASTAVUJE
;       POCATECNI HODNOTU PORTU PC. NASTAVI ADRESU BUFFERU DEROVACE
;       PNADR, ADRESU BUFFERU SNIMACE RDADR, OBSAH UKAZATELE BUFFERU
;       DERONACE PNPOI A OBSAH UKAZATELE BUFFERU SNIMACE RDPOI. BUFFER
;       DEREVACE UMISTI DO 256 BUNEK POD ZASOBNIK, BUFFER SNIMACE
;       UMISTI POD BUFFER DEROVACE TEZ DO 256 BUNEK. UPRAVI OBSAH
;       BUNKY PRO KONEC UZIVATELSKE PAMETI UREND NA [UREND] - 512.
;       PRITOM KONTROLUJE, ZDA JE PRITOMNEHO NEJMENE 1 KILO UZIVATELSKE
;       PAMETI RAM (BEZ NEJ NELZE MAGNETOFON PROVOZOVAT). DALE NASTAVI
;       CITAC BLOKU DEROVACE PBLKC, CITAC SOUBORU DEROVAVACE PFILC, CITAC
;       BLOKU SNIMACE PRLKC A CITAC SOUBORU SNIMACE RFILC NA NULU.
;       NAVIC PASIVUJE BUNKY STATUSU CTENI RDSTS I ZAPISU PNSTS, KTERE
;       MAJI NULOVY PASIVNI OBSAH, NENULOVY (0FFH) AKTIVNI OBSAH.
;       NAKONEC SE PROVEDE PRIRAZENI SPOJOVACICH ADRES PO NA KO A
;       PI NA KI (VYSTUP A VSTUP JEDNOHO BYTU Z/NA KAZETU) A CELKOVA
;       PASIVACE A INICIACE MODEMU.
;
;       POSKOZENE REGISTRY: A,F,B,C,D,E,H,L
;
JOIN:   CALL    IMTXT
        DB      ' TPR V3','X' OR 80H ; OHLASENI
        MVI     A,CTRLWD ; RIDICI SLOVO PRO '55
        OUT     ADRCT   ; PA-IN,PB-IN,PC-OUT,M0
        CALL    MEMCK   ; ZJISTENI KONCE USRAM
        MOV     H,B
        MOV     L,A     ; KONEC UZIVATELSKE PAMETI V <HL>
        MOV     A,H
        XCHG
        CPI     3       ; MENE NEZ 1 KBYTE USRAM ?
        CC      BREA1   ; OHLASENI CHYBY
ERR7:   CALL    INI2    ; <DE>-255 -> <DE>
        LXI     H,PNADR
        CALL    INI0    ; <DE> -> PNADR
        MVI     M,0     ; 0 -> PNPOI
        INX     H
        CALL    INI2    ; <DE>-255 -> <DE>
        DCX     D       ; ZVYSENI DELKY BUFFERU NA 256
        CALL    INI1    ; <DE> -> RDADR
        MVI     M,0     ; 0 -> RDPOI
        LXI     H,UREND
        DCX     D
        CALL    INI0    ; <DE> -> UREND
JOIN0:  LXI     H,PBLKC
        LXI     D,0
        CALL    INI0    ; 0 -> PBLKC, PFILC
        CALL    INI1    ; 0 -> RBLKC, RFILC
        CALL    INI1    ; 0 -> PNSTS, RDSTS
        LXI     D,KI
        MVI     C,2
        CALL    IODEF   ; NASTAVENI SPOJOVACI ADRESY RI NA KI
        LXI     D,KO
        MVI     C,4
        CALL    IODEF   ; NASTAVENI SPOJOVACI ADRESY PO NA KO
        MVI     A,PASWD
        OUT     ADRPC   ; PASIVACE INTERFACE MAGNETOFONU
        RET
;
INI0:   CALL    GETADR  ; VYPOCETI ADRESU SKRYTE PROMENNE
INI1:   JMP     STJMB   ; <E> -> [<HL>]; <D> -> [<HL>+1]; <HL>+2 -> <HL>
;
INI2:   PUSH    H
        LXI     H,-255
        DAD     D
        XCHG            ; <DE> - 255 -> <DE>
        POP     H
        RET
;
;
;
;       Q U A F F
;       =========
;
;       PRIKAZ QUAFF SPOUZI KE CTENI BINARNIHO SOUBORU A JEHO ULOZENI
;       DO PAMETI SE ZADANYM OFFSETEM.
;
QUAFF:  DCR     C
        CALL    EXPR    ; VSTUP OFFSETU
        CALL    FIND    ; OTEVRENI SOUBORU PRO CTENI
        MVI     B,0     ; NULOVANI BUNKY KONTROLNIHO SOUCTU
        CALL    RINCH   ; NACTI PRVNI DATOVY BLOK
        PUSH    PSW
        CALL    GETRDB  ; V <HL> ADRESA BUFFERU
        MOV     A,M     ; PRIZNAK BLOKU V <A>
        CPI     'B'     ; BINARNI SOUBOR ?
        JZ      QUA1    ; ANO - POKRACUJ VE CTENI
        CPI     04H     ; POSLEDNI BLOK ?
        CNZ     BREA1   ; NE - CHYBA
ERR8:
QUA1:   POP     PSW
        CPI     '<'     ; LEVA ADRESOVA ZAVORKA ?
        CNZ     BREA1   ; NE - CHYBA
ERR9:   CALL    DRINCH  ; KONCOVA ADRESA
        XCHG
        CALL    DRINCH  ; POCATECNI ADRESA
        CALL    RINCH
        CPI     '>'     ; PRAVA ADRESOVA ZAVORKA ?
        CNZ     BREA1   ; NE - CHYBA
ERR10:  PUSH    B
        CALL    RINCH   ; KONTROLNI SOUCET ADRESOVE CASTI
        POP     B
        CMP     B       ; KONTROLNI SOUCET SOUHLASI ?
        JNZ     BREA1   ; NE - CHYBA
ERR11:  MVI     B,0     ; NULOVANI BUNKY KONTROLNIHO SOUCTU
        XTHL            ; OFFSET V <HL>
        PUSH    H
        DAD     D       ; KONCOVA ADRESA + OFFSET V <HL>
        POP     D       ; OFFSET V <DE>
        XTHL            ; POCATECNI ADRESA V <HL>
        DAD     D       ; POCATECNI ADRESA + OFFSET V <HL>
        POP     D       ; KONCOVA ADRESA + OFFSET V <DE>
QUA0:   CALL    RINCH
        MOV     M,A     ; ULOZENI BYTU DAT DO PAMETI
        CALL    HILO    ; <HL>+1 -> <HL>; <HL>=<DE> ?
        JNC     QUA0    ; VSECHNY BYTY PRECTENY ?
        PUSH    B
        CALL    RINCH   ; KONTROLNI SOUCET DATOVE CASTI
        POP     B
        CMP     B       ; KONTROLNI SOUCET SOUHLASI ?
        CNZ     BREA1   ; NE - CHYBA
ERR12:  CALL    RINCH
        CPI     SUBS    ; UKONCOVACI ZNAK ?
        CNZ     BREA1   ; NE - CHYBA
ERR13:  CALL    GETRST  ; V <HL> ADRESA STATUSU CTENI
        MVI     M,0     ; PASINACE STATUSU CTENI
        RET
;
;
;
;       P U T
;       =====
;
;       PRIKAZ PRO VYPIS OBLASTI PAMETI O ZADANYCH ADRESACH V BINARNI
;       FORME NA KAZETU. SOUBOR NA KAZETE SE ZAPISUJE V BLOCICH. UVODNI
;       BLOK OBSAHUJE JMENO SOUBORU A POZNAMKU. NASLEDUJI DATOVE BLOKY,
;       Z NICHZ PRVNI OBSAHUJE POCATECNI A KONCOVOU ADRESU. BLOKY MAJI
;       KONSTANTNI DELKU A JSOU ODDELENY MAZERAMI DELKY 0.8 S.
;
PUT:    CALL    EXPR    ; VSTUP DVOU ADRES
        CALL    OPEN    ; OTEVRENI SOUBORU PRO ZAPIS
PUT1:   CALL    GETPNB  ; V <HL> ADRESA BUFFERU
        MVI     M,'B'   ; PRIZNAK BINARNIHO SOUBORU
        MVI     B,0     ; NULOVANI KONTROLNIHO SOUCTU
        MVI     C,'<'   ; LEVA ADRESOVA ZAVORKA
        CALL    PUNCH
        POP     H       ; KONCOVA ADRESA V <HL>
        CALL    DPUNCH  ; WYDEROVANI KONCOVE ADRESY
        XTHL            ; POCATECNI ADRESA V <HL>
        CALL    DPUNCH  ; VYDEROVANI POCATECNI ADRESY
        MVI     C,'>'   ; PRAVA ADRESOVA ZAVORKA
        CALL    PUNCH
        MOV     C,B     ; KONTROLNI SOUCET ADRESOVE CASTI
        CALL    PUNCH
        MVI     B,0     ; NULOVANI BUNKY KONTROLNIHO SOUCTU
        POP     D       ; KONCOVA ADRESA V <DE>
PUT0:   MOV     C,M     ; DATA Z PAMETI
        CALL    PUNCH
        CALL    HILO    ; <HL>+1 -> <HL>; <HL>=<DE> ?
        JNC     PUT0    ; VSECHNY BYTY ?
        MOV     C,B     ; KONTROLNI SOUCET
        CALL    PUNCH
        MVI     C,SUBS  ; KONCOVY ZNAK
        CALL    PUNCH
        JMP     CLOSE   ; AZAVRENI SOUBORU
;
;
;
;       L O A D
;       =======
;
;       PRIKAZ LOAD PROVEDE ZAPNUTI MOTORKU MAGNETOFONU (PO KTREM
;       SE CEKA 0.3 S NA ROZBEHNUTI), VYPSANI 'REWIND DONE ?' NACEZ
;       SE CEKA NA STISKNUTI LIB. KLAVESY. V TETO DOBE LZE PROVADET
;       PREVIJENI A POD. PO STISKNUTI KLASVESY SE MOTOREK OPET ZASTAVI.
;
;       POSKOZENE REGISTRY: A,F,C
;
LOAD:   CALL    SETTR   ; SPOSTENI MOTORKU A CEKANI 0.1 S
        CALL    DONETX  ; ZOBRAZI ' DONE ?' A CEKANI NA KLAVESU
        JMP     RESTR   ; ZASTAVENI MOTORKU
;
;
;
;       D I R E C T O R Y
;       =================
;
;       PRIKAZ PROVEDE VYPIS NAZVU A POZNAMEK VSECH SOUBORU
;       Z KAZETY NA OBRAZOVKU.
;
DIR:    CALL    GETRST  ; V <HL> ADRESA STATUSU CTENI
        DCR     M       ; AKTIVACE PRIZNAKU CTENI
        CALL    PLAYTX  ; VYPIS 'PLAY DONE ?' A CEKANI NA KLAVESU
        CALL    CRLF
DIR0:   LXI     H,RDADR ; V <HL> ODSTUP BUFFERU
        STC             ; PRIZNAK CTENI
        CALL    RDBUF   ; CTI BLOK DO BUFFERU
        CALL    GETRDB  ; V <HL> ADRESA BUFFERU
        MOV     A,M
        CPI     ':'     ; JDE O NAZEV KAZETY ?
        JZ      DIR2    ; ANO - VYPIS
        CPI     01H     ; JDE O NAZEV SOUBORU ?
        JNZ     DIR0    ; NE - CTI DALSI BLOK
DIR2:   PUSH    H
        CALL    MAMTX   ; ZOBRAZ NAZEV
        POP     H
        LXI     D,12    ; VYNECH PRIZNAK A NAZEV BLOKU
        DAD     D
DIR1:   MOV     A,M
        ORA     A
        CZ      CRLF
        JZ      DIR0    ; NENI POZNAMKA - DALSI SOUBOR
        MOV     C,M
        CP      CO      ; ZOBRAZENI POZNAMKY
        INX     H
        JMP     DIR1
;
;
;
;       U N N A M E D
;       =============
;
;       PRIKAZ SLOUZI PRO VYTVORENI UVODNIHO BLOKU NA KAZETE, KTERY
;       OBSAHUJE JEJI JMENO A POZNAMKU. TENTO BLOK JE SPECIFICKY
;       A VYSKYTUJE SE NA KAZETE JEDENKRAT A Z KAZDE STRANY.
;
UNNAM:  CALL    GETPST  ; V <HL> ADRESA STATUSU ZAPISU
        DCR     M       ; AKTIVACE STATUSU ZAPISU
        CALL    IMTXT
        DB      CR,LF,'CASSETTE',0A0H ; TISK TEXTY
        XRA     A       ; NULOVANO FF-C
        CALL    NAMIN   ; VSTUP NAZVU A POZNAMKY
        CALL    RECTX   ; VYPIS 'RECORD DONE ?' A CEKANI NA KLAVESU
        LXI     H,PBLKC
        LXI     D,0
        CALL    INI0    ; NULOVANI CITACE BLOKU A SOUBORU DEROVACE
        CALL    GETPNB  ; V <HL> ADRESA BUFFERU PRO ZAPIS
        MVI     M,':'   ; PRIZNAK NAZVU KAZETY
        CALL    SETTR   ; SPUSTENI MAGNETOFONU
        MVI     A,PC1RES
        OUT     ADRCT   ; ODBLOKOVANI CITACU MODEMU
        LXI     B,G3LEN
        CALL    WRGAP   ; ZAPIS UVODNI MEZERY 10 S
        CALL    WRBUF   ; ZAPIS BUFFERU NA KAZETU
        CALL    GETPST  ; V <HL> ADRESA STATUSU ZAPISU
        MVI     M,0     ; PASIVACE STATUSU ZAPISU
        RET
;
;
;
;       K I
;       ===
;
;       PODPROGRAM UMOZNUJICI CTENI JEDNOHO BUTU Z KAZETY PRES
;       VYROVNAVACI BUFFER. PRECTENY BYTE JE V <A>. PRIZNAK CHYBY
;       FF-C JE NULOVAN, PRI ZNAKU 'SUBS' A PRI ASCII SOUBORU JE
;       NASTAVEN DO JEDNICKY (PRIZNAK VYBEHNUTI PASKY ZE SNIMACE).
;
;       POSKOZENE REGISTRY: A,F
;
KI:     PUSH    B
        PUSH    D
        PUSH    H
        CALL    GETRST  ; V <HL> ADRESA STATUSU CTENI, V <A> JEHO HODNOTA
        ORA     A       ; BYL STATUS CTENI PASIVNI ?
        CZ      FIND    ; ANO - OTEVRI SOUBOR PRO CTENI
        LXI     H,RDPOI
        CALL    GETC0
        PUSH    H       ; ADRESA POINTRU SNIMACE
        CPI     0FFH    ; JE BUFFER PRAZDNY?
        JNZ     KI0     ; NE - ULOZ BYTE
        CALL    GETRDB  ; V <HL> ADRESA BUFFERU SNIMACE
        MOV     A,M
        CPI     04H     ; JDE O PRIZNAK KONCOVEHO BLOKU ?
        JZ      KI2     ; ANO - VYSLI PRIZNAK KONCE SOUBORU
        LXI     H,RDADR ; ADRESA BUFFERU PRO CTENI
        STC             ; PRIZNAK CTENI
        CALL    RDBUF   ; ANO - CTI DALSI BLOK
        STC             ; PRIZNAK CTENI
        CALL    CMPBUF  ; ZOBRAZ NAZEV, KONTROLUJ CISLA BLOKU A SOUBORU
        XRA     A       ; POINTR NA NULU
KI0:    POP     H
        INR     A       ; INKREMENTUJ POINTR (NULTY ZNAK = PRIZNAK)
        MOV     M,A     ; NOVA HODNOTA POINTRU
        MVI     D,0
        MOV     E,A     ; V <DE> POINTR
        CALL    GETRDB  ; V <HL> ADRESA BUFFERU
        DAD     D       ; ADRESA NASLEDUJICIHO ZNAKU V BUFFERU
        MOV     A,M
        ORA     A       ; NULOVANI FF-C
KI1:    POP     H
        POP     D
        POP     B
        RET
KI2:    POP     H
        CALL    GETRST  ; V <HL> ADRESA STATUSU SNIMACE
        MVI     M,0     ; PASINACE STATUSU SNIMACE
        MVI     A,SUBS  ; ZNAK "KONCE PASKY"
        STC
        JMP     KI1
;
;
;
;       K O
;       ===
;
;       PODPROGRAM UMOZNUJICI VYSTUP JEDNOHO BYTU MA KAZETU PRES
;       VYROVNAVACI BUFFER. VYSTUPNI BYT JE V <C>. PRIZNAK CHYBY
;       (FF-C) JE NULOVAN.
;
;       POSKOZENE REGISTRY: FF'S
;
KO:     PUSH    PSW
        PUSH    D
        PUSH    H
        PUSH    B
        CALL    GETPST  ; V <A> STATUS ZAPISU
        ORA     A       ; JE STATUS ZAPISU PASIVNI ? (FF-C = 0)
        CZ      OPEN    ; ANO - OTEVRI SOUBOR PRO ZAPIS
        CZ      NULBUF  ; NULOVANI OBSAHU BUFFERU PRO ZAPIS
        CALL    GETPPO  ; V <HL> ADRESA, V <A> OBSAH UKAZATELE DEROVACE
        PUSH    H
        CPI     0FFH    ; JE BUFFER PLNY ?
        JNZ     KO0     ; NE - ZAPIS BYTE
        CALL    WRBUF   ; ZAPIS BUFFERU
        XRA     A       ; NULOVANI POINTRU
KO0:    POP     H
        INR     A       ; INKREMENTACE POINTRU (NULOVY BYTE - PRIZNAK)
        MOV     M,A     ; NOVA HODNOTA POINTRU
        MVI     D,0
        MOV     E,A     ; V <DE> OBSAH POINTRU
        CALL    GETPNB  ; V <HL> ADRESA BUFFERU
        DAD     D       ; ADRESA DALSIHO VOLNEHO BYTU
        POP     B
        PUSH    B
        MOV     M,C     ; ULOZENI DALSIHO BYTU DO BUFFERU
        POP     B
        POP     H
        POP     D
        POP     PSW
        ORA     A       ; NULOVANI PRIZNAKU CHYBY
        RET
;
;
;
;      C L O S E
;      =========
;
;      PODPROGRAM SLOUZI K UZAVRENI ZAPSANEHO SOUBORU.
;
CLOSE:  PUSH    H
        CALL    GETPST  ; V <A> OBSAH V<HL> ADRESA STATUSU ZAPISU
        ORA     A       ; JE ZAPISOVY STATUS AKTIVNI ?
        CZ      BREA1   ; NENI - CHYBA
ERR14:  MVI     M,0     ; PASIVACE STATUSU ZAPISU
        CALL    IMTXT
        DB      CR,LF,'CLOSE','D' OR 80H ; TISK TEXTU 'CLOSED'
        CALL    GETPNB  ; V <DE> ADRESA BUFFERU
        PUSH    H
        XCHG
        CALL    GETPPO  ; V <A> OBSAH UKAZATELE DEROVACE
        MOV     L,A
        MVI     H,0     ; V <HL> UKAZATEL
        XCHG
        DAD     D       ; V <HL> ADRESA POSLEDNIHO ULOZENEHO BYTU
        INR     E
        JZ      CLOS1   ; SKOK PRI PLNEM BUFFERU
CLOS0:  INX     H
        MVI     M,BLANK ; NULOVANI ZBITKU BUFFERU
        INR     E
        JNZ     CLOS0   ; CELY BUFFER ZAPLNEN ?
CLOS1:  POP     H
        MVI     M,04H   ; PRIZNAK KONCOVEHO BLOKU
        CALL    WRBUF   ; ZAPIS BUFFERU
        POP     H
        RET
;
;
;
;       A P P E N D
;       ===========
;
;       PODPROGRAM PRO ZAPIS BINARNIHO SOUBORU. MA STEJNE CHOVANI JAKO
;       PUT S TIM, ZE ZAPISUJE BEZPROSTREDNE BEZ VYHLEDAVANI.
;
APEND:  CALL    EXPR    ; VSTUP DVOU ADRES
        LXI     H,PUT1
        PUSH    H       ; NAVRATOVA ADRESA SIMULOVANEHO CALL
        PUSH    PSW
        CALL    GETPST  ; V <HL> ADRESA STATUSU ZAPISU
        PUSH    H
        CALL    GETPBC  ; V <HL> ADRESA CITACE SOUBORU DEROVACE
        INR     M       ; INKREMENTACE CITACE SOUBORU
        JMP     OPAPP   ; SKOK DO OPEN ZA VYHLEDAVANI
;
;
;
;################################################################
;
;       OBLAST PODPROGRAMU BLOKOVE UROVNE
;       *********************************
;
;
;
;       W R B U F
;       =========
;
;       PODPROGRAM SLOUZI K ZAPISU OBSAHU BUFFERU PRO ZAPIS PNBUF
;       NA KAZETU.
;
;       POSKOZENE REGISTRY: A,F,B,C,D,E,H,L
;
WRBUF:  LXI     H,PBLKC
        MVI     A,PC7SET
        OUT     ADRCT   ; ZAPNUTI LED ZAPISU
        CALL    GETC0
        INR     M       ; INKREMENTACE CITACE BLOKU
        MOV     E,M     ; CITAC BLOKU V <E>
        INX     H       ; V <HL> ADRESA CITACE SOUBORU
        MOV     D,M     ; CITAC SOUBORU V <D>
        CALL    GETNM2  ; V <HL> ADRESA OBLASTI NAME2
        PUSH    H       ; ADRESA OBLASTI S NAZVEM SOUBORU
        CALL    GETPNB  ; V <HL> JE ADESA BUFFERU
        PUSH    H
        CALL    GETRST  ; V <HL> ADRESA V <A> OBSAH STATUSU CTENI
        ORA     A       ; JE AKTIVOVAN STATUS CTENI ?
        CNZ     RECTX   ; ANO - VYPIS 'RECORD DONE ?' A CEKEJ NA KLAVESU
        POP     H       ; V <HL> ADRESA BUFFERU
        CALL    BREAK   ; PRERUSIT ?
        CALL    SETTR   ; SPUSTENI MOTORKU
        MVI     A,PC1RES
        OUT     ADRCT   ; ODBLOKOVANI CITACU MODEMU
        LXI     B,G1LEN
        CALL    WRGAP   ; ZAPIS MEZERI (G1LEN) BITU '1' [73/65]
        MVI     A,10H   ; PREAMBLE [7]
        CALL    BYTOUT  ; [103/50]
        MVI     A,10H   ; DRUHY PREAMBLE [7]
        CALL    BYTOUT  ; [103/50]
        MVI     A,10H   ; TRETI PREAMBLE [7]
        CALL    BYTOUT  ; [103/50]
        LXI     B, (BUFLEN+1) AND 0FFH ; 0 -> <B>; DELKA -> <C> [10]
        CALL    WRMEM   ; ZAPIS Z PAMETI [125/66]
        POP     H       ; ADRESA NAZVU [10]
        MVI     C,NAMLEN ; DELKA JMENA [7]
        CALL    WRMEM   ; ZAPIS JMENA [125/66]
        MOV     A,E     ; [5]
        CALL    BYTOUT  ; CISLO BLOKU [103/50]
        MOV     A,D     ; [5]
        CALL    BYTOUT  ; CISLO SOUBORU [103/50]
        MOV     A,B     ; [5]
        CALL    BYTOUT  ; KONTROLNI SOUCET [103/50]
        MVI     A,10H   ; [7]
        CALL    BYTOUT  ; PREAMBLE [103/50]
        XRA     A       ; [4]
        CALL    BYTOUT  ; ZAPIS 00H [103/50]
        LXI     B,G2LEN ; [7]
        CALL    WRGAP   ; ZAPIS MEZERY (G2LEN) BITU '1' [73/65]
        JMP     RESTR   ; ZASTAV MAGNETOFON
;
;
;
;       R D B U F
;       =========
;
;       PODPROGRAM PRO CTENI Z PASKY BLOKU A ULOZENI HO DO BUFFERU
;       DANEHO ODSTUPEM V <HL>. FF-C UDAVA, ZDA JDE O CTENI (FF-C = 1)
;       NEBO O ZAPIS (FF-C = 0). BLOK MA PEVNOU STRUKTURU:
;
;       M,P,P,P,X,D,J,B,S,K,P,M,...
;
;       KDE     M       JE MEZERA DELKY 0,8 S
;               P       JE PREAMBLE HODNOTY 10H
;               X       JE PRIZNAK BLOKU S VYZNAMEM:
;                               3AH ... NAZEV KAZETY
;                               41H ... ASCII BLOK
;                               42H ... BINARNI BLOK
;                               01H ... NAZEV SOUBORU A POZNAMKA
;                               04H ... POSLEDNI BLOK SOUBORU
;               D       JE 255 BYTU DAT
;               J       JE NAZEV DELKY (NAMLEN) ZNAKU ASCII
;               B       JE CISLO BLOKU (1-255)
;               S       JE CISLO SOUBORU (1-255)
;               K       JE KONTROLNI SOUCET (OD X PO B)
;
;
;       POSKOZENE REGISTRY: A,F,B,C,H,L
;
RDBUF:  PUSH    D
        PUSH    H
        MVI     A,PC5SET
        OUT     ADRCT
        LXI     H,RBLKC
        JC      RDBU3   ; SKOK PRO CTENI
        LXI     H,PBLKC
RDBU3:  CALL    GETC0
        INR     M       ; INKREMENTACE CITACE BLOKU (PRVNI BLOK ... 1)
        MOV     E,M     ; V <E> CITAC BLOKU
        INX     H       ; V <HL> ADRESA CITACE SOUBORU (PRVNI SOUBOR ... 0)
        MOV     D,M     ; V <D> CITAC SOUBORU
        CALL    GETTMP  ; ADRESA POMOCNE OBLASTI
        XTHL            ; V <HL> ODSTUP ADRESY BLOKU
        CALL    NAMIA   ; V <HL> ADRESA BLOKU
        PUSH    H
        CALL    GETPST  ; V <A> STATUS ZAPISU
        ORA     A       ; JE ZAPISOVY STATUS AKTIVNI ?
        CNZ     PLAYTX  ; ANO - VYPIS 'PLAY DONE ?' A CEKEJ NA KLAVESU
        POP     H       ; V <HL> ADRESA BUFFERU
        CALL    BREAK   ; PRERUSIT ?
        CALL    SETTR   ; SPUSTENI MOTORKU MAGNETOFONU
RDBU0:  CALL    SRGAP   ; NAJDI MEZERU [79/114]
        MVI     C,3     ; POCET PREAMBLU [7]
RDBU1:  CALL    BYTIN   ; CTI BYTE [69/89]
        CPI     10H     ; JDE O PREAMBLE ? [7]
        JNZ     RDBU0   ; NE - HLEDEJ ZNOVU MEZERU [10]
        DCR     C       ; VSECHNY BYTY PREAMBLU ? [5]
        JNZ     RDBU1   ; NE - CTI DALSI BYTE [10]
        LXI     B,(BUFLEN+1) AND 0FFH ; NULUJ <B>, DELKA DO <C> [10]
        CALL    RDMEM   ; CTI DATA DO BUFFERU [86/122]
        POP     H       ; V <HL> ADRESA POMOCNE OBLASTI [10]
        MVI     C,NAMLEN+2 ; DELKA NAZVU + CITACU [7]
        CALL    RDMEM   ; CTI JMENO A CITACE DO POM. OBLASTI [86/122]
        MOV     C,B     ; KONTROLNI SOUCET DO <C> [5]
        CALL    BYTIN   ; [69/89]
        SUB     C       ; KONTROLNI SOUCET SHODY ? [4]
        PUSH    PSW     ; SCHOVEJ PRIZNAK [11]
        CALL    BYTIN   ; [69/89]
        CPI     10H     ; PREAMBLE ?
        CNZ     BREA1   ; NE - CHYBA
ERR15:  POP     PSW     ; KONTROLNI SOUCTY SHODNE ?
        CNZ     BREA1   ; NE - CHYBA
ERR16:  POP     D
        JMP     RESTR   ; ZASTAV MOTOREK MAGNETOFONU
;
;
;
;       O P E N
;       =======
;
;       PODPROGRAM SLOUZI K OTEVIRANI SOUBORU PRO ZAPIS. PRO VYHLE-
;       DAVANI SOUBORU SE POUZIVA BUFFER PRO ZAPIS, TAKZE BUFFER PRO
;       CTENI NENI POSKAZEN. UMOZNUJE TO SIMULTANNI NEZAVISLY ZAPIS
;       PRI JIZ PROBIHAJICIM CTENI.
;
;       POSKOZENE REGISTRY: H,L
;
OPEN:   PUSH    PSW
        CALL    GETPST  ; V <HL> ADRESA, V <A> OBSAH STATUSU ZAPISU
        ORA     A       ; JE STATUS ZAPISU PASIVNI ?
        CNZ     BREA1   ; NE - CHYBA
ERR17:  PUSH    H
        CALL    IMTXT
        DB      CR,LF,'LAST',0A0H
        XRA     A
        CALL    NAMIN   ; VSTUP JMENA POSLEDNIHO SOUBORU
        CALL    PLAYTX  ; ZOBRAZ 'PLAY DONE ?' A CEKEJ NA KLAVESU
        LXI     H,PNADR
        XRA     A       ; NULOVANI FF-C (ZAPIS)
        CALL    SEARCH  ; VYHLEDEJ KONEC POSL. SOUBORU
        CALL    GETPBC  ; NULOVANI CITACE BLOKU, V <HL> ADR. CIT. SOUB.
        CALL    GETCTN  ; OBSAH CITACE SOUBORU DO <A>
        MOV     M,A
        INR     M       ; INKREMENTACE CITACE SOUBORU
OPAPP:  CALL    IMTXT
        DB      CR,LF,'NEW',0A0H
        XRA     A
        CALL    NAMIN   ; VSTUP JMENA NOVEHO SOUBORU
        POP     H
        DCR     M       ; AKTIVACE PRIZNAKU ZAPISU
        CALL    GETPNB  ; V <HL> ADRESA BUFFERU
        PUSH    H
        MVI     M,01H   ; PRIZNAK NAZNU SOUBORU
        CALL    GETRST
        ORA     A       ; JE STATUS ZAPISU PASIVNI ?
        CZ      RECTX   ; ANO - VYPIS 'RECORD DONE ?' A CEKEJ NA KLAVESU
        CALL    WRBUF   ; ZAPIS BLOKU SE JMENEM SOUBORU
        XRA     A       ; NULOVANI FF-C
        CALL    NULBUF  ; VYNULUJ ZAPISOVY BUFFER
        POP     H
        MVI     M,'A'   ; PRIZNAK ASCII BLOKU
        CALL    GETPPO  ; V <HL> ADRESA UKAZATELE
        MVI     M,0     ; VYNULOVANI UKAZATELE DEROVACE
        POP     PSW
        RET
;
;
;
;       F I N D
;       =======
;
;       PODPROGRAM SLOZI PRI VYHLADANI SOUBORU PRI CTENI.
;
;       POSKOZENE REGISTRY: A,F,B,C,D,E,H,L,SP
;
FIND:   CALL    GETRST  ; V <HL> ADRESA, V <A> OBSAH STATUSU CTENI
        ORA     A       ; JE PRIZNAK CTENI PASIVNI ?
        CNZ     BREA1   ; NE - CHYBA
ERR18:  DCR     M       ; AKTIVACE PRIZNAKU CTENI
        CALL    CRLF
        STC
        CALL    NAMIN   ; VSTUP JMENA SOUBORU
        CALL    GETPST
        ORA     A       ; JE AKTIVNI PRIZNAK ZAPISU ?
        CZ      PLAYTX  ; NE - VYPIS 'PLAY DONE ?' A CEKEJ NA KLAVESU
        LXI     H,RDPOI
        CALL    GETADR
        MVI     M,0FFH  ; POC. HODNOTA UKAZATELE BUFFERU SNIMACE
        LXI     H,RDADR
        STC             ; NASTAVENI FF-C (CTENI)
        CALL    SEARCH  ; HLEDEJ SOUBOR
        LXI     H,RBLKC
        CALL    GETADR  ; V <HL> ADRESA CITACE BLOKU
        MVI     M,1     ; ULOZENI POC. HODNOTY
        INX     H       ; V <HL> ADRESA CITACE SOUBORU
        CALL    GETCTN  ; V <A> CISLO NALEZENEHO SOUBORU
        MOV     M,A     ; NASTAVENI CITACE SOUBORU
        RET
;
;
;
;       N A M I N
;       =========
;
;       PODPROGRAM PRO VSTUP NAZVU SOUBORU A POZNAMKY. VSTUPNIM
;       PARAMETREM JE FF-C. POKUT JE NULOVY, JEDNA SE O ZAPIS
;       A DO ZAPISOVEHO BUFFERU SE UKLADA JMENO A POZNAMKA V
;       CELKOVE DELCE (COMLEN). SOUCASNE PVNICH (NAMLEN) ZNAKU SE
;       POVAZUJE ZA JMENO A UKLADA SE DO OBLASTI NAME2. JE-LI
;       FF-C JEDNICKOVY, JEDNA SE O CTENI A UKLADA SE POUZE
;       (NAMLEN) ZNAKU DO OBLASTI NAME1.
;
;       POSKOZENE REGISTRY: - - -
;
NAMIN:  PUSH    B
        PUSH    D
        PUSH    H
        PUSH    PSW
        CALL    NULNAM  ; VYNULUJ OBLAST NAME1/NAME2
        CALL    IMTXT
        DB      'NAME',CR,LF,':' OR 80H
        MVI     B,NAMLEN ; PAAMETRY PRO CTENI
        CALL    GETNM1  ; V <HL> ADRESA OBLASTI NAME1
        POP     PSW
        PUSH    PSW
        JC      NAMI3   ; POKUT CTENI - SKOC
        CALL    NULBUF  ; VYNULOVANI BUFFERU PRO ZAPIS
        MVI     B,COMLEN ; PARAMETRY PRO ZAPIS
        CALL    GETPNB  ; V <HL> ADRESA ZAPIS. BUFFERU
        INX     H       ; PRI ZAPISE VYNECH MISTO NA PRIZNAK
NAMI3:  CALL    ASCIN   ; NACTI NAZEV/POZNAMKU
        POP     PSW
        PUSH    PSW
        JC      NAMI1   ; PRI CTENI - NAVRAT
        XCHG            ; V <DE> ADRESA ULOZENI NAZVU
        CALL    GETNM2  ; V <HL> ADRESA OBLASTI NAME2
        MVI     B,NAMLEN ; CITAC ZNAKU
NAMI2:  LDAX    D       ; CTI PISMENO NAZVU
        MOV     M,A     ; ULOZ JE DO OBLASTI NAME2
        INX     D
        INX     H
        DCR     B       ; VSECHNY ZNAKY ULOZENY ?
        JNZ     NAMI2   ; NE - ULOZ DALSI ZNAK
NAMI1:  POP     PSW
        POP     H
        POP     D
        POP     B
        RET
;
NAMIA:  CALL    GETADR
        MOV     A,M     ; [/<HL>/] -> <HL>
        INX     H
        MOV     H,M
        MOV     L,A
        RET
;
;
;
;       C M P N A M
;       ===========
;
;       PODPROGRAM SLOUZI KE SROVNANI DVOU JMEN PRI VYHLEDAVANI.
;       HLAVNIM PRIZNAKEM RIDICIM CINNOST JE FF-C. JE-LI NULOVY,
;       JDE O SROVNANI PRO ZAPIS, JE-LI JEDNICKOVY, JDE O SROVNANI
;       PRO CTENI. PRI SROVNANI PRO ZAPIS SE SROVNAVAJI JMENA
;       UMISTENA V POLI NAME2 (VZOR) A BUFFERU PNADR (OD 2 BYTU).
;       PRI SROVNAVANI PRO CTENI SE SROVNAVAJI JMENA UMISTENA V
;       POLI NAME1 (VZOR) A V BUFFERU RDADR (OD 2 BYTU). CELKEM
;       SE SROVNAVA MAX. NAMLEN PISMEN. POKUT SE VE VZORU VYSKYTNE
;       HVEZDICKA (*), PAK JSOU ZBIVAJICI PISMENA VE JMENECH PROGRAMU
;       NEVYZNAMNA A STACI POUZE SCHODA PRDCHAZEJICICH. HVEZDICKA
;       MUZE BYT I NA PRVEM MISTE. PRI JEJIM VYSKYTU A SPLNENI
;       CASTECNE SHODY SE VYPISE NALEZENE JMENO A DOTAZ (?), VYZA-
;       DUJICI POTVRZENI PISMENEM 'Y' NEBO ZAMITNUTI LIBOVOLNOU
;       JINOU KLAVESOU. VYSLEDEK SROVNANI JE V <FF-Z>.
;
;       POSKOZENE REGISTRY: A,F
;
CMPNAM: PUSH    B
        PUSH    H
        PUSH    D
        MVI     B,NAMLEN ; POCET PISMEN JMENA
        CALL    GETNM1
        LXI     D,RDADR
        JC      CMPN0
        CALL    GETNM2
        LXI     D,PNADR
CMPN0:  XCHG
        CALL    NAMIA   ; V <HL> ADRESA BUFFERU, V <DE> ADRESA VZORU
CMPN1:  INX     H       ; UKAZATEL NAZVU
        LDAX    D       ; CTI PISMENO ZE VZORU
        CPI     '*'     ; JE VA VZORU '*' ?
        JZ      CMPN2   ; ANO - UKONCI SROVNAVANI - DOTAZ NA POTVRZENI
        CPI     ETX
        JZ      CMPN3   ; JE NAZEV KRATSI NEZ NAMLEN ?
        CMP     M       ; SROVNANI DALSIHO PISMENA
        JNZ     CMPN3   ; NESHODA - UKONCI SROVNANI
        INX     D       ; UKAZATEL VZORU
        DCR     B       ; CITAC PISMEN
        JNZ     CMPN1   ; DALSI PISMENO
        JMP     CMPN3
CMPN2:  CALL    MAMTX   ; ZOBRAZ NAZEV
        CALL    REQTX   ; DOTAZ Y/COKOLI
CMPN3:  POP     D
        POP     H
        POP     B
        RET
;
;
;
;       C M P B U F
;       ===========
;
;       PODPROGRAM PRO ZOBRAZENI NAZVU PRECTENEHO BLOKU PODPROGRAMEM
;       RDBUF DO POMOCNE OBLASTI TMPAR, PRO KONTROLU SOUHLASU CISLA
;       BLOKU A SOUBORU PRECTENICH A OBSAZENYCH V INTERNICH CITACICH.
;
;       POSKOZENE REGISTRY: - - -
;
CMPBUF: PUSH    H
        PUSH    D
        PUSH    B
        PUSH    PSW
        CALL    NAMNUM  ; ZOBRAZ NAZEV, CISLO BLOKU A SOUBORU
        DCX     H       ; V <HL> ADRESA CISLA BLOKU
        XCHG
        POP     PSW
        PUSH    PSW
        LXI     H,RBLKC ; CITAC BLOKU PRI CTENI
        JC      CMPBU0  ; PRI CTENI SKOC
        LXI     H,PBLKC ; CITAC BLOKU PRI ZAPISU
CMPBU0: CALL    GETADR  ; V <HL> ADRESA CITACE BLOKU
        MOV     B,M
        LDAX    D
        CMP     B       ; JE PRECTENO CISLO BLOKU SHODNE S OBSAHEM CITACE ?
        CNZ     BREA1   ; NE - CHYBA
ERR19:  INX     H       ; V <HL> ADRESA CISLA SOUBORU
        INX     D       ; V <DE> ADRESA CITACE SOUBORU
        MOV     B,M
        LDAX    D
        CMP     B       ; JE PRECTENE CISLO SOUBORU SHODNE S OBSAHEM CT. ?
        CNZ     BREA1   ; NE - CHYBA
ERR20:  POP     PSW
        POP     B
        POP     D
        POP     H
        RET
;
;
;
;      N U L N A M
;      ===========
;      PODPROGRAM SPOUZI PRO VUPLNENI OBLASTI NAME1 (FF-C...1)
;      NEBO NAME2 (FF-C...0) MEZERAMI.
;
;      POSKOZENE REGISTRY: - - -
;
NULNAM: PUSH    B
        PUSH    H
        PUSH    PSW
        MVI     B,NAMLEN ; DELKA NAZVU
        CC      GETNM1
        CNC     GETNM2  ; V <HL> ADRESA OBLASTI S JMENEM
        MVI     A,' '   ; ZAPIS MEZERU
        JMP     NULB1
;
;
;
;       N U L B U F
;       ===========
;
;       PODPROGRAM PRO VYPLNENI BUFFERU URCENEM <FF-C> BLANKY.
;
NULBUF: PUSH    B
        PUSH    H
        PUSH    PSW
        MVI     B,BUFLEN-1 ; DELKA BUFFERU - 1
        CC      GETRDB
        CNC     GETPNB  ; V <HL> ADRESA BUFFERU
        INX     H       ; NEMAZ PRIZNAK BLOKU
        MVI     A,BLANK ; ZAPIS 00H
NULB1:  MOV     M,A
        INX     H
        DCR     B       ; CELY BUFFER ZAOLNEN ?
        JNZ     NULB1   ; NE - DALSI BYTE
        POP     PSW
        POP     H
        POP     B
        RET
;
;
;
;       W R G A P     [73/65]
;       =========
;
;       PODPROGRAM SLOUZI K ZAPISU MEZERY V DELCE <BC> BITU 01.
;
;       POSKOZENE REGISTRY: A,F,B,C
;
WRGAP:  PUSH    B       ; [11]
        MVI     C,0FFH  ; [7]
        CALL    BITOUT  ; ZAPIS JEDNICKY [38/30]
        POP     B       ; [10]
        DCX     B       ; VSECHNY BYTY ZAPSANY ? [5]
        MOV     A,B     ; [5]
        ORA     C       ; [4]
        RZ              ; [5/11]
        JMP     WRGAP   ; NE - ZAPIS DALSI BIT [10]
;
;
;
;       S R G A P     [79/114]
;       =========
;
;       PODPROGRAM SLOUZI K VYHLEDAVANI MEZERY TAK, ZE CEKA
;       NA SOUVISLOU POSLOUPNOST JEDNICEK V DELCE GAPBIT.
;       NAJDE-LI NULU, HLEDA ZNOVU OD ZACATKU.
;
;       POSKOZENE REGISTRY: A,F
;
SRGAP:  PUSH    B       ; [11]
SRGA0:  LXI     B,GAPBIT ; POCET JEDNICKOVYCH BITU PRO 200 MS [10]
SRGA1:  CALL    BITIN   ; [41/95]
        CZ      BREAK   ; PRERUSIT ? [5/11]
        JZ      SRGA0   ; NENI - HLEDEJ ZNOVU [10]
        DCX     B       ; NALAZEN POZADOVANY POCET BITU ? [5]
        MOV     A,B     ; [5]
        ORA     C       ; [4]
        JNZ     SRGA1   ; NE - HLEDEJ ZNOVU [10]
        POP     B       ; [10]
        RET             ; [10]
;
;
;
;       N A M T X
;       =========
;
;       PODPROGRAM SLOUZI K ZOBRAZENI NAZVU Z POMOCNE OBLASTI
;       TMPAR V DELCE (NAMLEN) ZNAKU.
;
;       POSKOZENE REGISTRY: A,F,B,C,H,L
;
MAMTX:  MVI     B,NAMLEN ; DELKA JMEN
        CALL    GETTMP  ; V <HL> ADRESA OBLASTI TMPAR
        CALL    CRLF
NAMT0:  MOV     C,M
        MOV     A,M
        CPI     20H
        CNC     CO      ; ZOBRAZ ZNAK, IGNORUJ RIDICI ZNAKY
        INX     H
        DCR     B       ; ZOBRAZENY VECHNY ZNAKY ?
        JNZ     NAMT0   ; NE - ZOBRAZ DALSI
        RET
;
;
;
;       N A M N U M
;       ===========
;
;       PODPROGRAM SLOUZI K ZABRAZENI JMENA SOUBORU Z POMOCNE OBLASTI
;       PAMETI (TMPAR), CISLA BLOKU A CISLA SOUBORU. ZOBRAZUJE NA PRED-
;       CHOZI RADEK.
;
;       POSKOZENE REGISTRY: A,F,B,C,H,L
;
NAMNUM: LXI     H,LINECO
        CALL    GETADR  ; V <HL> ADRESA CITACE RADKU
        DCR     M       ; SKOK NA PREDCHOZI RADEK
        CALL    MAMTX   ; ZOBRAZENI NAZVU, NASTAVENI ADRESY DO <HL>
        CALL    SPACE
        MOV     A,M
        CALL    DBYTE   ; ZOBRAZ CISLO BLOKU
        CALL    SPACE
        INX     H
        MOV     A,M
        JMP     DBYTE   ; ZOBRAZ CISLO SOUBORU
;
;
;
;       S E A R C H
;       ===========
;
;       PODPROGRAM SLOUZI K VYHLEDAVANI SOUBORU URCENEHO NAZVU.
;       VSTUPNI PARAMETR JE FF-C, URCUJICI ZDA JDE O ZAPIS (PAK
;       SE HLEDA KONEC UDANEHO SOUBORU) NEBO CTENI (PAK SE HLEDA
;       PRVNI DATOVY BLOK SOUBORU). V <HL> JE ODSTUP ADRESY BUFFERU,
;       DO KTEREHO SE NACITA PRI HLEDANI. HLEDANI SE DA PRERUSIT ESC.
;       PRI HLEDANI SE ZOBRAZUJI U DATOVYCH BLOKU NAZEV A CISLO.
;
;       POSKOZENE REGISTRY: A,F,H,L
;
SEARCH: PUSH    PSW
        PUSH    H
        POP     D       ; V <DE> ODSTUP
SEAR1:  PUSH    D
        POP     H       ; V <HL> ODSTUP
        POP     PSW
        PUSH    PSW
        CALL    RDBUF   ; CTI BLOK DO BUFFERU
        PUSH    D
        POP     H       ; V <HL> ODSTUP
        CALL    NAMIA   ; V <HL> ADRESA BUFFERU
        MOV     A,M
        CPI     01H     ; PRIZNAK NAZVU SOUBORU ?
        JZ      SEAR2
        CPI     ':'     ; PRIZNAK NAZNU KAZETY ?
        PUSH    PSW
        PUSH    B
        CNZ     NAMNUM  ; ZOBRAZ NAZEV SOUBORU, CISLO BLOKU A SOUBORU
        POP     B
        POP     PSW
        JNZ     SEAR1   ; NE - CTI DALSI BLOK
        POP     PSW
        PUSH    PSW
        CALL    CMPNAM  ; SROVNANI NAZVU PRO BLOK ':'
        JZ      SEAR3   ; ZASTAVIT HNED ZA ?
        JMP     SEAR1   ; NE - CTI DALSI BLOKY
SEAR2:  POP     PSW
        PUSH    PSW
        CALL    CMPNAM  ; NAZVY JSOU ROVNY ?
        JNZ     SEAR1   ; NE - CTI DALSI NAZEV
        POP     PSW
        RC              ; PRI CTENI NAVRAT
SEAR0:  PUSH    D
        POP     H       ; V <HL> ODSTUP
        ORA     A       ; PRIZNAK ZAPISU (FF-C=0)
        CALL    RDBUF   ; CTI BLOK
        PUSH    B
        CALL    NAMNUM  ; ZOBRAZ JMENO A CISLO
        POP     B
        PUSH    D
        POP     H       ; V <HL> ODSTUP
        CALL    NAMIA   ; V <HL> ADRESA BUFFERU
        MVI     A,04H   ; PRIZNAK KONCOVEHO BLOKU
        CMP     M       ; JDE O KONCOVY BLOK ?
        JNZ     SEAR0   ; NE - CTI DALSI BLOK
        RET
;
SEAR3:  POP     PSW
        RET             ; NAVRAT PRO BLOK S NAZVEM KAZETY
;
;
;
;################################################################
;
;       OBLAST PODPROGRAMU BYTOVE A BITOVE UROVNE
;       *****************************************
;
;
;       A S C I N
;       =========
;
;       PODPROGRAM PRO VSTUP ASCII ZNAKU V POCTU <B> A JEJICH
;       ULOZENI POCINAJE ADRESOU <HL>. UKLADANI LZE PREDCASNE
;       UKONCIT ZNAKEM CR, DO MONITORU LZE SKOCIT PO STISKNUTI
;       ZNAKU ESC (CTRL [), CHYBNE ZNAKY LZE VYMAZAT ZNAKEM
;       BS (08H). JAKO POSLEDNI ZNAK SE VKLADA ZNAK ETX.
;
;       POSKOZENE REGISTRY: A,F
;
ASCIN:  PUSH    B
        PUSH    H
        MOV     C,B     ; POCET ZNAKU
ASCI0:  CALL    CI      ; VSTUP ZNAKU
        CPI     CR      ; JDE O 'CR' ?
        JZ      ASCI3   ; ANO - PREDCASNE UKONCI VKLADANI
        CPI     ESC     ; JDE O 'ESC' ?
        CZ      BREA2   ; ANO - SKOC DO MONITORU
        CPI     BS      ; JDE O 'BS'
        JNZ     ASCI2   ; ANO=VYMAZ, NE=ULOZ ZNAK
ASCI1:  MOV     A,C
        CMP     B       ; VSECHNY ZNAKY VYMAZANY ?
        JZ      ASCI0   ; ANO - VSTUP DALSIHO ZNAKU
        DCX     H       ; UKAZATEL NA STARY ZNAK
        INR     B       ; OPRAVA CITACE ZNAKU
        CALL    BACST
        CALL    SPACE
        CALL    BACST   ; VYMAZ ZNAKU I NA OBRAZOVCE
        JMP     ASCI0   ; VSTUP DALSIHO ZNAKU
ASCI2:  MOV     M,A     ; ULOZ NOVY ZNAK DO PAMETI
        INX     H       ; UKAZATEL
        PUSH    B
        MOV     C,A
        CALL    CO      ; ZOBRAZENI ZNAKU
        POP     B
        DCR     B       ; CITAC
        JNZ     ASCI0   ; VSECHNY ZNAKY ULOZENY ?
ASCI3:  MVI     M,ETX   ; PRIZNAK KONCE
        POP     H
        POP     B
        RET
;
;
;
;       B Y T O U T     [103/50]
;       ===========
;
;       PODPROGRAM PRO ZAPIS BYTU <A> NA KAZETU. BYTE MA TVAR:
;       0,D7,D6,D5,D4,D3,D2,D1,D0,1,1
;       V <B> SE VYTVARI KONTROLNI SOUCET.
;
;       POSKOZENE REGISTRY: B,A,F
;
BYTOUT: PUSH    PSW     ; [11]
        ADD     B       ; [4]
        MOV     B,A     ; KONTROLNI SOUCET [5]
        POP     PSW     ; [10]
        PUSH    B       ; [11]
        MVI     C,0     ; [7]
        CALL    BITOUT  ; START BIT [38/30]
        MOV     C,A     ; [5]
        MVI     B,8     ; CITAC BITU [7]
BYTO0:  CALL    BITOUT  ; [38/30]
        MOV     A,C     ; [5]
        RRC             ; [4]
        MOV     C,A     ; [5]
        DCR     B       ; VSECHNY BITY ? [5]
        JNZ     BYTO0   ; NE - DALSI BIT [10]
        MVI     C,0FFH  ; [7]
        CALL    BITOUT  ; [38/30]
        CALL    BITOUT  ; DVA STOP BITY [38/30]
        POP     B       ; [10]
        RET             ; [10]
;
;
;
;       B I T O U T       [38/30]
;       ===========
;
;       PODROGRA PRO ZAPIS BITU <C0> NA KAZETU. BIT SE ZAPISUJE
;       INVERZNE (VYSSI FREKVENCE ODPOVIDA PC0=1).
;
;       POSKOZENE REGISTRY: - - -
;
BITOUT: PUSH    PSW     ; [11]
BITO0:  IN      ADRPA   ; [10]
        ANI     2       ; JE PA1 JEDNICKOVY ? [7]
        JZ      BITO0   ; NE - CEKEJ NA VZESTUPNOU HRANU [10]
BITO1:  IN      ADRPA   ; [10]
        ANI     2       ; JE PA1 NULOVY ? [7]
        JNZ     BITO1   ; NE - CEKEJ NA SESTUPNOU HRANU [10]
        MOV     A,C     ; [5]
        ANI     1       ; VYBER <C0> [7]
        OUT     ADRCT   ; INSTRUKCE NASTAVENI/NULOVANI PC0 [10]
        POP     PSW     ; [10] (NYNI INTERFACE ZAPISUJE AUT. DRUHY KMYT)
        RET             ; [10]
;
;
;
;       B Y T I N      [69/94]
;       =========
;
;       PODPROGRAM PRO VSTUP JEDNOHO BYTU Z KAZETY. BYTE MA TVAR:
;
;       0 , 1/0 , 1/0 , 1/0 , 1/0 , 1/0 , 1/0 , 1/0 , 1/0 , 1 , 1
;           D7    D6    D5    D4    D3    D2    D1    D0
;       START BIT                                         2 X STOP BIT
;
;       POSKOZENE REGISTRY: A,F
;
BYTIN:  PUSH    B       ; [11]
BYTI2:  CALL    BITIN   ; CTI BIT [41/59]
        JNZ     BYTI2   ; CEKEJ NA NULOVY START BIT [10]
        LXI     B,0800H ; CITAC BITU V <B>, POM. BUNKA V <C> [10]
BYTI0:  CALL    BITIN   ; CTI BIT [41/59]
        ORA     C       ; SKLADEJ BYTE [4]
        RRC             ; [4]
        MOV     C,A     ; [5]
        DCR     B       ; VSECH 8 BITU DAT PRECTENO ? [5]
        JNZ     BYTI0   ; NE - CTI DALSI BIT [10]
        CALL    BITIN   ; CTI BIT [41/59]
        CZ      BREAK   ; NEJDE O JEDNICKOVY STOP BIT - PRERUSIT ? [5/11]
        JZ      BYTI2   ; NULOVY STOP BIT - SPLACHNI BYTE [10]
        CALL    BITIN   ; CTI BIT [41/59]
        JZ      BYTI2   ; NEJDE O JEDNICKOVY STOP BIT - SPLACHNI BYTE [10]
        MOV     A,C     ; V <A> DATA [5]
        POP     B       ; [10]
        RET             ; SPRAVNY NAVRAT - FF-C = 0 [10]
;
;
;
;       B I T I N      [41/60]
;       =========
;
;       PODPROGRAM PRO CTENI BITU Z KAZETY. BIT SE CTE INVERZNE, TZN.
;       VYSSI KMITOCET MA BIT 0.
;
;       POSKOZENE REGISTRY: A,F
;
BITIN:  IN      ADRPA   ; [10]
        ORA     A       ; JE PA7 JEDNICKOVY ? [4]
        JP      BITIN   ; NE - CEKEJ NA VZESTUPNOU HRANU [10]
BITI0:  IN      ADRPA   ; [10]
        ORA     A       ; JE PA7 NULOVY ? [4]
        JM      BITI0   ; NE - CEKEJ NA SESTUPNOU HRANU [10]
        ANI     01H     ; VYBER DATOVY PA0 [7]
        RET             ; [10]
;
;
;
;       W R M E M     [125/66]
;       =========
;
;       PODPROGRAM PRO ZAPIS OBLASTI PAMETI, ZACINAJICI ADRESOU
;       V <HL> A DELKY <C> BYTU.
;
;       POSKOZENE REGISTRY: A,F,B,C,H,L
;
WRMEM:  MOV     A,M     ; CTI BYTE Z PAMETI [5]
        CALL    BYTOUT  ; ZAPIS NA KAZETU [103/50]
        DCR     C       ; VSECHNY BYTY ZAPSANY ? [5]
        RZ              ; ANO - NAVRAT [5/11]
        INX     H       ; [5]
        JMP     WRMEM   ; NE - ZAPIS DALSI BYTE [10]
;
;
;
;       R D M E N      [86/122]
;       =========
;
;       PODPROGRAM KE CTENI DAT V POCTU <C> BUTU A JEJICH ULOZENI
;       DO PAMETI POCINAJE ADRESOU <HL>. KONTROLNI SOUCET VYTVARI V <B>.
;
;       POSKOZENE REGISTRY: A,F,B,C,H,L
;
RDMEM:  CALL    BYTIN   ; CTI BYTE Z KAZETY [69/89]
        MOV     M,A     ; ULOZ DO PAMETI [7]
        ADD     B       ; [5]
        MOV     B,A     ; KONTR. SOUCET DO <B> [5]
        DCR     C       ; VSECHNY RYTY PRECTENY ? [5]
        RZ              ; ANO - NAVRAT [5/11]
        INX     H       ; [5]
        JMP     RDMEM   ; NE - CTI DALSI BYTE [10]
;
;
;
;       P U N C H
;       =========
;
;       PODPROGRAM VYDEROVANI BYTU DAT A VYTVORENI KONTROLNIHO SOUCTU.
;
;       POSKOZENE REGISTRY: A,B,F
PUNCH:  CALL    BREAK   ; PRERUSIT ?
        MOV     A,C
        ADD     B
        MOV     B,A     ; VYTVORENI KONTROLNIHO SOUCTU
        CALL    PO
        CC      BREA1   ; CHYBA ?
ERR22:  RET
;
;
;
;       D P U N C H
;       ===========
;
;       PODPROGRAM VYDEROVANI DVOU BYTE DAT Z <HL>.
;
;       POSKOZENE REGISTRY: A,B,F
;
DPUNCH: MOV     C,L
        CALL    PUNCH
        MOV     C,H
        JMP     PUNCH
;
;
;
;       R I N C H
;       =========
;
;       PODPROGRAM PRECTENI BYTU DAT A VYTVORENI KONTROLNIHO SOUCTU.
;
RINCH:  CALL    BREAK   ; PRERUSIT ?
        CALL    RI
        PUSH    PSW
        ADD     B
        MOV     B,A     ; VYTVORENI KONTROLNI SOUCET
        POP     PSW
        RET
;
;
;
;       D R I N C H
;       ===========
;
;       PODPROGRAM PRO PRECTENI DVOU BYTU A ULOZENI DO <HL>.
;
;       POSKOZENE REGISTRY: A,H,L
;
DRINCH: CALL    RINCH
        MOV     L,A
        CALL    RINCH
        MOV     H,A
        RET
        CPI     'A'     ; JDE A ASCII BLOK ?
        RET
;
;
;
;################################################################
;
;       OBLAST POMOCNYCH PODPROGRAMU
;       ****************************
;
;
;
;       B R E A K
;       =========
;
;       PODPROGRAM BREAK SLEDUJE, ZDA BYLA STISKNUTA KLAVESA CTRL [
;       TJ. ESC. POKUT NE, PROVEDE NAVRAT BEZ POSKOZENI REGISTRU.
;       POKUT ANO, PROVEDE INICIACI MAGNETOFONU, VYPISE '#', SKOCI
;       DO OBSLUHY PRUSENI (VYPISE OBSAH REGISTRU) A SKOCI DO
;       MONITORU. NAVIC SE PRI CHYBE ROZNE PRISLUSNA LED.
;
;       POSKOZENE REGISTRY: - - -
;
BREAK:  PUSH    PSW
        CALL    CSTS
        CNZ     BREA0
        POP     PSW
        RET
;
BREA0:  CALL    CI
        CPI     ESC     ; JDE O 'ESC' = CTRL [
        RNZ             ; NE - NAVRAT
        POP     PSW
        POP     PSW     ; NA VRCHOL ZASOBNIKU PUVODNI NANR. ADRESA
BREA2:  CALL    BREA1   ; ZOBRAZ KOD CHYBY
ERR21:  JMP     NEXT    ; SKOK DO MONITORU
;
BREA1:  PUSH    PSW
        CALL    ERROR   ; ZOBRAZ "#"
        CALL    CRLF
        MVI     A,PC6SET
        OUT     ADRCT   ; ROZNUTI LED CHYBA
        POP     PSW
        RET
;
;
;
;       R E S T R
;       =========
;
;       PODPROGRAM PRO VYPNUTI MOTORKU MAGNETOFONU A ZABLOKOVANI
;       MODEMU. NEOVLIVNI STAV LED CHYBA.
;
;       POSKOZENE REGISTRY: - - -
;
RESTR:  PUSH    PSW
        IN      ADRPC
        ANI     01000000B ; VYBER PRIZNAK CHYBY
        ORI     00010000B ; PASIVACE INTRFACE MAGNETOFONU
        OUT     ADRPC
        POP     PSW
        RET
;
;
;
;       S E T T R
;       =========
;
;       PODPROGRAM PRO SPOSTENI MOTORKU MAGNETOFONU, PO SPOSTENI
;       CEKA WAITTR MS NA ROZBEHNUTI.
;
;       POSKOZENE REGISTRY: - - -
;
SETTR:  PUSH    PSW
        PUSH    B
        MVI     A,PC3SET
        OUT     ADRCT   ; SPOSTENI MOTORKU
        LXI     B,WAITTR
        CALL    TIMER   ; CEKEJ
        IN      ADRPC
        ANI     11100000B ; VYBER PRIZNAK CHYBY, CTENI A ZAPISU
        ORI     00001111B ; NASTAV GENERACI JEDNICKY
        OUT     ADRPC   ; GENERACE '1'
        POP     B
        POP     PSW
        RET
;
;
;
;       P L A Y T X
;       ===========
;
;       PODPROGRAM SLOUZI K VYPSANI TEXTU 'PLAY '
;
;       POSKOZENE REGISTRY: A,F,C,H,L
;
PLAYTX: CALL    IMTXT
        DB      CR,LF,'PLA','Y' OR 80H ; ZOBRAZ TEXT
        JMP     DONETX  ; ZOBRAZ 'DONE'
;
;
;
;       R E C T X
;       =========
;
;       PODPROGRAM SLOUZI K ZOBRAZENI TEXTU 'RECORD '.
;
;       POSKOZENE REGISTRY: A,F,C,H,L
;
RECTX:  CALL    IMTXT
        DB      CR,LF,'RECOR','D' OR 80H ; ZOBRAZ TEXT
;
;
;
;       D O N E T X
;       ===========
;
;       PODPROGRAM SLOUZI K ZOBRAZENI TEXTU 'DONE '.
;
;       POSKOZENE REGISTRY: A,F,C,H,L
;
DONETX: CALL    IMTXT
        DB      ' DON','E' OR 80H ; ZOBRAZ TEXT
;
;
;
;       R E Q T X
;       =========
;
;       PODPROGRAM K ZOBRAZENI '?' A CEKANI NA KLAVESU. ZNAK SROVNA
;       S 'Y' A NASTAVY <FF-Z>.
;
;       POSKOZENE REGISTRY: A,F,C,H,L
;
REQTX:  CALL    IMTXT
        DB      ' ?:',BELL OR 80H ; ZOBRAZ '?:'
        CALL    ECHO    ; VSTUP A ZOBRAZENI ZNAKU
        CPI     'Y'     ; JDE O 'Y'
        RET
;
;
;
;       G E T R D B
;       ===========
;
;       PODPROGRAM ULOZI DO <HL> ADRESU BUFFERU SNIMACE.
;
;       POSKOZENE REGISTRY: H,L
;
GETRDB: LXI     H,RDADR
        JMP     NAMIA
;
;
;
;       G E T P N B
;       ===========
;
;       PODPROGRAM ULOZI DO <HL> ADRESU BUFFERU DEROVACE.
;
;       POSKOZENE REGISTRY: H,L
;
GETPNB: LXI     H,PNADR
        JMP     NAMIA
;
;
;
;       G E T R S T
;       ===========
;
;       PODPROGRAM ULOZI ADRESU STATUSU CTENI DO <HL> A JEHO HODNOTU
;       DO <A>.
;
;       POSKOZENE REGISTRY: H,L,A,F
;
GETRST: LXI     H,RDSTS
GETC0:  CALL    GETADR
        MOV     A,M
        RET
;
;
;
;       G E T N M 1
;       ===========
;
;       PODPROGRAM ULOZI ADRESU OBLASTI NAME1 DO <HL>.
;
;       POSKOZENE REGISTRY: H,L
;
GETNM1: LXI     H,NAME1
        JMP     GETADR
;
;
;
;       G E T N M 2
;       ===========
;
;       PODPROGRAM ULOZI ADRESU OBLASTI NAME2 DO <HL>
;
;       POSKOZENE REGISTRY: H,L
;
GETNM2: LXI     H,NAME2
        JMP     GETADR
;
;
;
;       G E T P P O
;       ===========
;
;       PODPROGRAM ULOZI ADRESU UKAZATELE DEROVACE DO <HL>, JEHO
;       OBSAH DO <A>.
;
;       POSKOZENE REGISTRY: A,F,H,L
;
GETPPO: LXI     H,PNPOI
        JMP     GETC0
;
;
;
;       G E T P S T
;       ===========
;
;       PODPROGRAM ULOZI ADRESU STATUSU ZAPISU DO <HL> A JEHO
;       HODNOTU DO <A>.
;
;       POSKOZENE REGISTRY: A,F,H,L
GETPST: LXI     H,PNSTS
        JMP     GETC0
;
;
;
;       G E T T M P
;       ===========
;
;       PODPROGRAM UMISTI DO <HL> ADRESU POMOCNE OBLASTI TMPAR
;
;       POSKOZENE REGISTRY: H,L
;
GETTMP: LXI     H,TMPAR
        JMP     GETADR
;
;
;
;       G E T P B C
;       ===========
;
;       PODPROGRAM VYNULUJE CITACE BLOKU A DO <HL> ULOZI ADRESU CITACE
;       SOUBORU.
;
;       POSKOZENE REGISTRY: A,F,H,L
;
GETPBC: LXI     H,PBLKC
        CALL    GETADR
        MVI     M,0
        INX     H
        RET
;
;
;
;       G E T C T N
;       ===========
;
;       PODPROGRAM ULOZI CISLO SOUBORU NAPOSLED PRECTENEHO BLOKU
;       POPROGRAMEM RDBUF DO <A>.
;
;       POSKOZENE REGISTRY: A,F
;
GETCTN: PUSH    H
        PUSH    D
        CALL    GETTMP  ; ADRESA POMOCNE OBLASTI
        LXI     D,12    ; ODSTUP CISLA SOUBORU
        DAD     D
        MOV     A,M
        POP     D
        POP     H
        RET
;
;
;
;################################################################
;
;
;
        DB      0FFH,0FFH,0FFH,0FFH
        .DEPHASE
        END


Obsah:



Ú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


8 bity / PLAN-80A

Výpis programu OVLADACI PROGRAM MODEMU MAGNETOFONU V.3.X



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