;*********************************************************
; NAMN		:	TRANSMIT CHARACTER
; PROGRAMMERARE	:	L-O/IND
; DATUM		:	86-10-14
; MODIFIERAD	:	
;*********************************************************
;
; SYFTE		:	Skicka tecken fr}n tx-buffert
;
; ANROPAS FR]N	:	enable, trmirq
;
; SUBRUTINER	:	-
;
;*********************************************************
;
	FORMLN	42
	NAME	TRMCHR

	INCLUDE	TMC.H
;
; VARIABLER:
;
	EXTERN	TXBUFF, TXHEDP, TXTALP, TXSTAT, NCHRTX
	EXTERN	TXIRQS, XONFLG, XOFFLG
;
; LABLAR:
;
	INTERN	TRMCHR
;
	PAGE
;*********************************************************
;
; CASE "Tecken"
;     WHEN xofflg = TRUE
;         Skicka XOFF
;         Xofflg = FALSE
;     WHEN xonflg = TRUE
;         Skicka XON
;         Xonflg = FALSE
;     WHEN txstat = xoff
;         Disable txirq
;         Txirq-status = DISABL
;     WHEN bufferten inte {r tom
;         "SKICKA TECKEN"
;     OTHERWISE
;         Disable txirq
;         Txirq-status = DISABL
; END "Tecken"
;
;*********************************************************
;
	RSECT	PROM
;
TRMCHR:
	LD	A,(XOFFLG)	;
	CP	TRUE		; XOFF-flaggan satt?
	JP	NZ,SDXONQ	; Nej
	LD	A,XOFF		; Ja
	OUT	(SIOAD),A	; Skicka XOFF
	LD	HL,XOFFLG
	LD	(HL),FALSE
	JP	RETURN
SDXONQ:
	LD	A,(XONFLG)	;
	CP	TRUE		; XON-flaggan satt?
	JP	NZ,STATQ	; Nej
	LD	A,XON		; Ja
	OUT	(SIOAD),A	; Skicka XON
	LD	HL,XONFLG
	LD	(HL),FALSE
	JP	RETURN
STATQ:
	LD	A,(TXSTAT)	;
	CP	XOFF		; Txstat = XOFF?
	JP	NZ,CHARQ	; Nej
DTXIRQ:	
	LD	A,1		; Ja
	OUT	(SIOAC),A	; Disable txirq
	LD	A,00010100B	;
	OUT	(SIOAC),A	;
	LD	HL,TXIRQS	; Txirq-status = DISABL
	LD	(HL),DISABL	;
	JP	RETURN
CHARQ:
	LD	A,(NCHRTX)	;
	CP	0		; Finns det tecken att skicka?
	JP	Z,EMPTY		; Nej
;
	PAGE
;*********************************************************
;
;	SKICKA TECKEN
;	-------------
;
; H{mta tecken i svans
; Skicka tecknet till PC
; R{kna ner teckenr{knaren
; CASE "Adress"
;     WHEN svans = sista adressen
;         Svans = f|rsta adressen
;     OTHERWISE
;         Svans = n{sta adress
; END "Adress"
;
;*********************************************************
;
SENDCH:
	LD	HL,(TXTALP)	;
	LD	A,(HL)		; Ja, h{mta tkn fr}n TXBUFF
	OUT	(SIOAD),A	; Skicka till PC
;
	LD	HL,NCHRTX	;
	DEC	(HL)		; R{kna ned tknr{knare
;
	LD	HL,(TXTALP)	;
	INC	HL		;
	LD	BC,TXBUFF+BUFSIZ;
	LD	A,H		;
	CP	B		; Svans = sista adress i
	JP	NZ,NXTADR	; ringbuffert?
	LD	A,L		;
	CP	C		;
	JP	NZ,NXTADR
FSTADR:
	LD	HL,TXBUFF	; Ja, svans = f|rsta adress
	LD	(TXTALP),HL	;
	JP	RETURN
NXTADR:
	LD	(TXTALP),HL	; Nej, svans = n{sta adress
	JP	RETURN
EMPTY:
	LD	A,1		; Ja
	OUT	(SIOAC),A	; Disable txirq
	LD	A,00010100B	;
	OUT	(SIOAC),A	;
	LD	HL,TXIRQS	; Txirq-status = DISABL
	LD	(HL),DISABL	;
RETURN:
	RET
;
	END
