Ú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