Ú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 | TNS


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


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


Výpis programu CKM


.XLIST
	PAGE	65
.LIST
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TITLE	COPY KZD/MGF = CKM
;	MIKOS V5 JE V RAM, MIKOS/K JE V EPROM
;	24.3.1988
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SM	EQU	00

;        ASEG

;	*** DEFINOVANI PAMETOVEHO PROSTORU *

@R@	EQU	4000H	; ZACATEK SYSTEMOVE RAM (1K)
RSTN	EQU	0CFH	; RST1 .. POUZIVA SYSTEM

MONIT	EQU	0	; ROM VERZE ZPS-2
ERAM	EQU	0000
EP3	EQU	1800H
TVBEG	EQU	3800H	; TV-RAM
EPROM	EQU	0C00H	; O.S.


;	* MONITOR ENTRY *

CI	EQU	103H
RI	EQU	106H
CO	EQU	109H
PO	EQU	10CH
CSTS	EQU	112H
IOCHK	EQU	115H
IOSET	EQU	118H
MEMCK	EQU	11BH
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
EXFLG	EQU	14BH
TXIMM	EQU	151H
WND@	EQU	154H
KZD	EQU	157H
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

;------------------------------------------
; KONSTANTY
ETX	EQU	3
BS	EQU	8
HT	EQU	9
LF	EQU	0AH
VT	EQU	0BH
CR	EQU	0DH
PREAM	EQU	10H	; PREAMBLE/POSTAMBLE
SUBS	EQU	1AH	; END FLAG
ESC	EQU	1BH
HOME	EQU	1DH
ERS	EQU	1EH
DEL	EQU	7FH	; DELETE
;
SPREC	EQU	0DFH	; KONSTANTY RIZENI
SPSTART	EQU	0FBH	; SP-210
SPSTOP	EQU	7FH
SPPAUS	EQU	0EFH
SPREWZ	EQU	0BFH
SPREWK	EQU	0F7H
SPRS	EQU	8BH	; RIDICI SLOVO 8255

; SER. I/O
URES	EQU	13H
UDATA	EQU	12H
USTAT	EQU	11H
UMODE	EQU	10H
PRENOS	EQU	14H	; NASTAVENI PRENOSU

;PARALEL. I/O
SPC	EQU	37H
SPIN	EQU	35H
SPOUT	EQU	34H

; BLOKOVA NAVESTI
EOR	EQU	0	; "END OF RECORDS"
SOH	EQU	01H	; "START OF HEADER"
EOT	EQU	04H	; "END OF TEXT"
CAN	EQU	':'	; JMENO PASKY
;		'A'	; DATOVY (ASCII) BLOK
;		'B'	; BINARNI BLOK


;************************************
;        ASEG
	.PHASE	4400H	; START
;************************************
;
;====================================
;  T A B U L K A  S L U Z E B  K O S
;====================================

	JMP	INITS	; INIT PROGRAMU
	JMP	COPY	; SKOKOVA TABULKA
	JMP	FIND	; 1
	JMP	OPEN	; 2
	JMP	CLOSE	; 3
	JMP	COPY	; 4
	JMP	COPY	; 5
	JMP	BINAR	; 6
ZAC:	JMP	GET@	; 7
	JMP	MOTA	; 8
	JMP	PUT@	; 9
	JMP	STOP	; 10

CAS:	DC	'PERINA' ; KONSTANTA

;====================================
; INICIALIZACE SYSTEMU KOS
;====================================

INITS:	MVI	A,0C3H
	LXI	H,TVBEG
	MOV	B,M
	MOV	M,A
	CMP	M	; TEST VIDEORAM
	JZ	INI1
	XRA	A	; JE TERMINAL
INI1:	STA	TSM
	MOV	M,B	; ZNAK ZPET
	LXI	D,GET@	; GET MGF
	MVI	C,3	; RI2
	CALL	IODEF
	LXI	D,PUT@	; PUT MGF
	MVI	C,5	; PO2
	CALL	IODEF
	XRA	A
	STA	TSP	; JE SP-210
	MVI	A,SPRS
	OUT	SPC	; RIDICI SLOVO SP-210
	STA	JEDE?	; MGF STOJI
	CALL	IOCHK
	STA	@IOB	; ULOZ IOBYT
	JMP	MGFIN

;====================================
; MENU A VYHODNOCENI POVELU OBSLUHY
;====================================

