]> cloudbase.mooo.com Git - z180-stamp.git/blame - z180/msgbuf-a.180
Add unique id to fifos
[z180-stamp.git] / z180 / msgbuf-a.180
CommitLineData
6a4e9540
L
1 page 255\r
2 .z80\r
2fa1a706 3\r
6a4e9540
L
4 global mrx.fifo,mtx.fifo\r
5\r
6 global msginit,msgi.st,msg.in,msgo.st,msg.out\r
7 global msg.sout\r
2fa1a706 8\r
6a4e9540
L
9 extrn buf.init\r
10\r
11 include config.inc\r
64cc2207 12 if CPU_Z180\r
6a4e9540 13 include z180reg.inc\r
64cc2207 14 endif\r
6a4e9540
L
15\r
16;--------------------------------------------------------------\r
17\r
18 dseg\r
19\r
e4c4b148
L
20 mkbuf mtx.fifo_id, mtx.fifo, mtx.fifo_len\r
21 mkbuf mrx.fifo_id, mrx.fifo, mrx.fifo_len\r
6a4e9540
L
22\r
23;--------------------------------------------------------------\r
24\r
25 cseg\r
26\r
27;\r
28; Init buffer\r
29;\r
2fa1a706 30\r
6a4e9540
L
31msginit:\r
32 ld ix,mrx.fifo\r
33 ld a,mrx.fifo.mask\r
34 call buf.init\r
35 ld ix,mtx.fifo\r
36 ld a,mtx.fifo.mask\r
37 jp buf.init\r
38\r
39;--------------------------------------------------------------\r
40\r
41msgi.st:\r
42 push ix\r
43 ld ix,mrx.fifo ;\r
44\r
45buf.empty:\r
46 ld a,(ix+o.in_idx) ;\r
47 sub (ix+o.out_idx) ;\r
48 pop ix\r
49 ret z\r
50 or 0ffh\r
51 ret\r
2fa1a706 52\r
6a4e9540
L
53;--------------------------------------------------------------\r
54\r
55msg.in:\r
56 push ix\r
57 ld ix,mrx.fifo ;\r
58\r
59buf.get:\r
60 ld a,(ix+o.out_idx) ;\r
61bg.wait:\r
62 cp (ix+o.in_idx) ;\r
63 jr z,bg.wait\r
64\r
65 push hl ;\r
66 push ix\r
67 pop hl\r
68 add a,l\r
69 ld l,a\r
70 jr nc,bg.nc\r
71 inc h\r
72bg.nc:\r
73 ld l,(hl)\r
2fa1a706 74\r
6a4e9540
L
75 ld a,(ix+o.out_idx) ;\r
76 inc a\r
77 and (ix+o.mask)\r
78 ld (ix+o.out_idx),a\r
2fa1a706 79\r
6a4e9540
L
80 ld a,l\r
81 pop hl\r
82 pop ix\r
83 ret\r
84\r
85;--------------------------------------------------------------\r
86\r
87msgo.st:\r
88 push ix\r
89 ld ix,mtx.fifo ;\r
90\r
91buf.full:\r
92 ld a,(ix+o.in_idx) ;\r
93 inc a\r
94 and (ix+o.mask)\r
95 sub (ix+o.out_idx) ;\r
96 pop ix\r
97 ret z\r
98 or 0ffh\r
99 ret\r
100\r
101;--------------------------------------------------------------\r
102\r
2fa1a706
L
103 if 0\r
104\r
6a4e9540
L
105msg.out:\r
106 push ix\r
107 ld ix,mtx.fifo ;\r
108\r
109buf.put:\r
110 push hl ;\r
111 push bc\r
112 push ix\r
113 pop hl\r
114 ld c,(ix+o.in_idx) ;\r
115 ld b,0\r
116 add hl,bc\r
117 ld b,a\r
118\r
119 ld a,c ;\r
120 inc a\r
121 and (ix+o.mask)\r
122bp.wait:\r
123 cp (ix+o.out_idx) ;\r
124 jr z,bp.wait\r
125 ld (hl),b\r
126 ld (ix+o.in_idx),a\r
2fa1a706 127\r
6a4e9540 128 ld a,b\r
64cc2207 129 out (AVRINT5),a\r
6a4e9540
L
130 pop bc\r
131 pop hl\r
132 pop ix\r
133 ret\r
134\r
2fa1a706 135 endif\r
6a4e9540
L
136\r
137;--------------------------------------------------------------\r
6a4e9540 138\r
2fa1a706
L
139\r
140\r
141msg.out:\r
6a4e9540
L
142 push ix\r
143 ld ix,mtx.fifo ;\r
144\r
2fa1a706 145buf.put:\r
6a4e9540 146 push bc\r
6a4e9540 147 ld c,(ix+o.in_idx) ;\r
2fa1a706
L
148 ld b,0\r
149 push ix ;14\r
150 add ix,bc ;10\r
151 ld (ix+0),a ;15\r
152 pop ix ;12 / 51\r
153 ld b,a ; 4\r
6a4e9540 154 ld a,c ;\r
2fa1a706
L
155 inc a ;\r
156 and (ix+o.mask) ;\r
157bp.wait:\r
6a4e9540 158 cp (ix+o.out_idx) ;\r
2fa1a706
L
159 jr z,bp.wait ;\r
160 ld (ix+o.in_idx),a ;\r
161\r
162 ld a,b\r
64cc2207 163 out (AVRINT5),a\r
6a4e9540
L
164 pop bc\r
165 pop ix\r
166 ret\r
167\r
2fa1a706
L
168\r
169;--------------------------------------------------------------\r
170\r
171 if 0\r
172 ; Works only, if buffer size < (128 - 3)\r
173 ; --> mask must be 03fh or less\r
174\r
175msg.out:\r
176 push ix\r
177 ld ix,mtx.fifo ;\r
178\r
179buf.put:\r
180 push bc\r
181 ld b,a ; 4\r
182 ld a,(ix+o.in_idx) ;14\r
183 ld ($ + 3 + 2),a ;15\r
184 ld (ix+0),b ;15\r
185 inc a ;\r
186 and (ix+o.mask) ;\r
187bp.wait:\r
188 cp (ix+o.out_idx) ;\r
189 jr z,bp.wait ;\r
190 ld (ix+o.in_idx),a ;\r
191\r
192 ld a,b\r
193 out (AVRINT5),a\r
194 pop bc\r
195 pop ix\r
196 ret\r
197\r
198 endif\r
199\r
200;--------------------------------------------------------------\r
201;\r
202; (hl): data\r
203\r
204msg.sout:\r
205 push ix ;14\r
206 ld ix,mtx.fifo ;12\r
207 push bc ;11\r
208 push de ;11\r
209 ld c,(hl) ; 6\r
210 ld b,0 ; 6\r
211 inc hl ; 7\r
212ms.ol: ; \\r
213 ld a,low mtx.fifo ; 6\r
214 add a,(ix+o.in_idx) ;14\r
215 ld e,a ; 4\r
216 ld a,high mtx.fifo ; 6\r
217 adc a,b ; 4\r
218 ld d,a ; 4\r
219\r
220 ld a,(ix+o.in_idx) ;14\r
221 inc a ; 4\r
222 and (ix+o.mask) ;14\r
223ms.wait:\r
224 cp (ix+o.out_idx) ;14\r
225 jr z,ms.wait ; 6/8\r
226\r
227 ldi ;12\r
228 ld (ix+o.in_idx),a ;15\r
229 jp pe,ms.ol ; 6/9 -- 126\r
230\r
231 out (AVRINT5),a ;10\r
232 pop de ; 9\r
233 pop bc ; 9\r
234 pop ix ;12\r
235 ret ; 9\r
236\r
237;--------------------------------------------------------------\r
238;\r
239; (hl): data\r
240\r
241 if 0\r
242\r
243msg.sout:\r
244 push ix ;14\r
245 ld ix,mtx.fifo ;12\r
246 push bc ;11\r
247 push de ;11\r
248 ld b,(hl) ; 6\r
249 inc hl ; 4\r
250 ex de,hl ; 3\r
251ms.ol: ; \\r
252 push ix ;14\r
253 pop hl ; 9\r
254 ld c,(ix+o.in_idx) ;14\r
255 ld a,c ; 4\r
256 add l ; 4\r
257 ld l,a ; 4\r
258 jr nc,ms.on ; 6/8\r
259 inc h ; 4\r
260ms.on:\r
261 ld a,c ; 4\r
262 inc a ; 4\r
263 and (ix+o.mask) ;14\r
264ms.wait:\r
265 cp (ix+o.out_idx) ;14\r
266 jr z,ms.wait ; 6/8\r
267 ld c,a ; 4\r
268 ld a,(de) ; 6\r
269 inc de ; 4\r
270 ld (hl),a ; 7\r
271 ld (ix+o.in_idx),c ;15\r
272 djnz ms.ol ; 7/9 -- 130\r
273\r
274 out (AVRINT5),a ;10\r
275 ex de,hl ; 3\r
276 pop de ; 9\r
277 pop bc ; 9\r
278 pop ix ;12\r
279 ret ; 9\r
280\r
281 endif\r
282\r
6a4e9540
L
283;--------------------------------------------------------------\r
284\r
285msg.co:\r
286 push af\r
287 push hl\r
288 ld (buf_char),a\r
289 ld hl,buf\r
290 call msg.sout\r
291 pop hl\r
292 pop af\r
293 ret\r
2fa1a706
L
294\r
295\r
6a4e9540
L
296buf:\r
297 db buf_end - $ - 1 ;output string length\r
3531528e 298 db 0AEh ; message start token\r
6a4e9540
L
299 db buf_end - $ - 1 ; message length\r
300 db 1 ; command\r
301 db 1 ; subcommand\r
302buf_char:\r
303 db 0 ; pay load\r
304buf_end:\r
305\r
306;----------------------------------------------------------------------\r
307\r
308 end\r