Ú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
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
Ú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