Subversion Repositories NedoOS

Rev

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