mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-16 18:30:26 +00:00
Kernel 0.93
This commit is contained in:
parent
789a5d6448
commit
453c30b3a3
Binary file not shown.
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user