;============================================================================
;
;	PROGRAMMA BRIDGE - FA DA PONTE TRA LA LINEA HOST E LA CZ-92
;	PRINCIPALE DI OPT
;
;	ESEGUE L'ECO SIMULTANEO DI DUE CANALI SERIALI
;
;	VERS. 1.0 3/93 - COPYRIGHT LOGITRON LPD
;
;	BY ING. G.BECATTINI - FIRENZE
;
;============================================================================

	CSEG

;----------------------------------------------------------------------------
;	PARAMETRI MODIFICABILI IN FASE DI ASSEMBLAGGIO
;----------------------------------------------------------------------------
BUFLEN	EQU	20		;LUNGHEZZA DEI BUFFERS DI RICEZIONE

;----------------------------------------------------------------------------
;	INDIRIZZI DEL SISTEMA OPT
;----------------------------------------------------------------------------
CTC0	EQU	10H		;0 BRG SIOA
CTC1	EQU	CTC0+1		;1 BRG SIOB

SIOAD	EQU	18H		;PORTA A RIVOLTA VERSO LA LINEA 'HOST'
SIOAC	EQU	SIOAD+1
SIOBD	EQU	SIOAD+2		;PORTA B RIVOLTA VERSO CPU SLAVE
SIOBC	EQU	SIOAD+3

PIOAD	EQU	1CH
PIOAC	EQU	PIOAD+1
PIOBD	EQU	PIOAD+2
PIOBC	EQU	PIOAD+3

;---------------------------------------------------------------------------
;	INIZIALIZZAZIONI
;---------------------------------------------------------------------------


INIT:	LD	HL,0
	LD	DE,0
	LD	BC,300H
	LDIR

	LD	A,0FFH
	OUT	(PIOBC),A		;PIO B CONTROLLO
	LD	A,020H
	OUT	(PIOBC),A
	LD	A,90H			;NO AUTOKILL - MIRROR
	OUT	(PIOBD),A
	
	LD	SP,STK

	LD	A,.HIGH.TABVECS		;HIGH VECTAB 
	LD	I,A
	IM	2
	

	LD	A,0FFH
	OUT	(PIOAC),A		
	LD	A,0FFH			;TUTTA IN INPUT
	OUT	(PIOAC),A

	LD	C,1
	IN	A,(PIOAD)
	BIT	5,A
	JR	Z,BD192

	LD	C,2

BD192:	LD	A,7
	OUT	(CTC0),A
	
	LD	A,C
	OUT	(CTC0),A
	
	LD	A,7
	OUT	(CTC1),A
	
	LD	A,C
	OUT	(CTC1),A
		
	LD	HL,TABSIO
	LD	C,SIOAC
	LD	B,10
	OTIR

	LD	HL,TABSIO
	LD	C,SIOBC
	LD	B,10
	OTIR

	LD	A,2
	OUT	(SIOBC),A
	
	LD	A,.LOW.TABVECS
	OUT	(SIOBC),A

	EI

LOOP:	JR	LOOP

;---------------------------------------------------------------------------
;	TXA - INVIA UN CARATTERE SUL CANALE A 
;---------------------------------------------------------------------------
TXA:	PUSH    AF
TXA1:	IN	A,(SIOAC)
	BIT	2,A		;TX VUOTO?
	JR	Z,TXA1
        POP     AF
	OUT	(SIOAD),A
	RET

;---------------------------------------------------------------------------
;	TXB - INVIA UN CARATTERE SUL CANALE B 
;---------------------------------------------------------------------------
TXB:	PUSH    AF
TXB1:	IN	A,(SIOBC)
	BIT	2,A		;TX VUOTO?
	JR	Z,TXB1
        POP     AF
	OUT	(SIOBD),A
	RET


;---------------------------------------------------------------------------
;	SERVIZIO INTERRUPT RICEZIONE CARATTERE
;---------------------------------------------------------------------------

ISRRXA:	EX	AF,AF'		;SCAMBIA I REGISTRI
	EXX

	IN	A,(SIOAD)
	CALL	TXB

	EXX
	EX	AF,AF'
	EI
	RETI

;---------------------------------------------------------------------------
;	SERVIZIO INTERRUPT RICEZIONE CARATTERE
;---------------------------------------------------------------------------

ISRRXB:	EX	AF,AF'		;SCAMBIA I REGISTRI
	EXX

	IN	A,(SIOBD)
	CALL	TXA

	EXX
	EX	AF,AF'
	EI
	RETI

;---------------------------------------------------------------------------
;	RICEZIONE CARATTERE IN CASO DI ERRORE (SERVIZIO INTERRUPT)
;---------------------------------------------------------------------------

ISRSPA:	EX	AF,AF'		;IN CASO DI ERRORE
	LD	A,30H		;ERROR RESET
	OUT	(SIOAC),A
	EX	AF,AF'
	EI
	RETI


;---------------------------------------------------------------------------
;	RICEZIONE CARATTERE IN CASO DI ERRORE (SERVIZIO INTERRUPT)
;---------------------------------------------------------------------------

ISRSPB:	EX	AF,AF'		;IN CASO DI ERRORE
	LD	A,30H		;ERROR RESET
	OUT	(SIOBC),A
	EX	AF,AF'
	EI
	RETI


ISRTXA:
ISRSTA:

ISRTXB:
ISRSTB:
	EI
	RETI
	
;---------------------------------------------------------------------------
;	TABELLE E VETTORI
;---------------------------------------------------------------------------

TABSIO:	DB	18H,10H		;RESET
	
	DB	4,45H		;CLOCK X 16 - NO SYNC - 1 STOP BIT
				;PARITY ODD
	DB	3,041H		;RX ENABLE - 7 BIT CHAR

	DB	5,2AH		;7 BIT CHAR - TX ENABLE - RTS

;	DB	10H		;RESET EXT/STATUS INT

	DB	1,14H		;INT ON ALL RX CHARS - PARITY 
				;AFFECTS VECTOR - NO INT ON TX
				
	ORG	200H
	
TABVECS:DW	ISRTXB
	DW	ISRSTB
	DW	ISRRXB
	DW	ISRSPB

	DW	ISRTXA
	DW	ISRSTA
	DW	ISRRXA
	DW	ISRSPA

	DSEG
	
STK0:	DS	100
STK:



