Ú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


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


8 bity / SAPI-1 / Programové vybavení / ZPS-2 / RUTINY PRO PLOTR XY4130


Výpis programu OVLADAC PRO XY4130 NA SAPI-1 ZPS-2 MON V5.0

Zdrojový kód byl získán pomocí zpětného inženýrství.


; OVLADAC PRO XY4130 PRES PORT3 NA JPR-1
; PRO SAPI-1 ZPS-2 A MONITOR V5.0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
TITLE OVLADAC PRO XY4130 NA SAPI-1 ZPS-2 MON V5.0
;
	; KONSTANTY
CR	EQU	0DH
LF	EQU	0AH
BEL	EQU	7
CTRLC	EQU	3
;
	;PERIFERIE
PORT2	EQU	2C00H
;
	; SLUZBY MONITORU
IOCHK	EQU	0115H		; I/O BYT CHEK <A>
IOSET	EQU	0118H		; I/O BYT SET <C>
IODEF	EQU	011EH		; DEFINICE UZIVATELSKYCH PERIFERII
NEXT	EQU	0139H		; PREDANI OVLADANI MONITORU
CINCR	EQU	013FH		; ECHO+ANALYZA
EXFLG	EQU	014BH		; EXTERNI RIZENI FLAGU
;
	; ROZSIRENE SLUZBY MONITORU V5.0
TX	EQU	0151H		; ZOBRAZENI NASLEDUJICIHO TEXTU
;
	; ADRESI V PAMETI
ROM	EQU	1800H		;ADRESA V ROM
RAM	EQU	4290H		;ADRESA V RAM

;********************************
; START PROGRAMU
;
	ASEG
	ORG	ROM
;
; TABULKA SKOKU

	JMP	ZNAKP		; TISK JEDNOHO ZNAKU <C>
	JMP	ZAVOV		; ZAVED OVLADAC
	JMP	VPOZ		; NASTAVI VYCHOZI POZICI PO ZALOZENI PAPIRU
				; X V <DE>, Y V <BC> PRO TEXT ?
	JMP	AMOVA		; ABSULUTNI PRESUN X V <DE>, Y V <BC>
	JMP	AVECTA		; ABSOLUTNI VEKTOR X V <DE>, Y V <BC>
	JMP	APOIN		; ABSOLUTNI BOD X V <DE>, Y V <BC>
	JMP	RMOVA		; RELATIVNI PRESUN X V <DE>, Y V <BC>
	JMP	RVECTA		; RELATIVNI VEKTOR X V <DE>, Y V <BC>
	JMP	RPOIN		; RELATIVNI BOD X V <DE>, Y V <BC>
	JMP	NASZN		; NASTAV VELIKOST PISMA <HL>
				; SIXX, SIXY, SIYX, SIYY
	JMP	TESTT		; TEST TISKARNY (VYTISKNE ZNAKY 10H AZ FFH)
	JMP	NTABGZ		; NASTAV ADRESU GENERATORU ZNAKU <HL>
	LHLD	ATABGZ		; VRAT ADRESU GENERATORU ZNAKU <HL>
	RET
;
;ZAVEDENI OVLADACE
ZAVOV:	MVI	C,13		; SYSTEMOVA TISKARNA
	LXI	D,ZNAKP		; ADRESA OVLADACE
	CALL	IODEF		; NASTAV
	CALL	IOCHK		; NACTI IOBYT
	ANI	10111111B
	ORI	10000000B	; L=L .. TISKARNA
	MOV	C,A
	CALL	IOSET		; NASTAV IOBYT
	LXI	H,PVZN
	CALL	NASZN		; NASTAV POCATECNI VELIKOST ZNAKU
	LXI	H,TABGZ		; ADESA TABULKY ZNAKU V EPROM
	SHLD	ATABGZ		; ULOZ AKTUALNI TABULKU ZNAKU
	CALL	TX		; ZOBRAZ TEXT
	DB	CR,LF
	DB	'L=XY413','0'+80H
	JMP	HOME
; VYCHOZI HODNOTY PRO VELIKOST TEXTU
PVZN:	DW	4		; SIXX
	DW	0		; SIXY
	DW	0		; SIYX
	DW	4		; SIYY
;
;VSTUP DO TISKUVE RUTINY, ZNAK JE V <C>
;
ZNAKP:	PUSH	B
	PUSH	D
	PUSH	H
	CALL	ZNAKC
	POP	H
	POP	D
	POP	B
	RET
;
NTABGZ:	SHLD	ATABGZ		; UKOZ NOVOU ADRESU GENERATORU ZNAKU <HL>
	RET
;
NASZN:	LXI	D,SIXX		; NASTAV NOVOU VELIKOST ZNAKU
	MVI	B,8
NASZN1:	MOV	A,M
	STAX	D
	INX	D
	INX	H
	DCR	B
	JNZ	NASZN1
	RET
;
; ULOZI <DE> NA TXTSX, <BC> NA TXTSY A TXTNS NASTAVI NA 1
; SOURADNICE V TXTSX A TXTSY SLIUZI PRO TISK TEXTU
;
ULZXY:	XCHG			; PROHOT <DE> A <HL>
	SHLD	TXTSX		; <DE> ULOZ NA TXTSX
	XCHG			; PROHOT <DE> A <HL>
	MOV	H,B
	MOV	L,C		; <BC> DO <HL>
	SHLD	TXTSY		; <BC> ULOZ NA TXTSY
	MVI	A,1
	STA	TXTNS		; PRIZNAK NOVYCH SOURADNIC
	RET
;
AMOVA:	CALL	ULZXY		; ULOZ X A Y
MOVA:	CALL	PEN0		; ZVEDNI PERO
	JMP	ABS0		; ADSULUTNI PRESUN
;
AVECTA:	CALL	ULZXY		; ULOZ X A Y
VECTA:	CALL	PEN1		; SPUST PERO
	JMP	ABS0		; ADSULUTNI PRESUN
;
APOIN:	CALL	ULZXY		; ULOZ X A Y
	CALL	MOVA		; ADSULUTNI PRESUN
	JMP	PENP		; UDELEJ TECKU
