Kernel version 0.9 : TCP, more rewrite & bugfix

This commit is contained in:
Rémy GIBERT 2017-03-10 17:35:54 +01:00
parent 18a554a9d7
commit eb7b12f642
7 changed files with 303 additions and 319 deletions

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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