Ú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 / Program pro přenos dat po RS232C s "podáním ruky"


Výpis program pro přenos dat po RS232C s "podáním ruky"

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


;NEJAKE PRENASEDLO PO RS232C S PODANIM RURY
;
	; KONSTANTY
BS	EQU	08H		; ZNAK ZPET
GS	EQU	1DH
US	EQU	1FH
CR	EQU	0DH
LF	EQU	0AH

;DSM-1
RMS	EQU	10H		; STAV MODEM
RDI	EQU	11H		; STAV UARTU
ROD	EQU	12H		; PRJMUTA DATA
WMC	EQU	10H		; RIZENI MODEMU
CRL	EQU	11H		; RIZENI UARTU
TBRL	EQU	12H		; DATA K VYSILANI
RUART	EQU	13H		; RESET UARTU


	; SLUZBY MONITORU (V5.0)
CI@	EQU	0596H		; "103H" VSTUP Z CONSOLI
CRLF	EQU	0124H		; NOVY RADEK
EXPR	EQU	0127H		; SKLADANI ADRES (N=POCET <C>, SP)
HILO	EQU	0136H		; HL+1, SROVNANI S DE
NEXT	EQU	0139H		; NAVRAT DO MONITORU
CINCR	EQU	013FH		; ECHO+ANALYZA
EXFLG	EQU	014BH		; EXTERNI RIZENI FLAGU
COA@@	EQU	0568H		; VYSTUP NA CONSOLI Z <A> A NEPOSKODI SE <BC>

	; ROZSIRENE SLUZBY MONITORU V5.0
TX	EQU	0151H		; ZOBRAZENI NASLEDUJICIHO TEXTU

	;PROMENE V RAM
NAMBUF	EQU	4103H

;--------------------------------
	ASEG
	ORG	1400H
;
	CALL	TX		; ZOBRAZ TEXT
	DB	GS,US,'BLOCK DATA '
	DB	'TRANSFER SAPI'
	DB	'  -  P=',CR,LF,CR,LF
	DB	'ENTER PARTNER '
	DB	'(A/H)?',' '+80H
VYBER:	CALL	CINCR		; ECHO+ANALYZA
	CPI	'A'
	JZ	VYBER1
	CPI	'H'
	JZ	VYBER2
	MVI	C,5		; NASTAV KURZOR
	MVI	A,2		; NA RADEK 2
	CALL	EXFLG
	MVI	C,6		; NASTAV KURZOR
	MVI	A,21H		; NA POZICI 33
	CALL	EXFLG
	JMP	VYBER		; POKUT CHYBA TAK ZNOVU
;
VYBER1:	XRA	A
	JMP	VYBER3
;
VYBER2:	MVI	A,1
VYBER3:	STA	NAMBUF		; ULOZ TYP PRENOSU
VYBER4:	CALL	TX		; ZOBRAZ TEXT
	DB	GS,US,'BLOCK DATA '
	DB	'TRANSFER SAPI'
	DB	'  -  P','='+80H
	LDA	NAMBUF		; NACTI TYP PRENOSU
	ORA	A
	JNZ	VYBER5
	CALL	TX		; ZOBRAZ TEXT
	DB	'AT',' '+80H
	JMP	VYBER6
;
VYBER5:	CALL	TX		; ZOBRAZ TEXT
	DB	'HP',' '+80H
VYBER6:	MVI	C,5		; NASTAV KURZOR
	MVI	A,2		; NA RADEK 2
	CALL	EXFLG
	MVI	C,6		; NASTAV KURZOR
	MVI	A,0		; NA POZICI 0
	CALL	EXFLG
	CALL	TX		; ZOBRAZ TEXT
	DB	'ENTER SOURCE '
	DB	'OR END (S/P/E)?'
	DB	' '+80H
VYBER7:	CALL	CINCR		; ECHO+ANALYZA
	PUSH	PSW		; SCHOV ZNAK POVELU
	MVI	C,5		; NASTAV KURZOR
	MVI	A,0		; NA RADEK 0
	CALL	EXFLG
	MVI	C,6		; NASTAV KURZOR
	MVI	A,19H		; NA POZICI 25
	CALL	EXFLG
	POP	PSW		; OBNOV ZNAK POVELU
	CPI	'P'
	JZ	PRIJ		; PRIJMI DATA
	CPI	'S'
	JZ	VYS		; ODESLI DATA
	CPI	'E'
	JZ	KONEC		; KONEC
	JMP	VYBER7		; POKUT CHYBA TAK ZNOVU

;VYZVA K ZADANI JMENA SUBORU
VZJMEN:	MVI	C,5		; NASTAV KURZOR
	MVI	A,2		; NA RADEK 2
	CALL	EXFLG
	MVI	C,6		; NASTAV KURZOR
	MVI	A,0		; NA POZICI 0
	CALL	EXFLG
	CALL	TX		; ZOBRAZ TEXT
	DB	'ENTER FILE NAME'
	DB	'                '
	DB	CR,LF,':'+80H
	RET