COPY:	LXI	SP,406DH	; MSTACK
	CALL	STOP
	CALL	TXIMM
	DB	CR,LF,LF,LF
	DB	'KOPIROVACI PROGRAM  MGF - KZD-1'
	DB	CR,LF,LF OR 80H
	CALL	IOCHK
	MVI	C,'*'
	ANI	0CH
	CPI	0CH
	JZ	$+5
	MVI	C,' '
	CALL	CO
	CALL	TXIMM
	DB	' M...MGF CTENI, KZD ZAPIS'
	DB	CR,LF OR 80H
	CALL	IOCHK
	MVI	C,'*'
	ANI	30H
	CPI	30H
	JZ	$+5
	MVI	C,' '
	CALL	CO
	CALL	TXIMM
	DB	' K...KZD CTENI, MGF ZAPIS'
	DB	CR,LF
	DB	'  L...CTI SOUBOR'
	DB	CR,LF
	DB	'  B...ZAPIS BINARNI SOUBOR'
	DB	CR,LF
	DB	'  A...ZAPIS ZNAKOVY SOUBOR'
	DB	CR,LF
	DB	'  Q...UKONCENI PROGRAMU'
	DB	CR,LF
	DB	'PRO MAGNETOFON:'
	DB	CR,LF
	DB	'  I...INIT KAZETY'
	DB	CR,LF
	DB	'  D...ADRESAR KAZETY'
	DB	CR,LF
	DB	'  X...PREPINANI K-10/SP-210'
	DB	CR,LF
	DB	'  R...PREVINUTI KAZETY (SP)'
	DB	CR,LF
	DC	'<,>...RYCHLOPOSUVY (SP)'
COPY1:	CALL	CRLF
	MVI	C,'_'
	CALL	TTSP
	JNZ	COPY2
	MVI	C,':'
COPY2:	CALL	CO
	CALL	ECHOCR
	CPI	'D'
	JZ	DIR	; DIRECTORY
	CPI	'I'
	JZ	INIT	; INICIALIZACE PASKY
	CPI	'B'
	JZ	BSAVE
	CPI	'L'	; LOAD
	JZ	CLOAD
	CPI	'A'
	JZ	WSAVE
	CPI	'K'
	JZ	KZDIN
	CPI	'M'
	JZ	MGFIN
	CPI	'X'
	JZ	EXCH
	CPI	'>'
	JZ	MOTA
	CPI	'<'
	JZ	REWIZ
	CPI	'R'
	JZ	@REW
	CPI	'Q'
	JNZ	COPY	; SPATNY POVEL
	LDA	@IOB
	MOV	C,A	; PRO KONEC
	CALL	IOSET	; OBNOV IOBYT
	JMP	NEXT


;************************************
; REALIZACE POVELU
;************************************

;====================================
; NASTAV MGF IN, KZD OUT
;====================================

MGFIN:	CALL	IOCHK	; <A>=IOBYT
	ANI	11000011B
	ORI	00101100B ; PO1, RI2
MG1:	MOV	C,A
	CALL	IOSET
	JMP	COPY

;====================================
; NASTAV KZD IN, MGF OUT
;====================================

KZDIN:	CALL	IOCHK
	ANI	11000011B
	ORI	00111000B ; PO2, RI1
	JMP	MG1

;====================================
; PREVIN PASKU
;====================================

MOTA:	CALL	TTSP	; TEST SP-210
	JZ	REWIK	; PRO SP-210
	MVI	A,28H	; SEPNUTI RELE MGF.
	OUT	UMODE
	JMP	MOTA1
REWIK:	MVI	A,SPREWK ; PREVINUTI NA KONEC
	CALL	SPPULS
MOTA1:	CALL	DONE
	CALL	STOP
	JMP	COPY


;====================================
; DIRECTORY
;====================================

DIR:	CALL	PLAY
	INR	A
DIR0:	CZ	VYPISH
	XRA	A
DIR1:	XCHG
	SHLD	BNI	; CISLO SOUBORU..
	MVI	C,'%'	; CHYBA SEKVENCE
	CNZ	CO
	CALL	SEARCH	; HLAVICKA
	JZ	DIR0
	ORA	A
	JNZ	DIR1A
	CALL	STOP	; NUTNO PRO SP-210
	IF	SM
	LDA	TSM
	ORA	A
	JNZ	COPY	; KONEC PASKY PRO TV
	CALL	SERCR
	MVI	C,1FH
	CALL	SERO@	; KONEC PASKY PRO
	ENDIF
	JMP	COPY	; TERMINAL
DIR1A:	CPI	EOT
	JNZ	DIR2
	CALL	DBTCR
	IF	SM
	LDA	TSM
	ORA	A
	CZ	CRLF	; PRO TERMINAL
	ENDIF