;
RVECTA:	CALL	ULZXY		; ULOZ X A Y
	CALL	PEN1		; SPUST PERO
	JMP	RELA		; RESATIVNI PRESUN
;
; NASTAVI PISATKO DO VYCHOZI POLOHY A POZCE DANE <BC> A <DE>
;
VPOZ:	CALL	ULZXY		; ULOZ X A Y
VPOZ1:	LXI	H,1414H		; NASTAV CASOVACI KONSTANTY
	SHLD	TKON1
	SHLD	TKON2
;
;NASTAVY POCATECNI KONSTATY
;TKON1	= 14H KONSTANTA PRO CASOVOU SMICKU 1
;TKON2	= 14H KONSTANTA PRO CASOVOU SMICKU 2
;TKON3	= 14H KONSTANTA PRO CASOVOU SMICKU 3
;
	PUSH	D		; SORADNICE X DO ZASOBNIKU
	PUSH	B		; SORADNICE Y DO ZASOBNIKU
	MVI	A,1
	STA	SPEN		; SPUST PERO ?????
	LXI	B,8
	MOV	D,B
	MOV	E,C		; "8" DO X A Y
	CALL	RELA1		; RELATIVNI PRESUN -> SINCHRONIZOVAT MOTORY
	LXI	H,0D08H
	SHLD	TKON1
;
;NASTAVY KONSTATY
;TKON1	= 08H KONSTANTA PRO CASOVOU SMICKU 1
;TKON2	= 0DH KONSTANTA PRO CASOVOU SMICKU 2
;TKON3	= 14H KONSTANTA PRO CASOVOU SMICKU 3
;
	LXI	H,06A4H		; 1610, 16.1 CM?
	SHLD	STPX		; OKAMZITA POLOHA X
	LXI	H,04B0H		; 1200, 12.0CM?
	SHLD	STPY		; OKAMZITA POLOHA Y
	POP	B
	PUSH	B		; OBNOV Y DO <BC>
	LXI	D,0		; X NA 0
	CALL	MOVA		; PRESUN
	POP	B
	PUSH	B		; OBNOV Y DO <BC>
	LXI	D,50H		; 80, 8MM? NASTAV Y
	CALL	MOVA		; PRESUN
	XRA	A
	STA	STPX		; VYNULUJ SPODNI BYTE OKAMZITE POLOHZ NA OSE X
	POP	B
	POP	D		; OBOV ZADANE X A Y
	CALL	MOVA		; PRESUN
;
;NASTAVY POCATECNI KONSTATY
;DIAK	= 00H PRIZNAK DIAKRITIKY, BUDE ZNAMENKO
;ZBS	= 00H ZNAK BS
;DIAK2	= 00H PRIZNAK DIAKRITIKY, BYLO ZNAMENKO
;GZNAK	= 00H PRIZNAK GRAFICKEHO ZNAKU
;TXTNS	= 00H PRIZNAK NOVYCH SURADNIC PRO TISK TEXTU
;RADKO	= 10H ROZSTUP MEZI RADKY
;WIDE	= 06H DRUH MEZERY MEZI ZNAKY
;
	MVI	A,0AH
	STA	TKON3
	MVI	A,6
	STA	WIDE		; TISKOVA MEZERA
	DCR	A
	LXI	H,DIAK		; PRIZNAK DIAKRITIKY
VPOZ2:	MVI	M,0
	INX	H
	DCR	A
	JNZ	VPOZ2		; POKUT NENI NULA TAK ZNOVU
	MVI	A,10
	STA	RADKO		; ROZESTUP MEZI RADKY
	RET
;
; ABSOLUTNI A RELATIVNI PRESUN
;
RMOVA:	CALL	ULZXY		; ULOZ X A Y
RELA1:	CALL	PEN0		; ZVEDNI PERO
RELA:	LHLD	STPX		; K X PRICTI RELATIVNI DX
	DAD	D		; = NOVA X
	XCHG
	LHLD	STPY		; TOTEZ S Y
	DAD	B
	MOV	B,H
	MOV	C,L		; A MUZES UDELAT ABS. PRESUN
ABS0:	LHLD	STPX		; DE = ZADAVE XZ
	XCHG			; HL = SKUTECNE X
	SHLD	STPX		; DE <=> HL ; X <=> XZ
	SHLD	NOPX		; A ULOZ NA NOVOU POZ. TISKU
	CALL	SMR		; ZJISTI SMER POSUVU PRO X
	PUSH	H		; SCHOVEJ ROZDIL X A XZ
	PUSH	B		; SCHOVEJ YZ
	MOV	C,A		; C = SMER POSUVU
	POP	D		; DE = PREDESLE BC TJ. ZADANA YZ
	LHLD	STPY		; HL = SKUTECNA Y
	XCHG			; DE <=> HL ; Y <=> YZ
	SHLD	STPY
	SHLD	NOPY		; ULOZ
	CALL	SMR		; A ZJISTI SMER PRO Y
	RLC
	RLC
	RLC
	RLC			; DO VYSICH 4 BITU A
	MOV	B,A
	ORA	C		; SLOZ S C
	STA	DIRE		; <= SMER DO Y A DO X
	POP	D		; OBNOV ROZDIL X A XZ
	RZ			; JSOU JI OBA POVUNY 0 VRAT SE
	MOV	A,L
	SUB	E
	MOV	A,H
	SBB	D		; TEST, KTERY POSUN JE VETSI
	MOV	A,C		; A = SMER POSUNU A
	JC	DALX		; SKOC PROTOZE (YZ-Y)<(XZ-X)
	XCHG			; DE <=> HL ; (XZ-X) <=> (YZ-Z)
	MOV	A,B		; A = SMER DO Y
DALX:	STA	DIR1
	SHLD	DIFF
	LXI	H,14H		; MALE POZASTAVENI
	CALL	ZPOZ0
	MVI	A,29H
	STA	ACCE		; ROZBEHOVA RYCHLOST
	MOV	B,D		; BC = ROZDIL
	MOV	C,E
	XRA	A
	SUB	E
	MOV	L,A
	MVI	A,0
	SBB	D
	MOV	H,A		; HL = DE * -1
	XRA	A
	MOV	A,D
	RAR
	MOV	D,A
	MOV	A,E
	RAR
	MOV	E,A		; DE = DE / 2
ABS1:	PUSH	H		; SCHOVEJ HL A DE
	PUSH	D
	XCHG			; DE <=> HL
	MOV	H,B
	MOV	L,C		; HL = BC
	DAD	H
	DCX	H		; HL = HL * 2 - 1
	DAD	D		; HL = HL + DE
	LXI	H,ACCE
	JNC	ABS2		; JE-LI HL >= 0 SKOC
	LDA	TKON3
	CMP	M
	JZ	ABS2
	DCR	M
ABS2:	MVI	A,28H
	SUB	M
	SUB	C
	MVI	A,0
	SBB	B
	JC	ABS3
	INR	M
ABS3:	LHLD	DIFF
	POP	D
	DAD	D
	XCHG
	POP	H
	PUSH	H
	DAD	D
	LDA	DIR1
	JNC	ABS4
	XCHG
	LDA	DIRE
ABS4:	PUSH	D
	CALL	ELEM
	DCX	B
	MOV	A,B
	ORA	C
	POP	D
	POP	H
	JNZ	ABS1
	RET
;
SMR:	MOV	A,L		; VRATI A = 0 PRO SKUT. = ZADANE
				;	A = 8 PRO SKUT. < ZADANE
				;	A = A PRO SKUT. > ZADANE
;
				; (VRATI A = 0 PRO SKUT. = ZADANE MINIGRAF)
				; (	A = 1 PRO SKUT. < ZADANE MINIGRAF)
				; (	A = F PRO SKUT. > ZADANE MINIGRAF)
	SUB	E
	MOV	L,A		; L = L - E
	MOV	A,H
	SBB	D
	MOV	H,A		; H = H - D - PREDCHOZI ZNAM.
	DAD	H		; HL = HL * 2
	JNC	SMVL		; -> JE-LI HL KLADNE
	XRA	A		; ZAPORNE - PREVED NA KLADNE
	SUB	L
	MOV	L,A
	MVI	A,0
	SBB	H
	MOV	H,A		; HL = -1 * HL
	MVI	A,0AH		; PRIZNAK A NAVRAT (MINIGRAF 	MVI	A,0FH)
	RET
SMVL:	MOV	A,H
	ORA	L
	RZ			; JE-LI HL = 0 VRAT SE
	MVI	A,8		; (MINIGRAF 	MVI	A,01H)
	RET			; JINAK PRIZNAK A NAVRAT
;
; ZANAK PRO TISK JE V <C>
;
; VZYNAM RIDICICH ZNAKU
;
; 00H - ZAPNE REZIM GRAFICKEHO ZNAKU
; 08H - ZNAK ZPET
; 0AH - NOVY RADEK
; 0CH - NOVA STRANKA
; 0DH - NAVRAT VOZU
; 0EH - ZAPNI DIAKRITIKU
; 0FH - VYPNI DIARITIKU
;
ZNAKC:	LDA	TXTNS		; PRIZNAK NOVYCH SOURADNIC PRO TEXT
	DCR	A		; PRIZNAK -1
	JNZ	ZNAKC1		; NEJSOU NOVE SOURADNICE - NENI NULA
	STA	TXTNS		; NULUJ PRIZNAK
	PUSH	B		; SCHOV ZNAK
	CALL	HOME		; NASTAV PISATKO NA VYCHOZI SOURADNICE
	POP	B		; OBNOV ZNAK
ZNAKC1:	LDA	GZNAK		; 0 <> GRAFICKY ZNAK
	ORA	A
	JNZ	GRAFZ		; TISK GRAFICKEHO ZNAKU
	ORA	C
	JZ	NGZ		; NASTAV ZE BUDE GRAFICKY ZNAK, ZNAK BYL 00H
	CPI	10H
	JNC	KOI		; POKUT ZNAK VETSI NEZ 10H -> TISK
	CPI	0CH
	JZ	STRAN		; NOVA STRANKA
	CPI	CR
	JZ	PCR		; NAVRAT VORU
	CPI	LF
	JZ	PLF		; NOVY RADEK
	CPI	0FH
	JZ	DIAKS		; NYPNE DIAKRITYKU
	CPI	0EH
	JNZ	HBS		; TEST NA BS
	MVI	A,1
	DB	6		; (MVI)
DIAKS:	XRA	A
;	MVI	B,0AFH		; PRI PRIMEM PRUCHODU ZAPNE DIAKRITIKU
	STA	DIAK		; ULOZ ZDA JDE O NORMANI ZNAK NEBO S DIAKRITIKOU
				; 0 = JE ZNAK S DIAKRITIKOU
				; 0 <> JE NORMANI ZNAK
	RET
;
GRAFZ:	MOV	A,C
	PUSH	PSW
	CALL	ZNAK4		; TISK 1 SEGMETU ZNAKU, DATA V <A>
	POP	PSW
	ANI	80H
	RZ			; DALSI SEGMENT ZNAKU
	XRA	A
	STA	GZNAK		; ZRUS T TIS GAFICKEHO ZNAKU
	JMP	ZNAK3		; MEZI ZNAKOVA MEZERA
;
; NAVRAT VOZU (CR)
;
PCR:	LDA	RADKO		; NACTI RADKOVANI
	MOV	B,A
	LHLD	SIYX		; VELIKOST PISMA SIYX
	XCHG			; A DO <DE>
	LHLD	TXTSX		; NACTI POLOHU TEXTU X
	CALL	HLMDE		; SPOCITEJ
	MOV	A,H
	ORA	A
	JM	STRAN		; JE-LI ZAPORNA X, NOVA STRANKA
	SHLD	TXTSX		; ULOZ NOVOU POLOHU TEXTU X
	LDA	RADKO		; NACTI RADKOVANI
	MOV	B,A
	LHLD	SIYY		; VELIKOST PISMA SIYX
	XCHG			; A DO <DE>
	LHLD	TXTSY		; NACTI POLOHU TEXTU Y
	CALL	HLMDE		; SPOCITEJ
	MOV	A,H
	ORA	A
	JM	STRAN		; JE-LI ZAPORNA X, NOVA STRANKA
	SHLD	TXTSY		; ULOZ NOVOU POLOHU TEXTU Y
	JMP	PLF1		; A NOVY RADEK
