Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-06-11 17:47:18 +02:00
parent 71a87f9f52
commit 167e9146c0
5 changed files with 212 additions and 237 deletions

Binary file not shown.

View File

@ -187,13 +187,13 @@ S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+16
S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+18
S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20
*
S.SOCKET.TCP.INLASTSEQNUM .EQ S.SOCKET+22 Recv:Last SEQ received from remote
S.SOCKET.TCP.INSEQNUM .EQ S.SOCKET+22 Recv:Last SEQ received from remote
S.SOCKET.TCP.OUTSEQNUM .EQ S.SOCKET+26 Send:SEQ sent not yet ACKed (retransmit)
S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+30 Send:Next SEQ to send
S.SOCKET.TCP.OUTACKNUM .EQ S.SOCKET+34 Send:ACK to send to remote
*S.SOCKET.TCP.OUTACKNUM .EQ S.SOCKET+34 Send:ACK to send to remote
*
S.SOCKET.TCP .EQ S.SOCKET+38
S.SOCKET.TCP .EQ S.SOCKET+34
*--------------------------------------
S.ARP.HTYPE .EQ S.ETH.EII+0 $0001
S.ARP.PTYPE .EQ S.ETH.EII+2 $0800

View File

@ -484,29 +484,112 @@ SKT.GetDataFromSktIn
.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPDataInLen
>SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen
lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
clc
adc ZPDataInLen
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
adc ZPDataInLen+1
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
* lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
* clc
* adc ZPDataInLen
* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
* lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
* adc ZPDataInLen+1
* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
bcc .80
inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1
bne .80
inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM
* bcc .80
* inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1
* bne .80
* inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM
*.80
jsr SKT.StoreTCB
.80 jsr SKT.StoreTCB
lda #S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA
* lda #S.TCP.OPTIONS.ACK
* jsr TCP.OUT.SendOptA
* jsr TCP.SetSocketTCPO.ACK
jsr TCP.SetSocketTCPO.ACK ACK=1 -> send WSIZE
* jsr TCP.OUT.I SKT.GetTCB already called
>LDYA ZPDataInLen
clc
rts
*--------------------------------------
* From TCP.IN
* Src : ZPDataInPtr/ZPDataInLen
* Dst : hInMem/INHEAD
*--------------------------------------
SKT.AddDataToSktIn
lda SKT.Cache+S.SOCKET.TCP.INFREE
sec
sbc ZPDataInLen
tax
lda SKT.Cache+S.SOCKET.TCP.INFREE+1
sbc ZPDataInLen+1
bcc .9 Not enough room in Q
stx SKT.Cache+S.SOCKET.TCP.INFREE
sta SKT.Cache+S.SOCKET.TCP.INFREE+1
ldy #S.SOCKET.SQ.hInMem
lda (ZPPtrSKT),y
>SYSCALL2 GetMemPtr
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
pha
tya
* clc
adc SKT.Cache+S.SOCKET.TCP.INHEAD
sta ZPTmpPtr2
pla
adc SKT.Cache+S.SOCKET.TCP.INHEAD+1
sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail
lda ZPDataInLen
eor #$FF
tax
lda ZPDataInLen+1
eor #$FF
pha
ldy #0
.1 inx
bne .2
pla
inc
beq .8
pha
.2 lda (ZPDataInPtr),y
sta (ZPTmpPtr2)
iny
bne .3
inc ZPDataInPtr+1
.3 inc SKT.Cache+S.SOCKET.TCP.INHEAD
bne .4
inc SKT.Cache+S.SOCKET.TCP.INHEAD+1
lda SKT.Cache+S.SOCKET.TCP.INHEAD+1
cmp /K.TCP.WSIZE
bne .4
stz SKT.Cache+S.SOCKET.TCP.INHEAD+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2
lda ZPTmpPtr1+1
sta ZPTmpPtr2+1
bra .1
.4 inc ZPTmpPtr2
bne .1
inc ZPTmpPtr2+1
bra .1
.9 sec
rts
.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen
clc
rts
*/--------------------------------------
@ -609,9 +692,79 @@ SKT.AddDataToSktOut
>ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen
jsr SKT.StoreTCB
jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error....
* jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error....
>LDYA ZPDataInLen
clc
rts
*--------------------------------------
* From TCP.OUT
* Src : hOutMem/OUTTAIL
* Dst : ZPDataOutPtr/ZPDataOutLen
*--------------------------------------
SKT.GetDataFromSktOut
ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y
>SYSCALL2 GetMemPtr
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
pha
tya
* clc
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail
pla
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
sta ZPTmpPtr2+1
lda ZPDataOutLen
eor #$FF
tax
lda ZPDataOutLen+1
eor #$FF
pha
ldy #0
.1 inx
bne .2
pla
inc
beq .8
pha
.2 lda (ZPTmpPtr2)
sta (ZPDataOutPtr),y
iny
bne .3
inc ZPDataOutPtr+1
.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
bne .4
inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
cmp /K.TCP.WSIZE
bne .4
stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2
lda ZPTmpPtr1+1
sta ZPTmpPtr2+1
bra .1
.4 inc ZPTmpPtr2
bne .1
inc ZPTmpPtr2+1
bra .1
.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen
clc
rts
*/--------------------------------------
@ -1040,201 +1193,6 @@ SKT.AddToQueueA pha
* sec
rts
*--------------------------------------
* From TCP.IN
* Src : ZPDataInPtr/ZPDataInLen
* Dst : hInMem/INHEAD
*--------------------------------------
SKT.AddDataToSktIn
.DO IPDEBUG=2
ldx #3
.91 lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
>PUSHA
dex
bpl .91
ldy #S.TCP.SEQNUM+3
.92 lda (ZPFrameInPtr),y
>PUSHA
dey
cpy #S.TCP.SEQNUM-1
bne .92
>PUSHBI 8
>LDYA L.MSG.SEQNUM
>SYSCALL printf
.FIN
lda SKT.Cache+S.SOCKET.TCP.INFREE
sec
sbc ZPDataInLen
tax
lda SKT.Cache+S.SOCKET.TCP.INFREE+1
sbc ZPDataInLen+1
bcc .9 Not enough room in Q
stx SKT.Cache+S.SOCKET.TCP.INFREE
sta SKT.Cache+S.SOCKET.TCP.INFREE+1
ldy #S.TCP.SEQNUM+3
ldx #3
.10 lda (ZPFrameInPtr),y
eor SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
bne .9
dey
dex
bpl .10
ldy #S.SOCKET.SQ.hInMem
lda (ZPPtrSKT),y
>SYSCALL2 GetMemPtr
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
pha
tya
* clc
adc SKT.Cache+S.SOCKET.TCP.INHEAD
sta ZPTmpPtr2
pla
adc SKT.Cache+S.SOCKET.TCP.INHEAD+1
sta ZPTmpPtr2+1 Make ZPTmpPtr2=base+Tail
lda ZPDataInLen
eor #$FF
tax
lda ZPDataInLen+1
eor #$FF
pha
ldy #0
.1 inx
bne .2
pla
inc
beq .8
pha
.2 lda (ZPDataInPtr),y
sta (ZPTmpPtr2)
iny
bne .3
inc ZPDataInPtr+1
.3 inc SKT.Cache+S.SOCKET.TCP.INHEAD
bne .4
inc SKT.Cache+S.SOCKET.TCP.INHEAD+1
lda SKT.Cache+S.SOCKET.TCP.INHEAD+1
cmp /K.TCP.WSIZE
bne .4
stz SKT.Cache+S.SOCKET.TCP.INHEAD+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2
lda ZPTmpPtr1+1
sta ZPTmpPtr2+1
bra .1
.4 inc ZPTmpPtr2
bne .1
inc ZPTmpPtr2+1
bra .1
.9 sec
rts
.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen
clc
lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+3
adc ZPDataInLen
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+3
lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+2
adc ZPDataInLen+1
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+2
bcc .81
inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM+1
bne .80
inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM
.80 clc
.81 rts
*--------------------------------------
* From TCP.OUT
* Src : hOutMem/OUTTAIL
* Dst : ZPDataOutPtr/ZPDataOutLen
*--------------------------------------
SKT.GetDataFromSktOut
ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y
>SYSCALL2 GetMemPtr
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
pha
tya
* clc
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail
pla
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
sta ZPTmpPtr2+1
lda ZPDataOutLen
eor #$FF
tax
lda ZPDataOutLen+1
eor #$FF
pha
ldy #0
.1 inx
bne .2
pla
inc
beq .8
pha
.2 lda (ZPTmpPtr2)
sta (ZPDataOutPtr),y
iny
bne .3
inc ZPDataOutPtr+1
.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
bne .4
inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
cmp /K.TCP.WSIZE
bne .4
stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2
lda ZPTmpPtr1+1
sta ZPTmpPtr2+1
bra .1
.4 inc ZPTmpPtr2
bne .1
inc ZPTmpPtr2+1
bra .1
.8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataOutLen
clc
rts
*--------------------------------------
SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL
.1 stz SKT.Cache,x

