LBTCPIP:ARP rewrite

This commit is contained in:
Rémy GIBERT 2016-03-16 08:19:54 +01:00
parent 93fade265f
commit 5a3891650f
9 changed files with 311 additions and 265 deletions

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,7 @@ AUTO 6
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ARP.TIMEOUT .EQ 50 50*100ms = 5 sec. TIMEOUT.MAX .EQ 40 40*100ms = 4 sec.
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
@ -55,7 +55,7 @@ CS.INIT >LDYA L.LIBSTR
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPs),y lda (pPs),y
beq CS.INIT.CACHE beq CS.INIT.DUMP
pha pha
>PUSHW L.DST.IP >PUSHW L.DST.IP
@ -78,33 +78,31 @@ CS.INIT >LDYA L.LIBSTR
.9 lda #SYSMGR.ERRSYN .9 lda #SYSMGR.ERRSYN
sec sec
rts rts
*--------------------------------------
CS.INIT.CACHE >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE
>STYA ZPPTR1 >STYA ZPPTR1
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.ARPCACHE.SIZE ldx #K.ARPCACHE.SIZE
.1 lda (ZPPTR1) .1 lda (ZPPTR1)
* beq .8
ldy #S.ARPCACHE.IP+4 ldy #S.ARPCACHE.IP+4
.2 dey .2 dey
lda (ZPPTR1),y >PUSHB (ZPPTR1),y
>PUSHA
cpy #S.ARPCACHE.IP cpy #S.ARPCACHE.IP
bne .2 bne .2
ldy #S.ARPCACHE.MAC+6 ldy #S.ARPCACHE.MAC+6
.3 dey .3 dey
lda (ZPPTR1),y >PUSHB (ZPPTR1),y
>PUSHA
cpy #S.ARPCACHE.MAC cpy #S.ARPCACHE.MAC
bne .3 bne .3
ldy #S.ARPCACHE.RETRYCNT ldy #S.ARPCACHE.TTL+1
lda (ZPPTR1),y >PUSHB (ZPPTR1),y
>PUSHA dey
>PUSHB (ZPPTR1),y
>PUSHB (ZPPTR1) >PUSHB (ZPPTR1)
@ -112,6 +110,7 @@ CS.INIT.CACHE >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE
phx phx
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
plx plx
lda ZPPTR1 lda ZPPTR1
clc clc
adc #S.ARPCACHE adc #S.ARPCACHE
@ -119,13 +118,13 @@ CS.INIT.CACHE >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE
bcc .4 bcc .4
inc ZPPTR1+1 inc ZPPTR1+1
.4 dex .4 dex
bne .1 bne .1
.8 lda #0 tell TSKMGR that all done ok, but .8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda #ARP.TIMEOUT CS.RUN jsr Init.Timeout
sta TimeOut
.1 lda bCTRLC .1 lda bCTRLC
bne .9 bne .9
@ -135,8 +134,9 @@ CS.RUN lda #ARP.TIMEOUT
bcc .2 success, print & exit bcc .2 success, print & exit
lda TimeOut jsr Wait.TimeOut
beq .9 bcs .9
>SYSCALL SYS.Sleep >SYSCALL SYS.Sleep
bra .1 bra .1
@ -157,14 +157,15 @@ CS.RUN lda #ARP.TIMEOUT
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? bpl .1 is it a TIMER event?
beq .1 no....
lda TimeOut ldy #TimeOut
lda (pData),y
beq .9 beq .9
dec
dec TimeOut sta (pData),y
bra .9 .9 sec do not discard TIMER event
rts
.1 lda (pEvent) .1 lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
@ -189,9 +190,6 @@ CS.DOEVENT lda (pEvent)
sta bCTRLC sta bCTRLC
clc clc
rts rts
.9 sec
rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBTCPIP CS.QUIT lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
@ -200,12 +198,27 @@ CS.QUIT lda hLIBTCPIP
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
ldy #bCTRLC
lda (pData),y
bmi .9
clc
.9 rts
*--------------------------------------
CS.END CS.END
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o" LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d" SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS RET MAC Address IP Address\n" MSG0 >CSTRING "STS TTL MAC Address IP Address\n"
MSG1 >CSTRING "$%h %03d %h:%h:%h:%h:%h:%h %d.%d.%d.%d\n" MSG1 >CSTRING "$%h %5d %h:%h:%h:%h:%h:%h %d.%d.%d.%d\n"
MSG2 >CSTRING "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\n" MSG2 >CSTRING "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START