DIR2:	CALL	NUFIL
	JMP	DIR1


;====================================
; ZAPIS VYSTUPNI SOUBOR
;====================================

BSAVE:	XRA	A	; BINARNI SOUBOR
	JMP	CSAVE	; ==============

WSAVE:	MVI	A,0FFH	; ZNAKOVY SOUBOR
			; ==============

CSAVE:	STA	BINF?
	MVI	C,0
	MVI	A,2
	CALL	EXFLG	; NEBER 1A
	CALL	IOCHK
	ANI	30H	; PO
	CPI	30H
	JZ	OPEN	; PRO MGF
	MVI	C,2
	CALL	KZD	; OPEN KZD
 	JMP	CSAV1

;====================================
; OTEVRI NOVY SOUBOR PRO ZAPIS
;====================================

OPEN:	CALL	RNAME
	CPI	'@'	; APPEND?
	JZ	OPE4
	CPI	'.'
	PUSH	PSW
	CZ	REWIND
	POP	PSW
	LDA	@OF1	; PODRUHE?
	ORA	A
	PUSH	PSW	; =====================
	CNZ	CLOSE	; UZAVRI A PRIPOJ DALSI
	POP	PSW	; SOUBOR
	JNZ	OPE4	; =====================
	PUSH	H
	CALL	PLAY
OPE1:	CALL	SEARCH	; KONEC ZAZNAMU ?
	CZ	VYPISH	; SOH
	MOV	A,D
	STA	BTO	; CISLO SOUBORU
	LDA	BOUT-1	; ANO
	CPI	EOT
	JZ	OPE3	; DALSI BLOK
	CPI	CAN
OPE3:	CZ	OK?
	JNZ	OPE1	; DALSI BLOK
	POP	H
	DB	3EH	; MVI A,#
OPE4:	XRA	A	; APPEND
	PUSH	H
	LHLD	BNO	; CISLO SOUBORU
	INR	H
	MVI	L,0
	SHLD	BNO	; CISLO BLOKU A SOUBORU
	ORA	A	; APPEND?
	CNZ	RECOR
	MVI	A,SOH
	STA	@OF1
	POP	H
	CALL	WRNAM

CSAV1:	LDA	BINF?
	ORA	A
	JNZ	CSAV2	; NENI BIN. SOUBOR
	CALL	IOCHK
	ANI	30H
	CPI	30H
	JZ	BINAR	; PRO MGF
	MVI	C,6
	CALL	KZD	; BINAR NA KZD
	JMP	CSAV2

;====================================
; NASTAV BINARNI SOUBOR
;====================================

BINAR:	MVI	A,30H
	CALL	GAPO	; START ZAPISU
	CALL	BTIM8
	MVI	A,'B'
	STA	BOUT-1

CSAV2:	LXI	D,FREE+1
	LHLD	ADREND
	XCHG
CSAV3:	MOV	C,M
	CALL	PO	; ZAPIS DLE IOBYTU
	CALL	HILO
	JNC	CSAV3
	CALL	IOCHK
	ANI	30H
	CPI	30H
	JZ	CLOSE	; PRO MGF
	MVI	C,3
	CALL	KZD	; CLOSE PRO KZD
	JMP	COPY

;====================================
; UZAVRI VYSTUPNI SOUBOR
;====================================

CLOSE:	
CLOSE0:	LDA	@OF1	; NENI OTEVREN
	ORA	A
	JZ	COPY
	PUSH	H
	LHLD	ADRO
	INX	H
	MVI	M,SUBS	; ZAPIS POSLEDNI ZNAK
	MVI	A,EOT	; UZAVRI BLOK
	CALL	WOBW
	XRA	A
	STA	@OF1	; CLOSE
	POP	H
	CALL	STOP
	JMP	COPY


;====================================
; CTI VSTUPNI SOUBOR
;====================================

CLOAD:	CALL	IOCHK
	ANI	0CH	; RI
	CPI	0CH
	JZ	FIND	; PRO MGF
	MVI	C,1
	CALL	KZD	; FIND PRO KZD
	JMP	CLOA1

;====================================
; OTEVRI SOUBOR PRO CTENI
;====================================

FIND:	CALL	RNAME
	CPI	'.'
	PUSH	PSW
	CZ	REWIND
	POP	PSW
	MVI	B,NAMLE
	LXI	D,FNAME
	CALL	MOVE
	CALL	EXT?
	CNZ	PLAY
	CALL	CMPNM
	MVI	A,1
	MOV	E,A
	XCHG
	SHLD	BNI	; CISLO SOUBORU
	STA	@IF1
	MVI	A,LOW(BIEND-1)
	STA	ADRI