;



;ODESLE DATA PRES DSM-1/1 PO RS232 S "PODANIM RUKZ"
;PODLE STAVU NA <NAMBUF> SE ROZHODNE ZDA BUDE RIZENI
;PRENOSU PODLE DTR NEBO DTR/CTS

;
DOUT:	MOV	C,A		; SCHOV DATA DO <C>
	LDA	NAMBUF		; NACTI TYP KOMUNIKACE
	ORA	A
	MOV	A,C		; OBNOV DATA
	JNZ	DOUT3		; POKUT 1 TAK DTR/CTS

;DTR
DOUT1:	MOV	C,A		; SCHOV DATA DO <A>
	MVI	A,2		; DTR "TERMINAL PRIPRAVEN"
	OUT	WMC		; RIZENI MODEMU
DOUT2:	IN	RDI		; STAV UARTU
	RLC
	RLC			; TBRE DO <CY>
	JNC	DOUT2		; JESTE SE VYSILA
	MOV	A,C		; VRAT DATA DO <A>
	OUT	TBRL		; A ODESLI JE PO RS232C
	RET

;DTR/CTS
DOUT3:	MOV	C,A		; SCHOV DATA DO <C>
	MVI	A,3		; DTR "TERMINAL PRIPRAVEN", RTS "PRIPRAVEN K PRIJMU"
	OUT	WMC		; RIZENI MODEMU
DOUT4:	IN	RMS		; STAV MODEMU
	RLC			; CTS "POVOLENI K VYSILANI"
	JC	DOUT4		; NENI-LI CTS TAK ZNOVU
	RLC			; DSR "VYZVA K VYSILANI"
	JC	DOUT4		; NENI-LI DSR TAK ZNOVU
	MOV	A,C		; OBNOV DATA 
	OUT	TBRL		; A ODESLI JE
	CALL	WAIT		; CHVILI POCKEJ
	RET

;PRIJME DATA PRES DSM-1/1 PO RS232 S "PODANIM RUKZ"
;PODLE STAVU NA <NAMBUF> SE ROZHODNE ZDA BUDE RIZENI
;PRENOSU PODLE DTR NEBO DTR/DSR/CDC

DIN:	LDA	NAMBUF		; NACTI TYP KOMUNIKACE
	ORA	A
	JNZ	DIN3		; POKUT 1 TAK DTR/DSR/CDC, JINAK DTR
DIN1:	MVI	A,3		; DTR "TERMINAL PRIPRAVEN", RTS "PRIPRAVEN K PRIJMU"
	OUT	WMC		; RIZENI MODEMU
DIN2:	IN	RDI		; STAV UARTU
	RLC			; JSOU DATA
	JNC	DIN2		; NEJSOU-LI TAK ZNOVU
	JMP	DIN6
;
DIN3:	MVI	A,2		; DTR "TERMINAL PRIPRAVEN"
	OUT	WMC		; RIZENI MODEMU
DIN4:	IN	RMS		; STAV MODEMU
	RLC
	RLC			; DSR "VYZVA K VYSILANI"
	JC	DIN4		; NENI-LI DSR TAK ZNOVU
	RLC			; DCD "POVOLENI KOMUNIKACE"
	JC	DIN4		; NENI-LI DCD TAK ZNOVU
DIN5:	IN	RDI		; STAV UARTU
	RLC			; JSOU DATA
	JNC	DIN5		; NEJSOU-LI TAK ZNOVU
DIN6:	IN	ROD		; CTI DATA
	MOV	C,A		; SCHOV DATA DO <C>
	XRA	A		; SHOD DTR A RTS
	OUT	WMC		; RIZENI MODEMU
	MOV	A,C		; OBNOV DATA
	RET
;
VYS:	CALL	TX		; ZOBRAZ TEXT
	DB	'>>','>'+80H
	CALL	VZJMEN		; VYZVA K ZADANI JMENA SUBORU
	CALL	NSL		; NASTAV SERIOAVOU LINKU
	MVI	A,2		; STX
	CALL	DOUT		; ODESLI DATA
	CALL	JMENO		; NACTI A ODESLI JMENO SOUBORU
	CALL	PARAM		; NACTI PARAMETRY
	CALL	OPARAM		; A ODESLIJE
	CALL	OLF		; ODESLE LF
	LDA	NAMBUF		; NACTI TYP PRENOSU
	ORA	A
	JZ	VYS2		; JE-LI 0 TAK TXT (30H - 3FH), JINAK BIN
VYS1:	MOV	A,M		; NACTI DATA
	CALL	DOUT3		; ADESLI JE
	CALL	HILO
	JNC	VYS1		; POKUT NENI KONC TAK DALSI
	JMP	TRANS		; DOTAZ NA KONEC PRENOSU
