]> cloudbase.mooo.com Git - z180-stamp-cpm3.git/blame - cbios/conbuf.180
Initial commit
[z180-stamp-cpm3.git] / cbios / conbuf.180
CommitLineData
ea5293bb
L
1 page 255\r
2 .z80\r
3\r
4;\r
5; FIFO channels for communication with avr\r
6;\r
7 global ff.init,ff.in,ff.ist,ff.out,ff.ost\r
8\r
9 extrn bufinit,fifolst\r
10\r
11 include config.inc\r
12 if CPU_Z180\r
13 include z180reg.inc\r
14 endif\r
15\r
16\r
17 cseg\r
18\r
19 mkbuf co.fifo_id, co.fifo, co.fifo_len\r
20 mkbuf ci.fifo_id, ci.fifo, ci.fifo_len\r
21\r
22ico equ co.fifo_id * 3\r
23ici equ ci.fifo_id * 3\r
24\r
25\r
26;--------------------------------------------------------------\r
27\r
28; Init Serial I/O for console input and output\r
29;\r
30\r
31ff.init:\r
32 ld a,(INIDONE)\r
33 cp INIDONEVAL\r
34 ret z\r
35\r
36 ld ix,ci.fifo\r
37 ld a,ci.fifo.mask\r
38 call bufinit\r
39 ld ix,co.fifo\r
40 ld a,co.fifo.mask\r
41 jp bufinit\r
42\r
43;--------------------------------------------------------------\r
44\r
45ff.ist:\r
46 push ix\r
47 ld ix,(fifolst+ici) ;\r
48\r
49buf.empty:\r
50 ld a,(ix+o.in_idx) ;\r
51 sub (ix+o.out_idx) ;\r
52 pop ix\r
53 ret z\r
54 or 0ffh\r
55 ret\r
56\r
57\r
58ff.in:\r
59 push ix\r
60 ld ix,(fifolst+ici) ;\r
61\r
62buf.get:\r
63 ld a,(ix+o.out_idx) ;\r
64bg.wait:\r
65 cp (ix+o.in_idx) ;\r
66 jr z,bg.wait\r
67\r
68 push hl ;\r
69 push ix\r
70 pop hl\r
71 add a,l\r
72 ld l,a\r
73 jr nc,bg.nc\r
74 inc h\r
75bg.nc:\r
76 ld l,(hl)\r
77\r
78 ld a,(ix+o.out_idx) ;\r
79 inc a\r
80 and (ix+o.mask)\r
81 ld (ix+o.out_idx),a\r
82\r
83 ld a,l\r
84 pop hl\r
85 pop ix\r
86 ret\r
87\r
88;--------------------------------------------------------------\r
89\r
90ff.ost:\r
91 push ix\r
92 ld ix,(fifolst+ico) ;\r
93\r
94buf.full:\r
95 ld a,(ix+o.in_idx) ;\r
96 inc a\r
97 and (ix+o.mask)\r
98 sub (ix+o.out_idx) ;\r
99 pop ix\r
100 ret z\r
101 or 0ffh\r
102 ret\r
103\r
104\r
105 if 1\r
106ff.out:\r
107 push ix ;15\r
108 ld ix,(fifolst+ico) ;\r
109\r
110buf.put:\r
111 push hl ;11\r
112 push bc ;11\r
113 push ix ;15\r
114 pop hl ;10\r
115 ld a,c ;4\r
116 ld c,(ix+o.in_idx) ;19\r
117 ld b,0 ;7\r
118 add hl,bc ;11\r
119 ld (hl),a ;7\r
120 ld b,a ;4\r
121\r
122 ld a,c ;4\r
123 inc a ;4\r
124 and (ix+o.mask) ;19\r
125bp.wait:\r
126 cp (ix+o.out_idx) ;19\r
127 jr z,bp.wait ;12/7\r
128 ld (ix+o.in_idx),a ;19\r
129\r
130 out (AVRINT6),a ;11\r
131 ld a,b ;4\r
132 pop bc ;10\r
133 pop hl ;10\r
134 pop ix ;14\r
135 ret ;10\r
136\r
137 else\r
138\r
139ff.out:\r
140 push ix ;15\r
141 ld ix,co.fifo ;14\r
142\r
143buf.put:\r
144 push hl ;11\r
145 push ix ;15\r
146 pop hl ;10\r
147 ld a,(ix+o.in_idx) ;19\r
148 add a,l ;4\r
149 ld l,a ;4\r
150 jr nc,bp.1 ;12/7\r
151 inc l ;4\r
152 ld (hl),c ;7\r
153 ld a,(ix+o.in_idx) ;19\r
154 inc a ;4\r
155 and (ix+o.mask) ;19\r
156bp.wait:\r
157 cp (ix+o.out_idx) ;19\r
158 jr z,bp.wait ;12/7\r
159 ld (ix+o.in_idx),a ;19\r
160\r
161 out (AVRINT6),a ;11\r
162 ld a,c ;4\r
163 pop hl ;10\r
164 pop ix ;14\r
165 ret ;10 |\r
166\r
167 endif\r
168\r
169;--------------------------------------------------------------\r
170\r
171 end\r