CLOA1:	CALL	MEMCK
	MOV	E,A
	MOV	D,B
	DCX	D	; MEMTOP-1
	LXI	H,FREE
CLOA2:	CALL	HILO
	JC	EREND	; KONEC PAMETI
	CALL	RI	; CTI DLE IOBYTU
	MOV	M,A	; VSTUP DO PAMETI
	JNC	CLOA2	; NEBYL SUB (1AH)
	DCX	H	; PRED SUB
	SHLD	ADREND	; ADR. KONCE SOUBORU

DIRSTP:	XRA	A
	STA	@IF1	; CLOSE
	CALL	IOCHK
	ANI	0CH
	CPI	0CH
	JZ	CLOA3	; PRO MGF
	XRA	A
	STA	DEBL	; BLOK 255 B
	MVI	C,10
	CALL	KZD	; STOP PRO KZD
	JMP	COPY
CLOA3:	CALL	STOP	; PRO MGF
	JMP	COPY

EREND:	SHLD	ADREND
	CALL	TXIMM
	DB	CR,LF,LF
	DC	'KONEC PAMETI'
	JMP	COPY


;====================================
; INICIALIZUJ NOVOU KAZETU
;====================================

INIT:	CALL	TTSP
	JNZ	INIT2	; PRO K-10
	CALL	REWIND
	CALL	RECPUL
	MVI	B,4
INIT1:	MVI	A,250
	CALL	TIME	; CEKANI 3*2.5 SEC.
	DCR	B
	JNZ	INIT1
	JMP	INIT3
INIT2:	MVI	A,28H	; SEPNUTI RELE MGF.
	OUT	UMODE
	CALL	TXIMM
	DC	' PREVIN A ZAPNI '
	CALL	RECOR
INIT3:	CALL	XSTOP
	CALL	TXIMM
	DC	' ZADEJ'
	LXI	H,0	;0..CISLO SOUBORU
	SHLD	BNO
	CALL	RNAME
	MVI	A,CAN
	CALL	WRNAM
	JMP	COPY


; ZAPIS JMENO SOUBORU

WRNAM:	PUSH	PSW
	PUSH	H	; ADRESA JMENA
	CALL	NULBF
	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
	ANI	3FH	; KOD PRO AND-1
	JNZ	$+5
	MVI	A,' '	; BLANK
	STAX	D
	INX	H
	INX	D
	DCR	B
	JNZ	WRN1
	POP	PSW
	CALL	WOBW
	MVI	M,'A'	;TYP DATA
	JMP	CRLF

;===================================
; PREPNUTI K-10 / SP-210
;===================================

EXCH:	LDA	TSP
	XRI	0FFH
	STA	TSP
	JMP	COPY

;===================================
; PREVINUTI NA ZACATEK - RUCNI STOP
;===================================

REWIZ:	CALL	TTSP
	JNZ	COPY	; NENI SP-210
	MVI	A,SPREWZ
	JMP	REWIK+2

;===================================
; PREVINUTI NA ZACATEK - AUTOMATICKY
;===================================

@REW:	CALL	REWIND
	JMP	COPY

REWIND:	CALL	TTSP
	RNZ		; NENI SP-210
	MVI	A,SPREWZ
	CALL	SPPULS
	MVI	A,200
	CALL	TIME	; CEKANI 2 SEC.
REWI1:	CALL	BREAK@
	IN	SPIN	; STAV SP-210
	CPI	0F7H	; TEST STOPU
	JNZ	REWI1	; JESTE NENI STOP
	JMP	STOP

;====================================

; TEST NA JMENO

	CALL	PHDR
CMPNM:	CALL	SEARCH	; POROVNEJ JMENO
	JNZ	CMPNM	; NENI HLAVICKA
	CPI	CAN
	JZ	CMPNM-3	; VYPIS VOLUME JMENO
			; PRO ZAPIS
CPF10:	LXI	B,FNAME
	MVI	E,NAMLE
	CALL	TESTJM
	JNZ	CMPNM	; DALSI JMENO
	RET

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	D
	LXI	H,BIN-1
	CALL	PHDR
	IF	SM
	LDA	TSM
	ORA	A
	JNZ	VYP1
	MVI	C,1FH	; PRO TERMINAL
	CALL	SERO@
	CALL	CRLF
	ENDIF
VYP1:	POP	D
	XRA	A
	RET

	IF	SM
SERCR:	MVI	C,CR	; ZNAK "CR" NA SERIOVY
	JMP	SERO@	; VYSTUP
	ENDIF


