]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blame - cbios/chario.180
put char-i/o in banked memory
[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
7 public ?cinit,?ci,?co,?cist,?cost\r
8 public @ctbl\r
9\r
10\r
11 extrn ff.init,ff.ist,ff.in,ff.ost,ff.out\r
12 extrn as0init,as0ista,as0inp,as0osta,as0out\r
13 extrn as1init,as1ista,as1inp,as1osta,as1out\r
50f3b8f0 14 extrn _b0call\r
ea5293bb
L
15\r
16 include config.inc\r
17 include z180reg.inc\r
18\r
19 include modebaud.inc ; define mode bits and baud equates\r
20\r
21max$devices equ 3\r
22\r
ea5293bb
L
23\r
24;--------------------------------------------------------------\r
25; Init character device\r
26; c: device\r
27\r
2a413c0d 28 cseg\r
ea5293bb 29?cinit: ; init devices\r
50f3b8f0
L
30 b0call _cinit\r
31 ret\r
32\r
33 dseg\r
34_cinit:\r
ea5293bb
L
35 ld b,c\r
36 call vector$io\r
37 dw ff.init\r
38 dw as0init\r
39 dw as1init\r
40 dw rret\r
41\r
50f3b8f0 42\r
ea5293bb
L
43;--------------------------------------------------------------\r
44; Character input\r
45; b: device\r
46; return:\r
47; a: input char\r
48\r
2a413c0d 49 cseg\r
ea5293bb 50?ci: ; character input\r
2a413c0d
L
51 b0call _ci\r
52 ret\r
53\r
54 dseg\r
55_ci:\r
ea5293bb
L
56 call vector$io\r
57 dw ff.in\r
58 dw as0inp\r
59 dw as1inp\r
60 dw null$input\r
61\r
62;--------------------------------------------------------------\r
63; Input status\r
64; b: device\r
65; return:\r
66; a: 0ffh if char available, else 0\r
67\r
2a413c0d
L
68 cseg\r
69?cist: ; character input\r
70 b0call _cist\r
71 ret\r
72\r
73 dseg\r
74_cist: ; character input status\r
ea5293bb
L
75 call vector$io\r
76 dw ff.ist\r
77 dw as0ista\r
78 dw as1ista\r
79 dw null$status\r
80\r
81;--------------------------------------------------------------\r
82; Character output\r
83; b: device\r
84; c: output char\r
85; return:\r
86; a: output char\r
87\r
2a413c0d
L
88 cseg\r
89?co: ; character input\r
90 b0call _co\r
91 ret\r
92\r
93 dseg\r
94_co: ; character output\r
ea5293bb
L
95 call vector$io\r
96 dw ff.out\r
97 dw as0out\r
98 dw as1out\r
99 dw rret\r
100\r
101\r
102;--------------------------------------------------------------\r
103; Output status\r
104; b: device\r
105; return:\r
106; a: 0ffh if device ready for next output char, else 0\r
107\r
108\r
2a413c0d
L
109 cseg\r
110?cost: ; character input\r
111 b0call _cost\r
112 ret\r
113\r
114 dseg\r
115_cost: ; character output status\r
ea5293bb
L
116 call vector$io\r
117 dw ff.ost\r
118 dw as0osta\r
119 dw as1osta\r
120 dw ret$true\r
121\r
122;--------------------------------------------------------------\r
123\r
2a413c0d 124 dseg\r
ea5293bb 125vector$io:\r
ea5293bb 126 pop hl\r
b43b4662 127 push de\r
f80331a6
L
128 ld de,max$devices ; default if\r
129 ld a,b ;\r
130 cp e ; b > max$devices\r
ea5293bb 131 jr nc,exist\r
f80331a6
L
132 ld e,a\r
133exist:\r
ea5293bb 134 add hl,de\r
f80331a6
L
135 add hl,de\r
136\r
137 ld e,(hl)\r
ea5293bb 138 inc hl\r
f80331a6
L
139 ld d,(hl)\r
140 ex de,hl\r
b43b4662 141 pop de\r
ea5293bb
L
142 jp (hl)\r
143\r
144\r
145null$input:\r
146 ld a,1Ah\r
147rret:\r
148 ret\r
149ret$true:\r
150 or 0FFh\r
151 ret\r
152\r
153null$status:\r
154 xor a\r
155 ret\r
156\r
157;--------------------------------------------------------------\r
158\r
2a413c0d 159 cseg\r
ea5293bb
L
160@ctbl:\r
161 db 'AVRCON' ; device 0\r
162 db mb$in$out\r
163 db baud$none\r
164\r
165 db 'ASCI0 ' ; device 1\r
166 db mb$in$out+mb$serial+mb$soft$baud\r
f80331a6 167 db baud$9600\r
ea5293bb
L
168\r
169 db 'ASCI1 ' ; device 2\r
170 db mb$in$out+mb$serial+mb$soft$baud\r
ea5293bb
L
171 db baud$19200\r
172\r
173 db 0 ; table terminator\r
174\r
ea5293bb
L
175\r
176 end\r