]> cloudbase.mooo.com Git - z180-stamp.git/blame - z180/msgbuf-a.180
Change message start token from 0x81 to 0xAE
[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
12 include z180reg.inc\r
13\r
14;--------------------------------------------------------------\r
15\r
16 dseg\r
17\r
18 mkbuf mrx.fifo,mrx.fifo_len\r
19 mkbuf mtx.fifo,mtx.fifo_len\r
20\r
21;--------------------------------------------------------------\r
22\r
23 cseg\r
24\r
25;\r
26; Init buffer\r
27;\r
28 \r
29msginit:\r
30 ld ix,mrx.fifo\r
31 ld a,mrx.fifo.mask\r
32 call buf.init\r
33 ld ix,mtx.fifo\r
34 ld a,mtx.fifo.mask\r
35 jp buf.init\r
36\r
37;--------------------------------------------------------------\r
38\r
39msgi.st:\r
40 push ix\r
41 ld ix,mrx.fifo ;\r
42\r
43buf.empty:\r
44 ld a,(ix+o.in_idx) ;\r
45 sub (ix+o.out_idx) ;\r
46 pop ix\r
47 ret z\r
48 or 0ffh\r
49 ret\r
50 \r
51;--------------------------------------------------------------\r
52\r
53msg.in:\r
54 push ix\r
55 ld ix,mrx.fifo ;\r
56\r
57buf.get:\r
58 ld a,(ix+o.out_idx) ;\r
59bg.wait:\r
60 cp (ix+o.in_idx) ;\r
61 jr z,bg.wait\r
62\r
63 push hl ;\r
64 push ix\r
65 pop hl\r
66 add a,l\r
67 ld l,a\r
68 jr nc,bg.nc\r
69 inc h\r
70bg.nc:\r
71 ld l,(hl)\r
72 \r
73 ld a,(ix+o.out_idx) ;\r
74 inc a\r
75 and (ix+o.mask)\r
76 ld (ix+o.out_idx),a\r
77 \r
78 ld a,l\r
79 pop hl\r
80 pop ix\r
81 ret\r
82\r
83;--------------------------------------------------------------\r
84\r
85msgo.st:\r
86 push ix\r
87 ld ix,mtx.fifo ;\r
88\r
89buf.full:\r
90 ld a,(ix+o.in_idx) ;\r
91 inc a\r
92 and (ix+o.mask)\r
93 sub (ix+o.out_idx) ;\r
94 pop ix\r
95 ret z\r
96 or 0ffh\r
97 ret\r
98\r
99;--------------------------------------------------------------\r
100\r
101msg.out:\r
102 push ix\r
103 ld ix,mtx.fifo ;\r
104\r
105buf.put:\r
106 push hl ;\r
107 push bc\r
108 push ix\r
109 pop hl\r
110 ld c,(ix+o.in_idx) ;\r
111 ld b,0\r
112 add hl,bc\r
113 ld b,a\r
114\r
115 ld a,c ;\r
116 inc a\r
117 and (ix+o.mask)\r
118bp.wait:\r
119 cp (ix+o.out_idx) ;\r
120 jr z,bp.wait\r
121 ld (hl),b\r
122 ld (ix+o.in_idx),a\r
123 \r
124 ld a,b\r
125 out0 (AVRINT5),a\r
126 pop bc\r
127 pop hl\r
128 pop ix\r
129 ret\r
130\r
131\r
132;--------------------------------------------------------------\r
133;\r
134; (hl): data\r
135\r
136msg.sout:\r
137 push ix\r
138 ld ix,mtx.fifo ;\r
139\r
140 push bc\r
141 push de\r
142 ld b,(hl) ;\r
143 inc hl\r
144 ex de,hl\r
145 \r
146ms.ol:\r
147 push ix\r
148 pop hl\r
149 ld c,(ix+o.in_idx) ;\r
150 ld a,c\r
151 add l\r
152 ld l,a\r
153 jr nc,ms.on\r
154 inc h\r
155ms.on:\r
156 ld a,c ;\r
157 inc a\r
158 and (ix+o.mask)\r
159ms.wait:\r
160 cp (ix+o.out_idx) ;\r
161 jr z,ms.wait\r
162 ld c,a\r
163 ld a,(de)\r
164 inc de\r
165 ld (hl),a\r
166 ld (ix+o.in_idx),c\r
167 djnz ms.ol\r
168 out0 (AVRINT5),a\r
169 ex de,hl\r
170 pop de\r
171 pop bc\r
172 pop ix\r
173 ret\r
174\r
175;--------------------------------------------------------------\r
176\r
177msg.co:\r
178 push af\r
179 push hl\r
180 ld (buf_char),a\r
181 ld hl,buf\r
182 call msg.sout\r
183 pop hl\r
184 pop af\r
185 ret\r
186 \r
187 \r
188buf:\r
189 db buf_end - $ - 1 ;output string length\r
3531528e 190 db 0AEh ; message start token\r
6a4e9540
L
191 db buf_end - $ - 1 ; message length\r
192 db 1 ; command\r
193 db 1 ; subcommand\r
194buf_char:\r
195 db 0 ; pay load\r
196buf_end:\r
197\r
198;----------------------------------------------------------------------\r
199\r
200 end\r
201\r