A2osX/LIB/LIBETALK.S.AARP.txt

387 lines
7.0 KiB
Plaintext
Raw Normal View History

2019-03-11 07:01:40 +00:00
NEW
PREFIX
AUTO 4,1
.LIST OFF
*/--------------------------------------
* # AARP.Clear
* Clear AARP Cache
* **In:**
* ## RETURN VALUE
*\--------------------------------------
AARP.Clear ldx #K.AARPCACHE.SIZE*S.AARPCACHE
.1 stz AARP.CACHE-1,x
dex
bne .1
clc
rts
*/--------------------------------------
* # AARP.Query
* Query AARP Cache and returns HW address
* **In:**
* PUSHW PTR to MAC (to fill)
* PUSHW PTR to ADDR
* ## RETURN VALUE
* CC: hit: MAC filled
* CS: missed
*\--------------------------------------
AARP.Query >PULLW ZPPtrADDR ADDR
>PULLW ZPPtrMAC MAC
ldy #3
.1 lda (ZPPtrADDR),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,y
dey
bpl .1
jsr AARP.QUERY.I
bcs .9
ldy #5
.2 lda AARP.TmpCache+S.AARPCACHE.MAC,y
sta (ZPPtrMAC),y
dey
bpl .2
clc
.9 rts
*/--------------------------------------
* # AARP.Add
* Add a static AARP cache record
* **In:**
* PUSHW PTR to MAC
* PUSHW PTR to IP
*\--------------------------------------
AARP.Add >PULLW ZPPtrADDR ADDR
>PULLW ZPPtrMAC MAC
stz AARP.TmpCache+S.AARPCACHE.TTL
stz AARP.TmpCache+S.AARPCACHE.TTL+1
ldy #3
.1 lda (ZPPtrADDR),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,y
dey
bpl .1
ldy #5
.2 lda (ZPPtrMAC),y
sta AARP.TmpCache+S.AARPCACHE.MAC,y
dey
bpl .2
lda #S.AARPCACHE.S.RESOLVED+S.AARPCACHE.S.STATIC
AARP.ADD.I sta AARP.TmpCache
jsr AARP.FIND.BY.ADDR
bcc .1
jsr AARP.FIND.FREE
.1 ldy #S.AARPCACHE-1
.2 lda AARP.TmpCache,y
sta (ZPCachePtr),y
dey
bpl .2
clc
rts
*/--------------------------------------
* # AARP.GetCache
* Return a Ptr to AARP Cache Table
* **In:**
* ## RETURN VALUE
* Y,A = PTR to AARP.CACHE
*\--------------------------------------
AARP.GetCache >LDYA L.AARP.CACHE
clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
AARP.AddFromFrameInPtr
ldy #S.DDP2.SRC.NET
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+1,x
iny
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+2,x
iny
iny
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+3,x
ldy #S.ETH.SRCMAC+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.MAC,x
dey
dex
bpl .2
lda #K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
lda /K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL+1
lda #S.AARPCACHE.S.RESOLVED
jmp AARP.ADD.I
*--------------------------------------
AARP.IN bra .10
ldy #S.AARP.TPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
cmp ETKCFG+S.ETKCFG.ADDR,x
bne AARP.IN.EXIT
dey
dex
bpl .1
.10 ldy #S.AARP.OPERATION+1 HI byte
lda (ZPFrameInPtr),y
cmp #S.AARP.OPERATION.REQ
beq AARP.IN.REQ
cmp #S.AARP.OPERATION.REP
beq AARP.IN.REP
AARP.IN.EXIT lda hFrameIn
beq .8
stz hFrameIn
>SYSCALL FreeMem
.8 clc
rts
AARP.IN.REQ ldy #S.AARP.SPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
sta AARP.REP.TPA,x
dey
dex
bpl .1
ldy #S.AARP.SHA+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.REP.DSTMAC,x
sta AARP.REP.THA,x
dey
dex
bpl .2
>LDYA L.AARP.REP
jsr AARP.Send
bra AARP.IN.EXIT
AARP.IN.REP lda #K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
lda /K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL+1
ldy #S.AARP.SPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,x
dey
dex
bpl .1
ldy #S.AARP.SHA+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.MAC,x
dey
dex
bpl .2
lda #S.AARPCACHE.S.RESOLVED
jsr AARP.ADD.I
jmp AARP.IN.EXIT
*--------------------------------------
AARP.QUERY.I jsr AARP.FIND.BY.ADDR
bcs .3 send an AARP request
lda (ZPCachePtr) get status...
bpl .9 Pending...
ldy #S.AARPCACHE.MAC
.2 lda (ZPCachePtr),y
sta AARP.TmpCache,y
iny
cpy #S.AARPCACHE.MAC+6
bne .2
ldy #S.AARPCACHE.TTL
lda #K.AARP.TTL
sta (ZPCachePtr),y
iny
lda /K.AARP.TTL
sta (ZPCachePtr),y
clc
rts
.3 ldx #3
.4 lda AARP.TmpCache+S.AARPCACHE.ADDR,x
sta AARP.REQ.TPA,x
dex
bpl .4
>LDYA L.AARP.REQ
jsr AARP.Send
bcs .99
lda #K.AARP.PENDING.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
stz AARP.TmpCache+S.AARPCACHE.TTL+1
lda #S.AARPCACHE.S.PENDING
jsr AARP.ADD.I
.9 lda #ERR.AARP.PENDING
sec
.99 rts
*--------------------------------------
AARP.FIND.BY.ADDR
>LDYA L.AARP.CACHE
>STYA ZPCachePtr
lda #K.AARPCACHE.SIZE
sta TmpOffset
.1 lda (ZPCachePtr)
beq .3
ldx #3
ldy #S.AARPCACHE.ADDR+3
.2 lda AARP.TmpCache+S.AARPCACHE.ADDR,x
cmp (ZPCachePtr),y
bne .3
dey
dex
bpl .2
clc
rts
.3 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .8
inc ZPCachePtr+1
.8 dec TmpOffset
bne .1
sec
rts
*--------------------------------------
AARP.FIND.FREE >LDYA L.AARP.CACHE
>STYA ZPCachePtr
lda #$ff
sta TmpDWord
sta TmpDWord+1
ldx #K.AARPCACHE.SIZE
.1 lda (ZPCachePtr)
beq .8
bpl .6
ldy #S.AARPCACHE.TTL
lda (ZPCachePtr),y
sec
sbc TmpDWord
iny
lda (ZPCachePtr),y
sbc TmpDWord+1
bcc .6
lda (ZPCachePtr),y
sta TmpDWord+1
dey
lda (ZPCachePtr),y
sta TmpDWord
>LDYA ZPCachePtr
>STYA ZPTmpPtr1 save lowest TTL slot ...
.6 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .7
inc ZPCachePtr+1
.7 dex
bne .1
>LDYA ZPTmpPtr1
>STYA ZPCachePtr
lda #0
sta (ZPCachePtr)
.8 clc
rts
*--------------------------------------
AARP.EXPIRE >LDYA L.AARP.CACHE
>STYA ZPCachePtr
ldx #K.AARPCACHE.SIZE
.1 lda (ZPCachePtr)
beq .2
and #S.AARPCACHE.S.STATIC
bne .2
ldy #S.AARPCACHE.TTL
sec
lda (ZPCachePtr),y
sbc #1
sta (ZPCachePtr),y
iny
lda (ZPCachePtr),y
sbc #0
sta (ZPCachePtr),y
bcs .2
lda #0
sta (ZPCachePtr)
.2 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .3
inc ZPCachePtr+1
.3 dex
bne .1
rts
*--------------------------------------
AARP.Send >STYA IOCTL+S.IOCTL.BUFPTR
>LDYAI S.AARP
>STYA IOCTL+S.IOCTL.BYTECNT
jmp FRM.Send.IOCTL
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.AARP
LOAD USR/SRC/LIB/LIBETALK.S
ASM