;==============================================================================
; SIF SETUP - serial port parameters
;==============================================================================
;
; call RANDOMIZE USR 1294
;

		cpu	z80undoc
		phase	1294

;------------------------------------------------------------------------------
; 0x50E - původně zde byla umístěno SA-PARITY

SIF_BASE	equ	131			; SIF base port
SIF_BPS		equ	115200

S_UART		equ	0			; select 16C550
						; 0 = first
						; 2 = second

S_STOPB		equ	1			; possible values 0, 1, 2

S_PARITY	equ	8+16			; +8 = enable (+0 = disable)
						; +16 = even (+0 = odd)

S_CRTSCTS	equ	11000000b		; possible values 0, disable HW flow control
						; 11000000b = enable HW flow control

S_IR		equ	0			; 01001000b = enable, but 1 only when HW isn't enabled
						; 0 = IRDA disable

; S_BPSDIV	dw	460800/SIF_BPS		; 460800/230400 = 2
; 						; 460800/115200 = 4
; 						; 460800/57600 = 8
; 						; 460800/38400 = 12
; 						; 460800/19200 = 24
; 						; 460800/9600 = 48
; 						; 460800/4800 = 96
; 						; 460800/2400 = 192
; 						; 460800/1200 = 384
; 						; 460800/600 = 768
; 						; 460800/300 = 1536
; 						; 460800/150 = 3072

S_BPSDIV_H	equ	0
S_BPSDIV_L	equ	4

;==============================================================================

SIF_INIT	ld	a,S_UART		; if (S_UART == 1) a=0; else a=2;
		out	(SIF_BASE+28),a		; UART

		xor	a			; prepare LCR
		or	S_PARITY
		or	3			; 8 bit (6 or 7 bits are not allowed)
		ld	c,a			; and store LCR to C
		out	(SIF_BASE+12),a		; LCR

		ld	a,00011111b		; FCR
		out	(SIF_BASE+8),a

		ld	a,S_IR
		out	(SIF_BASE+16),a		; MCR

		ld	a,c			; before baud rate will set, copy LCR to A
		or	128
		out	(SIF_BASE+12),a		; LCR

		ld	a,S_BPSDIV_L		; BPS divider, low byte
		out	(SIF_BASE),a
		ld	a,S_BPSDIV_H		; BPS divider, high byte
		out	(SIF_BASE+4),a

		ld	a,191
		out	(SIF_BASE+12),a		; LCR

		ld	a,S_CRTSCTS
		out	(SIF_BASE+8),a		; EFR

		ld	a,c
		out	(SIF_BASE+12),a		; LCR

		ld	a,00000001b
		out	(SIF_BASE+4),a		; IER
		ret

		dephase

;------------------------------------------------------------------------------
; končí na 0x053E (nezbývá žádné volné místo)
;------------------------------------------------------------------------------
; 0x053F	nesmí být přepsáno