View File

@ -6,10 +6,11 @@ AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
K.ARPCACHE.SIZE .EQ 10 K.ARPCACHE.SIZE .EQ 16
K.DNSCACHE.SIZE .EQ 10 K.DNSCACHE.SIZE .EQ 10
K.SKTTABLE.SIZE .EQ 64 K.SKTTABLE.SIZE .EQ 64
K.ETH.FRAME.LEN .EQ 1514 K.ETH.FRAME.LEN .EQ 1514
K.ARP.TTL .EQ 600
K.IP.TTL .EQ 64 K.IP.TTL .EQ 64
K.DNS.MAXLEN .EQ 64 K.DNS.MAXLEN .EQ 64
K.DYNPORT.START .EQ 49152 K.DYNPORT.START .EQ 49152
@ -94,13 +95,14 @@ S.IPCFG.DOMAIN .EQ 48 1+35 char PSTR
S.IPCFG .EQ 128 S.IPCFG .EQ 128
*-------------------------------------- *--------------------------------------
S.ARPCACHE.STATUS .EQ 0 S.ARPCACHE.STATUS .EQ 0
S.ARPCACHE.STATUS.PENDING .EQ 64 S.ARPCACHE.STATUS.PENDING .EQ 1
S.ARPCACHE.STATUS.STATIC .EQ 2
S.ARPCACHE.STATUS.RESOLVED .EQ 128 S.ARPCACHE.STATUS.RESOLVED .EQ 128
S.ARPCACHE.RETRYCNT .EQ 1 S.ARPCACHE.TTL .EQ 2
S.ARPCACHE.IP .EQ 2 S.ARPCACHE.IP .EQ 6
S.ARPCACHE.MAC .EQ 6 S.ARPCACHE.MAC .EQ 10
* *
S.ARPCACHE .EQ 12 S.ARPCACHE .EQ 16
*-------------------------------------- *--------------------------------------
S.DNSCACHE.STATUS .EQ 0 S.DNSCACHE.STATUS .EQ 0
S.DNSCACHE.STATUS.PENDING .EQ 1 S.DNSCACHE.STATUS.PENDING .EQ 1

View File

