]> cloudbase.mooo.com Git - z180-stamp.git/blame - z180/msgbuf-a.180
Simplify Console I/O. Switch back to IOBYTE.
[z180-stamp.git] / z180 / msgbuf-a.180
CommitLineData
6a4e9540
L
1 page 255\r
2 .z80\r
3 \r
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
8 \r
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
20 mkbuf mrx.fifo,mrx.fifo_len\r
21 mkbuf mtx.fifo,mtx.fifo_len\r
22\r
23;--------------------------------------------------------------\r
24\r
25 cseg\r
26\r
27;\r
28; Init buffer\r
29;\r
30 \r
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
52 \r
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
74 \r
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
79 \r
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
103msg.out:\r
104 push ix\r
105 ld ix,mtx.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
125 \r
126 ld a,b\r
64cc2207 127 out (AVRINT5),a\r
6a4e9540
L
128 pop bc\r
129 pop hl\r
130 pop ix\r
131 ret\r
132\r
133\r
134;--------------------------------------------------------------\r
135;\r
136; (hl): data\r
137\r
138msg.sout:\r
139 push ix\r
140 ld ix,mtx.fifo ;\r
141\r
142 push bc\r
143 push de\r
144 ld b,(hl) ;\r
145 inc hl\r
146 ex de,hl\r
147 \r
148ms.ol:\r
149 push ix\r
150 pop hl\r
151 ld c,(ix+o.in_idx) ;\r
152 ld a,c\r
153 add l\r
154 ld l,a\r
155 jr nc,ms.on\r
156 inc h\r
157ms.on:\r
158 ld a,c ;\r
159 inc a\r
160 and (ix+o.mask)\r
161ms.wait:\r
162 cp (ix+o.out_idx) ;\r
163 jr z,ms.wait\r
164 ld c,a\r
165 ld a,(de)\r
166 inc de\r
167 ld (hl),a\r
168 ld (ix+o.in_idx),c\r
169 djnz ms.ol\r
64cc2207 170 out (AVRINT5),a\r
6a4e9540
L
171 ex de,hl\r
172 pop de\r
173 pop bc\r
174 pop ix\r
175 ret\r
176\r
177;--------------------------------------------------------------\r
178\r
179msg.co:\r
180 push af\r
181 push hl\r
182 ld (buf_char),a\r
183 ld hl,buf\r
184 call msg.sout\r
185 pop hl\r
186 pop af\r
187 ret\r
188 \r
189 \r
190buf:\r
191 db buf_end - $ - 1 ;output string length\r
3531528e 192 db 0AEh ; message start token\r
6a4e9540
L
193 db buf_end - $ - 1 ; message length\r
194 db 1 ; command\r
195 db 1 ; subcommand\r
196buf_char:\r
197 db 0 ; pay load\r
198buf_end:\r
199\r
200;----------------------------------------------------------------------\r
201\r
202 end\r
203\r