]>
Commit | Line | Data |
---|---|---|
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 | |
41 | O_COF equ -10\r | |
42 | O_COSTF equ -8\r | |
43 | O_CIF equ -6\r | |
44 | O_CISTF equ -4\r | |
1c7e3963 | 45 | O_IOCTLF equ -2\r |
12f14a43 L |
46 | \r |
47 | dseg\r | |
48 | xctbl:\r | |
49 | dw ff_dev\r | |
50 | dw as0_dev\r | |
51 | dw as1_dev\r | |
6dd88c25 L |
52 | max$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 | 65 | null_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 | |
76 | ioctl:\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 | 163 | vector_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 | |
195 | vector_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 |
224 | null$input:\r | |
225 | ld a,1Ah\r | |
226 | rret:\r | |
227 | ret\r | |
228 | ret$true:\r | |
229 | or 0FFh\r | |
230 | ret\r | |
231 | \r | |
232 | null$status:\r | |
233 | xor a\r | |
234 | ret\r | |
235 | \r | |
ea5293bb | 236 | end\r |