2016-01-16 22:04:22 +00:00
|
|
|
|
PR#3
|
|
|
|
|
PREFIX /A2OSX.SRC
|
2017-01-30 21:03:12 +00:00
|
|
|
|
LOMEM $A00
|
2016-01-16 22:04:22 +00:00
|
|
|
|
INC 1
|
|
|
|
|
AUTO 6
|
|
|
|
|
.LIST OFF
|
2017-01-31 16:40:37 +00:00
|
|
|
|
*--------------------------------------
|
2017-01-30 16:30:39 +00:00
|
|
|
|
* #FRM.NewA
|
|
|
|
|
* ##In:
|
|
|
|
|
* A = S.IP.PROTOCOL.???
|
|
|
|
|
* ##Out:
|
2016-01-16 22:04:22 +00:00
|
|
|
|
* Y,A = Frame PTR
|
|
|
|
|
* X = hMem
|
2017-01-31 16:40:37 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
FRM.NewA sta .2+1
|
2017-01-30 16:30:39 +00:00
|
|
|
|
>PUSHWI K.ETH.FRAME.LEN
|
2016-03-27 21:06:56 +00:00
|
|
|
|
>PUSHBI S.MEM.F.INIT0
|
2016-10-24 15:54:43 +00:00
|
|
|
|
>SYSCALL GetMem
|
2016-01-16 22:04:22 +00:00
|
|
|
|
bcs .9
|
2017-01-30 16:30:39 +00:00
|
|
|
|
|
2017-01-31 16:40:37 +00:00
|
|
|
|
stx hFrameOut
|
|
|
|
|
>STYA ZPFrameOutPtr
|
|
|
|
|
|
2016-04-18 20:16:54 +00:00
|
|
|
|
lda DevFlags
|
2017-01-26 21:57:35 +00:00
|
|
|
|
and #S.DEVSTAT.NET.FLAGS.IPOFFLOAD
|
2017-01-31 16:40:37 +00:00
|
|
|
|
bne .1
|
2016-04-18 20:16:54 +00:00
|
|
|
|
|
2016-01-16 22:04:22 +00:00
|
|
|
|
ldy #S.ETH.ETHERTYPE
|
|
|
|
|
lda /S.ETH.ETHERTYPE.IP
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
iny
|
|
|
|
|
lda #S.ETH.ETHERTYPE.IP
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
|
|
|
|
ldy #S.IP.V.IHL.DSCP.ECN
|
|
|
|
|
lda #$45
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
2017-01-31 16:40:37 +00:00
|
|
|
|
* iny
|
|
|
|
|
* lda #$0
|
|
|
|
|
* sta (ZPFrameOutPtr),y
|
|
|
|
|
|
|
|
|
|
* ldy #S.IP.IDENTIFICATION
|
|
|
|
|
* sta (ZPFrameOutPtr),y
|
|
|
|
|
* inc
|
|
|
|
|
* iny
|
|
|
|
|
* sta (ZPFrameOutPtr),y
|
|
|
|
|
* dec
|
|
|
|
|
* ldy #S.IP.FRAGMENT.FLAGS
|
|
|
|
|
* sta (ZPFrameOutPtr),y
|
|
|
|
|
* iny
|
|
|
|
|
* sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
|
|
|
|
ldy #S.IP.TTL
|
|
|
|
|
lda #K.IP.TTL
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
|
|
|
|
|
.1 ldy #S.IP.PROTOCOL
|
|
|
|
|
.2 lda #$ff
|
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
|
|
|
|
|
|
2016-01-16 22:04:22 +00:00
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
2017-01-31 16:40:37 +00:00
|
|
|
|
FRM.SendICMP >PUSHW ZPFrameOutLen
|
2016-03-13 22:09:00 +00:00
|
|
|
|
>PUSHWI S.ICMP.TYPE-2
|
|
|
|
|
|
|
|
|
|
ldy #S.ICMP.CHECKSUM
|
|
|
|
|
lda #0
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
iny
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2016-01-16 22:04:22 +00:00
|
|
|
|
jsr IP.ComputeChecksum
|
|
|
|
|
|
|
|
|
|
phy
|
|
|
|
|
ldy #S.ICMP.CHECKSUM
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
iny
|
|
|
|
|
pla
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
2017-01-30 16:30:39 +00:00
|
|
|
|
bra FRM.SendIP
|
2016-01-16 22:04:22 +00:00
|
|
|
|
*--------------------------------------
|
2017-01-30 16:30:39 +00:00
|
|
|
|
FRM.SendTCP
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2017-01-30 16:30:39 +00:00
|
|
|
|
bra FRM.SendIP
|
2016-01-16 22:04:22 +00:00
|
|
|
|
*--------------------------------------
|
2017-01-31 16:40:37 +00:00
|
|
|
|
FRM.SendUDP lda ZPFrameOutLen
|
2016-01-16 22:04:22 +00:00
|
|
|
|
sec
|
2016-03-13 22:09:00 +00:00
|
|
|
|
sbc #S.IP-2
|
2017-01-31 16:40:37 +00:00
|
|
|
|
|
|
|
|
|
ldy #S.UDP.LENGTH+1
|
|
|
|
|
sta (ZPFrameOutPtr),y
|
|
|
|
|
|
|
|
|
|
lda ZPFrameOutLen+1
|
2016-03-13 22:09:00 +00:00
|
|
|
|
sbc /S.IP-2
|
2017-01-31 16:40:37 +00:00
|
|
|
|
|
|
|
|
|
dey
|
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
*--------------------------------------
|
2017-01-30 16:30:39 +00:00
|
|
|
|
FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
|
2016-04-18 20:16:54 +00:00
|
|
|
|
ldy #S.IP.SRC+3 for proper UDP/TCP CRC calculation
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
2016-03-20 22:16:01 +00:00
|
|
|
|
.1 lda IPCFG+S.IPCFG.IP,x
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
dey
|
|
|
|
|
dex
|
2016-03-20 22:16:01 +00:00
|
|
|
|
bpl .1
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
2016-04-18 20:16:54 +00:00
|
|
|
|
lda DevFlags
|
2017-01-26 21:57:35 +00:00
|
|
|
|
and #S.DEVSTAT.NET.FLAGS.IPOFFLOAD
|
2016-04-18 20:16:54 +00:00
|
|
|
|
bne .21
|
|
|
|
|
|
2016-01-16 22:04:22 +00:00
|
|
|
|
ldy #S.IP.TOTAL.LENGTH+1
|
2017-01-31 16:40:37 +00:00
|
|
|
|
lda ZPFrameOutLen
|
2016-01-16 22:04:22 +00:00
|
|
|
|
sec
|
2016-03-13 22:09:00 +00:00
|
|
|
|
sbc #S.ETH-2
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
dey
|
2017-01-31 16:40:37 +00:00
|
|
|
|
lda ZPFrameOutLen+1
|
2016-03-13 22:09:00 +00:00
|
|
|
|
sbc /S.ETH-2
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
ldy #S.IP.HDR.CHECKSUM
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
iny
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
|
|
|
|
stz IP.CHECKSUM RESET.IP.CHECKSUM
|
|
|
|
|
stz IP.CHECKSUM+1
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
|
|
|
|
clc
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
|
|
|
|
ldy #S.IP.V.IHL.DSCP.ECN
|
2016-03-13 22:09:00 +00:00
|
|
|
|
ldx #10 10 words for IP Header
|
|
|
|
|
|
2017-01-31 16:40:37 +00:00
|
|
|
|
.2 lda (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
adc IP.CHECKSUM
|
|
|
|
|
sta IP.CHECKSUM
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
|
|
|
|
iny
|
2017-01-31 16:40:37 +00:00
|
|
|
|
lda (ZPFrameOutPtr),y
|
2016-01-16 22:04:22 +00:00
|
|
|
|
adc IP.CHECKSUM+1
|
|
|
|
|
sta IP.CHECKSUM+1
|
2016-03-13 22:09:00 +00:00
|
|
|
|
iny
|
|
|
|
|
dex
|
2016-03-20 22:16:01 +00:00
|
|
|
|
bne .2
|
2016-01-16 22:04:22 +00:00
|
|
|
|
|
2016-03-13 22:09:00 +00:00
|
|
|
|
ldy #S.IP.HDR.CHECKSUM
|
2016-01-16 22:04:22 +00:00
|
|
|
|
lda IP.CHECKSUM
|
2016-03-13 22:09:00 +00:00
|
|
|
|
adc #0
|
2016-01-16 22:04:22 +00:00
|
|
|
|
eor #$FF
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
iny
|
2016-01-16 22:04:22 +00:00
|
|
|
|
lda IP.CHECKSUM+1
|
2016-03-13 22:09:00 +00:00
|
|
|
|
adc #0
|
2016-01-16 22:04:22 +00:00
|
|
|
|
eor #$FF
|
2017-01-31 16:40:37 +00:00
|
|
|
|
sta (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2016-04-18 20:16:54 +00:00
|
|
|
|
.21 ldy #S.IP.PROTOCOL
|
2017-01-31 16:40:37 +00:00
|
|
|
|
lda (ZPFrameOutPtr),y
|
2016-03-13 22:09:00 +00:00
|
|
|
|
cmp #S.IP.PROTOCOL.TCP
|
|
|
|
|
bne .3
|
|
|
|
|
jsr TCP.ComputeChecksum
|
2016-03-20 22:16:01 +00:00
|
|
|
|
bra .4
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
|
|
|
|
.3 cmp #S.IP.PROTOCOL.UDP
|
2016-03-20 22:16:01 +00:00
|
|
|
|
bne .4
|
2016-03-13 22:09:00 +00:00
|
|
|
|
jsr UDP.ComputeChecksum
|
|
|
|
|
|
2016-03-20 22:16:01 +00:00
|
|
|
|
.4 lda DevFlags
|
2017-01-26 21:57:35 +00:00
|
|
|
|
and #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD
|
2016-03-20 22:16:01 +00:00
|
|
|
|
bne .5
|
|
|
|
|
|
|
|
|
|
jsr IP.SetDestMAC
|
|
|
|
|
bcs FRM.Queue
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2017-01-31 16:40:37 +00:00
|
|
|
|
.5 >LDYA ZPFrameOutPtr
|
2017-01-26 21:57:35 +00:00
|
|
|
|
ldx #DEVMGR.WRITEBLOCK
|
2016-03-20 22:16:01 +00:00
|
|
|
|
jsr NetDevJmp
|
|
|
|
|
bcs FRM.Queue
|
2017-01-31 16:40:37 +00:00
|
|
|
|
|
2017-01-29 21:47:19 +00:00
|
|
|
|
lda hFrameOut
|
2016-03-20 22:16:01 +00:00
|
|
|
|
beq .9
|
2016-10-24 15:54:43 +00:00
|
|
|
|
>SYSCALL FreeMemA
|
2016-03-20 22:16:01 +00:00
|
|
|
|
|
2016-03-27 21:06:56 +00:00
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
2017-01-29 21:47:19 +00:00
|
|
|
|
FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry
|
2016-03-27 21:06:56 +00:00
|
|
|
|
beq .9
|
|
|
|
|
|
|
|
|
|
ldx FRM.QUEUE.Head
|
|
|
|
|
inx
|
|
|
|
|
cpx #K.FRMQUEUE.SIZE
|
|
|
|
|
bne .1
|
|
|
|
|
ldx #0
|
|
|
|
|
.1 cpx FRM.QUEUE.Tail
|
|
|
|
|
beq .9
|
|
|
|
|
ldy FRM.QUEUE.Head
|
|
|
|
|
stx FRM.QUEUE.Head
|
|
|
|
|
|
|
|
|
|
sta FRM.QUEUE.State,y
|
|
|
|
|
lda #K.FRMSEND.RETRY
|
|
|
|
|
sta FRM.QUEUE.Retry,y
|
2017-01-29 21:47:19 +00:00
|
|
|
|
lda hFrameOut
|
2016-03-27 21:06:56 +00:00
|
|
|
|
sta FRM.QUEUE.hMem,y
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2016-03-20 22:16:01 +00:00
|
|
|
|
|
|
|
|
|
.9 sec
|
|
|
|
|
rts
|
2016-01-16 22:04:22 +00:00
|
|
|
|
*--------------------------------------
|
2016-03-20 22:16:01 +00:00
|
|
|
|
FRM.Retry ldx FRM.QUEUE.Tail
|
|
|
|
|
|
|
|
|
|
.10 cpx FRM.QUEUE.Head
|
|
|
|
|
beq .8 Queue is empty, exit....
|
|
|
|
|
lda FRM.QUEUE.hMem,x
|
2016-10-24 15:54:43 +00:00
|
|
|
|
>SYSCALL GetMemPtrA
|
2017-01-31 16:40:37 +00:00
|
|
|
|
>STYA ZPFrameOutPtr
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2016-03-20 22:16:01 +00:00
|
|
|
|
ldx FRM.QUEUE.Tail
|
|
|
|
|
lda FRM.QUEUE.State,x
|
|
|
|
|
cmp #ERR.DEV+1 Device error ?
|
|
|
|
|
bcc .1 yes, retry sending...
|
|
|
|
|
jsr IP.SetDestMAC Err is ARP or higher, retry getting MAC
|
|
|
|
|
bcs .2 still error getting dest MAC
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2017-01-31 16:40:37 +00:00
|
|
|
|
.1 >LDYA ZPFrameOutPtr try sending again to DRV
|
2017-01-26 21:57:35 +00:00
|
|
|
|
ldx #DEVMGR.WRITEBLOCK
|
2016-03-20 22:16:01 +00:00
|
|
|
|
jsr NetDevJmp
|
|
|
|
|
bcc .3
|
|
|
|
|
|
|
|
|
|
.2 ldx FRM.QUEUE.Tail save error...
|
|
|
|
|
sta FRM.QUEUE.State,x
|
|
|
|
|
dec FRM.QUEUE.Retry,x
|
|
|
|
|
bne .8 exit....until next run!
|
|
|
|
|
|
|
|
|
|
.3 ldx FRM.QUEUE.Tail Success,or max retry, discard entry
|
|
|
|
|
lda FRM.QUEUE.hMem,x
|
2016-10-24 15:54:43 +00:00
|
|
|
|
>SYSCALL FreeMemA
|
2016-03-13 22:09:00 +00:00
|
|
|
|
|
2016-03-20 22:16:01 +00:00
|
|
|
|
.4 ldx FRM.QUEUE.Tail
|
|
|
|
|
inx
|
|
|
|
|
cpx #K.FRMQUEUE.SIZE
|
|
|
|
|
bne .5
|
|
|
|
|
ldx #0
|
|
|
|
|
.5 stx FRM.QUEUE.Tail
|
|
|
|
|
bra .10
|
2016-03-16 16:37:02 +00:00
|
|
|
|
|
2016-03-20 22:16:01 +00:00
|
|
|
|
.8 rts
|
2016-01-16 22:04:22 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
MAN
|
|
|
|
|
SAVE LIB/LIBTCPIP.S.FRM
|
|
|
|
|
LOAD LIB/LIBTCPIP.S
|
|
|
|
|
ASM
|