;
; NOVY RADEK (LF)
;
PLF:	LHLD	TXTSY		; NACTI SOURADNICI TEXTU Y
PLF1:	MOV	B,H
	MOV	C,L		; DEJ JI DO <BC>		
	LHLD	TXTSX		; NACTI SOURADNICI TEXTU X
	XCHG			; DEJ JI DO <DE>
	JMP	MOVA		; PRESUN
;
; ZALOZEZENI NOVEHO PAPIRU
;
STRAN:	XRA	A		; MODE PRO DISPLEJ
	MOV	C,A		; NORMALNI ZNAK
	CALL	EXFLG
	CALL	IOCHK		; NACTI IOBYT
	MOV	C,A		; IOBYT DO <C>
	PUSH	B		; USCHOVEJ IOBYT A PUVODNI OBSAH EXFLAG
	ANI	11111100B
	ORI	1		; C=C POUZE KLAVESNICE S DISPLEJEM
	MOV	C,A
	CALL	IOSET		; NASTAV
	CALL	PEN0		; ZVEDNI PERO
	CALL	TX		; ZOBRAZ TEXT
	DB	CR,LF,BEL,'ZALOZ '
	DB	'PAPIR A STISKNI'
	DB	' KLAVESU',CR,LF+80H
	CALL	CINCR		; CEKEJ NA STISK KLAVESI
	POP	B		; OBNOV IOBYT A PUVODNI OBSAH EXFLAG
	PUSH	PSW		; SCHOV STISKLU KLAVESU
	CALL	IOSET		; OBNOV PUVODNI IOBYT
	MOV	A,B
	MVI	C,0		; MODE PRO DISPLEJ
	CALL	EXFLG		; OBNOV PUVODNI TYP ZNAKU
	POP	PSW		; OBNOV STISKLU KLAVESU
	CPI	CTRLC
	JZ	NEXT		; POKUT ^C NAVTAT DO MONITORU
HOME:	LXI	B,99CH		; (2460 24.6CM?) POCATECNI HODNOTA OSY Y
	MOV	H,B
	MOV	L,C
	SHLD	TXTSY		; ULOZ Y
	LXI	H,0		; POCATECNI HODNOTA OSY X
	SHLD	TXTSX		; ULOZ NOVE X
	XCHG			; A X DO <DE>
	JMP	VPOZ1		; NASTAV VYHOZI POZICI PO ZALOZENI PAPIRU
;
; HLEDANI ZNAKU S DIAKRITIKOU (KOI-8CS) ZNAK JE V <C>
;
KOI:	MVI	A,11111000B	; JEN HORNICH 5 BITU
	ANA	C
	CPI	18H
	RZ			; POKUT ZNAKY 18H AZ 1FH NAVRAT
	MOV	A,C		; ZNAK DO <A>
	CPI	80H
	JC	HBS		; JE MENSI NEZ 7FH -> KOI-7, TISK
	SUI	80H		; <A> - 80H
	CPI	40H
	JC	DIKZ		; JE MENSI NEZ 3FH -> 80H-BFH, TISK DIAKRITYKY MAL. PIS.
	SUI	40H		; <A> - 40H -> C0H-FFH
	LXI	H,TKOI2		; ADESA KONVERZNI TABULKY VEL. PIS
	ADD	L
	MOV	L,A
	MOV	A,H
	ACI	0
	MOV	H,A		; SPOCITEJ ADRESU V TABULCE
	CALL	DIAKS		; ULOZI PRIZNAK DIAKRITIKY (0)
	MOV	A,M		; DATA Z TABULKY
	ORA	A
	JZ	NEDIK		; NENI ZNAK S DIAKRITIKOU
	PUSH	PSW		; SCHOV ZNAK Z TABULKY
	RLC
	RLC
	RLC			; O 3 BITI V LEVO
	ANI	00000111B	; JEN SPODNI 3 BITY
	ORI	00011000B	; PRIDEJ BIT 3 A 4 TJ. 18H AZ 1FH 
	CALL	HBS
	POP	PSW		; OBNOV ZNAK Z TABULKY
	ANI	00111111B	; 
	JZ	NEDIK		; POKUT 3F TAK MEZERA
	ORI	01000000B	; JINAK PRIDEJ BIT 6
HBS:	PUSH	H		; SCHOV <HL>
	CPI	8
	JNZ	ZNAK10		; POKUT NENI 8 JDEM TISKNOUT ZNAK Z <A>
	STA	ZBS		; ULOZ BS
	POP	H		; OBNOV <HL>
	RET
;
NEDIK:	MVI	A,20H		; NENI ZNAK S DIAKRITIKOU? TAK MEZERA
	JMP	HBS
;
; TISKNE DIAKRITICKA ZNAMENKA
;
DIKZ:	CALL	TSTBS		; TEST NA BS
	MOV	A,C		; ZNAK DO <A>
	MVI	B,5		; POCITALO NASTAV NA 5
DIKZ1:	RAR			; O BIT V PRAVO PRES CY
	JNC	DIKZ3		; NENI-LI 1 TAK DALSI POKUS
	PUSH	B
	PUSH	PSW
	LXI	H,DIKZT		; ADRESA DIAKRITICKYCH ZNAKU
	MOV	A,B		; POCITALO DO <A>
	ADD	A		; * 2
	ADD	A		; * 4		.
	ADD	L
	MOV	L,A
	MOV	A,H
	ACI	0
	MOV	H,A		; PRICTI K ADRESE GENERATORO DIAK ZNAMENEK
	MVI	D,4		; BUDOU DVE USECKY TJ. 4 KROKY
DIKZ2:	MOV	A,M		; NACTI DATA
	CALL	ZNAK4		; TISK 1 SEGMETU ZNAKU, DATA V <A>
	INX	H
	DCR	D
	JNZ	DIKZ2		; POKUT NENI 0 TAK DALSI
	POP	PSW
	POP	B
DIKZ3:	DCR	B
	JP	DIKZ1		; POKUT JE PARITA TAK DASLI KOLO
	JMP	ZNAK3		; MEZI ZNAKOVA MEZERA
