Ú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


8 bity / PLAN-80A

Výpis programu PLAN 80A MONITOR V.2.Q


Obsah:




        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


Obsah:



ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000


8 bity / PLAN-80A

Výpis programu PLAN 80A MONITOR V.2.Q



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz