diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a4b10051..24913def 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 80633159..0a806416 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/PING.S.txt b/BIN/PING.S.txt index daa60a30..e04926fe 100644 --- a/BIN/PING.S.txt +++ b/BIN/PING.S.txt @@ -172,7 +172,7 @@ CS.RUN.OPENSKT ldx #3 >PUSHW L.SA.REMOTE >LDA.G hSocket - >LIBCALL hLIBTCPIP,LIBTCPIP.Connect + >LIBCALL hLIBTCPIP,LIBTCPIP.Connect bcc CS.RUN.SEND.ECHO diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 1595586e..3a4bc4c0 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -56,6 +56,7 @@ LIBTCPIP.RecvFrom .EQ 52 LIBTCPIP.SendTo .EQ 54 LIBTCPIP.GetTable .EQ 56 +LIBTCPIP.setsockopt .EQ 58 *-------------------------------------- ERR.SKT.OOS .EQ $BF ERR.SKT.BUSY .EQ $BE diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index c4005f77..d8aea3d3 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -51,7 +51,6 @@ SKT.Socket.DSOCK txa clc .9 rts - SKT.Socket.STREAM lda #S.IP.PROTOCOL.TCP ldy #S.SOCKET.TCP @@ -66,18 +65,17 @@ SKT.Socket.STREAM jsr SKT.Socket.FindFree bcs .9 - + ldy #FD.SSOCK.SIZE-1 - + .1 lda FD.SSOCK,y sta (ZPTmpPtr1),y dey bpl .1 - + txa clc .9 rts - SKT.Socket.FindFree ldy #0 @@ -93,7 +91,7 @@ SKT.Socket.FindFree sec rts -.2 txa x = hFD +.2 txa sta SKT.TABLE,y clc rts @@ -151,7 +149,7 @@ SKT.connect >SYSCALL GetMemPtr >STYA ZPPtrSKT jsr SKT.PullRemAddr - + ldy #S.SOCKET.T lda (ZPPtrSKT),y tax @@ -164,7 +162,7 @@ SKT.connect.SEQPACKET jsr SKT.SetRemAddr jsr SKT.NewTCB bcs SKT.connect.99 - + lda #S.TCP.OPTIONS.SYN jsr TCP.OUT.SendOptA Send SYN bcs .9 @@ -176,7 +174,7 @@ SKT.connect.SEQPACKET .9 lda #ERR.SKT.BAD sec -SKT.connect.99 rts +SKT.connect.99 rts */-------------------------------------- * # Listen * Listen for connections on a socket @@ -237,10 +235,10 @@ SKT.Accept >SYSCALL GetMemPtr ldy #S.SOCKET.HQ.TAIL lda (ZPPtrSKT),y ldy #S.SOCKET.HQ.HEAD - cmp (ZPPtrSKT),y Queue Empty + cmp (ZPPtrSKT),y beq .9 CS - pha save tail... + pha inc cmp #S.SOCKET.HQ.MAX bne .1 @@ -279,17 +277,15 @@ SKT.shutdown pha lda (ZPPtrSKT),y and #S.SOCKET.O.ACCEPTCONN bne SKT.shutdown.LISTEN - + ldy #S.SOCKET.T lda (ZPPtrSKT),y tax jmp (J.SKT.shutdown,x) - SKT.shutdown.LISTEN SKT.shutdown.RAW SKT.shutdown.DGRAM SKT.shutdown.SEQPACKET - .1 ldy #S.SOCKET.HQ.TAIL lda (ZPPtrSKT),y ldy #S.SOCKET.HQ.HEAD @@ -317,24 +313,22 @@ SKT.shutdown.SEQPACKET bra .1 .3 pla get hFD... - + ldx #0 - + .4 cmp SKT.TABLE,x beq .5 - + inx cpx #K.SKTTABLE.SIZE bne .4 - + .5 stz SKT.TABLE,x >SYSCALL freemem clc rts - SKT.shutdown.STREAM pla - ldy #S.SOCKET.TCP.S lda (ZPPtrSKT),y cmp #S.SOCKET.TCP.S.CLWAIT @@ -350,7 +344,6 @@ SKT.shutdown.STREAM lda (ZPPtrSKT),y ora #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK sta (ZPPtrSKT),y - jmp TCP.OUT */-------------------------------------- * # Read (STREAM) @@ -368,7 +361,6 @@ SKT.shutdown.STREAM *\-------------------------------------- SKT.Read >SYSCALL GetMemPtr >STYA ZPPtrSKT - >PULLW ZPDataInPtr !!!DataOut trashed when sending ACK in TCP.OUT >PULLW ZPDataInLen !!!use DataInPtr/Len @@ -419,7 +411,6 @@ SKT.Read >SYSCALL GetMemPtr *\-------------------------------------- SKT.Write >SYSCALL GetMemPtr >STYA ZPPtrSKT - >PULLW ZPDataInPtr >PULLW ZPDataInLen @@ -474,13 +465,10 @@ SKT.Write >SYSCALL GetMemPtr SKT.RecvFrom pha >PULLW ZPTmpPtr1 addr pla - sec .HS 90 BCC SKT.Recv clc - php - >SYSCALL GetMemPtr >STYA ZPPtrSKT @@ -560,7 +548,7 @@ SKT.Recv clc .99 plp lda #ERR.SKT.BAD sec - rts + rts .90 plp lda #0 no data @@ -590,19 +578,15 @@ SKT.Send clc >SYSCALL GetMemPtr >STYA ZPPtrSKT plp - >PULLW ZPDataInPtr - >PULLW ZPDataInLen - + >PULLW ZPDataInLen bcc .1 - jsr SKT.PullRemAddr jsr SKT.SetRemAddr - .1 ldy #S.SOCKET.T lda (ZPPtrSKT),y tax - jmp (J.SKT.send,x) + jmp (J.SKT.send,x) *-------------------------------------- SKT.Send.RAW ldy #S.SOCKET.PROTO lda (ZPPtrSKT),y @@ -619,7 +603,7 @@ SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP jsr SKT.SetFrameOutTCPUDPPorts SKT.Send.DGRAM.8 jsr SKT.SetFrameOutDstIP - jsr SKT.CopyDataInToOut + jsr SKT.CopyDataInToOut jmp FRM.SendIP *-------------------------------------- SKT.Send.STREAM lda #ERR.SKT.BAD @@ -635,15 +619,33 @@ SKT.Send.SEQPACKET * `void * gettable();` * ## ASM * **In:** -* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.GetTable` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.GetTable` * ## RETURN VALUE *\-------------------------------------- SKT.GetTable >LDYA L.SKT.Table clc rts +*/-------------------------------------- +* # SetSockOpt +* Set Socket Options +* ## C +* `int setsockopt(hFD fd, short int opts);` +* ## ASM +* **In:** +* `>PUSHWI opts` +* `lda fd` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.SetSockOpt` +* ## RETURN VALUE +*\-------------------------------------- +SKT.setsockopt >SYSCALL GetMemPtr + >STYA ZPPtrSKT + >PULLA + ldy #S.SOCKET.O + ora (ZPPtrSKT),y + sta (ZPPtrSKT),y + clc + rts *-------------------------------------- -* PRIVATE -*-------------------------------------- SKT.PullLocAddr >PULLW ZPTmpPtr1 ldy #S.SOCKADDR-1 .1 lda (ZPTmpPtr1),y @@ -651,7 +653,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1 dey bpl .1 rts -*-------------------------------------- +*-------------------------------------- SKT.PullRemAddr >PULLW ZPTmpPtr1 ldy #S.SOCKADDR-1 .1 lda (ZPTmpPtr1),y @@ -666,7 +668,6 @@ SKT.SetLocAddr ldy #S.SOCKET.LOC.PORT+1 dey cpy #S.SOCKET.LOC.ADDR bcs .1 -* clc rts *-------------------------------------- SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1 @@ -675,7 +676,6 @@ SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1 dey cpy #S.SOCKET.REM.ADDR bcs .1 -* clc rts *-------------------------------------- SKT.FindMatchingLocRem @@ -699,7 +699,7 @@ SKT.FindMatchingLocRem .2 lda (ZPTmpPtr1),y bne .4 - ldy #S.SOCKET.LOC.PORT This Socket is bound to 0.0.0.0,check only LOC port + ldy #S.SOCKET.LOC.PORT bound to 0.0.0.0,check only LOC port .3 lda (ZPTmpPtr1),y @@ -713,11 +713,11 @@ SKT.FindMatchingLocRem lda (ZPTmpPtr1),y and #S.SOCKET.O.ACCEPTCONN beq .6 - + ldy #S.TCP.OPTIONS Listening, only SYN packet.... lda (ZPFrameInPtr),y cmp #S.TCP.OPTIONS.SYN - beq .7 a SYN recieved on a LISTEN socket, ok + beq .7 SYN recieved on a LISTEN socket, ok bne .8 bad packet for this listening .6 lda SKT.REM.ADDR+S.SOCKADDR.ADDR @@ -733,7 +733,7 @@ SKT.FindMatchingLocRem bra .5 .41 ldy #S.SOCKET.REM.ADDR - + .5 lda (ZPTmpPtr1),y cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y bne .8 wrong remote host, exit.... @@ -788,9 +788,6 @@ SKT.FindMatchingLoc * sec .9 rts *-------------------------------------- -* ZPPtrSKT -> actual socket -* A = hSocket or hFrame -*-------------------------------------- SKT.AddToQueueA pha ldy #S.SOCKET.HQ.HEAD lda (ZPPtrSKT),y @@ -990,7 +987,7 @@ SKT.GetDataFromSktIn bne .3 lda SKT.TmpCache+S.SOCKET.TCP.INTAIL+1 eor SKT.TmpCache+S.SOCKET.TCP.INHEAD+1 - beq .7 no more data.... + beq .7 .3 lda (ZPTmpPtr2) pha @@ -1037,7 +1034,6 @@ SKT.GetDataFromSktIn clc adc ZPTmpPtr3 sta SKT.TmpCache+S.SOCKET.TCP.INFREE - lda SKT.TmpCache+S.SOCKET.TCP.INFREE+1 adc ZPTmpPtr3+1 sta SKT.TmpCache+S.SOCKET.TCP.INFREE+1 @@ -1046,7 +1042,6 @@ SKT.GetDataFromSktIn sec sbc ZPTmpPtr3 sta SKT.TmpCache+S.SOCKET.TCP.INUSED - lda SKT.TmpCache+S.SOCKET.TCP.INUSED+1 sbc ZPTmpPtr3+1 sta SKT.TmpCache+S.SOCKET.TCP.INUSED+1 @@ -1055,7 +1050,6 @@ SKT.GetDataFromSktIn clc adc ZPTmpPtr3 sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+3 - lda SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 adc ZPTmpPtr3+1 sta SKT.TmpCache+S.SOCKET.TCP.OUTACKNUM+2 @@ -1077,8 +1071,8 @@ SKT.GetDataFromSktIn >LDYA ZPTmpPtr3 clc rts -.9 -* lda #0 NO DATA +.9 +* lda #0 sec rts *-------------------------------------- @@ -1093,7 +1087,7 @@ SKT.AddDataToSktOut lda SKT.TmpCache+S.SOCKET.TCP.OUTFREE+1 sbc ZPDataInLen+1 bcc .9 Not enough room in Q - + ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y >SYSCALL GetMemPtr @@ -1339,7 +1333,7 @@ SKT.StoreTCB ldy #S.SOCKET iny cpy #S.SOCKET.TCP bne .1 - clc Make CC for successfull exit + clc SKT.StoreTCB.RTS rts *-------------------------------------- @@ -1395,7 +1389,7 @@ SKT.SetFrameOutTCPUDPPorts iny txa sta (ZPFrameOutPtr),y - + ldy #S.SOCKET.REM.PORT lda (ZPPtrSKT),y tax @@ -1414,7 +1408,7 @@ SKT.CopyDataInToOut pha lda ZPDataOutPtr+1 pha - + lda ZPDataInLen eor #$ff tax @@ -1438,13 +1432,12 @@ SKT.CopyDataInToOut inc ZPDataInPtr+1 inc ZPDataOutPtr+1 bne .1 - + .9 pla sta ZPDataOutPtr+1 pla sta ZPDataInPtr+1 rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.SKT LOAD /A2OSX.SRC/LIB/LIBTCPIP.S diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index eed14e53..05324cdb 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -89,6 +89,8 @@ CS.START cld .DA SKT.SendTo .DA SKT.GetTable + + .DA SKT.setsockopt *-------------------------------------- L.DEVNAME .DA DEVNAME L.MSG.DEV.KO .DA MSG.DEV.KO diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index e9e13aaa..f4a4eebf 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -40,7 +40,8 @@ CS.START cld .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.IPCFG .DA IPCFG -L.Socket .DA Socket +L.SA.LOCAL .DA SA.LOCAL +L.SA.REMOTE .DA SA.REMOTE L.MSG.CFG1 .DA MSG.CFG1 L.MSG.CFG2 .DA MSG.CFG2 L.MSG.CFG.KO .DA MSG.CFG.KO @@ -53,6 +54,7 @@ L.DHCP.REQ .DA DHCP.REQ *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib + bcs .9 sta hLIBTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG @@ -105,13 +107,27 @@ CS.INIT >LDYA L.LIBTCPIP sec rts *-------------------------------------- -CS.RUN >PUSHW L.Socket - +CS.RUN >PUSHBI 0 no protocol + lda #S.SOCKET.T.DGRAM >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcc .1 - jmp CS.RUN.KO +.9 jmp CS.RUN.KO .1 >STA.G hSocket + pha + >PUSHW L.SA.LOCAL + pla + >LIBCALL hLIBTCPIP,LIBTCPIP.Bind + bcs .9 + + >PUSHWI S.SOCKET.O.BROADCAST + >LDA.G hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.setsockopt + + >PUSHW L.SA.REMOTE + >LDA.G hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Connect + bcs .9 >LDYA L.MSG.CFG1 >SYSCALL puts @@ -236,7 +252,7 @@ CS.DOEVENT lda (pEvent) CS.QUIT >LDA.G hSocket beq .1 - >SYSCALL fclose + >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown .1 lda hLIBTCPIP >SYSCALL UnloadLib @@ -437,7 +453,7 @@ Wait.TimeOut ldy #TimeOut rts *-------------------------------------- CS.END -LIBTCPIP .AZ "libtcpip.o" +LIBTCPIP .AZ "libtcpip" MSG.CFG1 .AZ "DHCPCLNT:Searching for DHCP servers..." MSG.CFG2 .AZ "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n" MSG.CFG.KO .AZ "DHCPCLNT:Time Out [%h].\r\n" @@ -447,12 +463,15 @@ MSG.CFG.NA .AZ "DHCPCLNT:TCPIP Already configured, exiting." hLIBTCPIP .BS 1 IPCFG .BS S.IPCFG *-------------------------------------- -Socket .DA #S.SOCKET.T.DGRAM - .BS 3 - .HS 00.00.00.00 Socket.Src.Addr - .DA UDP.PORT.DHCPC Socket.Src.Port - .HS FF.FF.FF.FF Socket.Dst.Addr - .DA UDP.PORT.DHCPS Socket.Dst.Port +SA.LOCAL .DA #AF.INET S.SOCKADDR.AF + .BS 1 + .HS 00.00.00.00 S.SOCKADDR.ADDR + .DA UDP.PORT.DHCPC S.SOCKADDR.PORT +*-------------------------------------- +SA.REMOTE .DA #AF.INET S.SOCKADDR.AF + .BS 1 + .HS FF.FF.FF.FF S.SOCKADDR.ADDR + .DA UDP.PORT.DHCPS S.SOCKADDR.PORT *-------------------------------------- DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.DISC.XID .BS 4