]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blob - cbios/chario.180
include --> maclib
[z180-stamp-cpm3.git] / cbios / chario.180
1 title 'Character I/O Module for the Modular CP/M 3 BIOS'
2 page 255
3 .z80
4
5
6
7 public ?cinit,ioctl,?ci,?co,?cist,?cost
8 public @ctbl
9
10 extrn ff_dev
11 extrn as0_dev,as1_dev
12 extrn _b0call
13
14 maclib z180reg.inc
15 maclib config.inc
16
17 maclib modebaud.inc ; define mode bits and baud equates
18
19
20
21 ;--------------------------------------------------------------
22
23 cseg
24 @ctbl:
25 db 'USB0 ' ; device 0
26 db mb$in$out
27 db baud$none
28
29 db 'ASCI0 ' ; device 1
30 db mb$in$out+mb$serial+mb$soft$baud
31 db baud$19200
32
33 db 'ASCI1 ' ; device 2
34 db mb$in$out+mb$serial+mb$soft$baud
35 db baud$19200
36
37 db 0 ; table terminator
38
39 ;--------------------------------------------------------------
40
41 O_COF equ -10
42 O_COSTF equ -8
43 O_CIF equ -6
44 O_CISTF equ -4
45 O_IOCTLF equ -2
46
47 dseg
48 xctbl:
49 dw ff_dev
50 dw as0_dev
51 dw as1_dev
52 max$devices equ ($-xctbl)/2
53 dw null_dev ;todo:
54 rept 16 - max$devices
55 dw 0
56 endm
57
58 ;--------------------------------------------------------------
59
60 dw rret
61 dw ret$true
62 dw null$input
63 dw null$status
64 dw rret
65 null_dev:
66
67
68 ;--------------------------------------------------------------
69 ; Init character device
70 ; c: device
71
72 cseg
73 ?cinit: ; init devices
74 ld b,c
75 ld c,0 ;
76 ioctl:
77 b0call _ioctl
78 ret
79
80 dseg
81 _ioctl:
82 ld hl,O_IOCTLF
83 jr vector_io
84
85 ;--------------------------------------------------------------
86 ; Character input
87 ; b: device
88 ; return:
89 ; a: input char
90
91 cseg
92 ?ci: ; character input
93 b0call _ci
94 ret
95
96 dseg
97 _ci:
98 ld hl,O_CIF
99 jr vector_io
100
101 ;--------------------------------------------------------------
102 ; Input status
103 ; b: device
104 ; return:
105 ; a: 0ffh if char available, else 0
106
107 cseg
108 ?cist: ; character input
109 b0call _cist
110 ret
111
112 dseg
113 _cist: ; character input status
114 ld hl,O_CISTF
115 jr vector_io
116
117 ;--------------------------------------------------------------
118 ; Character output
119 ; b: device
120 ; c: output char
121 ; return:
122 ; a: output char
123
124 cseg
125 ?co: ; character input
126 b0call _co
127 ret
128
129 dseg
130 _co: ; character output
131 ld hl,O_COF
132 jr vector_io
133
134
135 ;--------------------------------------------------------------
136 ; Output status
137 ; b: device
138 ; return:
139 ; a: 0ffh if device ready for next output char, else 0
140
141
142 cseg
143 ?cost: ; character input
144 b0call _cost
145 ret
146
147 dseg
148 _cost: ; character output status
149 ld hl,O_COSTF
150 jr vector_io
151
152 ;--------------------------------------------------------------
153 ;
154 ; hl: function table index (offset)
155 ; b: device
156 ; c: output char or ioctl #
157 ; de: ioctl arg pointer
158 ;
159 ; Calls funtion xctbl[offset] with
160 ; b,c,de unchanged and hl = ptr to drivers local data
161
162 dseg
163 vector_io:
164 push de ;save arg ptr 11
165 ex de,hl ; 3
166 ;
167 ld a,max$devices ; 6
168 cp b ; 4
169 jr c,$+3 ; (6/8)
170 ld a,b ; (4)10/8
171 add a,a ; 4
172 ld hl,xctbl ; 9
173 add a,l ; 4
174 ld l,a ; 4
175 jr nc,$+3 ; (6/8)
176 inc h ; (4) 10/8
177 ld a,(hl) ; 6
178 inc hl ; 4
179 ld h,(hl) ; 6
180 ld l,a ; 4
181 ex de,hl ; 3
182 add hl,de ; 7
183 ld a,(hl) ; 6
184 inc hl ; 4
185 ld h,(hl) ; 6
186 ld l,a ; 4
187 ex (sp),hl ; 16
188 ex de,hl ; 3
189 ret ; 9 143
190
191 ;--------------------------------------------------------------
192
193 if 0
194
195 vector_io:
196 push de ;11
197 push hl ;11
198 ;
199 ld hl,xctbl ;9 -
200 ld de,max$devices ;9
201 ld a,b ;4
202 cp e ;4
203 jr nc,$+3 ;(6/8)
204 ld e,a ;(4) 10/8
205 add hl,de ;7
206 add hl,de ;7
207 ld e,(hl) ;6
208 inc hl ;4
209 ld d,(hl) ;6
210 pop hl ;9
211 add hl,de ;7
212 ld a,(hl) ;6
213 inc hl ;4
214 ld h,(hl) ;6
215 ld l,a ;4
216 ex (sp),hl ;16
217 ex de,hl ;3
218 ret ;9 148
219
220 endif
221
222 ;--------------------------------------------------------------
223
224 null$input:
225 ld a,1Ah
226 rret:
227 ret
228 ret$true:
229 or 0FFh
230 ret
231
232 null$status:
233 xor a
234 ret
235
236 end