JMENO?:	CALL	VYPISH	; ANO / NE
OK?:	CALL	TXIMM
	DC	'--(A/N)?'
	CALL	ECHOCR
	CPI	'A'	; PISMENA
	RZ
	CPI	'Y'
	RET


; 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
	INX	H
	MVI	D,COMLE
	JMP	TEXT
 

; IDENTIFIKACE BLOKU NA CO

PNAME:	LXI	H,READNM ; VYPIS "B" 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	B
	JNZ	PNAM1
	RET


DBTCR:	CALL	CRLF
DBTV:	MOV	A,D
	CALL	DBYT
DBTV1:	CALL	SPACE
	MOV	A,E
	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
	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	D
	RET
 

; JE EXTERNI JMENO '"' ?

EXT?:	LDA	EXTEXT
	CPI	'"'
	RET


; ANALYZA ODDELOVACU

@ANAL:	CPI	' '
	RZ
ANAL:	CPI	CR
	RZ
	ORA	A
	RET


; VYPIS TEXT

TXNAM:	CALL	TXIMM
	DB	CR,LF
	DC	' NAZEV:'
	RET


BREAK:	
	LDA	TSM
	ORA	A	; PRO TERMINAL
	RZ		; NETESTUJ
BREAK@:	CALL	CSTS
	RZ
	CALL	CI
	JMP	ETX?


; CTI A VYPIS ZNAK

ECHO:	CALL	CINCR
	RZ
ETX?:	CPI	ETX
	RNZ
	CALL	DIRSTP	; CLOSE & STOP
	JMP	NEXT	; BREAK=>C

; ZOBRAZ "CTENI"

PLAY:	CALL	TTSP
	JZ	START	; PRO SP-210
	CALL	TXIMM
	DC	' CTENI '
REC0:	CALL	DONE


START:	
	CALL	DUPL
	MVI	A,38H	; NASTAVENI MGF.
GAPO:	MOV	C,A
	LDA	JEDE?
	ORA	A
	RZ		; MGF JEDE
	CALL	TTSP
	MOV	A,C
	JNZ	STAR2	; PRO K-10
	PUSH	PSW	; RIDICI SLOVO
	ANI	0FH
	PUSH	PSW	; PRIZNAK Z
	CNZ	SPGO	; START CTENI
	POP	PSW
	CZ	RECPUL	; START ZAPISU
	POP	PSW	; 38 / 18
STAR2:	OUT	UMODE
	OUT	URES	; RESET UARTU
	MVI	A,1FH
	OUT	USTAT	; NASTAVENI PRENOSU
	IN	UDATA	; NEPLATNA DATA
	XRA	A
	STA	JEDE?
	RET


STOP:	CALL	DUPL
	CALL	TTSP	; TEST SP-210
	MVI	A,SPSTOP
STOP1:	CZ	SPPULS	; PRO SP-210
	MVI	A,10H
	OUT	UMODE
	STA	JEDE?


;------------------------------------
; PREPNUTI NA TERMINAL SM7202
;	VSTUP:	A - TYP SOUBORU

PNASM:	MOV	B,A
	LDA	TSM
	ORA	A
	RNZ		; NENI TERMINAL
	CALL	DUPL
	MOV	A,B
	CPI	'B'
	MVI	A,9	; TERMINAL + STOP MGF.
	JNZ	PN1
	MVI	A,29H	; TERMINAL + START MGF.
PN1:	OUT	UMODE
	OUT	URES
	MVI	A,PRENOS ; NASTAVENI PRENOSU
	OUT	USTAT
	IN	UDATA	; NEPLATNA DATA
	XRA	A
	OUT	UDATA
	RET


DUPL:	LDA	TSM	; DVA ZNAKY "NUL"
	ORA	A	; NA SERIOVY VYSTUP
	RNZ
	MVI	C,0
	CALL	SERO@
	JMP	SERO@


; TEST PRIPOJENI SP-210

TTSP:	LDA	TSP
	ORA	A
	RET		; Z=1 PRO SP-210


; GENEROVANI RIDICIHO PULSU NA SP-210
;	VSTUP: A - RIDICI SLOVO

RECPUL:	CALL	T10MS
	MVI	A,SPREC
	OUT	SPOUT	; ZAZNAM
SPGO:	CALL	T10MS
        MVI     A,SPSTART ; SPUSTENI
SPPULS:	OUT	SPOUT
	MVI	A,21
	CALL	TIME	; PULS DELKY 210 MS
	MVI	A,0FFH
	OUT 	SPOUT	; KONEC SIGNALU
	RET


