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