;
VYS2:	MOV	A,M		; NACTI DATA
	MOV	B,A		; ACHOV DO <B>
	CALL	VYS3		; PREVOD
	MOV	A,B		; OBNOV DATA
	RRC
	RRC
	RRC
	RRC			; ROTACE O 4 DITI V PRAVO
	CALL	VYS3		; PREVOD
	CALL	HILO
	JNC	VYS2		; POKUT NENI KONC TAK DALSI
	JMP	TRANS		; DOTAZ NA KONEC PRENOSU
;
VYS3:	ANI	0FH		; JEN SPODNI 4 BITI
	ADI	30H		; PRICTI 30H TJ. 0
	CALL	DOUT1		; ODESLI DATA
	RET
;NACTE PARAMETRY PRO PRENOS
;POCATEK DAT <HL>
;KONEC DAT <DE>
;KAM UKLADAT PRI CTENI <BC>
PARAM:	MVI	C,3		; BUDOU 3 PARAMETRY
	CALL	EXPR		; NACTI JE
	POP	B		; KAM UKLADAT PRI CTENI
	POP	D		; KONEC DAT
	POP	H		; POCATEK DAT
	RET
;
;MRTVY KOD
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
	STA	NAMBUF		; 15DD  32 03 41	2.A
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;
;
;NASTAVI SERIOVOU LINKU
NSL:	XRA	A		; RS 232C, DTR A RTS NEAKTIVNI
	OUT	WMC		; RIZENI MODEMU
	MVI	A,00001101B	; 8 BITU, 1 STOP BIT, BEZ PATITY
	OUT	CRL		; RIZENI UARTU
	IN	ROD		; PRIJMUTA DATA
	RET
;
;ODESLE PARATRY Z REBISTRU <BC>, <DE> A <HL>
;POCATEK DAT <HL>
;KONEC DAT <DE>
;KAM UKLADAT PRI CTENI <BC>
OPARAM:	MOV	A,C
	PUSH	B
	CALL	DOUT
	POP	B
	MOV	A,B
	CALL	DOUT
	MOV	A,E
	CALL	DOUT
	MOV	A,D
	CALL	DOUT
	MOV	A,L
	CALL	DOUT
	MOV	A,H
	CALL	DOUT
	MOV	A,B
	RET
;
OLF:	MVI	A,LF		; DO <A> LF
	CALL	DOUT		; A ODESLI
	RET
;
;MRTVY KOD
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
	PUSH	H		; 160C  E5		E
	MOV	C,M		; 160D  4E		N
	INX	H		; 160E  23		#
	MOV	B,M		; 160F  46		F
	INX	H		; 1610  23		#
	MOV	E,M		; 1611  5E		^
	INX	H		; 1612  23		#
	MOV	D,M		; 1613  56		V
	PUSH	B		; 1614  C5		E
X1615:	POP	B		; 1615  C1		A
	MOV	A,B		; 1616  78		X
	ORA	C		; 1617  B1		1
	JZ	X1625		; 1618  CA 25 16	J%.
	DCX	B		; 161B  0B		.
	PUSH	B		; 161C  C5		E
	LDAX	D		; 161D  1A		.
	CALL	DOUT		; 161E  CD 25 15	M%.
	INX	D		; 1621  13		.
	JMP	X1615		; 1622  C3 15 16	C..
;
X1625:	CALL	OLF		; 1625  CD 06 16	M..
	POP	H		; 1628  E1		A
	RET			; 1629  C9		I
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;
;
PRIJ:	CALL	TX		; ZOBRAZ TEXT
	DB	'<<','<'+80H
	CALL	VZJMEN		; VYZVA K ZADANI JMENA SUBORU
	CALL	NSL		; NASTAV SERIOVOU LINKY
	MVI	A,4		; EOT
	CALL	DOUT		; ODESLI DATA
	CALL	JMENO		; NACTI A ODESLI JMENO SOUBORU
	CALL	CADR		; NACTI ADRESY
	LDA	NAMBUF		; NACTI TYP PRENOSU
	ORA	A
	JZ	PRIJ2		; JE-LI 0 TAK TXT (30H - 3FH), JINAK BIN
PRIJ1:	PUSH	B		; SCHOV ADRESU
	CALL	DIN3		; NACTI DATA
	POP	B		; OBNOV ADRESU
	STAX	B		; ULOZ DATA
	INX	B		; ADRESA +1
	CALL	HILO
	JNC	PRIJ1		; POKUT NENI VSE TAK DALSI
	JMP	TRANS		; DOTAZ NA KONEC PRENOSU
