From 70357a55471a64ec7f89532f8dee141af296a1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 6 Oct 2019 14:50:43 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.B800.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/ARP.S.txt | 34 +++++-- BIN/DNSINFO.S.txt | 19 ++-- INC/LIBTCPIP.I.txt | 4 +- LIB/LIBTCPIP.S.ARP.txt | 188 ++++++++++++++++++++++++--------------- LIB/LIBTCPIP.S.DNS.txt | 113 ++++++++++++++--------- LIB/LIBTCPIP.S.IP.txt | 3 + LIB/LIBTCPIP.S.SKT.txt | 23 +++-- 9 files changed, 239 insertions(+), 145 deletions(-) diff --git a/.Floppies/A2OSX.B800.po b/.Floppies/A2OSX.B800.po index 16ab08df4875b99c6b7572c8081f59d3ae556fac..3ef814cf2ac2fd1a5e15c235deec3d9de98fb244 100644 GIT binary patch delta 41689 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 delta 44075 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 QT(H3ZuLYhQYw8jH2O!~MK>z>% diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 7e8758c56f665d0c4ecf25548da90fb486dae256..6817c0a5355f9b17037dd0d7cb3be3eb0466e2c8 100644 GIT binary patch delta 20913 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 delta 15760 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 diff --git a/BIN/ARP.S.txt b/BIN/ARP.S.txt index e97deaa6..75dcfd03 100644 --- a/BIN/ARP.S.txt +++ b/BIN/ARP.S.txt @@ -12,7 +12,13 @@ NEW *-------------------------------------- TIMEOUT.MAX .EQ 40 40*100ms = 4 sec. *-------------------------------------- -ZPPTR1 .EQ ZPBIN + .DUMMY + .OR ZPBIN +ZS.START +ZPPTR1 .BS 2 +EntryCount .BS 1 +ZS.END + .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -22,10 +28,10 @@ CS.START cld .DA #1 BIN Layout Version 1 .DA #S.PS.F.EVENT .DA #0 - .DA CS.END-CS.START CS - .DA DS.END-DS.START DS - .DA #16 SS - .DA #2 ZP + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data Segment Size + .DA #32 Stack Size + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table @@ -144,19 +150,26 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE >LDYA L.MSG0 >SYSCALL puts - ldx #K.ARPCACHE.SIZE + lda #K.ARPCACHE.SIZE + sta EntryCount + .1 lda (ZPPTR1) beq .4 + ldy #S.ARPCACHE.IP+4 + .2 dey >PUSHB (ZPPTR1),y cpy #S.ARPCACHE.IP bne .2 + ldy #S.ARPCACHE.MAC+6 + .3 dey >PUSHB (ZPPTR1),y cpy #S.ARPCACHE.MAC bne .3 + ldy #S.ARPCACHE.TTL+1 >PUSHB (ZPPTR1),y dey @@ -164,17 +177,19 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE >PUSHB (ZPPTR1) >PUSHBI 13 >LDYA L.MSG1 - phx >SYSCALL printf - plx + .4 lda ZPPTR1 clc adc #S.ARPCACHE sta ZPPTR1 bcc .5 + inc ZPPTR1+1 -.5 dex + +.5 dec EntryCount bne .1 + .8 lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts @@ -192,6 +207,7 @@ CS.DOEVENT lda (pEvent) *-------------------------------------- CS.QUIT lda hLIBTCPIP beq .8 + >SYSCALL UnloadLib .8 clc rts diff --git a/BIN/DNSINFO.S.txt b/BIN/DNSINFO.S.txt index 12014c41..fea9a93d 100644 --- a/BIN/DNSINFO.S.txt +++ b/BIN/DNSINFO.S.txt @@ -13,7 +13,8 @@ NEW .DUMMY .OR ZPBIN ZS.START -ZPPTR1 .EQ ZPBIN +ZPPTR1 .BS 2 +EntryCount .BS 1 ZS.END .ED *-------------------------------------- @@ -26,7 +27,7 @@ CS.START cld .DA #0 S.PS.F.EVENT .DA #0 .DA CS.END-CS.START Code Size (without Constants) - .DA DS.END-DS.START Data SegmentSize + .DA DS.END-DS.START Data Segment Size .DA #32 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 @@ -108,7 +109,8 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GetCache >SYSCALL puts lda #K.DNSCACHE.SIZE - >STA.G EntryCount + sta EntryCount + .1 lda (ZPPTR1) beq .6 @@ -150,13 +152,13 @@ CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GetCache sta ZPPTR1 bcc .7 inc ZPPTR1+1 -.7 >DEC.G EntryCount - - bne .8 + +.7 dec EntryCount + bne .1 + + lda #0 sec rts - -.8 jmp .1 *-------------------------------------- CS.EVENT sec rts @@ -182,7 +184,6 @@ MSG.USAGE .AS "Usage : Add a static entry, DNSINFO \r\n" *-------------------------------------- DS.START DST.IP .BS 4 -EntryCount .BS 1 DS.END *-------------------------------------- MAN diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index e397acfa..e6c56b52 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -3,8 +3,8 @@ NEW .LIST OFF .OP 65C02 *-------------------------------------- -K.ARPCACHE.SIZE .EQ 10 -K.DNSCACHE.SIZE .EQ 10 +K.ARPCACHE.SIZE .EQ 8 +K.DNSCACHE.SIZE .EQ 8 K.SKTTABLE.SIZE .EQ 16 K.FRMQUEUE.SIZE .EQ 16 K.FRMSEND.RETRY .EQ 10 diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index 93f7bde4..a5fdc64d 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -9,9 +9,11 @@ NEW *\-------------------------------------- ARP.Clear lda hARPCache bne .1 + >LDYAI K.ARPCACHE.SIZE*S.ARPCACHE >SYSCALL2 GetMem0 bcs .9 + stx hARPCache rts @@ -36,21 +38,21 @@ ARP.Clear lda hARPCache * CC: hit: MAC filled * CS: missed *\-------------------------------------- -ARP.Query >PULLW ZPPtrIP IP +ARP.Query jsr ARP.GetIP + >PULLW ZPPtrMAC MAC - ldy #3 -.1 lda (ZPPtrIP),y - sta ARP.TmpCache+S.ARPCACHE.IP,y - dey - bpl .1 + jsr ARP.QUERY.I bcs .9 + ldy #5 + .2 lda ARP.TmpCache+S.ARPCACHE.MAC,y sta (ZPPtrMAC),y dey bpl .2 - clc + +* clc .9 rts */-------------------------------------- * # ARP.Add @@ -59,17 +61,10 @@ ARP.Query >PULLW ZPPtrIP IP * PUSHW PTR to MAC * PUSHW PTR to IP *\-------------------------------------- -ARP.Add >PULLW ZPPtrIP IP +ARP.Add jsr ARP.GetIP + >PULLW ZPPtrMAC MAC - stz ARP.TmpCache+S.ARPCACHE.TTL - stz ARP.TmpCache+S.ARPCACHE.TTL+1 - - ldy #3 - -.1 lda (ZPPtrIP),y - sta ARP.TmpCache+S.ARPCACHE.IP,y - dey - bpl .1 + ldy #5 .2 lda (ZPPtrMAC),y @@ -77,18 +72,25 @@ ARP.Add >PULLW ZPPtrIP IP dey bpl .2 + stz ARP.TmpCache+S.ARPCACHE.TTL + stz ARP.TmpCache+S.ARPCACHE.TTL+1 + lda #S.ARPCACHE.S.RESOLVED+S.ARPCACHE.S.STATIC + ARP.ADD.I sta ARP.TmpCache jsr ARP.FIND.BY.IP bcc .1 + jsr ARP.FIND.FREE + .1 ldy #S.ARPCACHE-1 .2 lda ARP.TmpCache,y sta (ZPCachePtr),y dey bpl .2 + clc rts */-------------------------------------- @@ -106,28 +108,6 @@ ARP.GetCache lda hARPCache *-------------------------------------- * PRIVATE *-------------------------------------- -ARP.AddFromFrameInPtr - ldy #S.IP.SRC+3 - ldx #3 -.1 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.IP,x - dey - dex - bpl .1 - ldy #S.ETH.SRCMAC+5 - ldx #5 -.2 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.MAC,x - dey - dex - bpl .2 - lda #K.ARP.TTL - sta ARP.TmpCache+S.ARPCACHE.TTL - lda /K.ARP.TTL - sta ARP.TmpCache+S.ARPCACHE.TTL+1 - lda #S.ARPCACHE.S.RESOLVED - jmp ARP.ADD.I -*-------------------------------------- ARP.IN ldy #S.ARP.TPA+3 ldx #3 @@ -137,33 +117,42 @@ ARP.IN ldy #S.ARP.TPA+3 dey dex bpl .1 + ldy #S.ARP.OPERATION+1 HI byte lda (ZPFrameInPtr),y cmp #S.ARP.OPERATION.REQ beq ARP.IN.REQ + cmp #S.ARP.OPERATION.REP beq ARP.IN.REP + ARP.IN.EXIT lda hFrameIn beq .8 + stz hFrameIn >SYSCALL2 FreeMem .8 clc rts + ARP.IN.REQ ldy #S.ARP.SPA+3 ldx #3 + .1 lda (ZPFrameInPtr),y sta ARP.REP.TPA,x dey dex bpl .1 + ldy #S.ARP.SHA+5 ldx #5 + .2 lda (ZPFrameInPtr),y sta ARP.REP.DSTMAC,x sta ARP.REP.THA,x dey dex bpl .2 + >LDYA L.ARP.REP jsr ARP.Send bra ARP.IN.EXIT @@ -172,42 +161,38 @@ ARP.IN.REP lda #K.ARP.TTL sta ARP.TmpCache+S.ARPCACHE.TTL lda /K.ARP.TTL sta ARP.TmpCache+S.ARPCACHE.TTL+1 + ldy #S.ARP.SPA+3 - ldx #3 -.1 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.IP,x - dey - dex - bpl .1 + jsr ARP.GetIPFromFrameInPtrY ldy #S.ARP.SHA+5 - ldx #5 -.2 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.MAC,x - dey - dex - bpl .2 + jsr ARP.GetMacFromFrameInPtrY + lda #S.ARPCACHE.S.RESOLVED jsr ARP.ADD.I - jmp ARP.IN.EXIT + bra ARP.IN.EXIT *-------------------------------------- ARP.QUERY.I jsr ARP.FIND.BY.IP bcs .3 send an ARP request lda (ZPCachePtr) get status... bpl .9 Pending... + ldy #S.ARPCACHE.MAC + .2 lda (ZPCachePtr),y sta ARP.TmpCache,y iny cpy #S.ARPCACHE.MAC+6 bne .2 + ldy #S.ARPCACHE.TTL lda #K.ARP.TTL sta (ZPCachePtr),y iny lda /K.ARP.TTL sta (ZPCachePtr),y + clc rts @@ -217,14 +202,17 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP sta ARP.REQ.TPA,x dex bpl .4 + >LDYA L.ARP.REQ jsr ARP.Send bcs .99 + lda #K.ARP.PENDING.TTL sta ARP.TmpCache+S.ARPCACHE.TTL stz ARP.TmpCache+S.ARPCACHE.TTL+1 lda #S.ARPCACHE.S.PENDING jsr ARP.ADD.I + .9 lda #ERR.ARP.PENDING sec .99 rts @@ -236,21 +224,21 @@ ARP.FIND.BY.IP jsr ARP.GetCache beq .3 ldy #S.ARPCACHE.IP + .2 lda ARP.TmpCache,y cmp (ZPCachePtr),y bne .3 + iny cpy #S.ARPCACHE.IP+4 bne .2 + clc rts -.3 lda ZPCachePtr - clc - adc #S.ARPCACHE - sta ZPCachePtr - bcc .8 - inc ZPCachePtr+1 -.8 dex + +.3 jsr ARP.NextCache + + dex bne .1 sec @@ -263,9 +251,11 @@ ARP.FIND.FREE jsr ARP.GetCache sta TmpDWord+1 ldx #K.ARPCACHE.SIZE + .1 lda (ZPCachePtr) beq .8 bpl .6 + ldy #S.ARPCACHE.TTL lda (ZPCachePtr),y sec @@ -274,6 +264,7 @@ ARP.FIND.FREE jsr ARP.GetCache lda (ZPCachePtr),y sbc TmpDWord+1 bcc .6 + lda (ZPCachePtr),y sta TmpDWord+1 dey @@ -282,27 +273,29 @@ ARP.FIND.FREE jsr ARP.GetCache >LDYA ZPCachePtr >STYA ZPTmpPtr1 save lowest TTL slot ... -.6 lda ZPCachePtr - clc - adc #S.ARPCACHE - sta ZPCachePtr - bcc .7 - inc ZPCachePtr+1 -.7 dex +.6 jsr ARP.NextCache + + dex bne .1 + >LDYA ZPTmpPtr1 >STYA ZPCachePtr lda #0 sta (ZPCachePtr) + .8 clc rts *-------------------------------------- ARP.EXPIRE jsr ARP.GetCache + ldx #K.ARPCACHE.SIZE + .1 lda (ZPCachePtr) beq .2 + and #S.ARPCACHE.S.STATIC bne .2 + ldy #S.ARPCACHE.TTL sec lda (ZPCachePtr),y @@ -313,16 +306,71 @@ ARP.EXPIRE jsr ARP.GetCache sbc #0 sta (ZPCachePtr),y bcs .2 + lda #0 sta (ZPCachePtr) -.2 lda ZPCachePtr + +.2 jsr ARP.NextCache + + dex + bne .1 + + rts +*-------------------------------------- +ARP.NextCache lda ZPCachePtr clc adc #S.ARPCACHE sta ZPCachePtr - bcc .3 + bcc .8 inc ZPCachePtr+1 -.3 dex - bne .1 + +.8 rts +*-------------------------------------- +ARP.GetIP >PULLW ZPPtrIP + + ldy #3 + +.1 lda (ZPPtrIP),y + sta ARP.TmpCache+S.ARPCACHE.IP,y + dey + bpl .1 + + rts +*-------------------------------------- +ARP.AddFromFrameInPtr + ldy #S.IP.SRC+3 + jsr ARP.GetIPFromFrameInPtrY + + ldy #S.ETH.SRCMAC+5 + jsr ARP.GetMacFromFrameInPtrY + + lda #K.ARP.TTL + sta ARP.TmpCache+S.ARPCACHE.TTL + lda /K.ARP.TTL + sta ARP.TmpCache+S.ARPCACHE.TTL+1 + lda #S.ARPCACHE.S.RESOLVED + jmp ARP.ADD.I +*-------------------------------------- +ARP.GetIPFromFrameInPtrY + ldx #3 + +.1 lda (ZPFrameInPtr),y + sta ARP.TmpCache+S.ARPCACHE.IP,x + dey + dex + bpl .1 + + rts +*-------------------------------------- +ARP.GetMacFromFrameInPtrY + ldx #5 + +.1 lda (ZPFrameInPtr),y + sta ARP.TmpCache+S.ARPCACHE.MAC,x + dey + dex + bpl .1 + rts *-------------------------------------- ARP.Send >STYA IOCTL+S.IOCTL.BUFPTR diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 4b095535..617b7886 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -8,9 +8,11 @@ NEW * ## RETURN VALUE *\-------------------------------------- DNS.Clear ldx #K.DNSCACHE.SIZE*S.DNSCACHE + .1 stz DNS.CACHE-1,x dex bne .1 + clc rts */-------------------------------------- @@ -38,12 +40,14 @@ DNS.Query.I jsr DNS.FIND.BY.NAME sta ZPCachePtr bcc .1 inc ZPCachePtr+1 + .1 ldy #3 .2 lda (ZPCachePtr),y sta (ZPPtrIP),y dey bpl .2 + clc rts @@ -124,11 +128,13 @@ DNS.REQUEST.SEND >PUSHW L.DNS.MSG lda hDNSSocket jmp SKT.SendTo + .8 clc rts *-------------------------------------- DNS.CSTR2DNS lda (ZPPtrDNS) beq .9 + >LDYA ZPPtrDNS >SYSCALL2 strlen @@ -143,22 +149,30 @@ DNS.CSTR2DNS lda (ZPPtrDNS) phy save len for later ldx #0 dey + .1 lda (ZPPtrDNS),y and #$7f cmp #'.' - beq .2 + beq .3 + cmp #'A' - bcc .10 + bcc .2 + cmp #'Z'+1 - bcs .10 + bcs .2 + adc #$20 -.10 inx - bra .3 -.2 txa + +.2 inx + bra .4 + +.3 txa ldx #0 -.3 sta DNS.MSG.NAME+1,y + +.4 sta DNS.MSG.NAME+1,y dey bpl .1 + stx DNS.MSG.NAME pla Get back Len sec +1 @@ -166,6 +180,7 @@ DNS.CSTR2DNS lda (ZPPtrDNS) tay * clc rts + .9 sec rts */-------------------------------------- @@ -177,16 +192,20 @@ DNS.CSTR2DNS lda (ZPPtrDNS) *\-------------------------------------- DNS.Add >PULLW ZPPtrDNS Get host string >PULLW ZPPtrIP Get host IP address + ldy #3 .1 lda (ZPPtrIP),y sta DNS.TmpCache+S.DNSCACHE.IP,y dey bpl .1 + stz DNS.TmpCache+S.DNSCACHE.TTL stz DNS.TmpCache+S.DNSCACHE.TTL+1 stz DNS.TmpCache+S.DNSCACHE.TTL+2 stz DNS.TmpCache+S.DNSCACHE.TTL+3 + lda #S.DNSCACHE.STATUS.RESOLVED+S.DNSCACHE.STATUS.STATIC + DNS.ADD.I sta DNS.TmpCache jsr DNS.FIND.BY.NAME bcc .2 Found, go update... @@ -196,18 +215,22 @@ DNS.ADD.I sta DNS.TmpCache >LDYA ZPPtrDNS >SYSCALL2 strdup bcs .9 + txa ldy #S.DNSCACHE.hNAME sta (ZPCachePtr),y .2 lda DNS.TmpCache sta (ZPCachePtr) + ldy #S.DNSCACHE.ID + .3 lda DNS.TmpCache,y sta (ZPCachePtr),y iny cpy #S.DNSCACHE bne .3 + clc .9 rts */-------------------------------------- @@ -218,15 +241,18 @@ DNS.ADD.I sta DNS.TmpCache * Y,A = PTR to DNS.CACHE *\-------------------------------------- DNS.GetCAche >LDYA L.DNS.CACHE + >STYA ZPCachePtr + clc rts *-------------------------------------- DNS.FIND.BY.NAME - >LDYA L.DNS.CACHE - >STYA ZPCachePtr + jsr DNS.GetCAche + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .6 empty DNS cache entry? + phx >PUSHW ZPPtrDNS ldy #S.DNSCACHE.hNAME @@ -235,20 +261,17 @@ DNS.FIND.BY.NAME >SYSCALL2 StrCaseCmp plx bcc .8 -.6 lda ZPCachePtr - clc - adc #S.DNSCACHE - sta ZPCachePtr - bcc .7 - inc ZPCachePtr+1 -.7 dex + +.6 jsr DNS.NextCache + + dex bne .1 + sec .8 rts *-------------------------------------- DNS.UPDATE.BY.ID - >LDYA L.DNS.CACHE - >STYA ZPCachePtr + jsr DNS.GetCAche ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) @@ -267,26 +290,25 @@ DNS.UPDATE.BY.ID lda #S.DNSCACHE.STATUS.RESOLVED sta (ZPCachePtr) ldy #S.DNSCACHE.TTL + .2 lda DNS.TmpCache,y sta (ZPCachePtr),y iny cpy #S.DNSCACHE bne .2 + clc rts -.6 lda ZPCachePtr - clc - adc #S.DNSCACHE - sta ZPCachePtr - bcc .7 - inc ZPCachePtr+1 -.7 dex + +.6 jsr DNS.NextCache + + dex bne .1 sec rts *-------------------------------------- -DNS.FIND.FREE >LDYA L.DNS.CACHE - >STYA ZPCachePtr +DNS.FIND.FREE jsr DNS.GetCAche + lda #$ff sta TmpDWord sta TmpDWord+1 @@ -320,14 +342,11 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE >STYA ZPTmpPtr1 save lowest TTL slot ... .6 plx -.7 lda ZPCachePtr - clc - adc #S.DNSCACHE - sta ZPCachePtr - bcc .71 - inc ZPCachePtr+1 -.71 dex +.7 jsr DNS.NextCache + + dex bne .1 no empty slot found, discard lowest TTL + >LDYA ZPTmpPtr1 >STYA ZPCachePtr jsr DNS.FREE @@ -335,8 +354,8 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE .8 clc rts *-------------------------------------- -DNS.EXPIRE >LDYA L.DNS.CACHE - >STYA ZPCachePtr +DNS.EXPIRE jsr DNS.GetCAche + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .7 empty DNS cache entry? @@ -344,24 +363,25 @@ DNS.EXPIRE >LDYA L.DNS.CACHE 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 .6 jsr DNS.FREE .6 plx -.7 lda ZPCachePtr - clc - adc #S.DNSCACHE - sta ZPCachePtr - bcc .8 - inc ZPCachePtr+1 + +.7 jsr DNS.NextCache + .8 dex bne .1 @@ -478,6 +498,15 @@ DNS.POLL lda hDNSSocket clc rts *-------------------------------------- +DNS.NextCache lda ZPCachePtr + clc + adc #S.DNSCACHE + sta ZPCachePtr + bcc .8 + inc ZPCachePtr+1 + +.8 rts +*-------------------------------------- MAN SAVE USR/SRC/LIB/LIBTCPIP.S.DNS LOAD USR/SRC/LIB/LIBTCPIP.S diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index 8a1ff3fc..22d48774 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -200,14 +200,17 @@ IP.SetDestMAC ldy #S.IP.DST dex bpl .5 bra .8 + .6 ldx #3 Not Same network, query ARP for GW .7 lda IPCFG+S.IPCFG.GW,x sta ARP.TmpCache+S.ARPCACHE.IP,x dex bpl .7 + .8 jsr ARP.QUERY.I bcs .99 + ldx #5 ldy #S.ETH.DSTMAC+5 .11 lda ARP.TmpCache+S.ARPCACHE.MAC,x diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index fe4049ff..7d546227 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -1099,23 +1099,20 @@ SKT.PullhFDDataInPtrLen >PULLW ZPDataInLen !!!use DataInPtr/Len rts *-------------------------------------- -SKT.PullLocAddr >PULLW ZPTmpPtr1 - - ldy #S.SOCKADDR-1 - -.1 lda (ZPTmpPtr1),y - sta SKT.LOC.ADDR,y - dey - bpl .1 - - rts +SKT.PullLocAddr clc + .HS B0 BCS *-------------------------------------- -SKT.PullRemAddr >PULLW ZPTmpPtr1 - +SKT.PullRemAddr sec + >PULLW ZPTmpPtr1 ldy #S.SOCKADDR-1 + ldx #S.SOCKADDR-1 + bcc .1 + ldx #S.SOCKADDR+S.SOCKADDR-1 + .1 lda (ZPTmpPtr1),y - sta SKT.REM.ADDR,y + sta SKT.LOC.ADDR,x + dex dey bpl .1