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


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM MIKOS/K


Výpis programu MIKOS/K V5.0


.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 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM MIKOS/K



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