summaryrefslogtreecommitdiff
path: root/z180/chario.180
blob: 4d37b89a2310afe888d7604e932bbd94bdcdb226 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
	page	255
	.z80


;	CP/M 3	compatible character i/o

	public	?cinit,?ci,?co,?cist,?cost
	public	@ctbl

	extrn	ff.init,ff.i.st,ff.in,ff.o.st,ff.out
	extrn	as0init,as0ista,as0inp,as0osta,as0out
	extrn	as1init,as1ista,as1inp,as1osta,as1out

	include config.inc
	include	z180reg.inc
	include modebaud.inc	; define mode bits and baud eqautes


max$device	equ 3

	cseg

; c = device

?cinit:				; init devices
	ld	b,c
	call	vector$io
	dw	ff.init
	dw	as0init
	dw	as1init
	dw	rret

; b = device, c = output char, a = input char

?ci:				; character input
	call	vector$io
	dw	ff.in
	dw	as0inp
	dw	as1inp
	dw	null$input

?cist:				; character input status
	call	vector$io
	dw	ff.i.st
	dw	as0ista
	dw	as1ista
	dw	null$status

?co:				; character output
	call	vector$io
	dw	ff.out
	dw	as0out
	dw	as1out
	dw	rret

?cost:				; character output status
	call	vector$io
	dw	ff.o.st
	dw	as0osta
	dw	as1osta
	dw	ret$true

vector$io:
	ld	a,max$device
	ld	e,b
vector:
	pop	hl
	ld	d,0
	cp	e
	jr	nc,exist
	ld	e,a		; use null device if a >= max$device
exist:	add	hl,de
	add	hl,de
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
	jp	(hl)


null$input:
	ld	a,1Ah
rret:
	ret
ret$true:
	or	0FFh
	ret

null$status:
	xor	a
	ret

;--------------------------------------------------------------


@ctbl:
	db	'HOST  '	; device 0
	db	mb$in$out
	db	baud$none

	db	'ASCI0 '	; device 1
	db	mb$in$out+mb$serial+mb$soft$baud
ser0$baud:
	db	baud$19200

	db	'ASCI1 '	; device 2
	db	mb$in$out+mb$serial+mb$soft$baud
ser1$baud:
	db	baud$19200

	db	0		; table terminator

	end