Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-06-17 08:35:54 +02:00
parent 789a5d6448
commit 453c30b3a3
6 changed files with 94 additions and 45 deletions

Binary file not shown.

View File

@ -181,7 +181,7 @@ S.SOCKET.TCP.INFREE .EQ S.SOCKET+6
S.SOCKET.TCP.INUSED .EQ S.SOCKET+8
*
S.SOCKET.TCP.OUTTAIL .EQ S.SOCKET+10
S.SOCKET.TCP.OUTTAILNEXT .EQ S.SOCKET+12
S.SOCKET.TCP.OUTTAILSENT .EQ S.SOCKET+12
S.SOCKET.TCP.OUTHEAD .EQ S.SOCKET+14
S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+16
S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+18
@ -189,8 +189,8 @@ S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+20
*
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.OUTNEXTSEQ .EQ S.SOCKET+26 Send:Next SEQ to send
S.SOCKET.TCP.OUTSENTSEQ .EQ S.SOCKET+30 Send:SEQ sent not yet ACKed (retransmit)
*
S.SOCKET.TCP .EQ S.SOCKET+34
*--------------------------------------

View File

@ -246,15 +246,11 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
bcs FRM.Queue
.6 jsr FRM.Send
bcs FRM.Queue
lda hFrameOut
beq .9
>SYSCALL2 FreeMem
stz hFrameOut
clc
.9 rts
jsr FRM.Discard
clc
rts
*--------------------------------------
FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry
beq .9
@ -267,7 +263,8 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry
ldx #0
.1 cpx FRM.QUEUE.Tail
beq .9
beq FRM.Discard
ldy FRM.QUEUE.Head
stx FRM.QUEUE.Head
@ -280,12 +277,17 @@ FRM.Queue ldy hFrameOut no hFrame, cannot queue for retry
sta FRM.QUEUE.LenL,y
lda ZPFrameOutLen+1
sta FRM.QUEUE.LenH,y
clc
rts
.9 sec
rts
*--------------------------------------
FRM.Discard lda hFrameOut
beq .9
>SYSCALL2 FreeMem
stz hFrameOut
.9 sec
rts
*--------------------------------------
FRM.Retry ldx FRM.QUEUE.Tail
.10 cpx FRM.QUEUE.Head

View File

@ -183,17 +183,19 @@ SKT.connect.STREAM
SKT.connect.SEQPACKET
jsr SKT.SetRemAddr
jsr SKT.NewTCB
bcs .99
bcs SKT.listen.RTS
lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN
bcs .9
* bcs .9 could be queued for ARP....
lda #S.SOCKET.TCP.S.SYNSENT
jmp SKT.StoreTCB.S
.9 lda #ERR.SKT.BAD
sec
.99 rts
*.9 lda #ERR.SKT.BAD
* sec
* clc
*.99 rts
*/--------------------------------------
* # Listen
* Listen for connections on a socket
@ -230,6 +232,7 @@ SKT.listen >SYSCALL2 GetMemPtr
.9 lda #ERR.SKT.BAD
sec
SKT.listen.RTS
rts
*/--------------------------------------
* # Accept
@ -364,6 +367,7 @@ SKT.shutdown.STREAM
.1 cmp #S.SOCKET.TCP.S.TIMEWT
beq .8
lda #S.TCP.OPTIONS.RST+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA Send RST/ACK
bcs .9
@ -497,6 +501,17 @@ SKT.GetDataFromSktIn
* Dst : hInMem/INHEAD
*--------------------------------------
SKT.AddDataToSktIn
* lda ZPDataInLen
* cmp #536
* bne .10
* lda ZPDataInLen+1
* cmp /536
* bne .10
* >DEBUG
*.10
lda SKT.Cache+S.SOCKET.TCP.INFREE
sec
sbc ZPDataInLen
@ -692,11 +707,11 @@ SKT.GetDataFromSktOut
pha
tya
* clc
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT
sta ZPTmpPtr2 Make ZPTmpPtr2=base+nexttail
pla
adc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
adc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1
sta ZPTmpPtr2+1
lda ZPDataOutLen
@ -723,15 +738,15 @@ SKT.GetDataFromSktOut
bne .3
inc ZPDataOutPtr+1
.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT
.3 inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT
bne .4
inc SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
lda SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1
lda SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1
cmp /K.TCP.WSIZE
bne .4
stz SKT.Cache+S.SOCKET.TCP.OUTTAILNEXT+1
stz SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1
lda ZPTmpPtr1 Dst Ptr=Buffer Base
sta ZPTmpPtr2
lda ZPTmpPtr1+1

View File