;
PRIJ2:	PUSH	B		; SCHOV ADRESU
	CALL	DIN1		; NACTI DATA
	ANI	0FH		; JEN SODNI 4 BITI
	MOV	B,A		; ODLOZ DO <B>
	CALL	DIN1		; NACTI DATA
	RLC
	RLC
	RLC
	RLC			; ROTACE O 4 BITI V LEVO
	ANI	0F0H		; JEN HORNI 4 BITI
	ADD	B		; SECTI <B> S <A>
	POP	B		; OBNOV ADRESU
	STAX	B		; ULOZ
	INX	B		; ADRESA +1
	CALL	HILO
	JNC	PRIJ2		; POKUT NENI KONEC TAK DALSI
	JMP	TRANS		; DOTAZ NA KONEC PRENOSU
;
;NACTE ADRESY
;POCATEK DAT <HL>
;KONEC DAT <DE>
;KAM UKLADAT PRI CTENI <BC>
CADR:	CALL	DIN
	CPI	0
	JNZ	CADR		; POKUT 0 TAK ZNOVU
	MOV	L,A
	CALL	DIN
	MOV	H,A
	PUSH	H
	CALL	DIN
	MOV	E,A
	CALL	DIN
	MOV	D,A
	CALL	DIN
	MOV	L,A
	CALL	DIN
	MOV	H,A
	POP	B
	RET
;
;
JMENO:	MVI	B,0AH		; 10 ZNAKU PRO JMENO
	LXI	H,NAMBUF+1	; POCATEK BUFRU PRO JMENO SOUBORU
	PUSH	H		; SCHOV ADRESU
	CALL	VSTXT		; ZADAJ JMENO
	MVI	M,0AH		; ULOZ NA KONEC TEXTU LF
	XCHG			; DOHOD <DE> A <HL>
	POP	H		; OBNOV ADRESU POCATKU BUFFERU
JMENO1:	MOV	A,M		; NACTI DATA
	CALL	DOUT		; A ODESLI JE
	CALL	HILO
	JNC	JMENO1		; POKUT NENI KONEC TAK DALSI
	RET
;
TRANS:	CALL	TX		; ZOBRAZ TEXT
	DB	'TRANSFER DONE',CR,LF
	DB	'REPEAT(Y/N)','?'+80H
	CALL	CINCR		; ECHO+ANALYZA
	CPI	'Y'
	JZ	VYBER4
	JMP	NEXT		; NAVRAT DO MONITORU
;
KONEC:	MVI	A,0FFH		; FF - KONEN PRENOSU ??
	CALL	DOUT		; ODESLI DATA
	JMP	NEXT		; NAVRAT DO MONITORU
;
;SPOZDOVACI SMICKA
;T=(24*<BC>)+29US = 6149US 
WAIT:	PUSH	B		; 11 SCHOV <BC>
	LXI	B,00FFH		; 10 255 CIKLU
WAIT1:	DCX	B		; 5
	MOV	A,B		; 5
	ORA	C		; 4
	JNZ	WAIT1		; 10
	POP	B		; 10 OBNOV <BC>
	RET			; 10+17
;
;VSTUP TEXTU
;V <HL> JE 4104H, V <B> JE 0AH
;
VSTXT:	MOV	E,L		; SCHOV ADRESU
VSTXT1:	MVI	M,' '		; ULOZ MEZERU
	CALL	CI@		; "103H" VSTUP Z CONSOLI
	ANI	7FH		; JEN SPODNICH 7 BITU
	CPI	3		; JE-LI EXT "KONEC TEXTU"
	JZ	NEXT		; NAVRAT DO MONITORU
	CPI	CR		; JE-LI KONEC RADKU
	JZ	VSTXT4		; 2X CRLF A NAVRAT
	CPI	7FH		; DEL
	JZ	VSTXT2		; JE-LI
	CPI	BS		; ZNAK ZPET
	JNZ	VSTXT3		; MAME NORMALNI ZNAK
VSTXT2:	MOV	A,E		; ADRESU DO <A>
	CMP	L		; SROVNEJ SE SKUTECNOU
	JZ	VSTXT1		; POKUT SHODA TAK DALSI ZNAK
	DCX	H		; ADRESA -1
	INR	B		; POCITADLO +1
	CALL	TX		; ZOBRAZ TEXT
	DB	BS,' ',BS+80H	; SMAZ ZNAK
	JMP	VSTXT1		; DALSI ZNAK
;
VSTXT3:	MOV	M,A		; ULOZ ZNAK
	INX	H		; DALSI ADRESA
	CALL	COA@@		; ZOBRAZ ZNAK
	DCR	B		; POCITADLO -1
	JNZ	VSTXT1		; POKUT NENI 0 TAK DALSI ZNAK
VSTXT4:	CALL	CRLF		; ODRADKUJ
	JMP	CRLF		; ODRADKUJ
;
	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 / Program pro přenos dat po RS232C s "podáním ruky"



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