mirror of
https://github.com/A2osX/A2osX.git
synced 2025-01-11 10:29:46 +00:00
Kernel version 0.9 : TCP, more rewrite & bugfix
This commit is contained in:
parent
18a554a9d7
commit
eb7b12f642
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -64,8 +64,6 @@ CS.RUN >SYSCALL GetArgC
|
|||||||
>SYSCALL GetArgA
|
>SYSCALL GetArgA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
|
|
||||||
>DEBUG
|
|
||||||
|
|
||||||
>SYSCALL SSCANF
|
>SYSCALL SSCANF
|
||||||
bcc CS.RUN.QUERY
|
bcc CS.RUN.QUERY
|
||||||
|
|
||||||
@ -117,7 +115,7 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE
|
|||||||
ldx #K.ARPCACHE.SIZE
|
ldx #K.ARPCACHE.SIZE
|
||||||
|
|
||||||
.1 lda (ZPPTR1)
|
.1 lda (ZPPTR1)
|
||||||
* beq .4
|
beq .4
|
||||||
|
|
||||||
ldy #S.ARPCACHE.IP+4
|
ldy #S.ARPCACHE.IP+4
|
||||||
.2 dey
|
.2 dey
|
||||||
|
@ -107,43 +107,33 @@ SKT.New.TCP >PUSHW S.TCB
|
|||||||
>SYSCALL GetMem
|
>SYSCALL GetMem
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPTmpPtr2
|
|
||||||
txa
|
txa
|
||||||
|
|
||||||
ldy #S.SOCKET.SQ.hTCB
|
ldy #S.SOCKET.SQ.hTCB
|
||||||
sta (ZPTmpPtr3),y
|
sta (ZPTmpPtr3),y
|
||||||
|
|
||||||
ldy #S.TCB.INFREE
|
ldx #S.TCB.OUTTAIL+1
|
||||||
|
|
||||||
|
.10 stz SKT.TCBCache,x
|
||||||
|
dex
|
||||||
|
bpl .10
|
||||||
|
|
||||||
lda #K.TCP.WSIZE
|
lda #K.TCP.WSIZE
|
||||||
sta (ZPTmpPtr2),y
|
sta SKT.TCBCache+S.TCB.INFREE
|
||||||
iny
|
sta SKT.TCBCache+S.TCB.OUTFREE
|
||||||
lda /K.TCP.WSIZE
|
lda /K.TCP.WSIZE
|
||||||
sta (ZPTmpPtr2),y
|
sta SKT.TCBCache+S.TCB.INFREE+1
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTFREE+1
|
||||||
|
|
||||||
ldy #S.TCB.OUTFREE
|
stz SKT.TCBCache+S.TCB.INUSED
|
||||||
lda #K.TCP.WSIZE
|
stz SKT.TCBCache+S.TCB.INUSED+1
|
||||||
sta (ZPTmpPtr2),y
|
stz SKT.TCBCache+S.TCB.OUTUSED
|
||||||
iny
|
stz SKT.TCBCache+S.TCB.OUTUSED+1
|
||||||
lda /K.TCP.WSIZE
|
|
||||||
sta (ZPTmpPtr2),y
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
ldy #S.TCB.INUSED
|
|
||||||
sta (ZPTmpPtr2),y
|
|
||||||
iny
|
|
||||||
sta (ZPTmpPtr2),y
|
|
||||||
|
|
||||||
ldy #S.TCB.OUTUSED
|
|
||||||
sta (ZPTmpPtr2),y
|
|
||||||
iny
|
|
||||||
sta (ZPTmpPtr2),y
|
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.TCB.SEQNUM+3
|
|
||||||
|
|
||||||
.1 lda A2osX.TIMER16,x
|
.1 lda A2osX.TIMER16,x
|
||||||
sta (ZPTmpPtr2),y
|
sta SKT.TCBCache+S.TCB.SEQNUM,x
|
||||||
dey
|
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
@ -165,6 +155,10 @@ SKT.New.TCP >PUSHW S.TCB
|
|||||||
ldy #S.SOCKET.SQ.hOutMem
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
sta (ZPTmpPtr3),y
|
sta (ZPTmpPtr3),y
|
||||||
|
|
||||||
|
jsr SKT.StoreTCB
|
||||||
|
|
||||||
|
jsr TCP.OUT.SYN
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
@ -175,19 +169,19 @@ SKT.New.TCP >PUSHW S.TCB
|
|||||||
* ##Out :
|
* ##Out :
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
SKT.CloseA cmp #K.SKTTABLE.SIZE
|
SKT.CloseA cmp #K.SKTTABLE.SIZE
|
||||||
bcs SKT.GetA.9
|
bcs .9
|
||||||
|
|
||||||
jsr SKT.GetA.I
|
jsr SKT.GetA.I
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
cmp #S.SOCKET.SOCK.DGRAM
|
cmp #S.SOCKET.SOCK.DGRAM
|
||||||
beq .8
|
beq .1
|
||||||
|
|
||||||
cmp #S.SOCKET.SOCK.RAW
|
cmp #S.SOCKET.SOCK.RAW
|
||||||
beq .8
|
beq .1
|
||||||
|
|
||||||
cmp #S.SOCKET.SOCK.STREAM
|
cmp #S.SOCKET.SOCK.STREAM
|
||||||
bne SKT.GetA.9
|
bne .9
|
||||||
|
|
||||||
ldy #S.SOCKET.SO
|
ldy #S.SOCKET.SO
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
@ -199,13 +193,44 @@ SKT.CloseA cmp #K.SKTTABLE.SIZE
|
|||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
ora #S.TCP.OPTIONS.FIN
|
ora #S.TCP.OPTIONS.FIN
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
jsr TCP.OUT Try to push FIN
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.9 lda #ERR.SKT.BAD
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 ldy #S.SOCKET.HQ.TAIL
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
ldy #S.SOCKET.HQ.HEAD
|
||||||
|
cmp (ZPPtrSKT),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
pha
|
||||||
|
clc
|
||||||
|
adc #S.SOCKET.HQ
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
inx
|
||||||
|
cmp #S.SOCKET.HQ.MAX
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
.2
|
||||||
|
ldy #S.SOCKET.HQ.TAIL
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
txa
|
||||||
|
>SYSCALL FreeMemA
|
||||||
|
bra .1
|
||||||
|
|
||||||
.8 lda #0
|
.8 lda #0
|
||||||
sta (ZPPtrSKT)
|
sta (ZPPtrSKT)
|
||||||
clc
|
clc
|
||||||
.9 rts
|
rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* #SKT.GetA
|
* #SKT.GetA
|
||||||
* Get Ptr to socket
|
* Get Ptr to socket
|
||||||
@ -402,8 +427,7 @@ SKT.Write.RAW ldy #S.SOCKET.RAW.PROTO
|
|||||||
|
|
||||||
jmp FRM.SendIP
|
jmp FRM.SendIP
|
||||||
|
|
||||||
.9 sec
|
.9 rts
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.Write.TCP ldy #S.SOCKET.TCP.STATUS
|
SKT.Write.TCP ldy #S.SOCKET.TCP.STATUS
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
@ -413,7 +437,7 @@ SKT.Write.TCP ldy #S.SOCKET.TCP.STATUS
|
|||||||
jsr SKT.AddDataToSktOut
|
jsr SKT.AddDataToSktOut
|
||||||
bcs .90
|
bcs .90
|
||||||
|
|
||||||
jsr TCP.OUT.ESTBLSH try to push, ignore error....
|
jsr TCP.OUT try to push, ignore error....
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -566,37 +590,7 @@ SKT.Read.I jsr SKT.GetA.I
|
|||||||
bne .91 IO err
|
bne .91 IO err
|
||||||
|
|
||||||
jsr SKT.GetDataFromSktIn
|
jsr SKT.GetDataFromSktIn
|
||||||
bcs .99 No data...
|
rts if CS, No data...
|
||||||
|
|
||||||
>STYA TmpOffset
|
|
||||||
ldy #S.TCB.ACKNUM
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
clc
|
|
||||||
adc TmpOffset
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc TmpOffset+1
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.OPTIONS
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
ora #S.TCP.OPTIONS.ACK
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
>LDYA TmpOffset
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.90 lda #ERR.SKT.BAD
|
.90 lda #ERR.SKT.BAD
|
||||||
sec
|
sec
|
||||||
@ -642,45 +636,54 @@ SKT.AddToQueueA sta .2+1
|
|||||||
* Src : A,X
|
* Src : A,X
|
||||||
* Dst : hOutMem/OUTTAIL
|
* Dst : hOutMem/OUTTAIL
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.FreeDataFromSktOutAX
|
SKT.AckDataToSktOut
|
||||||
pha
|
jsr SKT.GetTCB
|
||||||
ldy #S.TCB.OUTTAIL
|
|
||||||
clc
|
|
||||||
adc (ZPPtrSKT),y
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
txa
|
|
||||||
adc (ZPPtrSKT),y
|
|
||||||
and /K.TCP.WSIZE-1
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
pla
|
ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn...
|
||||||
sta .1+1
|
ldx #0 Substract old Ack from socket
|
||||||
stx .2+1
|
|
||||||
|
|
||||||
ldy #S.TCB.OUTFREE
|
|
||||||
clc
|
|
||||||
adc (ZPPtrSKT),y
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
txa
|
|
||||||
adc (ZPPtrSKT),y
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
ldy #S.TCB.OUTUSED
|
|
||||||
sec
|
sec
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
.1 sbc #$ff
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
.1 lda (ZPFrameInPtr),y
|
||||||
adc (ZPPtrSKT),y
|
pha
|
||||||
.2 sbc #$ff
|
sbc SKT.TCBCache+S.TCB.ACKNUM,x
|
||||||
sta (ZPPtrSKT),y
|
sta TmpDWord,x
|
||||||
|
pla
|
||||||
|
sta SKT.TCBCache+S.TCB.ACKNUM,x
|
||||||
|
dey
|
||||||
|
inx
|
||||||
|
cpx #4
|
||||||
|
bpl .1
|
||||||
|
|
||||||
rts
|
lda SKT.TCBCache+S.TCB.OUTTAIL
|
||||||
|
clc
|
||||||
|
adc TmpDWord
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTTAIL
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTTAIL+1
|
||||||
|
adc TmpDWord+1
|
||||||
|
and /K.TCP.WSIZE-1
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTTAIL+1
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTFREE
|
||||||
|
clc
|
||||||
|
adc TmpDWord
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTFREE
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTFREE+1
|
||||||
|
adc TmpDWord+1
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTFREE+1
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTUSED
|
||||||
|
sec
|
||||||
|
sbc TmpDWord
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTUSED
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTUSED+1
|
||||||
|
sbc TmpDWord+1
|
||||||
|
sta SKT.TCBCache+S.TCB.OUTUSED+1
|
||||||
|
|
||||||
|
jmp SKT.StoreTCB
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* From TCP.IN
|
* From TCP.IN
|
||||||
* Src : ZPDataInPtr/ZPDataInLen
|
* Src : ZPDataInPtr/ZPDataInLen
|
||||||
@ -856,15 +859,25 @@ SKT.AddDataToSktOut
|
|||||||
adc ZPDataInLen+1
|
adc ZPDataInLen+1
|
||||||
sta SKT.TCBCache+S.TCB.OUTUSED+1
|
sta SKT.TCBCache+S.TCB.OUTUSED+1
|
||||||
|
|
||||||
jmp SKT.StoreTCB
|
lda SKT.TCBCache+S.TCB.SEQNUM
|
||||||
|
clc
|
||||||
|
adc ZPDataInLen
|
||||||
|
sta SKT.TCBCache+S.TCB.SEQNUM
|
||||||
|
lda SKT.TCBCache+S.TCB.SEQNUM+1
|
||||||
|
adc ZPDataInLen+1
|
||||||
|
sta SKT.TCBCache+S.TCB.SEQNUM+1
|
||||||
|
bcc .80
|
||||||
|
inc SKT.TCBCache+S.TCB.SEQNUM+2
|
||||||
|
bne .80
|
||||||
|
inc SKT.TCBCache+S.TCB.SEQNUM+3
|
||||||
|
|
||||||
|
.80 jmp SKT.StoreTCB
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* From TCP.OUT
|
* From TCP.OUT
|
||||||
* Src : hOutMem/OUTTAIL
|
* Src : hOutMem/OUTTAIL
|
||||||
* Dst : ZPDataOutPtr/ZPDataOutLen
|
* Dst : ZPDataOutPtr/ZPDataOutLen
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.GetDataFromSktOut
|
SKT.GetDataFromSktOut
|
||||||
jsr SKT.GetTCB
|
|
||||||
|
|
||||||
ldy #S.SOCKET.SQ.hOutMem
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
|
|
||||||
@ -920,7 +933,8 @@ SKT.GetDataFromSktOut
|
|||||||
sta ZPTmpPtr2+1
|
sta ZPTmpPtr2+1
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.8 jmp SKT.StoreTCB
|
.8 clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* From SKT.Read
|
* From SKT.Read
|
||||||
* In:
|
* In:
|
||||||
@ -1043,7 +1057,27 @@ SKT.GetDataFromSktIn
|
|||||||
sbc ZPTmpPtr3+1
|
sbc ZPTmpPtr3+1
|
||||||
sta SKT.TCBCache+S.TCB.INUSED+1
|
sta SKT.TCBCache+S.TCB.INUSED+1
|
||||||
|
|
||||||
jsr SKT.StoreTCB
|
lda SKT.TCBCache+S.TCB.ACKNUM
|
||||||
|
clc
|
||||||
|
adc ZPTmpPtr3
|
||||||
|
sta SKT.TCBCache+S.TCB.ACKNUM
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.ACKNUM+1
|
||||||
|
adc ZPTmpPtr3+1
|
||||||
|
sta SKT.TCBCache+S.TCB.ACKNUM+1
|
||||||
|
|
||||||
|
bcc .80
|
||||||
|
inc SKT.TCBCache+S.TCB.ACKNUM+2
|
||||||
|
bne .80
|
||||||
|
inc SKT.TCBCache+S.TCB.ACKNUM+3
|
||||||
|
|
||||||
|
.80 jsr SKT.StoreTCB
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
ora #S.TCP.OPTIONS.ACK
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
>LDYA ZPTmpPtr3
|
>LDYA ZPTmpPtr3
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
@ -131,34 +131,29 @@ TCP.IN.JMP.LISTEN
|
|||||||
lda #ERR.SKT.OOS
|
lda #ERR.SKT.OOS
|
||||||
.9 rts
|
.9 rts
|
||||||
|
|
||||||
.3 jsr ARP.AddFromFrameInPtr
|
.3 jsr SKT.GetTCB
|
||||||
|
|
||||||
ldy #S.TCP.SEQ.NUMBER+3
|
ldy #S.TCP.SEQ.NUMBER
|
||||||
ldx #3
|
ldx #3
|
||||||
|
|
||||||
sec
|
sec
|
||||||
|
|
||||||
.1 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket...
|
.1 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket...
|
||||||
adc #0
|
adc #0
|
||||||
sta TmpDWord,x
|
sta SKT.TCBCache+S.TCB.ACKNUM,x
|
||||||
dey
|
iny
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
ldx #3
|
jsr SKT.StoreTCB
|
||||||
ldy #S.TCB.ACKNUM+3
|
|
||||||
|
|
||||||
.4 lda TmpDWord,x Update new socket with ACK number
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .4
|
|
||||||
|
|
||||||
|
jsr ARP.AddFromFrameInPtr
|
||||||
|
|
||||||
jsr TCP.OUT.SYNACK
|
jsr TCP.OUT.SYNACK
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.STATUS
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
lda #S.SOCKET.TCP.STATUS.SYNSENT
|
lda #S.SOCKET.TCP.STATUS.SYNRCVD
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
|
||||||
@ -166,144 +161,161 @@ TCP.IN.JMP.LISTEN
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.SYNSENT
|
TCP.IN.JMP.SYNSENT
|
||||||
|
ldy #S.TCP.OPTIONS only accept SYN.ACK packet
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
cmp #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
|
lda #S.SOCKET.TCP.STATUS.ESTBLSH
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
TCP.IN.JMP.SYNRCVD
|
||||||
ldy #S.TCP.OPTIONS only accept ACK packet
|
ldy #S.TCP.OPTIONS only accept ACK packet
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
cmp #S.TCP.OPTIONS.ACK
|
cmp #S.TCP.OPTIONS.ACK
|
||||||
bne .8
|
bne .8
|
||||||
|
|
||||||
|
jsr SKT.GetTCB
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.TCB.SEQNUM+3
|
ldy #S.TCP.ACK.NUMBER
|
||||||
|
|
||||||
sec
|
sec
|
||||||
|
|
||||||
.10 lda (ZPPtrSKT),y
|
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x
|
||||||
adc #0
|
adc #0
|
||||||
sta TmpDWord,x
|
sta SKT.TCBCache+S.TCB.SEQNUM,x
|
||||||
dey
|
eor (ZPFrameInPtr),y
|
||||||
dex
|
|
||||||
bpl .10
|
|
||||||
|
|
||||||
ldx #3
|
|
||||||
ldy #S.TCP.ACK.NUMBER+3
|
|
||||||
.11 lda (ZPFrameInPtr),y
|
|
||||||
cmp TmpDWord,x
|
|
||||||
bne .8
|
bne .8
|
||||||
dey
|
iny
|
||||||
dex
|
dex
|
||||||
bpl .11
|
bpl .1
|
||||||
|
|
||||||
ldx #3
|
jsr SKT.StoreTCB
|
||||||
ldy #S.TCB.SEQNUM+3
|
|
||||||
.12 lda TmpDWord,x
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .12
|
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.STATUS
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
lda #S.SOCKET.TCP.STATUS.ESTBLSH
|
lda #S.SOCKET.TCP.STATUS.ESTBLSH
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.SYNRCVD
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.IN.JMP.ESTBLSH
|
TCP.IN.JMP.ESTBLSH
|
||||||
|
jsr SKT.GetTCB
|
||||||
|
|
||||||
ldy #S.TCP.OPTIONS
|
ldy #S.TCP.OPTIONS
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
bit #S.TCP.OPTIONS.ACK
|
bit #S.TCP.OPTIONS.ACK
|
||||||
beq .2
|
beq .1
|
||||||
|
|
||||||
ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn...
|
jsr SKT.AckDataToSktOut
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.1 lda (ZPFrameInPtr),y
|
|
||||||
sta TmpDWord,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldy #S.TCB.ACKNUM Substract old Ack from socket
|
|
||||||
sec
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
sbc TmpDWord
|
|
||||||
pha save result LO for FreeData
|
|
||||||
|
|
||||||
lda TmpDWord
|
.1 lda ZPDataInLen
|
||||||
sta (ZPPtrSKT),y and store new ACK in skt
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
sbc TmpDWord+1
|
|
||||||
|
|
||||||
tax save result HI for FreeData
|
|
||||||
|
|
||||||
lda TmpDWord+1 we stop here, will never be more than K.TCP.WSIZE
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda TmpDWord+2
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda TmpDWord+3
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
|
|
||||||
pla
|
|
||||||
jsr SKT.FreeDataFromSktOutAX
|
|
||||||
*----------
|
|
||||||
.2 lda ZPDataInLen
|
|
||||||
ora ZPDataInLen+1
|
ora ZPDataInLen+1
|
||||||
beq .8 No data in this incoming frame...
|
beq .2 No data in this incoming frame...
|
||||||
|
|
||||||
ldy #S.TCP.SEQ.NUMBER+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.3 lda (ZPFrameInPtr),y
|
|
||||||
sta TmpDWord,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
jsr TCP.SetDataInPtrAndLen
|
jsr TCP.SetDataInPtrAndLen
|
||||||
|
|
||||||
jsr SKT.AddDataToSktIn
|
jsr SKT.AddDataToSktIn
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.2 ldy #S.TCP.OPTIONS
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
bit #S.TCP.OPTIONS.FIN
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
|
lda #S.SOCKET.TCP.STATUS.CLWAIT
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
ora #S.TCP.OPTIONS.ACK
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
.8 jsr SKT.StoreTCB
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
TCP.IN.JMP.CLWAIT
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
TCP.IN.JMP.LASTACK
|
||||||
|
ldy #S.TCP.OPTIONS only accept ACK packet
|
||||||
|
lda (ZPFrameInPtr),y
|
||||||
|
cmp #S.TCP.OPTIONS.ACK
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
beq .1
|
||||||
|
>SYSCALL FreeMemA
|
||||||
|
|
||||||
|
.1 ldy #S.SOCKET.SQ.hInMem
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
beq .2
|
||||||
|
>SYSCALL FreeMemA
|
||||||
|
|
||||||
|
.2 ldy #S.SOCKET.SQ.hTCB
|
||||||
|
lda (ZPPtrSKT),y
|
||||||
|
beq .3
|
||||||
|
>SYSCALL FreeMemA
|
||||||
|
|
||||||
|
.3 lda #0
|
||||||
|
sta (ZPPtrSKT)
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.CLWAIT
|
|
||||||
TCP.IN.JMP.LASTACK
|
|
||||||
TCP.IN.JMP.FINWT1
|
TCP.IN.JMP.FINWT1
|
||||||
|
*--------------------------------------
|
||||||
TCP.IN.JMP.FINWT2
|
TCP.IN.JMP.FINWT2
|
||||||
|
*--------------------------------------
|
||||||
TCP.IN.JMP.CLOSING
|
TCP.IN.JMP.CLOSING
|
||||||
|
*--------------------------------------
|
||||||
TCP.IN.JMP.TIMEWT
|
TCP.IN.JMP.TIMEWT
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.OUT.SYNACK >LDYAI 0
|
TCP.OUT.SYN >LDYAI 0
|
||||||
jsr TCP.NewFrame
|
jsr TCP.NewFrame
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.TCP.ACK.NUMBER+3
|
ldy #S.TCP.SEQ.NUMBER
|
||||||
|
|
||||||
.1 lda TmpDWord,x
|
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x
|
||||||
sta (ZPFrameOutPtr),y
|
sta (ZPFrameOutPtr),y
|
||||||
dey
|
iny
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
ldy #S.TCP.OPTIONS
|
ldy #S.TCP.OPTIONS
|
||||||
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
|
lda #S.TCP.OPTIONS.SYN
|
||||||
sta (ZPFrameOutPtr),y
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
jsr TCP.SendFrame
|
iny S.TCP.WINDOW
|
||||||
|
lda /K.TCP.WSIZE
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
iny
|
||||||
|
lda #K.TCP.WSIZE
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
|
ldy #S.TCP.SEQ.NUMBER
|
||||||
|
ldx #3
|
||||||
|
|
||||||
|
jsr FRM.SendIP
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.OPTIONS
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
@ -317,14 +329,58 @@ TCP.OUT.SYNACK >LDYAI 0
|
|||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.OUT.ESTBLSH ldy #S.TCB.OUTUSED
|
TCP.OUT.SYNACK >LDYAI 0
|
||||||
lda (ZPPtrSKT),y
|
jsr TCP.NewFrame
|
||||||
|
bcs .9
|
||||||
|
|
||||||
pha
|
ldx #3
|
||||||
|
ldy #S.TCP.SEQ.NUMBER
|
||||||
|
|
||||||
|
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
iny
|
iny
|
||||||
lda (ZPPtrSKT),y
|
dex
|
||||||
ply
|
bpl .1
|
||||||
|
|
||||||
|
ldy #S.TCP.ACK.NUMBER
|
||||||
|
ldx #3
|
||||||
|
|
||||||
|
.3 lda SKT.TCBCache+S.TCB.ACKNUM,x
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bpl .3
|
||||||
|
|
||||||
|
ldy #S.TCP.OPTIONS
|
||||||
|
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
|
iny S.TCP.WINDOW
|
||||||
|
lda /K.TCP.WSIZE
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
iny
|
||||||
|
lda #K.TCP.WSIZE
|
||||||
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
|
jsr FRM.SendIP
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
|
lda #0
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
|
lda #S.SOCKET.TCP.STATUS.SYNSENT
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
TCP.OUT jsr SKT.GetTCB
|
||||||
|
|
||||||
|
lda SKT.TCBCache+S.TCB.OUTUSED+1
|
||||||
|
ldy SKT.TCBCache+S.TCB.OUTUSED
|
||||||
|
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
tax
|
tax
|
||||||
@ -344,110 +400,32 @@ TCP.OUT.ESTBLSH ldy #S.TCB.OUTUSED
|
|||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr SKT.GetDataFromSktOut
|
jsr SKT.GetDataFromSktOut
|
||||||
|
|
||||||
ldy #S.TCB.SEQNUM compute new SEQ.NUM
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
clc
|
|
||||||
adc TmpOffset
|
|
||||||
sta TmpDWord
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc TmpOffset+1
|
|
||||||
sta TmpDWord+1
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta TmpDWord+2
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta TmpDWord+3
|
|
||||||
|
|
||||||
ldy #S.TCP.SEQ.NUMBER+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.3 lda TmpDWord,x
|
|
||||||
sta (ZPFrameOutPtr),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.OPTIONS
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
ldy #S.TCP.OPTIONS
|
ldy #S.TCP.OPTIONS
|
||||||
sta (ZPFrameOutPtr),y
|
sta (ZPFrameOutPtr),y
|
||||||
|
|
||||||
.7 jsr TCP.SendFrame
|
.7 jsr FRM.SendIP
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.OPTIONS
|
ldy #S.SOCKET.TCP.OPTIONS
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
bit #S.TCP.OPTIONS.FIN
|
bit #S.TCP.OPTIONS.FIN
|
||||||
beq .70
|
beq .8
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.STATUS
|
ldy #S.SOCKET.TCP.STATUS
|
||||||
lda #S.SOCKET.TCP.STATUS.FINWT1
|
lda #S.SOCKET.TCP.STATUS.FINWT1
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
.70 ldy #S.SOCKET.TCP.OPTIONS
|
.8 ldy #S.SOCKET.TCP.OPTIONS
|
||||||
lda #0
|
lda #0
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
ldx #3
|
jmp SKT.StoreTCB
|
||||||
ldy #S.TCB.SEQNUM+3
|
|
||||||
|
|
||||||
.71 lda TmpDWord,x
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .71
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.GetSktAckNum
|
|
||||||
ldy #S.TCP.ACK.NUMBER
|
|
||||||
ldx #4
|
|
||||||
|
|
||||||
.1 lda (ZPFrameInPtr),y
|
|
||||||
pha
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
ldy #S.TCB.ACKNUM+3
|
|
||||||
ldx #4
|
|
||||||
|
|
||||||
.2 pla
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.UpdateSktAckNum
|
|
||||||
ldy #S.TCB.ACKNUM+3
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
clc
|
|
||||||
adc ZPDataInLen
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc ZPDataInLen+1
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
dey
|
|
||||||
lda (ZPPtrSKT),y
|
|
||||||
adc #0
|
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.SetDataInPtrAndLen
|
TCP.SetDataInPtrAndLen
|
||||||
ldy #S.TCP.DATAOFFSET
|
ldy #S.TCP.DATAOFFSET
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
@ -529,25 +507,6 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP
|
|||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.SendFrame ldy #S.TCB.SEQNUM+7
|
|
||||||
ldx #7
|
|
||||||
|
|
||||||
.1 lda (ZPPtrSKT),y
|
|
||||||
pha
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldy #S.TCP.SEQ.NUMBER
|
|
||||||
|
|
||||||
.2 pla
|
|
||||||
sta (ZPFrameOutPtr),y
|
|
||||||
iny
|
|
||||||
cpy #S.TCP.SEQ.NUMBER+8
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
jmp FRM.SendIP
|
|
||||||
*--------------------------------------
|
|
||||||
TCP.ComputeChecksum
|
TCP.ComputeChecksum
|
||||||
lda #0 RESET.TCP.CHECKSUM
|
lda #0 RESET.TCP.CHECKSUM
|
||||||
ldy #S.TCP.CHECKSUM
|
ldy #S.TCP.CHECKSUM
|
||||||
|
@ -182,13 +182,6 @@ PULSEA and #S.EVT.F.T1SEC
|
|||||||
.1 jsr DNS.POLL
|
.1 jsr DNS.POLL
|
||||||
jmp FRM.RETRY
|
jmp FRM.RETRY
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ToLowerCaseA cmp #'A'
|
|
||||||
bcc .1
|
|
||||||
cmp #'Z'+1
|
|
||||||
bcs .1
|
|
||||||
adc #$20
|
|
||||||
.1 rts
|
|
||||||
*--------------------------------------
|
|
||||||
GetDynPort inc DYNPORT.LAST
|
GetDynPort inc DYNPORT.LAST
|
||||||
bne .1
|
bne .1
|
||||||
inc DYNPORT.LAST+1
|
inc DYNPORT.LAST+1
|
||||||
|
@ -458,7 +458,7 @@ Socket .DA #S.SOCKET.SOCK.DGRAM
|
|||||||
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
|
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
|
||||||
DHCP.DISC.XID .BS 4
|
DHCP.DISC.XID .BS 4
|
||||||
.HS 0000 SECS
|
.HS 0000 SECS
|
||||||
.DA S.DHCP.FLAGS.BRDCST
|
.DA 0000 S.DHCP.FLAGS.BRDCST
|
||||||
.HS 00000000 CIADDR
|
.HS 00000000 CIADDR
|
||||||
DHCP.DISC.YIADDR .HS 00000000
|
DHCP.DISC.YIADDR .HS 00000000
|
||||||
.HS 00000000 SIADDR
|
.HS 00000000 SIADDR
|
||||||
@ -475,7 +475,7 @@ DHCP.DISC.LEN .EQ *-DHCP.DISC
|
|||||||
DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
|
DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
|
||||||
DHCP.REQ.XID .BS 4
|
DHCP.REQ.XID .BS 4
|
||||||
.HS 0000 SECS
|
.HS 0000 SECS
|
||||||
.DA S.DHCP.FLAGS.BRDCST
|
.DA 0000 S.DHCP.FLAGS.BRDCST
|
||||||
.HS 00000000 CIADDR
|
.HS 00000000 CIADDR
|
||||||
DHCP.REQ.YIADDR .HS 00000000
|
DHCP.REQ.YIADDR .HS 00000000
|
||||||
.HS 00000000 SIADDR
|
.HS 00000000 SIADDR
|
||||||
|
Loading…
x
Reference in New Issue
Block a user