;
;=======================================================================
; HDIAG ACIA Driver
;=======================================================================
;
acia_cmd	.equ	$80
acia_dat	.equ	$81
;
;
;
acia_jptbl:
	jp	acia_cinit		; Initialize serial port
	jp	acia_cin		; Read byte
	jp	acia_cout		; Write byte
	jp	acia_cist		; Input status
	jp	acia_cost		; Output Status
;
;
;
acia_cinit:
	; Detect ACIA
	ld	a,$03			; master reset
	out	(acia_cmd),a		; apply it
	in	a,(acia_cmd)		; get status
	or	a			; check for zero (expected)
	ret	nz			; abort if not
	ld	a,$02			; clear master reset
	out	(acia_cmd),a		; apply it
	in	a,(acia_cmd)		; get status again
	and	%00001110		; isolate reliable bits
	cp	%00000010		; check for expected value
	ret	nz			; abort if not
	; Initialize ACIA
	ld	a,%00010110             ; default config
	out	(acia_cmd),a		; apply it
	xor	a			; signal success
	ret
;
;
;
acia_cin:
	call	acia_cist		; check for char ready
	jr	z,acia_cin		; if not, loop
	in	a,(acia_dat)		; read byte
	ret				; done
;
;
;
acia_cout:
	push	af			; save incoming
acia_cout1:
	call	acia_cost		; ready for char?
	jr	z,acia_cout1		; loop if not
	pop	af			; restore incoming
	out	(acia_dat),a		; write byte
	ret				; and done
;
;
;
acia_cist:
	in	a,(acia_cmd)		; get status
	and	$01			; isolate rx ready
	ret				; done
;
;
;
acia_cost:
	in	a,(acia_cmd)		; get status
	and	$02			; isolate tx empty
	ret				; done