;
;ODECTE  KRAT <DE> OD <HL>
;
HLMDE:	XRA	A		; DO <A> 0
	ORA	B
	RZ			; JE-JI B 0 NAVRAT
	XRA	A
	SUB	E
	MOV	E,A
	MVI	A,0
	SBB	D
	MOV	D,A		; <DE>=1-<DE> ... DVOJKOVY DOPLNEK ?
HLMDE1:	DAD	D		; <HL>=<HL>-<DE>
	DCR	B
	RZ			; JE-LI  O NAVRAT
	JMP	HLMDE1
;
TSTBS:	PUSH	H
	LXI	H,ZBS		; DO <HL> ADRESU PRIZNAKU BS
	XRA	A		; ZNULUJ <A>
	CMP	M		; POROVNEJ
	MOV	M,A		; ZNULUJ PRIZNAK BS
	CZ	NPOZ		; POKUT NEBYL BS NOVA POZICE
	POP	H
	RET
;
;NASTAVY NOVOU POZICI
;
NPOZ:	LHLD	NOPX
	SHLD	PREX
	LHLD	NOPY
	SHLD	PREY
	RET
;
; TISK ZNAKU, ZNAK JE V <A>
;
ZNAK10:	PUSH	PSW
	LXI	H,DIAK2		; PRIZNAK DIAKRYTIKY 2
	XRA	A
	CMP	M
	JZ	ZNAK11		; POKU JE NULA SKOK NA TISK
	MOV	M,A		; A ULOZ NULU
	MVI	A,22H		; DO PROSTRED ZNAKU
	CALL	ZNAK4		; TISK 1 SEGMETU ZNAKU, DATA V <A>
	CALL	NPOZ		; NOVA POZICE O PUL ZNAKU