@ -5,6 +5,215 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
.1 dex
stz ARP.CACHE,x
txa
bne .1
clc
rts
*--------------------------------------
* ARP.QUERY
* In:
* PULLW PTR to IP
* PULLW PTR to MAC (to fill)
* Out:
* CC: hit: MAC filled
* CS: missed
*--------------------------------------
ARP.QUERY >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
ARP.QUERY.I jsr ARP.FIND.BY.IP
bcs ARP.REQUEST
lda (ZPCachePtr) get status...
bpl .9 Pending...
lda ZPCachePtr
clc
adc S.ARPCACHE.MAC
sta ZPCachePtr
bcc .1
inc ZPCachePtr+1
.1 ldy #5
.2 lda (ZPCachePtr),y
sta (ZPPtrMAC),y
dey
bpl .2
clc
rts
.9 lda #ERR.ARPPENDING
sec
rts
*--------------------------------------
ARP.REQUEST ldy #3
.1 lda (ZPPtrIP),y
sta ARP.REQ.TPA,y
sta ARP.TmpCache+S.ARPCACHE.IP,y
dey
bpl .1
>PUSHW L.ARP.REQ
ldx #DEVMGR.NET.SEND
jsr NetDevJmp
bcs .9
lda #S.ARPCACHE.STATUS.PENDING
jsr ARP.ADD.I ZPPtrIP still pointing IP
lda #ERR.ARPPENDING
sec
.9 rts
*--------------------------------------
* ARP.ADD
* In:
* PULLW PTR to IP
* PULLW PTR to MAC
*--------------------------------------
ARP.ADD >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
lda #S.ARPCACHE.STATUS.RESOLVED+S.ARPCACHE.STATUS.STATIC
ARP.ADD.I sta ARP.TmpCache
jsr ARP.FIND.BY.IP
bcc .5
jsr DNS.FIND.FREE
.1 lda ARP.CACHE,x get status
beq .7 empty ARP cache entry
phx
ldy #0
.2 lda (ZPPtrIP),y
cmp ARP.CACHE+S.ARPCACHE.IP,x
bne .4
inx
iny
cpy #4
bne .2
plx
bra .7 same IP,update MAC
.4 pla get back index in ARP.CACHE
clc
adc #S.ARPCACHE
cmp #K.ARPCACHE.SIZE*S.ARPCACHE
beq .5 Cache is full ?
tax
bra .1
.5 bra *
ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE
.6 lda ARP.CACHE+S.ARPCACHE-1,x
sta ARP.CACHE-1,x
dex
bne .6
ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE
.7 lda Status
sta ARP.CACHE,x mark ARP entry Status
lda #K.ARP.TTL
sta ARP.CACHE+S.ARPCACHE.TTL,x
lda /K.ARP.TTL
sta ARP.CACHE+S.ARPCACHE.TTL+1,x
ldy #0
phx
.8 lda (ZPPtrIP),y store IP in cache
sta ARP.CACHE+S.ARPCACHE.IP,x
iny
inx
cpy #4
bne .8
plx
lda Status
bpl .82 no MAC if "pending"
ldy #0
.81 lda (ZPPtrMAC),y store MAC in cache
sta ARP.CACHE+S.ARPCACHE.MAC,x
iny
inx
cpy #6
bne .81
.82 clc
rts
*--------------------------------------
* ARP.GETCACHE
* Out:
* Y,A = PTR to ARP.CACHE
*--------------------------------------
ARP.GETCACHE >LDYA L.ARP.CACHE
clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
ARP.RESOLVE ldy #S.IP.DST
lda (ZPFrameBase1),y
iny
.1 and (ZPFrameBase1),y
iny
cpy #S.IP.DST+4
bne .1
cmp #$FF
bne .3 not a broadcast....
ldy #S.ETH.DSTMAC
.2 sta (ZPFrameBase1),y
iny
cpy #S.ETH.DSTMAC+6
bne .2
clc
rts
.3 ldy #S.IP.DST+3
ldx #3
.4 lda (ZPFrameBase1),y
eor IPCFG+S.IPCFG.IP,x
and IPCFG+S.IPCFG.MASK,x
bne .5
dey
dex
bpl .4
lda ZPFrameBase1 Same network, query ARP for dest IP
clc
adc #S.IP.DST
sta ZPPtrIP
lda ZPFrameBase1+1
adc /S.IP.DST
sta ZPPtrIP+1
bra .6
.5 lda L.IPCFG Not Same network, query ARP for GW
clc
adc #S.IPCFG.GW
sta ZPPtrIP
lda L.IPCFG+1
adc /S.IPCFG.GW
sta ZPPtrIP+1
.6 lda ZPFrameBase1
clc
adc #S.ETH.DSTMAC
sta ZPPtrMAC
lda ZPFrameBase1+1
adc /S.ETH.DSTMAC
sta ZPPtrMAC+1
*--------------------------------------
*--------------------------------------
*--------------------------------------
ARP.IN ldy #S.ARP.TPA ARP.IN ldy #S.ARP.TPA
ldx #S.IPCFG.IP ldx #S.IPCFG.IP
@ -71,228 +280,69 @@ ARP.IN.REP lda #S.ARP.SHA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
ARP.EXPIRE ARP.EXPIRE >LDYA L.ARP.CACHE
>STYA ZPCachePtr
clc
rts ldx #K.ARPCACHE.SIZE
*--------------------------------------
* ARP.CLEAR .1 lda (ZPCachePtr)
*-------------------------------------- beq .7
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
.1 stz ARP.CACHE-1,x ldy #S.ARPCACHE.TTL
dex sec
bne .1 lda (ZPCachePtr),y
clc sbc #1
rts sta (ZPCachePtr),y
*--------------------------------------
* ARP.QUERY
* In:
* PULLW PTR to IP
* PULLW PTR to MAC (to fill)
* Out:
* CC: hit: MAC filled
* CS: missed
*--------------------------------------
ARP.QUERY >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
jmp ARP.QUERY.I
*--------------------------------------
* ARP.ADD
* In:
* PULLW PTR to IP
* PULLW PTR to MAC
*--------------------------------------
ARP.ADD >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
lda #S.ARPCACHE.STATUS.RESOLVED
jmp ARP.ADD.I
*--------------------------------------
* ARP.GETCACHE
* Out:
* Y,A = PTR to ARP.CACHE
*--------------------------------------
ARP.GETCACHE >LDYA L.ARP.CACHE
clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
ARP.RESOLVE ldy #S.IP.DST
lda (ZPFrameBase1),y
iny iny
.1 and (ZPFrameBase1),y lda (ZPCachePtr),y
iny sbc #0
cpy #S.IP.DST+4 sta (ZPCachePtr),y
bne .1 bcs .2
cmp #$FF
bne .3 not a broadcast....
ldy #S.ETH.DSTMAC lda #0
.2 sta (ZPFrameBase1),y sta (ZPCachePtr)
iny
cpy #S.ETH.DSTMAC+6
bne .2
clc
rts
.3 ldy #S.IP.DST+3 .2 lda ZPCachePtr
ldx #3
.4 lda (ZPFrameBase1),y
eor IPCFG+S.IPCFG.IP,x
and IPCFG+S.IPCFG.MASK,x
bne .5
dey
dex
bpl .4
lda ZPFrameBase1 Same network, query ARP for dest IP
clc
adc #S.IP.DST
sta ZPPtrIP
lda ZPFrameBase1+1
adc /S.IP.DST
sta ZPPtrIP+1
bra .6
.5 lda L.IPCFG Not Same network, query ARP for GW
clc
adc #S.IPCFG.GW
sta ZPPtrIP
lda L.IPCFG+1
adc /S.IPCFG.GW
sta ZPPtrIP+1
.6 lda ZPFrameBase1
clc
adc #S.ETH.DSTMAC
sta ZPPtrMAC
lda ZPFrameBase1+1
adc /S.ETH.DSTMAC
sta ZPPtrMAC+1
*--------------------------------------
ARP.QUERY.I ldx #0
.1 phx
lda ARP.CACHE,x
beq .5 empty ARP Cache entry, try next...
ldy #0
.2 lda ARP.CACHE+S.ARPCACHE.IP,x
cmp (ZPPtrIP),y
bne .5 wrong IP, try next...
inx
iny
cpy #4
bne .2
plx
lda ARP.CACHE,x get back status
bpl .4 Pending...
ldy #0 already resolved, get MAC
.3 lda ARP.CACHE+S.ARPCACHE.MAC,x
sta (ZPPtrMAC),y
inx
iny
cpy #6
bne .3
clc
rts
.4 inc ARP.CACHE+S.ARPCACHE.RETRYCNT,x Pending, increase Retry Count
bne .41
stz ARP.CACHE,x reached max retry,mark as free
.41 sec
rts
.5 pla
clc clc
adc #S.ARPCACHE adc #S.ARPCACHE
tax sta ZPCachePtr
cmp #K.ARPCACHE.SIZE*S.ARPCACHE bcc .3
inc ZPCachePtr+1
.3 dex
bne .1 bne .1
rts
*-------------------------------------- *--------------------------------------
ARP.REQUEST.I ldy #3 ARP.FIND.BY.IP >LDYA L.ARP.CACHE
.1 lda (ZPPtrIP),y >STYA ZPCachePtr
sta ARP.REQ.TPA,y
dey
bpl .1
>PUSHW L.ARP.REQ
ldx #DEVMGR.NET.SEND
jsr NetDevJmp
bcs .9 lda #K.ARPCACHE.SIZE
sta TmpOffset
jsr ARP.ADD.PENDING ZPPtrIP still pointing IP .1 lda (ZPCachePtr)
beq .7
sec
.9 rts
*--------------------------------------
ARP.ADD.PENDING lda #S.ARPCACHE.STATUS.PENDING
ARP.ADD.I sta Status ldy #S.ARPCACHE.IP
lda (ZPCachePtr),y
ldx #0
.1 lda ARP.CACHE,x get status
beq .7 empty ARP cache entry
phx
ldy #0
.2 lda (ZPPtrIP),y
cmp ARP.CACHE+S.ARPCACHE.IP,x
bne .4
inx
iny
cpy #4
bne .2
plx
bra .7 same IP,update MAC
.4 pla get back index in ARP.CACHE .7 lda ZPCachePtr
clc clc
adc #S.ARPCACHE adc #S.ARPCACHE
cmp #K.ARPCACHE.SIZE*S.ARPCACHE sta ZPCachePtr
beq .5 Cache is full ? bcc .8
tax inc ZPCachePtr+1
bra .1
.5 ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE .8 dec TmpOffset
bne .1
.6 lda ARP.CACHE+S.ARPCACHE-1,x
sta ARP.CACHE-1,x sec
dex
bne .6
ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE
.7 lda Status
sta ARP.CACHE,x mark ARP entry Status
inx
stz ARP.CACHE,x Init retry count
inx
ldy #0
.8 lda (ZPPtrIP),y store IP in cache
sta ARP.CACHE,x
inx
iny
cpy #4
bne .8
lda Status
bpl .82 no MAC if "pending"
ldy #0
.81 lda (ZPPtrMAC),y store MAC in cache
sta ARP.CACHE,x
inx
iny
cpy #6
bne .81
.82 clc
rts rts
*-------------------------------------- *--------------------------------------
ARP.FIND.FREE
*--------------------------------------
MAN MAN
SAVE LIB/LIBTCPIP.S.ARP SAVE LIB/LIBTCPIP.S.ARP
LOAD LIB/LIBTCPIP.S LOAD LIB/LIBTCPIP.S