; ZOBRAZ "ZAPIS!"

RECOR:	CALL	TTSP
	RZ		; PRO SP-210 NIC
	CALL	TXIMM
	DB	CR,LF
	DC	' ZAPIS!'

DONE:	CALL	TXIMM
	DC	' HOTOVO ?'
ECHOCR:	CALL	ECHO
	PUSH	PSW
	CALL	CRLF
	POP	PSW
	RET

; CASOVE PODPROGRAMY

BTIM8:	LDA	CAS
BTIME:	MOV	B,A	; * 10 MS
	MOV	A,M	; 'B' ?
	CPI	'B'
	MOV	A,B
	JNZ	TIME
	RRC
	RRC
	RRC		; /8
	JMP	TIME

T10MS:	MVI	A,1	; PRO 10 MS
TIME:	PUSH	B	; ACC*10MS (TCY=500NS)
TIME1:	LXI	B,800+255
TIME2:	DCX	B	; ( 5)
	INR	B	; ( 5)
	DCR	B	; ( 5)
	JNZ	TIME2	; (10) 10MS LOOP @ 12.5US
	DCR	A
	JNZ	TIME1
	POP	B
	RET


; PRESUN PAMETI

MOVE:	MOV	A,M
	STAX	D
	INX	H
	INX	D
	DCR	B
	JNZ	MOVE
	RET

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

;  OPERACE SE SOUBORY

;====================================
; NAJDI BLOK NA PASCE
;====================================

SEARCH:	XRA	A
SEAR1:	MVI	C,'#'	; CHYBA
	CC	CO
	CALL	ZVYS
	CALL	READF
	JC	SEAR1	; PRO CHYBU
	MOV	A,M
	ORA	A
	JNZ	RIB2
	CALL	TXIMM	; PRO KONEC PASKY
	DB	CR,LF,LF
	DC	'SOUBOR NENALEZEN'
	JMP	COPY


; ZVYS CISLO BLOKU

ZVYS:	LHLD	BNI
	INX	H
	SHLD	BNI
	RET
 
;===================================
; CTI VSTUPNI BUFFER
;===================================

RIB:	PUSH	D
	PUSH	B
	CALL	ZVYS
	CALL	READ
	JC	ERRD	; CHYBA
	CALL	NUFIL	; CISLO O.K. ?
	JNZ	ERRD	; CHYBA BLOKU
RIB1:	POP	B
	POP	D
	LXI	H,BIN-1
	MOV	A,M
RIB2:	CPI	CAN	; NAZEV PASKY
	RZ
	CPI	SOH	; JMENO SOUBORU
	RET		; (HL)..TYP BLOKU

;===================================
; CHYBA   C T E N I
;===================================

ERRD:	CALL	XSTOP
	CALL	TTSP	; PRO SP-210 1. OPRAVA
	MVI	B,100	; (ABY STIHALA MECHANIKA)
	JZ	ERR31	; AUTOMATICKY "A"
ERRD0:	CALL	STOP	; ZPRACUJ CHYBU CTENI
	LHLD	BNI
	XCHG
	CALL	DBTCR	; POZADOVANE CISLO
	CALL	TXIMM
	DB	CR,LF
	DC	'CHYBA CTENI: I/D/N/A=ZNOVA ?'
	CALL	ECHO	; POKRACUJ
	CPI	'N'
	JZ	ERRD8	; PRO "N"
	CPI	'I'
	JNZ	ERRD1
	LDA	BTI
	INR	A
	STA	BTI	; ZVYS CISLO SOUBORU
	IF	SM
	LDA	TSM
	ORA	A
	CZ	CRLF	; PRO TERMINAL
	ENDIF
	JMP	ERRD7
ERRD1:	CPI	'D'
	JNZ	ERRD3
	LDA	BTI
	DCR	A
	STA	BTI
ERRD2:	MVI	B,200	; PRO "D"
	CALL	VRAT	; NAVRAT O 2 SEC.
	CALL	READF
	CALL	NUFIL
	JNC	ERRD2	; JESTE VRACEJ
	JMP	ERRD7
ERRD3:	MVI	B,50	; PRO "A" NAVRAT O 0.5 SEC
ERR31:	CALL	VRAT
	JMP	ERRD7
ERRD4:	CALL	TXIMM
	DB	CR,LF
	DC	'VRAT ZPET '
	CALL	PLAY
ERRD7:	CALL	READF	; ZNOVA CTI
	JC	ERRD7
	CALL	NUFIL	; A HLEDEJ
	JZ	ERRD8
	JNC	ERRD0	; PREJEL
	JMP	ERRD7	; CTI DAL
ERRD8:	CALL	CRLF
	JMP	RIB1	; JE TO DOBRE

VRAT:	CALL	TTSP
	POP	H	; NAVRATOVA ADRESA VRAT
	JNZ	ERRD4	; PRO K-10
	PUSH	H	; PRO SP-210 OK
	MVI	A,SPREWZ ; PREVIJENI VZAD
	CALL	SPPULS	 ; DOBA VSTUPUJE V <A>
	MOV	A,B
	JMP	TIME

;================================
; ZAPIS VYSTUPNI BUFFER
;================================

WOBW:	STA	BOUT-1
WOB:	PUSH	D
	LHLD	BNO
	INX	H
	SHLD	BNO
	XCHG

;*********************************************
;  ZAPIS BLOKU:	HL - ADRESA VYSTUPNIHO BUFFERU
;		DE - CISLO SOUBORU A BLOKU
;*********************************************

WRBLO:	PUSH	B
	PUSH	D
	LXI	H,BOUT-1 ; START BLOKU
	CALL	DUPL
	MVI	A,30H
	CALL	GAPO	; START WRITE
	CALL	BTIM8	; 800/100 MS
	LDA	CASK
	ORA	A
	CNZ	BTIM8	; PRODLOUZENO 2x
	CALL	SEROP
	CALL	SEROP
	CALL	SEROP	; PREAMBLE
	LXI	B,(LENGHT+1) AND 0FFH
	CALL	SEROM	; DATA
	LXI	H,WRNM
	MVI	C,NAMLE
	CALL	SEROM	; JMENO
	POP	D
	MOV	A,E
	CALL	SEROUT	; CISLO BLOKU
	MOV	A,D
	CALL	SEROUT	; CISLO SOUBORU
	MOV	A,B
	CALL	SEROUT	; KONTROLNI SUMA
	CALL 	SEROP
	XRA	A
	CALL	SEROUT	; ZAVER BLOKU
	LXI	H,BIN-1
	PUSH	H
	MOV	A,M
	CALL	PNASM	; PREPNI NA TERMINAL
	CALL	OKNO
	CALL	DBTV1	; CISLO BLOKU A
	CALL	OBNOV	; SOUBORU NA CO
	CALL	T10MS	; 10 MS
	POP	H
	SHLD	ADRO	; ZACATEK
	MOV	A,M
	CALL	ZASTAV
	POP	B
	POP	D
 

; NULUJ VYSTUPNI BUFFER
; ---------------------

NULBF:	LXI	H,BOUT-1
	PUSH	H
	MVI	A,LENGHT
	INX	H
	MVI	M,0
	DCR	A
	JNZ	$-4
	POP	H	;(BLOK TYP) ADRM
	RET

; ZASTAV NA KONCI BLOKU

ZASTAV:	SUI	'B'
	RZ
	INR	A
	JZ	XSTOP	; 'A'
	CALL	BTIM8
	MOV	A,M
	DCR	A	; SOH ?
	JNZ	STOP	; NENI SOH


; VOLANI STOP NA K-10 / PAUSE NA SP-210

XSTOP:	CALL	TTSP
	MVI	A,SPPAUS ; PAUSE NA SP-210
	JZ	STOP1
	JNZ	STOP	; STOP NA K-10


; CISLO BLOKU O.K. ?

NUFIL:	PUSH	H
	LHLD	BNI
	DCX	H
	CALL	HILO	; POROVNEJ
	POP	H
	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
	LHLD	ADRI
GET0:	INX	H
	MOV	A,L	; PRAZDNY?
	CPI	BIEND AND 0FFH
	MOV	A,M
	SHLD	ADRI
	JZ	GET1	; <A>..BYTE
	CPI	SUBS	; EOF? TEST
	JNZ	GETEX	;-
	MOV	C,A
	CALL	KONEC?
GET00:	MOV	A,C	; POSLEDNI BLOK
	JNZ	GETEX	;-
	MOV	E,L	; ADR ZNAKU SUBS
	LXI	H,BIEND	; 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
	CALL	STOP
	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

;===============================
; 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
	LHLD	ADRO
	INX	H
	MOV	M,C	; ZAPIS
	SHLD	ADRO
	MOV	A,L
	CPI	(BOEND AND 0FFH) - 1
	CZ	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



CHECK:	MOV	C,B	; KONTROLNI SOUCET ?
	CALL	RICH
	CMP	C
	RZ


ERSTP:	CALL	STOP	; ZASTAV A OHLAS CHYBU
	JMP	ERROR

