Ú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 64
.LIST
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TITLE FIRMWARE SAPI-1 MIKOS/K V5.0 - KZD
; 18.5.88
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; VOLBA SYSTEMU
TV64 EQU 00 ; AND/G
CPM EQU 00 ; 00 = ZPS-2; -1 = ZPS-3
SM EQU 00 ; TERMINAL SM 7202
HORE EQU 00
IMS EQU -1 ; PRO DPS-1 (IMS)
;===============================================
ASEG
;
; *** DEFINOVANI PAMETOVEHO PROSTORU *
;
@R@ EQU 4000H ; ZACATEK
RSTN EQU 0CFH ; RST1 .. POUZIVA SYSTEM
;-----------------------------------------------
IF CPM
MONIT EQU 100 ; START
ERAM EQU 9FFFH ; VRCHOL RAM
EP3 EQU 1900H ; USER EPROM
IF TV64
TVBEG EQU 0F800H
ELSE
TVBEG EQU 0E800H ; TV-RAM
ENDIF
EPROM EQU 0C00H+100H ; O.S. EPROM
ELSE
MONIT EQU 0 ; ROM VERZE ZPS2
ERAM EQU 0000
EP3 EQU 1800H
IF TV64
TVBEG EQU 0F800H
ELSE
TVBEG EQU 3800H ; TV-RAM
ENDIF
IF HORE
EPROM EQU 0B400H
ELSE
EPROM EQU 0C00H
ENDIF
ENDIF
;
; * MONITOR ENTRY *
;
CI EQU 103H
RI EQU 106H
CO EQU 109H
PO EQU 10CH
CSTS EQU 112H
IOCHK EQU 115H
IOSET EQU 118H
IODEF EQU 11EH
SPCL EQU 121H
CRLF EQU 124H
EXPR EQU 127H
ERROR EQU 12AH
ASHEX EQU 12DH
DADR EQU 130H
DBYT EQU 133H
HILO EQU 136H
NEXT EQU 139H
SPACE EQU 13CH
CINCR EQU 13FH
TEXT EQU 142H
HXASC EQU 148H
TXIMM EQU 151H
WND@ EQU 154H
RNAME EQU 15AH
INTER EQU 15DH
SERI@ EQU 17BH
SERO@ EQU 17EH
SMST@ EQU 181H
;
; TERMINAL
TLINE EQU 24
TCOLUM EQU 80
; ZAZNAM
LENGHT EQU 255 ; DELKA BLOKU
NAMLE EQU 11 ; DELKA JMENA
COMLE EQU 64 ; DELKA KOMENTARE
UVOD EQU 0FBH ; SYNCHRO BLOKU
;------------------------------------------
; KONSTANTY
ETX EQU 3
BS EQU 8
HT EQU 9
LF EQU 0AH
VT EQU 0BH
CR EQU 0DH
SUBS EQU 1AH ; END FLAG
ESC EQU 1BH
HOME EQU 1DH
; BLOKOVA NAVESTI
SOH EQU 01H ; "START OF HEADER"
EOT EQU 04H ; "END OF TEXT"
CAN EQU ':' ; JMENO PASKY
; 'A' ; DATOVY (ASCII) BLOK
; 'B' ; BINARNI BLOK
; SERIOVY KANAL
; =============
UMODE EQU 10H
USTAT EQU 11H
UDATA EQU 12H
URES EQU 13H
PRENOS EQU 0DH ; NASTAVENI PRENOSU (SM7202)
; (PRO AND-16: 14H)
; PARAMETRY KZD-1
; ===============
IF IMS
KZDIN EQU 09H ; PRO IMS
KZDOUT EQU 08H
KZDCTR EQU 0BH
ELSE ; STD. KZD
KZDIN EQU 31H ; ADRESA VSTUPNIHO PORTU
KZDOUT EQU 30H ; ADRESA VYSTUPNIHO PORTU
KZDCTR EQU 33H ; ADRESA RIDICIHO REGISTRU
ENDIF ; MHB 8255
PRODL EQU 0 ; CASOVACI PARAMETR
; UDAVA PRODLOUZENI ZAPISOVEHO
; TAKTU V MIKROSEC.
; PRODL=0 ... TAKT = 0,1 MSEC
; PRODL=30 ... TAKT = 0,13 MSEC
; PRODL=100... TAKT = 0,2 MSEC
; VYZNAM CHYBOVYCH HLASENI (PRIZNAK Z=0):
; =======================================
; CHYBA <A>
; 0 30H ZAZNAM NENI POVOLEN (SZAVP)
; 2 32H CHYBA PRI CTENI DAT (CRC) (CTBLD,KOBLD)
; 4 34H NESOUHLASI CISLO BLOKU (@READU)
; CHYBA PRI CTENI OZNACENI (CTOZN)
; 6 36H PRETIZENI MOTORKU (TEKP,CTTV)
; 8 38H BYLA PRECTENA EM (@READU)
; A 3AH NENI BINARNI FORMAT (LOAD)
; C 3CH SOUBOR NEEXISTUJE (NUMB,CMPNM)
; DEFINICE KONSTANT:
; ==================
SETPPI EQU 8BH
SETOUT EQU 1FH
KSCVP EQU 0FEH
KSCVPC EQU 0BEH
KSCVZC EQU 0BBH
KSCRVP EQU 0BDH
KSCRVZ EQU 0B7H
KSZAVP EQU 0AEH
KSTPCT EQU 0FFH
KSTPZA EQU 0AFH
KONST1 EQU 05CH
KPREVZ EQU 0B3H
;************************************
ASEG
IF HORE
.PHASE EPROM
ELSE
ORG EPROM ; START
ENDIF
;************************************
;====================================
; T A B U L K A S L U Z E B K O S
;====================================
JMP MICOS ; BRANCH TABLE
JMP INITS ; INIT SYSTEM
JMP FIND ; 1
JMP OPEN ; 2
JMP CLOSE ; 3
JMP LOAD ; 4
JMP SAVE ; 5
JMP BINAR ; 6
ZAC: JMP GET@ ; 7
JMP REWIND ; 8
JMP PUT@ ; 9
JMP STOP ; 10
JMP SLEN ; 11
JMP NUMB@ ; 12
MAXSL EQU $-EPROM
;====================================
; INICIALIZACE SYSTEMU KOS
;====================================
INITS: MVI A,0A9H ; LO=L,RI-1,PO-1
STA FND ; NE FIND MODE
STA IOBYT
CALL TXIMM ; OHLASENI
DB 'MIKOS/K V5.0 '
DC '(C) TESLA DIZ 1987 '
LXI H,KOS@@
SHLD KOS@+1
CALL NAF ; NASTAV FLAGY
LXI H,ZAC ; VYPLN IODEF
LXI D,R1LOC
MVI B,12
CALL MOVE
CALL INITIO ; INICIALIZACE 8255
LDA EP3 ; USER SYSTEM ?
CPI 0C3H
CZ EP3 + 3 ; START
;
IF HORE
LXI D,0B3F8H
MVI C,8
CALL 11EH ; IODEF - MEMTOP
ENDIF
;
RET
;===================================
; VYHODNOCENI SLUZBY MONITORU
;===================================
KOS@@: INR C
LXI D,EPROM
MVI B,MAXSL
SLUZBA: XCHG ; JMENO
MOV A,C
ADD C
ADD C ; *3
CMP B
RNC ; VETSI
MVI B,0
MOV C,A ; OFFSET
DAD B ; VYPOCTI ADR
PCHL
;===================================
; VYHODNOCENI POVELU OBSLUHY
;===================================
MICOS: CALL STOP
XRA A
STA EXTEXT ; 0..NENI
MVI C,'_'
LDA JEVER
ORA A
JZ $+5
MVI C,'*' ; PRO VERIFIKACI
CALL CO
CALL ECHOCR
CPI 'I'
JZ INIT ; INICIALIZACE PASKY
CPI 'O'
JZ OPEN ; OPEN OUTPUT
CPI 'C' ; CLOSE OUTPUT
JZ CLOSE
CPI 'F' ; FIND INPUT
JZ FIND
CPI 'S'
JZ SAVE
CPI 'L' ; LOAD
JZ LOAD
CPI 'E'
JZ EOR
CPI 'Z'
JZ @BOT ; NASTAV NA "BOT"
CPI 'B'
JZ @BLOK ; O BLOK VPRED
CPI '>'
JZ @SKIP ; O SOUBOR VPRED
CPI '<'
JZ @BACK ; O SOUBOR VZAD
CPI 'V'
JZ VERIF ; NASTAV VERIFIKACI
CPI 'P'
JZ VRF1 ; POROVNANI 1 SOUBORU
CPI 'R'
MVI D,1
JZ REWIND ; PREVINUTI NA ZACATEK
CPI 'D'
JZ @EOR ; ADRESAR KAZETY
CPI 'N'
JZ NUMB ; NAJDI DLE CISLA SOUBORU
CPI 'X'
JZ SLEN@ ; NASTAV DELKU BLOKU
CPI 'K' ; ZAPIS EM
RNZ ; JINY POVEL
;************************************
; REALIZACE POVELU KOS-1
;************************************
;====================================
; ZAPIS EM NA PASKU
;====================================
KONEC: CALL OK?
RNZ ; NEPIS
CALL SCVZC
CALL HLKMM
CALL ZAKMM
CALL ZAKS1
JMP EOR1 ; PRED "EM"
;====================================
; BINARNI SOUBOR NASTAV
;====================================
BINAR: MVI A,'B'
STA BOUT-1
RET
;====================================
; UZAVRI A PRIPOJ DALSI SOUBOR
;====================================
NOVYOT: CALL CLOSE
JMP OPE4
;====================================
; NASTAV DELKU BLOKU
; VSTUP: E - DELKA BLOKU
; (PRI VOLANI SLUZBY 157
; JE DELKA BLOKU V <L>
;====================================
SLEN@: CALL TXIMM
DB CR,LF
DC 'DELKA BLOKU'
MVI C,1
CALL EXPR
POP D
SLEN: MOV A,E
STA DEBL ; NOVA DELKA BLOKU
RET
;====================================
; PREPNI NASTAVENI VERIFIKACE
;====================================
VERIF: LDA JEVER
XRI 0FFH
STA JEVER
RET
;====================================
; OTEVRI NOVY SOUBOR PRO ZAPIS
;====================================
OPEN: XRA A
CALL IOPO ; NASTAV IOBYT
CALL NPO
RM ; PO=SYSTEM..
MVI C,2
JNZ CCPM ; USER=2
CALL RNAME
CPI '@' ; VYBER
JZ OPE2 ; ZA SOUBOR
CPI '.'
JNZ OPE5 ; NA KONEC (APPEND)
CALL BOT ; OD ZACATKU
PUSH H
OPE1: CALL SEARCH ; KONEC ZAZNAMU ?
CALL VYPISH ; SOH
CALL SKIP
CALL STOP
CALL OK?
JNZ OPE1 ; DALSI SOUBOR
OPE4: LHLD BNO ; CISLO SOUBORU
INR H
MVI L,0
SHLD BNO ; CISLO BLOKU A SOUBORU
MVI A,SOH
STA @OF1
POP H
JMP WRNAM
OPE5: MVI A,8 ; NASTAV PO=1
CALL IOPO1
PUSH H
CALL BLOK4
CALL EOR
JMP OPE4
OPE2: MVI A,8
CALL IOPO1
LDA @OF1 ; PODRUHE ?
ORA A
JNZ NOVYOT
PUSH H
CALL SCVPC
CALL HLDMM ; ZA SOUBOR
JMP OPE4
;====================================
; OTEVRI SOUBOR PRO CTENI
;====================================
FIND: XRA A
CALL IORI
CALL NRI
RM ; SYSTEM RI
MVI C,1
JNZ CCPM ; USER 2
CALL RNAME
CPI '.'
CZ BOT
MVI B,NAMLE
LXI D,FNAME
CALL MOVE
CALL CMPNM
FIND1: MVI A,1
STA BNI
STA @IF1
CALL BUFEND
SHLD ADRI
RET
;====================================
; CTI BINARNI SOUBOR
;====================================
;
LOAD: CALL FIND ; OTEVRI SOUBOR
LO1: CALL RICH
ORA A ; BLANK?
JZ LO1
SUI '<'
PUSH PSW
MVI A,3AH
JNZ ERREND ; NENI BINARNI FORMAT
POP PSW
MOV B,A ; KONTROLNI SOUCET
CALL RADR@
SHLD EADR ; KONCOVA ADRESA
XCHG
CALL RADR@
SHLD SADR ; START. ADRESA
CALL RICH
CPI '>'
PUSH PSW
MVI A,3AH
JNZ ERREND ; NENI BINAR
POP PSW
PUSH H
CALL CHECK
MVI B,0 ; NULUJ
LO2: CALL RICH
MOV M,A
CALL HILO
JNC LO2
CALL CHECK
STA SUM
POP H
LXI D,4401H
CALL HILO
JNZ CLSTP
LXI H,0
SHLD @BT
; UZAVRI VSTUPNI SOUBOR
CLSTP: CALL CRLF
CALL NRI
RM
JNZ CLST2
DIRSTP: XRA A
STA @IF1 ; CLOSE
CMA
STA DEBL ; BLOK 255 B
JMP @SKIP ; ZA EM A STOP
CLST2: XRA A
STA @IF2
RET
;====================================
; ULOZ BINARNI SOUBOR
;====================================
SAVE: CALL OPEN
MVI C,2
CALL EXPR ; ROZSAH ADRES
CALL NPO
CZ BINAR
MVI C,'<' ; PRVNI BYTE
CALL POCH
MVI B,0 ; KONTROLNI SOUCET
POP H ; POCATECNI ADRESA
POP D ; KONCOVA ADRESA
CALL PADR@
XCHG
CALL PADR@
MVI C,'>'
CALL POCH
MOV C,B ; KONTROLNI SUMA ADRES
CALL POCH
MVI B,0 ; KONTROLNI SUMA DAT
SAV1: MOV C,M
CALL POCH
CALL HILO
JNC SAV1
MOV C,B ; SUMA
CALL POCH
;====================================
; UZAVRI VYSTUPNI SOUBOR
;====================================
CLOSE: CALL NPO
RM
MVI C,3
JNZ CCPM
CLOSE0: LDA @OF1 ; NENI OTEVREN
ORA A
RZ
PUSH D
PUSH H
LHLD ADRO
INX H
MVI M,SUBS ; ZAPIS POSLEDNI ZNAK
MVI A,EOT ; UZAVRI BLOK
STA BOUT-1
CALL WOB
XRA A
STA @OF1 ; CLOSE
CALL EOR1 ; PRED EM
LDA JEVER
ORA A
JZ CLOSE1
CALL BACK
CALL VRF1
CLOSE1: POP H
POP D
RET
;====================================
; NAJDI SOUBOR DLE CISLA A OTEVRI
; VSTUP: PRO VOLANI SLUZBOU 157
; L - CISLO SOUBORU
;====================================
NUMB: CALL TXIMM
DB CR,LF
DC 'CISLO SOUBORU'
MVI C,1
CALL EXPR
POP D
NUMB@: MOV A,E ; CISLO SOUBORU
; <DE> TO DA SLUZBA 157!!
ORA A
JZ NUM1
STA BTO ; PRO "00"
CALL BOT
JMP @BLOK ; ZA NAZEV PASKY
NUM1: CALL SEARCH
JNZ NUM2
XRA A ; PRO "EM"
STA KAM?
JMP NUM5
NUM2: MOV A,E ; HLEDANE C.S.
CMP C ; CTENE C.S.
JNC NUM3
XRA A ; PRO ZPET
NUM3: STA KAM?
NUM4: MOV A,E ; HLEDANE C.S.
CMP C ; CTENE C.S.
JNZ FIND1 ; OK - NASEL
LDA KAM?
JC NUM5
ORA A ; PRO VPRED
JZ NUM6 ; BILO ZPET, HLEDEJ JINAK
CALL SKIP
CALL SEARCH
JZ NUM8 ; PRO "EM" SOUBOR NENI
JMP NUM4
NUM5: ORA A ; PRO ZPET
JNZ NUM6 ; BYLO VPRED, HLEDEJ JINAK
CALL BACK
CALL BACK
CALL SEARCH
MOV A,C ; CTENE C.S.
ORA A
JZ NUM8 ; PRO "CAN" SOUBOR NENI
JMP NUM4
NUM6: CALL BOT ; HLEDEJ OD ZACATKU
NUM7: CALL SEARCH
JZ NUM8 ; SOUBOR NENI
MOV A,E ; HLEDANE C.S.
CMP C ; CTENE C.S.
JZ FIND1 ; OK - NASEL
CALL SKIP
JMP NUM7
NUM8: CALL EOR1 ; PRED "EM"
MVI A,3CH
JMP ERREND
;====================================
; INICIALIZUJ NOVOU KAZETU
;====================================
INIT: CALL FORM ; FORMATOVANI
CALL TXIMM
DC ' ZADEJ'
LXI H,0 ; CISLO SOUBORU
SHLD BNO ; A BLOKU
CALL RNAME ; JMENO PASKY
MVI A,CAN
; ZAPIS JMENO SOUBORU
WRNAM: PUSH H
PUSH PSW
CALL NULBF
POP PSW
MOV M,A
INX H
MVI B,COMLE ; JMENO+POZNAMKA
XCHG
POP H
PUSH D
CALL MOVE
POP H
MVI B,NAMLE
LXI D,WRNM ; VYSTUPNI POLE
WRN1: MOV A,M
ORA A
JNZ $+5
MVI A,' ' ; BLANK
STAX D
INX H
INX D
DCR B
JNZ WRN1
CALL ZADMM ; DMM PRED SOUBOREM
MVI C,COMLE+1 ; DELKA BLOKU
CALL WOB1
MVI M,'A' ; TYP DATA
JMP CRLF
;====================================
; TEST NA JMENO
CALL PHDR
CMPNM: CALL SEARCH ; POROVNEJ JMENO
JNZ CMPN1
MVI A,3CH ; KONEC SOUBORU
JMP ERREND
CMPN1: LDA BIN-1
CPI CAN
JZ CMPNM-3 ; VYPIS VOLUME JMENO
; PRO ZAPIS
CPF10: PUSH B ; <C> - CISLO SOUBORU
LXI B,FNAME
LXI H,BIN-1
MVI E,NAMLE
CALL TESTJM
POP B
RZ ; OK - NASEL
CALL SKIP
JMP CMPNM ; DALSI JMENO
TESTJM: INX H ; JMENO
LDAX B
CPI '*'
JZ JMENO?
CALL @ANAL
JZ VYPISH
CMP M
RNZ
INX B
DCR E
JNZ TESTJM
; VYPIS HLAVICKU
VYPISH: PUSH B
PUSH D
CALL PHDR
IF SM
LDA TSM
ORA A
JNZ VYP1
MVI C,1FH ; PRO TERMINAL
CALL SERO@
CALL CRLF
ENDIF
VYP1: POP D
POP B
XRA A
RET
IF SM
SERCR: MVI C,CR ; ZNAK "CR" NA SERIOVY
JMP SERO@ ; VYSTUP
ENDIF
SEARCH: CALL SCVPC ; NALEZENI SOUBORU
CALL HLDMM ; NA PASCE A TEST
PUSH D
CALL READBL
POP D
CPI 38H
JZ STOP ; PRO "EM"
PUSH PSW
MOV A,C ; CISLO BLOKU
STA BTI
STA BTO
POP PSW
JMP STOP
; TISK HLAVICKY SOUBORU
PHDR: IF SM
LDA TSM
ORA A
PUSH PSW
CNZ CRLF ; POUZE PRO TV
POP PSW
CZ SERCR ; PRO TERMINAL
ELSE
CALL CRLF
ENDIF
PHDR1: LXI H,BIN
MVI D,COMLE
JMP TEXT
PDIR: PUSH B
MOV A,C
CALL DBTV2
CALL PHDR1
CALL SPACE
POP B
RET
; VYPIS NA CO PRO IDENTIFIKACI BLOKU
PNAME: LXI H,READNM ; VYPIS "E" ZNAKU Z POLE
PNAM1: MOV A,M ; READNM NA CO
CPI 1FH
JNC PNAM2
ADI 40H ; KOD SAPI-1 NA ASCII
PNAM2: MOV C,A
CALL CO
INX H
DCR E
JNZ PNAM1
RET
DBTCR: CALL CRLF
DBTV: MOV A,D
CALL DBYT
DBTV1: CALL SPACE
MOV A,B
DBTV2: CALL DBYT
JMP SPACE
OBNOV: LHLD POSICE ; VRACENI OKNA
CALL TXIMM
DB 9BH ; ESC
MOV C,L
CALL CO
MOV C,H
CALL CO
LDA MOD@
STA MODE
RET
OKNO: PUSH D ; NASTAVENI OKNA
PUSH B
LXI H,MODE
MOV A,M
MVI M,0 ; ZRUS ^P
STA MOD@
CALL SPCL
LXI H,2020H
DAD D
SHLD POSICE
CALL TXIMM
DB HOME OR 80H
POP B
POP D
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; OPERACE SE SOUBORY
;=======================================
; CTI VSTUPNI BUFFER
;=======================================
RIB: PUSH D
PUSH B
XRA A
STA FND ; FIND MOD
CALL READBL
ORA A
JNZ ERRD ; CHYBA CTENI BLOKU
CALL NUFIL ; CISLA OK ?
JNZ ERRD
RIB1: SHLD BNI
POP B
POP D
RIB2: LDA BIN-1 ; TYP BLOKU
CPI CAN ; NAZEV PASKY
RZ
CPI SOH ; JMENO SOUBORU
RET ; <A> = TYP BLOKU
NUFIL: LHLD BNI
INX H ; CISLO BLOKU
MOV A,C
CMP H ; OK?
RNZ
MOV A,B
CMP L ; CISLO SOUBORU ?
RET
;=============================================
; CTENI BLOKU VYSTUP: B -CISLO BLOKU CTENE
; C -CISLO SOUBORU CTENE
; A =0 - CTENI OK
; A<>0 - CHYBA
;=============================================
READBL: CALL @READU ; CTENI UVODU BLOKU
ORA A
JNZ KONBL1 ; PRO CHYBU
LXI H,READNM
MVI M,':' ; VYHLEDAVANI
LDA FND
ORA A
JNZ KONBL0
MVI M,'*'
MOV A,C
DCR A
STA DEBL ; DELKA BLOKU
KONBL0: INX H
MVI M,'"'
CALL CTBLD ; CTENI BLOKU DAT
KONBL1: PUSH PSW ; <A> = CHYBA
LDA BIN-1
CPI 'B'
JZ KONBL2 ; NENI STOP
LDA FND
ORA A
CZ STOP
KONBL2: CALL OKNO
MVI E,15
MOV A,E
STA FND ; NE FIND MOD
CALL PNAME ; VYPIS JMENA
CALL DBTV
CALL OBNOV
LXI H,BIN-1
SHLD ADRI
POP PSW
MOV C,D ; CISLO SOUBORU
RET ; A=0 PRO OK
; A<>0 PRO CHYBU
;==============================================
; CTENI UVODU BLOKU
; VYSTUP: B - CISLO BLOKU CTENE
; C - DELKA BLOKU
; D - CISLO SOUBORU CTENE
; NEBO VIZ TEKP
;===========================================
@READU: CALL SCVPC
CALL HLKMM
RNZ ; PRO CHYBU (A=31)
CALL SCVP
CALL CTTV
CPI 36H
JZ ERREND ; KONEC PASKY
MOV C,A
ORA A
MVI A,38H
RZ ; PRO KONEC SOUBORU
MOV A,C
CPI UVOD
RNZ ; NENI SYNCHRONIZACE
CALL CTOZN
RNZ ; PRO CHYBU CTENI ONACENI
XRA A ; BLOKU (A=34)
RET ; PRO CTOZN OK
;==============================================
; ZAPIS VYSTUPNI BUFFER
;==============================================
WOB: LDA DEBL ; DELKA BLOKU
MOV C,A
INR C ; + TYP BLOKU
WOB1: LHLD BNO
INX H
SHLD BNO
MOV B,L ; CISLO BLOKU
MOV D,H ; CISLO SOUBORU
PUSH B
CALL OKNO
CALL DBTV1 ; CISLO BLOKU NA CO
CALL OBNOV
POP B
;==============================================
; ZAPIS BLOKU VSTUP: B -CISLO BLOKU
; C -DELKA BLOKU
; D -CISLO SOUBORU
; VYSTUP: B -CISLO BLOKU
;==============================================
@WBLOK: CALL ZAKMM
JNZ ERREND ; PRO NEPOVOLENY ZAPIS
CALL ZAOZN
CALL ZABLD
CALL TEKP
JNZ ERREND ; PRO CHYBU
LDA BOUT-1
CPI EOT ; BYL POSLEDNI BLOK?
JZ ZAKS ; ANO=KONEC
CPI CAN
JNZ NULBF
ZAKS: CALL ZAKMM ; ZAPIS KONEC SOUBORU
CALL ZAKBL ; EM
ZAKS1: CALL ZADMM ; DMM ZA SOUBOREM
CALL TEKP
RNZ
ZAKS2: CALL ZAKBL ; EM
CALL ZAKMM
; NULUJ VYSTUPNI BUFFER
NULBF: LXI H,BOUT-1
SHLD ADRO
PUSH H
MVI A,LENGHT
INX H
MVI M,0
DCR A
JNZ $-4
POP H ; (BLOK TYP) ADR
MOV A,M
CPI 'B'
CNZ STOP
XRA A ; OK
RET
;==============================
; CTI BYTE Z KAZETY
;==============================
GET@: PUSH B
PUSH D
PUSH H
LDA @IF1 ; BYL OTEVREN SOUBOR?
ORA A
CZ FIND ; KDYZ NE, TAK FIND
GET0: CALL BUFEND
XCHG ; DE = BEIND-1
LHLD ADRI
CALL HILO
MOV A,M
SHLD ADRI
JC GET1 ; <A>..BYTE
CPI SUBS ; EOF? TEST
JNZ GETEX ; -
MOV C,A
CALL KONEC?
GET00: MOV A,C ; POSLEDNI BLOK
JNZ GETEX ; -
MOV B,L ; ADR ZNAKU SUBS
CALL BUFEND ; HLEDEJ OD KONCE
GET01: DCX H
CMP M ; JE SUBS
JNZ GET01 ; -
MOV A,L
SUB E ; STEJNY ADR?
JNZ GET00 ; - NENI KONEC
GET2: XRA A
STA @IF1 ; UZAVRI SOUBOR
CMA
STA DEBL ; DELKA BLOKU 255 B
CALL @SKIP ; ZA EM
MVI A,SUBS
STC ; CY=1 !!!
DB 6 ; ZRUS ORA
GETEX: ORA A
POP H
POP D
POP B
RET
GET1: CALL KONEC?
CNZ RIB
JNZ GET0 ; KONEC SOUBORU
JMP GET2
KONEC?: LDA BIN-1 ; POSLEDNI BLOK?
CPI EOT
RET ; ZY=1...ANO
BUFEND: LDA DEBL ; VYPOCTI KONEC BLOKU
MOV E,A ; V BUFFRU
LXI H,BIN-1
MVI D,0
DAD D
RET
;===============================
; ZAPIS BYTE NA KAZETU
;===============================
PUT@: CALL PUTEND ; JE ^Z ?
JC CLOSE0
PUSH B
PUSH D
PUSH H
LDA @OF1 ; BYL OTEVREN?
ORA A
PUSH B
CZ OPEN ; KDYZ NE, TAK OPEN
POP B
CALL BUFEND ; DE = BOUT-1
XCHG
LHLD ADRO
INX H
MOV M,C
SHLD ADRO
CALL HILO
CC WOB
POP H
POP D
POP B
MOV A,C
ORA A ; NCY
RET
PUTEND: LDA BOUT-1
CPI 'B'
RZ
LDA MODE
ANI 2
XRI 2
RZ
MOV A,C
CPI SUBS
STC
RZ
ORA A
RET
;===============================
; ZKONTROLUJ JEDEN SOUBOR
;===============================
VRF1: CALL CRLF
CALL SEARCH
PUSH PSW ; <A> = CHYBA
XRA A
STA BTI ; CISLO SOUBORU
CALL PDIR ; CISLO SOUBORU A HLAVICKA
POP PSW ; NA CO
VRF2: ORA A
JZ VRF4 ; OK
CPI 38H
JNZ VRF3 ; BYLA EM
LDA BIN-1
CPI CAN
JZ STOP ; OK
VRF3: PUSH B ; CISLO BLOKU
MVI C,'#'
CALL CO
POP B
VRF4: CALL NUFIL
MVI C,'%'
SHLD BNI ; ULOZ CISLA
CNZ CO ; PRO CHYBU CISEL
LDA BIN-1
CPI EOT
JZ STOP ; KONEC SOUBORU
CALL READBL
JMP VRF2
;===============================
; OSETRENI CHYBY
;===============================
ERRD0: CALL STOP
CALL CRLF
LHLD BNI
INX H
XCHG ; CISLO SOUBORU
MOV B,E ; A BLOKU NA CO
CALL DBTCR
CALL TXIMM
DB CR,LF,7
DC 'CHYBA CTENI: I/D/N/A=ZNOVA ?'
CALL ECHO
XCHG ; CISLO SOUBORU A BLOKU
CPI 'N' ; PRO "N"
JZ RIB1
CPI 'I'
JNZ ERRD1
LDA BTI
INR A
STA BTI ; ZVYS CISLO SOUBORU
IF SM
LDA TSM
ORA A
CZ CRLF
ENDIF
CALL SKIP
JMP ERRD7
ERRD1: CPI 'D'
JNZ ERRD3
LDA BTI
DCR A ; SNIZ CISLO SOUBORU
STA BTI
CALL BACK
CALL BACK
JMP ERRD7
ERRD: CALL STOP ; PRO 1. CHYBU - "A"
ERRD3: CALL BLOK4
ERRD7: XRA A
STA FND ; FIND MOD
CALL READBL
ORA A
JNZ ERRD7
CALL NUFIL ; NASEL ?
JZ RIB1 ; ANO - OK
JNC ERRD0 ; PREJEL
JMP ERRD7
BLOK4: PUSH B ; ZPET O 4 BLOKY
MVI B,4
BL41: CALL BLOK2
DCR B
JNZ BL41
POP B
RET
CHECK: MOV C,B ; KONTROLNI SOUCET ?
CALL RICH
CMP C
RZ
RADR@: CALL RICH
MOV L,A
CALL RICH ; HL
MOV H,A
RET
RICH: CALL RI ; CTENI & SUMA
JC ERSTP
PUSH PSW
ADD B
MOV B,A
POP PSW
RET
PADR@: MOV C,L
CALL POCH
MOV C,H
POCH: MOV A,C ; ZAPIS & SUMA
ADD B
MOV B,A
JMP PO
MOVE: MOV A,M ; PRESUN PAMETI
STAX D ; HL - ODKUD
INX H ; DE - KAM
INX D ; B - KOLIK
DCR B
JNZ MOVE
RET
;=======================================
; CTENI TYPU ZAZNAMU
; VYSTUP: A = 00 - PRO EM
; FB - PRO DATOVY BLOK
; NEBO VIZ TEKP
;=======================================
CTTV: PUSH B
PUSH D
LXI D,5000H ; TIME OUT
JMP CTTV2
CTTV0: MVI A,5
DCR A
JNZ $-1
MVI C,10H
CTTV1: DCR C
JNZ CTTV3
DCX D
MOV A,D
ORA E
JNZ CTTV2
POP D
POP B
MVI A,38H
JMP ERREND ; KONEC PRO TIME OUT
CTTV2: LXI B,0110H
CTTV3: IN KZDIN
ANI 0F0H
JZ CTTV1
RAL
MOV A,B
RAL
MOV B,A
JNC CTTV0
IN KZDIN
ANI 30H ; TEST PRETIZENI MOTORKU
MOV A,B
POP D
POP B
RZ ; OK
MVI A,36H ; PRO CHYBU
RET
;==============================================
; CTENI OZNACENI BLOKU
; VYSTUP: B - CISLO BLOKU
; C - DELKA BLOKU
; D - CISLO SOUBORU
; NEBO NZ - CHYBA CTENI OZNACENI BLOKU
; A - CHYBA 2
; NEBO VIZ TEKP
;==============================================
CTOZN: PUSH H
CALL CTIBYT
MOV B,A ; CISLO BLOKU
CALL CTIBYT
MOV C,A ; DELKA BLOKU
CALL CTIBYT
MOV D,A ; CISLO SOUBORU
CALL CTIBYT ; KONTROLNI SOUCET OZNACENI
ADD D ; BLOKU
ADD C
ADD B ; MUSI BYT 0, JINAK CHYBA
POP H
MVI A,34H
RNZ ; NAVRAT PRO CHYBNY SOUCET
JMP TEKP ; PRO OK TEST KONCE PASKY
; POKUD NENI, JE VSE OK
;====================================
; CTENI BLOKU DAT
; VSTUP: C - DELKA BLOKU
; VYSTUP: NZ - CHYBA CTENI DAT
; A - CHYBA 2
; NEBO VIZ TEKP
;====================================
CTBLD: PUSH D
PUSH B
LXI D,BIN-1 ; DATA DO VSTUP. BUFFRU
LXI H,0 ; PRO VYPOCET CRC
CTBLD1: CALL CTIBYT
STAX D ; ULOZENI DAT DO PAMETI
INX D
DCR C
JNZ CTBLD1
CTBLD2: CALL CTIBYT ; NACTENI KONTROLNI SUMY
CALL CTIBYT ; DO HL
MOV A,H
ORA L ; PRO OK MUSI BYT 0
MVI A,32H
PUSH PSW ; "Z" A CHYBU
LXI D,READNM+2
MVI B,NAMLE
CTBLD3: CALL CTIBYT ; CTENI JMENA
STAX D ; NA CO
INX D
DCR B
JNZ CTBLD3
XCHG
MVI M,'"'
INX H
MVI M,' '
POP PSW
POP B
POP D
RNZ ; PRO CHYBU KONTROL. SOUCTU
JMP TEKP ; PRO OK KONTROLA KONCE
; PASKY
;====================================
; NACTENI 1 BYTE Z PASKY
; VSTUP: HL - PREDCHOZI CRC
; VYSTUP: A - PRECTENY BYTE
; HL - CRC
;====================================
CTIBYT: PUSH B
MVI B,01 ; POCITADLO BITU
CTIBY1: IN KZDIN
ANI 0F0H
JZ CTIBY1
IN KZDIN
ANI 0F0H
JZ CTIBY1 ; PRO RUSENI
RAL
PUSH PSW ; VYPOCET CRC
SBB A
DAD H ; PREDCHOZI CRC
ADC A
ORA A ; UPRAVA PRO Z-80
MVI A,7
JPE $+5 ; NA POP PSW
XRA L
MOV L,A
POP PSW ; KONEC VYPOCTU CRC
MOV A,B
RAL ; CYKLUS PRO 8 BITU
MOV B,A
JNC CTIBY1
POP B
RET
;====================================
; ZAPIS BLOKU DAT = "C" BYTU DAT,
; 2 BYTY CRC, 11 BYTU JMENO,
; 2 BYTY ODDELOVACI <55H>
; VSTUP: C - DELKA DAT
;====================================
ZABLD: PUSH B
LXI D,BOUT-1 ; DATA Z VYSTUP. BUFFERU
LXI H,0 ; PRO VYPOCET CRC
ZABLD1: LDAX D
CALL PISBYT ; ZAPIS VLASTNICH DAT
INX D
DCR C
JNZ ZABLD1
MOV A,H
CALL PISBYT ; ZAPIS CRC ZNAKU
MOV A,H
CALL PISBYT
LXI D,WRNM
MVI B,NAMLE ; Z WRNM
ZABLD2: LDAX D
CALL PISBYT ; ZAPIS JMENA
INX D
DCR B
JNZ ZABLD2
POP B
PISODD: MVI A,55H
CALL PISBYT ; ZAPIS 16 BITU ODDELOVACICH
;======================================
; ZAPIS 1 BYTE NA PASKU
; VSTUP: A - BYTE DAT
; HL - PREDCHOZI CRC
; VYSTUP: HL - CRC
;======================================
PISBYT: PUSH B
MVI C,80H ; POCITADLO (MASKA) BITU
MOV B,A ; DATA DO REG.B
ANA C ; VYBER BITU
ADI 0FFH ; BIT DO CARRY
MVI A,KONST1 ; A=5CH
RAR ; A=X0101110
; (X-BIT DAT, SNIRENA
; CITLIVOST, D.P.=H,
; ZAZNAM, VPRED)
OUT KZDOUT ; VYSTUP DAT
PUSH PSW
XRI 20H ; A=X0001110
OUT KZDOUT ; DATA PLATNA
RAL ; VYPOCET CRC
SBB A
DAD H
ADC A
ORA A ; UPRAVA PRO Z-80
MVI A,7
JPE $+5
XRA L
MOV L,A
MVI A,2 ; CEKACI SMICKA
DCR A ; NA PROUDLOZENI
JNZ $-1 ; PLATNOSTI DAT !!!
POP PSW ; KONEC VYP.CRC
OUT KZDOUT ; VRACENI SIGN.D.P.
MVI A,3+(2*PRODL/15)
DCR A
JNZ $-1
MOV A,C
RRC ; NA DALSI BIT
MOV C,A
MOV A,B
JNC PISBYT+4
POP B
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; INSTALACE TERMINALU SM 7202
ARAM EQU $
IF ARAM GT EPROM+800H
.PRINTX 'SPATNA TABULKA SM 7202'
ERRRAM ORA
ELSE
IF HORE
BALAST: DS (EPROM+800H)-ARAM
ELSE
ORG EPROM+800H
ENDIF
ENDIF
SERIO: JMP SINIT
JMP SERI@
JMP SCO
JMP SMST@
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; JE EXTERNI JMENO '"' ?
EXT?: LDA EXTEXT
CPI '"'
RET
; ANALYZA ODDELOVACU
@ANAL: CPI ' '
RZ
ANAL: CPI CR
RZ
ORA A
RET
JMENO?: CALL VYPISH ; ANO / NE
OK?: CALL TXIMM
DC '--(A/N)?'
CALL ECHOCR
CPI 'A'
RZ
CPI 'Y'
RET
;========================================
; TEST NA IOBYTE (PO)
NPO: LDA IOBYT
RRC
RRC
NRI1: RRC
RRC
ANI 3 ; ZARIZENI
DCR A ; MINUS .. SYSTEM
DCR A ; ZY.. USER=1
RET ; NZ.. USER=2
; TEST NA IOBYTE (RI)
NRI: LDA IOBYT
JMP NRI1
; NASTAV IOBYTE PODLE OPTION
IOPO: CALL CISLO
RC
RLC
RLC
IOPO1: MVI C,0CFH ; MASKA
JMP ZMIO
IORI: CALL CISLO
RC
MVI C,0F3H ; MASKA
ZMIO: RLC
RLC
MOV B,A
LDA IOBYT
ANA C
ORA B
STA IOBYT
RET
CISLO: SUI '0'
RC ; CY=1..NENI
CPI 3
CMC
RC
INR A
RET
; VYPIS TEXT
TXNAM: CALL TXIMM
DB CR,LF
DC ' NAZEV:'
RET
BREAK: CALL CSTS
RZ
CALL CI
JMP ETX?
; CTI A VYPIS ZNAK
ECHO: CALL CINCR
RZ
ETX?: CPI ETX
RNZ
CALL STOP
CALL NAF ; NULUJ FLAGY
JMP NEXT ; BREAK=>C
ECHOCR: CALL ECHO
PUSH PSW
CALL CRLF
POP PSW
RET
NAF: XRA A ; NASTAVENI FLEGU
STA @IF1
STA @OF1
STA JEVER
CMA ; = LENGHT
STA DEBL
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; ZASTAV A OHLAS CHYBU
ERSTP: MVI A,32H ; CHYBA SOUCTU
ERREND: PUSH PSW
CALL CRLF
CALL TXIMM
DC 'CHYBA - '
POP PSW
ANI 0FH ; TYP CHYBY
MOV E,A
CALL STOP
MVI D,0
LXI H,TXERR
DAD D
CALL @TEXT
JMP NEXT
@TEXT: MOV E,M
INX H
MOV D,M
XCHG
MOV D,M
INX H
JMP TEXT
;====================================
; ZAPIS OZNACENI BLOKU - 0FFH, CISLO
; A DELKA BLOKU, CISLO SOUBORU,
; KONTROLNI SOUCET
; VSTUP: B - CISLO BLOKU
; C - DELKA BLOKU
; D - CISLO SOUBORU
;====================================
ZAOZN: MVI A,UVOD ; UVOD BLOKU (0FBH)
CALL PISBYT
CALL ZAOZN1
MOV A,B ; CISLO BLOKU
CALL PISBYT
MOV A,C ; DELKA BLOKU
CALL PISBYT
MOV A,D
CALL PISBYT ; CISLO SOUBORU
ADD C
ADD B
CMA
INR A
CALL PISBYT ; KONTROLNI SOUCET
ZAOZN1: MVI A,32
DCR A
JNZ $-1
RET
;====================================
; ZAPIS KONCOVYCH BLOKU (EM, FM)
; - 16 KRAT PISE <00H>
; VYSTUP: VIZ TEKP
;====================================
ZAKBL: PUSH B
PUSH H
MVI B,16
ZAKB1: XRA A
CALL PISBYT
DCR B
JNZ ZAKB1
POP H
POP B
;====================================
; TEST KONCE PASKY
; VYSTUP: NZ - MOTOREK PRETIZEN
; A - CHYBA 1
;====================================
TEKP: CALL BREAK
IN KZDIN
ANI 30H ; TEST PRETIZENI
MVI A,36H ; OBOU MOTORKU
RNZ ; PRO CHYBU - NENALEZEN KONEC
XRA A ; SOUBORU
RET ; PRO OK - PASKA STOJI
;====================================
; PREVINUTI KAZETY
; VSTUP: D=1 - NA ZACATEK
; D-0 - NA KONEC
; VYSTUP: VIZ TEKP
;====================================
REW3: PUSH D
MVI A,KPREVZ
DCR D ; URCENI SMERU PREMOTANI
JZ REW4
MVI A,KSCRVP
REW4: OUT KZDOUT
POP D
REW7: CALL TEKP
JZ REW7 ; DOKUD NEDA PRETIZENI !
REWIND: PUSH D
MVI A,KSCVZC
DCR D ; URCENI SMERU
JZ REW5
MVI A,KSCVPC
REW5: OUT KZDOUT
POP D
PUSH B
LXI B,12000D
REW1: DCX B ; CEKACI SMICKA PRO
MOV A,B ; PREVIJENI
ORA C
JNZ REW1
POP B
CALL TEKP
JZ REW3 ; OPAKUJE, DOKUD NADA
XRA A ; PRETIZENI
;===================================
; STOP POHYBU
;===================================
STOP: PUSH PSW
MVI A,KSTPCT
OUT KZDOUT
POP PSW
RET
;==================================
; INICIALIZACE MHB 8255
;==================================
INITIO: MVI A,SETPPI
OUT KZDCTR
MVI A,SETOUT
OUT KZDOUT
RET
;==================================
; START CTENI VPRED
;==================================
SCVP: MVI A,KSCVP
OUT KZDOUT
RET
;==================================
; START CTENI VPRED (SNIZ.CITL.)
;==================================
SCVPC: MVI A,KSCVPC
OUT KZDOUT
RET
;==================================
; START CTENI VZAD (SNIZ.CITL.)
;==================================
SCVZC: MVI A,KSCVZC
OUT KZDOUT
RET
;==================================
; START CTENI RYCHLE VPRED
;==================================
SCRVP: MVI A,KSCRVP
OUT KZDOUT
RET
;==================================
; START CTENI RYCHLE VZAD
;==================================
SCRVZ: MVI A,KSCRVZ
OUT KZDOUT
RET
;=======================================
; START ZAZNAMU VPRED
; VYSTUP: NZ - ZAZNAM NENI POVOLEN
; A - CHYBA 0
;=======================================
SZAVP: MVI A,KSZAVP
OUT KZDOUT
IN KZDIN
ANI 08H
MVI A,30H
RET
;===================================
; VYHLEDANI ZACATKU PASKY (ZN. BOT)
; VYSTUP: VIZ TEKP
;===================================
@BOT: CALL BOT
JMP STOP
BOT: MVI D,1 ; PREVINUTI NA ZACATEK
CALL REWIND
CALL SCVPC
CALL HLDMM
CALL HLDMM
JNZ ERREND
PUSH B
LXI B,500D
CALL HLBOT1
POP B
JMP HLDMM
;===============================
; SKOK O 1 SOUBOR VPRED
; VYSTUP: VIZ TEKP
;===============================
@SKIP: CALL SKIP
JMP STOP
SKIP: CALL SCVPC ; MUSI STAT PRED (NEBO V)
CALL CTTV ; SOUBOREM
CALL SCRVP
JMP HLDMM ; NASTAVI NA KONEC SOUBORU
;===============================
; SKOK O 1 SOUBOR VZAD
; VYSTUP: VIZ TEKP
;===============================
@BACK: CALL BACK
JMP STOP
BACK: CALL SCVZC
CALL CTTV ; VYHLED.DAT VZAD
CALL SCRVZ ; RYCHLE VZAD
;==============================
; HLEDANI DLOUHE MEZIBL. MEZERY
; VYSTUP: VIZ TEKP
;==============================
HLDMM: PUSH H ; 853 TAKTU ???
LXI H,2500H ; MA BYT 3840 ???
CALL HLMM2
JNZ HLDMM+1
JMP HLMM1
;==============================
; ZAPIS KRATKE MEZIBL. MEZERY
; VYSTUP: VIZ SZAVP, TEKP
;==============================
ZAKMM: PUSH B
LXI B,450H ; MA BYT 500=500 TAKTU ???
ZAMM2: CALL SZAVP
JNZ ZAMM3 ; PRO NEPOVOLENY ZAZNAM
ZAMM1: MVI A,11+(2*PRODL/15) ; CEKACI SMICKA
DCR A ; MEZERY
JNZ $-1
NOP
DCX B
MOV A,C
ORA B
JNZ ZAMM1
ZAMM3: POP B
RNZ ; PRO NEPOVOLENY ZAZNAM
JMP TEKP
;==============================
; ZAPIS DLOUHE MEZIBL. MEZERY
; VYSTUP: VIZ SZAVP, TEKP
;==============================
ZADMM: PUSH B
LXI B,2000H ; MA BYT 5200=5200 TAKTU ???
JMP ZAMM2
;==============================
; SKOK O 1 BLOK VPRED
; VYSTUP: VIZ TEKP
;==============================
@BLOK: CALL BLOK1
JMP STOP
BLOK1: CALL SCVPC
JMP BLOK2+3
;==============================
; SKOK O 1 BLOK VZAD
; VYSTUP: VIZ TEKP
;==============================
BLOK2: CALL SCVZC
CALL CTTV
;==============================
; HLEDANI KRATKE MEZIBL.MEZERY
; VYSTUP: VIZ TEKP
;==============================
HLKMM: PUSH H ; 125 TAKTU ???
LXI H,200H ; MA BYT 550 ???
CALL HLMM2
JNZ HLKMM+1 ; PRO NAVRAT PRES RNZ
HLMM1: POP H ; PRO DALSI POKUS
JMP TEKP
HLMM2: IN KZDIN ; HLEDANI MEZERY
ANI 0C0H ; V ZADANE DELCE
RNZ ; PRO SPATNE - BYLY
DCX H ; PRETECENY DATA
ORA H
ORA L
JNZ HLMM2
RET ; PRO OK - NACTEN ZADANY
; POCET "NEDAT"
;==============================
; VYHLEDANI KONCE VSECH ZAZNAMU
; VYSTUP: VIZ TEKP
;==============================
EOR: XRA A ; = EOR
JMP EOR0
@EOR: MOV C,A ; C=0/"D" PRO EOR?DIR
LDA JEVER
ORA C ; A="D" OR JEVER
EOR0: PUSH PSW ; A<>0 - DIR
CNZ BOT
EOR2: CALL SEARCH ; CTENI BLOKU SE JMENEM
JZ EOR3 ; CTENA EM
POP PSW
PUSH PSW
JZ EOR4 ; NENI DIR
CALL PDIR
MOV A,C
ORA A
JZ EOR41 ; PRO NAZEV PASKY
POP PSW
PUSH PSW
CPI 'D'
JNZ EOR5 ; PRO VERIFIKACI
EOR41: CALL CRLF
EOR4: CALL SKIP
JMP EOR2
EOR5: XRA A ; NENI CHYBA
STA BNI ; CISLO BLOKU
CALL VRF2
CALL CRLF
MVI C,'-'
CALL CO
CALL DBTV1 ; CISLO BLOKU
CALL CRLF
JMP EOR2
EOR3: POP PSW
EOR1: CALL SCVZC
CALL HLDMM
CALL HLKMM
JNZ ERREND
JMP STOP
;==============================
; FORMATOVANI (MAZANI) KAZETY
; VYSTUP: VIZ TEKP
;==============================
FORM: MVI D,1 ; PREVIJENI VZAD, TEDY
CALL REWIND ; PREVINUTI NA ZACATEK
CALL SZAVP
JNZ ERREND ; PRO ZAPIS NENI POVOLEN
PUSH B
PUSH H
LXI B,12000D; ZAPIS DAT (1/10 KAZETY)
MVI A,55H
FORM1: CALL PISBYT
DCX B
MOV A,B
ORA C
JNZ FORM1
CALL SCRVZ
CALL HLDMM
CALL HLDMM ; PREVINUTI NA ZACATEK
CALL SCVPC
CALL HLBOT ; VYHLADANI 6000 BYTE DAT
POP H
POP B
STA NAMBUF ; A=0 (<>"@")
CALL ZAKS1 ; ZAPIS DMM, EM A KMM
JNZ ERREND
JMP EOR1 ; NASTAVENI PRED EM
HLBOT: LXI B,1100D
HLBOT1: CALL CTTV
DCX B
MOV A,B
ORA C
JNZ HLBOT1
RET
;-----------------------------------
; TEXTY CHYBOVYCH HLASENI
TXERR: DW TXER0
DW TXER2
DW TXER4
DW TXER6
DW TXER8
DW TXERA
DW TXERC
TXER0: DB 19
DC 'ZAZNAM NENI POVOLEN'
TXER2: DB 15
DC 'CHYBA CTENI DAT'
TXER4: DB 20
DC 'CHYBA OZNACENI BLOKU'
TXER6: DB 11
DC 'KONEC PASKY'
TXER8: DB 18
DC 'NENI KONEC SOUBORU'
TXERA: DB 19
DC 'NENI BINARNI FORMAT'
TXERC: DB 17
DC 'SOUBOR NEEXISTUJE'
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; OBSLUHA TERMINALU SM 7202
; INICIALIZACE SYSTEMU
; --------------------
SINIT: LXI H,SERIO+3
LXI D,CI@0
MVI B,9
CALL MOVE
XRA A
STA SEKV ; NENI ESC. SEKVENCE
MVI A,9 ; TERM.+STOP MGF.
SINI1: OUT UMODE
OUT URES
MVI A,PRENOS ; NASTAVENI PRENOSU
OUT USTAT
IN UDATA ; NEPLATNA DATA
RET
; SERIOVY VYSTUP
; --------------
SCO: LDA SEKV
ORA A
JNZ SCO7 ; JE ESC. SEKVENCE
MOV A,C ; ANALYZA ZNAKU
CPI ESC
JZ SCO6 ; ZACINA ESC. SEKV.
CPI HOME
JZ SCO1
CPI LF
JZ SCO3
CPI VT
JZ SCO3
CPI CR
JZ SCO2
CPI HT
JZ SCO4
CPI BS
JNZ SCO5
LDA COLUM ; "BS"
ORA A
JZ SERO@
DCR A
JMP SCO21
SCO1: XRA A ; "HOME"
STA LINE
SCO2: XRA A ; "CR"
SCO21: STA COLUM
JMP SERO@
SCO3: LDA LINE ; "LF" A "VT"
CPI TLINE ; POCET RADKU
JZ SERO@
INR A
STA LINE
JMP SERO@
SCO4: PUSH B ; "HT"
LDA COLUM
SCO41: INR A
CPI TCOLUM ; POCET SLOUPCU
JZ SCO42
MOV B,A
ANI 7
MOV A,B
JNZ SCO41
JMP SCO43 ; TABELACNI POZICE
SCO42: DCR A ; POSLEDNI SLOUPEC
SCO43: POP B
JMP SCO21
SCO5: MOV A,C
CPI 20H
JNC SERO@ ; PRO RIDICI ZNAK
LDA COLUM
CPI TCOLUM-1 ; POCET SLOUPCU
JZ SERO@
INR A
JMP SCO21
SCO6: STA SEKV ; NASTAVENI ESC. SEKV.
JMP SERO@
SCO7: PUSH H ; ESC. SEKVENCE
LDA SEKV
RLC
JC SCO8 ; PRO 3.BYTE
ORI 80H
LXI H,LINE
JMP SCO9
SCO8: XRA A ; KONEC SEKVENCE
LXI H,COLUM
SCO9: STA SEKV
MOV A,C
SUI 20H
JC SCO10 ; NENI ADRESACE KURZORU
MOV M,A
SCO10: POP H
JMP SERO@
@E@KOS EQU $
IF HORE
.DEPHASE
ENDIF
;
;*********************************************
; ROZDELENI S Y S T E M O V E R A M
;*********************************************
;
RST1 EQU @R@ ; RESTART VEKTORY
;........>>>
;......
;<<... UZIVATELSKY & MONITOR. ZASOBNIK
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.PHASE @R@+6DH
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; MONITOR DATA
;
MSTAK: DS 2
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 ; KURZOR ADR.
;-------------------------
WMKOD: DS 14 ; KOD PRO KURZORY
PREV: DS 21 ; PREVODNI KODY..0
;-------------------------
; 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
RESER: DS 3
IONUM EQU ($-CILOC)/3+1
;
IOBYT: DS 1 ; RIZENI I/O ZARIZENI
;
;******************************
;<< EXTERNE OVLADANE FLAGY: >>
;******************************
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 ; RESERVACE
RESC: DS 1 ; SLOUPEC
RESL1: DS 1 ; POSLEDNI RADEK
RESC1: DS 1 ; POSLEDNI SLOUPEC
PRER: DS 1 ; UROVEN PRERUSENI
;
; PROMENNE PRO OPERACNI SYSTEM
;
CUR@: DS 1
KEY: DS 1
CAS: DS 1
WNDP: DS 6 ; PARAMETRY PRO 2.OKNO
EXSER EQU $-MODE ; KONEC SLUZEB
;
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 ; END ADR
SUM: DS 1
EXTEXT: DS 1
OPT: DS 1
NAMBUF: DS 65
;
;""""""""""""""""""""""""""""""""""
; PROMENNE PRO O.S.
FNAME: DS 12 ; JMENO SOUBORU
BNO: DS 1 ; CISLO BLOKU
BTO: DS 1 ; CISLO SOUBORU
BNI: DS 1 ;
BTI: DS 1 ; INPUT
ADRO: DS 2 ; ADR OUTPUT
ADRI: DS 2 ; ADR INPUT
FND: DS 1 ; FIND/READ
;**********************************
; I/O BUFFER PRO KOS
;**********************************
DS 1 ; TYP BLOKU
BOUT:
BIN: DS LENGHT ; DATA
BIEND EQU $
BOEND EQU $
WRNM: DS 11 ; JMENO SOUBORU
READNM: DS 22 ; BUFFER PRO ZOBRAZENI
POSICE: DS 2 ; ZOBRAZENI BLOKU
MOD@: DS 1
;
TSP: DS 1 ; PRO SP-210
JEDE?: DS 1 ; - " -
;
DEBL: DS 1 ; DELKA BLOKU
JEVER: DS 1 ; 0 - NENI VERIFIKACE
KAM?: DS 1 ; HLEDEJ 0/X - ZPET/VPRED
;
SEKV: DS 1 ; 0 - NENI ESCAPE SEKV.
TSM: DS 1 ; 0 - JE TERMINAL
;
.DEPHASE
;
END ;
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace