diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index cfb34b58..f85d0cf0 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 4e6b4ba1..e1ef3d0d 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index e7773769..624250ca 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -171,7 +171,8 @@ S.TCB.OUTFREE .EQ 14 S.TCB.OUTTOSEND .EQ 16 S.TCB.OUTUSED .EQ 18 * -S.TCB.INLASTSEQNUM .EQ 20 Rcvd:Last SEQ recieved from remote +S.TCB.INLASTSEQNUM .EQ 20 Rcvd:Last SEQ received from remote + S.TCB.OUTSEQNUM .EQ 24 Send:SEQ sent not yet ACKed (retransmit) S.TCB.OUTNEXTSEQ .EQ 28 Send:Next SEQ to send S.TCB.OUTACKNUM .EQ 32 Send:ACK to send to remote diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index 40b21ffa..ad283b1f 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -56,12 +56,14 @@ ARP.Add >PULLW ZPPtrIP IP 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 sta ARP.TmpCache+S.ARPCACHE.MAC,y dey @@ -76,6 +78,7 @@ ARP.ADD.I sta ARP.TmpCache jsr ARP.FIND.FREE .1 ldy #S.ARPCACHE-1 + .2 lda ARP.TmpCache,y sta (ZPCachePtr),y dey @@ -84,13 +87,13 @@ ARP.ADD.I sta ARP.TmpCache clc rts */-------------------------------------- -* # ARP.GetCAche +* # ARP.GetCache * Return a Ptr to ARP Cache Table * **In:** * **Out:** * Y,A = PTR to ARP.CACHE *\-------------------------------------- -ARP.GetCAche >LDYA L.ARP.CACHE +ARP.GetCache >LDYA L.ARP.CACHE clc rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 68d06bd5..8daa1648 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF *-------------------------------------- -* FRM.New +* FRM.NewIP * In: * Y,A = DataLen * X = S.IP.PROTOCOL.xxx @@ -177,7 +177,7 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload lda (ZPFrameOutPtr),y cmp #S.IP.PROTOCOL.TCP bne .3 - jsr TCP.ComputeChecksum + jsr IP.ComputeTCPChecksum bra .5 .3 cmp #S.IP.PROTOCOL.UDP @@ -196,12 +196,12 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload dey sta (ZPFrameOutPtr),y - jsr UDP.ComputeChecksum + jsr IP.ComputeUDPChecksum bra .5 .4 cmp #S.IP.PROTOCOL.ICMP bne .5 - jsr ICMP.ComputeChecksum + jsr IP.ComputeICMPChecksum .5 lda DCB.NIC+S.DCB.NIC.FLAGS and #S.DCB.NIC.FLAGS.ARPOFFLOAD @@ -217,7 +217,7 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload lda hFrameOut beq .9 >SYSCALL FreeMem - + stz hFrameOut clc .9 rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.HST.txt b/LIB/LIBTCPIP.S.HST.txt index 466abd6f..962916fc 100644 --- a/LIB/LIBTCPIP.S.HST.txt +++ b/LIB/LIBTCPIP.S.HST.txt @@ -6,29 +6,18 @@ AUTO 4,1 HST.GetByName >PULLW ZPPtrDNS >PULLW ZPPtrIP - lda ZPPtrIP + ldx #3 + +.1 txa clc - adc #3 + adc ZPPtrIP tay lda ZPPtrIP+1 adc #0 - >PUSHYA @IP[3] + >PUSHYA @IP[3][2][1][0] - lda ZPPtrIP - clc - adc #2 - tay - lda ZPPtrIP+1 - adc #0 - >PUSHYA @IP[2] - - >LDYA ZPPtrIP - iny - bne .1 - inc -.1 >PUSHYA @IP[1] - - >PUSHW ZPPtrIP @IP[0] + dex + bpl .1 >PUSHBI 8 4 PTRs on stack >PUSHW L.HST.SScanF diff --git a/LIB/LIBTCPIP.S.ICMP.txt b/LIB/LIBTCPIP.S.ICMP.txt index a4021fe3..9ae1cd44 100644 --- a/LIB/LIBTCPIP.S.ICMP.txt +++ b/LIB/LIBTCPIP.S.ICMP.txt @@ -25,47 +25,24 @@ ICMP.IN.ECHOREQ ldy #S.IP.DST+3 lda #S.ICMP.TYPE.ECHOREP sta (ZPFrameInPtr),y - ldy #S.IP.SRC+3 + jsr ARP.AddFromFrameInPtr + + lda hFrameIn + stz hFrameIn DO NOT DISCARD this frame,it is SOURCE frame!!! + + sta hFrameOut + >LDYA ZPFrameInPtr + >STYA ZPFrameOutPtr + ldx #3 - -.2 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.IP,x - dey - dex - bpl .2 - ldy #S.IP.DST+3 - ldx #3 .3 lda ARP.TmpCache+S.ARPCACHE.IP,x - sta (ZPFrameInPtr),y + sta (ZPFrameOutPtr),y dey dex bpl .3 - ldy #S.ETH.SRCMAC+5 - ldx #5 - -.4 lda (ZPFrameInPtr),y - sta ARP.TmpCache+S.ARPCACHE.MAC,x - dey - dex - bpl .4 - - lda #K.ARP.TTL - sta ARP.TmpCache+S.ARPCACHE.TTL - lda /K.ARP.TTL - sta ARP.TmpCache+S.ARPCACHE.TTL+1 - - lda #S.ARPCACHE.STATUS.RESOLVED - jsr ARP.ADD.I - - lda hFrameIn - stz hFrameIn - - sta hFrameOut DO NOT DISCARD this frame,it is SOURCE frame!!! - >LDYA ZPFrameInPtr - >STYA ZPFrameOutPtr jmp FRM.SendIP ICMP.IN.EXIT lda hFrameIn @@ -114,7 +91,7 @@ ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDstIP lda hFrameIn jsr SKT.AddToQueueA - bcs .9 Q full, discard... + bcs ICMP.IN.EXIT Q full, discard... rts DO NOT Discard this queued frame @@ -129,31 +106,7 @@ ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDstIP cpx #K.SKTTABLE.SIZE bne .3 -.9 lda hFrameIn - beq .99 - >SYSCALL FreeMem -.99 clc - rts -*-------------------------------------- -ICMP.ComputeChecksum - >PUSHW ZPFrameOutLen - >PUSHWI S.ICMP.TYPE - - ldy #S.ICMP.CHECKSUM - lda #0 - sta (ZPFrameOutPtr),y - iny - sta (ZPFrameOutPtr),y - - jsr IP.ComputeChecksum - - phy - ldy #S.ICMP.CHECKSUM - sta (ZPFrameOutPtr),y - iny - pla - sta (ZPFrameOutPtr),y - rts + bra ICMP.IN.EXIT *-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.ICMP diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index 5d2c5630..335f082f 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -22,73 +22,162 @@ IP.IN ldy #S.IP.PROTOCOL >SYSCALL FreeMem rts *-------------------------------------- -* In: -* PULLW = Start Offset -* PULLW = End Offset -* Out: -* Y,A = CheckSum -*-------------------------------------- -IP.ComputeChecksum - >PULLA - clc - adc ZPFrameOutPtr - sta ZPTmpPtr1 - >PULLA - adc ZPFrameOutPtr+1 - sta ZPTmpPtr1+1 - - >PULLA - clc - adc ZPFrameOutPtr - sta TmpOffset - >PULLA - adc ZPFrameOutPtr+1 - sta TmpOffset+1 - +IP.ComputeICMPChecksum stz IP.CHECKSUM stz IP.CHECKSUM+1 - stz IP.CHECKSUM+2 - stz IP.CHECKSUM+3 + + lda ZPFrameOutLen + sec + sbc #S.ICMP.TYPE + eor #$ff + tax - ldy #0 + lda ZPFrameOutLen+1 + sbc /S.ICMP.TYPE + eor #$ff -.1 clc + ldy #S.ICMP.CHECKSUM + jmp IP.ComputeChecksum +*-------------------------------------- +IP.ComputeUDPChecksum + ldy #S.UDP.LENGTH + lda (ZPFrameOutPtr),y + clc + +* adc /S.IP.PROTOCOL.UDP (all zero) + sta IP.CHECKSUM + iny - lda (ZPTmpPtr1),y + lda (ZPFrameOutPtr),y + adc #S.IP.PROTOCOL.UDP + sta IP.CHECKSUM+1 + + jsr IP.AddSrcDstIPToChecksum + + lda ZPFrameOutLen + sec + sbc #S.IP + eor #$ff + tax + + lda ZPFrameOutLen+1 + sbc /S.IP + eor #$ff + + ldy #S.UDP.CHECKSUM + bra IP.ComputeChecksum +*-------------------------------------- +IP.ComputeTCPChecksum + lda ZPFrameOutLen + sec + sbc #S.IP + sta ZPDataInLen + + lda ZPFrameOutLen+1 + sbc /S.IP + sta ZPDataInLen+1 + + clc + +* lda ZPDataInLen+1 +* adc /S.IP.PROTOCOL.TCP (all zero) + sta IP.CHECKSUM + + lda ZPDataInLen + adc #S.IP.PROTOCOL.TCP + sta IP.CHECKSUM+1 + + jsr IP.AddSrcDstIPToChecksum + + lda ZPDataInLen + eor #$ff + tax + lda ZPDataInLen+1 + eor #$ff + + ldy #S.TCP.CHECKSUM +*-------------------------------------- +* X,A = !ByteCount, Y = Offset in Frame +*-------------------------------------- +IP.ComputeChecksum + phy Save Offset + pha Save !ByteCount.HI + + lda #0 Reset Checksum + sta (ZPFrameOutPtr),y + iny + sta (ZPFrameOutPtr),y + + >LDYA ZPFrameOutPtr + >STYA ZPTmpPtr1 + + ldy #S.IP + +.1 inx + bne .11 + pla + inc + beq .8 + + pha + +.11 lda (ZPTmpPtr1),y adc IP.CHECKSUM sta IP.CHECKSUM + + iny + bne .20 + inc ZPTmpPtr1+1 - dey - lda (ZPTmpPtr1),y +.20 inx + bne .2 + pla + inc + beq .7 + + pha + +.2 lda (ZPTmpPtr1),y + adc IP.CHECKSUM+1 sta IP.CHECKSUM+1 - bcc .3 - inc IP.CHECKSUM+2 - bne .3 - inc IP.CHECKSUM+3 - -.3 lda ZPTmpPtr1 - clc - adc #2 - sta ZPTmpPtr1 - bcc .4 - inc ZPTmpPtr1+1 -.4 cmp TmpOffset - bne .1 - lda ZPTmpPtr1+1 - cmp TmpOffset+1 + iny bne .1 + inc ZPTmpPtr1+1 + bra .1 +.7 adc IP.CHECKSUM+1 A=0 from beq .7 + sta IP.CHECKSUM+1 + +.8 ply lda IP.CHECKSUM - clc - adc IP.CHECKSUM+2 + adc #0 Don't forget to add last carry!!! eor #$FF - tay + sta (ZPFrameOutPtr),y + iny lda IP.CHECKSUM+1 - adc IP.CHECKSUM+3 + adc #0 Don't forget to add last carry!!! eor #$FF + sta (ZPFrameOutPtr),y + rts +*-------------------------------------- +IP.AddSrcDstIPToChecksum + ldy #S.IP.SRC + + ldx #4 4 words for SRC & DST IP + +.1 lda (ZPFrameOutPtr),y + adc IP.CHECKSUM + sta IP.CHECKSUM + iny + lda (ZPFrameOutPtr),y + adc IP.CHECKSUM+1 + sta IP.CHECKSUM+1 + iny + dex + bne .1 rts *-------------------------------------- IP.FillSKT.TemplateSrcDstIPP @@ -179,11 +268,13 @@ IP.SetDestMAC ldy #S.IP.DST ldx #5 ldy #S.ETH.DSTMAC+5 + .11 lda ARP.TmpCache+S.ARPCACHE.MAC,x sta (ZPFrameOutPtr),y dey dex bpl .11 + clc .99 rts *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 85a5d6e6..132b6202 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -100,25 +100,14 @@ TCP.IN.JMP.LISTEN .2 lda #$ff sta ZPPtrSKT+1 - ldy #S.TCP.SEQNUM+3 Get Remote SEQ - ldx #3 - - sec - -.3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... - adc #0 - sta SKT.TCBCache+S.TCB.INLASTSEQNUM,x - sta SKT.TCBCache+S.TCB.OUTACKNUM,x - dey - dex - bpl .3 + jsr TCP.IN.ACKTheSYN jsr SKT.StoreTCB jsr ARP.AddFromFrameInPtr lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA SYN recieved, Send SYN.ACK + jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK bcs .9 ldy #S.SOCKET.TCP.STATUS @@ -156,18 +145,7 @@ TCP.IN.JMP.SYNSENT dex bpl .1 - ldx #3 - ldy #S.TCP.SEQNUM+3 - - sec ACK=SEC+1 - -.2 lda (ZPFrameInPtr),y - adc #0 - sta SKT.TCBCache+S.TCB.INLASTSEQNUM,x - sta SKT.TCBCache+S.TCB.OUTACKNUM,x - dey - dex - bpl .2 + jsr TCP.IN.ACKTheSYN lda #S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA SYN.ACK recieved, Send, ACK @@ -185,7 +163,7 @@ TCP.IN.JMP.SYNSENT jmp SKT.Destroy *-------------------------------------- TCP.IN.JMP.SYNRCVD - ldy #S.TCP.OPTIONS SYN Recieved, SYN.ACK Sent, only accept ACK packet + ldy #S.TCP.OPTIONS SYN Received, SYN.ACK Sent, only accept ACK packet lda (ZPFrameInPtr),y cmp #S.TCP.OPTIONS.ACK bne .8 @@ -313,6 +291,21 @@ TCP.IN.JMP.TIMEWT TCP.IN.JMP.CLOSED jmp SKT.Destroy *-------------------------------------- +TCP.IN.ACKTheSYN + ldy #S.TCP.SEQNUM+3 Get Remote SEQ + ldx #3 + + sec + +.3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... + adc #0 + sta SKT.TCBCache+S.TCB.INLASTSEQNUM,x + sta SKT.TCBCache+S.TCB.OUTACKNUM,x + dey + dex + bpl .3 + rts +*-------------------------------------- TCP.IN.ACKTheFIN ldy #S.SOCKET.TCP.OPTIONS lda (ZPPtrSKT),y @@ -507,109 +500,6 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP clc .9 rts *-------------------------------------- -TCP.ComputeChecksum - lda #0 RESET.TCP.CHECKSUM - ldy #S.TCP.CHECKSUM - sta (ZPFrameOutPtr),y - iny - sta (ZPFrameOutPtr),y - - >LDYA ZPFrameOutPtr - >STYA ZPTmpPtr1 - - lda ZPFrameOutLen - sec - sbc #S.IP - sta ZPDataInLen - - lda ZPFrameOutLen+1 - sbc /S.IP - sta ZPDataInLen+1 - - clc - -* lda ZPDataInLen+1 -* adc #0 RESERVED (all zero) - sta IP.CHECKSUM - - lda ZPDataInLen - adc #S.IP.PROTOCOL.TCP - sta IP.CHECKSUM+1 - - ldy #S.IP.SRC - - ldx #4 4 words for SRC & DST IP - -.10 lda (ZPFrameOutPtr),y - adc IP.CHECKSUM - sta IP.CHECKSUM - iny - lda (ZPFrameOutPtr),y - adc IP.CHECKSUM+1 - sta IP.CHECKSUM+1 - iny - dex - bne .10 - - ldy #S.IP - - lda ZPDataInLen - eor #$ff - tax - lda ZPDataInLen+1 - eor #$ff - - pha - -.1 inx - bne .11 - pla - inc - beq .8 - - pha - -.11 lda (ZPTmpPtr1),y - adc IP.CHECKSUM - sta IP.CHECKSUM - - iny - bne .20 - inc ZPTmpPtr1+1 - -.20 inx - bne .2 - pla - inc - beq .7 - - pha - -.2 lda (ZPTmpPtr1),y - - adc IP.CHECKSUM+1 - sta IP.CHECKSUM+1 - - iny - bne .1 - inc ZPTmpPtr1+1 - bra .1 - -.7 adc IP.CHECKSUM+1 A=0 from beq .7 - sta IP.CHECKSUM+1 - -.8 ldy #S.TCP.CHECKSUM - lda IP.CHECKSUM - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPFrameOutPtr),y - iny - lda IP.CHECKSUM+1 - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPFrameOutPtr),y - rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.TCP LOAD /A2OSX.SRC/LIB/LIBTCPIP.S diff --git a/LIB/LIBTCPIP.S.UDP.txt b/LIB/LIBTCPIP.S.UDP.txt index a7c9f097..72f8561f 100644 --- a/LIB/LIBTCPIP.S.UDP.txt +++ b/LIB/LIBTCPIP.S.UDP.txt @@ -61,101 +61,6 @@ UDP.IN jsr IP.FillSKT.TemplateSrcDstIPP >SYSCALL FreeMem rts *-------------------------------------- -UDP.ComputeChecksum - lda #0 RESET.TCP.CHECKSUM - ldy #S.UDP.CHECKSUM - sta (ZPFrameOutPtr),y - iny - sta (ZPFrameOutPtr),y - - >LDYA ZPFrameOutPtr - >STYA ZPTmpPtr1 - - lda ZPFrameOutLen - sec - sbc #S.IP - sta ZPDataInLen - - lda ZPFrameOutLen+1 - sbc /S.IP - sta ZPDataInLen+1 - - clc - - ldy #S.UDP.LENGTH - lda (ZPFrameOutPtr),y -* adc #0 RESERVED (all zero) - sta IP.CHECKSUM - - iny - lda (ZPFrameOutPtr),y - adc #S.IP.PROTOCOL.UDP - sta IP.CHECKSUM+1 - - ldy #S.IP.SRC - - ldx #4 4 words for SRC & DST IP - -.10 lda (ZPFrameOutPtr),y - adc IP.CHECKSUM - sta IP.CHECKSUM - iny - lda (ZPFrameOutPtr),y - adc IP.CHECKSUM+1 - sta IP.CHECKSUM+1 - iny - dex - bne .10 - - ldy #S.IP - -.1 jsr DecDataInLen - beq .8 - - lda (ZPTmpPtr1),y - adc IP.CHECKSUM - sta IP.CHECKSUM - - iny - bne .20 - inc ZPTmpPtr1+1 - -.20 jsr DecDataInLen - bne .2 - lda #0 - bra .21 - -.2 lda (ZPTmpPtr1),y - -.21 adc IP.CHECKSUM+1 - sta IP.CHECKSUM+1 - - iny - bne .1 - inc ZPTmpPtr1+1 - bra .1 - -.8 ldy #S.UDP.CHECKSUM - lda IP.CHECKSUM - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPFrameOutPtr),y - iny - lda IP.CHECKSUM+1 - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPFrameOutPtr),y - rts -*-------------------------------------- -DecDataInLen lda ZPDataInLen - bne .1 - lda ZPDataInLen+1 - beq .9 - dec ZPDataInLen+1 -.1 dec ZPDataInLen - lda #$FF Make NZ -.9 rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.UDP LOAD /A2OSX.SRC/LIB/LIBTCPIP.S