Rev 1969 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
344 | alone | 1 | ;� �ࠩ��� ������ |
22 | dimkam | 2 | WIZ_BASE_ADDR EQU 0x00ab |
3 | WIZ_SOCK0_HNDL EQU 8 |
||
4 | WIZ_REGAD_PORT EQU 0x8100+WIZ_BASE_ADDR |
||
162 | dimkam | 5 | WIZ_CFG_PORT EQU 0x8200+WIZ_BASE_ADDR |
15 | dimkam | 6 | |
22 | dimkam | 7 | WIZ_S_MR EQU 0x01 |
8 | WIZ_S_CR EQU 0x03 |
||
9 | WIZ_S_SSR EQU 0x09 |
||
10 | WIZ_S_PORTR_H EQU 0x0a |
||
11 | WIZ_S_PORTR_L EQU 0x0b |
||
12 | WIZ_S_DPORTR_H EQU 0x12 |
||
13 | WIZ_S_DPORTR_L EQU 0x13 |
||
14 | WIZ_S_DIPR0 EQU 0x14 |
||
15 | WIZ_S_DIPR1 EQU 0x15 |
||
16 | WIZ_S_DIPR2 EQU 0x16 |
||
17 | WIZ_S_DIPR3 EQU 0x17 |
||
148 | demige | 18 | WIZ_S_PROTOR EQU 0x1b |
22 | dimkam | 19 | WIZ_S_WRSR_H EQU 0x22 |
20 | WIZ_S_WRSR_L EQU 0x23 |
||
21 | WIZ_S_FSR_H EQU 0x26 |
||
22 | WIZ_S_FSR_L EQU 0x27 |
||
23 | WIZ_S_RX_RSR_H EQU 0x2a |
||
24 | WIZ_S_RX_RSR_L EQU 0x2b |
||
25 | WIZ_S_TX_H EQU 0x2e |
||
26 | WIZ_S_TX_L EQU 0x2f |
||
27 | WIZ_S_RX_H EQU 0x30 |
||
28 | WIZ_S_RX_L EQU 0x31 |
||
15 | dimkam | 29 | |
148 | demige | 30 | |
31 | IPPROTO_ICMP EQU 1 |
||
32 | IPPROTO_IGMP EQU 2 |
||
22 | dimkam | 33 | IPPROTO_TCP EQU 6 |
34 | IPPROTO_UDP EQU 17 |
||
15 | dimkam | 35 | |
148 | demige | 36 | |
22 | dimkam | 37 | AF_UNSPEC EQU 0 |
38 | AF_INET EQU 2 |
||
39 | AF_INET6 EQU 23 |
||
15 | dimkam | 40 | |
22 | dimkam | 41 | SOCK_STREAM EQU 0x01 ;tcp/ip |
148 | demige | 42 | SOCK_ICMP EQU 0x02 ;icmp |
22 | dimkam | 43 | SOCK_DGRAM EQU 0x03 ;udp/ip |
44 | |||
45 | SHUT_RDWR EQU 2 |
||
24 | dimkam | 46 | ERR_EAGAIN EQU 35 ;/* Try again */ |
47 | ERR_EWOULDBLOCK EQU ERR_EAGAIN ;/* Operation would block */ |
||
22 | dimkam | 48 | ERR_INTR EQU 4 |
49 | ERR_NFILE EQU 23 |
||
50 | ERR_ALREADY EQU 37 |
||
51 | ERR_NOTSOCK EQU 38 |
||
52 | ERR_EMSGSIZE EQU 40 ;/* Message too long */ |
||
53 | ERR_PROTOTYPE EQU 41 |
||
54 | ERR_AFNOSUPPORT EQU 47 |
||
55 | ERR_HOSTUNREACH EQU 65 |
||
63 | DimkaM | 56 | ERR_ECONNABORTED EQU 53 /* Software caused connection abort */ |
22 | dimkam | 57 | ERR_CONNRESET EQU 54 |
58 | ERR_NOTCONN EQU 57 |
||
331 | alone | 59 | ;struct sockaddr_in {unsigned char sin_family;unsigned short sin_port; |
15 | dimkam | 60 | ; struct in_addr sin_addr;char sin_zero[8];}; |
61 | |||
62 | ;/***************************************/ |
||
63 | ;/* The bit of Sn_MR regsiter defintion */ |
||
64 | ;/***************************************/ |
||
22 | dimkam | 65 | Sn_MR_ALIGN EQU (1 << 8) ;< Alignment bit of Sn_MR. */ |
66 | Sn_MR_MULTI EQU (1 << 7) ;< Multicasting bit of Sn_MR. */ |
||
67 | Sn_MR_MF EQU (1 << 6) ;< MAC filter bit of Sn_MR. */ |
||
68 | Sn_MR_IGMPv EQU (1 << 5) ;< IGMP version bit of Sn_MR. */ |
||
69 | Sn_MR_ND EQU (1 << 5) ;< No delayed ack bit of Sn_MR. */ |
||
70 | Sn_MR_CLOSE EQU 0x00 ;< Protocol bits of Sn_MR. */ |
||
1969 | dimkam | 71 | Sn_MR_TCP EQU 0x01 ;< Protocol bits of Sn_MR. */ |
22 | dimkam | 72 | Sn_MR_UDP EQU 0x02 ;< Protocol bits of Sn_MR. */ |
73 | Sn_MR_IPRAW EQU 0x03 ;< Protocol bits of Sn_MR. */ |
||
74 | Sn_MR_MACRAW EQU 0x04 ;< Protocol bits of Sn_MR. */ |
||
75 | Sn_MR_PPPoE EQU 0x05 ;< Protocol bits of Sn_MR. */ |
||
15 | dimkam | 76 | |
77 | ;/******************************/ |
||
78 | ;/* The values of CR defintion */ |
||
79 | ;/******************************/ |
||
80 | |||
22 | dimkam | 81 | Sn_CR_OPEN EQU 0x01 ;< OPEN command value of Sn_CR. */ |
82 | Sn_CR_LISTEN EQU 0x02 ;< LISTEN command value of Sn_CR. */ |
||
83 | Sn_CR_CONNECT EQU 0x04 ;< CONNECT command value of Sn_CR. */ |
||
84 | Sn_CR_DISCON EQU 0x08 ;< DISCONNECT command value of Sn_CR. */ |
||
85 | Sn_CR_CLOSE EQU 0x10 ;< CLOSE command value of Sn_CR. */ |
||
86 | Sn_CR_SEND EQU 0x20 ;< SEND command value of Sn_CR. */ |
||
87 | Sn_CR_SEND_MAC EQU 0x21 ;< SEND_MAC command value of Sn_CR. */ |
||
88 | Sn_CR_SEND_KEEP EQU 0x22 ;< SEND_KEEP command value of Sn_CR */ |
||
89 | Sn_CR_RECV EQU 0x40 ;< RECV command value of Sn_CR */ |
||
90 | Sn_CR_PCON EQU 0x23 ;< PCON command value of Sn_CR */ |
||
91 | Sn_CR_PDISCON EQU 0x24 ;< PDISCON command value of Sn_CR */ |
||
92 | Sn_CR_PCR EQU 0x25 ;< PCR command value of Sn_CR */ |
||
93 | Sn_CR_PCN EQU 0x26 ;< PCN command value of Sn_CR */ |
||
94 | Sn_CR_PCJ EQU 0x27 ;< PCJ command value of Sn_CR */ |
||
15 | dimkam | 95 | |
96 | ;/**********************************/ |
||
97 | ;/* The values of Sn_SSR defintion */ |
||
98 | ;/**********************************/ |
||
22 | dimkam | 99 | SOCK_CLOSED EQU 0x00 ;< SOCKETn is released */ |
100 | SOCK_ARP EQU 0x01 ;< ARP-request is transmitted in order to acquire destination hardware address. */ |
||
101 | SOCK_INIT EQU 0x13 ;< SOCKETn is open as TCP mode. */ |
||
102 | SOCK_LISTEN EQU 0x14 ;< SOCKETn operates as "TCP SERVER" and waits for connection-request (SYN packet) from "TCP CLIENT". */ |
||
103 | SOCK_SYNSENT EQU 0x15 ;< Connect-request(SYN packet) is transmitted to "TCP SERVER". */ |
||
104 | SOCK_SYNRECV EQU 0x16 ;< Connect-request(SYN packet) is received from "TCP CLIENT". */ |
||
105 | SOCK_ESTABLISHED EQU 0x17 ;< TCP connection is established. */ |
||
106 | SOCK_FIN_WAIT EQU 0x18 ;< SOCKETn is closing. */ |
||
107 | SOCK_CLOSING EQU 0x1A ;< SOCKETn is closing. */ |
||
108 | SOCK_TIME_WAIT EQU 0x1B ;< SOCKETn is closing. */ |
||
109 | SOCK_CLOSE_WAIT EQU 0x1C ;< Disconnect-request(FIN packet) is received from the peer. */ |
||
110 | SOCK_LAST_ACK EQU 0x1D ;< SOCKETn is closing. */ |
||
111 | SOCK_UDP EQU 0x22 ;< SOCKETn is open as UDP mode. */ |
||
112 | SOCK_IPRAW EQU 0x32 ;< SOCKETn is open as IPRAW mode. */ |
||
113 | SOCK_MACRAW EQU 0x42 ;< SOCKET0 is open as MACRAW mode. */ |
||
114 | SOCK_PPPoE EQU 0x5F ;< SOCKET0 is open as PPPoE mode. */ |
||
15 | dimkam | 115 | |
116 | wizlocalport: |
||
117 | defw 0xc000 |
||
63 | DimkaM | 118 | |
144 | dimkam | 119 | w53_socflags=$-1: ;+0 - RXreg, +1 - Nsoc, +2..3 - RXcount, +4 procID |
120 | defb 0,WIZ_SOCK0_HNDL+0,0,0,0,0,WIZ_SOCK0_HNDL+1,0,0,0,0,WIZ_SOCK0_HNDL+2,0,0,0 |
||
121 | defb 0,WIZ_SOCK0_HNDL+3,0,0,0,0,WIZ_SOCK0_HNDL+4,0,0,0,0,WIZ_SOCK0_HNDL+5,0,0,0 |
||
122 | defb 0,WIZ_SOCK0_HNDL+6,0,0,0,0,WIZ_SOCK0_HNDL+7,0,0,0 |
||
63 | DimkaM | 123 | w53_endsocflags: |
124 | |||
144 | dimkam | 125 | w53_drop_socs |
126 | ld ix,w53_socflags+1-5 |
||
127 | w53_drop_socs_loop |
||
128 | ld bc,5 |
||
129 | add ix,bc |
||
130 | ld a,ixl |
||
131 | cp 0xff&w53_endsocflags |
||
132 | ret z |
||
133 | ld a,(ix+4) |
||
134 | cp (iy+app.id) |
||
135 | jr nz,w53_drop_socs_loop |
||
136 | call w53_valid_free |
||
137 | ld e,0 |
||
138 | call w53_close_valid |
||
139 | jr w53_drop_socs_loop |
||
140 | dimkam | 140 | |
15 | dimkam | 141 | wiznet_open |
142 | ;L-subfunction |
||
143 | dec l |
||
61 | Alone | 144 | jr z,w53_socket |
15 | dimkam | 145 | dec l |
146 | jp z,w53_close |
||
22 | dimkam | 147 | dec l |
148 | jp z,w53_connect |
||
63 | DimkaM | 149 | dec l |
150 | jp z,w53_accept |
||
151 | dec l |
||
152 | jp z,w53_bind |
||
153 | dec l |
||
154 | jp z,w53_listen |
||
1336 | dimkam | 155 | dec l |
156 | jp z,w53_setdns |
||
157 | dec l |
||
158 | jp z,w53_getdns |
||
344 | alone | 159 | ld a,ERR_INTR ;�㭪�� �� ������� |
22 | dimkam | 160 | ld hl,-1 |
15 | dimkam | 161 | ret |
1336 | dimkam | 162 | w53_setdns: ;DE-㪠��⥫� �� 4 ���� dns |
163 | call BDOS_preparedepage |
||
164 | call BDOS_setdepage |
||
165 | ld hl,.dns |
||
166 | ex de,hl |
||
167 | .dnsldi |
||
168 | ldi |
||
169 | ldi |
||
170 | ldi |
||
171 | ldi |
||
172 | ret |
||
173 | .dns |
||
174 | defb 8,8,4,4 |
||
175 | w53_getdns: ;DE-㪠��⥫� �� 4 ���� dns |
||
176 | call BDOS_preparedepage |
||
177 | call BDOS_setdepage |
||
178 | ld hl,w53_setdns.dns |
||
179 | jr w53_setdns.dnsldi |
||
180 | |||
1971 | dimkam | 181 | display "w53_socket", w53_socket |
15 | dimkam | 182 | w53_socket: |
183 | ;E-socket type, D-address family |
||
344 | alone | 184 | ;�饬 ����� ᮪�� |
1971 | dimkam | 185 | ld l,-1 ; �� 㬮�砭� �訡�� |
15 | dimkam | 186 | ld a,AF_INET |
187 | cp d |
||
188 | ld a,ERR_AFNOSUPPORT |
||
189 | ret nz |
||
63 | DimkaM | 190 | w53_socket3: |
1971 | dimkam | 191 | ld ix,w53_socflags + 1 - 5 |
192 | ld bc, 5 |
||
193 | ld d,8 + 1 |
||
15 | dimkam | 194 | w53_socket0: |
1971 | dimkam | 195 | dec d |
196 | jr nz,w53_socket1 |
||
344 | alone | 197 | ld a,ERR_NFILE ;�� ᮪��� ������ |
15 | dimkam | 198 | ret |
199 | w53_socket1: |
||
1971 | dimkam | 200 | add ix,bc |
201 | ld a,(ix+4) |
||
202 | or a |
||
15 | dimkam | 203 | jr nz,w53_socket0 |
1971 | dimkam | 204 | call w53_valid_free |
15 | dimkam | 205 | ld a,e |
206 | ld d,Sn_MR_TCP |
||
207 | cp SOCK_STREAM |
||
208 | jr z,w53_socket2 |
||
209 | ld d,Sn_MR_UDP |
||
210 | cp SOCK_DGRAM |
||
211 | jr z,w53_socket2 |
||
148 | demige | 212 | ld d,Sn_MR_IPRAW |
213 | cp SOCK_ICMP |
||
214 | jr z,w53_socket2_icmp |
||
15 | dimkam | 215 | ld a,ERR_PROTOTYPE |
216 | ret |
||
217 | w53_socket2: |
||
218 | ld b,WIZ_S_MR |
||
219 | out (c),d |
||
144 | dimkam | 220 | ld a,(iy+app.id) |
221 | ld (ix+4),a |
||
189 | dimkam | 222 | ld de,(wizlocalport) |
223 | inc de |
||
224 | set 6,d |
||
225 | set 7,d |
||
226 | ld (wizlocalport),de |
||
227 | ld b,WIZ_S_PORTR_H |
||
228 | out (c),d |
||
229 | inc b |
||
230 | out (c),e |
||
1971 | dimkam | 231 | ld a,ixl |
232 | sub w53_socflags & 0xff |
||
233 | ld l,a |
||
63 | DimkaM | 234 | xor a |
235 | ld (ix+2),a |
||
236 | ld (ix+3),a |
||
148 | demige | 237 | ret |
238 | w53_socket2_icmp: |
||
239 | ld b,WIZ_S_PROTOR |
||
240 | ld a,IPPROTO_ICMP |
||
241 | out (c),a |
||
1971 | dimkam | 242 | jr w53_socket2 |
63 | DimkaM | 243 | |
144 | dimkam | 244 | |
63 | DimkaM | 245 | w53_bind: |
246 | call w53_valid_socket |
||
247 | jp z,w53_invalid_socked0 |
||
248 | call BDOS_preparedepage |
||
148 | demige | 249 | call BDOS_setdepage |
63 | DimkaM | 250 | ld bc,WIZ_BASE_ADDR+(WIZ_S_PORTR_H<<8) |
15 | dimkam | 251 | inc de |
63 | DimkaM | 252 | ld a,(de) |
253 | out (c),a |
||
254 | inc b |
||
255 | inc de |
||
256 | ld a,(de) |
||
257 | out (c),a |
||
258 | xor a |
||
259 | ld l,a |
||
260 | ret |
||
261 | |||
262 | w53_accept: |
||
263 | call w53_valid_socket |
||
264 | jp z,w53_invalid_socked0 |
||
265 | ld l,-1 |
||
266 | ld b,WIZ_S_SSR |
||
267 | in a,(c) |
||
268 | jr nz,w53_accept_live |
||
344 | alone | 269 | ld a,ERR_ECONNABORTED ;᮪�� � |
63 | DimkaM | 270 | ret |
271 | w53_accept_live: |
||
272 | cp SOCK_ESTABLISHED |
||
273 | jr z,w53_accept_est |
||
344 | alone | 274 | ld a,ERR_EAGAIN ;���� ������ ��� |
144 | dimkam | 275 | ret |
63 | DimkaM | 276 | w53_accept_est: |
344 | alone | 277 | ld b,WIZ_S_PORTR_H ;�������� ���� |
63 | DimkaM | 278 | in e,(c) |
279 | inc b |
||
280 | in d,(c) |
||
281 | push ix |
||
282 | push de |
||
283 | ld e,SOCK_STREAM |
||
284 | call w53_socket3 |
||
285 | pop de |
||
286 | ld a,l |
||
287 | or a |
||
288 | jp p,w53_accept_nsoc |
||
344 | alone | 289 | pop hl ;᮪�� ������. ��� ⥪�騩 |
63 | DimkaM | 290 | ret |
291 | w53_accept_nsoc: |
||
15 | dimkam | 292 | ld b,WIZ_S_PORTR_H |
63 | DimkaM | 293 | out (c),e |
294 | inc b |
||
15 | dimkam | 295 | out (c),d |
63 | DimkaM | 296 | call w53_listen_acc |
297 | pop hl |
||
298 | inc hl |
||
344 | alone | 299 | ld a,(hl) ;�����塞 ᮪��� ���⠬� |
63 | DimkaM | 300 | ld e,(ix+1) |
301 | ld (hl),e |
||
302 | ld (ix+1),a |
||
144 | dimkam | 303 | ld a,ixl |
304 | sub 0xff&w53_socflags |
||
305 | ld l,a |
||
22 | dimkam | 306 | xor a |
63 | DimkaM | 307 | ret |
308 | |||
144 | dimkam | 309 | |
63 | DimkaM | 310 | w53_listen: |
311 | call w53_valid_socket |
||
312 | jp z,w53_invalid_socked0 |
||
514 | dimkam | 313 | ld b,WIZ_S_SSR |
314 | in a,(c) |
||
315 | or a |
||
316 | ld a,ERR_ALREADY |
||
317 | ret nz |
||
63 | DimkaM | 318 | w53_listen_acc: |
319 | ld a,Sn_CR_OPEN |
||
320 | call w53_cmd |
||
321 | ld b,WIZ_S_SSR |
||
322 | w53_listen0: |
||
323 | in a,(c) |
||
324 | or a |
||
325 | jr z,w53_listen0 |
||
326 | ld a,Sn_CR_LISTEN |
||
327 | call w53_cmd |
||
328 | xor a |
||
329 | ld l,a |
||
330 | ret |
||
15 | dimkam | 331 | |
22 | dimkam | 332 | w53_valid_socket: |
333 | ex af,af' |
||
144 | dimkam | 334 | or a |
335 | jr z,w53_invalid_socked |
||
336 | cp 37 |
||
15 | dimkam | 337 | jr nc,w53_invalid_socked |
144 | dimkam | 338 | w53_valid_socket1: |
339 | add a,0xff&w53_socflags |
||
63 | DimkaM | 340 | ld ixl,a |
144 | dimkam | 341 | ld a,0 |
342 | adc a,0xff&(w53_socflags>>8) |
||
343 | ld ixh,a |
||
344 | ld a,(ix+4) |
||
345 | cp (iy+app.id) |
||
1971 | dimkam | 346 | jr nz,w53_invalid_socked |
144 | dimkam | 347 | w53_valid_free: |
162 | dimkam | 348 | ld bc,WIZ_CFG_PORT |
349 | in a,(c) |
||
350 | and 0x40 |
||
351 | or 0x10 |
||
352 | out (c),a |
||
353 | ld b,0xff&(WIZ_REGAD_PORT>>8) ;bc,WIZ_REGAD_PORT |
||
63 | DimkaM | 354 | ld a,(ix+1) |
15 | dimkam | 355 | out (c),a |
63 | DimkaM | 356 | ld b,WIZ_S_MR |
22 | dimkam | 357 | in a,(c) |
409 | dimkam | 358 | and 0x0f |
15 | dimkam | 359 | ret |
360 | w53_invalid_socked: |
||
361 | pop af |
||
22 | dimkam | 362 | w53_invalid_socked0: |
363 | ld hl,-1 |
||
15 | dimkam | 364 | ld a,ERR_NOTSOCK |
365 | ret |
||
409 | dimkam | 366 | |
367 | w53_open_cmd |
||
368 | ld a,Sn_CR_OPEN |
||
369 | call w53_cmd |
||
370 | ld b,WIZ_S_SSR |
||
371 | w53_op_cmd1: |
||
372 | in a,(c) |
||
373 | or a |
||
374 | jr z,w53_op_cmd1 |
||
375 | ret |
||
63 | DimkaM | 376 | |
22 | dimkam | 377 | w53_connect: |
378 | ;DE-sockaddr_in |
||
379 | ld l,-1 |
||
380 | call w53_valid_socket |
||
381 | jp z,w53_invalid_socked0 |
||
25 | dimkam | 382 | ;dec a |
383 | ;ld a,ERR_PROTOTYPE |
||
384 | ;ret nz |
||
22 | dimkam | 385 | ld b,WIZ_S_SSR |
386 | in a,(c) |
||
387 | or a |
||
388 | ld a,ERR_ALREADY |
||
389 | ret nz |
||
409 | dimkam | 390 | call w53_open_cmd |
391 | call w53_cpy_ia |
||
22 | dimkam | 392 | ld a,Sn_CR_CONNECT |
393 | call w53_cmd |
||
394 | ld b,WIZ_S_SSR |
||
395 | w53_connect2: |
||
396 | in a,(c) |
||
397 | cp SOCK_ESTABLISHED |
||
398 | jr z,w53_connect3 |
||
399 | or a |
||
400 | jr nz,w53_connect2 |
||
24 | dimkam | 401 | ld l,-1 |
22 | dimkam | 402 | ld a,ERR_HOSTUNREACH |
403 | ret |
||
404 | w53_connect3: |
||
405 | xor a |
||
406 | ld l,a |
||
407 | ret |
||
15 | dimkam | 408 | |
409 | dimkam | 409 | w53_cpy_ia |
410 | call BDOS_preparedepage |
||
411 | call BDOS_setdepage |
||
412 | w53_cpy_ia2 |
||
413 | ex de,hl |
||
414 | inc hl ;�ய��⨬ ᥬ���⢮ |
||
415 | ld bc,WIZ_BASE_ADDR+(WIZ_S_DPORTR_L<<8) |
||
416 | ld a,6 |
||
417 | w53_cpy_ia1: |
||
418 | outi |
||
419 | inc b |
||
420 | inc b |
||
421 | dec a |
||
422 | jr nz,w53_cpy_ia1 |
||
423 | ex de,hl |
||
424 | ret |
||
144 | dimkam | 425 | |
15 | dimkam | 426 | w53_close: |
22 | dimkam | 427 | call w53_valid_socket |
144 | dimkam | 428 | w53_close_valid: |
22 | dimkam | 429 | ld l,0 |
144 | dimkam | 430 | ld (ix+4),l |
344 | alone | 431 | ret z ;᮪�� 㦥 㡨� |
22 | dimkam | 432 | dec l |
24 | dimkam | 433 | ex af,af' |
434 | ld a,e |
||
435 | or a |
||
436 | jr z,w53_close_nochk |
||
344 | alone | 437 | ld b,WIZ_S_FSR_H ;��ਬ ���� �� ���� ��ࠢ�� |
24 | dimkam | 438 | in a,(c) |
439 | cp 0x20 |
||
63 | DimkaM | 440 | jr nz,w53_close_nochk |
441 | inc b |
||
344 | alone | 442 | in e,(c) ;????�� � �� ⠪???? |
443 | ;����⠭����� ID |
||
24 | dimkam | 444 | w53_close_nochk: |
445 | ex af,af' |
||
15 | dimkam | 446 | cp Sn_MR_TCP |
63 | DimkaM | 447 | jr nz,w53_close_udp |
448 | w53_close_tcp: |
||
15 | dimkam | 449 | ld b,WIZ_S_SSR |
450 | in a,(c) |
||
344 | alone | 451 | jr z,w53_close3 ;㦥 ������??? �������� ���㦭� |
1969 | dimkam | 452 | cp SOCK_CLOSE_WAIT |
453 | jr nc,w53_close_discon |
||
454 | ;jr nc,w53_close_tcp |
||
15 | dimkam | 455 | cp SOCK_ESTABLISHED |
63 | DimkaM | 456 | jr nz,w53_close_wait ;w53_closewait |
24 | dimkam | 457 | ld a,e |
458 | or a |
||
459 | ld a,ERR_EAGAIN |
||
460 | ret nz |
||
1969 | dimkam | 461 | w53_close_discon |
15 | dimkam | 462 | ld a,Sn_CR_DISCON |
463 | call w53_cmd |
||
63 | DimkaM | 464 | jr w53_close_tcp |
465 | w53_close_udp: |
||
466 | ld b,WIZ_S_SSR |
||
467 | in a,(c) |
||
468 | cp SOCK_UDP |
||
148 | demige | 469 | jr c,w53_close_wait |
24 | dimkam | 470 | ld a,e |
471 | or a |
||
472 | ld a,ERR_EAGAIN |
||
473 | ret nz |
||
474 | w53_close_wait: |
||
15 | dimkam | 475 | ld a,Sn_CR_CLOSE |
476 | call w53_cmd |
||
477 | ld b,WIZ_S_SSR |
||
478 | w53_close2: |
||
479 | in a,(c) |
||
480 | or a |
||
481 | jr nz,w53_close2 |
||
482 | w53_close3: |
||
483 | xor a |
||
484 | ld b,WIZ_S_MR |
||
485 | out (c),a |
||
24 | dimkam | 486 | ld l,a |
15 | dimkam | 487 | ret |
144 | dimkam | 488 | |
15 | dimkam | 489 | w53_cmd: |
490 | ld b,WIZ_S_CR |
||
491 | out (c),a |
||
492 | w53_cmd0: |
||
493 | in a,(c) |
||
494 | or a |
||
495 | ret z |
||
496 | jr w53_cmd0 |
||
409 | dimkam | 497 | |
498 | w53_rd_nontcp: |
||
499 | ld b,WIZ_S_SSR |
||
500 | in a,(c) |
||
501 | call z,w53_open_cmd |
||
502 | ld bc,WIZ_BASE_ADDR+(WIZ_S_RX_RSR_L<<8) |
||
503 | in a,(c) |
||
504 | jr nz,w53_rd_udp_full |
||
505 | dec b |
||
506 | in a,(c) |
||
507 | jr nz,w53_rd_udp_full |
||
508 | w53_eagain |
||
509 | ld hl,-1 |
||
510 | ld a,ERR_EAGAIN |
||
511 | ret |
||
512 | w53_rd_udp_full |
||
569 | dimkam | 513 | ; ld a,d |
514 | ; or e |
||
515 | ; jr nz,w53_rd_ia |
||
516 | ; ld de,w53_ia_buf |
||
517 | ;w53_rd_ia: |
||
409 | dimkam | 518 | ex de,hl |
519 | inc hl |
||
520 | push hl |
||
521 | inc hl |
||
522 | inc hl |
||
523 | ld b,WIZ_S_SSR |
||
524 | in a,(c) |
||
525 | ld b,WIZ_S_RX_H |
||
526 | ini |
||
527 | ld b,WIZ_S_RX_L |
||
528 | ini |
||
529 | ini |
||
530 | ld b,WIZ_S_RX_L |
||
531 | ini |
||
532 | pop hl |
||
533 | cp SOCK_IPRAW |
||
534 | jr z,w53_rd_ipraw |
||
535 | ini |
||
536 | ld b,WIZ_S_RX_L |
||
537 | ini |
||
538 | w53_rd_ipraw: |
||
539 | in h,(c) |
||
540 | inc b |
||
541 | in l,(c) |
||
542 | or a |
||
543 | sbc hl,de |
||
544 | bit 7,h |
||
545 | ex de,hl |
||
546 | jr z,w53_rd_udpbuf |
||
547 | add hl,de |
||
548 | ld de,0 |
||
549 | w53_rd_udpbuf; ���� hl, �ய����� de |
||
550 | push de |
||
551 | w53_rd_ix=$+1 |
||
552 | ld de,0 |
||
553 | call BDOS_preparedepage |
||
554 | call BDOS_setdepage |
||
555 | ld (w53_rdudp_cnt),hl |
||
556 | push hl |
||
557 | pop ix |
||
558 | ex de,hl |
||
559 | ld bc,WIZ_BASE_ADDR+(WIZ_S_RX_H<<8) |
||
560 | ld de, -2 |
||
561 | jp w53_rd_udp_loop1 |
||
562 | ;IX = count, DE = -2, HL = ptr |
||
563 | w53_rd_udp_loop |
||
564 | ini |
||
565 | ld b,WIZ_S_RX_L |
||
566 | ini |
||
567 | w53_rd_udp_loop1 |
||
568 | add ix,de |
||
569 | jp c,w53_rd_udp_loop |
||
570 | ld a,xl |
||
571 | rra |
||
572 | jr nc,w53_rd_udp_odd |
||
573 | ini |
||
574 | ld b,WIZ_S_RX_L |
||
575 | in a,(c) |
||
576 | dec b |
||
577 | w53_rd_udp_odd |
||
578 | pop hl |
||
579 | jp .l2 |
||
580 | .l1 |
||
581 | in a,(c) |
||
582 | inc b |
||
583 | in a,(c) |
||
584 | dec b |
||
585 | .l2 |
||
586 | add hl,de |
||
587 | jp c,.l1 |
||
588 | w53_rdudp_cnt=$+1 |
||
589 | ld hl,0 |
||
590 | ld a,Sn_CR_RECV |
||
591 | jp w53_cmd ;��室�� |
||
592 | |||
344 | alone | 593 | wiznet_read: ;a'-᮪��, de-����, hl-������⢮ |
409 | dimkam | 594 | ld (w53_rd_ix),ix |
22 | dimkam | 595 | call w53_valid_socket |
596 | jp z,w53_invalid_socked0 |
||
409 | dimkam | 597 | and 0x02 |
598 | jp nz,w53_rd_nontcp |
||
344 | alone | 599 | w53_read_min: ;hl-�쪮 �⨬ ���� |
22 | dimkam | 600 | ld a,h |
601 | or l |
||
602 | ret z |
||
603 | w53_read55: |
||
604 | ld c,(ix+2) |
||
605 | ld b,(ix+3) |
||
606 | ld a,b |
||
607 | or c |
||
344 | alone | 608 | jp z,w53_read_new ;����� ������ ����, ���� ���� ����� |
22 | dimkam | 609 | |
344 | alone | 610 | ;�⠥� ���� ����� |
61 | Alone | 611 | ;bc=min(hl,bc), datasize-=bc |
612 | sbc hl,bc |
||
613 | ld a,c |
||
22 | dimkam | 614 | jr nc,w53_minimum0 |
615 | add hl,bc |
||
616 | ld b,h |
||
617 | ld c,l |
||
61 | Alone | 618 | ;ld h,0 |
619 | ;ld l,0 |
||
22 | dimkam | 620 | w53_minimum0: |
61 | Alone | 621 | ;ld a,(ix+2) |
22 | dimkam | 622 | sub c |
623 | ld (ix+2),a |
||
624 | ld a,(ix+3) |
||
625 | sbc a,b |
||
626 | ld (ix+3),a |
||
627 | |||
344 | alone | 628 | push bc ;�쪮 ॠ�쭮 ���⥬ ��࠭�� |
22 | dimkam | 629 | ex de,hl |
630 | ld d,b |
||
31 | Alone | 631 | ld e,c |
632 | ;0x00ff => 0x00ff |
||
633 | ;0x0100 => 0x0000 |
||
634 | dec de |
||
635 | inc e |
||
636 | |||
22 | dimkam | 637 | ld c,WIZ_BASE_ADDR |
638 | ld b,(ix+0) |
||
639 | ld a,WIZ_S_RX_L |
||
61 | Alone | 640 | ;bit 0,b |
641 | ;jr nz,w53_read_loopl |
||
642 | cp b |
||
643 | jr z,w53_read_loopl |
||
344 | alone | 644 | w53_read_loop: ;��-� ���� ������ de-count, hl-ptr |
22 | dimkam | 645 | ini |
646 | ld b,a |
||
647 | dec e |
||
61 | Alone | 648 | jr z,w53_read_looph |
22 | dimkam | 649 | w53_read_loopl: |
650 | ini |
||
651 | dec e |
||
652 | jp nz,w53_read_loop |
||
653 | dec d |
||
61 | Alone | 654 | ;jp p,w53_read_loop |
655 | jp m,w53_read_loope |
||
656 | if 1==1 |
||
657 | w53_read_fastloopd: |
||
658 | ld e,256/8/2 |
||
659 | w53_read_fastloop: |
||
660 | dup 8 |
||
661 | ini |
||
662 | ld b,a |
||
663 | ini |
||
664 | edup |
||
665 | dec e |
||
666 | jp nz,w53_read_fastloop |
||
667 | dec d |
||
668 | jp p,w53_read_fastloopd |
||
22 | dimkam | 669 | jp w53_read_loope |
61 | Alone | 670 | endif |
22 | dimkam | 671 | w53_read_looph: |
672 | dec d |
||
61 | Alone | 673 | ;jp p,w53_read_loopl |
674 | jp m,w53_read_loope |
||
675 | if 1==1 |
||
676 | w53_read_fastloophd: |
||
677 | ld e,256/8/2 |
||
678 | w53_read_fastlooph: |
||
679 | dup 8 |
||
680 | ini |
||
681 | ini |
||
682 | ld b,a |
||
683 | edup |
||
684 | dec e |
||
685 | jp nz,w53_read_fastlooph |
||
686 | dec d |
||
687 | jp p,w53_read_fastloophd |
||
688 | ;jp w53_read_loope |
||
689 | endif |
||
344 | alone | 690 | w53_read_loope: ;����� 横�� |
691 | ld (ix+0),b ;��࠭�� ���騩 ॣ���� RX |
||
692 | pop hl ;�쪮 ���⠫� |
||
693 | ld a,(ix+2) ;� � ���� ��� ����, |
||
694 | or (ix+3) ;� ��室�� |
||
22 | dimkam | 695 | ret nz |
344 | alone | 696 | bit 0,b ;���� ������� - ����� ���ࠫ� |
22 | dimkam | 697 | jr z,w53_read_noblanc |
344 | alone | 698 | in a,(c) ;���⠥� 宫��⮩ ���� |
22 | dimkam | 699 | w53_read_noblanc: |
700 | ld a,Sn_CR_RECV |
||
344 | alone | 701 | jp w53_cmd ;��室�� |
22 | dimkam | 702 | |
344 | alone | 703 | w53_read_new: ;���� ���� ����� |
22 | dimkam | 704 | ld bc,WIZ_BASE_ADDR+(WIZ_S_RX_RSR_L<<8) |
705 | in a,(c) |
||
706 | jr nz,w53_read_new1 |
||
707 | dec b |
||
708 | in a,(c) |
||
709 | jr nz,w53_read_new1 |
||
344 | alone | 710 | ;� ���� ��祣�. ��ਬ ��� �� ᮪�� |
711 | ld h,a ;��祣� �� ���⠫� |
||
22 | dimkam | 712 | ld l,a |
713 | ld b,WIZ_S_SSR |
||
714 | in a,(c) |
||
715 | cp SOCK_ESTABLISHED |
||
519 | dimkam | 716 | jp z,w53_eagain |
22 | dimkam | 717 | ld a,ERR_NOTCONN |
61 | Alone | 718 | jr wiznet_fail ;ret |
22 | dimkam | 719 | w53_read_new1: |
720 | ld b,WIZ_S_RX_H |
||
721 | ld (ix+0),b |
||
722 | in a,(c) |
||
723 | ld (ix+3),a |
||
724 | inc b |
||
725 | in a,(c) |
||
726 | ld (ix+2),a |
||
727 | jp w53_read_min |
||
728 | |||
409 | dimkam | 729 | wiznet_close: |
344 | alone | 730 | wiznet_write: ;a'-᮪��, de-����, hl-������⢮ |
409 | dimkam | 731 | ld (w53_wr_ix),ix |
22 | dimkam | 732 | call w53_valid_socket |
733 | jp z,w53_invalid_socked0 |
||
409 | dimkam | 734 | and 0x02 |
735 | ld a,WIZ_S_SSR |
||
736 | in a,(WIZ_BASE_ADDR) ;�⮯ �� �ண��� 䫠�� |
||
737 | jr nz,wiz_wr_isudp |
||
22 | dimkam | 738 | cp SOCK_ESTABLISHED |
739 | jr z,w53_write1 |
||
409 | dimkam | 740 | wiznet_fail_1 |
344 | alone | 741 | ld a,ERR_NOTCONN ;����� |
61 | Alone | 742 | wiznet_fail: |
22 | dimkam | 743 | ld h,-1 |
409 | dimkam | 744 | ret |
745 | wiz_wr_isudp: |
||
746 | cp SOCK_UDP |
||
747 | jr nc,w53_wr_set_addr |
||
748 | or a |
||
749 | jr nz,wiznet_fail_1 |
||
750 | call w53_open_cmd |
||
751 | w53_wr_set_addr |
||
752 | call w53_cpy_ia2 |
||
753 | w53_wr_ix=$+1 |
||
754 | ld de,0 |
||
755 | call BDOS_preparedepage |
||
756 | call BDOS_setdepage |
||
757 | ld c,WIZ_BASE_ADDR |
||
22 | dimkam | 758 | w53_write1: |
344 | alone | 759 | ld b,WIZ_S_FSR_L ;��ਬ ���� � ���� |
22 | dimkam | 760 | in a,(c) |
761 | dec b |
||
762 | sub l |
||
763 | in a,(c) |
||
764 | sbc a,h |
||
24 | dimkam | 765 | jr nc,w53_wr_count_valid |
766 | ;pop de |
||
61 | Alone | 767 | ;ld h,-1 |
22 | dimkam | 768 | ld a,ERR_EMSGSIZE |
61 | Alone | 769 | jr wiznet_fail ;ret |
22 | dimkam | 770 | w53_wr_count_valid: |
771 | ex de,hl |
||
344 | alone | 772 | push de ;�⮡� ��⮬ �쪮 ��ࠢ��� ������ |
22 | dimkam | 773 | dec de |
774 | push de |
||
775 | pop ix |
||
776 | ld de,-2 |
||
777 | ld b,WIZ_S_TX_L |
||
778 | ld a,WIZ_S_TX_L+1 |
||
779 | w53_wr_loop: |
||
780 | outi |
||
781 | ld b,a |
||
782 | outi |
||
783 | add ix,de |
||
148 | demige | 784 | jr c,w53_wr_loop |
22 | dimkam | 785 | pop hl |
786 | ld b,WIZ_S_WRSR_H |
||
787 | out (c),h |
||
788 | inc b |
||
789 | out (c),l |
||
790 | ld a,Sn_CR_SEND |
||
791 | jp w53_cmd |
||
409 | dimkam | 792 | |
569 | dimkam | 793 | ;w53_ia_buf: |
794 | ; defs 7 |
||
63 | DimkaM | 795 |