A2osX/LIB/LIBTCPIP.S.FRM.txt
2016-03-16 17:37:02 +01:00

306 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* Out:
* Y,A = Frame PTR
* X = hMem
*--------------------------------------
NEW.ICMP.FRAME jsr NEW.IP.FRAME
bcs .9
ldy #S.IP.PROTOCOL
lda #S.IP.PROTOCOL.ICMP
sta (ZPFrameBase1),y
>LDYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
* Out:
* Y,A = Frame PTR
* X = hMem
*--------------------------------------
NEW.TCP.FRAME jsr NEW.IP.FRAME
bcs .9
ldy #S.IP.PROTOCOL
lda #S.IP.PROTOCOL.TCP
sta (ZPFrameBase1),y
>LDYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
* Out:
* Y,A = Frame PTR
* X = hMem
*--------------------------------------
NEW.UDP.FRAME jsr NEW.IP.FRAME
bcs .9
ldy #S.IP.PROTOCOL
lda #S.IP.PROTOCOL.UDP
sta (ZPFrameBase1),y
>LDYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
* Out:
* Y,A = Frame PTR
* X = hMem
*--------------------------------------
NEW.IP.FRAME jsr NEW.ETH.FRAME
bcs .9
ldy #S.ETH.ETHERTYPE
lda /S.ETH.ETHERTYPE.IP
sta (ZPFrameBase1),y
iny
lda #S.ETH.ETHERTYPE.IP
sta (ZPFrameBase1),y
ldy #S.IP.V.IHL.DSCP.ECN
lda #$45
sta (ZPFrameBase1),y
iny
lda #$0
sta (ZPFrameBase1),y
ldy #S.IP.IDENTIFICATION
sta (ZPFrameBase1),y
inc
iny
sta (ZPFrameBase1),y
dec
ldy #S.IP.FRAGMENT.FLAGS
sta (ZPFrameBase1),y
iny
sta (ZPFrameBase1),y
ldy #S.IP.TTL
lda #K.IP.TTL
sta (ZPFrameBase1),y
>LDYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
* Out:
* Y,A = Frame PTR
* X = hMem
*--------------------------------------
NEW.ARP.FRAME jsr NEW.ETH.FRAME
bcs .9
ldy #S.ETH.ETHERTYPE
lda /S.ETH.ETHERTYPE.ARP
sta (ZPFrameBase1),y
iny
lda #S.ETH.ETHERTYPE.ARP
sta (ZPFrameBase1),y
ldy #S.ARP.HTYPE
lda #0
sta (ZPFrameBase1),y
iny
lda #1
sta (ZPFrameBase1),y
iny
lda #8
sta (ZPFrameBase1),y
iny
lda #0
sta (ZPFrameBase1),y
iny
lda #6
sta (ZPFrameBase1),y
iny
lda #4
sta (ZPFrameBase1),y
>LDYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .9
>STYA ZPFrameBase1
clc
.9 rts
*--------------------------------------
SEND.ICMP.FRAME >PULLW ZPFrameBase1
jsr FRM.GetLen1
SEND.ICMP.FRAME.I
>PUSHW ZPFrameLen1
>PUSHWI S.ICMP.TYPE-2
ldy #S.ICMP.CHECKSUM
lda #0
sta (ZPFrameBase1),y
iny
sta (ZPFrameBase1),y
jsr IP.ComputeChecksum
phy
ldy #S.ICMP.CHECKSUM
sta (ZPFrameBase1),y
iny
pla
sta (ZPFrameBase1),y
bra SEND.IP.FRAME.I
*--------------------------------------
SEND.TCP.FRAME >PULLW ZPFrameBase1
jsr FRM.GetLen1
SEND.TCP.FRAME.I
bra SEND.IP.FRAME.I
*--------------------------------------
SEND.UDP.FRAME >PULLW ZPFrameBase1
jsr FRM.GetLen1
SEND.UDP.FRAME.I
ldy #S.UDP.LENGTH+1
lda ZPFrameLen1
sec
sbc #S.IP-2
sta (ZPFrameBase1),y
dey
lda ZPFrameLen1+1
sbc /S.IP-2
sta (ZPFrameBase1),y
bra SEND.IP.FRAME.I
*--------------------------------------
SEND.IP.FRAME >PULLW ZPFrameBase1
jsr FRM.GetLen1
SEND.IP.FRAME.I ldx #3
ldy #S.IP.SRC+3
.10 lda IPCFG+S.IPCFG.IP,x
sta (ZPFrameBase1),y
dey
dex
bpl .10
ldy #S.IP.TOTAL.LENGTH+1
lda ZPFrameLen1
sec
sbc #S.ETH-2
sta (ZPFrameBase1),y
dey
lda ZPFrameLen1+1
sbc /S.ETH-2
sta (ZPFrameBase1),y
lda #0
ldy #S.IP.HDR.CHECKSUM
sta (ZPFrameBase1),y
iny
sta (ZPFrameBase1),y
stz IP.CHECKSUM RESET.IP.CHECKSUM
stz IP.CHECKSUM+1
clc
ldy #S.IP.V.IHL.DSCP.ECN
ldx #10 10 words for IP Header
.1 lda (ZPFrameBase1),y
adc IP.CHECKSUM
sta IP.CHECKSUM
iny
lda (ZPFrameBase1),y
adc IP.CHECKSUM+1
sta IP.CHECKSUM+1
iny
dex
bne .1
ldy #S.IP.HDR.CHECKSUM
lda IP.CHECKSUM
adc #0
eor #$FF
sta (ZPFrameBase1),y
iny
lda IP.CHECKSUM+1
adc #0
eor #$FF
sta (ZPFrameBase1),y
ldy #S.IP.PROTOCOL
lda (ZPFrameBase1),y
cmp #S.IP.PROTOCOL.TCP
bne .3
jsr TCP.ComputeChecksum
bra .8
.3 cmp #S.IP.PROTOCOL.UDP
bne .8
jsr UDP.ComputeChecksum
.8 lda DevFlags
and #S.DEVINFO.NET.FLAGS.ARPOFFLOAD
bne .81
jsr ARP.RESOLVE
bcs .9
.81 >PUSHW ZPFrameBase1
ldx #DEVMGR.NET.SEND
jmp NetDevJmp
.9 rts
*--------------------------------------
SEND.ARP.FRAME >PUSHW ZPFrameBase1
ldx #DEVMGR.NET.SEND
jmp NetDevJmp
*--------------------------------------
SEND.ETH.FRAME >PUSHW ZPFrameBase1
ldx #DEVMGR.NET.SEND
jmp NetDevJmp
*--------------------------------------
RCVD.FRAME >PULLW ZPFrameBase1
bra *
*--------------------------------------
RCVD.FRAMEA sta hFrame1
>SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1
jsr FRM.GetLen1
ldy #S.ETH.ETHERTYPE
lda (ZPFrameBase1),y
tax
iny
lda (ZPFrameBase1),y
cmp #S.ETH.ETHERTYPE.ARP
bne .1
cpx /S.ETH.ETHERTYPE.ARP
bne .1
jmp ARP.IN
.1 cmp #S.ETH.ETHERTYPE.IP
bne .9
cpx /S.ETH.ETHERTYPE.IP
bne .9
jmp IP.IN
.9 sec
rts
*--------------------------------------
FRM.GetLen1 lda (ZPFrameBase1) Get Frame Len
sta ZPFrameLen1
ldy #1
lda (ZPFrameBase1),y
sta ZPFrameLen1+1
rts
*--------------------------------------
MAN
SAVE LIB/LIBTCPIP.S.FRM
LOAD LIB/LIBTCPIP.S
ASM