]> cloudbase.mooo.com Git - z180-stamp.git/blame - z180/msgfifo.180
Merge branch 'fatfs-integration' into fatcommands
[z180-stamp.git] / z180 / msgfifo.180
CommitLineData
bad2d92d
L
1 page 255\r
2 .z80\r
e4c4b148 3\r
bad2d92d
L
4 global msg_rx_fifo,msg_tx_fifo\r
5\r
6 global msginit,msgi.st,msg.in,msgo.st,msg.out\r
7 global msg.sout,msg.co\r
e4c4b148 8\r
bad2d92d
L
9 extrn buf.init\r
10\r
11 include config.inc\r
12 include z180reg.inc\r
13\r
14;--------------------------------------------------------------\r
15\r
16 dseg\r
17\r
e4c4b148
L
18 mkbuf mtx.fifo_id, msg_tx_fifo, msg_tx_fifo_len\r
19 mkbuf mrx.fifo_id, msg_rx_fifo, msg_rx_fifo_len\r
bad2d92d
L
20\r
21\r
22\r
23;--------------------------------------------------------------\r
24\r
25 cseg\r
26\r
27;\r
28; Init buffer\r
29;\r
e4c4b148 30\r
bad2d92d
L
31msginit:\r
32 ld ix,msg_rx_fifo\r
33 ld a,msg_rx_fifo.mask\r
34 call buf.init\r
35 ld ix,msg_tx_fifo\r
36 ld a,msg_tx_fifo.mask\r
37 jp buf.init\r
38\r
39;--------------------------------------------------------------\r
40\r
41msgi.st:\r
42 push ix\r
43 ld ix,msg_rx_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
e4c4b148 52\r
bad2d92d
L
53;--------------------------------------------------------------\r
54\r
55msg.in:\r
56 push ix\r
57 ld ix,msg_rx_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
e4c4b148 74\r
bad2d92d
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
e4c4b148 79\r
bad2d92d
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,msg_tx_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
103msg.out:\r
104 push ix\r
105 ld ix,msg_tx_fifo ;\r
106\r
107buf.put:\r
108 push hl ;\r
109 push bc\r
110 push ix\r
111 pop hl\r
112 ld c,(ix+o.in_idx) ;\r
113 ld b,0\r
114 add hl,bc\r
115 ld b,a\r
116\r
117 ld a,c ;\r
118 inc a\r
119 and (ix+o.mask)\r
120bp.wait:\r
121 cp (ix+o.out_idx) ;\r
122 jr z,bp.wait\r
123 ld (hl),b\r
124 ld (ix+o.in_idx),a\r
e4c4b148 125\r
bad2d92d
L
126 ld a,b\r
127 out0 (AVRINT5),a\r
128 pop bc\r
129 pop hl\r
130 pop ix\r
131 ret\r
132\r
133\r
134;--------------------------------------------------------------\r
135;--------------------------------------------------------------\r
136;--------------------------------------------------------------\r
137\r
138if 0\r
139msg.out:\r
140 push ix\r
141 ld ix,msg_fifo ;\r
142\r
143 push bc\r
144 ld b,a ;save char\r
145 ld a,(ix+o.in_idx) ;\r
146 inc a\r
147 and (ix+o.mask)\r
148bp.wait:\r
149 cp (ix+o.out_idx) ;\r
150 jr z,bp.wait\r
151 ld c,a\r
152 ld a,b\r
153 out (PMSG),a\r
154 ld (ix+o.in_idx),c\r
e4c4b148 155\r
bad2d92d
L
156 pop bc\r
157 pop ix\r
158 ret\r
159endif\r
160\r
161;--------------------------------------------------------------\r
162;\r
163; (hl): data\r
164\r
165msg.sout:\r
166 push ix\r
167 ld ix,msg_tx_fifo ;\r
168\r
169 push bc\r
170 push de\r
171 ld b,(hl) ;\r
172 inc hl\r
173 ex de,hl\r
e4c4b148 174\r
bad2d92d
L
175ms.ol:\r
176 push ix\r
177 pop hl\r
178 ld c,(ix+o.in_idx) ;\r
179 ld a,c\r
180 add l\r
181 ld l,a\r
182 jr nc,ms.on\r
183 inc h\r
184ms.on:\r
185 ld a,c ;\r
186 inc a\r
187 and (ix+o.mask)\r
188ms.wait:\r
189 cp (ix+o.out_idx) ;\r
190 jr z,ms.wait\r
191 ld c,a\r
192 ld a,(de)\r
193 inc de\r
194 ld (hl),a\r
195 ld (ix+o.in_idx),c\r
196 djnz ms.ol\r
197 out0 (AVRINT5),a\r
198 ex de,hl\r
199 pop de\r
200 pop bc\r
201 pop ix\r
202 ret\r
203\r
204;--------------------------------------------------------------\r
205\r
206if 0\r
207msg.sout:\r
208 push ix\r
209 ld ix,msg_fifo ;\r
210 push bc\r
211\r
212 ld b,(hl) ;count\r
213 inc hl\r
214obs_1:\r
215 ld a,(ix+o.out_idx) ;\r
216 sub (ix+o.in_idx) ;\r
217 dec a\r
218 and (ix+o.mask)\r
219 cp b\r
220 jr c,obs_1\r
221\r
222 ld c,(hl) ;port address\r
223 inc hl\r
224 ld a,b\r
225 otir\r
226 add (ix+o.in_idx)\r
227 and (ix+o.mask)\r
228 ld (ix+o.in_idx),a\r
229 pop bc\r
230 pop ix\r
231 ret\r
232\r
233;----------------------------------------------------------------------\r
234endif\r
235\r
236msg.co:\r
237 push af\r
238 push hl\r
239 ld (buf_char),a\r
240 ld hl,buf\r
241 call msg.sout\r
242 pop hl\r
243 pop af\r
244 ret\r
e4c4b148
L
245\r
246\r
bad2d92d
L
247buf:\r
248 db buf_end - $ - 1 ;output string length\r
249 db 081h ; message start token\r
250 db buf_end - $ - 1 ; message length\r
251 db 1 ; command\r
252 db 1 ; subcommand\r
253buf_char:\r
254 db 0 ; pay load\r
255buf_end:\r
256\r
257;----------------------------------------------------------------------\r
258\r
259 end\r