RADR@:	CALL	RICH
	MOV	L,A
	CALL	RICH	; HL
	MOV	H,A
	RET

RICH:	CALL	RI	; CTENI & SUMA
	JC	ERSTP
	JMP	SUM@

PADR@:	MOV	C,L
	CALL	POCH
	MOV	C,H

POCH:	MOV	A,C	; ZAPIS & SUMA
	ADD	B
	MOV	B,A
	JMP	PO


;********************************************
; CTENI BLOKU:	HL - ADRESA VSTUPNIHO BUFFERU
;      VYSTUP:	DE - CISLO SOUBORU A BLOKU
;		CY=1 PRO CHYBU
;********************************************

READF:	XRA	A	; NASTAV FIND MOD
	STA	FND
READ:
RBLOK:	PUSH	B
	LXI	H,READNM ; PRO TERMINAL
	CALL	START
 
; SYNCHRONIZACE

SYNC:	IN	UDATA
SYNC1:	CALL	T10MS	; 10 MS
	CALL	BREAK
	IN	USTAT
	RLC
	JC	SYNC	; CEKEJ NA READY
;
RBL2:	MVI	C,3	; 3*PREAMBLE
RBL3:	CALL	SERIN
	CPI	PREAM	
	JNZ	SYNC	; GAP
	DCR	C
	JNZ	RBL3
	MVI	C,'*'
	LDA	FND	; FIND MOD?
	ORA	A
	JNZ	$+5	; NECTE
	MVI	C,':'
	MOV	M,C
	INX	H
	PUSH	H
	LXI	H,BIN-1
	LXI	B,(LENGHT+1) AND 0FFH
 
; CTI BLOK DAT
	CALL	SERIM
	POP	H
	MVI	M,'"'
	INX	H
	MVI	C,NAMLE
	CALL	SERIM
	MVI	M,'"'
	INX	H
	MVI	M,' '
	CALL	SERIN
	MOV	E,A
	CALL	SERIN
	MOV	D,A
	MOV	C,B	; KONTROLNI SUMA
	CALL	SERIN
	SUB	C
	PUSH	PSW
	LXI	H,BIN-1
	PUSH	H
	MOV	A,M
	CALL	PNASM	; PREPNUTI NA TERMINAL
	CALL	OKNO
	MVI	B,15
	CALL	PNAME	; VYPIS JMENA
	CALL	DBTV
	CALL	OBNOV
	POP	H
	SHLD	ADRI	; POCATECNI ADRESA
	LDA	FND
	ORA	A
	MOV	A,M
	MVI	B,'A'
	JZ	$+4
	INR	B
	CMP	B
	CC	XSTOP
	MOV	A,B
	STA	FND	; ZRUS FIND MOD
	POP	PSW	; PRO ZERO ..O.K
	POP	B
	RZ
	STC
	RET		; ELSE ...ERROR
 

; ZAPIS DO PAMETI

SERIM:	CALL	SERIN	;CTI
	MOV	M,A
	INX	H
	DCR	C
	JNZ	SERIM
	RET


SEROM:	MOV	A,M	; Z PAMETI
	INX	H
	CALL	SEROUT	; NA :CT:
	DCR	C
	JNZ	SEROM
	RET		; VSE

SEROP:	MVI	A,PREAM	; BLOCK-MARK

; ZAPIS ZNAKU NA MGF

SEROUT:	CALL	SUM@
	PUSH	B
	MOV	C,A
	CALL	SERO@
	POP	B
	RET

; VSTUP ZNAKU Z MGF

SERIN:	CALL	SERI@
SUM@:	PUSH	PSW
	ADD	B
	MOV	B,A
	CALL	BREAK
	POP	PSW
	RET


;**********************************
; COPY DATA
;**********************************

; 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	; OKNA V MIKOSU
MOD@:	DS	1
;
TSP:	DS	1	; PRO SP-210 - 0
JEDE?:	DS	1	; 0/X - MGF. JEDE/STOJI
;
DEBL	EQU	427FH	; DELKA BLOKU
JEVER	EQU	4280H	; 0 - NENI VERIFIKACE
;
SEKV:	DS	1	; 0 - NENI ESCAPE SEKV.
TSM:	DS	1	; PRO TERMINAL = 0

ADREND:	DS	2
BINF?:	DS	1	; 0 = BINARNI SOUBOR
@IOB:	DS	1	; PUVODNI IOBYT

FREE	EQU	$

	.DEPHASE

;*********************************************
;   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
CASK:	DS	1	; <>0 - PRODLUZ MEZERY

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
;
	.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 | TNS


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


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



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