diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index e372a6c9..26bda2c5 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index 31a6a274..74666d44 100644 Binary files a/A2OSX.DEV.po and b/A2OSX.DEV.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 4d091a17..39d5d600 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/BIN/PING.S.txt b/BIN/PING.S.txt index cf811c95..ab8df1c4 100644 --- a/BIN/PING.S.txt +++ b/BIN/PING.S.txt @@ -339,7 +339,7 @@ Socket.Src.Addr .BS 4 Socket.Src.Port .DA 0 Dynamic Socket.Dst.Addr .BS 4 Socket.Dst.Port .DA 0 Identifier - .BS 16 + .BS S.SOCKET-16 *-------------------------------------- ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ .DA #0 CODE diff --git a/INC/DHCP.I.txt b/INC/DHCP.I.txt new file mode 100644 index 00000000..5b260a39 --- /dev/null +++ b/INC/DHCP.I.txt @@ -0,0 +1,47 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF + .OP 65C02 +*-------------------------------------- +S.DHCP.OP .EQ S.UDP+0 1 = BOOTREQUEST, 2 = BOOTREPLY +S.DHCP.OP.BOOTREQUEST .EQ 1 +S.DHCP.OP.BOOTREPLY .EQ 2 +S.DHCP.HTYPE .EQ S.UDP+1 1 = ETHERNET +S.DHCP.HTYPE.ETHERNET .EQ 1 +S.DHCP.HLEN .EQ S.UDP+2 6 (MAC len) +S.DHCP.HLEN.ETHERNET .EQ 6 +S.DHCP.HOPS .EQ S.UDP+3 0 +S.DHCP.XID .EQ S.UDP+4 client : random number +S.DHCP.SECS .EQ S.UDP+8 +S.DHCP.FLAGS .EQ S.UDP+10 +S.DHCP.FLAGS.BRDCST .EQ %10000000 +S.DHCP.CIADDR .EQ S.UDP+12 +S.DHCP.YIADDR .EQ S.UDP+16 +S.DHCP.SIADDR .EQ S.UDP+20 +S.DHCP.GIADDR .EQ S.UDP+24 +S.DHCP.CHADDR .EQ S.UDP+28 +S.DHCP.SNAME .EQ S.UDP+44 +S.DHCP.FILE .EQ S.UDP+108 +S.DHCP.COOKIE .EQ S.UDP+236 +S.DHCP.OPTIONS .EQ S.UDP+240 +S.DHCP.OPTIONS.DHCPDiscover .EQ 1 +S.DHCP.OPTIONS.DHCPOffer .EQ 2 +S.DHCP.OPTIONS.DHCPRequest .EQ 3 +S.DHCP.OPTIONS.DHCPDecline .EQ 4 +S.DHCP.OPTIONS.DHCPAck .EQ 5 +S.DHCP.OPTIONS.DHCPNak .EQ 6 +S.DHCP.OPTIONS.DHCPRelease .EQ 7 +S.DHCP.OPTIONS.DHCPInform .EQ 8 +S.DHCP.OPTIONS.MASK .EQ 1 +S.DHCP.OPTIONS.GW .EQ 3 +S.DHCP.OPTIONS.DNS .EQ 6 +S.DHCP.OPTIONS.DOMAIN .EQ 15 +S.DHCP.OPTIONS.END .EQ 255 +* +S.DHCP .EQ S.UDP+240 +*-------------------------------------- +MAN +SAVE /A2OSX.DEV/INC/DHCP.I diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 1a6f5b67..572cdc7c 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -20,7 +20,8 @@ K.DNS.MAXLEN .EQ 64 K.DYNPORT.START .EQ 49152 K.DYNPORT.END .EQ 65535 K.TCP.MSS .EQ K.ETH.FRAME.LEN-20-20-14 -K.TCP.WSIZE .EQ K.TCP.MSS +K.TCP.WSIZE .EQ 2048 +K.TCP.WMASK .EQ 2047 *-------------------------------------- LIBTCPIP.SET.IPCFG .EQ 4 LIBTCPIP.GET.IPCFG .EQ 6 @@ -180,10 +181,14 @@ S.SOCKET.SQ.INHEAD .EQ 16 S.SOCKET.SQ.INTAIL .EQ 18 S.SOCKET.SQ.OUTHEAD .EQ 20 S.SOCKET.SQ.OUTTAIL .EQ 22 -S.SOCKET.SQ.SEQNUM .EQ 24 -S.SOCKET.SQ.ACKNUM .EQ 28 +S.SOCKET.SQ.INFREE .EQ 24 +S.SOCKET.SQ.OUTFREE .EQ 26 * -S.SOCKET .EQ 32 +* +S.SOCKET.SQ.SEQNUM .EQ 32 +S.SOCKET.SQ.ACKNUM .EQ 36 +* +S.SOCKET .EQ 40 *-------------------------------------- S.ETH.FRAMELEN .EQ 0 S.ETH.DSTMAC .EQ 2 @@ -259,43 +264,6 @@ S.TCP.URGPTR .EQ S.IP+18 * S.TCP .EQ S.IP+20 *-------------------------------------- -S.DHCP.OP .EQ S.UDP+0 1 = BOOTREQUEST, 2 = BOOTREPLY -S.DHCP.OP.BOOTREQUEST .EQ 1 -S.DHCP.OP.BOOTREPLY .EQ 2 -S.DHCP.HTYPE .EQ S.UDP+1 1 = ETHERNET -S.DHCP.HTYPE.ETHERNET .EQ 1 -S.DHCP.HLEN .EQ S.UDP+2 6 (MAC len) -S.DHCP.HLEN.ETHERNET .EQ 6 -S.DHCP.HOPS .EQ S.UDP+3 0 -S.DHCP.XID .EQ S.UDP+4 client : random number -S.DHCP.SECS .EQ S.UDP+8 -S.DHCP.FLAGS .EQ S.UDP+10 -S.DHCP.FLAGS.BRDCST .EQ %10000000 -S.DHCP.CIADDR .EQ S.UDP+12 -S.DHCP.YIADDR .EQ S.UDP+16 -S.DHCP.SIADDR .EQ S.UDP+20 -S.DHCP.GIADDR .EQ S.UDP+24 -S.DHCP.CHADDR .EQ S.UDP+28 -S.DHCP.SNAME .EQ S.UDP+44 -S.DHCP.FILE .EQ S.UDP+108 -S.DHCP.COOKIE .EQ S.UDP+236 -S.DHCP.OPTIONS .EQ S.UDP+240 -S.DHCP.OPTIONS.DHCPDiscover .EQ 1 -S.DHCP.OPTIONS.DHCPOffer .EQ 2 -S.DHCP.OPTIONS.DHCPRequest .EQ 3 -S.DHCP.OPTIONS.DHCPDecline .EQ 4 -S.DHCP.OPTIONS.DHCPAck .EQ 5 -S.DHCP.OPTIONS.DHCPNak .EQ 6 -S.DHCP.OPTIONS.DHCPRelease .EQ 7 -S.DHCP.OPTIONS.DHCPInform .EQ 8 -S.DHCP.OPTIONS.MASK .EQ 1 -S.DHCP.OPTIONS.GW .EQ 3 -S.DHCP.OPTIONS.DNS .EQ 6 -S.DHCP.OPTIONS.DOMAIN .EQ 15 -S.DHCP.OPTIONS.END .EQ 255 -* -S.DHCP .EQ S.UDP+240 -*-------------------------------------- S.DNS.ID .EQ S.UDP+0 S.DNS.F .EQ S.UDP+2 S.DNS.F.QR .EQ %10000000.00000000 diff --git a/INC/MLI.ERR.I.txt b/INC/MLI.ERR.I.txt new file mode 100644 index 00000000..a4e4825a --- /dev/null +++ b/INC/MLI.ERR.I.txt @@ -0,0 +1,58 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +*$00 - No Error +*$01 - Bad Call Number +*$04 - Bad Parameter Count +*$25 - Interrupt Table Full +*$27 - I/O Error +*$28 - No Device Connected +*$2B - Write Protected +*$2E - Disk Switched +*$2F - Device Offline +*$40 - Invalid Pathname +*$42 - Maximum Number of Files Open +*$43 - Invalid Reference Number +*$44 - Directory Not Found +*$45 - Volume Not Found +*$46 - File Not Found +*$47 - Duplicate File Name +*$48 - Volume Full +*$49 - Directory Full +*$4A - Incompatible File Format +*$4B - Unsupported Storage Type +*$4C - End of File, No More Data +*$4D - Beyond EOF +*$4E - File Access Error, File Locked +*$50 - File Already Open +*$51 - Directory Structure Damaged +*$53 - Invalid Parameter +*$55 - Too Many Volumes +*$56 - Bad Buffer Address +*$57 - Duplicate Volume +*$5A - File Structure Damaged +*-------------------------------------- +MLI.ERR.BADCALL .EQ $01 +*MLI.ERR.BADCNT .EQ $04 +*MLI.ERR.IRQFULL .EQ $25 +MLI.ERR.IO .EQ $27 +MLI.ERR.NODEV .EQ $28 +MLI.ERR.WRTPROT .EQ $2B +MLI.ERR.DSKSWIT .EQ $2E +MLI.ERR.INVPATH .EQ $40 +MLI.ERR.FCBFULL .EQ $42 +MLI.ERR.BADREF .EQ $43 +MLI.ERR.PNOTFND .EQ $44 +MLI.ERR.VNOTFND .EQ $45 +MLI.ERR.FNOTFND .EQ $46 +MLI.ERR.DUPFILE .EQ $47 +MLI.ERR.OVERRUN .EQ $48 +MLI.ERR.VOLFULL .EQ $49 +MLI.ERR.EOF .EQ $4C +*-------------------------------------- +MAN +SAVE /A2OSX.DEV/INC/MLI.ERR.I diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index 7145c908..0acf49f7 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -63,55 +63,6 @@ S.FILEINFO.CREATETIME .EQ $10 * S.FILEINFO .EQ $12 *-------------------------------------- -*$00 - No Error -*$01 - Bad Call Number -*$04 - Bad Parameter Count -*$25 - Interrupt Table Full -*$27 - I/O Error -*$28 - No Device Connected -*$2B - Write Protected -*$2E - Disk Switched -*$2F - Device Offline -*$40 - Invalid Pathname -*$42 - Maximum Number of Files Open -*$43 - Invalid Reference Number -*$44 - Directory Not Found -*$45 - Volume Not Found -*$46 - File Not Found -*$47 - Duplicate File Name -*$48 - Volume Full -*$49 - Directory Full -*$4A - Incompatible File Format -*$4B - Unsupported Storage Type -*$4C - End of File, No More Data -*$4D - Beyond EOF -*$4E - File Access Error, File Locked -*$50 - File Already Open -*$51 - Directory Structure Damaged -*$53 - Invalid Parameter -*$55 - Too Many Volumes -*$56 - Bad Buffer Address -*$57 - Duplicate Volume -*$5A - File Structure Damaged -*-------------------------------------- -MLI.ERR.BADCALL .EQ $01 -*MLI.ERR.BADCNT .EQ $04 -*MLI.ERR.IRQFULL .EQ $25 -MLI.ERR.IO .EQ $27 -MLI.ERR.NODEV .EQ $28 -MLI.ERR.WRTPROT .EQ $2B -MLI.ERR.DSKSWIT .EQ $2E -MLI.ERR.INVPATH .EQ $40 -MLI.ERR.FCBFULL .EQ $42 -MLI.ERR.BADREF .EQ $43 -MLI.ERR.PNOTFND .EQ $44 -MLI.ERR.VNOTFND .EQ $45 -MLI.ERR.FNOTFND .EQ $46 -MLI.ERR.DUPFILE .EQ $47 -MLI.ERR.OVERRUN .EQ $48 -MLI.ERR.VOLFULL .EQ $49 -MLI.ERR.EOF .EQ $4C -*-------------------------------------- MLI .EQ $BF00 *JSPARE .EQ $BF03 DATETIME .EQ $BF06 diff --git a/INC/SOCKET.I.txt b/INC/SOCKET.I.txt deleted file mode 100644 index 3e5d8066..00000000 --- a/INC/SOCKET.I.txt +++ /dev/null @@ -1,56 +0,0 @@ -PR#3 -PREFIX /A2OSX.SRC -NEW -INC 1 -AUTO 6 -*-------------------------------------- -S.NODE.SOCK.SO .EQ 2 -S.NODE.SOCK.SO.DEBUG .EQ $01 -S.NODE.SOCK.SO.ACCEPTCONN .EQ $02 -S.NODE.SOCK.SO.REUSEADDR .EQ $04 -S.NODE.SOCK.SO.KEEPALIVE .EQ $08 -S.NODE.SOCK.SO.DONTROUTE .EQ $10 -S.NODE.SOCK.SO.BROADCAST .EQ $20 -S.NODE.SOCK.SO.USELOOPBACK .EQ $40 -S.NODE.SOCK.SO.LINGER .EQ $80 - -S.NODE.SOCK.S .EQ 3 -S.NODE.SOCK.S.CLOSED .EQ 0 -S.NODE.SOCK.S.LISTEN .EQ 1 -S.NODE.SOCK.S.SYNSENT .EQ 2 -S.NODE.SOCK.S.SYNRCVD .EQ 3 -S.NODE.SOCK.S.ESTBLSH .EQ 4 -S.NODE.SOCK.S.CLWAIT .EQ 5 -S.NODE.SOCK.S.LASTACK .EQ 6 -S.NODE.SOCK.S.FINWT1 .EQ 7 -S.NODE.SOCK.S.FINWT2 .EQ 8 -S.NODE.SOCK.S.CLOSING .EQ 9 -S.NODE.SOCK.S.TIMEWT .EQ 10 - -S.NODE.SOCK.SRC.ADDR .EQ 4 -S.NODE.SOCK.SRC.PORT .EQ 8 -S.NODE.SOCK.DST.ADDR .EQ 10 -S.NODE.SOCK.DST.PORT .EQ 14 -* Listen type Queue -S.NODE.SOCK.LQ.HEAD .EQ 16 -S.NODE.SOCK.LQ.TAIL .EQ 17 -S.NODE.SOCK.LQ .EQ 18 -S.NODE.SOCK.LQ.MAX .EQ 14 14 hSocket -* Datagram type Queue -S.NODE.SOCK.DQ.HEAD .EQ 16 -S.NODE.SOCK.DQ.TAIL .EQ 17 -S.NODE.SOCK.DQ .EQ 18 -S.NODE.SOCK.DQ.MAX .EQ 14 14 hMem (frames) -* Stream type Queue -S.NODE.SOCK.SQ.hInMem .EQ 16 -S.NODE.SOCK.SQ.hOutMem .EQ 17 -S.NODE.SOCK.SQ.SIZE .EQ 18 -S.NODE.SOCK.SQ.HEAD .EQ 20 -S.NODE.SOCK.SQ.TAIL .EQ 22 -S.NODE.SOCK.SQ.SEQNUM .EQ 24 -S.NODE.SOCK.SQ.ACKNUM .EQ 28 -* -S.NODE.SOCK .EQ 32 -*-------------------------------------- -MAN -SAVE /A2OSX.DEV/INC/SOCKET.I \ No newline at end of file diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 2a953f8e..0feb72a5 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -163,25 +163,125 @@ SKT.SEND.UDP lda #S.IP.PROTOCOL.UDP .9 rts *-------------------------------------- -SKT.SEND.TCP ldy #S.SOCKET.STREAM.hOutMem +SKT.SEND.TCP ldy #S.SOCKET.STATUS + lda (ZPPtrSKT),y + and #S.SOCKET.STATUS.MASK + cmp #S.SOCKET.STATUS.ESTBLSH + beq .10 + + lda #MLI.ERR.IO +* sec CS from cmp + rts + +.10 ldy #S.SOCKET.STREAM.hOutMem lda (ZPPtrSKT),y >SYSCALL GetMemPtrA >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base - ldy #S.SOCKET.SQ.OUTHEAD + ldy #S.SOCKET.SQ.OUTFREE lda (ZPPtrSKT),y -* clc - adc ZPDataInLen + sec + sbc ZPDataInLen tax iny lda (ZPPtrSKT),y + sbc ZPDataInLen+1 X,A = new OUTFREE + bcc .91 + + sta (ZPPtrSKT),y + dey + txa + sta (ZPPtrSKT),y Update Socket OUTFREE + + ldy #S.SOCKET.SQ.OUTHEAD + lda (ZPPtrSKT),y + tax + clc + adc ZPDataInLen + sta (ZPPtrSKT),y + + iny + lda (ZPPtrSKT),y + pha adc ZPDataInLen+1 + and /K.TCP.WMASK + sta (ZPPtrSKT),y Update Socket new OUTHEAD + + txa X,PHA=OUTHEAD + clc + adc ZPTmpPtr1 + sta ZPTmpPtr2 + pla + pha + adc ZPTmpPtr1+1 Ptr1=Current Base + sta ZPTmpPtr1+2 Ptr2=Current Base+OUTHEAD + + stx ZPTmpPtr3 + pla + clc + adc /65536-K.TCP.WSIZE + sta ZPTmpPtr3+1 Ptr3=!(K.TCP.WSIZE-OUTHEAD) + + lda ZPDataInLen + eor #$ff + sta ZPDataInLen + + lda ZPDataInLen+1 + eor #$ff + sta ZPDataInLen+1 ZPDataInLen=!ZPDataInLen + + ldy #0 + +.1 inc ZPTmpPtr3 Reached the TOP of buf ? + bne .2 + inc ZPTmpPtr3+1 + beq .5 + +.2 inc ZPDataInLen + bne .3 + inc ZPDataInLen+1 + beq .80 + +.3 lda (ZPDataInPtr),y + sta (ZPTmpPtr2) + iny + bne .4 + + inc ZPDataInPtr+1 + +.4 inc ZPTmpPtr2 + bne .1 + + inc ZPTmpPtr2+1 + bra .1 + +.5 inc ZPDataInLen + bne .6 + inc ZPDataInLen+1 + beq .80 + +.6 lda (ZPDataInPtr),y + sta (ZPTmpPtr1) + iny + bne .7 + + inc ZPDataInPtr+1 + +.7 inc ZPTmpPtr1 + bne .5 + + inc ZPTmpPtr1+1 + bra .6 + +.80 clc + rts + - clc - -.9 rts +.91 lda #MLI.ERR.VOLFULL + sec + rts *-------------------------------------- SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO lda (ZPPtrSKT),y @@ -208,7 +308,13 @@ SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO .9 sec rts -*-------------------------------------- +*/-------------------------------------- +* #SKT.RcvdA (DGRAM,RAW) +* ##In : +* A = hSocket +* ##Out : +* A = hFrame +*\-------------------------------------- SKT.RCVDA jsr SKT.GetA.I bcs .9 @@ -238,6 +344,14 @@ SKT.RCVDA jsr SKT.GetA.I .99 sec .9 rts +*/-------------------------------------- +* #SKT.Read (STREAM) +* ##In : +* A = hSocket +* ##Out : +* A = hFrame +*\-------------------------------------- +SKT.Read *-------------------------------------- SKT.CLOSEA cmp #K.SKTTABLE.SIZE bcs SKT.GetA.9 diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index f994800c..e6a67328 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -194,6 +194,20 @@ TCP.IN.JMP.SYNRCVD lda #S.SOCKET.STATUS.ESTBLSH sta (ZPPtrSKT),y + ldy #S.SOCKET.SQ.INFREE + lda #K.TCP.WSIZE + sta (ZPPtrSKT),y + iny + lda /K.TCP.WSIZE + sta (ZPPtrSKT),y + + ldy #S.SOCKET.SQ.OUTFREE + lda #K.TCP.WSIZE + sta (ZPPtrSKT),y + iny + lda /K.TCP.WSIZE + sta (ZPPtrSKT),y + >PUSHW K.TCP.WSIZE >PUSHBI 0 >SYSCALL GetMem diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 96cf0834..867e6da4 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 @@ -10,6 +10,7 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I + .INB /A2OSX.DEV/INC/MLI.ERR.I .INB /A2OSX.DEV/INC/LIBTCPIP.I *-------------------------------------- ZPFrameInPtr .EQ ZPLIB diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 63b58767..cb8f9d14 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -448,7 +448,7 @@ Socket .DA #S.SOCKET.SOCK.DGRAM .DA UDP.PORT.DHCPC Socket.Src.Port .HS FF.FF.FF.FF Socket.Dst.Addr .DA UDP.PORT.DHCPS Socket.Dst.Port - .BS 16 + .BS S.SOCKET-16 *-------------------------------------- DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.DISC.XID .BS 4