diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 094b8fce..c4fa85e4 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Tools/userDefineLang.xml b/.Tools/userDefineLang.xml index b890a643..9f6716be 100644 --- a/.Tools/userDefineLang.xml +++ b/.Tools/userDefineLang.xml @@ -26,7 +26,7 @@ .BS .DA .AS .AT .AZ .EQ .MA .EM .OR .TF .LIST .HS .IN .INB .OP .TA .EM .PH .EP .DUMMY .ED adc and asl bit brk clc cld cli clv cmp cpx cpy dec dex dey eor inc inx iny lda ldx ldy lsr nop ora rmb rol ror rti rts sbc sec sed sei smb sta stp stx sty stz tax tay trb tsb tsx txa txs tya wai - $ % / # & + $ % / # & ^ .1 .2 .3 .4 .5 .6 .7 .8 .9 AUTO MAN LOAD SAVE ASM CREATE INC LOMEM PREFIX PR# NEW BLOAD BSAVE TEXT DELETE .DO .ELSE .FIN pha php phx phy pla plp plx ply diff --git a/BIN/IPCONFIG.S.DEV.txt b/BIN/IPCONFIG.S.DEV.txt index ffbad20e..46f1bc95 100644 --- a/BIN/IPCONFIG.S.DEV.txt +++ b/BIN/IPCONFIG.S.DEV.txt @@ -9,6 +9,7 @@ DEV.Bind >PUSHBI 0 >LDYA L.DEVNAME >SYSCALL open bcc .1 + inc DEVNAME+8 lda DEVNAME+8 cmp #'8' @@ -21,7 +22,8 @@ DEV.Bind >PUSHBI 0 sec rts -.1 sta IPCFG+S.IPCFG.hFD +.1 ldy #S.IPCFG.hFD + sta (pIPCFG),y >PUSHW L.DEVNAME >PUSHBI 2 diff --git a/BIN/IPCONFIG.S.DHCP.txt b/BIN/IPCONFIG.S.DHCP.txt index c63dc363..63357c92 100644 --- a/BIN/IPCONFIG.S.DHCP.txt +++ b/BIN/IPCONFIG.S.DHCP.txt @@ -3,47 +3,17 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- -* Relocation Table -*-------------------------------------- -.1 .DA CS.INIT - .DA CS.RUN - .DA CS.DOEVENT - .DA CS.QUIT -L.LIBTCPIP .DA LIBTCPIP -L.IPCFG .DA IPCFG -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 -L.MSG.CFG.OK .DA MSG.CFG.OK -L.MSG.CFG.ND .DA MSG.CFG.ND -L.MSG.CFG.NA .DA MSG.CFG.NA -L.DHCP.DISC .DA DHCP.DISC -L.DHCP.REQ .DA DHCP.REQ - .DA 0 -*-------------------------------------- -CS.INIT >LDYA L.LIBTCPIP - >SYSCALL LoadLib - bcs .9 - sta hLIBTCPIP - - >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG - bcs .9 - - >STYA ZPIPCfgPtr - - lda (ZPIPCfgPtr) +DHCP.INIT lda (pIPCFG) and #S.IPCFG.STATUS.OK bne .99 Already Configured, exit ldy #S.IPCFG.hFD - lda (ZPIPCfgPtr),y + lda (pIPCFG),y beq .98 ldy #S.IPCFG-1 -.1 lda (ZPIPCfgPtr),y +.1 lda (pIPCFG),y sta IPCFG,y dey bne .1 @@ -69,20 +39,20 @@ CS.INIT >LDYA L.LIBTCPIP clc .9 rts -.98 >LDYA L.MSG.CFG.ND +.98 >LDYA L.MSG.DHCP.ND bra .90 -.99 >LDYA L.MSG.CFG.NA +.99 >LDYA L.MSG.DHCP.NA .90 >SYSCALL puts lda #0 sec rts *-------------------------------------- -CS.RUN >PUSHBI 0 no protocol +DHCP.RUN >PUSHBI 0 no protocol lda #S.SOCKET.T.DGRAM >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcc .1 -.9 jmp CS.RUN.KO +.9 jmp DHCP.RUN.KO .1 >STA.G hSocket pha @@ -100,105 +70,108 @@ CS.RUN >PUSHBI 0 no protocol >LIBCALL hLIBTCPIP,LIBTCPIP.Connect bcs .9 - >LDYA L.MSG.CFG1 + >LDYA L.MSG.DHCP.CFG1 >SYSCALL puts jsr Init.Timeout -CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN +DHCP.RUN.SDISC >PUSHWI DHCP.DISC.LEN >PUSHW L.DHCP.DISC >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send bcc .1 - jmp CS.RUN.KO + jmp DHCP.RUN.KO .1 lda #S.IPCFG.STATUS.SDISC sta IPCFG -CS.RUN.ROFFER >SLEEP +DHCP.RUN.ROFFER >SLEEP - jsr CS.RUN.SKT.RCVD + jsr DHCP.RUN.SKT.RCVD bcc .1 jsr Wait.Timeout - bne CS.RUN.ROFFER + bne DHCP.RUN.ROFFER lda #1 - jmp CS.RUN.KO + jmp DHCP.RUN.KO .1 jsr CheckDHCPOffer - bcs CS.RUN.ROFFER + bcs DHCP.RUN.ROFFER lda #S.IPCFG.STATUS.ROFFER sta IPCFG -CS.RUN.SREQ ldx #3 +DHCP.RUN.SREQ ldx #3 .1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x dex bpl .1 >PUSHBI 4 - >LDYA L.MSG.CFG2 + >LDYA L.MSG.DHCP.CFG2 >SYSCALL printf >PUSHWI DHCP.REQ.LEN >PUSHW L.DHCP.REQ >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send - bcs CS.RUN.KO + bcs DHCP.RUN.KO lda #S.IPCFG.STATUS.SREQ sta IPCFG -CS.RUN.RACK >SLEEP +DHCP.RUN.RACK >SLEEP - jsr CS.RUN.SKT.RCVD + jsr DHCP.RUN.SKT.RCVD bcc .1 jsr Wait.Timeout - bne CS.RUN.RACK + bne DHCP.RUN.RACK lda #2 - bra CS.RUN.KO + bra DHCP.RUN.KO .1 jsr CheckDHCPAck - bcs CS.RUN.RACK + bcs DHCP.RUN.RACK -CS.RUN.OK lda #S.IPCFG.STATUS.OK +DHCP.RUN.OK lda #S.IPCFG.STATUS.OK sta IPCFG >PUSHW L.IPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG ldx #3 + .1 lda IPCFG+S.IPCFG.MASK,x >PUSHA dex bpl .1 ldx #3 + .2 lda IPCFG+S.IPCFG.IP,x >PUSHA dex bpl .2 >PUSHBI 8 - >LDYA L.MSG.CFG.OK + >LDYA L.MSG.DHCP.OK >SYSCALL printf lda #0 Leave with NO ERROR sec rts -CS.RUN.KO pha +DHCP.RUN.KO pha >PUSHA >PUSHBI 1 - >LDYA L.MSG.CFG.KO + >LDYA L.MSG.DHCP.KO >SYSCALL printf pla sec rts *-------------------------------------- -CS.RUN.SKT.RCVD >LDA.G hSocket +DHCP.RUN.SKT.RCVD + >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Recv bcs .9 >STA.G hFrame @@ -207,29 +180,12 @@ CS.RUN.SKT.RCVD >LDA.G hSocket >STYA ZPFrameBase .9 rts *-------------------------------------- -CS.DOEVENT lda (pEvent) - bpl .9 is it a TIMER event? - - ldy #TimeOut - lda (pData),y - beq .9 - - dec - sta (pData),y - -.9 sec do not discard TIMER event - rts -*-------------------------------------- -CS.QUIT >LDA.G hSocket +DHCP.QUIT >LDA.G hSocket beq .1 >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown -.1 lda hLIBTCPIP - beq .8 - >SYSCALL UnloadLib - -.8 clc +.1 clc rts *-------------------------------------- CheckDHCPOffer jsr CheckDHCPXID @@ -307,10 +263,6 @@ CheckDHCPOffer jsr CheckDHCPXID sec rts *-------------------------------------- -CS.RUN.DISCARD >LDA.G hFrame - >SYSCALL FreeMem - rts -*-------------------------------------- GetDHCPOption cmp #S.DHCP.OPTIONS.MASK bne .1 ldx #S.IPCFG.MASK @@ -400,6 +352,10 @@ CheckDHCPAck jsr CheckDHCPXID sec rts *-------------------------------------- +CS.RUN.DISCARD >LDA.G hFrame + >SYSCALL FreeMem + rts +*-------------------------------------- CheckDHCPXID ldy #S.DHCP.XID+3 ldx #3 @@ -416,79 +372,6 @@ CheckDHCPXID ldy #S.DHCP.XID+3 .9 sec rts *-------------------------------------- -Init.Timeout ldy #TimeOut - lda #TIMEOUT.MAX - sta (pData),y - rts -*-------------------------------------- -Wait.TimeOut ldy #TimeOut - lda (pData),y - rts -*-------------------------------------- -CS.END -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" -MSG.CFG.OK .AZ "DHCPCLNT:Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n" -MSG.CFG.ND .AZ "DHCPCLNT:No Device, exiting." -MSG.CFG.NA .AZ "DHCPCLNT:TCPIP Already configured, exiting." -hLIBTCPIP .BS 1 -IPCFG .BS S.IPCFG -*-------------------------------------- -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 - .HS 0000 SECS - .DA S.DHCP.FLAGS.BRDCST - .HS 00000000 CIADDR -DHCP.DISC.YIADDR .HS 00000000 - .HS 00000000 SIADDR -DHCP.DISC.GIADDR .HS 00000000 -DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000 - .BS 64 SNAME - .BS 128 FILE - .HS 63825363 COOKIE - .HS 3501 OPT - .DA #S.DHCP.OPTIONS.DHCPDiscover - .HS 37040103060FFF -DHCP.DISC.LEN .EQ *-DHCP.DISC -*-------------------------------------- -DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS -DHCP.REQ.XID .BS 4 - .HS 0000 SECS - .DA S.DHCP.FLAGS.BRDCST - .HS 00000000 CIADDR -DHCP.REQ.YIADDR .HS 00000000 - .HS 00000000 SIADDR -DHCP.REQ.GIADDR .HS 00000000 -DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000 - .BS 64 SNAME - .BS 128 FILE - .HS 63825363 COOKIE - .HS 3501 OPT - .DA #S.DHCP.OPTIONS.DHCPRequest - .HS 3204 -DHCP.REQ.OPT.REQIP .BS 4 - .HS 3604 -DHCP.REQ.OPT.SVRIP .BS 4 - .HS FF -DHCP.REQ.LEN .EQ *-DHCP.REQ -*-------------------------------------- -DS.START -TimeOut .BS 1 -hSocket .BS 1 -hFrame .BS 1 -DS.END MAN SAVE USR/SRC/SBIN/IPCONFIG.S.DHCP LOAD USR/SRC/SBIN/IPCONFIG.S diff --git a/BIN/IPCONFIG.S.ETC.txt b/BIN/IPCONFIG.S.ETC.txt index 0486f5dc..a381f45a 100644 --- a/BIN/IPCONFIG.S.ETC.txt +++ b/BIN/IPCONFIG.S.ETC.txt @@ -48,7 +48,7 @@ CFG.EtcFiles >LDYAI 256 jsr CFG.Read.PrintF jsr CFG.Read.HOSTS - jsr SET.IPCFG.I + >LIBCALL hLIBTCPIP,LIBTCPIP.Set.IPCFG lda CFG.hBuf1 >SYSCALL freemem @@ -326,7 +326,7 @@ CFG.DNS.ADD >STYA ZPTmpPtr1 >PUSHYA >PUSHW ZPTmpPtr1 - jsr DNS.Add + >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.Add *-------------------------------------- CFG.Read.Result bcc .1 >PUSHA @@ -405,92 +405,6 @@ CFG.A2CharAX pha adc #6 .8 rts *-------------------------------------- -SET.IPCFG >PULLW ZPTmpPtr1 IPCFG - - ldy #0 - -.1 lda (ZPTmpPtr1),y - sta IPCFG,y - iny - cpy #S.IPCFG - bne .1 - -SET.IPCFG.I >LDYA L.DCB.NIC - >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE - - >PUSHW L.IOCTL - >PUSHBI IOCTL.STATUS - lda IPCFG+S.IPCFG.hFD - >SYSCALL IOCTL - bcs * - - ldx #5 - -.10 lda DCB.NIC+S.DCB.NIC.MAC,x - sta IPCFG+S.IPCFG.MAC,x - sta ARP.REQ.SRCMAC,x - sta ARP.REQ.SHA,x - sta ARP.REP.SRCMAC,x - sta ARP.REP.SHA,x - dex - bpl .10 - - ldx #3 - -.11 lda IPCFG+S.IPCFG.IP,x - sta SA.LOCAL+S.SOCKADDR.ADDR,x - sta ARP.REQ.SPA,x - sta ARP.REP.SPA,x - dex - bpl .11 - - lda DCB.NIC+S.DCB.NIC.FLAGS - and #S.DCB.NIC.FLAGS.ARPOFFLOAD - beq .2 - - ldx #11 - -.1 lda IPCFG+S.IPCFG.IP,x - sta DCB.NIC+S.DCB.NIC.IP,x - dex - bpl .1 - - lda S.IOCTL.CTRLCODE.SETDCB - sta S.IOCTL.CTRLCODE - - >PUSHW L.IOCTL - >PUSHBI IOCTL.CONTROL - lda IPCFG+S.IPCFG.hFD - >SYSCALL IOCTL - bcs .9 - -.2 lda hDNSSocket - beq .3 - jsr SKT.Shutdown - stz hDNSSocket - -.3 lda IPCFG+S.IPCFG.DNS1 - beq .8 - - >PUSHBI 0 no protocol - lda #S.SOCKET.T.DGRAM - jsr SKT.Socket - bcs .9 - - sta hDNSSocket - - stz SA.LOCAL+S.SOCKADDR.PORT - stz SA.LOCAL+S.SOCKADDR.PORT+1 - - >PUSHW L.SA.LOCAL - lda hDNSSocket - jsr SKT.Bind - -.8 clc -.9 rts -*-------------------------------------- * grab a copy on the fly for lib function * OUT : * Y,A = PTR to S.IPCFG diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 141be64e..b6857fb9 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -8,10 +8,15 @@ AUTO 4,1 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/KERNEL.I + .INB INC/MLI.I .INB INC/MLI.E.I .INB INC/NIC.I .INB INC/ETH.I .INB INC/LIBTCPIP.I + .INB INC/NET.DHCP.I +*-------------------------------------- +TIMEOUT.MAX .EQ 200 20 sec. *-------------------------------------- .DUMMY .OR ZPBIN @@ -20,6 +25,13 @@ ZPPtr1 .BS 2 pIPCFG .BS 2 pFD .BS 2 pDEV .BS 2 +ZPIPCfgPtr .BS 2 +ZPFrameBase .BS 2 +ZPFramePtr .BS 2 +ZPTmpPtr1 .BS 2 +ZPTmpPtr2 .BS 2 +ZPTmpPtr3 .BS 2 +*-------------------------------------- ZS.END .ED *-------------------------------------- @@ -73,8 +85,33 @@ L.MSG.DNS.ADD .DA MSG.DNS.ADD L.HOSTNAME .DA HOSTNAME L.TCPIP.CONF .DA TCPIP.CONF L.HOSTS .DA HOSTS +L.IPCFG .DA IPCFG +L.IOCTL .DA IOCTL +L.DCB.NIC .DA DCB.NIC +L.CFG.IP .DA CFG.IP +L.HST.SScanF .DA HST.SScanF +L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF +L.CFG.Keywords .DA CFG.Keywords +J.CFG.Keywords .DA CFG.Read.address + .DA CFG.Read.netmask + .DA CFG.Read.gateway + .DA CFG.Read.nameserver + .DA CFG.Read.dnsdomain .DA 0 *-------------------------------------- +* DHCP +*-------------------------------------- +L.SA.LOCAL .DA SA.LOCAL +L.SA.REMOTE .DA SA.REMOTE +L.MSG.DHCP.CFG1 .DA MSG.DHCP.CFG1 +L.MSG.DHCP.CFG2 .DA MSG.DHCP.CFG2 +L.MSG.DHCP.KO .DA MSG.DHCP.KO +L.MSG.DHCP.OK .DA MSG.DHCP.OK +L.MSG.DHCP.ND .DA MSG.DHCP.ND +L.MSG.DHCP.NA .DA MSG.DHCP.NA +L.DHCP.DISC .DA DHCP.DISC +L.DHCP.REQ .DA DHCP.REQ +*-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib bcs .9 @@ -164,13 +201,15 @@ CS.RUN.DUMP >LDYA L.MSG0.L >PUSHEA.G DIB+S.DIB.IDS - lda #S.FD.DEV.NAME - clc - adc pFD - tay - lda /S.FD.DEV.NAME - adc pFD+1 - + >LDA.G FD.ETH + ldx #$ff + +.11 inx + cmp Dev.Table.hFD,x + bne .11 + + lda Dev.Table.hPath,x + >SYSCALL GetMemPtr >PUSHYA >PUSHB.G FD.ETH @@ -323,7 +362,16 @@ CS.RUN.DONE lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts *-------------------------------------- -CS.DOEVENT sec +CS.DOEVENT lda (pEvent) + bpl .9 is it a TIMER event? + + >LDA.G TimeOut + beq .9 + + dec + sta (pData),y + +.9 sec do not discard TIMER event rts *-------------------------------------- CS.QUIT lda hLIBTCPIP @@ -332,8 +380,19 @@ CS.QUIT lda hLIBTCPIP .8 clc rts +*-------------------------------------- +Init.Timeout ldy #TimeOut + lda #TIMEOUT.MAX + sta (pData),y + rts +*-------------------------------------- +Wait.TimeOut ldy #TimeOut + lda (pData),y + rts *-------------------------------------- .INB USR/SRC/SBIN/IPCONFIG.S.DEV + .INB USR/SRC/SBIN/IPCONFIG.S.DHCP + .INB USR/SRC/SBIN/IPCONFIG.S.ETC *-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip" @@ -351,7 +410,7 @@ MSG0.L .AZ "Loaded" MSG0.NL .AZ "Not Loaded" *-------------------------------------- MSG1.DEV .AS "Device Configuration :\r\n" - .AS " FD.ETH : $%h\r\n" + .AS " Device ID : $%h\r\n" .AS " Device Name : %s\r\n" .AS " Device Type : %S\r\n" .AZ " HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n" @@ -385,6 +444,7 @@ MSG.DNS.ADD .AZ " - Adding static host %d.%d.%d.%d %s..." HOSTNAME .AZ "${ROOT}ETC/HOSTNAME" TCPIP.CONF .AZ "${ROOT}ETC/TCPIP.CONF" HOSTS .AZ "${ROOT}ETC/HOSTS" +HST.SScanF .AZ "%d.%d.%d.%d" *-------------------------------------- CFG.DefaultHost .AZ "a2osx-XXXX" CFG.Keywords >PSTR "address" @@ -400,6 +460,62 @@ CFG.hCfgPath .BS 1 CFG.hCfgFile .BS 1 CFG.IP .BS 4 CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s" +IPCFG .BS S.IPCFG +*-------------------------------------- +MSG.DHCP.CFG1 .AZ "Searching for DHCP servers..." +MSG.DHCP.CFG2 .AZ "Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n" +MSG.DHCP.KO .AZ "Time Out [%h].\r\n" +MSG.DHCP.OK .AZ "Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n" +MSG.DHCP.ND .AZ "No Device, exiting." +MSG.DHCP.NA .AZ "TCPIP Already configured, exiting." +*-------------------------------------- +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 + .HS 0000 SECS + .DA S.DHCP.FLAGS.BRDCST + .HS 00000000 CIADDR +DHCP.DISC.YIADDR .HS 00000000 + .HS 00000000 SIADDR +DHCP.DISC.GIADDR .HS 00000000 +DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000 + .BS 64 SNAME + .BS 128 FILE + .HS 63825363 COOKIE + .HS 3501 OPT + .DA #S.DHCP.OPTIONS.DHCPDiscover + .HS 37040103060FFF +DHCP.DISC.LEN .EQ *-DHCP.DISC +*-------------------------------------- +DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS +DHCP.REQ.XID .BS 4 + .HS 0000 SECS + .DA S.DHCP.FLAGS.BRDCST + .HS 00000000 CIADDR +DHCP.REQ.YIADDR .HS 00000000 + .HS 00000000 SIADDR +DHCP.REQ.GIADDR .HS 00000000 +DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000 + .BS 64 SNAME + .BS 128 FILE + .HS 63825363 COOKIE + .HS 3501 OPT + .DA #S.DHCP.OPTIONS.DHCPRequest + .HS 3204 +DHCP.REQ.OPT.REQIP .BS 4 + .HS 3604 +DHCP.REQ.OPT.SVRIP .BS 4 + .HS FF +DHCP.REQ.LEN .EQ *-DHCP.REQ *-------------------------------------- .DUMMY .OR 0 @@ -412,6 +528,9 @@ FD.ETH .BS 1 IOCTL .BS S.IOCTL DIB .BS S.DIB DCB.NIC .BS S.DCB.NIC +TimeOut .BS 1 +hSocket .BS 1 +hFrame .BS 1 DS.END .ED *-------------------------------------- MAN diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index b7ae1357..47ac16f0 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -397,7 +397,7 @@ READ php bcs .9 >STYA ZPBufPtr - stx .8+1 + phx phy ldy #S.IOCTL.BUFPTR+1 @@ -433,7 +433,7 @@ READ php inc ZPBufPtr+1 bne .2 -.8 lda #$ff SELF MODIFIED hMem +.8 pla hMem plp clc diff --git a/INC/LIBETALK.I.txt b/INC/LIBETALK.I.txt new file mode 100644 index 00000000..dfc60c2c --- /dev/null +++ b/INC/LIBETALK.I.txt @@ -0,0 +1,16 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF + .OP 65C02 +*-------------------------------------- +LIBETALK.SETCFG .EQ 4 +LIBETALK.GETCFG .EQ 6 + +LIBETALK.INCOMING .EQ 8 +LIBETALK.PULSE .EQ 10 +*-------------------------------------- +MAN +SAVE INC/LIBETALK.I +LOAD USR/SRC/LIB/LIBETALK.S +ASM diff --git a/LIB/LIBETALK.S.txt b/LIB/LIBETALK.S.txt new file mode 100644 index 00000000..b30178a4 --- /dev/null +++ b/LIB/LIBETALK.S.txt @@ -0,0 +1,93 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF LIB/LIBETALK +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/A2OSX.I + .INB INC/NIC.I + .INB INC/ETH.I +*-------------------------------------- +ZPFrameInPtr .EQ ZPLIB +ZPFrameInLen .EQ ZPLIB+2 + +ZPDataInPtr .EQ ZPLIB+4 +ZPDataInLen .EQ ZPLIB+6 + +ZPFrameOutPtr .EQ ZPLIB+8 +ZPFrameOutLen .EQ ZPLIB+10 + +ZPDataOutPtr .EQ ZPLIB+12 +ZPDataOutLen .EQ ZPLIB+14 + +ZPIOCTL .EQ ZPLIB+16 +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA LIB.LOAD + .DA LIB.UNLOAD + + .DA SETCFG + .DA GETCFG + + .DA INCOMING + .DA PULSE +*-------------------------------------- + .DA 0 +*-------------------------------------- +LIB.LOAD clc + rts +*-------------------------------------- +LIB.UNLOAD clc + rts +*-------------------------------------- +SETCFG +*-------------------------------------- +GETCFG +*-------------------------------------- +INCOMING sta hFrameIn + >PULLW ZPIOCTL + + ldy #S.IOCTL.BUFPTR+3 + ldx #3 + +.1 lda (ZPIOCTL),y + sta ZPFrameInPtr,x + dey + dex + bpl .1 + + sec + rts +*-------------------------------------- +* Expire = every sec +* Retry = every 100 msec +*-------------------------------------- +PULSE and #S.EVT.F.T1SEC + beq .1 + +.1 clc + rts +*-------------------------------------- +CS.END +*-------------------------------------- +hFrameIn .BS 1 +*-------------------------------------- +MAN +SAVE USR/SRC/LIB/LIBETALK.S +ASM diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt new file mode 100644 index 00000000..9a45faf2 --- /dev/null +++ b/SBIN/NETWORKD.S.txt @@ -0,0 +1,176 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF SBIN/NETWORKD +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/A2OSX.I + .INB INC/MLI.E.I + .INB INC/ETH.I + .INB INC/LIBTCPIP.I + .INB INC/LIBETALK.I +*-------------------------------------- +* Zero Page Segment, up to 32 bytes +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +* MyPtr .BS 2 +ZS.END + .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #S.PS.F.EVENT + .DA #0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #16 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.DEVNAME .DA DEVNAME +L.MSG.DEV.OK .DA MSG.DEV.OK +L.MSG.DEV.KO .DA MSG.DEV.KO +L.LIBTCPIP .DA LIBTCPIP +L.LIBETALK .DA LIBETALK +L.IOCTL .DA IOCTL + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN >PUSHBI 0 + >LDYA L.DEVNAME + >SYSCALL open + bcc .1 + + inc DEVNAME+8 + lda DEVNAME+8 + cmp #'8' + bne CS.RUN + + >LDYA L.MSG.DEV.KO + >SYSCALL puts + + lda #MLI.E.NODEV + sec + rts + +.1 sta hFD + + >PUSHW L.DEVNAME + >PUSHBI 2 + >LDYA L.MSG.DEV.OK + >SYSCALL printf + +* >LDYA L.LIBTCPIP +* >SYSCALL LoadLib +* bcs .2 +* sta hLIBTCPIP + +.2 >LDYA L.LIBETALK + >SYSCALL LoadLib + bcs .3 + sta hLIBETALK + +.3 +CS.RUN.LOOP >SLEEP + + >PUSHW L.IOCTL + >PUSHBI IOCTL.READ + lda hFD + >SYSCALL IOCTL + bcs CS.RUN.LOOP No Frame + + sta hFrameIn + + ldx hLIBTCPIP + beq .1 + +* >PUSHW L.IOCTL +* lda hFrameIn + +* >LIBCALL hLIBTCPIP,LIBTCPIP.INCOMING +* bcc CS.RUN.LOOP + +.1 ldx hLIBETALK + beq .9 + + >PUSHW L.IOCTL + lda hFrameIn + >LIBCALL hLIBETALK,LIBETALK.INCOMING + bcc CS.RUN.LOOP + +.9 lda hFrameIn + >SYSCALL freemem + + bra CS.RUN.LOOP +*-------------------------------------- +CS.DOEVENT lda (pEvent) + bpl .9 + + ldx hLIBTCPIP + beq .1 +* >LIBCALL hLIBTCPIP,LIBTCPIP.PULSE + +.1 ldx hLIBETALK + beq .9 + lda (pEvent) + >LIBCALL hLIBETALK,LIBETALK.PULSE + +.9 sec never discard TIME event + rts +*-------------------------------------- +CS.QUIT lda hLIBTCPIP + beq .1 + + >SYSCALL UnloadLib + +.1 lda hLIBETALK + beq .2 + + >SYSCALL UnloadLib + +.2 >PUSHWI 0 + >PUSHBI IOCTL.CLOSE + lda hFD + >SYSCALL IOCTL + + clc + rts +*-------------------------------------- +CS.END +*-------------------------------------- +DEVNAME .AZ "/DEV/ETH1" +MSG.DEV.KO .AZ "No Device Found, exiting." +MSG.DEV.OK .AZ "Bound To Device : %s\r\n" +LIBTCPIP .AZ "libtcpip" +LIBETALK .AZ "libetalk" +hFD .BS 1 +hLIBTCPIP .BS 1 +hLIBETALK .BS 1 +IOCTL .BS S.IOCTL +hFrameIn .BS 1 +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +DS.END .ED +*-------------------------------------- +MAN +SAVE USR/SRC/SBIN/NETWORKD.S +ASM diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 9b4d99cb..1bf46050 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -88,13 +88,21 @@ CS.RUN jsr Init.Timeout CS.RUN.INIT ldx #3 ldy #S.IPCFG.IP+3 + .1 lda (ZPIPCfgPtr),y sta SA.LOCAL+S.SOCKADDR.ADDR,x dey dex bpl .1 - >PUSHBI 0 no protocol + lda #1 + >SYSCALL ArgV + bcs CS.RUN.PORTOK + + >SYSCALL atoi + >STYA SA.LOCAL+S.SOCKADDR.PORT + +CS.RUN.PORTOK >PUSHBI 0 no protocol lda #S.SOCKET.T.STREAM >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcs .9