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.OUTTOSEND .EQ S.SOCKET+18
S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20 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.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.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.HTYPE .EQ S.ETH.EII+0 $0001
S.ARP.PTYPE .EQ S.ETH.EII+2 $0800 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 .8 >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPDataInLen
>SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen >SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPDataInLen
lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 * lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
clc * clc
adc ZPDataInLen * adc ZPDataInLen
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 * sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3
lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 * lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
adc ZPDataInLen+1 * adc ZPDataInLen+1
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2 * sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM+2
bcc .80 * bcc .80
inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1 * inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM+1
bne .80 * bne .80
inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM * 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 * jsr TCP.OUT.I SKT.GetTCB already called
>LDYA ZPDataInLen >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 clc
rts rts
*/-------------------------------------- */--------------------------------------
@ -609,9 +692,79 @@ SKT.AddDataToSktOut
>ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen >ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen
jsr SKT.StoreTCB 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 >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 clc
rts rts
*/-------------------------------------- */--------------------------------------
@ -1040,201 +1193,6 @@ SKT.AddToQueueA pha
* sec * sec
rts 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 SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL
.1 stz SKT.Cache,x .1 stz SKT.Cache,x

View File

@ -199,18 +199,41 @@ TCP.IN.JMP.ESTBLSH
lda ZPDataInLen Incoming Data in this frame ? lda ZPDataInLen Incoming Data in this frame ?
ora ZPDataInLen+1 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.... 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 * jsr TCP.OUT.I SKT.GetTCB already called
.5 ldy #S.TCP.OPTIONS .7 ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.FIN and #S.TCP.OPTIONS.FIN
beq .8 beq .8
@ -315,8 +338,8 @@ TCP.IN.ACKTheSYN
.3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... .3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket...
adc #0 adc #0
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x sta SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x * sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
dey dey
dex dex
bpl .3 bpl .3
@ -327,17 +350,17 @@ TCP.IN.ACKTheFIN
ldx #3 ldx #3
.1 inc SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x .1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .2 bne .8
dex dex
bpl .1 bpl .1
.2 ldx #3 *.2 ldx #3
.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x *.3 inc SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
bne .8 * bne .8
dex * dex
bpl .3 * bpl .3
.8 rts .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 lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH
jsr TCP.SetSocketTCPO * jsr TCP.SetSocketTCPO
jsr TCP.OUT.Send jsr TCP.OUT.Send
@ -523,7 +546,7 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS
ldx #3 ldx #3
ldy #S.TCP.ACKNUM+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 sta (ZPFrameOutPtr),y
dey dey
dex dex

View File

@ -161,9 +161,6 @@ J.SKT.send .DA SKT.send.RAW
.DO IPDEBUG=1 .DO IPDEBUG=1
L.MSG.FRM.Dump .DA MSG.FRM.Dump L.MSG.FRM.Dump .DA MSG.FRM.Dump
L.MSG.SKT.Dump .DA MSG.SKT.Dump L.MSG.SKT.Dump .DA MSG.SKT.Dump
.FIN
.DO IPDEBUG=2
L.MSG.SEQNUM .DA MSG.SEQNUM
.FIN .FIN
.DA 0 .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.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" MSG.SKT.Dump .AZ "SKT:LOC=%d.%d.%d.%d:%D REM=%d.%d.%d.%d:%D\r\n"
.FIN .FIN
.DO IPDEBUG=2
MSG.SEQNUM .AZ "FRM:%h%h%h%h,SKT:%h%h%h%h\r\n"
.FIN
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S SAVE USR/SRC/LIB/LIBTCPIP.S