View File

@ -28,7 +28,7 @@ ICMP.IN ldy #S.ICMP.TYPE
ldx #3 ldx #3
.2 lda (ZPFrameBase1),y .2 lda (ZPFrameBase1),y
sta TmpIP,x sta ARP.TmpCache+S.ARPCACHE.IP,x
dey dey
dex dex
bpl .2 bpl .2
@ -36,7 +36,7 @@ ICMP.IN ldy #S.ICMP.TYPE
ldy #S.IP.DST+3 ldy #S.IP.DST+3
ldx #3 ldx #3
.3 lda TmpIP,x .3 lda ARP.TmpCache+S.ARPCACHE.IP,x
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
dey dey
dex dex
@ -46,14 +46,13 @@ ICMP.IN ldy #S.ICMP.TYPE
ldx #5 ldx #5
.4 lda (ZPFrameBase1),y .4 lda (ZPFrameBase1),y
sta TmpMAC,x sta ARP.TmpCache+S.ARPCACHE.MAC,x
dey dey
dex dex
bpl .4 bpl .4
>PUSHW L.TmpMAC lda #S.ARPCACHE.STATUS.RESOLVED
>PUSHW L.TmpIP jsr ARP.ADD.I
jsr ARP.ADD
jmp SEND.ICMP.FRAME.I jmp SEND.ICMP.FRAME.I
.9 sec .9 sec