View File

@ -199,18 +199,41 @@ TCP.IN.JMP.ESTBLSH
lda ZPDataInLen Incoming Data in this frame ?
ora ZPDataInLen+1
beq .5 No data, ...
beq .7 No data, ...
ldy #S.TCP.SEQNUM+3
ldx #3
.5 lda (ZPFrameInPtr),y
eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .7
dey
dex
bpl .5
jsr SKT.AddDataToSktIn yes, queue data if there is room for....
bcs .5
bcs .7
jsr SKT.StoreTCB success, update socket
lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+3
* clc
adc ZPDataInLen
sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+3
* jsr TCP.SetSocketTCPO.ACK Try to ACK read DATA
lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+2
adc ZPDataInLen+1
sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+2
bcc .6
inc SKT.Cache+S.SOCKET.TCP.INSEQNUM+1
bne .6
inc SKT.Cache+S.SOCKET.TCP.INSEQNUM
.6 jsr SKT.StoreTCB success, update socket
jsr TCP.SetSocketTCPO.ACK Try to ACK read DATA
* jsr TCP.OUT.I SKT.GetTCB already called
.5 ldy #S.TCP.OPTIONS
.7 ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.FIN
beq .8
@ -315,8 +338,8 @@ TCP.IN.ACKTheSYN
.3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket...
adc #0
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
sta SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
* sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
dey
dex
bpl .3
@ -327,17 +350,17 @@ TCP.IN.ACKTheFIN
ldx #3
.1 inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
bne .2
.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .8
dex
bpl .1
.2 ldx #3
*.2 ldx #3
.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
bne .8
dex
bpl .3
*.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
* bne .8
* dex
* bpl .3
.8 rts
*--------------------------------------
@ -483,7 +506,7 @@ TCP.OUT.I lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1
lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH
jsr TCP.SetSocketTCPO
* jsr TCP.SetSocketTCPO
jsr TCP.OUT.Send
@ -523,7 +546,7 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS
ldx #3
ldy #S.TCP.ACKNUM+3
.1 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
.1 lda SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
sta (ZPFrameOutPtr),y
dey
dex

View File

@ -161,9 +161,6 @@ J.SKT.send .DA SKT.send.RAW
.DO IPDEBUG=1
L.MSG.FRM.Dump .DA MSG.FRM.Dump
L.MSG.SKT.Dump .DA MSG.SKT.Dump
.FIN
.DO IPDEBUG=2
L.MSG.SEQNUM .DA MSG.SEQNUM
.FIN
.DA 0
*--------------------------------------
@ -466,9 +463,6 @@ IP.ID .BS 2
MSG.FRM.Dump .AZ "FRM:SRC=%d.%d.%d.%d:%D DST=%d.%d.%d.%d:%D\r\n"
MSG.SKT.Dump .AZ "SKT:LOC=%d.%d.%d.%d:%D REM=%d.%d.%d.%d:%D\r\n"
.FIN
.DO IPDEBUG=2
MSG.SEQNUM .AZ "FRM:%h%h%h%h,SKT:%h%h%h%h\r\n"
.FIN
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBTCPIP.S