Ú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 'PLAN 80A MONITOR V.2.Q' ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; ;X X; ;X X; ;X PLAN-80A V.2.Q 27.09.88 X; ;X X; ;X MONITOR PRO ZAKLADNI VERZE S KLAVESNICI TS5220004 X; ;X X; ;X X; ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; ; PREDPOKLADANE ROZDELENI PAMETI ; ============================== ; ; ; E000 - EFFF EPROM S TINY BASICEM ; F000 - F7FF EPROM S MAGNETOFONEM ; F800 - FFFF EPROM S MONITOREM ; ; 0000 - 0FFF STAT. RAM (2114) ; 1000 - DFFF DYN. RAM (4116) ; ; (OBLASTI DYNAMICKE PAMETI, KTERE SE PREKRIVAJI S ; EPROM NEBO RAM MAJI OBVODOVE BLOKOVANOU AKTIVACI) ; ; ; P O Z O R: PREDPOKLADA SE SEMIGRAFIKA ! ; ; ; PREDPOKLADANE VYUZITI PAMETI RAM ; ================================ ; ; ; 0000 C3 SKOK NA STUDENY START MONITORU ; 0001 00 ; 0002 F8 ; 0003 55 I/O BYTE (NENI VYUZITY) ; 0004 RAMEND-LOW KONEC PROGRAMOVE RAM ; 0005 REMEND-HIGH ; 0038 C3 SKOK DO OBSLUHY PRERUSENI RST7 ; 0039 INTER-LOW ; 003A INTER-HIGH ; ; ; POZN.: EXISTUJI TRI RUZNE KONCE PAMETI RAM: ; 1. FYZICKY KONEC RAM (CALL GETEND) ; 2. KONEC PROGRAMOVE RAM ([RAMEND]) ; 3. KONEC UZIVATELSKE RAM (CALL MEMCK) ; (U MAGNETOFONU ZMENSENY O BUFFER) ; ; INSTRUKCE SKOKU DO MONITOROVSKE OBSLUHY ; PRERUSENI SE NASTAVUJE VZDY PO VLOZENI ; DRUHEHO OPERANDU PRIKAZU GOTO NA ADRESU ; RST7 = 0038H. ; ; ; 0006 ZACATEK UZIVATELSKE PAMETI ; ; DISRAM ZACATEK PAMETI DISPLEJE, VRCHOL ZASOBNIKU: ; ; RAM = 1 K ... DISRAM = 0200 ... 8 RADKU ; RAM = 2 K ... DISRAM = 0400 ... 16 RADKU ; RAM = 3 K ... DISRAM = 0400 ... 16 RADKU ; RAM > 3 K ... DISRAM = RAMEND - 0800 ... 32 RADKU ; ; DISPLEJ VYUZIVA Z KAZDYCH 64 BYTU PAMATI POUZE ; PRVNICH 48 (JEDEN RADEK), ZBYLYCH 16 BYTU V PRV- ; NICH 9 RADCICH (PO ADRDIS + 023FH) VYUZIVA MONITOR ; NEBO BASIC. OSTATNI 16-TICE V RADCICH 9-32 JSOU ; NEPOUZITE. POKUT JE POUZITA DYNAMICKA PAMET, PAK ; JE DISPLEJ ULOZEN NA POSLEDNI DVE KILA KVADRU S ; NEJVYSSI ADRESOU (REFRES POMOCI ZOBRAZENI). ; ;; ; VYUZITI 16-TIC BYTU V PRVNICH 8 RADCICH DISRAM : ; ; RADEK: 0 ; ; DISRAM + 30H - ; DISRAM + 31H UREND = NIZSI BYTE ADRESY KONCE UZIV. RAM ; DISRAM + 32H VYSSI BYTE ADRESY KONCE UZIV. RAM ; DISRAM + 33H MSTACK = NIZSI BYTE ADRESY VRCHOLU ZASOBNIKU ; DISRAM + 34H VYSSI BYTE ADRESY VRCHOLU ZASOBNIKU ; DISRAM + 35H LINECO = CITAC RADKU ; DISRAM + 36H CHARCO = CITAC ZNAKU NA RADKU ; DISRAM + 37H LINENO = POCET RADKU V OBRAZE ; DISRAM + 38H CHARNO = POCET ZNAKU NA RADKU ; DISRAM + 39H - ; DISRAM + 3AH - ; DISRAM + 3BH - (REZERVOVANO PRO VYSSI VERZE) ; DISRAM + 3CH - ; DISRAM + 3DH - ; DISRAM + 3EH - ; DISRAM + 3FH - ; ; ; RADEK: 1 ; ; DISRAM + 70H BRADR = VYSSI BYTE ADRESY PRERUSENI (VIZ 'GOTO') ; DISRAM + 71H NIZSI BYTE ADRESY PRERUSENI (VIZ 'GOTO') ; DISRAM + 72H BRCODE = KOD INSTRUKCE NA TETO ADRESE (VIZ 'GOTO') ; DISRAM + 73H SPREG = NIZSI BYTE <SP> (VIZ 'GOTO') ; DISRAM + 74H VYSSI BYTE <SP> (VIZ 'GOTO') ; DISRAM + 75H HREG = OBSAH REG <H> (VIZ 'GOTO') ; DISRAM + 76H LREG = OBSAH REG <L> (VIZ 'GOTO') ; DISRAM + 77H DREG = OBSAH REG <D> (VIZ 'GOTO') ; DISRAM + 78H EREG = OBSAH REG <E> (VIZ 'GOTO') ; DISRAM + 79H BREG = OBSAH REG <B> (VIZ 'GOTO') ; DISRAM + 7AH CREG = OBSAH REG <C> (VIZ 'GOTO') ; DISRAM + 7BH AREG = OBSAH REG <A> (VIZ 'GOTO') ; DISRAM + 7CH FREG = OBSAH REG <F> (VIZ 'GOTO') ; DISRAM + 7DH INOUT = VYHRAZENO PRO PRIKAZY IN/OUT ; DISRAM + 7EH -"- ; DISRAM + 7FH -"- ; ; ; RADEK: 2 ; ; DISRAM + B0H CONINP = KOD INSTRUKCE JMP NEBO RET (PRO CI) ; DISRAM + B1H NIZSI BYTE ADRESY SKOKU ; DISRAM + B2H VYSSI BYTE ADRESY SKOKU ; DISRAM + B3H CONOUT = KOD INSTRUKCE JMP NEBO RET (PRO CO) ; DISRAM + B4H NIZSI BYTE ADRESY SKOKU ; DISRAM + B5H VYSSI BYTE ADRESY SKOKU ; DISRAM + B6H READIN = KOD INSTRUKCE JMP NEBO RET (PRO RI) ; DISRAM + B7H NIZSI BYTE ADRESY SKOKU ; DISRAM + B8H VYSSI BYTE ADRESY SKOKU ; DISRAM + B9H USRRI = KOD INSTRUKCE JMP NEBO RET (DUMMY) ; DISRAM + BAH NIZSI BYTE ADRESY SKOKU ; DISRAM + BBH VYSSI BYTE ADRESY SKOKU ; DISRAM + BCH PUNOUT = KOD INSTRUKCE JMP NEBO RET (PRO PO) ; DISRAM + BDH NIZSI BYTE ADRESY SKOKU ; DISRAM + BEH VYSSI BYTE ADRESY SKOKU ; DISRAM + BFH - ; ; ; RADEK: 3 ; ; DISRAM + F0H USRPO = KOD INSTRUKCE JMP NEBO RET (DUMMY) ; DISRAM + F1H NIZSI BYTE ADRESY SKOKU ; DISRAM + F2H VYSSI BYTE ADRESY SKOKU ; DISRAM + F3H LSTOUT = KOD INSTRUKCE JMP NEBO RET (PRO LO) ; DISRAM + F4H NIZSI BYTE ADRESY SKOKU ; DISRAM + F5H VYSSI BYTE ADRESY SKOKU ; DISRAM + F6H CONSTA = KOD INSTRUKCE JMP NEBO RET (PRO CSTS) ; DISRAM + F7H NIZSI BYTE ADRESY SKOKU ; DISRAM + F8H VYSSI BYTE ADRESY SKOKU ; DISRAM + F9H - ; DISRAM + FAH - ; DISRAM + FBH - ; DISRAM + FCH - ; DISRAM + FDH - ; DISRAM + FEH - ; DISRAM + FFH - ; ; ; RADEK: 4 ; ; DISRAM + 130H NAME1 = 16-TI BITOVY NAZEV SOUBORU (PRO CTENI) ; DISRAM + 131H ; DISRAM + 132H ; DISRAM + 133H ; DISRAM + 134H ; DISRAM + 135H ; DISRAM + 136H ; DISRAM + 137H ; DISRAM + 138H ; DISRAM + 139H ; DISRAM + 13AH ; DISRAM + 13BH ; DISRAM + 13CH ; DISRAM + 13DH ; DISRAM + 13EH ; DISRAM + 13FH ; ; ; RADEK: 5 ; ; DISRAM + 170H NAME2 = 16-TI BITOVY NAZEV SOUBORU (PRO ZAPIS) ; DISRAM + 171H ; DISRAM + 172H ; DISRAM + 173H ; DISRAM + 174H ; DISRAM + 175H ; DISRAM + 176H ; DISRAM + 177H ; DISRAM + 178H ; DISRAM + 179H ; DISRAM + 17AH ; DISRAM + 17BH ; DISRAM + 17CH ; DISRAM + 17DH ; DISRAM + 17EH ; DISRAM + 17FH ; ; ; RADEK: 6 ; ; DISRAM + 1B0H PNADR = NIZSI BYTE ADRESY BUFFERU DEROVACE ; DISRAM + 1B1H VYSSI BYTE ADRESY BUFFERU DEROVACE ; DISRAM + 1B2H PNPOI = ADRESY UKAZATELE BUFFERU DEROVACE ; DISRAM + 1B3H RDADR = NIZSI BYTE ADRESY BUFFERU SNIMACE ; DISRAM + 1B4H VYSSI BYTE ADRESY BUFFERU SNIMACE ; DISRAM + 1B5H RDPOI = ADRESY UKAZETELE BUFFERU SNIMACE ; DISRAM + 1B6H PBLKC = CITAC BLOKU DEROVACE ; DISRAM + 1B7H PFILC = CITAC SOUBORU DEROVACE ; DISRAM + 1B8H RBLKC = CITAC BLOKU SNIMACE ; DISRAM + 1B9H RFILC = CITAC SOUBORU SNIMACE ; DISRAM + 1BAH PNSTS = STATUS LOGICKEHO ZARIZENI PRO ZAPIS ; DISRAM + 1BBH RDSTS = STATUS LOGICKEHO ZARIZENI PRO CTENI ; DISRAM + 1BCH - ; DISRAM + 1BDH - ; DISRAM + 1BEH - ; DISRAM + 1BFH - ; ; ; RADEK: 7 ; ; DISRAM + 1F0H TMPAR = POMOCNA OBLAST ; DISRAM + 1F1H ; DISRAM + 1F2H ; DISRAM + 1F3H ; DISRAM + 1F4H ; DISRAM + 1F5H ; DISRAM + 1F6H ; DISRAM + 1F7H ; DISRAM + 1F8H ; DISRAM + 1F9H ; DISRAM + 1FAH ; DISRAM + 1FBH ; DISRAM + 1FCH ; DISRAM + 1FDH ; DISRAM + 1FEH ; DISRAM + 1FFH ; ; ; RADEK: 8 ; ; DISRAM + 230H KEYCD = VZORKY KLAVESNICE ; DISRAM + 231H -"- ; DISRAM + 232H -"- ; DISRAM + 233H -"- ; DISRAM + 234H ZNAK = VSTUPNI ZNAK ; DISRAM + 235H UPLO = HORNI/DOLNI ; DISRAM + 236H CTRL = RIDICI ZNAKY ; DISRAM + 237H NUM = CISLICE ; DISRAM + 238H CTN = CITAC BLIKANI KURZORU ; DISRAM + 239H - ; DISRAM + 23AH - ; DISRAM + 23BH - ; DISRAM + 23CH - ; DISRAM + 23DH - ; DISRAM + 23EH - ; DISRAM + 23FH - ; ; ; ; PREDPOKLADANE VYUZITI V/V PORTU ; =============================== ; ;-------------------------------------------------------------------- ;I A7 A5 A3 I A1 A0 I A1 A0 I A1 A0 I A1 A0 I ;I A6 A4 A2 I 0 0 I 0 1 I 1 0 I 1 1 I ;I--------------I------------I------------I------------I------------I ;I X X 0 0 0 0 I ST/OP (RW) I ST/OP (RW) I ST/OP (RW) I ST/OP (RW) I ;I--------------I------------I------------I------------I------------I ;I X X 0 0 0 1 I D '12 (RO) I D '12 (RO) I D '12 (RO) I D '12 (RO) I ;I--------------I------------I------------I------------I------------I ;I X X 0 0 1 0 I A '55 (RW) I B '55 (RW) I C '55 (RW) I CT'55 (RW) I ;I--------------I------------I------------I------------I------------I ;I X X 0 0 1 1 I KEY? (WO) I KEY? (WO) I KEY? (WO) I KEY? (WO) I ;I--------------I------------I------------I------------I------------I ;I X X 0 1 0 0 I BEEP (WO) I BEEP (WO) I BEEP (WO) I BEEP (WO) I ;I--------------I------------I------------I------------I------------I ;I X X 0 1 0 1 I '14 M (WO) I '14 M (WO) I '14 M (WO) I '14 M (WO) I ;I--------------I------------I------------I------------I------------I ;I X X 0 1 1 0 I ADRES (RW) I ADRES (RW) I ADRES (RW) I ADRES (RW) I ;I--------------I------------I------------I------------I------------I ;I X X 0 1 1 1 I ADRET (WO) I ADRET (WO) I ADRET (WO) I ADRET (WO) I ;-------------------------------------------------------------------- ; ; KDE: X '55 JE REGISTR X OBVODU 8255 ; D '12 JE VYSTUPNI PORT OBVODU 3212 ; ST/OP JE OBOUSMERNY PORT STAVOVE INFORMACE/VYSTUPU ; '14 M JE MASKOVACI PORT OBVODU 8214 ; ADRES JE SIGNAL NULOVANI REGISTRU ADRESY ZOBRAZOVANI ; ADRET JE SIGNAL ZAPISU ADRESY DO REGISTRU ZOBRAZOVANI ; KEY? JE TEST PRITOMNOSTI SOFTWAROVE KLAVESNICE ; (WO) JE POUZE VYSTUPNI PORT (VZHLEDEM K SYSTEMU) ; (RO) JE POUZE VSTUPNI PORT (POUZE OPERACE CTENI) ; (RW) JE OBOUSMERNY PORT ; ; ; ; OBLAST DEFINIC ; ============== ; RAMBEG EQU 0000H ; PRVNI ADRESA MAMETI RAM MONIT EQU 0F800H ; PRVNI ADRESA MONITORU TAPREC EQU 0F000H ; PRVNI ADRESA PROGRAMU MAGNETOFON BASIC EQU 0E000H ; STUDENY START TINY BASICU CONIT EQU 0E003H ; TEPLY START TINY BASICU ; TINIT EQU TAPREC + 1 ; ADRESA INICIACE PROGRAMU MAGNETOFON TJOIN EQU TAPREC + 4 ; ADRESA INICIACE MAGNETOFONU TQUAF EQU TAPREC + 7 ; ADRESA PRIKAZU CTENI BIN. SOUBORU TPUT EQU TAPREC + 0AH ; ADRESA PRIKAZU ZAPISU BIN. SOUBORU TAPP EQU TAPREC + 0DH ; ADRESA PRIKAZU BEZPR. ZAPISU BIN. SOUBORU TLOAD EQU TAPREC + 10H ; ADRESA PRIKAZU OVLADANI MOTORKU TDIR EQU TAPREC + 13H ; ADRESA PRIKAZU DIRECTORY PASKY TUNNA EQU TAPREC + 16H ; ADRESA PRIKAZU POJMENOVANI NOVE PASKY TKI EQU TAPREC + 19H ; ADRESA PRIKAZU CTENI BYTU TKO EQU TAPREC + 1CH ; ADRESA PRIKAZU ZAPISU BYTU TWR EQU TAPREC + 1FH ; ADRESA PRIKAZU VYDEROVANI HEX. SOBORU TRD EQU TAPREC + 22H ; ADRESA PRIKAZU PRECTENI HEX. SOUBORU TEOF EQU TAPREC + 25H ; ADRESA PRIKAZU UZAVRENI HEX. SOUBORU TCLOS EQU TAPREC + 28H ; ADRESA PODPROGRAMU UZAVRENI SOUBORU ; ; SO EQU 0EH ; ZNAK 'SO' = POMOCNY ZNAK SPC EQU 20H ; ZNAK 'SP' = MEZERA ETX EQU 0A0H ; ZNAK 'ETX' = KONEC TEXTU EOT EQU 03H ; ZNAK 'EOT' = KONEC VYSILANI SUBS EQU 1AH ; ZNAK 'SUB' = CTRL Z ESC EQU 1BH ; ZNAK 'ESC' = CTRL [ VT EQU 0BH ; ZNAK 'VT' = POSUN NAHORU HT EQU 09H ; ZNAK 'HT' = TABELACE FF EQU 0CH ; ZNAK 'FF' = VYMAZ OBRAZOVKY CR EQU 0DH ; ZNAK 'CR' = POSUN NA ZACATEK RADKU BS EQU 08H ; ZNAK 'BS' = ZNAK ZPET LF EQU 0AH ; ZNAK 'LF' = NOVY RADEK DEL EQU 07FH ; ZNAK 'DEL' = VYMAZ ZNAKU HOME EQU 1DH ; ZNAK 'HOME' = CTRL ] DL EQU 1EH ; ZNAK 'DELETE LINE' = CTRL ^ DSCR EQU 1FH ; ZNAK 'DELETE SCREEN' = CTRL _ BELL EQU 07H ; ZNAK 'BELL' = ZVONEK BLANK EQU 0 ; ZNAK 'BLANK' = CTRL @ ; JMPMON EQU 0000H ; SKOK DO STUDENEHO STARTU MONITORU IOBYT EQU 0003H ; ADRESA I/O-BYTU RAMEND EQU 0004H ; ADRESA KONCE RAM INTADR EQU 0038H ; SKOK DO OBSLUHY RST7 UREND EQU 31H ; ADRESA KONCE UZIVATELSKE PAMETI MSTACK EQU 33H ; ADRESA VRCHOLU ZASOBNIKU LINECO EQU 35H ; ADRESA CITACE RADKU CHARCO EQU 36H ; ADRESA CITACE ZNAKU LINENO EQU 37H ; ADRESA POCTU RADKU V OBRAZE CHARNO EQU 38H ; ADRESA POCTU ZNAKU V OBRAZE ADRLO EQU 3CH ; POMOCNA ADRESA ADRHI EQU 3DH ; POMOCNA ADRESA BRADR EQU 70H ; ADRESA V PC PRI PRERUSENI BRCODE EQU 72H ; KOD INSTRUKCE PRI PRERUSENI SPREG EQU 73H ; NOVY OBSAH (SP) PO GOTO HREG EQU 75H ; NOVY OBSAH (H) PO GOTO LREG EQU 76H ; NOVY OBSAH (L) PO GOTO DREG EQU 77H ; NOVY OBSAH (D) PO GOTO EREG EQU 78H ; NOVY OBSAH (E) PO GOTO BREG EQU 79H ; NOVY OBSAH (B) PO GOTO CREG EQU 7AH ; NOVY OBSAH (C) PO GOTO AREG EQU 7BH ; NOVY OBSAH (A) PO GOTO FREG EQU 7CH ; NOVY OBSAH (F) PO GOTO INOUT EQU 7DH ; POMOCNA PROMENA PRIKAZU INPUT A OUTPUT CONINP EQU 0B0H ; SKOK NA HANDLER KONZOLY - KLAVESNICE CONOUT EQU 0B3H ; SKOK NA HANDLER KONZOLY - OBRAZOVKY READIN EQU 0B6H ; SKOK NA HANDLER SNIMACE PUNOUT EQU 0BCH ; SKOK NA HANDLER DEROVACE USRPO EQU 0F0H ; ADRESA NEPOUZIVANEHO SKOKU LSTOUT EQU 0F3H ; SKOK NA HANDLER TISKARNY CONSTA EQU 0F6H ; SKOK NA HANDLER STATUSU KONZOLY NAME1 EQU 130H ; JMENO PROGRAMU PRECTENE Z KAZETY NAME2 EQU 170H ; JMENO HLEDANEHO PROGRAMU NA KAZETE PNADR EQU 1B0H ; ADRESA BUFFERU DEROVACE RDADR EQU 1B3H ; ADRESA BUFFERU SNIMACE PNPOI EQU 1B2H ; ADRESA UKAZATELE DEROVACE RDPOI EQU 1B5H ; ADRESA UKAZATELE SNIMACE PBLKC EQU 1B6H ; ADRESA CITACE BLOKU DEROVACE RBLKC EQU 1B8H ; ADRESA CITACE BLOKU SNIMACE PFILC EQU 1B7H ; ADRESA CITACE SOUBORU DEROVACE RFILC EQU 1B9H ; SDRESA CITACE SOUBORU SNIMACE RDSTS EQU 1BBH ; ADRESA STAVU LOGICKEHO ZARIZENI PRO CTENI PNSTS EQU 1BAH ; ADRESA STAVU LOGICKEHO ZARIZENI PRO ZAPIS TMPAR EQU 1F0H ; POMOCNA OBLAST PRO CTENI SOUBORU Z KAZETY KEYCD EQU 230H ; POLE VZORKU ZNAKU Z KLAVESNICE ZNAK EQU 235H ; VSTUPNI ZNAK Z KLAVESNICE UPLO EQU 236H ; PRIZNAK VSTUPU HORNICH ZNAKU CTRL EQU 237H ; PRIZNAK VSTUPU RIDICICH ZNAKU NUM EQU 238H ; PRIZNAK VSTUPU CISLIC CTN EQU 239H ; CITAC BLIKANI KURZORU ; STCKLN EQU 64 ; DELKA ZASOBNIKU ; KEYBAS EQU 0C3H ; KLIC PRO ROZPOZNAVANI BASICU ADRBAS EQU BASIC ; ADRESA - " - KEYTPR EQU 055H ; KLIC PRO ROZPOZNAVANI MAGNETOFONU ADRTPR EQU TAPREC ; ADRESA - " - ; ADRCIN EQU 04H ; DATOVY PORT 8212 ADRCST EQU 00H ; STAVOVY PORT 8216 RDYCIN EQU 08H ; MASKA STAVOVEHO BITU KLAVESNICE REPCIN EQU 04H ; MASKA STAVOVEHO BITU OPAKOVANI ZNAKU X KLAV. RDYRE1 EQU 02H ; MASKA STAVOVEHO BITU ZARIZENI 1 RDYRE2 EQU 01H ; MASKA STAVOVEHO BITU ZARIZENI 2 ADRPA EQU 08H ; ADRESA PORTU PA ADRPB EQU 09H ; ADRESA PORTU PB ADRPC EQU 0AH ; ADRESA PORTU PC ADRCT EQU 0BH ; ADRESA RIDICIHO PORTU CTRLWD EQU 90H ; RIDICI SLOVA PA=IN, PB=OUT, PC=OUT, M0 VSE PC0SET EQU 01H ; NASTAVENI PC0 PC0RES EQU 00H ; NULOVANI PC0 PC1SET EQU 03H ; NASTAVENI PC1 PC1RES EQU 02H ; NULOVANI PC1 PC4SET EQU 08H ; NASTAVENI PC4 PC4RES EQU 09H ; NULOVANI PC4 ADRBIP EQU 10H ; ADRESA ZVUKOVEHO PORTU ADROUT EQU 00H ; ADRESA VYSTUPNIHO PORTU 8216 MSKWD EQU 08H ; MASKA OBVODU 8214, POVOLUJE VSECHNY PRERUSENI ADRMSK EQU 14H ; ADRESA MASKOVEHO PORTU OBVODU 8214 ADRES EQU 18H ; ADRESA PRO NULOVANI REGISTRU ADRESY ZOBRAZOVANI ADSET EQU 1FH ; ADRESA PRO NASTAVENI REGISTRU ADRESY ZOBRAZOVANI BEEPLN EQU 80 ; DELKA PIPNUTI BEEPFQ EQU 60H ; VYSKA PIPNUTI ; ;--------------------------------------------------------------------- ; .PHASE MONIT ; ; ; ; TABULKA SKOKU DO ZAKLADNICH PODPROGRAMU: ; JMP COLDST ; STUDENY START MONITORU JMP CI ; VSTUP Z KONZOLY <A> JMP RI ; VSTUP ZE SERIOVEHO PORTU <A> JMP CO ; VYSTUP NA KONZILU <C> JMP PO ; VYSTUP NA SERIOVY PORT <C> JMP LO ; VYSTUP NA TISKARNU JMP CSTS ; STAVOVY PORT KONZOLY <A> JMP IOCHK ; ZJISTENI I/O-BYTU <A> JMP IOSET ; NASTAVENI I/O-BYTU <C> JMP MEMCK ; ZJISTENI KONCE UZIV. PAMETI RAM <AB> JMP IODEF ; VASTAVENI UZIVATELSKYCH V/V <C> JMP INTER ; SKOK DO OSERENI PRERUSENI JMP CRLF ; NOVY RADEK JMP EXPR ; VSTUP PARAMETRU, POCET C <C> JMP ERROR ; VYPIS '#' NA OBRAZOVKU JMP ASHEX ; PREVOD ASCII NA HEX, <A> JMP DADR ; ZOBRAZENI OBSAHU <HL> JMP DBYTE ; ZOBRAZENI OBSAHU <A> JMP HILO ; DEKREMENTACE <HL> A SROVNANI S <DE> JMP NEXT ; TEPLY START MONITORU JMP SPACE ; MEZERA NA CO JMP CINCR ; VSTUP NA ROZPOZNANI PRIKAZU JMP IMTEXT ; ZOBRAZENI TEXTU <HL>, D8 JMP ADRKUP ; ADRESA KURZORU DO <HL> JMP HXASC ; PREVOD HEX NA ASCII JMP TIMER ; CEKANI <BC> MILISEKUND JMP GETADR ; ADRESA SKRYTE PROMENNE DO <HL> JMP STJMB ; ULOZ <DE> NA [<HL>,<HL+1>] JMP ECHO ; VSTUP A ZOBRAZENI ZNAKU JMP BACST ; KROK ZPET NA OBRAZOVCE ; ; ; M O N I T ; ========= ; ; UVODNI CAST MONITORU, KTERA UMOZNUJE ; RESTART (STUDENY I TEPLY) SYSTEMU. PROVADI ; NASTAVOVANI PRACOVNICH PROMENNYCH, ZJISTUJE ; ROZSAH PAMETI RAM A NASTAVI SPOJOVACI ADRESY. ; OBSAHUJE TAKE VYHODNOCENI PRIKAZU OPERATORA. ; COLDST: LXI H,6 ; NASTAVENI PROZATIMNIHO VRCHOLU ZASOBNIKU SPHL ; NA ADRESU 0006H ZAMEZI POSKOZENI UZIV. PAM. CALL GETDIS ; ADRESA DISRAM <HL>, POCET RADKU <C> SPHL ; NASTAVENI SKUTECNEHO VRCHOLU ZASOBNIKU SHLD RAMEND ; NASTAVY KONEC PROGRAMOVE RAM XCHG LXI H,-STCKLN ; DELKA ZASOBNIKU DAD D ; KONEC UZIVATELSKE PAMETI XCHG PUSH H LXI H,UREND CALL GETADR ; ADRESA PROMENNE U(SER)R(AM)END CALL STJMB ; ULOZENI KONCE UZIV. RAM XTHL ; NA VRCHOL ZASOBNIKU ADRESA MSTACK MOV A,H XCHG ; POSLEDNI ADRESA V <DE> INR A ANI 11111000B ; VYBER BITU A15-A11 (PO DVOU KILECH) RRC RRC RRC ; POSUNUTI O 3 BITY DOPRAVA OUT ADRES ; VYNULOVANI REGISTRU ADRESY ZOBRAZOVANE RAM OUT ADSET ; NASTAVENI PLATNE ADRESY ZOBRAZOVANE RAM POP H ; ADRESA MSTACK DO <HL> CALL STJMB ; VRCHOL ZASOBNIKU DO MSTACK MVI M,0 ; KURZOR NA PRVNI RADEK (LINECO = 0) INX H MVI M,0 ; KURZOR NA POCATEK PRVEHO RADKU (CHARCO = 0) INX H MOV M,C ; POCET RADKU (Z PODPROGRAMU GETDIS) INX H MVI M,2FH ; POCET ZNAKU NA RADKU JE 48 ; PUSH D LXI H,CONINP LXI D,CI4 CALL STJMP ; NASTAVENI SKOKU PRO VSTUP Z KLAVESNICE LXI D,CO2 CALL STJMA ; NASTAVENI SKOKU VYSTUP NA OBRAZOVKU LXI H,CONSTA LXI D,CSTS1 CALL STJMP ; NASTAVENI SKOKU PRO STATUS KONZOLY POP D ; CALL GETSPR ; ADRESA PROMENNE SPREG DCX D DCX D MOV M,E INX H MOV M,D ; NASTAVENI POCATECNICH HODNOTY UKAZ. ZASOB. ; COLD2: CALL IMTEXT DB FF,'PLAN80A MON V2Q',BELL OR 80H ; LXI D,CO ; ADRESA OBSLUHY CO MVI C,6 ; V/V ZARIZENI LO CALL IODEF ; NASTAVENI SKOKU LO --> CO ; MVI A,MSKWD OUT ADRMSK ; NASTAVENI MASKY OBVODU 8214 ; COLD0: CALL CHKTPR ; JE PRITOMEN MAGNETOFON ? CZ TINIT ; INICIACE OBVODU MAGNETOFONU A PRIRAZENI PO,RI ; MVI A,CTRLWD OUT ADRCT ; LDA ADRBAS ; JE PRITOMEN BASIC CPI KEYBAS JZ BASIC ; ANO - SKOK DO BASICU ; NEXT: CALL GETSTK ; ADRESA PROMENNE MSTACK CALL NEXT6 ; UKAZATEL ZASOBNIKU DO <HL> SPHL ; NASTAVENI UKAZATELE ZASOBNIKU ; LXI H,JMPMON LXI D,COLDST CALL STJMA ; NASTAVENI SKOKU DO STUDENEHO STARTU MONITORU ; CALL CRLF ; PRECHOD NA NOVY RADEK MVI C,'.' CALL CO ; VYCKAVACI TECKA NA DISPLAY CALL ECHO ; VSTUP A ZOBRAZENI ZNAKU LXI D,NEXT ; NAVRATOVA ADRESA PRO RETURN PUSH D ; SIMULACE CALL PRO PRIZNAK LXI B,(CTEND SHL 8) OR 2 ; <B>...DELKA TABULKY <C>...2...(EXPR) LXI H,CTABL ; ZACATEK TABULKY SUI 'A' ; PREVOD NA 0-26 JM ERROR ; ZNAK ASCII < KOD 'A' ? CMP B ; SROVNANI KODU S DELKOU TABULKY JNC ERROR ; ZNAK ASCII > KOD 'X' ? CALL GETTAB MOV A,H ; VYSSI BYTE ADRESY PRIKAZU ANI 0FCH ; VYBER BITU A15 AZ A10 CPI MONIT SHR 8 ; SROVNANI S ADRESOU MONITORU JNC NEXT4 ; PROVED MONITOROVSKY PRIKAZ CPI TAPREC SHR 8 ; SROVNANI S ADRESAMI MAGNETOFONU JC NEXT2 ; PROVED PRIKAZ V BASICU CALL CHKTPR ; PROGRAM MAGNETOFONU PRITOMEN? JNZ ERROR ; NENI --> CHYBA NEXT4: PCHL ; PROVED PRIKAZ NEXT2: LDA ADRBAS CPI KEYBAS ; JE PRITOMEN TINY BASIC? JZ NEXT4 ; ANO - PROVED PRIKAZ BASICU ; ; ; ; E R R O R ; ========= ; ; PODPROGRAM ERROR PROVADI VYPIS HLASENI O VYSKYTU CHYBY ; VE FORME DVOJITEHO KRIZKU (#). ; ; POSKOZENE REGISTRY: - - - ; ERROR: PUSH B MVI C,'#' ; KOD ZNAKU # JMP WQUA0 ; VYPIS ZNAKU # ; ; ; ; G E T T A B ; =========== ; ; PODPROGRAM PRO VYVOLANI ADRESY PRIKAZU Z TABULKY DO <HL>, OFFSET JE ; V <A>, ADRESA POCATKU TABULKY JE V <HL> ; ; POSKOZENE REGISTRY: A,F,H,L,D,E ; GETTAB: ADD A ; ZDVOJNASOBENI ODSTUPU (ADRESA...2 BYTY) MVI D,0 ; VYNULOVANI VYSSIHO BYTU OFFSETU MOV E,A ; ULOZENI NIZSIHO BYTU OFFSETU DAD D ; VYPOCET VYSLEDNE ADRESY DO <HL> NEXT6: MOV A,M ; DOLNI BYTE ADRESY PRIKAZU INX H ; INKREMENTACE UKAZATELE MOV H,M ; HORNI BYTE ADRESY MOV L,A ; ADRESA PRIKAZU V <HL> RET ; ; ; ; TABULKA ADRES OBSLUH PRIKAZU ; ============================ ; CTABL: DW TAPP ; A...(APPEND) PRIPOJENI BINARNIHO SOUBORU DW BASIC ; B...(BASIC) STUDENY START BASICU DW CONIT ; C...(CONTINUE) TEPLY START BASICU DW DISPL ; D...(DISPLAY) ZOBRAZENI OBSAH PAMETI DW TEOF ; E...(END OF FILE) ZAPIS UZAV. HEX. SOUBORU DW FILL ; F...(FILL) VYPLNENI PAMETI ZNAKEM DW GOTO ; G...(GOTO) SKOK DO PROGRAMU DW ERROR ; H... DW INPUT ; I...(INPUT) VSTUP Z PORTU DW TJOIN ; J...(JOIN) NASTAVENI ADRES MAGNETOFONU DW TCLOS ; K...(CLOSE) UZAVRENI ZAPSANEHO SOUBORU DW TLOAD ; L...(LOAD) OVLADANI MOTORKU MAGNETOFONU DW MOVE ; M...(MOVE) PRESUN OBLASTI PAMETI DW ERROR ; N... DW OUTPT ; O...(OUTPUT) VYSTUP NA PORT DW TPUT ; P...(PUT) ZAPIS BINARNIHO SOUBORU NA PASKU DW TQUAF ; Q...(QUAFF) CTENI BINARNIHO SOUBORU Z PASKY DW TRD ; R...(READ) CTENI HEX. SOUBORU Z PASKY DW SUBST ; S...(SUBSTITUTE) ZMENA OBSAHU PAMETI DW TDIR ; T...(TAPE) VYPIS NAZVU VSECH SOBORU DW TUNNA ; U...(UNNAMED) POJMENOVANI NOVE KAZETY DW ERROR ; V... DW TWR ; W...(WRITE) ZAPIS HEX. SOUBORU NA PASKU CTEND EQU ($-CTABL)/2 ; POCET POLOZEK TABULKY ; ; NAVRAT Z PRIKAZU VZDY: RET ; ; ; G E T D I S ; =========== ; ; ; PODPROGRAM GETDIS PROVADI ZJISTENI KONCE PAMETI RAM> PRI ; SVE CINNOSTI PREDPOKLADA SPOJITOU OBLAST PAMETI (BEZ ME- ; OSAZENEHO ADRESOVEHO PROSTORU), KTERY PROHLEDAVA PO KILECH OD ; KONCE. DALE PROVADI VYPOCET ADRESY ZACATKU OBRAZOVE ; PAMETI A JI PRISLUSEJICI POCET RADKU. VYCHAZI Z ADRESY KONCE ; PAMETI RAM. POSKYTUJE POSLEDNI BUNKU PAMETI RAM. ; ADRESU OBRAZOVE PAMETI ULOZI DO <HL>, POCET RADKU DO <C>. ; ; POSKOZENE REGISTRY: A,F,B,C,D,E,H,L ; GETDIS: LXI H,03FFH ; ADRESA KONCE PAM.PROSTORU + 3FF LXI D,0FC00H ; DVOKOVY DOPLNEK 1 KILA GETD0: DAD D ; VYPOCET DALSI ADRESY MOV A,M CMA ; INVERZE PUVODNIHO OBSAHU MOV M,A ; TESTOVACI ZAPIS CMP M ; OBSAH PLATNY ? JNZ GETD0 ; NE - DALSI KILO MOV A,H ; HORNI BYTE ADRESY XCHG ; ULOZENI ADRESY KONCE RAM ANI 0FCH ; VYBER 'KILOVICH' BITU LXI H,1FFH ; ADRESA DISRAM PRO 1 KILO RAM MVI C,7 ; 8 RADKU RZ ; RAM = 1K CPI 4 DAD H ; ADRESA DIRAM PRO 2 KILA INX H MVI C,0FH ; 16 RADKU RZ ; RAM = 2K CPI 8 MVI H,7 ; ADRESA DISRAM PRO 3 KILA RZ ; RAM = 3K XCHG ; OBNOVENI ADRESY KONCE RAM LXI D,0F800H ; DVOJKOVY DOPLNEK 2 KIL DAD D ; VYPOCET ADRESY DISRAM PRO 4K AZ 15K RAM MVI C,1FH ; 32 RADKU RET ; ; ; ; ; N U M L I N ; =========== ; ; PODPROGRAM PRO ZJISTENI ADRESY PROMENNE S POCTEM ZOBRAZOVANYCH ; RADKU NA OBRAZOVCE. VYSLEDNA ADRESA JE V <HL>. ; ; POSKOZENE REGISTRY: H,L ; NUMLIN: LXI H,LINENO ; ODSTUP PROMENNE S POCTEM RADKU NUML0: CALL GETADR ; ZJISTENI ADRESY TETO PROMENE RET ; ; ; ; N U M C H R ; =========== ; ; PODPROGRAM PRO ZJISTENI ADRESY PROMENNE S POCTEM ZNAKU, ; ULOZI SE DO <HL>. ; ; POSKOZENE REGISTRY: H,L ; NUMCHR: LXI H,CHARNO JMP NUML0 ; ; ; ; J A D R ; ======= ; ; PODPROGRAM PRO SKOK NA ADRESU DANOU ODSTUPEM V <HL> OD ADRESY ; DISRAM, PREDPOKLADA OBSAH <HL> V ZASOBNIKU, TENTO OBSAH OBNOVY. ; ; POSKOZENE REGISTRY: H,L,SP ; JADR: CALL GETADR ; VYPOCET FYZICKE ADRESY XTHL ; OBNOVENI <HL> RET ; SKOK NA VYPOCTENOU ADRESU ; ; ; ; G E T L I N ; =========== ; ; PODPROGRAM PRO ZJISTENI OBSAHU CITACE RADKU A JEHO ULOZENI DO <A> ; ; POSKOZENE REGISTRY: H,L,A ; GETLIN: LXI H,LINECO ; ODSTUP CITACE RADKU JMP GETC0 ; ; ; ; G E T C H R ; =========== ; ; PODPROGRAM PRO ZJISTENI OBSAHU CITACE ZNAKU A JEHO ULOZENI DO <A> ; ; POSKOZENE REGISTRY: H,L,A ; GETCHR: LXI H,CHARCO ; ODSTUP CITACE ZNAKU GETC0: CALL GETADR ; VYPOCET ADRESY CITACE ZNAKU MOV A,M ; PRICTENI OBSAHU CITACE ZNAKU RET ; ; ; ; G E T S T K ; =========== ; ; PODPROGRAM PRO ZJISTENI ADRESY PROMENE MSTACK (VRCHOL ZASOBNIKU ; PRO MONITOR). ; ; POSKOZENE REGISTRY: H,L ; GETSTK: LXI H,MSTACK ; ODSTUP PROMENNE MSTACK JMP GETC0 ; VYPOCET ADRESY PROMENNE MSTACK ; ; ; G E T S P R ; =========== ; ; PODPROGRAM PRO ZJISTENI ADRESY PROMENNE SPREG (VRCHOL ZASOBNIKU ; PRO UZIVATELE). ; ; POSKOZENE REGISTRY: H,L ; GETSPR: LXI H,SPREG JMP GETC0 ; ; ; ; S T J M P ; ========= ; ; PODPROGRAM ULOZI DO <HL> ADRESU URCENOU ODSTUPEM OD DISRAM ULOZENYM ; V <HL>, PAK ULOZI KOD 0C3H NA ADRESU <HL>, ABSAH <E> NA ; ADESU <HL+1> A <D> NA ADRESU <HL+2>. PO VYSTUPU Z PODPROGRAMU ; JE V <HL> HODNOTA ZVETSENA O 3 (HL+2). ; ; POSKOZENE REGISTRY: H,L ; STJMP: CALL GETADR ; VYPOCET ADRESY A ULOZENI DO <HL> STJMA: MVI M,0C3H ; KOD INSTRUKCE SKOKU DO [<HL>] INX H STJMB: MOV M,E ; ULOZENI DOLNIHO BYTU ADRESY SKOKU INX H MOV M,D ; ULOZENI HORNIHO BYTU ADRESY SKOKU INX H RET ; ; ; ; A D R K U R ; =========== ; ; PODPROGRAM ADRKUR VYPOCITA ZE SOURADNICOVYCH UKAZATELU ; LINECO (CITAC RADKU) A CHARCO (CITAC ZNAKU) FYZICKOU ; ADRESU PRISLUSNEHO MISTA V OBRAZOVE PAMETI DISRAM. ; VYSLEDNOU ADRESU UKLADA DO <HL>. ; ; POSKOZENE REGISTRY: H,L ; ADRKUP: PUSH PSW PUSH D LXI D,64 ; POCET BYTU NA JEDEN RADEK CALL GETLIN ; OBSAH CITACE RADKU DO <A> LHLD RAMEND INX H ; ZACATEK OBRAZOVE PAMETI V <HL> ADRK2: DCR A JM ADRK1 ; PRES VSECHNY RADKY ? DAD D ; VYPOCET BYTU V PREDCH. RADCICH JMP ADRK2 ADRK1: PUSH H MVI D,0 CALL GETCHR ; OBSAH CITACE ZNAKU DO <A> MOV E,A POP H ; OBNOVENI <HL> DAD D ; PRICTENI POCTU ZNAKU V PRUB. RADKU POP D POP PSW RET ; ; ; ; C I N C R ; ========= ; ; PODPROGRAM CINCR PROVADI VSTUP, ZOBRAZENI A ANALIZU ; ZNAKU Z KLAVESNICE. ZNAK JE V REGISTRU <A>, POLE ; JEHO HODNOTY NASTAVUJE PRIZNAKY NASLEDOVNE: ; ; ZNAK FF-C FF-Z ; , SP 0 1 ; CR 1 1 ; OSTATNI 0 0 ; ; ; POSKOZENE REGISTRY: A,F ; CINCR: CALL ECHO ; VSTUP A ZOBRAZENI ZNAKU ANAL: CPI ',' ; ANAJIZATOR ZNAKU V <A> RZ CPI SPC RZ ; PRO , A SP ... FF-Z = 1, FF-C = 0 CPI CR STC RZ ; PRO CR ... FF-Z = 1, FF-C = 1 CMC RET ; JINY ZNAK ... FF-Z = 0, FF-C = 0 ; ; ; ; ; G E T A D R ; =========== ; ; PODPROGRAM GETADR UMOZNUJE VYPOCET ADRESY ; PROMENNYCH UMISTENYCH V NEVIUZITE CASTI ; PAMETI RAM URCENE PRO UCHOVANI OBRAZU. VSTUPNI ; PROMENOU JE ODSTUP OD ZACATKU DISRQM, UKLADA ; SE DO <HL>, VYSLEDNA ADRESA JE V <HL> ; ; POSKOZENE REGISTRY: H,L ; GETADR: PUSH D PUSH PSW XCHG ; ULOZENI ODSTUPU DO <DE> LHLD RAMEND ; ADRESA KONCE PROGRAMOVE PAMETI INX H ; ADRESA ZACATKU OBRAZOVE RAM DAD D ; VYPOCET VYSLEDNE ADRESY DO <HL> POP PSW ; FF-C JE POSKOZENO INSTRUKCI DAD POP D RET ; ; ; ; D A D R ; ======= ; ; PODPROGRAM DADR (DBYTE) SLOUZI K ZOBRAZENI ADRESY ; (BYTU) ULOZENEHO V REGISTRECH <HL> (V REG. <A>) NA ; OBRAZOVCE POMOCI HEXADECIMALNI NOTACE. ; ; POSKOZENE REGISTRY: A,F,C ; DADR: MOV A,H ; VYSSI BYTE ADRESY CALL DBYTE ; JEJI ZOBRAZENI MOV A,L ; NIZSI BYTE ADRESY DBYTE: PUSH PSW RRC RRC RRC RRC ; DELENI <A> / 16 ANI 0FH ; HORNI NIBBLE CALL DBYT0 ; PREVOD A ZOBRAZENI POP PSW ; OBNOVENI ODSAHU <A> ANI 0FH ; DOLNI NIBBLE DBYT0: CALL HXASC ; PREVOD0HEX --> ASCII0<C> ; ; ; ; C O ; === ; ; ; PODPROGRAM CO PROVADI VYSTUP ZNAKU ULOZENEHO V REGISTRU ; <C> NA OBRAZOVKU NA MISTO URCENE SOURADNICEMI LINECO A ; CHARCO. SOUCASNE SIMULUJE CHOVANI OBVODOVE KONZOLY ; PRO ZNAKY FF,BS,CR,LF,HT,HOME,DL,DSCR A BELL. ; ; POSKOZENE REGISTRY: - - - ; CO: PUSH H LXI H,CONOUT ; SPOJOVACI ADRESA JMP JADR ; SKOK NA NI ; CO2: PUSH H PUSH PSW MOV A,C LXI H,CO0 ; NAVRATOVA ADRESA PUSH H ; SIMULACE CALL CPI CR ; JDE O ZNAK 'CR' ? JZ CARRET ; ZACATEK RADKU CPI LF ; JDE A ZNAK 'LF' ? JZ LINEF ; O JEDEN RADEK DOLU MOV A,C ; OBNOVENI <A> CPI BS ; JDE O ZNAK 'BS' ? JZ BACST ; POSUN ZPET CPI FF ; JDE O ZNAK 'FF' ? JZ FORFI ; VYMAZ DISRAM CPI HOME ; JDE O ZNAK 'HOME' ? JZ GHOME ; DO LEVEHO HOR. ROHU CPI DL ; JDE O ZNAK 'DL' ? JZ DELLIN ; VYMAZ RADKU CPI DSCR ; JDE O ZNAK 'DS' ? JZ DELSCR ; VYMAZ OBRAZOVKY CPI BELL ; JDE O ZNAK 'BELL' ? JZ BEEPS ; PIPNUTI ; POP H ; SPLACHNUTI NAVR. AD. CALL ADRKUP ; ADRESA KURZORU <HL> MOV M,C ; VYPIS ZNAKU CALL GETCHR ; CISLO ZNAKU V <A> INR M ; DALSI POZICE CALL NUMCHR ; ADRESA POCTU ZNAKU CMP M ; NA KONCI RADKU ? CZ CRLF ; ANO - NOVY RADEK CO0: POP PSW POP H RET ; ; ; ; ; E C H O ; ======= ; ; PODPROGRAM ECHO PROVADI VSTUP A ZOBRAZENI ZNAKU Z ; KLAVESNICE. ZNAK JE ULOZEN V REGISTRU <A>. ; ; POSKOZENE REGISTRY: A,F ; ECHO: PUSH B CALL CI ; VSTUP ZNAKU MOV C,A CALL CO ; ZOBRAZENI ZNAKU MOV A,C POP B RET ; ; ; ; S D A D R ; ========= ; ; PODPROGRAM PRO ZOBRAZENI <HL> A MEZERY NA OBRAZOVCE. ; ; POSKOZENE REGISTRY: A,F,C ; SDADR: CALL DADR ; ZOBRAZENI <HL> ; ; ; ; S P A C E ; ========= ; ; PODPROGRAM SPACE PROVEDE VYPIS MEZERY NA OBRAZOVKU. ; ; POSKOZENE REGISTRY: - - - ; SPACE: PUSH B MVI C,SPC ; KOD MEZERY DO <C> JMP WQUA0 ; PROVEDENI VYPISU ; ; ; ; E D A D R ; ========= ; ; PODPROGRAM PRO ZOBRAZENI <HL> A ROVNITKA NA OBRAZOVCE. ; ; POSKOZENE REGISTRY: A,F,C ; EDADR: CALL DADR ; ZOBRAZENI <HL> ; ; ; ; E Q U A T E ; =========== ; ; PODPROGRAM EQUATE PROVEDE VYPIS ROVNITKA NA OBRAZOVKU. ; ; POSKOZENE REGISTRY: - - - ; EQUATE: PUSH B MVI C,'=' ; ZNAK ROVNITKO DO <C> WQUA0: CALL CO ; ZOBRAZENI ROVNITKA POP B RET ; ; ; ; E X P R ; ======= ; ; PODPROGRAM EXPR UMOZNUJE CSTYP PARAMETRU (ADRES,BYTU) ; DO PROGRAMU. POCET PARAMETRU JE V REGISTRU <C>. ; JEDNOTLIVE PARAMETRY UKLADA POSTUPNE DO ZASOBNIKU. ; ; POSKOZENE REGISTRY: A,F,B,C,H,L,SP ; EXPR: PUSH PSW EXPR0: POP PSW CALL EQUATE ; ROVNITKO NA DISPLEJ LXI H,0 ; VYNULOVANI <HL> EXPR1: CALL ECHO ; VSTUP A ZOBRAZENI ZNAKU CPI ESC ; JDE O ZNAL 'ESC' ? JZ NEXT ; POKUT ANO -> PRERUS PRIKAZ MOV B,A ; ULOZENI ZNAKU DO <B> CALL ASHEX ; PREVOD ZNAKU Z ASCII NA HEX JC EXPR2 ; NEJDE O HEXADECIMALNI CIFRU ? DAD H DAD H DAD H DAD H ; VYNASOBENI <HL> * 16 ORA L ; PRIDANI DALSIHO NYBBLU MOV L,A ; DO <HL> JMP EXPR1 ; VSTUP DALSI CIFRY EXPR2: ADI '0' ; OPRAVA KODU PO ASHEX CALL ANAL ; ANALIZATOR ZNAKU JZ EXPR3 ; PRIJAT UKONCOVACI ZNAK 'SP' , ',' , 'CR' CALL ERROR ; HLASENI NESMISLNEHO OPERANDU - SPLACHNOUT JMP EXPR ; VSTUP NAHRADNIHO OPERANDU EXPR3: XTHL ; ULOZENI ZIZKANEHO OPERANDU DO ZASOBNIKU PUSH H ; OBNOVENI NARATOVE ADRESY PUSH PSW DCR C ; DEKREMENTACE CITACE OPERANDU JNZ EXPR0 ; VSECHNY OPERANDY NACTENY ? POP PSW RET ; ; ; ; ; A S H E X ; ========= ; ; PODPROGRAM ASHEX ROVADI PREVOD HEX. CISLA ZADA- ; NEHO POMOCI ASCII ZNAKU NA HEX. HODNOTU. PUNODNI ; ZNAKY V REGISTRU <A>, VYSLEDEK V REGISTRU <A>. ; AUTOMATICKY POSOUVA RAD PRI VICENASOBNEM VOLANI, ; TAKZE LZE PREVADET AZ CTYR-NIBBLOVA HEX. CISLA. ; ; POSKOZENE REGISTRY: A,F ; ASHEX: SUI '0' RC ; JE KOD ZNAKU < 30H ? ADI 0E9H RC ; JE KOD ZNAKY > 46H ? ADI 6 JP ASHE0 ; JDE O PISMENOVY KOD (A-F) ? ADI 7 RC ; JDE O ZNAKY : (3AH) AZ (60H) ? ASHE0: ADI 10 ; POSUN NA NOVOU DEKADU ORA A ; NULOVANI PRIZNAKU NESMISLNEHO KODU RET ; FF-C = 0 => OK ; ; ; ; H X A S C ; ========= ; ; PODPROGRAM HXASC PROVADI PREVOD HEX. HODNOTY ; NA KOD EKVIVALENTNIHO ZNAKU ASCII. HEX. HODNOTA ; JE V REGISTRU <A>, KOD ZNAKU V REGISTRU <C>. ; ; POSKOZENE REGISTRY: C ; HXASC: PUSH PSW ADI 90H ; PREHODNI KONSTANTA DAA ACI 40H ; VYTVORENI KODU ZNAKU DAA MOV C,A ; ULOZENI KODU DO <C> POP PSW RET ; ; ; ; L I N E F ; ========= ; ; ; PODPROGRAM LINEF PROVADI PRECHOD NA NOVY RADEK. ; POKUT JDE O RADEK POSLRDNI, PAK SLEDUJE PRI- ; TOMNOST EXP-MONITORU. PRI JEHO PRITOMNOSTI VY- ; VOLA PODPROGRAM ROLL (POSUV OBSAHU OBRAZOVKY ; O JEDEN RADEK NAHORU, STARY PRVNI RADEK SE STRACI). ; PRI NEPRITOMNOSTI EXPANDU PROVEDE PRECHOD NA PRV- ; NI ZOBRAZOVANY RADEK. POZICE KURZORU V RADKU ZUSTANE ; NEZMENENA. ; ; POSKOZENE REGISTRY: - - - ; ; LINEF: PUSH PSW PUSH H CALL GETLIN ; OBSAK CITACE RADKU PUSH H CALL NUMLIN ; ADRESA BUNKY S POCTEM RADKU CMP M ; NA POSLEDNIM RADKU ? JC LINE1 JZ LINE0 ; ZMENA POCTU RADKU ? MOV A,M ; NOVY POCET RADKU POP H ; KURZOR NA POSLEDNI RADEK PUSH H MOV M,A LINE0: CALL ROLL ; ROLOVANI DISPLAYE, KURZOR NEPOSUNE CALL DELLIN ; VYMAZ CASTI RADKU OD KURZORU JMP LINE2 LINE1: INR A POP H ; KURZOR NA DALSI RADEK PUSH H MOV M,A LINE2: POP H POP H POP PSW RET ; ; ; ; C A R R E T ; =========== ; ; PODPROGRAM CARRET UMISTI KURZOR NA ZACATEK PRAZDNEHO RADKU. ; ; POSKOZENE REGISTRY: - - - ; CARRET: PUSH H PUSH PSW CALL GETCHR ; V <HL> ADRESA CITACE ZNAKU MVI M,0 POP PSW POP H RET ; ; ; ; C R L F ; ; PODPROGRAM CRLF PROVEDE PRECHOD NA ZACATEK NASLEDUJICIHO RADKU, ; KTERY CELY VYMAZE (POKUD JE PRITOMEN EXPAND). ; ; POSKOZENE REGISTRY: - - - ; CRLF: CALL CARRET ; KURZOR NA ZACATEK RADKU JMP LINEF ; KURZOR NA NASLEDUJICI RADEK ; ; ; ; I N T E R ; ========= ; ; INTER OSETRUJE PRERUSENI. OBSAHY REGISTRU SE ; ULOZI DO PRACOVNIHO POLE PAMETI PRIKAZU GOTO. ; DALE SE ZJISTI, ZDA SLO O PRERUSENI PROGRAMOVE ; NEBO OBVODOVE. POKUT BYLO PROGRAMOVE, URCI ; SE POMOCI OBSAHU PROMENNE BRADR, ZDA SLO O PRE- ; RUSENI VYVOLANE PRERUSOVACI ADRESOU PRIKAZU ; GOTO. POKUT ANO, OBNOVI SE PUVODNI KOD NA ; TETO ADRESE. ABSAH VSECH REGISTRU SE ZABRAZI ; A PROVEDE SE SKOK NA HORKY START MONITORU. ; ; POSKOZENE REGISTRY: A,F,B,C,D,E,H,L,SP ; INTER: PUSH H PUSH D PUSH B PUSH PSW LXI H,0 DAD SP ; V <HL> VRCHOL ZASOBNIKU XCHG LXI H,FREG CALL GETADR ; ADSTUP PROMENNE 'FRAG' MVI B,8 INTER2: LDAX D INX D MOV M,A DCX H DCR B JNZ INTER2 ; ULOZENI REGISTRU DO PRAC. POLE INX D INX D ; SPLACHNUTI POSUNU VRCHOLU OD RST MOV M,D DCX H MOV M,E ; ULOZENI PUV. VRCHOLU ZASOBNIKU POP PSW POP B POP D POP H ; OBNOVENI ABSAHU REGISTRU INTER3: CALL CRLF ; NOVY RADEK PUSH B ; [SP]=<BC>,<ADR> PUSH H LXI H,5043H ; KODY 'PC' DO <HL> CALL INTER1 ; VYPIS 'PC=' POP H POP B ; [SP]=<ADR> XTHL ; [SP] <--> <HL> PUSH B ; [SP]=<BC>,<HL> PUSH PSW ; [SP]=<AF>,<BC>,<HL> DCX H ; ADRESA PRERUSUJICI INSTRUKCE RSTX CALL EDADR ; ZOBRAZENI <HL>=ADR A VYPIS = MOV A,M CALL DBYTE ; ZOBRAZENI [HL]=[ADR]...INSTR PUSH H LXI H,BRADR ; ODSTUP PROMENNE 'BRADR' CALL GETADR ; ADRESA 'BRADR' DO <HL> MOV A,M POP H ; OBNOVENI <HL> CMP L JNZ INTER0 ; POKUT NE - POKRACUJ V ZOBRAZOVANI PUSH H LXI H,BRADR + 1 CALL GETADR MOV A,M POP H CMP H JNZ INTER0 ; TO STEJNE PRO HI-BYTE ADRESY BREAKU PUSH H LXI H,BRCODE CALL GETADR MOV A,M POP H MOV M,A ; OBNOVENI KODU INSTRUKCE PRI BREAKU INTER0: POP PSW ; [SP]=<BC>,<HL> POP B ; [SP]=<HL> POP H ; [SP]= CALL SPACE PUSH B ; [SP]=<BC> PUSH PSW ; [SP]=<AF>,<BC> PUSH H LXI H,484CH ; KODY 'HL' DO <HL> CALL INTER1 ; VYPIS 'HL=' POP H CALL EDADR ; ZOBRAZENI <HL> A VYPIS = MOV A,M CALL DBYTE ; ZOBRAZENI [HL] CALL SPACE PUSH H LXI H,5350H ; KODY 'SP' DO <HL> CALL INTER1 ; VYPIS 'SP=' POP H LXI H,4 DAD SP ; VYPOCET HODNOTY SP PRI PRERUSENI CALL EDADR ; ZOBRAZENI TETO ADRESY A '=' CALL NEXT6 ; V <HL> VRCHOL ZASOBNIKU PRI PRERUSENI CALL DADR ; ZOBRAZENI TETO ADRESY CALL CRLF ; NOVY RADEK LXI H,4146H ; KODY 'AF' DO <HL> CALL INTER1 ; VYPIS 'AF=' POP H ; [SP]=<BC> CALL SDADR ; ZOBRAZENI <HL>=<AF> A ' ' LXI H,4243H ; KODY 'BC' DO <HL> CALL INTER1 ; VYPIS 'BC=' POP H ; [SP] = JAKO PRED PRERUSENIM CALL SDADR ; ZOBRAZENI <HL>=<BC> A ' ' LXI H,4445H ; KODY 'DE' DO <HL> CALL INTER1 ; VYPIS 'DE=' XCHG ; VYMENA <HL> <--> <DE> CALL DADR ; ZOBRAZENI <HL>=<DE> JMP NEXT ; NAVRAT DO MONITORU ; INTER1: MOV C,H CALL CO ; ZOBRAZENI OBSAHU <H> ASCII MOV C,L CALL CO ; ZOBRAZENI OBSAHU <L> ASCII CALL EQUATE ; ZOBRAZENI '=' RET ; ; ; ; C H K P R ; ========= ; ; PODPROGRAM CHKTPR ZJISTUJE PRITOMNOST ; PROGRAM OBSLUHY MAGNETOFONU. JE-LI ; PRITOMEN, JE FF-Z NASTAVEN, NENI-LI PRITOMEN, ; JE FF-Z NULOVAN. ; ; POSKOZENE REGISTRY: A,F ; CHKTPR: LDA ADRTPR ; CTENI Z CHAR. BUNKY OBSLUHY MGF CPI KEYTPR ; SROVNANI S KLICEM RET ; ; ; ;***************************************************************** ; ; P R I K Z Y ; ########### ; ; ; ; S U B S T ; ========= ; ; PRIKAZ SUBST UMOZNUJE ZAMENIT OBSAH LIBOVOLNE BUNKY ; PAMETI NOVYM OBSAHEM. MA JEDINY VSTUPNI PARAMETR - ; ADRESU PRVNI PREPISOVANE BUNKY A SOUBOR PRACOVNICH ; PARAMETRU - NOVE OBSAHY PO SOBE JDOUCICH BUNEK POCI- ; NAJE URCENOU PRVNI BUNKOU. "SP" NEMENI OBSAH - INKRE- ; MENTUJE ADRESU, "CR" UKONCI PRIKAZ. PRI CHYBE V ZADAVANI ; PRVEHO ZNAKU SE OPRAVA PROVEDE STISKNUTIM LIBOVOLNE ; KLAVESY MIMO HEXADECIMALNICH A RIDICICH ZNAKU. TIM SE ; PUVODNI ZNAK IGNORUJE A VYPISE SE ZNOVU ROVNITKO. ; PRI CHYBE V DRUHEM ZNAKU JE TREBA ZADAT OBA ZNAKY ZNOVU ; OPAKOVANIM CELEHO PRIKAZU SUBST. ; SUBST: DCR C ; VSTUP JEDNOHO OPERANDU CALL EXPR ; PROVEDENI VSTUPU CALL CRLF ; NOVY RADEK POP H ; POCATECNI ADRESA DO <HL> SUBS0: CALL SDADR ; ZOBRAZENI ADRESY MOV A,M ; PRECTI OBSAH PAMETI CALL DBYTE ; ZOBRAZ OBSAH PAMETI CALL SPACE ; ZOBRAZ MEZERU SUBS1: CALL CINCR ; VSTUP,ECHO A ANALIZA ZNAKU RC ; PRO 'CR' UKONCI PRIKAZ JZ SUBS4 ; PRO 'SP' A ',' DALSI BUNKA CALL ASHEX ; PRI OSTATNICH ZNACICH PREVOD NA HEX CC ERROR ; HLASENI CHYBY JC SUBS1 ; VSTUP NAHRADNIHO ZNAKU MOV B,A ; ULOZENI HORNI CIFRY DO <B> SUBS2: CALL CINCR ; ECHO A ANALIZA ZNAKU JZ SUBS3 ; PRO 'CR','SP',',' KONEC VSTUPU CALL ASHEX ; OSTATNI = DOLNI CIFRA, PREVOD CC ERROR ; HLASENI CHYBY JC SUBS1 ; VSTUP NAHRADNIHO CISLA MOV C,A ; DOLNI CIFRA DO <C> MOV A,B ; HORNI CIFRA DO <A> RRC RRC RRC RRC ; NASOBENI HORNI CIFRY * 16 ADD C ; PRICTENI DOLNI CIFRY MOV M,A ; ULOZENI NOVEHO OBSAHU RAM JMP SUBS4 ; NOVA BUNKA SUBS3: MOV M,B ; ULOZENI JEDNOCIFERNEHO CISLA SUBS4: INX H ; INKREMENTACE UKAZATELE PAMETI CALL CRLF ; PRECHOD NA NOVY RADEK JMP SUBS0 ; DALSI BUNKA ; ; ; ; ; ; G O T O ; ======= ; ; PRIKAZ GOTO UMOZNUJE START UZIVATELSKYCH PROGRAMU. ; MA DVA VSTUPNI PARAMETRY: STARTOVACI ADRESU PROGRAMU ; A NEPOVINNOU (PRI STISKU "SP" PO START. ADRESE) ADRESU ; PRERUSENI BEHU PROGRAMU S VYPISEM OBSAHU REGISTRU (V ; TOMTO PRIPADE SE NA ADRESU 38H UKLADA SKOK DO INTER). ; OBSAHY ZUSTAVAJI ZACHOVANY V PRACOVNI OBLASTI PAMETI A ; OBNOVI SE PRI OPETNEM SPUSTENI PROGRAMU PRIKAZEM GOTO. ; PRI SPOUSTENI PROGRAMU LZE POCATECNI HODNOTY REGISTRU ; CPU NASTAVIT NAPR. PRIKAZEM SUBST V PRISLUSNE PRACOVNI ; OBLASTI PAMETI (SPREG - HREG). ; GOTO: POP H ; SPLACHNUTI NAVRATOVE ADR. NA NEXT LXI H,BRCODE ; ODSTUP PROMENNE 'BRCODE' CALL GETADR ; ADRESA PROMENNE 'BRCODE' DO <HL> MVI M,0FFH ; VYPLNENI PROMENNE 'BRCODE' DCR C ; VSTUP JEDINEHO PARAMETRU CALL EXPR ; VSTUP STARTOVACI ADRESY JC GOTO0 ; NEBUDE ADRESA PRERUSENI ? LXI H,INTADR LXI D,INTER CALL STJMA ; NASTAVENI SKOKU OBSLUHY RST 7 MVI C,1 CALL EXPR ; VSTUP ADRESY PRERUSENI POP D ; ADRESA PRERUSENI DO <DE> LXI H,BRADR ; ODSTUP PROMENNE 'BRADR' CALL GETADR ; ADRESA PROMENNE 'BRADR' CALL STJMB ; ULOZENI ADRESY PRERUSENI DO 'BRADR' LDAX D ; KOD INSTRUKCE NA ADRESE PRERUSENI MOV M,A ; ULOZENI TOHOTO KODU DO 'BRCODE' MVI A,0FFH ; KOD INSTRUKCE RST7 STAX D ; ULOZENI KODU RST7 NA ADRESU PRERUSENI GOTO0: CALL GETSPR ; ADRESA PROMENNE 'SPREG' MOV E,M INX H MOV D,M ; V <DE> NOVY OBSAH UKAZATELE ZASOBNIKU INX H MVI C,8 GOTO1: MOV A,M ; CTENI OBSAHU REGISTRU Z PR. OBL. RAM DCX D INX H STAX D ; UKLADANI OBSAHU REG. DO NOVEHO ZAS. DCR C JNZ GOTO1 ; VSECHNY REGISTRY ULOZENY ? XCHG ; VRCHOL NOVEHO ZASOBNIKU V <HL> POP D ; STARTOVACI ADRESA V <DE> SPHL ; NASTAVENI NOVEHO OBSAHU UKAZATELE POP PSW POP B POP H XCHG XTHL ; NASTAVENI POC. OBSAHU REGISTRU RET ; SKOK DO UZIV. PROGRAMU ; ; ; D I S P L ; ========= ; ; PRIKAZ DISPL UMOZNUJE ZOBRAZIT LIBOVOLNEHO USEKU ; PAMETI. MA DVA OPERANDY: POCATECNI A KONCOVOU ADRESU ; ZOBRAZOVANE OBLASTI. INFORMACE JE ZOBRAZOVANA HEXA- ; DECIMALNE I POMOCI ASCII ZNAKU. TAM, KDE JE OBSAH BYTU ; KODEM MALEHO PISMENE NEBO RIDICIHO ZNAKU, ZOBRAZI ; SE V DOPLNKOVEM POLI TECKA. ; DISPL: CALL EXPR ; VSTUP DVOU ADRES POP D ; KONCOVA ADRESA INX D ; INKREMENTACE <DE> PRO UKONCENI POP H ; POCATECNI ADRESA DISP0: CALL CSTS ; STATUS KONZOLY ? JZ DISP1 ; NEBILA STISKNUTA KLAVESA ? CALL CI ; VSTUP ZNAKU CALL ANAL ; JEHO ANALIZA RC ; POKUT JDE O 'CR' - KONEC CALL CI ; POKUT NE, POKRACUJ PO DALSIM ZNAKU DISP1: CALL CRLF ; PRECHOD NA NOVY RADEK CALL SDADR ; ZOBRAZENI ADRESY OSMICE CALL SPACE ; MEZERY NA DISPLAY PUSH H ; ADRESA OSMICE DO ZASOBNIKU MVI B,8 ; CITAC ZNAKU DISP2: MOV A,M ; PRECTI ZNAK CALL DBYTE ; ZOBRAZ HEX OBSA BUNKY CALL SPACE ; MEZERA NA DISPLAY CALL HILO ; INKREMENTACE <HL> A SROVNANI S <DE> JZ DISP3 ; PRECTEN CELY POZADOVANY USEK PAMETI? DCR B ; DEKREMENTACE CITACE BUNEK JNZ DISP2 ; PRECTENA CELA OSMICE ? DISP3: POP H ; OBNOVENI ADRESY OSMICE MVI B,8 ; CITAC ZNAKU CALL SPACE ; MEZERA NA DISPLAY PUSH H CALL GETCHR ; ADRESA CITACE ZNAKU DO <HL> MVI M,1FH POP H ; POSUN KURZORU NA URCENOU POZICI DISP4: MOV A,M ; PRICTI ZNAK MOV C,A ; ULOZ HO DO <C> SUI 20H ; JDE O RIDICI ZNAK ? JC DISP5 ; ANO - ZOBRAZ TECKU SUI 40H ; JDE O MALE PISMENO ? JC DISP6 ; ANO - ZOBRAZ TECKU DISP5: MVI C,2EH ; KOD TECKY DO <C> DISP6: CALL CO ; ZOBRAZENI ZNAKU NEBO TECKY CALL HILO ; INKREMENTACE <HL> A SROVNANI S <DE> RZ ; ZOBRAZEN CELI USEK PAMETI ? DCR B JNZ DISP4 ; ZOBRAZENA CELA OSMICE ? JMP DISP0 ; ZOBRAZENI DALSI OSMICE ; ; ; ; F I L L ; ======= ; ; PRIKAZ FILL ZAPLNI OBSAH URCENE OBLASTI PAMETI ZADANYM ; ZNAKEM. MA TRI OPERANDY: POCATECNI A KONCOVOU ADRESU ; PAMETOVE OBLASTI A HEXADECIMALNI JEDNOBYTOVY OBSAH. ; FILL: CALL INADR ; VSTUP TRI PARAMETRU FILL0: MOV M,C ; PREPIS BUNKY PAMETI CALL HILO ; INKREMANTACE <HL> A SROVNANI S <DE> JNZ FILL0 ; ZAPLNEN CELY USEK? RET ; ; ; ; INADR: INR C ; PRI PARAMETRY CALL EXPR ; VSTUP DVOU ADRES A OBSAHU POP B ; OBSAH DO <C> POP D ; KONCOVA ADRESA DO <DE> POP H ; POCATECNI ADRESA DO <HL> RET ; ; ; ; ; M O V E ; ======= ; ; PRIKAZ MOVE PRENASI OBSAH ZADANE OBLASTI PAMETI NA ; JINE MISTO V PAMETI. MA TRI VSTUPNI PARAMETRY: POCA- ; TECNI A KONCOVOU ADRESU ZDROJOVE OBLASTI A ADRESU URCENI ; MOVE: CALL INADR ; VSTUP TRI PARAMETRU MOVE0: MOV A,M ; CTENI BYTU STAX B ; ULOZENI BYTU INX B ; INKREMENTACE KAM CALL HILO ; INKREMENTACE ODKUD A SROVNANI S POKUD JNZ MOVE0 ; PRENESENA CELA OBLAST ? RET ; ; ; ; O U T P U T ; =========== ; ; PRIKAZ OUTPUT UMOZNUJE ZAPSAT NA LIBOVOLNY PORT ; ZADANOU HODNOTU ; OUTPT: CALL EXPR POP B ; VYSLANY OBSAH <C> POP D ; CISLO PORTU V <E> LXI H,INOUT ; ODSTUP PROMENNE OPOUT CALL GETADR ; ADRESA PROMENNE OPOUT V <HL> PUSH H ; ULOZENI STARTOVACI ADRESY MVI M,0D3H ; KOD INSTRUKCE OUT INX H MOV M,E ; CISLO PORTU INX H MVI M,0C9H ; KOD INSTRUKCE RET LXI H,OUTP0 ; NAVRATOVA ADRESA XTHL ; MAVR. ADR. V [<SP>], START. V <HL> MOV A,C ; VYSILANY OBSAH PCHL ; SIMULACE INSTRUKCE CALL OPOUT OUTP0: RET ; ; ; ; I N P U T ; ========= ; ; PRIKAZ INPUT UMOZNUJE PRECIST HODNOTU LIBOVOLNEHO ; PORTU (0-FF) A ZOBRAZIT JI NA DISPLEJ. K TOMU POU- ; ZIVA OBLASTI VYHRAZENE PAMETI, KAM SIMULUJE KOD ; INSTRUKCE IN. ; INPUT: DCR C CALL EXPR ; VSTUP CISLA PORTU POP B ; ULOZENI CISLA PORTU DO <C> LXI H,INOUT CALL GETADR ; V <HL> ADRESA POM. USEKU PAMETI PUSH H MVI M,0DBH ; INSTRUKCE IN INX H MOV M,C ; ADRESA PORTU INX H MVI M,0C9H ; INSTRUKCE RET LXI H,INPU0 XTHL ; NAVRATOVA ADRESA PCHL ; SIMULACE INSTRUKCE CALL INPU0: CALL EQUATE CALL DBYTE ; ZOBRAZENI OBSAHU PORTU RET ; ; ; ;****************************************************************** ; ; POMOCNE PODPROGRAMY ; ******************* ; ; ; I M T E X T ; =========== ; ; PODPROGRAM IMTEXT UMOZNUJE VYPIS RETEZCU ZNAKU ; UMISTENEHO BAZPROSTREDNE ZA VOLANIM NA OBRAZOVKU, ; POSLEDNIM (TISKNUTYM) ZNAKEM JE ZNAK D D7=1. ; POZOR: NESTANDARTNE POUZIVA ZASOBNIK. ; ; POSKOZENE REGISTRY: H,L,C,A,F ; IMTEXT: XTHL IMTX0: MOV A,M ; CTI ZNAK ANI 7FH ; VYBER ASCII BITY MOV C,A CALL CO ; ZOBRAZ ZNAK MOV A,M RLC ; POSLEDNI ZNAK ? INX H JNC IMTX0 ; NE - ZABRAZ DALSI ZNAK XTHL RET ; ; ; ; I N V C H R ; =========== ; ; PODPROGRAM INVCHR UMOZNUJE INVERTOVAT ZOBRAZOVANI ; ZNAKU NA OBRAZOVCE (BILY ZNAK A CERNE POZADI CI ; NAOPAK). PRI NASTAVENEM FF-Z PROVEDE INVERZI DOSAVAD- ; NIHO STAVU, PRI NULOVEM FF-Z NASTAVI VZDY D7 ; KODU ZNAKU DANEHO KURZOREM DO NULY. ; ; POSKOZENE REGISTRY: - - - ; INVCHR: PUSH PSW PUSH H CALL ADRKUP ; ADRESA ZNAKU DO <HL> MOV A,M ; CTENI KODU ZNAKU RAL ; D7 ZNAK DO FF-C JZ INVC0 ; INVERTOVAT ? STC ; D7 DO 1 INVC0: CMC ; INVERZE D7 RAR ; OBNOVENI KODU ZNAKU S UPRAVENYM D7 MOV M,A ; PREPIS KODU ZNAKU POP H POP PSW RET ; ; ; ; ; R O L L ; ======= ; ; PODPROGRAM ROLL PROVADI ROLOVANI OBSAHU OBRAZOVKY ; (TJ. OBRAZOVE PAMETI DISRAM) O JEDEN RADEK NAHORU. ; PRITOM HORNI RADEK SE ZTRACI, SPODNI RADEK ZUSTAVA ; NEPORUSEN (ZDVOJUJE SE). ; ; POSKOZENE REGISTRY: - - - ; ROLL: PUSH PSW PUSH B PUSH D PUSH H ; UKLID VSEHO CALL NUMCHR MOV B,M ; POCET ZNAKU CALL NUMLIN MOV C,M ; POCET ROLOVANYCH RADKU V <C> MOV A,C ORA A CPI 0 JZ ROLL2 LHLD RAMEND INX H ; <HL> ADRESA 0. RADKU LXI D,-64 ; ZAPORNY POCET BYTE NA RADKU XCHG DAD D ; <DE> ADRESA -1. RADKU XCHG PUSH D PUSH H ROLL0: POP H POP D PUSH B LXI B,64 ; POCET BYTU NA RADEK DAD B XCHG DAD B ; <HL> ADRESA I+1 NIHO RADKU XCHG ; <DE> ADRESA I TEHO RADKU POP B ; <B> CITAC ZNAKU, <C> CITAC RADKU PUSH D PUSH H ROLL1: MOV A,M STAX D INX D INX H DCR B JP ROLL1 ; ROLOVANY VSECHNY ZNAKY? CALL NUMCHR MOV B,M DCR C JNZ ROLL0 ; ROLOVANY VSECHNY RADKY? ROLL2: POP H POP D POP H POP D POP B POP PSW RET ; ; ; ; G H O M E ; ========= ; ; PODPROGRAM GHOME PREMISTI KURZOR DO LEVEHO HORNIHO ; ROHU OBRAZOVKY. ; ; POSKOZENE REGISTRY: - - - ; GHOME: PUSH H CALL NUMLIN ; ADRESA POCTU RADKU DCX H MVI M,0 ; VYNULOVANI CITACE ZNAKU DCX H MVI M,0 ; VYNULOVANI CITACE RADKU POP H RET ; ; ; ; F O R F I ; ========= ; PODPROGRAM FORFI PROVEDE VYMAZ CELE OBRAZOVKY A UMISTI ; KURZOR DO LENEHO HORNIHO ROHU OBRAZOVKY. ; ; POSKOZENE REGISTRY: - - - ; FORFI: CALL GHOME ; KURZOR DO LEVEHO HORNIHO ROHU ; ; ; ; D E L S C R ; =========== ; ; PODPROGRAM DELSCR PROVEDE VYMAZ OBRAZOVKY POCITACE ; (VCETNE) RADKU, NA KTEREM JE KURZOR. ; ; POSKOZENE REGISTRY: - - - ; DELSCR: PUSH PSW PUSH B PUSH D PUSH H CALL NUMLIN MOV C,M ; POCET RADKU CALL GHOME CALL GETLIN ; <HL> CITAC RADKU DELS0: CALL DELLIN ; VYMAZ RADKU INR M DCR C JP DELS0 ; VSECHNY RADKY? CALL GHOME POP H POP D POP B POP PSW RET ; ; ; ; B A C S T ; ========= ; ; PODPROGRAM BACST POSOUVA KURZOR O JEDNU POZICI ; DOLEVA. PRI DOSAZENI PRVNIHO ZNAKU NA PRVNIM RADKU ; ZADNOU DALSI CINNOST NEPROVADI. ; ; POSKOZENE REGISTRY: - - - ; BACST: PUSH PSW PUSH H CALL GETCHR ; POCET ZNAKU V <A>, ADRESA CITACE V <HL> DCR A JM BAC0 ; NA ZACATKU RADKY ? MOV M,A JMP BAC1 BAC0: CALL GETLIN DCR A JM BAC1 ; NA PRVNIM RADKU ? BAC2: MOV M,A CALL GETCHR PUSH H CALL NUMCHR MOV A,M ; POCET ZNAKU POP H MOV M,A ; KURZOR NA KONEC PREDCHOZIHO RADKU BAC1: POP H POP PSW RET ; ; ; ; D E L L I N ; =========== ; ; PODPROGRAM DELLIN VYMAZE RADEK OD MISTA KURZORU. ; ; POSKOZENE REGISTRY: - - - ; DELLIN: PUSH PSW PUSH B PUSH H CALL GETCHR ; POCET ZOBRAZENYCH ZNAKU V <A> CMA ; DOPLNEK INR A CALL NUMCHR ADD M ; POCET MAZANYCH ZNAKU V <A> MOV B,A CALL ADRKUP ; ADRESA KURZORU DELL0: MVI M,SPC ; ZNAK MEZERA INX H DCR B JP DELL0 ; VYMAZAN CELI RADEK ? POP H POP B POP PSW RET ; ; ; ; H I L O ; ======= ; ; PODPROGRAM HILO PROVEDE INKREMENTACI PARU <HL> A ; JEHO SROVNANI S PAREM <DE>. VYSLEDEK ULOZI DO PRIZNA- ; KU FF-Z. PODPROGRAM COMP PROVADI POUZE SROVNANI. ; PRI NASTAVENEM FF-C JE <HL> > <DE>. ; POKUT JE <HL>=FFFFH UKONCI SE S FF-Z=1, FF-C=1. ; ; POSKOZENE REGISTRY: A,F,H,L ; HILO: INX H ; INKREMENTACE <HL> MOV A,H ORA L STC RZ ; NAVRAT PRI <HL>=0000, FF-Z = 1, FF-C = 1 COMP: MOV A,D CMP H ; SROVNANI <H> S <D> RNZ ; NAVRAT PRI NEROVNOSTI, FF-Z = 0, FF-C...VZTAH MOV A,E ; MEZI <HL> A <DE> CMP L ; SROVNANI <L> S <E> RET ; PRI ROVNOSTI <HL>=<DE>...FF-Z = 1, FF-C = 0 ; ; ; ; B E E P S ; ========= ; ; PODPROGRAM BEEP PROVADI GENERACI ZVUKOVEHO ; SIGNALU ZADANE DELKY BEEPLN A VYSKY BEEPFQ. ; ; POSKOZENE REGISTRY: - - - ; BEEPS: PUSH PSW PUSH D MVI D,BEEPLN ; DELKA TONU BEEP0: MVI A,BEEPFQ ; VYSKA TONU BEEP1: DCR A JNZ BEEP1 DCR D ; CIKLUS PRO DELKU OUT ADRBIP ; BUZENI REPRODUKTORU JNZ BEEP0 ; UKONCIT TON ? POP D POP PSW RET ; ; ; ; T I M E R ; ========= ; ; PODPROGRAM V VYTVORENI PRODLEVY <BC> MILISEKUND. ; ; POSKOZENE REGISTRY: ; TIMER: PUSH PSW PUSH B TIME0: MVI A,6FH TIME1: DCR A JNZ TIME1 DCX B MOV A,B ORA C JNZ TIME0 POP B POP PSW RET ; ; ; ; M E M C K ; ========= ; ; ; PODPROGRAM MEMCK ULOZI DO REGISTRU <B> HORNI A DO REGISTRU ; <A> DOLNI BYTE ADRESY KONCE UZIVATELSKE PAMETI. TU ZISKA TAK, ; ZE OD ADRESY PONCE PAMETI RAM 'RAMEND' ODECTE DELKU ZASOBNIKU ; STKLN. ; ; POSKOZENE REGISTRY: A,F,B ; MEMCK: PUSH H LXI H,UREND ; PROMENA S KONCEM UZIV. RAM CALL GETC0 ; VYPOCET ADRESY PROMENNE A CTENI NIZSIHO BYTU INX H MOV B,M ; VYSSI BYTE POP H RET ; ; ; ; I O C H K ; ========= ; ; ; PODPROGRAM IOCHK ULOZI DO REGISTRU <A> PLATNY I.O-BYT, ; TJ. OBSAH ADRESY 0003H. ; ; POSKOZENE REGISTRY: A ; IOCHK: LDA IOBYT RET ; ; ; ; ; I O S E T ; ========= ; ; ; PODPROGRAM IOSET PROVEDE ULOZENI OBSAHU REGISTRU <C> NA ; ADRESU 0003H, TJ. UPRAVU STAVAJICIHO I/O-BYTU. ; ; POSKOZENE REGISTRY: - - - ; IOSET: PUSH PSW MOV A,C ; NOVY I/O-BYTE STA IOBYT ; ULOZENI NOVEHO I/O-BYTU POP PSW RET ; ; ; ; ; L O ; === ; ; JDE O SKOK NA SPOJOVACI ADRESU PRO VYSTUP NA TISKARNU. ; ; POSKOZENE REGISTRY: - - - ; LO: PUSH H ; UKLID <HL> LXI H,LSTOUT JMP JADR ; SKOK NA SPOJOVACI ADRESU ; ; ; ; ; P O ; === ; ; JDE O SKOK NA SPOJOVACI ADRESU PRO SERIOVY VYSTUP. ; ; POSKOZENE REGISTRY: - - - ; PO: PUSH H ; UKLID <HL> LXI H,PUNOUT JMP JADR ; SKOK NA SPOJOVACI ADRESU ; ; ; ; R I ; === ; ; ; JDE O SKOK NA SPOJOVACI ADRESU PRO SERIOVY VSTUP. ; ; POSKOZENE REGISTRY: - - - ; RI: PUSH H ; UKLID <HL> LXI H,READIN JMP JADR ; SKOK NA SPOJOVACI ADRESU ; ; ; ; I O D E F ; ========= ; ; PODPROGRAM IODEF UMOZNUJE NASTAVIT UZIVATELSKE ADRESY ; PRO ZARIZENI. DRUH ZARIZENI JE URCEN OBSAHEM REGISTRU ; <C> NASLEDOVNE: ; 0 ... CI ; 1 ... CO ; 2 ... RI ; 3 ... DUMMY ; 4 ... PO ; 5 ... DUMMY ; 6 ... LO ; 7 ... CSTS ; ADRESA UZIVATELSKEHO PROGRAMU JE V REGISTRU <DE>. ; ; POSKOZENE REGISTRY: A,F ; IODEF: PUSH H PUSH B LXI H,RAMEND ; BUNKA S KONCEM RAM MOV A,C ; ZARIZENI CPI 8 ; CHYBA? JNC ERROR CPI 5 LXI H,CONINP ; ADRESA PRO PRVNI 4 ZARIZENI JC IODEF1 SUI 5 ; OPRAVA CISLA ZARIZENI PRO DRUHY BLOK MOV C,A LXI H,USRPO ; ADRESA PRO ZBYLE 4 ZARIZENI IODEF1: ADD C ; <C> * 3 --> <C> ADD C MOV C,A MVI B,0 CALL GETADR ; VYPOCET FYZICKYCH SPOJOVACICH ADRES DAD B ; PRICTENI OFFSETU MVI M,0C3H ; INSTRUKCE SKOKU INX H MOV M,E ; DOLNI BYTE ADRESY SKOKU INX H MOV M,D ; HORNI BYTE ADRESY SKOKU POP B POP H RET ; ; ; ; C S T S ; ======= ; ; PODPROGRAM CSTS ZJISTUJE STAV KLAVESNICE: ; <A> = FFH, FF-Z = 0 ... OBSAHUJE PLATNY ZNAK ; <A> = 00H, FF-Z = 1 ... NEMA PLATNY ZNAK ; ; POSKOZENE REGISTRY: A,F ; CSTS: PUSH H LXI H,CONSTA ; ODSTUP SPOJOVACI ADRESY JMP JADR ; SKOK NA SPOJOVACI ADRESU ; CSTS1: XRA A OUT ADRPB IN ADRCIN INR A ; STISKNUTA KLAVESA? RZ ; NE MVI A,0FFH RET ; ANO ; ; ; ; ; ; C I ; === ; ; PODPROGRAM CI UMOZNUJE VSTUP ZNAKU Z KLAVESNICE. ; ; POSKOZENE REGISTRY: A,F ; CI: PUSH H LXI H,CONINP ; SPOJOVACI ADRESA JMP JADR ; CI4: PUSH B PUSH D PUSH H ; ; INICIALIZACE OBLASTI VZORKU A PROMENNICH ; CI1: CALL GETKCD ; ADRESA OBL.VZORKU MVI B,5 CI2: MVI M,0FFH ; ZAPLNENA 0FFH INX H DCR B JP CI2 ; CELA OBLAST ? MVI M,0 ; UPLO INX H MVI M,0 ; CTRL INX H MVI M,0 ; NUM INX H INR M ; CTN MVI A,22 ; CIKLUS BLIKANI KURZORU CMP M CZ INVCHR ; BLIKANI KURZORU JNC CI20 MVI M,0 ; ; VYTVORENI SOUBORU VZORKU ; CI20: CALL GETKCD ; ADRESA OBL. VZORKU MVI B,0DFH ; VYBER RADKU CI3: MOV A,B RRC JNC CI84 ; VSECHNY RADKY MOV B,A OUT ADRPB ; AKTIVACE RADKU IN ADRCIN ; CTENI SLOUPCU MOV M,A ; ULOZENI VZORKU INX H JMP CI3 ; DALSI VZOREK ; ; TEST NA USTALENI KLAVES ; CI84: MVI C,64 ; POCET TESTU SHODY CI5: DCR C JZ CI7 ; VSECHNY TESTY CALL GETKCD ; ADRESA OBL. VZORKU MVI B,0DFH ; VYBER RADEK CI6: MOV A,B RRC JNC CI5 ; VSECHNY RADKY MOV B,A OUT ADRPB ; AKTIVUJ RADK IN ADRCIN ; SLEDUJ SLOUPCE CMP M ; SROVNEJ VZOREK JNZ CI1 ; PRI NESHODE ZNOVU INX H JMP CI6 ; DALSI VZOREK ; ; VYHODNOCENI VZORKU ; CI7: MVI B,4 ; <B> CITAC RADKU CALL GETKCD ; ADRESA OBL. VZORKU XCHG CI8: LDAX D ; VZOREK V <A> INX D CPI 0FFH CNZ CI9 ; PLATNY - DEKODOVAT DCR B ; DALSI KOD JP CI8 ; NE-DALSI RADEK ; ; GENERACE VYSLEDNEHO KODU ZNAKU ; LXI H,ZNAK CALL GETADR XCHG LDAX D CPI 0FFH ; NEPLATNY ZNAK? JZ CI1 ; ANO - NOVY ZNAK ; CALL INVCHR ; UPRAV POZADI ; CI41: LXI H,UPLO ; POMOCNE ZNAKY CALL GETADR MOV A,M ORA A JZ CI42 LDAX D SUI 'A' MOV L,A MVI H,0 LXI B,TABUP DAD B MOV A,M STAX D ; CI42: LXI H,NUM ; CISLICE CALL GETADR MOV A,M ORA A JZ CI43 MVI C,30H LXI H,TABNUM CI44: LDAX D CMP M JNZ CI45 MOV A,C STAX D JMP CI43 CI45: INX H INR C MOV A,C CPI 3AH JC CI44 JMP CI1 ; CHYBNE KLAVESY ; CI43: LXI H,CTRL ; RIDICI ZNAKY CALL GETADR MOV A,M ORA A JZ CI40 LDAX D ANI 1FH STAX D ; CI40: CALL BEEPS ; BEEP ; ; TEST UVOLNENI KLAVESY ; CI15: MVI C,0 ; POCET TESTU CI11: DCR C JZ CI99 ; OPAKUJ ZNAK CALL GETKCD ; ADRESA OBL. VZORKU MVI B,0DFH STC CI55: MOV A,B RRC JNC CI11 ; VSECHNY RADKY? MOV B,A OUT ADRPB IN ADRCIN CMP M ; STEJNY KOD? JNZ CI99 ; NE - DALSI ZNAK INX H JMP CI55 ; CI99: LDAX D POP H POP D POP B RET ; ; PODPROGRAM VYHODNOCENI KODU ; CI9: PUSH D MVI C,0 ; CITAC SLOUPCU CI14: RRC PUSH PSW CNC CI10 ; AKTIVNI? POP PSW MOV D,A INR C MOV A,C CPI 8 MOV A,D JC CI14 POP D RET ; CI10: MOV A,B ; CITAC RADKU ANI 07H RLC RLC RLC ORA C MOV L,A MVI H,0 ; OFFSET LXI D,KTAB ; TABULKA KODU DAD D MOV A,M ; CI30: LXI H,UPLO CALL GETADR CPI 1DH ; UPLO? JNZ CI31 MOV M,A RET ; CI31: INX H CPI 1EH ; CTRL? JNZ CI32 MOV M,A RET ; CI32: INX H CPI 1FH ; NUM? JNZ CI33 MOV M,A RET ; CI33: DCX H DCX H DCX H MOV M,A ; ULOZ DO PROM. ZNAK RET ; GETKCD: LXI H,KEYCD ; VYPOCET CALL GETADR ; ADRESY OBL. VZORKU RET ; KTAB: DB 004H ; [00H] = '->' DB 000H ; [01H] = 'UC/UL' DB 01DH ; [02H] = 'UP/LO' DB 041H ; [03H] = 'A' DB 051H ; [04H] = 'Q' DB 01EH ; [05H] = 'CTRL' DB 00DH ; [06H] = 'CR' DB 050H ; [07H] = 'P' DB 008H ; [08H] = '<-' DB 01FH ; [09H] = '0-9' DB 058H ; [0AH] = 'X' DB 044H ; [0BH] = 'D' DB 045H ; [0CH] = 'E' DB 04DH ; [0DH] = 'M' DB 04BH ; [0EH] = 'K' DB 049H ; [0FH] = 'I' DB 0FFH ; [10H] = 'DUMMY' DB 0FFH ; [11H] = 'DUMMY' DB 056H ; [12H] = 'V' DB 047H ; [13H] = 'G' DB 054H ; [14H] = 'T' DB 042H ; [15H] = 'B' DB 048H ; [16H] = 'H' DB 059H ; [17H] = 'Y' DB 020H ; [18H] = ' ' DB 0FFH ; [19H] = 'DUMMY' DB 043H ; [1AH] = 'C' DB 046H ; [1BH] = 'F' DB 052H ; [1CH] = 'R' DB 04EH ; [1DH] = 'N' DB 04AH ; [1EH] = 'J' DB 055H ; [1FH] = 'U' DB 018H ; [20H] = 'DOWN' DB 01BH ; [21H] = 'CS' DB 05AH ; [22H] = 'Z' DB 053H ; [23H] = 'S' DB 057H ; [24H] = 'W' DB 005H ; [25H] = 'UP' DB 04CH ; [26H] = 'L' DB 04FH ; [27H] = 'O' ; TABUP: DB 02DH ; '-' ... A DB 03FH ; '?' ... B DB 03AH ; ':' ... C DB 03DH ; '=' ... D DB 023H ; '#' ... E DB 05EH ; '^' ... F DB 05FH ; '_' ... G DB 03CH ; '<' ... H DB 028H ; '(' ... I DB 03EH ; '>' ... J DB 05BH ; '[' ... K DB 05DH ; ']' ... L DB 02EH ; '.' ... M DB 02CH ; ',' ... N DB 029H ; ')' ... O DB 040H ; '@' ... P DB 021H ; 'VYKRICNIK' ... Q DB 024H ; '$' ... R DB 02BH ; '+' ... S DB 025H ; '%' ... T DB 027H ; ''' ... U DB 03BH ; ';' ... V DB 022H ; '"' ... W DB 02FH ; '/' ... X DB 026H ; '&' ... Y DB 02AH ; '*' ... Z ; TABNUM: DB 'P' ; 0 DB 'Q' ; 1 DB 'W' ; 2 DB 'E' ; 3 DB 'R' ; 4 DB 'T' ; 5 DB 'Y' ; 6 DB 'U' ; 7 DB 'I' ; 8 DB 'O' ; 9 ; ;***************************************************************** ; .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