A2osX/LIB/LIBTCPIP.S.IP.txt

181 lines
3.0 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
IP.IN ldy #S.IP.PROTOCOL
2017-01-29 21:47:19 +00:00
lda (ZPFrameBase),y
cmp #S.IP.PROTOCOL.ICMP
bne .2
jmp ICMP.IN
.2 cmp #S.IP.PROTOCOL.UDP
bne .3
2017-01-29 21:47:19 +00:00
jmp UDP.IN
.3 cmp #S.IP.PROTOCOL.TCP
bne .9
jmp TCP.IN
2017-01-29 21:47:19 +00:00
.9 lda hFrameIn
>SYSCALL FreeMemA
rts
*--------------------------------------
* In:
* PULLW = Start Offset
* PULLW = End Offset
* Out:
* Y,A = CheckSum
*--------------------------------------
IP.ComputeChecksum
>PULLA
clc
2017-01-29 21:47:19 +00:00
adc ZPFrameBase
sta ZPTmpPtr1
>PULLA
2017-01-29 21:47:19 +00:00
adc ZPFrameBase+1
sta ZPTmpPtr1+1
>PULLA
clc
2017-01-29 21:47:19 +00:00
adc ZPFrameBase
sta TmpOffset
>PULLA
2017-01-29 21:47:19 +00:00
adc ZPFrameBase+1
sta TmpOffset+1
stz IP.CHECKSUM
stz IP.CHECKSUM+1
stz IP.CHECKSUM+2
stz IP.CHECKSUM+3
ldy #2
.1 clc
iny
lda (ZPTmpPtr1),y
adc IP.CHECKSUM
sta IP.CHECKSUM
dey
lda (ZPTmpPtr1),y
adc IP.CHECKSUM+1
sta IP.CHECKSUM+1
bcc .3
inc IP.CHECKSUM+2
bne .3
inc IP.CHECKSUM+3
.3 lda ZPTmpPtr1
clc
adc #2
sta ZPTmpPtr1
bcc .4
inc ZPTmpPtr1+1
.4 cmp TmpOffset
bne .1
lda ZPTmpPtr1+1
cmp TmpOffset+1
bne .1
lda IP.CHECKSUM
clc
adc IP.CHECKSUM+2
eor #$FF
tay
lda IP.CHECKSUM+1
adc IP.CHECKSUM+3
eor #$FF
rts
*--------------------------------------
IP.FillTmpSocketSrcDst
ldy #S.IP.SRC+3
ldx #3
.1 lda (ZPFrameBase),y
sta TmpSocket+S.SOCKET.DST.ADDR,x
dey
dex
bpl .1
ldy #S.IP.DST+3
ldx #3
.2 lda (ZPFrameBase),y
sta TmpSocket+S.SOCKET.SRC.ADDR,x
dey
dex
bpl .2
rts
*--------------------------------------
IP.SetDestMAC ldy #S.IP.DST
2017-01-29 21:47:19 +00:00
lda (ZPFrameBase),y
iny
2017-01-29 21:47:19 +00:00
.1 and (ZPFrameBase),y
iny
cpy #S.IP.DST+4
bne .1
cmp #$FF
bne .3 not a broadcast....
ldy #S.ETH.DSTMAC
2017-01-29 21:47:19 +00:00
.2 sta (ZPFrameBase),y
iny
cpy #S.ETH.DSTMAC+6
bne .2
clc
rts
.3 ldy #S.IP.DST+3
ldx #3
2017-01-29 21:47:19 +00:00
.4 lda (ZPFrameBase),y
eor IPCFG+S.IPCFG.IP,x
and IPCFG+S.IPCFG.MASK,x
bne .6
dey
dex
bpl .4
ldy #S.IP.DST+3 Same network, query ARP for dest IP
ldx #3
2017-01-29 21:47:19 +00:00
.5 lda (ZPFrameBase),y
sta ARP.TmpCache+S.ARPCACHE.IP,x
dey
dex
bpl .5
bra .8
.6 ldx #3 Not Same network, query ARP for GW
.7 lda IPCFG+S.IPCFG.GW,x
sta ARP.TmpCache+S.ARPCACHE.IP,x
dex
bpl .7
.8 jsr ARP.QUERY.I
bcs .99
ldx #5
ldy #S.ETH.DSTMAC+5
.11 lda ARP.TmpCache+S.ARPCACHE.MAC,x
2017-01-29 21:47:19 +00:00
sta (ZPFrameBase),y
dey
dex
bpl .11
clc
.99 rts
*--------------------------------------
MAN
SAVE LIB/LIBTCPIP.S.IP
LOAD LIB/LIBTCPIP.S
ASM