ZNAK11:	POP	PSW
	LXI	H,ZBS		; ADRESU PRIZNAKU BS
	ANI	7FH		; JEN KOI-7
	MOV	C,A		; ZNAK DO <C>
	CALL	TSTBS		; TEST NA BS
	LDA	DIAK		; NECTI PRIZNAK DIAKRITZKY
	ORA	A
	JZ	ZNAK12		; NENI TAK TISK
	MOV	A,C
	CPI	7BH
	JC	ZNAK12		; JE MENSI NEZ 7BH TJ. {, TAK TISK
	ADI	5		; PRICTI 5
	MOV	C,A		; NOVY ZNAK DO <C>
	INR	M		; ULOZ HO NA NIC
ZNAK12:	MOV	A,C		; ZNAK DO <A>
	SUI	10H		; JE JI MENSI NEZ 10H
	JC	ZNAK2		; SKOC
	ANI	0F8H		; NE, NULUJ NEJNISI 3 BZTY
	RAR
	RAR			; ROTACE PRES CY O DVA BITY VPRAVO
	LHLD	ATABGZ		; ARESA TABULKY ZNAKU
	ADD	L		; A PRICTI K NIZSI ADRESE TABGZ ZNAKU
	MOV	L,A		; A DO 
	MVI	A,0		; <A>=0
	ADC	H		; A PRICTI CY K VYSSI ADRESE TABGZ ZNAKU
	MOV	H,A		; A DO 
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A		; DO <HL> ADRESU GENERATOTU ZNAKU
	MOV	A,C		; OBVOV ZNAK
	ANI	7		; POUZE 3 NEJNIZSI BITY
	MOV	C,A
	JZ	VYZN		; JSOU-LI 0 SKOC
SKZN:	MOV	A,M		; NEJSOU
	ORA	A
	INX	H
	JP	SKZN		; TESTUJ NEJVYSI BIT
	DCR	C
	JNZ	SKZN		; POKUT NENI 0 TAK DALSI ZNAK
				; TISKOVA DATA VYBRANA
VYZN:	MVI	A,8		; ??? NASTAV VYCHOZI POLOHU PRO TISK ???
	CALL	ZNAK4		; TISK 1 SEGMETU ZNAKU, DATA V <A>
ZNAK1:	MOV	A,M		; CTI TISKONA DATA
	CALL	ZNAK4		; TISK 1 SEGMETU ZNAKU, DATA V <A>
	MOV	A,M		; ZNONU NACTI TISKONA DATA
	INX	H		; UKAZOVATKO +1
	ORA	A
	JP	ZNAK1		; POKUNT NENI PARITA TAK DALSI SEGMENT ZNAKU
ZNAK2:	POP	H
ZNAK3:	PUSH	H
	LDA	WIDE		; TISKOVA MEZERA
	ANI	3FH
	MVI	C,0
	CALL	ZNAK5
	POP	H
	RET
;
NGZ:	INR	A
	STA	GZNAK		; NASTAV PRIZNAK PRO GRAFICKY ZNAK <1>
	CALL	TSTBS		; TEST NA BS
;
; KRESLI VLASTNI USECKU ZNAKU
; KPYYYXXX
; !! !  +- 0 AZ 4 (7)
; !! +---- 0 AZ 7
; !+------ 0 - PRESUN, 1 - TISK
; +------- 1 - POSLEDNI ZNAK
;
ZNAK4:	MOV	C,A
	ANI	7		; OSA X
ZNAK5:	PUSH	H
	PUSH	D
	PUSH	PSW
	LHLD	SIXX
	XCHG
	LHLD	PREX
	CALL	ZNAK8
	XCHG
	MOV	A,C		
	ANI	38H		; OSA Y
	RAR
	RAR
	RAR
	LXI	H,ZBS
	ADD	M
	MOV	B,A
	LHLD	SIYX
	XCHG
	CALL	ZNAK8
	POP	PSW
	PUSH	H
	LHLD	SIXY
	XCHG
	LHLD	PREY
	CALL	ZNAK8
	MOV	A,B
	XCHG
	LHLD	SIYY
	XCHG
	CALL	ZNAK8
	PUSH	H
	MOV	A,C
	ANI	40H		; PERO
	JZ	ZNAK6
	LHLD	NOPX
	XCHG
	LHLD	NOPY
	MOV	B,H
	MOV	C,L
	LDA	SPEN
	ORA	A
	CZ	MOVA
	POP	B
	POP	D
	CALL	VECTA
	JMP	ZNAK7
ZNAK6:	CALL	PEN0
	POP	H
	SHLD	NOPY		; POLOHA PRISTIHO TISKU Y
	POP	H
	SHLD	NOPX		; POLOHA PRISTIHO TISKU X
ZNAK7:	POP	D
	POP	H
	RET
;
ZNAK8:	INR	E		; POCITA VELIKOST ZNAKU
	DCR	E
	RZ
	PUSH	H
	LXI	H,0
ZNAK9:	DCR	A
	JM	ZNAK0
	DAD	D
	JMP	ZNAK9
ZNAK0:	POP	D
	DAD	D
	RET

;-----------------------------------------------------
;	PROVED KROK S MOTORY
;-----------------------------------------------------
; SMR VRATI A = 0 PRO SKUT. = ZADANE 0000
;	    A = 8 PRO SKUT. < ZADANE 0100
;	    A = A PRO SKUT. > ZADANE 1010
;
;     76543210
; <A> YYYYXXXX
;
;PRIPOJENI XY41XX K PORTU 3OUT NA JPR-1
;
; PORT2 OUT0 - PERO
; PORT2 OUT1 - X/Y
; PORT2 OUT6 - +/-
; PORT2 OUT7 - KROK
;
ELEM:	LHLD	SMOT		; NACTI STAV MOTORU JE V 
	MOV	H,A		; CO DELAT V DO 
	LDA	SMOT		; NACTI STAV MOTORU <A>
	ANI	01000100B	; JEN BIT 6 A 2
	ORA	H		; SLOZ PRES OR
	STA	SMOT		; ULOZ STAV MOTORU
	XRA	A		; VYVUJ <A>
	MOV	H,A		; A TAKY 
	LDA	ACCE		; RICHLOST PRI ROZBEHU
	RAR			; V PRAVO PRES CY TJ. /2
	MOV	L,A		; A DO 
	JMP	ROSAY		; JDEM CUKAT S MOTORY
;
RPOIN:	CALL	ULZXY		; ULOZ X A Y
	CALL	PEN0		; DVEDNI PERO
	CALL	RELA		; RELATIVNI PRESUN
PENP:	CALL	PEN1		; SPUST PERO
;PERO NAHORU
PEN0:	LDA	SPEN		; NACTI STAV PERA
	DCR	A		; STAV PERA -1
	RNZ			; PERO ZVEDNUTO - NAVRAT
	LHLD	TKON1		; NACTI CASOVACI KONSTANY 1 A 2 DO <HL>
	JMP	PENZ		; ZVEDNI PERO V <A> 00H
;PERO DOLU
PEN1:	LDA	SPEN		; NACTI STAV PERA
	DCR	A		; STAV PERA -1
	RZ			; PERO DOLE - NAVRAT
				; V <A> FFH
	LHLD	TKON2		; NACTI CASOVACI KONSTANY 2 A 3 DO <HL>
PENZ:	ANI	1		; JEN NEN BIT 0
	STA	SPEN		; ULOZ STAV PERA
	MOV	A,L
	STA	SPED		; NASTAV AKTUALNI RICHLOST (K3)
	LXI	H,01F4H		; PAUZA PRO PERO
	ORI	80H		; KROK NA 1 TJ. BIT 7 
	STA	PORT2		; VYSTAV STAV PERA NA PORT
	JMP	ZPOZ0		; A PAUZA
;
;RESIME OSU Y
ROSAY:	PUSH	H		; ULOZ "RYCHLOSTI"
	LHLD	SPEN		; NACTI STAV PERA A MOTORU DO <HL>
	MOV	A,H		; STAV MOTORU DO <A>
	RLC			; O BIT V LEVO [65432107]
	JNC	ROSAX		; POKUT BIT 7 [0] TAK BUDEM RESIT OSU X
	XRI	80H		; EX-OR S <A> 10000000
	JP	ROSAX		; POKUT BIT 6 [1] TAK BUDEM RESIT OSU X
	MOV	H,A		; SCHOV DATA
	ANI	40H		; JEN HORNI 4 BITY
	ORI	2		; NASTAV OSU Y NA XY JE TO X
	CALL	KROK		; UDELEJ KROK
	MOV	A,H		; OBNOV DATA
;RESIME OSU X
ROSAX:	RLC
	RLC
	RLC
	RLC			; PRETOCIT NA DATA PRO OSU X [21076543]
	JNC	WAITM		; POKUT BIT 3 [0] TAK BUDEME RESIT PAUZU
	XRI	0C0H		; EX-OR S <A> 11000000
	JP	WAITM		; POKUT BIT 2 [1] TAK BUDEME RESIT PAUZU
	MOV	H,A		; SCHOV DATA
	ANI	40H		; JEN HORNI 4 BITY
	CALL	KROK		; UDELEJ KROK
	MOV	A,H		; OBNOV DATA
WAITM:	RLC
	RLC
	RLC			; DATA PRO RIZENI MOTORU DO VYCHOZI POLOHY [76543210]
	STA	SMOT		; A ULOZ
	POP	H		; OBNOV "RYCHLOSTI"
;
;SPOZDOVACI SMICKA
;
ZPOZ0:	LDA	SPED		; AKTUALNI RYCHLOST
ZPOZ1:	DCR	A
	JNZ	ZPOZ1
	DCX	H
	MOV	A,H
	ORA	L
	JNZ	ZPOZ0
	RET
;
KROK:	ORA	L		; PRIPOJ STAV PERA
	STA	PORT2
	ORI	80H
	STA	PORT2		; UDELJ KROK
	RET
;
; TEST TISKKARNY
; VYTISKNE ZNAKZ OD 10H PO FFH
;
TESTT:	MVI	C,0CH
	CALL	ZNAKC1		; NOVOU STRANKU
	MVI	C,10H		; OD ZNAKU 10H
TESTT1:	PUSH	B		; SCHOV ZNAK
	CALL	ZNAKC1		; TISKNI ZNAK
	LDA	ZBS		; NACTI BS NEBO NECO JINEHO
	ORA	A
	MVI	C,20H		; MEZERA
	CNZ	ZNAKC1		; POKUT JE BS TAK TISK
	MVI	C,20H		; MEZERA
	CALL	ZNAKC1		; VYTISKNIJI
	POP	B		; VRAT ZNAK
	INR	C		; DALSI ZNAK
	RZ			; POKUT JE VSECH 255 ZNAKU -> NAVRAT
	MVI	A,0FH
	ANA	C		; JEN SPODNI 4 BITY
	JNZ	TESTT1		; POKUT NENI NULA -> DALSI ZNAK
	PUSH	B
	MVI	C,0DH
	CALL	ZNAKC1		; JINAK NOVY RADEK
	POP	B
	JMP	TESTT1
	;
	;DIAKRITICKE ZNAMENKA PRO KOI-8CS
	;
DIKZT:	DB	38H,6AH,28H,7AH,3AH,6CH,2AH,7CH
	DB	28H,5AH,18H,6AH,2AH,5CH,1AH,6CH
	DB	18H,4AH,08H,5AH,1AH,4CH,0AH,5CH
	;
	;TABULKA PRO DIAKRITICKE ZNAKZ KOI-8CS
	;
TKOI2:	DB	00H,21H,00H,63H,64H,65H,00H,00H
	DB	00H,29H,0F5H,00H,00H,00H,35H,2FH
	DB	00H,00H,72H,73H,74H,35H,00H,25H
	DB	00H,39H,7AH,00H,40H,00H,00H,00H
	DB	00H,01H,00H,43H,44H,45H,00H,00H
	DB	00H,09H,0D5H,00H,00H,00H,15H,0FH
	DB	00H,00H,52H,53H,54H,15H,00H,05H
	DB	00H,19H,5AH,00H,40H,00H,00H,00H
	;
	;GENERATOR ZNAKU
	;***************
	;
TABGZ:	DW	TAB10,TAB20,TAB20,TAB28,TAB30
	DW	TAB38,TAB40,TAB48,TAB50,TAB58
	DW	TAB60,TAB68,TAB70,TAB78,TAB80
	;
TAB10:	DB	18H,68H,71H,73H,6CH,5CH,53H,51H,0D8H	;10H, VELKE KOLECKO
	DB	10H,70H,74H,54H,0D0H			;11H, CTVEREC
	DB	20H,72H,64H,52H,0E0H			;12H, KOSOCTVEREC
	DB	14H,72H,50H,0D4H			;13H, SIPKA DOLU (TROUHELNIK)
	DB	12H,70H,74H,0D2H			;14H, SIPKA DOLU (TROUHELNIK)
	DB	12H,72H,20H,0E4H			;15H, VELKE PLUS
	DB	10H,74H,30H,0D4H			;16H, VELKY KRIZEK
	DB	12H,72H,20H,64H,14H,70H,10H,0F4H	;17H, VELKA HVEZDICKA
TAB20:  DB	80H,3AH,5AH,0AH,0CAH,31H,7AH
	DB	32H,0FBH,39H,49H,0BH,7BH,2CH,68H,18H,0DCH
	DB	10H,53H,5CH,63H,61H,68H,71H
	DB	74H,3AH,0CAH,7CH,39H,70H,69H
	DB	72H,79H,1BH,52H,4BH,54H,0DBH
	DB	0CH,68H,70H,79H,7AH,73H,6BH
	DB	50H,49H,4AH,0DCH,3BH,0F2H
TAB28:  DB	3BH,69H,59H,0CBH,39H,6BH,5BH
	DB	0C9H,11H,73H,24H,60H,31H,0D3H
	DB	20H,64H,32H,0D2H,12H,0C1H,20H
	DB	0E4H,0AH,0CAH,0FCH
TAB30:  DB	7CH,34H,54H,4BH,49H,50H,70H
	DB	79H,7BH,0F4H,29H,7BH,0CBH,30H
	DB	79H,7BH,74H,6CH,48H,0CCH,30H
	DB	79H,7BH,74H,6CH,63H,5CH,54H
	DB	4BH,49H,0D0H,0BH,7BH,58H,0DCH
	DB	10H,49H,4BH,54H,5CH,63H,60H
	DB	78H,0FCH,34H,7BH,79H,70H,50H
	DB	49H,4BH,54H,5CH,63H,61H,0D8H,7CH,0F8H
TAB38:  DB	09H,50H,58H,61H,63H,6CH,74H
	DB	7BH,79H,70H,68H,61H,63H,5CH
	DB	54H,4BH,0C9H,10H,49H,4BH,54H
	DB	74H,7BH,79H,70H,68H,61H,63H
	DB	0ECH,1AH,5AH,2AH,0EAH,01H,52H
	DB	22H,0E2H,33H,61H,0D3H,28H,6CH
	DB	18H,0DCH,31H,63H,0D1H,30H,79H
	DB	7BH,74H,6CH,5AH,52H,0AH,0CAH
TAB40:  DB	68H,71H,73H,6CH,54H,4BH,4AH
	DB	51H,61H,6AH,63H,0CBH,7AH,4CH
	DB	21H,0E3H,78H,7BH,74H,6CH,63H
	DB	60H,63H,5CH,54H,4BH,0C8H,34H
	DB	7BH,79H,70H,50H,49H,4BH,0D4H
	DB	78H,7BH,74H,54H,4BH,0C8H,3CH
	DB	78H,48H,4CH,20H,0E2H,78H,7CH,20H,0E2H
	DB	34H,7BH,79H,70H,50H,49H,4BH,54H,5CH,0DAH
TAB48:  DB	78H,3CH,4CH,20H,0E4H,09H,4BH,4AH
	DB	7AH,79H,0FBH,10H,49H,4BH,54H
	DB	0FCH,78H,3CH,60H,0CCH,38H,48H
	DB	0CCH,78H,62H,7CH,0CCH,78H,4CH
	DB	0FCH,09H,50H,70H,79H,7BH,74H,54H,4BH,0C9H
TAB50:  DB	78H,7BH,74H,6CH,63H,0E0H,09H
	DB	50H,70H,79H,7BH,74H,54H,4BH
	DB	49H,1AH,0CCH,78H,7BH,74H,6CH
	DB	63H,60H,0CCH,10H,49H,4BH,54H
	DB	5CH,63H,61H,68H,70H,79H,7BH
	DB	0F4H,38H,7CH,3AH,0CAH,38H,50H
	DB	49H,4BH,54H,0FCH,38H,4AH,0FCH
	DB	38H,49H,6AH,4BH,0FCH
TAB58:  DB	7CH,38H,0CCH,38H,62H,7CH,22H
	DB	0CAH,38H,7CH,48H,0CCH,3BH,79H
	DB	49H,0CBH,38H,0CCH,39H,7BH,4BH
	DB	0C9H,31H,7AH,0F3H,0H,0C4H
TAB60:  DB	39H,0F2H,29H,6BH,64H,54H,4BH
	DB	49H,50H,59H,5BH,54H,0CCH,78H
	DB	28H,6BH,64H,54H,4BH,0C8H,2CH
	DB	69H,60H,50H,49H,0CCH,3CH,4CH
	DB	49H,50H,60H,69H,0ECH,18H,5CH
	DB	64H,6BH,69H,60H,50H,49H,0CCH
	DB	0AH,72H,7BH,7CH,21H,0E3H,00H
	DB	43H,4CH,6CH,69H,60H,58H,51H,0D4H
TAB68:  DB	78H,28H,6BH,64H,0CCH,09H,4BH
	DB	4AH,6AH,69H,3AH,0FAH,01H,42H
	DB	4BH,6BH,6AH,3BH,0FBH,78H,2CH
	DB	58H,0CCH,09H,4BH,4AH,7AH,0F9H
	DB	68H,60H,69H,62H,4AH,22H,6BH
	DB	64H,0CCH,68H,60H,69H,6BH,64H
	DB	0CCH,09H,50H,60H,69H,6BH,64H,54H,4BH,0C9H
TAB70:  DB	00H,68H,6BH,64H,5CH,53H,0D0H
	DB	04H,6CH,69H,60H,58H,51H,0D4H
	DB	09H,69H,61H,6AH,6BH,0E4H,4BH
	DB	54H,5BH,59H,60H,69H,0ECH,0CH
	DB	4BH,52H,72H,21H,0E3H,28H,50H,49H
	DB	4BH,54H,0ECH,28H,4AH,0ECH,28H
	DB	49H,62H,4BH,0ECH
TAB78:  DB	6CH,28H,0CCH,0H,43H,4CH,6CH
	DB	28H,58H,51H,0D4H,28H,6CH,48H
	DB	0CCH,0BH,52H,5AH,61H,6AH,72H
	DB	0FBH,0AH,0FAH,09H,52H,5AH,63H
	DB	6AH,72H,0F9H,20H,69H,5BH,0E4H,80H
TAB80:  DB	32H,0FBH
TAB81:	DB	2AH,71H,7AH,73H,0EAH
	DB	39H,72H,0FBH,31H,7AH,0F3H,39H,79H,3BH,0FBH
	;
	DB	0,0,'TESLA DIZ'
	DB	0,0,0,0,0,0,0,0
;
KONROM	EQU	$-1	;POSLEDNI BYTE V ROM
ROMC	EQU	$-ROM	;CEKOVA DELAKA KODU
;
	ORG	RAM	;BLOK PROMENYCH

SIXX:	DS	2	; VELIKOST PISMA XX 4290H
SIXY:	DS	2	; VELIKOST PISMA XY 4292H
SIYX:	DS	2	; VELIKOST PISMA YX 4294H
SIYY:	DS	2	; VELIKOST PISMA YY 4296H
DIAK:	DS	1	; PRIZNAK DIAKRITIKY, BUDE ZNAMENKO 4298H
ZBS:	DS	1	; ZNAK BS
DIAK2:	DS	1	; PRIZNAK DIAKRYTIKY, BYLO ZNAMENKO 429AH
GZNAK:	DS	1	; PRIZNAK PRO GRAFICKY ZNAK 429BH
TXTNS:	DS	1	; PRIZNAK NOVYCH SURADNIC PRO TISK TEXTU 429CH
RADKO:	DS	1	; ROZSTUP MEZI RADKY 429DH
WIDE:	DS	1	; DRUH MEZERY MEZI ZNAKY 429EH
TKON1:	DS	1	; KONSTANTA PRO CASOVOU SMICKU 1 A249H
TKON2:	DS	1	; KONSTANTA PRO CASOVOU SMICKU 2 42A0H
TKON3:	DS	1	; KONSTANTA PRO CASOVOU SMICKU 3 42A1H
STPX:	DS	2	; OKAMZITA POLOHA PERA X 42A2H
STPY:	DS	2	; OKAMZITA POLOHA PERA Y 42A4H
TXTSX:	DS	2	; SOURADNICE X PRO TISK TEXTU 42A6H
TXTSY:	DS	2	; SOURADNICE Y PRO TISK TEXTU 42A8H
ATABGZ:	DS	2	; ARESA AKTUANIHO GENERATORU ZNAKU 42AAH
NOPX:	DS	2	; POLOHA PRISTIHO TISKU ZN. X 42ACH
NOPY:	DS	2	; POLOHA PRISTIHO TISKU ZN. Y 42AEH
SPEN:	DS	1	; OKAMZITY STAV PERA 42B0H
SMOT:	DS	1	; STAV KROKOVYCH MOTORU
PREX:	DS	2	; SOUR. PREDCHOZIHO TISKU X 42B2H
PREY:	DS	2	; SOUR. PREDCHOZIHO TISKU Y 42B4H
SPED:	DS	1	; AKTUALNI RICHLOST POSUVU 42B6H
ACCE:	DS	1	; RICHLOST PRI ROZBEHU 42B7H
DIRE:	DS	1	; SMER DO OS Y A X 42B8H
DIR1:	DS	1	; ? 42B9H
DIFF:	DS	2	; ROZDIL SOUR. ZADANE A SKUT. 42BAH
;
KONRAM	EQU	$-1	; POSLEDNI BZTE V RAM
RAMC	EQU	$-RAM	; CEKOVE OBSAZENI RAM
;
	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


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


8 bity / SAPI-1 / Programové vybavení / ZPS-2 / RUTINY PRO PLOTR XY4130



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