From aa29d2c12f89623c4b8f72ab46d288cfe3436542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 13 May 2019 17:40:37 +0200 Subject: [PATCH] Kernel 0.93 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes LIB/LIBTCPIP.S.ARP.txt | 17 +++++++------- LIB/LIBTCPIP.S.DNS.txt | 48 +++++++++++++++++++++++++++------------ LIB/LIBTCPIP.S.SKT.txt | 9 ++------ LIB/LIBTCPIP.S.TCP.txt | 34 +++++++++++++++------------ LIB/LIBTCPIP.S.txt | 4 ++-- 6 files changed, 66 insertions(+), 46 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 7521b6cc1b04b70d1ea5a7cb8f8418956e9bd7bc..cc5d29c0ac2d25b28b28fcc6389ac62b5ccaeea2 100644 GIT binary patch delta 23176 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 L.ARP.CACHE >STYA ZPCachePtr - lda #K.ARPCACHE.SIZE - sta TmpOffset + ldx #K.ARPCACHE.SIZE .1 lda (ZPCachePtr) beq .3 - ldx #3 - ldy #S.ARPCACHE.IP+3 + ldy #S.ARPCACHE.IP -.2 lda ARP.TmpCache+S.ARPCACHE.IP,x +.2 lda ARP.TmpCache,y cmp (ZPCachePtr),y bne .3 - dey - dex - bpl .2 + iny + cpy #S.ARPCACHE.IP+4 + bne .2 clc rts @@ -277,8 +275,9 @@ ARP.FIND.BY.IP >LDYA L.ARP.CACHE bcc .8 inc ZPCachePtr+1 -.8 dec TmpOffset +.8 dex bne .1 + sec rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 570a66c3..ca7822d5 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -252,18 +252,20 @@ DNS.FIND.BY.NAME >LDYA L.DNS.CACHE >STYA ZPCachePtr - lda #K.DNSCACHE.SIZE - sta TmpOffset + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .6 empty DNS cache entry? + phx + >PUSHW ZPPtrDNS ldy #S.DNSCACHE.hNAME lda (ZPCachePtr),y >SYSCALL2 GetMemPtr >SYSCALL2 StrCaseCmp + plx bcc .8 .6 lda ZPCachePtr @@ -273,8 +275,9 @@ DNS.FIND.BY.NAME bcc .7 inc ZPCachePtr+1 -.7 dec TmpOffset +.7 dex bne .1 + sec .8 rts *-------------------------------------- @@ -319,38 +322,45 @@ DNS.UPDATE.BY.ID .7 dex bne .1 + sec rts *-------------------------------------- DNS.FIND.FREE >LDYA L.DNS.CACHE >STYA ZPCachePtr - lda #K.DNSCACHE.SIZE - sta TmpOffset - lda #$ff sta TmpDWord sta TmpDWord+1 sta TmpDWord+2 sta TmpDWord+3 + + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .8 empty DNS cache entry? + bit #S.DNSCACHE.STATUS.STATIC+S.DNSCACHE.STATUS.PENDING - bne .6 Static/Pending.....skip + bne .7 Static/Pending.....skip + + phx ldy #S.DNSCACHE.TTL ldx #3 + sec + .2 lda TmpDWord,x is saved TTL greater then actual TTL? sbc (ZPCachePtr),y iny dex bpl .2 + bcc .6 no, ldy #S.DNSCACHE.TTL ldx #3 + .3 lda (ZPCachePtr),y Save new lowest TTL sta TmpDWord,x iny @@ -360,14 +370,16 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE >LDYA ZPCachePtr >STYA ZPTmpPtr1 save lowest TTL slot ... -.6 lda ZPCachePtr +.6 plx + +.7 lda ZPCachePtr clc adc #S.DNSCACHE sta ZPCachePtr - bcc .7 + bcc .71 inc ZPCachePtr+1 -.7 dec TmpOffset +.71 dex bne .1 no empty slot found, discard lowest TTL >LDYA ZPTmpPtr1 @@ -380,26 +392,33 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE DNS.EXPIRE >LDYA L.DNS.CACHE >STYA ZPCachePtr - lda #K.DNSCACHE.SIZE - sta TmpOffset + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .7 empty DNS cache entry? + bit #S.DNSCACHE.STATUS.STATIC bne .7 + phx + ldy #S.DNSCACHE.TTL ldx #4 clc + .2 lda (ZPCachePtr),y sbc #0 sta (ZPCachePtr),y iny dex bne .2 - bcs .7 + + bcs .6 + jsr DNS.FREE +.6 plx + .7 lda ZPCachePtr clc adc #S.DNSCACHE @@ -407,8 +426,9 @@ DNS.EXPIRE >LDYA L.DNS.CACHE bcc .8 inc ZPCachePtr+1 -.8 dec TmpOffset +.8 dex bne .1 + clc rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 56f03059..68f45268 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -514,14 +514,9 @@ SKT.GetDataFromSktIn .80 jsr SKT.StoreTCB - ldy #S.SOCKET.TCP.O - lda (ZPPtrSKT),y - ora #S.TCP.OPTIONS.ACK - sta (ZPPtrSKT),y - - jsr TCP.OUT.I SKT.GetTCB already called, Try to ACK read DATA + jsr TCP.SetSocketTCPO.ACK Send the new WSIZE -.88 >LDYA ZPTmpPtr3 + >LDYA ZPTmpPtr3 clc rts */-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index e7a32e9b..39b6a149 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -216,6 +216,10 @@ TCP.IN.JMP.ESTBLSH bcs .2 jsr SKT.StoreTCB success, update socket + + jsr TCP.SetSocketTCPO.ACK Try to ACK read DATA + +* jsr TCP.OUT.I SKT.GetTCB already called .2 ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y @@ -330,10 +334,7 @@ TCP.IN.ACKTheSYN rts *-------------------------------------- TCP.IN.ACKTheFIN - ldy #S.SOCKET.TCP.O - lda (ZPPtrSKT),y - ora #S.TCP.OPTIONS.ACK - sta (ZPPtrSKT),y + jsr TCP.SetSocketTCPO.ACK ldx #3 @@ -374,11 +375,11 @@ TCP.IN.SetDataInPtrAndLen and #$F0 Get TCP Header len in DWORD lsr lsr - sta TmpOffset + sta ZPDataInPtr TMP Storage lda ZPDataInLen sec - sbc TmpOffset + sbc ZPDataInPtr TMP Storage sta ZPDataInLen bcs .1 @@ -395,7 +396,7 @@ TCP.IN.SetDataInPtrAndLen pla clc - adc TmpOffset + adc ZPDataInPtr TMP Storage bcc .2 inx @@ -436,10 +437,9 @@ TCP.OUT.I lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 jsr SKT.GetDataFromSktOut - ldy #S.SOCKET.TCP.O - lda (ZPPtrSKT),y - ora #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH - sta (ZPPtrSKT),y + lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH + + jsr TCP.SetSocketTCPO jsr TCP.OUT.Send @@ -461,9 +461,7 @@ TCP.OUT.I lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 .80 jmp SKT.StoreTCB exits with CC *-------------------------------------- TCP.OUT.SendOptA - ldy #S.SOCKET.TCP.O - ora (ZPPtrSKT),y - sta (ZPPtrSKT),y + jsr TCP.SetSocketTCPO >LDYAI 0 jsr TCP.NewFrame @@ -513,6 +511,14 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS * clc .9 rts *-------------------------------------- +TCP.SetSocketTCPO.ACK + lda #S.TCP.OPTIONS.ACK +TCP.SetSocketTCPO + ldy #S.SOCKET.TCP.O + ora (ZPPtrSKT),y + sta (ZPPtrSKT),y + rts +*-------------------------------------- TCP.NewFrame ldx #S.IP.PROTOCOL.TCP jsr FRM.NewIP bcs .9 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 0ed0ec28..7a852d7f 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -452,9 +452,9 @@ SKT.Index .BS 1 SKT.TABLE .BS K.SKTTABLE.SIZE SKT.LOC.ADDR .BS S.SOCKADDR SKT.REM.ADDR .BS S.SOCKADDR -SKT.Cache .BS S.SOCKET.TCP +SKT.Cache .EQ *-S.SOCKET.TCP.INTAIL + .BS S.SOCKET.TCP-S.SOCKET.TCP.INTAIL TmpDWord .BS 4 -TmpOffset .BS 2 hFrameIn .BS 1 hFrameOut .BS 1 HST.SScanF .AZ "%d.%d.%d.%d"