From 36799257be9ea98ca73efd0d92a045cdba851ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 16 Mar 2017 08:32:24 +0100 Subject: [PATCH] Kernel version 0.9 : TCP, added FRAME DUMP to solve the missing ACK problem --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.DEV.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.STARTUP.txt | 4 ++-- BIN/IPCONFIG.S.txt | 10 +++++++++- BIN/RPCDUMP.S.txt | 24 ++++++++++++++++-------- DRV/UTHERNET.DRV.S.txt | 6 +++++- INC/NET.8900A.I.txt | 2 +- LIB/LIBTCPIP.S.HST.txt | 1 + LIB/LIBTCPIP.S.SKT.txt | 2 ++ LIB/LIBTCPIP.S.txt | 28 ++++++++++++++++++++++++++-- README.md | 4 ++-- SBIN/DHCPCLNT.S.txt | 3 ++- 13 files changed, 66 insertions(+), 18 deletions(-) diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index da3f3bfb2970546add7e623764c3b46f19949dee..8ef33d99f72fa9baae516bcc09c0ba485ec062fc 100644 GIT binary patch delta 6311 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 IcAZ}Hzf6YIrT_o{ delta 6468 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 Y1DL-Ce%A2$w5GL5%U86jSh1+ zOpZ;GWn4YEI!QqQs73~;W`g>n9H1_RO_NtA>DL1V6+jx@x)v}@R9eKm_szb!dz4NI zd|$wDOl70eB$Z<-YvmQdlpL5^$pGT4)R?3KvQ!6TAP>|)#R;bxtQ1x&E@0RQc98+9 zk{rJ%g^BmX0gek_*J>)P z(NI|AHYsh_<|}DBjFSbJcsFH89^*FV0f&?_!{f8tRrDBL*@cu87y<(Hf-0OteDs1! V^GY1Mx7V05ws39#Z_mj10RZ=MhIjw~ delta 367 zcmZp8z|ru4V?%`?W z28Kli3JiNsGJY^!E2*$XLSc~*klXuFY0XEaMQjSpdpF3oI<`1$au5(*#Jqriqr=?A zlVg))8Rt!|PErs6s*wSznV`NX2dGP7>EzW(`t?9T1(3$_t_2Jem5!;bWSFD^BsD3m7LVEt&$f zvemi8NnxGh0>+I>izWg2D;X>%rz9J4fy`6_YFqnp^1|eJ-V+BnE__|9sjx;vVUgRS z6sF0%X}c!#GV!wrnS@nrK9FY2xG6*O7`F)zIJA@*9-rB+qQ~gUF08D;pcN3H7gXUK X;-eQ-npfi3wY}Puv4v}y1LFq({9%Iw diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 2b04284ed7c036350be43ae71f619a3408f0af36..5ba209a3227c5e37a4089e17b82623cea782b4b6 100644 GIT binary patch delta 15692 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 delta 15619 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 diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index ee3fda07..274c8afc 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -21,8 +21,8 @@ INSDRV UTHERNET.DRV 000E3A123456 #INSDRV UTHER2.AI.DRV 0008DC123456 #INSDRV LANCEGS.DRV STARTPROC TCPIP -#STARTPROC DHCPCLNT -#STARTPROC TELNETD +STARTPROC DHCPCLNT +STARTPROC TELNETD #STARTPROC HTTPD #NFSMOUNT 192.168.1.5:/A2OSX /MNT/A2OSX #CIFSMOUNT 192.168.1.5:/MSSHARE /MNT/MSSHARE diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 8177fa80..5609fe00 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -107,6 +107,14 @@ CS.RUN.DUMPDEV sta DevID >PUSHYA + lda ZPDevStatPtr + clc + adc #S.DEVSTAT.IDSTRING + tay + lda ZPDevStatPtr+1 + adc /S.DEVSTAT.IDSTRING + >PUSHYA + >PUSHB DevID >LDYA L.MSG1.DEV @@ -256,7 +264,7 @@ MSG0 >CSTR "TCP/IP Status : " MSG0.L >CSTR "Loaded\r\n" MSG0.NL >CSTR "Not Loaded\r\n" *-------------------------------------- -MSG1.DEV >CSTR "\r\nDevice Configuration :\r\n DevID : $%h\r\n Device Name : %s\r\n HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n" +MSG1.DEV >CSTR "\r\nDevice Configuration :\r\n DevID : $%h\r\n Device Type : %S\r\n Device Name : %S\r\n HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n" MSG1.DEV.ARP >CSTR " ARP Offload : %d\r\n" MSG1.DEV.IP >CSTR " IP Offload : %d\r\n" MSG1.LINK >CSTR " Link Status : %s\r\n" diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index 74666d03..c5766bf2 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -102,23 +102,30 @@ CS.RUN jsr Init.Timeout .2 >PUSHW L.Socket >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New - bcs .99 + bcs .91 txa ldy #hSocket sta (pData),y -.3 >PUSHWI RPC.Request.End-RPC.Request - >PUSHW L.RPC.Request - ldy #hSocket + ldx #3 + +.21 lda A2osX.TIMER16,x + sta RPC.Request,x + dex + bpl .21 + +.3 ldy #hSocket >PUSHB (pData),y + >PUSHW L.RPC.Request + >PUSHWI RPC.Request.End-RPC.Request >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write bcc .4 >SYSCALL Sleep jsr Wait.Timeout bcc .3 - bra .99 +.91 bra .99 .4 jsr Init.Timeout @@ -168,9 +175,11 @@ CS.DOEVENT lda (pEvent) *-------------------------------------- CS.QUIT ldy #hSocket lda (pData),y + beq .1 + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA - lda hLIBTCPIP +.1 lda hLIBTCPIP beq .8 >SYSCALL UnloadLibA @@ -247,9 +256,8 @@ Socket.Src.Addr .BS 4 Socket.Src.Port .DA 0 Dynamic Socket.Dst.Addr .BS 4 Socket.Dst.Port .DA UDP.PORT.PMAP - .BS S.SOCKET-16 *-------------------------------------- -RPC.Request .HS 12345678 XID +RPC.Request .BS 4 XID .HS 00000000 0=CALL .HS 00000002 RPCVERS .HS 000186A0 PROG=portmapper diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index ee47a37c..2d8d21e0 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -342,7 +342,7 @@ WRITEBLOCK.1 ldy #S.ETH.SRCMAC+5 OPEN jsr CLOSE >LDYAI PP.RxCTL >STYA PacketPagePTR,x - >LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA + >LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA >STYA PacketPageDATA,x >LDYAI PP.MAC @@ -371,6 +371,10 @@ CLOSE ldx DEVSLOTx0 >LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET >STYA PacketPageDATA,x + lda #0 +.1 dec + bne .1 + >LDYAI PP.SelfCTL >STYA PacketPagePTR,x >LDYAI PP.SelfCTL.LID diff --git a/INC/NET.8900A.I.txt b/INC/NET.8900A.I.txt index 5dabed56..31396eb1 100644 --- a/INC/NET.8900A.I.txt +++ b/INC/NET.8900A.I.txt @@ -29,7 +29,7 @@ PP.RxCTL.MulticastA .EQ %00000010.00000000 PP.RxCTL.IA .EQ %00000100.00000000 PP.RxCTL.BroadcastA .EQ %00001000.00000000 *PP.RxCTL.CRCerrorA .EQ %00010000.00000000 -*PP.RxCTL.RuntA .EQ %00100000.00000000 +PP.RxCTL.RuntA .EQ %00100000.00000000 *PP.RxCTL.ExtradataA .EQ %01000000.00000000 PP.TxCFG .EQ $0106 Transmit Configuration (RW) PP.TxCMD .EQ $0108 Receiver Control (RW) diff --git a/LIB/LIBTCPIP.S.HST.txt b/LIB/LIBTCPIP.S.HST.txt index 45442996..ce72c31e 100644 --- a/LIB/LIBTCPIP.S.HST.txt +++ b/LIB/LIBTCPIP.S.HST.txt @@ -7,6 +7,7 @@ AUTO 6 *-------------------------------------- HST.GetByName >PULLW ZPPtrDNS >PULLW ZPPtrIP + jsr HST.ScanIP bcc .9 jmp DNS.QUERY.I diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index a6c82e99..dc9ccb78 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -827,6 +827,8 @@ SKT.AddDataToSktOut inc beq .8 + pha + .2 lda (ZPDataInPtr),y sta (ZPTmpPtr2) iny diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 26404975..4f2b95f7 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -LOMEM $A00 +LOMEM $900 INC 1 AUTO 6 .LIST OFF @@ -107,6 +107,8 @@ L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED .DA TCP.IN.JMP.FINWT2 .DA TCP.IN.JMP.CLOSING .DA TCP.IN.JMP.TIMEWT +L.DUMP.LEN .DA DUMP.LEN +L.DUMP.DATA .DA DUMP.DATA .DA 0 *-------------------------------------- LIB.LOAD lda bFirstLoad @@ -164,6 +166,8 @@ POLL ldx #DEVMGR.READBLOCK bne .9 cpx /S.ETH.ETHERTYPE.IP bne .9 + + jsr DumpFrame jmp IP.IN @@ -211,6 +215,24 @@ DecDataInLen lda ZPDataInLen .9 rts *-------------------------------------- NetDevJmp jmp * +*-------------------------------------- +DumpFrame ldy #3 + lda (ZPFrameInPtr),y + cmp #$ff + beq .9 + + >PUSHW ZPFrameInLen + >LDYA L.DUMP.LEN + >SYSCALL CPrintFYA + + ldy #63 +.1 >PUSHB (ZPFrameInPtr),y + dey + cpy #1 + bne .1 + >LDYA L.DUMP.DATA + >SYSCALL CPrintFYA +.9 rts *-------------------------------------- .INB LIB/LIBTCPIP.S.ARP .INB LIB/LIBTCPIP.S.CFG @@ -225,6 +247,9 @@ NetDevJmp jmp * *-------------------------------------- CS.END *-------------------------------------- +DUMP.LEN >CSTR "Len :%D\r\n" +DUMP.DATA >CSTR "Data:%h%h%h%h%h%h%h%h%h%h%h%h%h%h %h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h\r\n %h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h %h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h\r\n" +*-------------------------------------- ARP.REQ .DA S.ARP-2 Frame size ARP.REQ.DSTMAC .HS FFFFFFFFFFFF ARP.REQ.SRCMAC .BS 6 @@ -293,7 +318,6 @@ TmpDWord .BS 4 TmpOffset .BS 2 hFrameIn .BS 1 hFrameOut .BS 1 -* hSocket .BS 1 bTextMode .BS 1 HST.DecStr .BS 4 HST.IP .BS 5 diff --git a/README.md b/README.md index 9267fb13..d8196b20 100644 --- a/README.md +++ b/README.md @@ -145,10 +145,10 @@ note : '$VAR' does NOT expand Variable | | | -R : Recurse subdirectories | | | RM | Working | -C : Continue On Error | 0.9 | | | | -R : Recurse subdirectories | | -| CP | In Progress | -C : Continue On Error | 0.9 | +| CP | Working | -C : Continue On Error | 0.9 | | | | -R : Recurse subdirectories | | | | | -Y : Dont't Prompt For Override | | -| MV | In Progress | -C : Continue On Error | 0.9 | +| MV | Working | -C : Continue On Error | 0.9 | | | | -R : Recurse subdirectories | | | | | -Y : Dont't Prompt For Override | | | CAT | Working | -A : Show All non printable caracters | 0.9 | diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index ab5c51a2..536332f6 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -240,10 +240,11 @@ CS.DOEVENT lda (pEvent) *-------------------------------------- CS.QUIT ldy #hSocket lda (pData),y + beq .1 >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA - lda hLIBTCPIP +.1 lda hLIBTCPIP >SYSCALL UnloadLibA clc rts