Ú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