View File

@ -76,19 +76,7 @@ SKT.NEW >PULLW ZPTmpPtr1
dey dey
bpl .7 bpl .7
lda ZPTmpPtr1 ldx TmpOffset
clc
adc #S.SOCKET.DST.ADDR
sta ZPPtrIP
lda ZPTmpPtr1+1
adc /S.SOCKET.DST.ADDR
sta ZPPtrIP+1
lda (ZPPtrIP)
beq .8
jsr ARP.REQUEST.I
.8 ldx TmpOffset
>LDYA ZPTmpPtr3 >LDYA ZPTmpPtr3
clc clc
rts rts

View File

@ -95,8 +95,6 @@ L.DNS.MSG .DA DNS.MSG
L.ARP.CACHE .DA ARP.CACHE L.ARP.CACHE .DA ARP.CACHE
L.DNS.CACHE .DA DNS.CACHE L.DNS.CACHE .DA DNS.CACHE
L.SKT.TABLE .DA SKT.TABLE L.SKT.TABLE .DA SKT.TABLE
L.TmpMAC .DA TmpMAC
L.TmpIP .DA TmpIP
L.TmpSocket .DA TmpSocket L.TmpSocket .DA TmpSocket
L.TCP.MSG .DA TCP.MSG L.TCP.MSG .DA TCP.MSG
.DA 0 .DA 0
@ -340,8 +338,7 @@ hDNSSocket2 .BS 1
DNS.HostNameLen .BS 1 DNS.HostNameLen .BS 1
DNS.HostName .BS K.DNS.MAXLEN+1 DNS.HostName .BS K.DNS.MAXLEN+1
DNS.TmpCache .BS S.DNSCACHE DNS.TmpCache .BS S.DNSCACHE
TmpMAC .BS 6 ARP.TmpCache .BS S.ARP
TmpIP .BS 4
TmpDWord .BS 4 TmpDWord .BS 4
TmpSocket .BS S.SOCKET TmpSocket .BS S.SOCKET
hFrame1 .BS 1 hFrame1 .BS 1

View File

@ -12,11 +12,8 @@ AUTO 6
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ZPFrameBase1 .EQ ZPBIN ZPIPCfgPtr .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2 ZPIPDevPtr .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4
ZPIPCfgPtr .EQ ZPBIN+12
ZPIPDevPtr .EQ ZPBIN+14
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------