]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blob - cbios/chario.180
add ioctl data
[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,?ci,?co,?cist,?cost
8 public @ctbl
9
10 extrn ff_dev
11 extrn as0_dev,as1_dev
12 extrn _b0call
13
14 include config.inc
15 include z180reg.inc
16
17 include 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_INITF 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 b0call _cinit
75 ret
76
77 dseg
78 _cinit:
79 ld b,c
80 ld hl,O_INITF
81 ld c,0 ;
82 jr vector_io
83
84 ;--------------------------------------------------------------
85 ; Character input
86 ; b: device
87 ; return:
88 ; a: input char
89
90 cseg
91 ?ci: ; character input
92 b0call _ci
93 ret
94
95 dseg
96 _ci:
97 ld hl,O_CIF
98 jr vector_io
99
100 ;--------------------------------------------------------------
101 ; Input status
102 ; b: device
103 ; return:
104 ; a: 0ffh if char available, else 0
105
106 cseg
107 ?cist: ; character input
108 b0call _cist
109 ret
110
111 dseg
112 _cist: ; character input status
113 ld hl,O_CISTF
114 jr vector_io
115
116 ;--------------------------------------------------------------
117 ; Character output
118 ; b: device
119 ; c: output char
120 ; return:
121 ; a: output char
122
123 cseg
124 ?co: ; character input
125 b0call _co
126 ret
127
128 dseg
129 _co: ; character output
130 ld hl,O_COF
131 jr vector_io
132
133
134 ;--------------------------------------------------------------
135 ; Output status
136 ; b: device
137 ; return:
138 ; a: 0ffh if device ready for next output char, else 0
139
140
141 cseg
142 ?cost: ; character input
143 b0call _cost
144 ret
145
146 dseg
147 _cost: ; character output status
148 ld hl,O_COSTF
149 jr vector_io
150
151 ;--------------------------------------------------------------
152 ;
153 ; hl: function table index (offset)
154 ; b: device
155 ; c: output char or ioctl #
156 ; de: ioctl arg pointer
157 ;
158 ; Calls funtion xctbl[offset] with
159 ; b,c,de unchanged and hl = ptr to drivers local data
160
161 dseg
162 vector_io:
163 push de ;save arg ptr 11
164 ex de,hl ; 3
165 ;
166 ld a,max$devices ; 6
167 cp b ; 4
168 jr c,$+3 ; (6/8)
169 ld a,b ; (4)10/8
170 add a,a ; 4
171 ld hl,xctbl ; 9
172 add a,l ; 4
173 ld l,a ; 4
174 jr nc,$+3 ; (6/8)
175 inc h ; (4) 10/8
176 ld a,(hl) ; 6
177 inc hl ; 4
178 ld h,(hl) ; 6
179 ld l,a ; 4
180 ex de,hl ; 3
181 add hl,de ; 7
182 ld a,(hl) ; 6
183 inc hl ; 4
184 ld h,(hl) ; 6
185 ld l,a ; 4
186 ex (sp),hl ; 16
187 ex de,hl ; 3
188 ret ; 9 143
189
190 ;--------------------------------------------------------------
191
192 if 0
193
194 vector_io:
195 push de ;11
196 push hl ;11
197 ;
198 ld hl,xctbl ;9 -
199 ld de,max$devices ;9
200 ld a,b ;4
201 cp e ;4
202 jr nc,$+3 ;(6/8)
203 ld e,a ;(4) 10/8
204 add hl,de ;7
205 add hl,de ;7
206 ld e,(hl) ;6
207 inc hl ;4
208 ld d,(hl) ;6
209 pop hl ;9
210 add hl,de ;7
211 ld a,(hl) ;6
212 inc hl ;4
213 ld h,(hl) ;6
214 ld l,a ;4
215 ex (sp),hl ;16
216 ex de,hl ;3
217 ret ;9 148
218
219 endif
220
221 ;--------------------------------------------------------------
222
223 null$input:
224 ld a,1Ah
225 rret:
226 ret
227 ret$true:
228 or 0FFh
229 ret
230
231 null$status:
232 xor a
233 ret
234
235 end