@ -125,7 +125,7 @@ TCP.IN.JMP.SYNRCVD
.1 lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x Check if ACK=OUTNEXTSEQ+1
adc #0
sta SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x setup SEQNUM
sta SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x setup SEQNUM
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x ...and update NEXTSEQ
eor (ZPFrameInPtr),y
bne .8
@ -140,13 +140,16 @@ TCP.IN.JMP.SYNRCVD
.9 rts
*--------------------------------------
TCP.IN.JMP.ESTBLSH
.DO IPDEBUG=1
jsr DEBUG.IPID
.FIN
jsr SKT.GetTCB
ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.ACK Remote side ACKed data ?
beq .4
* Ack sent data
ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn...
ldx #3 Substract old ACK from socket
@ -154,10 +157,10 @@ TCP.IN.JMP.ESTBLSH
.1 lda (ZPFrameInPtr),y
pha
sbc SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x
sbc SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x
sta TmpDWord,x
pla ....and Set SEQ = new SEQ
sta SKT.Cache+S.SOCKET.TCP.OUTSEQNUM,x
sta SKT.Cache+S.SOCKET.TCP.OUTSENTSEQ,x
dey
dex
bpl .1
@ -168,7 +171,9 @@ TCP.IN.JMP.ESTBLSH
tay
beq .4
.2 clc
.2 pha
clc
adc SKT.Cache+S.SOCKET.TCP.OUTTAIL
sta SKT.Cache+S.SOCKET.TCP.OUTTAIL
@ -177,12 +182,14 @@ TCP.IN.JMP.ESTBLSH
and /K.TCP.WSIZE-1
sta SKT.Cache+S.SOCKET.TCP.OUTTAIL+1
lda SKT.Cache+S.SOCKET.TCP.OUTFREE
pla
clc
adc TmpDWord+3
adc SKT.Cache+S.SOCKET.TCP.OUTFREE
sta SKT.Cache+S.SOCKET.TCP.OUTFREE
lda SKT.Cache+S.SOCKET.TCP.OUTFREE+1
adc TmpDWord+2
txa
adc SKT.Cache+S.SOCKET.TCP.OUTFREE+1
sta SKT.Cache+S.SOCKET.TCP.OUTFREE+1
lda SKT.Cache+S.SOCKET.TCP.OUTUSED
@ -193,8 +200,8 @@ TCP.IN.JMP.ESTBLSH
sbc TmpDWord+2
sta SKT.Cache+S.SOCKET.TCP.OUTUSED+1
jsr SKT.StoreTCB
* jsr SKT.StoreTCB
* Store incoming data
.4 jsr TCP.IN.SetDataInPtrAndLen
lda ZPDataInLen Incoming Data in this frame ?
@ -206,13 +213,14 @@ TCP.IN.JMP.ESTBLSH
.5 lda (ZPFrameInPtr),y
eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .7
bne .9 Missed a frame.....
dey
dex
bpl .5
jsr SKT.AddDataToSktIn yes, queue data if there is room for....
bcs .7
bcs .9 Should never appends....
lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+3
* clc
@ -242,10 +250,25 @@ TCP.IN.JMP.ESTBLSH
jsr TCP.IN.ACKTheFIN
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
jmp TCP.SetSocketTCPO FIN received, Send FIN.ACK
jsr TCP.SetSocketTCPO FIN received, Send FIN.ACK
.8 clc
.9 rts
.8 jsr TCP.OUT Send ACK as soon as possible
.9 clc
rts
*--------------------------------------
.DO IPDEBUG=1
DEBUG.IPID ldy #S.IP.IDENTIFICATION
lda (ZPFrameInPtr),y
>PUSHA
iny
lda (ZPFrameInPtr),y
>PUSHA
>PUSHBI 2
>LDYA L.IPID
>SYSCALL printf
rts
.FIN
*--------------------------------------
TCP.IN.JMP.CLWAIT
clc Wait for SKT.shutdown
@ -438,13 +461,15 @@ TCP.SENDCLOSE ldx #0
.4 ldy #S.SOCKET.SQ.hInMem
lda (ZPPtrSKT),y
beq .5
>SYSCALL2 freemem
ldy #S.SOCKET.SQ.hOutMem
.5 ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y
beq .6
>SYSCALL2 freemem
plx
.6 plx
phx
lda SKT.TABLE,x
stz SKT.TABLE,x

View File

@ -158,6 +158,7 @@ J.SKT.send .DA SKT.send.RAW
.DA SKT.send.DGRAM
.DA SKT.send.SEQPACKET
.DA SKT.send.STREAM
L.IPID .DA IPID
.DO IPDEBUG=1
L.MSG.FRM.Dump .DA MSG.FRM.Dump
L.MSG.SKT.Dump .DA MSG.SKT.Dump
@ -212,6 +213,7 @@ INCOMING sta hFrameIn
jmp IP.IN
.9 sec
INCOMING.RTS
rts
*--------------------------------------
* A = S.EVT.F
@ -221,13 +223,17 @@ INCOMING sta hFrameIn
PULSE and #S.EVT.F.T1SEC
beq .1
jsr ARP.EXPIRE
jsr ARP.EXPIRE every sec
jsr DNS.EXPIRE
.1 jsr FRM.RETRY
.1 jsr FRM.RETRY every 100ms
jsr DNS.POLL
jmp TCP.SENDCLOSE
* lda A2osX.TIMER16
* lsr
* bcs INCOMING.RTS Only every 200ms
jmp TCP.SENDCLOSE
*--------------------------------------
GetDynPort inc DYNPORT.LAST
bne .1
@ -459,6 +465,7 @@ hFrameIn .BS 1
hFrameOut .BS 1
HST.SScanF .AZ "%d.%d.%d.%d"
IP.ID .BS 2
IPID .AZ "IPID:%H\r\n"
.DO IPDEBUG=1
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"