Ú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
ZPS | Technické prostředky | Programové vybavení | Dokumentace
.XLIST
PAGE 63
.LIST
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TITLE FIRMWARE SAPI-1 MONITOR V5.0/F
; 18.5.1988 (P.P.)
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
; VOLBA SYSTEMU PODLE CPU-KARTY
TV64 EQU 00 ; TV NA 64 ZNAKU (HDG)
ANDZ EQU 00 ; AND-1Z OD 3800H
CPM EQU 00 ; IF CPM=0 THEN SYSTEM
; ZPS-2 ELSE SYSTEM ZPS-3
;
;==========================================
; MONITOR + MIKOS V5.0 TVORI FIRMWARE SYSTEMU SAPI-1.
; V5.0 JE KOMPATIBILNI S VERZI V4.0 A JE ULOZENA
; V 5K EPROM.
; DALSI SKUPINA PROGRAMU JE NA KAZETE:
; 1) BASIC EXP V5.0
; 2) TEDIT 1
; 3) TOOL ASM-80
;..........................................
; ROZDELENI PAMETI U ZPS-2:
; 0000H-13FFH FIRMWARE EPROM 5K
; 2400H-33FFH PORTY
; 3800H-3FFFH VIDEO RAM
; 4000H-42FFH 1K SYSTEMOVE RAM
; 4400H-0FFFFH RAM---glt; SYSTEMOVE PROGRAMY
; \--glt; UZIVATELSKE PROGRAMY
;=========================================
ASEG
;
; *** DEFINOVANI PAMETOVEHO PROSTORU *
;
@R@ EQU 4000H ; ZACATEK SYSTEMOVE RAM (1K)
RSTN EQU 0CFH
;
;
BASIC EQU 4400H ; START
TRACER EQU 4C00H ; START
PEDIT EQU 4400H ; START
;
;-----------------------------------------------
IF CPM
MONIT EQU 100H ; START
EP2 EQU 0C00H+100H ; O.S. EPROM
ERAM EQU 9FFFH ; TOP RAM
IF TV64
TVBEG EQU 0F800H
ELSE
TVBEG EQU 0E800H ; TV-RAM
ENDIF
ELSE
MONIT EQU 0 ; ROM VERZE - ZPS2
EP2 EQU 0C00H
ERAM EQU 0000
TVROM EQU 1400H ; AND1 NEBO GRAFIKA
IF TV64 AND (NOT ANDZ)
TVBEG EQU 0F800H
ELSE
TVBEG EQU 03800H ; TV-RAM
ENDIF
ENDIF
;
; KONSTANTY ASCII...
;
CR EQU 0DH ; CARRIAGE RETURN
HT EQU 9 ; TAB
BACK EQU 8 ; BACK SPACE
RIGHT EQU 18H ; FORWARDS
UP EQU 1AH ; UP
ESC EQU 1BH ; ESCAPE
BELL EQU 7 ; BELL
LF EQU 0AH ; LINE FEED
ETX EQU 03H ; BREAK CHAR.( CONTROL C)
EOT EQU 4 ; END OF FILE
VT EQU 0BH
SUB@ EQU 1AH ; CTRL Z
PRNT EQU 17H ; BREAK CTRL W
DEL EQU 7FH ; DELETE
WNDCD EQU 1CH ; ZMENA OKNA
BEGIO EQU 55H ; POCATECNI HODNOTA PRO I/O BYTE
;
; T.V. PARAMETRY
;
IF TV64
WIDTH EQU 64
IF ANDZ
HEIGHT EQU 20
CURSOR EQU 127
CURCH EQU 0B0H
ELSE
HEIGHT EQU 28
CURSOR EQU 0FFH
CURCH EQU 127
ENDIF
LINOF EQU 64 ; OFFSET
LREST EQU LINOF - WIDTH
TVEND EQU TVBEG + (WIDTH * HEIGHT)
ELSE
WIDTH EQU 40
HEIGHT EQU 24
LINOF EQU 64 ; OFFSET
LREST EQU LINOF - WIDTH
TVEND EQU TVBEG + 5E7H
CURSOR EQU 0A0H
CURCH EQU 67H
ENDIF
ERS EQU 1FH ; ERASE SCREEN
EOL EQU 1EH ; ERASE END OF LINE
CTRLQ EQU 11H ; ^Q-REZERVUJ
CTRLP EQU 10H ; ^P-LIST
HOME EQU 1DH ; HOME
;.XLIST
;-------------------------------------------------
; RIDICI I/O
;
IF NOT CPM ; ZPS-2
;KLAVESNICE
PORTK EQU 2400H ; 2400H-27FFH
;TISKARNA
PORTLC EQU 2B00H ; 2800H-2BFFH
PORTLD EQU 2C00H ; 2C00H-2FFFH
;PRERUSENI 3214
PORTI EQU 3000H ; 3000H-33FFH
;
ELSE
P0 EQU 1 ; KLAVESNICE
P1 EQU 2 ; KLAVESNICE + TISKARNA
P2 EQU 3 ; TISKARNA
;
ENDIF
;
; DESKA PARALERNICH PORTU
;
CWR1 EQU 1BH ; RIDICI SLOVO 8255A/1
PA1 EQU 18H
PB1 EQU 19H
PC1 EQU 1AH
CWR2 EQU 1FH ; RIDICI SLOVO 8255A/2
PA2 EQU 1CH
PB2 EQU 1DH
PC2 EQU 1EH
;
; UART - MAGNETOFON + SERIOVY PRENOS
;
UDATA EQU 12H ; UART-DATA
USTAT EQU 11H ; STATUS
MMODE EQU 11H ; MODEM
UMODE EQU 10H ; UART
URES EQU 13H ; RESET
;
ALLINT EQU 01H ; POUZE RST0
;===============================================
; ZACATEK PROGRAMU
;===============================================
;
ORG MONIT ; ROM/RAM DEFINICE
JMP COLD ; INICIALIZACE SYSTEMU
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;
; TABULKA "ZAKLADNICH SLUZEB SYSTEMU SAPI-1
IF CPM
;
JMP CI ; CONZOLE INPUT <Aglt;
JMP RI ; READER INPUT <Aglt;, CY=1 ERROR
JMP CO ; CONZOLE OUTPUT <Cglt;
JMP PO ; PUNCH OUTPUT <Cglt;
JMP LO ; LIST OUTPUT <Cglt;
JMP CSTS ; CONZOLE INPUT STATUS
JMP IOCHK ; I/O BYT CHEK <Aglt;
JMP IOSET ; I/O BYT SET <Cglt;
JMP MEMCK ; MEMTOP
JMP IODEF ; DEFINICE UZIVATELSKYCH PERIFERII
JMP SPCL ; I/O CONTROL SPECIAL
JMP CRLF ; NOVY RADEK
JMP EXPR ; SKLADANI ADRES (N=POCET <Cglt;, SP)
JMP ERROR ; OSETRENI CHYBY
JMP ASHEX ; PREVOD ASCII -glt; HEX
JMP DADR ; ZOBRAZENI ADRESY <HLglt;
JMP DBYT ; ZOBRAZENI ZNAKU <Aglt;
JMP HILO ; HL+1, SROVNANI S DE
JMP NEXT ; OVLADANI MONITORU
JMP SPACE ; MEZERA NA CRT
JMP CINCR ; ECHO+ANALYZA
JMP TEXT ; VYPIS TEXTU <HL=ADRglt;,<D=DELKAglt;
JMP XY ; "DO" PRIKAZ <Aglt;
JMP HXASC ; PREVOD HEX -glt; ASCII
JMP EXFLG ; EXTERNI RIZENI FLAGU
JMP ASSIGN ; PRIRAZENI I/O PERIF.
; -- ROZSIRENI SLUZEB --
JMP TX ; ZOBRAZENI NASLEDUJICIHO TEXTU
JMP WND@ ; NASTAVENI OKNA
JMP KOS@ ; CALL O.S. <Cglt;-SLUZBA,<HLglt;-DATA
JMP RNAME ; <HLglt;.. EXT. A VYST. ADR
JMP INTER ; NASTAVENI PRERUSENI + EI
JMP KODWM ; <HLglt;.. NOVE KODY, CS
JMP KODASC ; <HLglt;..ZMENY KODU Z KLAVESNICE
JMP GRAF ; <HLglt;..DATA, <Dglt;..KOD, <Eglt; SLUZBA
JMP RESER ;
;
;***************************************************
;
; TABULKY PRO INSTALACI SYSTEMOVYCH HANDLERU
;
SYSTAB: JMP CI@@ ; VSTUP ZNAKU :CI:
JMP CO@@ ; VYSTUP ZNAKU :CO:
JMP CSTS@@ ; STATUS :CI:
JMP DUMMY ; :LO:
JMP ERROR ; INIT O.S.
SMTAB: ; -- ; TABULKA PRO SM 7202
JMP SERIN ; SERIOVY VSTUP
JMP SEROUT ; SERIOVY VYSTUP
JMP SMST ; STATUS SER. VSTUPU
JMP DUMMY
JMP DUMMY
SYSEND EQU $
DB BEGIO ; 55-glt; IOBYTE
;
ENDIF
;****************************************************
; POMOCNE PROGRAMY
;****************************************************
DB 55H ; INTEL IOBYT
DB 50H ; V 5.0
IF CPM
JMP 0B006H ; ZPS2+CPM
ELSE
JMP 0F006H ; POSLEDNI 4K PRO BDOS
ENDIF
JMP @R@
;
MINUS: MVI A,'-'
JMP COA
JMP @R@+3
;
EQUAL: MVI A,'='
JMP COA
JMP @R@+6
;
QUES: MVI A,'?'
JMP COA
JMP @R@+9
;
; CTI IOBYTE <Aglt;
;
IOCHK: LDA IOBYT
RET
DB 'P' ; MONOGRAM
JMP @R@+12
;
; NASTAV IOBYTE <Cglt;
;
IOSET: MOV A,C
STA IOBYT
RET
JMP @R@+15
;
; SPECIAL:<Aglt;..ZNAK,<Bglt;..MODE,<DEglt;..LOG.ADR
; <HLglt;..FYZ.ADR
;
SPCL: LHLD LINE ; LOG. ADR KORZORU
XCHG
DB 21H
JMP @R@+18
LHLD CADR ; FYZ. ADR ZNAKU
LDA KEY ; KEY -glt;B
MOV B,A
MOV A,M ; CTI ZNAK Z T.V.
RET
IF NOT CPM
;
; KOPIRUJ RI -glt; PO
;
COPY: CALL RI
JC CRLF
MOV C,A
CALL LO ; "H" VYBERE PERIF.
JMP COPY
;
; READ DALSI BYTE
;
RBYT0: MVI A,'0'
RBYT: PUSH B
PUSH H
CALL EXPRM
POP D
POP H
MOV M,E
MOV A,B
CPI CR
POP B
RET
;**************************************
; OBECNA CAST O.S.
;**************************************
;
; VOLANI O.S Z MONITORU
;
KOS: MVI C,-1
JMP KOS@
;
;INIT O.S
;
KOSI: MVI C,0
JMP KOS@
;
; SLUZBY KOMPATIBILNI Z MONITOREM V4.0
;
FIND: MVI C,1
JMP KOS@
OPEN: MVI C,2
JMP KOS@
LOADCD: MVI C,4
JMP KOS@
SAVECD: MVI C,5
JMP KOS@
BINAR: MVI C,6
JMP KOS@
;****************************************************
;
JMENO: DB '"',CR ; PRAZDNE
;
; INSTALUJ HANDLER PRO TISKARNU
;
HNDIN: CALL RADR
ADD A ; *2
CPI HNDMX
RNC ; VETSI...
MVI H,0
MOV L,A
LXI D,TABHND
DAD D ; ADR. ADRESY HNDLR
MOV A,M
STA LO@ + 1 ; PREPIS
INX H
MOV A,M
STA LO@ + 2
DUMMY: RET
;------------------------
; TABULKA HANDLERU
;
TABHND: DW DUMMY ; 0.. PRAZDNY HANDLER
DW LO@@ ; 1.. C 211
DW CENTRO ; 2.. CENTRONICS
DW D100S ; 3.. D 100 S
DW D180 ; 4.. D 180
DW PO ; 5.. PUNCH DEVICE
DW CO@ ; 6.. CONSOLE OUTPUT
DW SEROUT ; 7.. SERIOVY VYSTUP
HNDMX EQU $-TABHND
;
;****************************************************
; LIST OUTPUT <Cglt;... ZNAK
;****************************************************
;
D180: MOV A,C
CMA
MOV C,A
; CONSUL 211
LO@@:
PUSH H
LXI H,2B01H ; POC. PARAMETY
MOV M,L
INR H
MOV M,C
LO@1: MOV A,M
ADD A
JP LO@1
DCR H
MVI M,3
INR H
LO@2: MOV A,M
ADD A
JM LO@2
DCR H
MOV M,L
POP H
RET
;
; SERIOVY INTERFACE PRO :LP:
;
D100S: MVI A,0EH ; SERIOVE PRIPOJENI D100
OUT MMODE ; PREPOJ
D101: IN USTAT
ADD A
JP D101
MOV A,C
OUT UDATA
MVI A,2
OUT UMODE
D102: IN USTAT
ADD A
JM D102
MOV A,C
RET
;
; INTERFACE CENTRONICS
;
CENTRO:
PUSH H
MVI H,2CH
MOV M,C
CENTR1: MOV A,M
ANI 60H
CPI 20H
JNZ CENTR1 ; CEKEJ NA BUSY
DCR H
MVI M,0
XTHL
XTHL
MOV A,C
MVI M,2
POP H
RET
;****************************************************
ORG 100H ; TABULKA SLUZEB !!!
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
;
; TABULKA "ZAKLADNICH SLUZEB SYSTEMU SAPI-1
;
JMP COLD ; STUDENY START
JMP CI ; CONZOLE INPUT <Aglt;
JMP RI ; READER INPUT <Aglt;, CY=1 ERROR
JMP CO ; CONZOLE OUTPUT <Cglt;
JMP PO ; PUNCH OUTPUT <Cglt;
JMP LO ; LIST OUTPUT <Cglt;
JMP CSTS ; CONZOLE INPUT STATUS
JMP IOCHK ; I/O BYT CHEK <Aglt;
JMP IOSET ; I/O BYT SET <Cglt;
JMP MEMCK ; MEMTOP
JMP IODEF ; DEFINICE UZIVATELSKYCH PERIFERII
JMP SPCL ; I/O CONTROL SPECIAL
JMP CRLF ; NOVY RADEK
JMP EXPR ; SKLADANI ADRES (N=POCET <Cglt;, SP)
JMP ERROR ; OSETRENI CHYBY
JMP ASHEX ; PREVOD ASCII -glt; HEX
JMP DADR ; ZOBRAZENI ADRESY <HLglt;
JMP DBYT ; ZOBRAZENI ZNAKU <Aglt;
JMP HILO ; HL+1, SROVNANI S DE
JMP NEXT ; OVLADANI MONITORU
JMP SPACE ; MEZERA NA CRT
JMP CINCR ; ECHO+ANALYZA
JMP TEXT ; VYPIS TEXTU <HL=ADRglt;,<D=DELKAglt;
JMP XY ; "DO" PRIKAZ <Aglt;
JMP HXASC ; PREVOD HEX -glt; ASCII
JMP EXFLG ; EXTERNI RIZENI FLAGU
JMP ASSIGN ; PRIRAZENI I/O PERIF.
; -- ROZSIRENI SLUZEB --
JMP TX ; ZOBRAZENI NASLEDUJICIHO TEXTU
JMP WND@ ; NASTAVENI OKNA
JMP KOS@ ; CALL O.S. <Cglt;-SLUZBA,<HLglt;-DATA
JMP RNAME ; <HLglt;.. EXT. A VYST. ADR
JMP INTER ; NASTAVENI PRERUSENI + EI
JMP KODWM ; <HLglt;.. NOVE KODY, CS
JMP KODASC ; <HLglt;..ZMENY KODU Z KLAVESNICE
JMP GRAF ; <HLglt;..DATA, <Dglt;..KOD, <Eglt; SLUZBA
JMP RESER ;
;***************************************************
;
; TABULKY PRO INSTALACI SYSTEMOVYCH HANDLERU
;
SYSTAB: JMP CI@@ ; VSTUP ZNAKU :CI:
JMP CO@@ ; VYSTUP ZNAKU :CO:
JMP CSTS@@ ; STATUS :CI:
JMP DUMMY ; :LO:
JMP ERROR ; INIT O.S.
SMTAB: ; -- ; TABULKA PRO SM 7202
JMP SERIN ; SERIOVY VSTUP
JMP SEROUT ; SERIOVY VYSTUP
JMP SMST ; STATUS SER. VSTUPU
JMP DUMMY
JMP DUMMY
SYSEND EQU $
DB BEGIO ; 55-glt; IOBYTE
ENDIF
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; **** S T A R T M O N I T O R U ****
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
COLD:
BEG: DI ; PRIKAZ "B"
LXI HL,MSTAK ; NASTAV STACK POINTER
SPHL
XRA A
BEG0: MOV M,A
INR L
JNZ BEG0 ; NULUJ M-RAM
;
INR A
OUT URES ; RESET UART
OUT UMODE ; MODEM
INR A
IF CPM
OUT P1 ; INIT LP
OUT P0 ; INIT KLAVESNICE
ELSE
MVI H,(HIGH PORTK)+4
MOV M,A
DCR H
MOV M,A
ENDIF
MVI A,0DH ; SERIOVY PRENOS
OUT USTAT ; STATUS UART
;
LXI H,SYSTAB ; NASTAV
LXI D,SYSEND ; SYSTEMOVE PERIFERIE
LXI B,CI@0
CALL MO1
;
LXI H,@R@ ; NAJDI KONEC RAM
MVI M,0C3H
MEM1: INR H ; DALSI STRANKA
IF CPM
MOV A,H
CPI HIGH ERAM+1
ENDIF
JZ MEM2
MOV A,M
CMA
MOV M,A ; ZAPIS DOPLNEK
CMP M ; ZAPIS O.K. ?
CMA
MOV M,A ; OBNOVA PAMETI
JZ MEM1
MEM2: DCX H ; POSLEDNI BYTE
SHLD MEMTOP ; ULOZ MEMTOP
;
MVI A,CURCH ; NASTAV KURZOR CS
STA CUR@
;
CALL CINIT ; KLAVESNICE
;
LXI H,TVBEG ; NASTAV T.V.
SHLD CADR
MVI A,0C3H
STA ERRSW
IF CPM
STA 8
ELSE
MOV M,A
CMP M
CNZ TVROM ; NENI AND-1
ENDIF
CALL TX
DB HOME,ERS OR 80H
;
LDA EP2 ; JE O.S V EPROM ?
CPI 0C3H
CZ EP2+3 ; INICIALIZUJ O.S.
;
; ZOTAVENI PO CHYBE "INIC-6" !!
LXI H,MSTAK-20H
SHLD SPSAV
;
; OHLASENI MONITORU
;
INIC: CALL TX
DB CR,LF
DC 'MONITOR V5.0'
;
;------------------------------------
; * VYHODNOCENI POVELU OPERATORA *
;------------------------------------
NEXT: LXI SP,MSTAK ; NASTAV STACK PRO MONITOR
LXI H,NEXT
PUSH H ; ADRESA NAVRATU
LXI H,RESTA
IF CPM
SHLD 9
ENDIF
SHLD @R@+1
LXI H,INIC-6 ; ZPRACOVANI CHYBY
SHLD ERRSW+1
CALL INTER ; NASTAV PRERUSENI
CALL TX
DB CR,LF,'.' OR 80H
CALL CINCR ; POVEL !!!!!
;
XY: MOV L,A ; L-PRIKAZ
PUSH H ; SAVE
SUI 'A'
JM NEXT ; ASCII < "A"
LXI H,CTBL ; ZACATEK TABULKY PRIKAZU
LXI B,(LCT SHL 8) OR 2
INJM@: CMP B
JNC ERROR ; PRETECENI
INJMP: ADD A ; 2*
ADD L
MOV L,A
MOV A,M
INX H
MOV H,M
MOV L,A
XTHL ; NASTAV HL
RET ; START
;
;----------------------------------
; * TABULKA POVELU MONITORU *
;----------------------------------
;
CTBL: DW ASSIGN ; NASTAV I/O
DW BCMD ; BASIC
DW BEG ; CLEAR
DW DISP ; ZOBRAZ PAMET
DW EOF ; KONEC HEX
DW FILL ; NAPLN PAMET
DW GOTO ; GOTO & BREAK
DW HNDIN ; INSTALUJ HANDLER
DW KOSI ; INIT O.S
DW JUMP ; J
DW KOS ; K
DW LOADB ; L
DW MOVE ; PRESUN PAMET
DW COPY ; N
DW CHMODE ; ZMENA MODE
DW PCMD ; PEDIT
DW QUERY ; NASTAVENI I/O
DW READ@ ; R
DW SUBS ; ZMENA OBSAHU
DW TCMD ; TOOL
DW UKAZ ; U ADR
DW VERIFY ; V
DW WRITE ; W
DW X ; OBSAHY REGISTRU
DW Y ; NASTAV PRERUSENI
DW Z ; CASOVANI MGF
LCT EQU ($-CTBL)/2
IF HIGH ($-CTBL)
.PRINTX "CHYBA VE STRANCE S POVELY"
CHY EQU $
ENDIF
;
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; REALIZACE POVELU MONITORU
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
; NASTAV I/O MODUL
;
ASSIGN: CALL CIMIN ; JMENO
; <Aglt;..NAME (EXTERN CALLS)
LXI H,IOTAB ; TABULKA
MVI C,4 ; POCITADLO
LXI D,6 ; OFFSET
ASS0: CMP M
JZ ASS1 ; +
DAD D ; ADRESA
DCR C ; VSE?
JNZ ASS0 ; -
JMP ERROR
ASS1: CALL EQUAL
CALL ECHO
INX H
MOV B,M
MVI C,0 ;IOBYT
ASS2: INX H
CMP M
JZ ASS3 ; +
PUSH PSW
MVI A,55H ; OFFSET
ADD C
MOV C,A
JC ERROR ; NE #
POP PSW
JMP ASS2 ; DALSI
ASS3: MOV A,C ; SPOCTU IOBYT
ANA B
MOV C,A ; ULOZ
MOV A,B
CMA ; NEGUJ
IONEW: LXI H,IOBYT
ANA M
ORA C
MOV M,A
RET
;
; I/O TABULKA
;
IOTAB: DB 'C',03H ; CONSOLE
DB 'TCB1'
DB 'R',0CH ; READER
DB 'TP12'
DB 'P',30H ; PUNCHER
DB 'TP12'
DB 'L',0C0H ; LIST
DB 'TCL1'
;
; VYPIS NASTAVENI I/O
;
QUERY: LHLD MEMTOP
CALL DNADR
LXI H,IOTAB ; TABULKA
LDA IOBYT ; CTI
MOV B,A ; ULOZ
CALL $+3
CALL $+3
; ZOBRAZ NASTAVENI I/O
CALL SPACE
MOV A,M ; CTI LOGICKE JMENO
CALL COA
CALL EQUAL
PUSH H ; ULOZ ADR.
INX H
INX H ; ADR.
MOV A,B
ANI 3
MOV E,A
MVI D,0
DAD D ; FYZICKA ADR.
MOV A,M
CALL COA
MOV A,B
RRC
RRC ; ROTUJ IOBYT
MOV B,A
POP H
MVI E,6 ; OFFSET
DAD D
RET ; HL=DALSI ADR.
;
; GOTO + VYHODNOCENI PRERUSENI + PROHLIZENI REG.
;***********************************************
;
;
; "GO TO" PRIKAZ
;
GOTO: CALL EQUAL
CALL CINCR ; PRIKAZ
JC GO@ ; IF CR THEN GOTO
JZ GO@BR
CALL EXPRM ; START ADR
POP H
SHLD PCSAV
MOV A,B ; JEN START ADR ?
CPI CR
JZ GO@
GO@BR: CALL RADR ; CTI BREAK ADR
SHLD BRAD
MOV A,M ; ULOZ INSTR. KOD
STA INSTR
MVI M,RSTN
MVI A,CR
CMP B ; JEN 1-BREAK ?
JZ GO@
; O.S. BREAK
CALL RADR
SHLD BRAD2
MOV A,M
STA INST2
MVI M,RSTN
; START
GO@: CALL CRLF
DI
LXI SP,ACSAV
POP PSW
POP B
POP D
LHLD SPSAV ; ZASOBNIK
DCX H ; -2
DCX H
SPHL
LHLD PCSAV ; PC
XTHL
LHLD HLSAV
;
; POVOLENI A NASTAVENI PRERUSENI
;
INTER: PUSH PSW
DI ; ZAKAZ PRI MODIFIKACI
LDA PRER ; RIDICI SLOVO
IF NOT CPM
STA 3000H ; NASTAV
ENDIF
POP PSW
EI ; A TAKY POVOL
RET ; POKRACUJ
;
;*********************************************;
; RUN & BREAK MODUL:
;
RESTA: DI
SHLD HLSAV
PUSH PSW
LXI H,4 ; OFFSET
DAD SP
SHLD SPSAV
POP PSW
POP H ; PC
LXI SP,HLSAV
PUSH D
PUSH B
PUSH PSW ; BYL BREAK ?
XCHG
DCX D ; PC-1
LXI H,BRAD ; BREAK ?
MVI C,2 ; DVA BREAKY
RST10: PUSH B
MOV C,M
MVI M,0
INX H
MOV B,M
MVI M,0
INX H
MOV A,C
ORA B ; 0 ?
JZ RST20 ; NEBYL BREAK
MOV A,M ; OBNOV INSTR.
STAX B
INX H
PUSH H
MOV H,B
MOV L,C ; BYL BREAK ?
CALL COMPR
POP H
JNZ RST20
DCX D ; PC-1
RST20: POP B
DCR C
JNZ RST10
XCHG
INX H ; OBNOV PC
SHLD PCSAV
STC
CALL X+3 ; ZOBRAZ VSECHNY REG.
JMP NEXT
;
;*************************************
;
; ZOBRAZ & ZMEN OBSAHY REGISTRU
;
X: CALL CINCR ; PRIKAZ
LXI H,RGNAM ; TABULKA JMEN
MVI D,HIGH ACSAV ;DATA
JNC X1 ; ZMENA
CALL CRLF
X0: CALL XDISP
RZ ;END
INX H
JMP X0
X1: JZ X2 ; ZADNA ZMENA
MOV E,A ; ULOZ JMENO
DB 1 ; LXI B,##
X10: INX H
INX H
MOV A,M ; CTI JMENO REG.
JZ ERROR
CMP E
JNZ X10 ; DALSI
CALL XDIS1
JMP X2+3
;
X2: CALL XDISP+3
RZ
CALL CIMIN ; - PRIKAZ
RC ; CR - END
MOV E,M ; DOLNI ADR.
INX H
JZ X2
XCHG
PUSH D
CALL RBYT ; CTI NOVY BYTE A ZMEN
DCR B
JZ $+6
MOV M,D ; DOLNI BYTE
DCX H
MOV M,E
POP D
XCHG
CPI CR ; POSLEDNI?
RZ ; +
JMP X2 ; DALSI
;
XDISP: CALL SPACE
MOV A,M
ANI 7FH
RZ
CALL COA
XDIS1: CALL EQUAL ; JMENO=
MOV A,M
RLC
MVI A,1
ACI 0 ; SPOCTI DELKU
MOV B,A ; ULOZ
INX H
MOV E,M ; SPODNI ADR.
LDAX D ; HORNI BYTE
CALL DBYT
MOV A,B
DCR A
DCX D
LDAX D ; CTI DRUHY BYTE
CNZ DBYT ; PRO 2.BYTE REG. ZOBRAZ
ORA E
RET
;
; X: TABULKA PRIKAZU
RGNAM: DB 'A',LOW ACSAV+1
DB 'F',LOW ACSAV
DB 'B',LOW BCSAV+1
DB 'C',LOW BCSAV
DB 'D',LOW DESAV+1
DB 'E',LOW DESAV
DB 'H',LOW HLSAV+1
DB 'L',LOW HLSAV
DB 'P' OR 80H,LOW PCSAV+1
DB 'S' OR 80H,LOW SPSAV+1
DB 0
;
; PRACE S PAMETI: PROHLIZENI, PLNENI, PRESUV A ZAMENA
;****************************************************
;
; ZOBRAZENI OBSAHU PAMETI
;
DISP: CALL EXPR ; OD - DO
POP D
POP H
DI0: PUSH H ; PRVNI ADR.
CALL DNADR ; NOVA ADR.
DI1: MOV A,M
CALL DBYTE
CALL HILO
JC DIA ; ZOBRAZ ASCII
MOV A,L
ANI 7
JNZ DI1 ; DALSI BYTE
DIA: POP H
CALL SPACE
DI2: MOV A,M
CALL BIG
CPI ' '
JC DI4
CPI 7BH
JC DI5
DI4: MVI A,'.'
DI5: CALL COA
CALL HILO
RC
MOV A,L
ANI 7
JNZ DI2 ; DALSI ASCII
CALL CSTS
JZ DI0 ; DALSI RADEK
CALL CIMIN ; ' '..PRERUSENI
RC ; CR
DI3: CALL CINCR
RC ; CR
JMP DI0
;*************************************
;
; NAPLNENI PAMETI KONSTANTOU
;
FILL: INR C
CALL EXPR ; OD-DO-CIM
POP B
POP D
POP H
FI1: MOV M,C
CALL HILO
JNC FI1
RET
;*************************************
;
; PRESUN BLOKU PAMETI
;
MOVE: INR C
CALL EXPR
POP B
POP D
POP H
MO1: MOV A,M
STAX B
INX B
CALL HILO
JNC MO1
RET
;*************************************
;
; ZMENA OBSAHU PAMETI
;
SUBS: CALL RADR ; ADR.
SU1: MOV A,M
CALL DBYT
CALL CIMIN ; - & CINCR
RC ; CR
JZ SU2
CALL RBYT ; ZMENA
RZ ; KONEC
SU2: INX H ; DALSI BYTE
CPI ',' ; PRO "," ZOBRAZ ADR.
CZ DNADR
JMP SU1
;
;********************************************
; PODPROGRAMY MONITORU A SLUZBY
;********************************************
;
; SKLADANI ADRES (VSTUP PARAMETRU) DO ZASOBNIKU,
; POCET V C-REG.
;
EXPR0: JC ERROR
EXPR: CALL EQUAL ; TISK =
LXI H,0
EX0: CALL ECHO
EX1: MOV B,A
CPI 27H ; "'"
JZ EX4
CALL ASHEX
EX2: JC EX3 ; HEX CIFRA ?
DAD H ; POSUV "HL" O 4 BITY VLEVO
DAD H
DAD H
DAD H
ORA L
MOV L,A
JMP EX0 ; DALSI ZNAK
EX3: MOV A,B
CALL ANAL
JNZ EX5 ; NENI HEX CIFRA
XTHL
PUSH H
DCR C ; CARKA, MEZERA
JNZ EXPR0 ; DALSI ADRESY
RNC
;
CRLF: CALL TX
DB CR,LF OR 80H
RET
;
EX5: CALL TX
DB 88H ; BACK SPACE
JMP EX0 ; ZRUS CHYBU
;
EXPRM: MVI C,1
LXI H,0
JMP EX1
;
EX4: CALL CINCR ; PRIKAZ
MOV B,A ; ULOZ
JZ EX3
MOV H,L
MOV L,A
JMP EX4
;**************************************
; INKREMENTUJE "HL" ,KONTROLUJE "HL"=0 NEBO
; "HL"glt;"DE"...CARRY=1
HILO: INX H
MOV A,H
ORA L
STC
RZ ; NAVRAT PO "HL"=0000
COMPR: MOV A,D
CMP H
RNZ
MOV A,E
CMP L
RET
; CTI ADRESU
RADR: MVI C,1
CALL EXPR
POP H
MOV A,L
RET
; ZOBRAZ NOVOU ADRESU
DNADR: CALL CRLF
DADR: CALL DADR0
JMP SPACE
;
; PREVOD HEXADECIMALNI CIFRY NA ASCII V "C" REG
HXANIB: ANI 0FH
;
HXASC: ADI 90H
DAA
ACI 40H
DAA
MOV C,A
RET
; ZJISTI KONEC RAM <Aglt;,<Bglt;..HIGH
MEMCK: PUSH H
LHLD MEMTOP
MOV A,L
MOV B,H
POP H
RET
; PREVOD ZNAKU ASCII NA HEXADEC.
ASHEX: CALL BIG ; VELKA PISMENA
SUI '0'
RC ; FILTR < (00-2F)
CPI 17H ; '0'..'F'..HEX
CMC
RC ; CY=1..CHYBA
CPI 10
CMC
RNC ; 0-9 .. KOD
CPI 11H
RC ; CHYBA
SUI 7
RET ; A-F .. KOD
CIMIN: CALL MINUS ; -
;
CINCR: CALL ECHO
ANAL: CPI ','
ANAL0: RZ
CPI ' '
ANAL2: RZ
CPI CR
STC
RZ
ORA A
RET ; PO CR CARRY=1
;
; TEXT PRIMO ZA VOLANIM
;
TX: XTHL
MOV A,M
ANI 7FH
CALL COA
MOV A,M
RLC ; PARITA..KONEC
INX H ; DALSI ZNAK
JNC TX+1 ; ZOBRAZ
XTHL ; OBNOV PC
RET
; VYPIS TEXTU - HL ADRESA, D DELKA
TEXT: MOV A,M
INX H
CALL COA
DCR D
JNZ TEXT
RET
;
; ECHO
;
ECHO: CALL CI
CALL BIG
COA: PUSH B
MOV C,A
CALL CO
POP B
RET
; IODEF:... DEFINICE UZIVATELSKYCH I/0 RUTIN
IODEF: MOV A,C ; CISLO
CPI IONUM
RP
PUSH B
PUSH H
ADD C
ADD C
MOV C,A
MVI B,0 ; OFFSET
LXI H,CILOC ; SPOCTI ADR.
DAD B
MVI M,0C3H ; JMP
INX H
MOV C,M
MOV M,E
INX H
MOV B,M
MOV M,D ; ADR.
MOV D,B ; DE..PUVODNI OBSAH
MOV E,C
POP H
POP B
RET
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; I/O PERIFERIE
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
; VOLBA PERIFERII PODLE IOBYTE
;
CSTS: LDA IOBYT ; USER1, USER2
RAR
RAR
JC CSLOC ; USER CSTS
JMP CSTS@ ; SYSTEM.CSTS
;
CI: CALL DEV
CITB: DW CI@,CI@,RI,CILOC
IF HIGH ($-CITB)
.PRINTX "CHYBA V DEFINICI I/O TABULKY"
ERRIO EQU $
ENDIF
;
DEV: LDA IOBYT
DEV0: ANI 3
XTHL
JMP INJMP
;
RI: LDA IOBYT
RRC
RRC
CALL DEV0
;
RITB: DW CI@,RI@,R1LOC,R2LOC
;
IF HIGH ($-RITB)
.PRINTX "CHYBA V DEFINICI I/O TABULKY"
ERRIO EQU $
ENDIF
;
HBT: RRC
RRC
RRC
RRC
LBT: CALL HXANIB
;
PO: LDA IOBYT
RRC
RRC
RRC
RRC
CALL DEV0
;
POTB: DW CO,PO@,P1LOC,P2LOC
;
IF HIGH ($-POTB)
.PRINTX "CHYBA V DEFINICI I/O TABULKY"
ERRIO EQU $
ENDIF
;
LO: LDA IOBYT
RLC
RLC
CALL DEV0
;
LOTB: DW COLO,CO,LO@,LILOC
IF HIGH ($-LOTB)
.PRINTX "CHYBA V DEFINICI I/O TABULKY"
ERRIO EQU $
ENDIF
;
; ZOBRAZ ADRESU Z "HL"
DADR0: MOV A,H
CALL DBYT
MOV A,L
; ZOBRAZ BYTE <Aglt;
DBYT: PUSH PSW
RRC
RRC
RRC
RRC
CALL LBYTE
POP PSW
DNIBL:
LBYTE: CALL HXANIB
;
CO: CALL DEV
;
COTB: DW COLO,COOUT,LO,COLOC
;
IF HIGH ($-COTB)
.PRINTX "CHYBA V DEFINICI I/O TABULKY"
ERRIO EQU $
ENDIF
;****************************************************
; OBSLUHA T.V. A NEBO TERMINALU
;****************************************************
;
; CONSOLE OUTPUT
; <Cglt;...ZAPISE NA OBRAZOVKU
;
; SM 7202 .. SERIOVY VYSTUP
;
SEROUT: IN USTAT
ANI 40H
JZ SEROUT
MOV A,C
OUT UDATA
RET
;
; ZOBRAZ A TISKNI
;
COLO: CALL LO
;
;********************************************
; OBSLUHA T.V. A SIMULACE DISPLEJE <Cglt;..ZNAK
;********************************************
;
COOUT: LDA MODE
RRC
CC LO@ ; TISK
JMP CO@ ; TERMINAL
;
;--------------------------------
;
CO@@: MOV A,C
CPI 7FH ; DEL
RZ
CPI HT
JZ TAB@
PUSH D
PUSH H
PUSH B
LHLD CADR ; VYMAZ KURSOR
CPI ' ' ; PRO ' '...'Z' PIS
JC CONTROL ; RIZENI T.V.
;
; ZAPIS ZNAKU DO VIDEO RAM
;
CO@WR: LDA XFLG ; ADRESACE KURSORU?
ORA A
JNZ ADRCUR ; +
IF TV64
MOV M,C
ELSE
MOV A,C ; VYTVOR KOD PRO AND-1
CALL BIG
ANI 3FH
MOV M,A ; ZAPIS ZNAK !
LDA MODE
ANI 0C0H
CNZ ATTR
ENDIF
;
COEXAT: CALL CONXT ; VYPOCTI DALSI ADRESU
; ZAPIS NOVY KURZOR
COEXX: POP B
COEX0: MOV A,M
STA CHAR
SHLD CADR
LDA MODE ; KURSOR (Y/N)
ANI 20H
JNZ COEX1
MVI M,CURSOR
COEX1: POP H
POP D
MOV A,C
RET ; KONEC CONSOLE OUTPUT
;***********************************************
;
; ZPRACOVANI RIDICICH ZNAKU ( SIMULACE SM7202 )
;
CONTROL:
LXI H,COEX ; ADRESA NAVRATU
PUSH H ; OBNOVENI ZNAKU MISTO
CALL OBNOV ; KURZORU
MOV A,C
CPI CR
JZ CR@
CPI LF
JZ LF@
CPI EOL
JZ EOL@
CPI BACK
JZ BACK@
CPI RIGHT
JZ CONXT
CPI HOME
JZ HOME@
CPI ERS
JZ ERS@
CPI UP
JZ UP@
CPI VT
JZ VT@
CPI WNDCD
JZ WNDCH
CPI ESC
RNZ
ESC@: STA XFLG
RET
;
; VYPOCTI NOVOU POZICI
;
COEX: CALL COADR
JMP COEXX ; ZAPIS KURZOR
;
;-------------------------------------------------
; PODPROGRAMY
;--------------------------------------------------
;
; NASTAV MODE A I/O FLAGY
;
EXFLG: MOV B,A
INR C ; SPEC. FUNKCE
JZ BINAR
DCR C
MOV A,C
CPI EXSER ; PRETECENI?
MOV A,B
RNC
PUSH H ; <Aglt; .. PRIKAZ
; <Cglt; .. 0-N SLUZBA
MVI B,0 ; 0-MODE, 1-@IF1..4-@OF2
LXI H,MODE ; C=O
DAD B
MOV B,M ; <Bglt;..PUVODNI NASTAVENI
MOV M,A
POP H
MOV A,C
CPI 5
RC ; C=5,6 .. OBNOV KORZOR
CPI 7
RNC
EXFLG1: PUSH D
PUSH H
CALL OBNOV
JMP COEX0 ; OBNOV KURZOR
;
; OBNOVA KURSORU
;
OBNOV: LHLD CADR
LDA CHAR
MOV M,A
;
; VYPOCTI NOVOU ADRESU
;
COADR: LHLD LINE ; SPOCTI ADR.<HLglt;
PUSH H
MVI H,0
DAD H
DAD H
DAD H
DAD H
DAD H
DAD H ; 64*
LXI D,TVBEG ; TV-RAM
DAD D ; ZACATEK RADKU
POP D ; NSTAV DE
MOV A,L ; D-SLOUPEC
ORA D ; E-RADEK
MOV L,A ; HL...ADR
RET
;
; ADRESACE KURZORU: ESC, Y, X
;
ADRCUR: DCR A
MOV A,C ; ZNAK
JZ ADRCX ; "X"
SUI ' ' ; "Y"
CPI HEIGHT
RNC
STA LINE
MVI A,1
JMP ESC@0
ADRCX: SUI ' '
CPI WIDTH
RNC
STA COLUM
XRA A ; ZRUS PRIZNAK
ESC@0: STA XFLG
CALL OBNOV
JMP COEXX
;
; ZMENA OKNA
;
WNDCH: LXI H,WNDP ; ADRESA NOVYCH PARAMETRU
WND@: LXI D,LINE ; PUVODNI NASTAVENI
MVI B,6 ; DELKA
WND@0: LDAX D
MOV C,M ; ZAMENA
MOV M,A
MOV A,C
STAX D
INX D
INX H
DCR B
JNZ WND@0
JMP EXFLG1 ; OBNOV KURZOR
IF NOT TV64
;
; ZPRACUJ ATTRIBUT
;
ATTR: ORA M
MOV M,A
SUI 0C0H
RC
ENDIF
;
; VYPOCTI DALSI ADRESU
;
CONXT: INX H ; JE TO
CALL CMAX ; POSLEDNI ZNAK
MOV B,A
MOV A,L ; KONEC RADKU ?
ANI 3FH
IF TV64
JZ CONX1
ENDIF
STA COLUM
CMP B ; KONEC RADKU
RC ; NE
CONX1: CALL CR@ ; NASTAV SLOUPEC
;
; NOVY RADEK
;
LF@: CALL VT@
RNC
;
; ROLUJ OBRAZOVKU
;
ROLL@: LHLD RESL
MOV A,C
SUB L
DCR A
MOV C,A ; POCET RADKU
CALL CMAX
SUB H
MOV B,A ; POCET ZNAKU
CALL COADR+3 ; PRVNI RADEK
ROLL: XCHG
LXI H,LINOF ; OFFSET
DAD D
PUSH B
PUSH H ; PRO DALSI RADEK
ROLL1: MOV A,M
STAX D
INX D ; +
INX H
DCR B
JNZ ROLL1 ; VSECHNY RADKY
POP H
POP B
DCR C ; KONEC ?
JNZ ROLL
ROLL2: CALL EOL@
JMP COADR
;
; VYMAZ ZBYTEK OBRAZOVKY
;
ERS@: CALL EOL@
LHLD LINE
LDA RESC
MOV H,A ; 1.ZNAK NA RADKU
CALL LMAX ; POCET RADKU
SUB L
DCR A
MOV C,A ; CITAC
JZ COADR ; KONEC
CALL COADR+3
ERS@1: LXI D,LINOF
DAD D
PUSH H
CALL EOL@
POP H
DCR C
JNZ ERS@1
RET
;
; VERTIKALNI TAB.
;
VT@: CALL LMAX ; POSLEDNI RADEK ?
MOV C,A
LDA LINE ; CISLO RADKU
INR A
CMP C ; KONEC?
CMC
RC
STA LINE
JMP COADR
IF NOT CPM
; VYMAZ ZBYTEK RADKU
;
EOL@: MOV A,L
ANI 3FH ; CISLO ZNAKU
MOV B,A
CALL CMAX ; MAX. POCET ZNAKU
SUB B ; POCET ZNAKU PRO VYMAZ
EOL@1: MVI M,' ' ; CISTI
INX H
DCR A
JNZ EOL@1
RET
;
; VRAT KURZOR ZPET
;
BACK@: LDA RESC ; JE TO 1. ZNAK
CMP D
MOV A,D
JNZ BAC@1
CALL UP@
RNC ; HORNI OKRAJ
CALL CMAX
BAC@1: DCR A
JMP CR@+3
;
; NASTAV ZACATEK OBRAZOVKY
;
HOME@: LDA RESL
STA LINE
;
; NOVY RADEK
;
CR@: LDA RESC
STA COLUM
RET
;
; KURZOR NAHORU
;
UP@: LDA RESL
CMP E
RZ ; REZERVA
MOV A,E
ORA A
RZ ; VRCHOL
DCR A
STA LINE
STC
RET
ENDIF
;****************************************************
; PREKODOVANI ZNAKU PRO :CI:
;----------------------------
; PREVOD PRO 262.3 PL-CS
;
TABZN: DB 0D2H,80H,8DH,1DH ; CS-LOCK, HOME
DB 82H,81H,83H,81H ; CS-COPY
DB 0C1H,1AH,0C2H,0BH ; KURZOR
DB 0C3H,18H,0C4H,08H
DB 0D0H,0DCH,0D1H,0E0H ; '^
DB 0 ; KONEC
;
; TABULKA ZNAKU:
;
CSKOD: ; CISLA NA CS-KODY
DB 0D7H,02BH,0C5H,0D3H,0C3H
DB 0D2H,0DAH,0D9H,0C1H,0C9H
;
; PREVOD WM-KODU A CISEL
;
TBWM: DB ',-.' ; ,-.
DB 81H ; CS 0
DB '0123456789'
RRAM EQU $
;*****************************************************
IF RRAM GT 809H
.PRINTX 'SPATNA TABULKA O.S'
QQQQQQ
ENDIF
ORG 809H ; SLUZBY MIKOSU
JMP FIND
JMP OPEN
JMP CLOSE
JMP LOADCD
JMP SAVECD
DB 'PERINA '
;****************************************************
IF CPM
;
; VYMAZ ZBYTEK RADKU
;
EOL@: MOV A,L
ANI 3FH ; CISLO ZNAKU
MOV B,A
CALL CMAX ; MAX. POCET ZNAKU
SUB B ; POCET ZNAKU PRO VYMAZ
EOL@1: MVI M,' ' ; CISTI
INX H
DCR A
JNZ EOL@1
RET
;
; VRAT KURZOR ZPET
;
BACK@: LDA RESC ; JE TO 1. ZNAK
CMP D
MOV A,D
JNZ BAC@1
CALL UP@
RNC ; HORNI OKRAJ
CALL CMAX
BAC@1: DCR A
JMP CR@+3
;
; NASTAV ZACATEK OBRAZOVKY
;
HOME@: LDA RESL
STA LINE
;
; NOVY RADEK
;
CR@: LDA RESC
STA COLUM
RET
;
; KURZOR NAHORU
;
UP@: LDA RESL
CMP E
RZ ; REZERVA
MOV A,E
ORA A
RZ ; VRCHOL
DCR A
STA LINE
STC
RET
ENDIF
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; PRACE S OKNY
;
CMAX: LDA RESC1 ; MAX POCET ZNAKU
ORA A
RNZ ; JE ZADAN
CMAX0: MVI A,WIDTH
RET
;
LMAX: LDA RESL1 ; MAX POCET RADKU
ORA A
RNZ
LMAX0: MVI A,HEIGHT
RET
TAB@: PUSH B
CALL SPACE
LDA CADR ; MODULO 8
ANI 7
JNZ TAB@+1
POP B
MOV A,C
RET
;
;****************************************************
; OBSLUHA KLAVSNICE NEBO TERMINALU <Aglt;..ZNAK
;****************************************************
;
CALL INIC-6 ; ^W
CI@: LDA MODE ; ZAKAZ CURSORU
ANI 20H
JNZ CI@CU ; ANO
LDA KEY ; NASTAV TYP KURZORU
ORA A
MVI A,CURSOR ; NORMALNI ZNAK
JZ SETCUR
MVI A,5EH ; ' ^
JP SETCUR
LDA CUR@ ; CS-LOCK
SETCUR: PUSH H
LHLD CADR
MOV M,A ; ZAPIS
POP H
CI@CU: CALL CI@0 ; HANDLER
CI@1: PUSH B
MOV B,A
CALL DEKOD ; DEKODUJ KLAVESY
LDA CSKOD@ ; KOD CS
MOV C,A
;NORMALNI MOD NEBO CS
LDA MODE
ANI 4
JNZ CICS ; CESKA ABECEDA
; POCITACOVE ZNAKY ...
MOV A,B
POP B
CALL BIG
CPI PRNT
JZ CI@-3 ; ^W
CPI CTRLP
JZ CHANGE ; ^P
CPI CTRLQ ; ^Q
RNZ
CALL CI@
ANI 0FH ; MAX 0-15
STA RESL
JMP CI@ ; NOVY ZNAK
;
CHANGE: LDA MODE
XRI 1
STA MODE
JMP CI@
; PREVOD NA VELKA PISMENA
BIG: ANI 7FH
CPI 7BH
RNC
CPI 61H
RC
SUI 20H
RET
;
; INICIALIZACE
;
CINIT: MVI A,ALLINT ; POVOL A NASTAV RST 0
STA PRER ; NASTAV UROVEN
LXI H,TABZN ; DEKODOVANI 263 CS-PL
CALL KODASC
LXI H,TBWM
;
; SLUZBA PRO NASTAVENI WM. KODU A CS. KODU
;
KODWM: LXI B,WMKOD
MVI E,14-1 ; DELKA
JMP FIL@
;
; SLUZBA PRO NASTAVENI PREVODU ZNAKU
;
KODASC: LXI B,PREV
MVI E,21-1
; POMOCNY
FIL@: MVI D,0 ; DELKA
XCHG
DAD D ; KONCOVA ADR.
XCHG
JMP MO1
; CTENI ZNAKU Z KLAVESNICE S CESKYMI KODY
;========================================
CICS: MOV A,C
CMP B ;CS
MVI A,81H ; CS-KOD
JZ ZMECS
MOV A,B
CPI 0DCH ; HACEK
JZ ZMECS
CPI 0E0H ; CARKA
JZ ZMECS
CPI 80H ; CS-LOCK
JZ ZMENA
LDA KEY
ORA A
JM CESKY ; 1 ZNAK CS
JNZ CTICS ; CS LOCK
MOV A,B
POP B
;
; VYPOCTI WM-KOD MISTO CISEL
;
WMDO: CPI 0ACH ;","
RC ; NENI CS-KOD
CPI 0BAH ; JE glt; '9' OR 80H
RNC
PUSH H
LXI H,TBWM - 0ACH
KODU@: PUSH B
MVI B,0
MOV C,A
DAD B
MOV A,M
POP B
POP H
RET
;
; ZMEN KEY TLACITKO SET
ZMENA: LDA KEY
XRI 1
ZMECS: STA KEY
POP B
JMP CI@
; CTI CS.KOD
CTICS:
MOV A,B
POP B
CPI 0C0H ; CS U
RNC
ORA A
JP CTIC1
ANI 7FH ; UDELEJ CISLA
RET
CTIC1: CALL CISLO
RC ; NENI
CTIC2: PUSH H ; MISTO CISLA CS
LXI H,CSKOD-'0'
JMP KODU@
; JE CISLO ? CY=0 ANO
CISLO: CPI '0' ; MISTO CISEL CS. KOD
RC
CPI '9'+1
CMC
RET
; CESKY - 1 ZNAK
CESKY:
CPI 0E0H
CZ ZCARKA
CPI 0DCH
CZ ZHACEK
MVI A,1
STA KEY ; NASTAV SET NA CS
MOV A,B
POP B
CALL CISLO
JNC CTIC2
XRI 0A0H
RET
;
; ZMEN HACEK
DEKOD: PUSH H
LXI H,PREV-1
ZHA0: PUSH PSW
ZHA1: INX H
MOV A,M
ORA A
JZ ZHA2 ; KONEC
INX H
CMP B ; ZNAK
JNZ ZHA1
MOV B,M ; ZMENA
ZHA2: POP PSW
POP H
RET
; ZMEN CARKU
ZCARKA: PUSH H
LXI H,TCARKA-1
JMP ZHA0
; ZMEN KODY KLAVES
ZHACEK: PUSH H
LXI H,THACEK-1
JMP ZHA0
;-----------------------------
THACEK: DB 'ujUJ',0 ; ZMENY PRO HACEK
TCARKA: DB 'rfRFewEWlkLK',0 ; CARKU
;
;****************************************************
; ZJISTI STATUS ZY=1..NENI ZNAK, #0 JE ZNAK
;****************************************************
;
; STATUS SM 7202 ZY=1 .. NENI ZNAK
;
SMST: IN USTAT
RAL
MVI A,0
SBB A
RET
;
; STATUS KLAVESNICE ZY=0 JE ZNAK
;
CSTS@@: IF CPM
IN P0
ELSE
LDA PORTK
ENDIF
RRC
MVI A,-1
ACI 0
RET
;
;****************************************************
; HANDLER PRO KLAVESNICI
;****************************************************
;
; CTENI ZNAKU ZE SERIOVE LINKY
;
SERIN: IN USTAT
RAL
JNC SERIN ; SERIOVY VSTUP
IN UDATA
ORA A
RET
;
; VSTUP ZNAKU Z KLAVESNICE
;
CI@@: CALL CSTS@@
JC CI@@
PUSH H
IF CPM
IN P1
CMA
MOV L,A
MVI A,3
OUT P0
CI1: IN P0
RRC
JNC CI1
MVI A,2
OUT P0
ELSE
MVI H,(HIGH PORTK) + 4
MOV A,M
CMA
MOV L,A ; DATA
DCR H
MVI M,3
CI2: MOV A,M
RRC
JNC CI2
MVI M,2
ENDIF
MOV A,L
POP H
RET
;
; NASTAV MODE
;
CHMODE: CALL RADR
STA MODE
RET
;
; NASTAV UROVEN PRERUSENI
;
Y: CALL RADR ; CTI
STA PRER
RET ; ZAPIS
;
; NASTAV CASOVANI MGF
;
Z: CALL RADR
STA CASK
RET
;
; VERIFY: KONTOLNI SOUCET
;
VERIFY: CALL EXPR ; OD-DO
POP D
POP H
CALL VYPSUM
MOV A,B
DBYTE: CALL DBYT
SPACE: MVI C,' ' ; DISPLAY MEZERY
JMP CO
IF CPM
;
; KOPIRUJ RI -glt; PO
;
COPY: CALL RI
JC CRLF
MOV C,A
CALL LO ; "H" VYBERE PERIF.
JMP COPY
;
; READ DALSI BYTE
;
RBYT0: MVI A,'0'
RBYT: PUSH B
PUSH H
CALL EXPRM
POP D
POP H
MOV M,E
MOV A,B
CPI CR
POP B
RET
;**************************************
; OBECNA CAST O.S.
;**************************************
;
; VOLANI O.S Z MONITORU
;
KOS: MVI C,-1
JMP KOS@
;
;INIT O.S
;
KOSI: MVI C,0
JMP KOS@
;
; SLUZBY KOMPATIBILNI Z MONITOREM V4.0
;
FIND: MVI C,1
JMP KOS@
OPEN: MVI C,2
JMP KOS@
LOADCD: MVI C,4
JMP KOS@
SAVECD: MVI C,5
JMP KOS@
BINAR: MVI C,6
JMP KOS@
;****************************************************
;
JMENO: DB '"',CR ; PRAZDNE
;
; INSTALUJ HANDLER PRO TISKARNU
;
HNDIN: CALL RADR
ADD A ; *2
CPI HNDMX
RNC ; VETSI...
MVI H,0
MOV L,A
LXI D,TABHND
DAD D ; ADR. ADRESY HNDLR
MOV A,M
STA LO@ + 1 ; PREPIS
INX H
MOV A,M
STA LO@ + 2
DUMMY: RET
;------------------------
; TABULKA HANDLERU
;
TABHND: DW DUMMY ; 0.. PRAZDNY HANDLER
DW LO@@ ; 1.. C 211
DW CENTRO ; 2.. CENTRONICS
DW D100S ; 3.. D 100 S
DW D180 ; 4.. D 180
DW PO ; 5.. PUNCH DEVICE
DW CO@ ; 6.. CONSOLE OUTPUT
DW SEROUT ; 7.. SERIOVY VYSTUP
HNDMX EQU $-TABHND
;
;****************************************************
; LIST OUTPUT <Cglt;... ZNAK
;****************************************************
;
D180: MOV A,C
CMA
MOV C,A
LO@@: CALL LO@3
MOV A,C
OUT P2
LO@1: IN P2
ADD A
JP LO@1
MVI A,3
OUT P1
LO@2: IN P2
ADD A
JM LO@2
LO@3: MVI A,1
OUT P1
MOV A,C
RET
;
; SERIOVY INTERFACE PRO :LP:
;
D100S: MVI A,0EH ; SERIOVE PRIPOJENI D100
OUT MMODE ; PREPOJ
D101: IN USTAT
ADD A
JNZ D101
MOV A,C
OUT UDATA
MVI A,2
OUT UMODE
D102: IN USTAT
ADD A
JZ D102
MOV A,C
RET
;
; INTERFACE CENTRONICS
;
CENTRO:
MOV A,C
OUT P2
CENTR1: IN P2
ANI 60H
CPI 20H
JNZ CENTR1 ; BUSY ?
XRA A
OUT P1
XTHL
XTHL
MVI A,2
OUT P1 ; PULS
MOV A,C
RET
ENDIF
;------------------------------------------------
;
; ZAVED 1. PROGRAM NA PASCE
;
LOADB: LXI H,JMENO
CALL LOADCD
LHLD SADR ; 1.ADR
MOV A,M
CPI 0C3H ; POVINNY START SYST. PRGM
JNZ UKAZ ; JENOM UKAZ
LXI D,BASIC+1
CALL HILO
JNZ JUMP ; START (NENI SYS.)
INX D
INX D
LDAX D ; BASIC/TOOL..
CPI 0C3H
JZ PCMD ; NENI BASIC
;
; SKOK NA SYSTEMOVE PROGRAMY
;
BCMD: MVI B,'B' ; BASIC
LXI H,BASIC
B0: LXI D,@BT
B1: MOV A,M
CPI 0C3H ; SKOK
JNZ ERROR ; NENI EPROM SYSTEM
LDAX D
CMP B ; TEPLY START ?
JZ B2 ; +
ORA A
JNZ ERROR
MOV A,B
STAX D ; NASTAV FLAGY
DCX H
DB 11H
;
B2: INX H
INX H
INX H
PUSH H ; TEPLY START
JMP INTER
;
TCMD: MVI B,'T'
LXI H,TRACER
JMP B0
;
PCMD: MVI B,'P' ; PEDIT
LXI H,PEDIT
LXI D,@PED
JMP B1
;
; SKOK DO UZIVATELSKEHO PROGRAMU
;
JUMP: CALL UKAZ
XCHG
MOV A,L ; ZADNY PROGRAM
ORA H
JZ ERROR ; PRAZDNY
PUSH H ; START
CALL VYPSUM
LDA SUM
CMP B
RZ
;
; OSETRENI CHYBY
;
ERROR: CALL QUES
JMP ERRSW ; PREDEJ RIZENI PO CHYBE
;
VYPSUM: MVI B,0 ; SUMA
J1: MOV A,M
ADD B
MOV B,A
CALL HILO
JNC J1
RET
;
; UKAZ ADRESY PROGRAMU OD-DO
;
UKAZ: LHLD SADR
CALL DNADR
XCHG
LHLD EADR
JMP DADR
;
; "END OF FILE" PRIKAZ
;
EOF: CALL RADR ; START.ADR
MVI B,1 ; TYP ZAZNAMU
XRA A ; PARAM.
MOV E,A ; POCET BYTE
CALL PBEG
XRA A
SUB D ; KONTROLNI SOUCET
CALL PBYTE
CLOSE: MVI C,3 ; CLOSE
JMP KOS@
;
; CTI HEX INTEL FORMAT
;
READ@: CALL FIND
CALL CRLF
CALL RADR ; OFFSET
DB 3EH ; MVI A,#
RED1: POP H
PUSH H
REDC1: CALL MREAD ; CTI BYTE
SUI ':' ; ZACATEK ZAZNAMU ?
JNZ REDC1 ; ANO
REDC2: MOV D,A ; NULOVANI KONTR. SOUCTU
CALL RBYTE ; DELKA RADKU
JZ RED3 ; KDYZ 0, KONEC
MOV E,A ; NASTAVENI CITACE
CALL RBYTE ; HORNI ADR.
PUSH PSW
CALL RBYTE ; SPODNI ADR.
POP B
MOV C,A
DAD B ; OFFSET ADRESY
CALL RBYTE ; PRIZNAK
RED2: CALL RBYTE ; STROJ. KOD
MOV M,A
CMP M ; TEST PAMETI
MVI C,'M' ; ERROR 'M'
JNZ REDER
INX H
DCR E ; CITAC BYTE STROJ. KODU
JNZ RED2
CALL RBYTE ; KONTR. SOUCET Z PASKY
JZ RED1 ; OK
MVI C,'S' ; ERROR 'S' - KONTROLNI SUMA
REDER: CALL CO ; TYP CHYBY
CALL DADR
JMP ERROR
RED3: PUSH H
CALL RBYTE ; HORNI START.ADR
MOV H,A
CALL RBYTE ; SPODNI START.ADR
MOV L,A
CALL RBYTE ; KONTROLNI SUMA
CALL RBYTE
JNZ REDER-2 ; CHYBA
POP D
MOV A,D
ORA E ; OFFSET ?
POP D ; UPRAVA ZASOBNIKU
RNZ ; ANO, NE START
MOV A,H
ORA L ; START.ADR
RZ ; NE
PCHL
;
; ZAPIS HEX FORMAT
WRITE: MVI C,2
CALL EXPR
CALL CRLF
POP D
POP H
WR1: MOV A,L
ADI 10H
MOV C,A
MOV A,H
ACI 0
MOV B,A
MOV A,E
SUB C
MOV C,A
MOV A,D
SBB B
JC WR2
MVI A,10H ; glt;16
JMP WR3
WR2: MOV A,C ; <16
ADI 11H
WR3: ORA A
RZ ; DALSI
PUSH D ; USCHOVA HORNI ADR.
MOV E,A ; NASTAVENI CITACE
XRA A
MOV B,A ; TYP
CALL PBEG
WR4: MOV A,M
INX H
CALL PBYTE ; STROJ. KOD
DCR E
JNZ WR4
XRA A
SUB D
CALL PBYTE ; KONTR. SOUCET
POP D
JMP WR1
; PRECTE 2 ZNAKY, SESTAVI BYTE, TVORI KONTR. SOUCET
RBYTE: CALL MREAD ; CTE ZNAK S MASKOU 7F
CALL ASHEX ; PREVOD ASCII-HEX
RLC
RLC
RLC
RLC
MOV C,A
CALL MREAD
CALL ASHEX
ORA C ; SESTAVI BYTE
MOV C,A
ADD D ; KONTROLNI SOUCET
MOV D,A
MOV A,C
RET
; KONEC VYRAZU
TERM: CPI HT
RZ
JMP ANAL
; PIS ZACATEK ZAZNAMU
PBEG: MOV D,A ; NULUJ KONTROLNI SUMU
MVI C,CR
CALL PO
MVI C,LF
CALL PO
MVI C,':'
CALL PO
MOV A,E ; E .. POCET BYTE
CALL PBYTE
MOV A,H ; HL .. ADR
CALL PBYTE
MOV A,L
CALL PBYTE
MOV A,B ; TYP
PBYTE: PUSH PSW
CALL HBT
POP PSW
PUSH PSW
CALL LBT
POP PSW
ADD D
MOV D,A
RET
;
; CTE ZNAK S MASKOU, PRO CHYBU NASTAVI CARRY
MREAD: CALL RI
JC ERROR
ANI 7FH ; POTLACENI PARITNIHO BITU
JZ MREAD
RET
;
;
; CTI JMENO Z KLAVESNICE NEBO PROGRAMU
;
RNAME: XCHG
MOV A,M ; HL UKAZUJE NA EXTERNI TEXT
STA EXTEXT ; ".. JE JMENO
CPI '"'
INX H
MVI B,62 ; MAX. DELKA
LXI D,NAMBUF
PUSH D ; ADR PRO ZAPIS
JNZ RNAMC ; CTI Z CI
RNAM1: MVI A,' '
STAX D
MOV A,M
CALL BIG
CALL ANAL1
JZ RNAM2-1
STAX D
INX H
INX D
DCR B
JNZ RNAM1 ; JE JESTE MISTO
XCHG
RNAM2: INX H
MVI M,' ' ; KONEC
MVI A,LOW @RAM ; VYCISTI BUFFER
INX H
MVI M,0
CMP L
JNZ $-4
POP H ; ANALYZA POVELU
MOV A,M
CPI '@' ; APPEND ?
INX H
JZ RNAM3
CPI '.' ; REWIND
JZ RNAM3
MOV A,M ; VOLBA IOBYTE
CPI ':' ; DEF. USER 1/2
DCX H
MVI A,0 ; NENI
JNZ RNAM3
MOV A,M ; ZAPIS KOD
INX H
INX H
RNAM3: STA OPT ; <Aglt;.. OPTION
RET ; <HLglt;.. 1. ADRESA JMENA
;
; ANALYZA ODDELOVACE
;
ANAL1: CPI '"'
JMP ANAL2
;-----------------------------------
RNAMC: PUSH D
CALL TX
DB CR,LF
IF TV64
DC ' Nazev:'
ELSE
DC ' NAZEV:'
ENDIF
POP H
MOV E,L
RNAM6: MVI M,' '
CALL CI
CALL BIG
CPI ETX
JZ NEXT
CPI CR
JZ RNAM9
CPI DEL
JZ RNAM7
CPI 8
JNZ RNAM8
RNAM7: MOV A,E
CMP L ; PRVNI
JZ RNAM6
DCX H
INR B
CALL TX ; DELETE
DB 08,20H,88H
JMP RNAM6
RNAM8: MOV M,A
INX H
CALL COA
DCR B
JNZ RNAM6
RNAM9: CALL CRLF
JMP RNAM2
;********** KONEC MONITORU ***************
DB 255
;
@@@MON EQU $
;
;*********************************************
; ROZDELENI S Y S T E M O V E R A M
;*********************************************
;
RST1 EQU @R@ ; RST VEKTORY
;........glt;glt;glt;
;......
;<<... UZIVATELSKY & MONITOR. ZASOBNIK
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.PHASE @R@+6DH
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; DATA MONITORU
;
MSTAK: DS 2 ; USCHOVA REGISTRU
ACSAV: DS 2
BCSAV: DS 2
DESAV: DS 2
HLSAV: DS 2
PCSAV: DS 2
SPSAV: DS 2
;
BRAD: DS 2
INSTR: DS 1
BRAD2: DS 2
INST2: DS 1
CADR: DS 2 ; ADRESA KURSORU
;-------------------------
WMKOD: DS 14 ; KOD PRO KURZORY
PREV: DS 21 ; PREVODNI KODY..0
CSKOD@ EQU WMKOD+3
;-------------------------
; USER I/O DEVICE
;
CILOC: DS 3 ; 0
COLOC: DS 3 ; 1
R1LOC: DS 3 ; 2
R2LOC: DS 3 ; 3
P1LOC: DS 3 ; 4
P2LOC: DS 3 ; 5
LILOC: DS 3 ; 6
CSLOC: DS 3 ; 7
DS 1
MEMTOP: DS 2 ; 8
ERRSW: DS 3 ; 9
CI@0: DS 3 ; 10
CO@: DS 3 ; 11
CSTS@: DS 3 ; 12
LO@: DS 3 ; 13
KOS@: DS 3 ; 14
RI@: DS 3 ; 15
PO@: DS 3 ; 16
CCPM: DS 3 ; 17
GRAF: DS 3 ; 18
RESER: DS 3 ; 19
;--------------------------
;
IONUM EQU ($-CILOC)/3+1
;
IOBYT: DS 1 ; RIZENI I/O ZARIZENI
;
;******************************
;<< EXTERNE OVLADANE FLAGY: glt;glt;
;******************************
MODE: DS 1 ; CO-MODE
@IF1: DS 1
@IF2: DS 1
@OF1: DS 1
@OF2: DS 1
LINE: DS 1 ; RADEK
COLUM: DS 1 ; SLOUPEC
RESL: DS 1 ; REZERVACE
RESC: DS 1 ; SLOUPEC
RESL1: DS 1 ; POSLEDNI RADEK
RESC1: DS 1 ; POSLEDNI SLOUPEC
PRER: DS 1 ; UROVEN PRERUSENI
;
; PROMENE PRO OPERACNI SYSTEM
;
CUR@: DS 1
KEY: DS 1
CASK: DS 1
WNDP: DS 6 ; PARAMETRY PRO 2.OKNO
EXSER EQU $-MODE
;
CHAR: DS 1
XFLG: DS 1
;
;****************************************************
; DATA SPOLECNA PRO MONITOR A O.S.
;****************************************************
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@BT: DS 1
@PED: DS 1
SADR: DS 2 ; START.ADR
EADR: DS 2 ; KONC.ADR
SUM: DS 1
EXTEXT: DS 1
OPT: DS 1
NAMBUF: DS 65
@RAM EQU $
;*******************************
.DEPHASE
;
END ; [P]
Ú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
ZPS | Technické prostředky | Programové vybavení | Dokumentace