diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 8a18438f..5290af86 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/HTTPGET.S.txt b/BIN/HTTPGET.S.txt index 66b25e93..9f9c1fbe 100644 --- a/BIN/HTTPGET.S.txt +++ b/BIN/HTTPGET.S.txt @@ -385,6 +385,7 @@ HTTP.GET2 .AS " HTTP/1.1" .AS "Host: " HTTP.GET2.LEN .EQ *-HTTP.GET2 HTTP.GET3 .DA #C.CR,#C.LF + .DA #C.CR,#C.LF HTTP.GET3.LEN .EQ *-HTTP.GET3 *-------------------------------------- .DUMMY diff --git a/BIN/IPCONFIG.S.DEV.txt b/BIN/IPCONFIG.S.DEV.txt new file mode 100644 index 00000000..ffbad20e --- /dev/null +++ b/BIN/IPCONFIG.S.DEV.txt @@ -0,0 +1,37 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF +*-------------------------------------- +* PULLW = PTR to S.IPCFG +*-------------------------------------- +DEV.Bind >PUSHBI 0 + >LDYA L.DEVNAME + >SYSCALL open + bcc .1 + inc DEVNAME+8 + lda DEVNAME+8 + cmp #'8' + bne DEV.Bind + + >LDYA L.MSG.DEV.KO + >SYSCALL puts + + lda #MLI.E.NODEV + sec + rts + +.1 sta IPCFG+S.IPCFG.hFD + + >PUSHW L.DEVNAME + >PUSHBI 2 + >LDYA L.MSG.DEV.OK + >SYSCALL printf + + clc + rts +*-------------------------------------- +MAN +SAVE USR/SRC/SBIN/IPCONFIG.S.DEV +LOAD USR/SRC/SBIN/IPCONFIG.S +ASM diff --git a/BIN/IPCONFIG.S.DHCP.txt b/BIN/IPCONFIG.S.DHCP.txt new file mode 100644 index 00000000..c63dc363 --- /dev/null +++ b/BIN/IPCONFIG.S.DHCP.txt @@ -0,0 +1,495 @@ +NEW +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) + and #S.IPCFG.STATUS.OK + bne .99 Already Configured, exit + + ldy #S.IPCFG.hFD + lda (ZPIPCfgPtr),y + beq .98 + + ldy #S.IPCFG-1 + +.1 lda (ZPIPCfgPtr),y + sta IPCFG,y + dey + bne .1 + + stz IPCFG+S.IPCFG.STATUS + + ldx #3 + +.11 lda A2osX.TIMER16,x + sta DHCP.DISC.XID,x + sta DHCP.REQ.XID,x + dex + bpl .11 + + ldx #5 + +.2 lda IPCFG+S.IPCFG.MAC,x + sta DHCP.DISC.CHADDR,x + sta DHCP.REQ.CHADDR,x + dex + bpl .2 + + clc +.9 rts + +.98 >LDYA L.MSG.CFG.ND + bra .90 +.99 >LDYA L.MSG.CFG.NA + +.90 >SYSCALL puts + lda #0 + sec + rts +*-------------------------------------- +CS.RUN >PUSHBI 0 no protocol + lda #S.SOCKET.T.DGRAM + >LIBCALL hLIBTCPIP,LIBTCPIP.Socket + bcc .1 +.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 + + jsr Init.Timeout + +CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN + >PUSHW L.DHCP.DISC + >LDA.G hSocket + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcc .1 + jmp CS.RUN.KO + +.1 lda #S.IPCFG.STATUS.SDISC + sta IPCFG + +CS.RUN.ROFFER >SLEEP + + jsr CS.RUN.SKT.RCVD + bcc .1 + jsr Wait.Timeout + bne CS.RUN.ROFFER + + lda #1 + jmp CS.RUN.KO + +.1 jsr CheckDHCPOffer + + bcs CS.RUN.ROFFER + + lda #S.IPCFG.STATUS.ROFFER + sta IPCFG + +CS.RUN.SREQ ldx #3 + +.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x + dex + bpl .1 + + >PUSHBI 4 + >LDYA L.MSG.CFG2 + >SYSCALL printf + + >PUSHWI DHCP.REQ.LEN + >PUSHW L.DHCP.REQ + >LDA.G hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs CS.RUN.KO + + lda #S.IPCFG.STATUS.SREQ + sta IPCFG + +CS.RUN.RACK >SLEEP + + jsr CS.RUN.SKT.RCVD + bcc .1 + jsr Wait.Timeout + bne CS.RUN.RACK + lda #2 + bra CS.RUN.KO + +.1 jsr CheckDHCPAck + bcs CS.RUN.RACK + +CS.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 + >SYSCALL printf + lda #0 Leave with NO ERROR + sec + rts + +CS.RUN.KO pha + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.CFG.KO + >SYSCALL printf + pla + sec + rts +*-------------------------------------- +CS.RUN.SKT.RCVD >LDA.G hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcs .9 + >STA.G hFrame + + >SYSCALL GetMemPtr + >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 + beq .1 + + >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown + +.1 lda hLIBTCPIP + beq .8 + >SYSCALL UnloadLib + +.8 clc + rts +*-------------------------------------- +CheckDHCPOffer jsr CheckDHCPXID + bcs .9 + + lda ZPFrameBase + clc + adc #S.DHCP.OPTIONS + sta ZPFramePtr + + lda ZPFrameBase+1 + adc /S.DHCP.OPTIONS + sta ZPFramePtr+1 + + lda (ZPFramePtr) + cmp #S.DHCP.OPTIONS.MSGTYPE + bne .9 + + ldy #2 + lda (ZPFramePtr),y + cmp #S.DHCP.OPTIONS.DHCPOffer + bne .9 + + ldy #S.DHCP.GIADDR+3 + ldx #3 + +.1 lda (ZPFrameBase),y + sta DHCP.REQ.GIADDR,x + dey + dex + bpl .1 + + ldy #S.DHCP.YIADDR+3 + ldx #3 + +.2 lda (ZPFrameBase),y + sta DHCP.REQ.OPT.REQIP,x + sta IPCFG+S.IPCFG.IP,x + dey + dex + bpl .2 + + ldy #S.IP.SRC+3 + ldx #3 + +.3 lda (ZPFrameBase),y + sta DHCP.REQ.OPT.SVRIP,x + sta IPCFG+S.IPCFG.DHCPSRVR,x + dey + dex + bpl .3 + +.5 inc ZPFramePtr skip Option 53 (DHCPOffer:530102) + bne .6 + inc ZPFramePtr+1 + +.6 lda (ZPFramePtr) + sec + adc ZPFramePtr add option len + 1 + sta ZPFramePtr + bcc .7 + inc ZPFramePtr+1 + +.7 lda (ZPFramePtr) + cmp #S.DHCP.OPTIONS.END + beq .8 + jsr GetDHCPOption + bra .5 + +.8 jsr CS.RUN.DISCARD + clc + rts + +.9 jsr CS.RUN.DISCARD + sec + rts +*-------------------------------------- +CS.RUN.DISCARD >LDA.G hFrame + >SYSCALL FreeMem + rts +*-------------------------------------- +GetDHCPOption cmp #S.DHCP.OPTIONS.MASK + bne .1 + ldx #S.IPCFG.MASK + bra GetDHCPOption.CopyIP + +.1 cmp #S.DHCP.OPTIONS.GW + bne .2 + + ldx #S.IPCFG.GW + bra GetDHCPOption.CopyIP + +.2 cmp #S.DHCP.OPTIONS.DNS + bne .3 + + ldx #S.IPCFG.DNS1 + bra GetDHCPOption.CopyIP + +.3 cmp #S.DHCP.OPTIONS.DOMAIN + bne .9 + + ldy #1 + + lda (ZPFramePtr),y Get String len + cmp #80 + bcc .4 + lda #79 + +.4 sta IPCFG+S.IPCFG.DOMAIN store len + tax + +.5 iny + lda (ZPFramePtr),y + sta IPCFG+S.IPCFG.DOMAIN-1,y + dex + bne .5 + +.9 rts +*-------------------------------------- +GetDHCPOption.CopyIP + ldy #1 + lda (ZPFramePtr),y Get Byte count + cmp #9 + bcc .1 + lda #8 max 8 bytes (2 DNS) + +.1 iny + +.2 pha + + lda (ZPFramePtr),y + sta IPCFG,x + iny + inx + + pla + dec + bne .2 + + rts +*-------------------------------------- +CheckDHCPAck jsr CheckDHCPXID + bcs .9 + + lda ZPFrameBase + clc + adc #S.DHCP.OPTIONS + sta ZPFramePtr + + lda ZPFrameBase+1 + adc /S.DHCP.OPTIONS + sta ZPFramePtr+1 + + lda (ZPFramePtr) + cmp #S.DHCP.OPTIONS.MSGTYPE + bne .9 + + ldy #2 + lda (ZPFramePtr),y + cmp #S.DHCP.OPTIONS.DHCPAck + bne .9 + + jsr CS.RUN.DISCARD + clc + rts + +.9 jsr CS.RUN.DISCARD + sec + rts +*-------------------------------------- +CheckDHCPXID ldy #S.DHCP.XID+3 + ldx #3 + +.1 lda (ZPFrameBase),y + cmp DHCP.DISC.XID,x same XID ? + bne .9 + dey + dex + bpl .1 + + clc + rts + +.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 +ASM diff --git a/BIN/IPCONFIG.S.ETC.txt b/BIN/IPCONFIG.S.ETC.txt new file mode 100644 index 00000000..0486f5dc --- /dev/null +++ b/BIN/IPCONFIG.S.ETC.txt @@ -0,0 +1,505 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF +*-------------------------------------- +CFG.EtcFiles >LDYAI 256 + >SYSCALL GetMem + bcs .9 + + >STYA ZPTmpPtr1 + stx CFG.hBuf1 + + >LDYA L.HOSTNAME + jsr CFG.Read.PrintF + jsr CFG.Read.HOSTNAME + + lda IPCFG+S.IPCFG.HOSTNAME + bne .4 + + ldy #$ff + +.2 iny + lda CFG.DefaultHost,y + sta IPCFG+S.IPCFG.HOSTNAME,y + bne .2 + +.3 lda A2osX.TIMER16 + jsr CFG.A2CharAX + sta IPCFG+S.IPCFG.HOSTNAME+6 + stx IPCFG+S.IPCFG.HOSTNAME+7 + + lda A2osX.TIMER16+1 + jsr CFG.A2CharAX + sta IPCFG+S.IPCFG.HOSTNAME+8 + stx IPCFG+S.IPCFG.HOSTNAME+9 + +.4 >LDYA L.TCPIP.CONF + jsr CFG.Read.PrintF + jsr CFG.Read.TCPIP.CONF + + lda IPCFG+S.IPCFG.IP + beq .5 + + lda #S.IPCFG.STATUS.OK + sta IPCFG+S.IPCFG.STATUS + +.5 >LDYA L.HOSTS + jsr CFG.Read.PrintF + jsr CFG.Read.HOSTS + + jsr SET.IPCFG.I + + lda CFG.hBuf1 + >SYSCALL freemem + +.9 rts +*-------------------------------------- +CFG.Read.PrintF >PUSHYA + >PUSHBI 2 + >LDYA L.MSG.CFG + >SYSCALL printf + rts +*-------------------------------------- +CFG.Read.HOSTNAME + >LDYA L.HOSTNAME + jsr CFG.Read.Open + jsr CFG.Read.Result + bcs .9 + +.1 jsr CFG.Read.GetS + bcs .8 + + lda (ZPTmpPtr1) + beq .1 empty line... + cmp #'# + beq .1 comment... + + ldy #0 + +.2 lda (ZPTmpPtr1),y + sta IPCFG+S.IPCFG.HOSTNAME,y + beq .8 end of name + + iny + cpy #15 + bne .2 + +.8 clc + .HS B0 BCS +.9 sec + jmp CFG.Read.Close +*-------------------------------------- +CFG.Read.TCPIP.CONF + >LDYA L.TCPIP.CONF + jsr CFG.Read.Open + jsr CFG.Read.Result + bcs .9 + +.1 jsr CFG.Read.GetS + bcs .8 + + lda (ZPTmpPtr1) + beq .1 empty line... + cmp #'# + beq .1 comment... + + ldy #$ff + +.2 iny + lda (ZPTmpPtr1),y + beq .3 + cmp #' ' + bne .2 + +.3 lda L.CFG.Keywords + sta ZPTmpPtr2 + lda L.CFG.Keywords+1 + sta ZPTmpPtr2+1 + + ldx #0 + +.4 phy save keyword len + + tya + cmp (ZPTmpPtr2) + bne .6 + +.5 lda (ZPTmpPtr2),y + dey + cmp (ZPTmpPtr1),y + bne .6 + tya + bne .5 + + ply discard keyword len + jsr .80 + bra .1 + +.6 lda (ZPTmpPtr2) + sec + adc ZPTmpPtr2 + sta ZPTmpPtr2 + bcc .7 + inc ZPTmpPtr2+1 + +.7 inx + inx + ply reset keyword len + + lda (ZPTmpPtr2) + bne .4 + + bra .1 + +.8 clc + .HS B0 BCS +.9 sec + jmp CFG.Read.Close + +.80 jmp (J.CFG.Keywords,x) +*-------------------------------------- +CFG.Read.address + ldx #S.IPCFG.IP+3 + bra CFG.Read.IP +CFG.Read.netmask + ldx #S.IPCFG.MASK+3 + bra CFG.Read.IP +CFG.Read.gateway + ldx #S.IPCFG.GW+3 + bra CFG.Read.IP +CFG.Read.nameserver + ldx #S.IPCFG.DNS1+3 + lda IPCFG,x + beq CFG.Read.IP + ldx #S.IPCFG.DNS2+3 + +CFG.Read.IP ldy #3 + +.1 txa + clc + adc L.IPCFG + pha + lda L.IPCFG+1 + adc #0 + >PUSHA @IP[3][2][1][0] + pla + >PUSHA + dex + dey + bpl .1 + + >PUSHBI 8 4 PTRs on stack + >PUSHW L.HST.SScanF + + lda (ZPTmpPtr2) + sec + adc ZPTmpPtr1 + tay + + lda ZPTmpPtr1+1 + adc #0 + + >SYSCALL SScanF + rts + +CFG.Read.dnsdomain + lda (ZPTmpPtr2) + sec + adc ZPTmpPtr1 + sta ZPTmpPtr1 + bcc .1 + inc ZPTmpPtr1+1 + +.1 ldy #$ff + +.2 iny + lda (ZPTmpPtr1),y + sta IPCFG+S.IPCFG.DOMAIN,y + beq .8 + cpy #K.DNS.MAXLEN + bne .2 + lda #0 + sta IPCFG+S.IPCFG.DOMAIN,y +.8 rts +*-------------------------------------- +CFG.Read.HOSTS stz CFG.hBuf2 + stz CFG.hBuf3 + + >LDYA L.HOSTS + jsr CFG.Read.Open + jsr CFG.Read.Result + bcs .9 + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + + >STYA ZPTmpPtr2 + stx CFG.hBuf2 + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + + >STYA ZPTmpPtr3 + stx CFG.hBuf3 + +.1 jsr CFG.Read.GetS + bcs .8 + + lda (ZPTmpPtr1) + beq .1 empty line... + cmp #'# + beq .1 comment... + + jsr CFG.Read.HOSTS.Scan + bcs .1 + + cmp #5 + bcc .1 less than 5 parameters, ignore + beq .2 no alias + + >LDYA ZPTmpPtr3 + jsr CFG.DNS.Add + +.2 >LDYA ZPTmpPtr2 + jsr CFG.DNS.Add + + bra .1 + +.8 clc + .HS B0 BCS +.9 sec + + php + pha + lda CFG.hBuf3 + beq .90 + >SYSCALL freemem +.90 lda CFG.hBuf2 + beq .91 + >SYSCALL freemem + +.91 jmp CFG.Read.Close2 +*-------------------------------------- +CFG.Read.HOSTS.Scan + >PUSHW ZPTmpPtr3 + >PUSHW ZPTmpPtr2 + + ldx #3 + +.2 txa + clc + adc L.CFG.IP + tay + lda L.CFG.IP+1 + adc #0 + >PUSHYA @IP[3][2][1][0] + + dex + bpl .2 + + >PUSHBI 12 6 PTRs on stack + >PUSHW L.CFG.HOSTS.SScanF + >LDYA ZPTmpPtr1 + + >SYSCALL SScanF + rts +*-------------------------------------- +CFG.DNS.ADD >STYA ZPTmpPtr1 + + >PUSHW ZPTmpPtr1 + + ldy #3 + +.1 lda CFG.IP,y + >PUSHA + dey + bpl .1 + + >PUSHBI 6 + >LDYA L.MSG.DNS.ADD + >SYSCALL printf + + >LDYA L.CFG.IP + + >PUSHYA + >PUSHW ZPTmpPtr1 + jsr DNS.Add +*-------------------------------------- +CFG.Read.Result bcc .1 + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.CFG.KO + >SYSCALL printf + sec + rts + +.1 >LDYA L.MSG.CFG.OK + >SYSCALL puts + rts +*-------------------------------------- +CFG.Read.Open stz CFG.hCfgFile + stz CFG.hCfgPath + + >SYSCALL ExpandStr + bcs .9 + + stx CFG.hCfgPath + pha + + >PUSHWI 0 + >PUSHBI S.FI.T.TXT + >PUSHBI O.RDONLY + + pla + >SYSCALL fopen + bcs .9 + + sta CFG.hCfgFile +* clc +.9 rts +*-------------------------------------- +CFG.Read.Close php + pha + +CFG.Read.Close2 + lda CFG.hCfgPath + beq .1 + >SYSCALL FreeMem + +.1 lda CFG.hCfgFile + beq .8 + >SYSCALL fclose + +.8 pla + plp + rts +*-------------------------------------- +CFG.Read.GetS >PUSHWI 255 + >PUSHW ZPTmpPtr1 + lda CFG.hCfgFile + >SYSCALL fgets +* bcs .9 +* >LDYA ZPTmpPtr1 +* >SYSCALL puts + +.9 rts +*-------------------------------------- +CFG.A2CharAX pha + lsr + lsr + lsr + lsr + ora #$30 + cmp #'9'+1 + bcc .1 + adc #6 +.1 tax + pla + and #$0F + ora #$30 + cmp #'9'+1 + bcc .8 + 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 +*-------------------------------------- +GET.IPCFG >LDYA L.IPCFG + clc + rts +*-------------------------------------- +MAN +SAVE USR/SRC/SBIN/IPCONFIG.S.ETC +LOAD USR/SRC/SBIN/IPCONFIG.S +ASM diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 2f623957..24de9f4c 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -4,17 +4,24 @@ AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/IPCONFIG + .TF SBIN/IPCONFIG2 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/MLI.E.I .INB INC/NIC.I .INB INC/ETH.I .INB INC/LIBTCPIP.I *-------------------------------------- -pIPCFG .EQ ZPBIN -pFD .EQ ZPBIN+2 -pDEV .EQ ZPBIN+4 + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +pIPCFG .BS 2 +pFD .BS 2 +pDEV .BS 2 +ZS.END + .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -26,7 +33,7 @@ CS.START cld .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #16 SS - .DA #6 ZP + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table @@ -36,6 +43,7 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP +L.MSG.USAGE .DA MSG.USAGE L.MSG0 .DA MSG0 L.MSG0.NL .DA MSG0.NL L.MSG0.L .DA MSG0.L @@ -55,6 +63,16 @@ L.MSG2.IP .DA MSG2.IP L.MSG2.GW .DA MSG2.GW L.MSG2.DNS .DA MSG2.DNS L.MSG2.HOSTNAME .DA MSG2.HOSTNAME +L.DEVNAME .DA DEVNAME +L.MSG.DEV.KO .DA MSG.DEV.KO +L.MSG.DEV.OK .DA MSG.DEV.OK +L.MSG.CFG .DA MSG.CFG +L.MSG.CFG.KO .DA MSG.CFG.KO +L.MSG.CFG.OK .DA MSG.CFG.OK +L.MSG.DNS.ADD .DA MSG.DNS.ADD +L.HOSTNAME .DA HOSTNAME +L.TCPIP.CONF .DA TCPIP.CONF +L.HOSTS .DA HOSTS .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP @@ -64,7 +82,42 @@ CS.INIT >LDYA L.LIBTCPIP .9 rts *-------------------------------------- -CS.RUN >PUSHBI 0 +CS.RUN +.1 >INC.G ArgCount + >SYSCALL ArgV + bcs .7 + + >STYA ZPPtr1 + + lda (ZPPtr1) + cmp #'-' + bne .99 + + ldy #1 + lda (ZPPtr1),y + + ldx OptionList + +.2 cmp OptionList,x + beq .3 + dex + bne .2 + +.99 >PUSHBI 0 + >LDYA L.MSG.USAGE + >SYSCALL printf + lda #E.SYN + sec + rts + +.3 ldy OptionVars-1,x + lda #$80 + sta (pData),y + bra .1 + +.7 +*-------------------------------------- +CS.RUN.STATUS >PUSHBI 0 >LDYA L.MSG0 >SYSCALL printf @@ -279,10 +332,20 @@ CS.QUIT lda hLIBTCPIP .8 clc rts +*-------------------------------------- + .INB USR/SRC/SBIN/IPCONFIG.S.DEV *-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip" *-------------------------------------- +OptionList >PSTR "DESdes" +OptionVars .DA #bDHCP,#bETC,#bSet,#bDHCP,#bETC,#bSet +*-------------------------------------- +MSG.USAGE .AS "Usage : IPCONFIG \r\n" + .AS " -D : Try to get IP address from DHCP\r\n" + .AS " -E : Read ETC files\r\n" + .AZ " -S : Set/Reset TCPIP configuration (-E, then -D if required)\r\n" +*-------------------------------------- MSG0 .AZ "TCP/IP Status : " MSG0.L .AZ "Loaded" MSG0.NL .AZ "Not Loaded" @@ -310,10 +373,41 @@ MSG2.GW .AZ " Gateway : %d.%d.%d.%d\r\n" MSG2.DNS .AZ " DNS : %d.%d.%d.%d,%d.%d.%d.%d\r\n" MSG2.HOSTNAME .AZ " Hostname : %s.%s\r\n" hLIBTCPIP .BS 1 +*-------------------------------------- +DEVNAME .AZ "/DEV/ETH1" +MSG.DEV.KO .AZ "No Device Found, exiting." +MSG.DEV.OK .AZ "Bound To Device : %s\r\n" +MSG.CFG .AZ "Reading %s..." +MSG.CFG.KO .AZ "Failed!!! [%h]\r\n" +MSG.CFG.OK .AZ "OK." +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" +*-------------------------------------- +CFG.DefaultHost .AZ "a2osx-XXXX" +CFG.Keywords >PSTR "address" + >PSTR "netmask" + >PSTR "gateway" + >PSTR "nameserver" + >PSTR "dnsdomain" + .DA #0 +CFG.hBuf1 .BS 1 +CFG.hBuf2 .BS 1 +CFG.hBuf3 .BS 1 +CFG.hCfgPath .BS 1 +CFG.hCfgFile .BS 1 +CFG.IP .BS 4 +CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s" *-------------------------------------- .DUMMY .OR 0 DS.START +ArgCount .BS 1 +bDHCP .BS 1 +bETC .BS 1 +bSet .BS 1 FD.ETH .BS 1 IOCTL .BS S.IOCTL DIB .BS S.DIB @@ -321,5 +415,5 @@ DCB.NIC .BS S.DCB.NIC DS.END .ED *-------------------------------------- MAN -SAVE USR/SRC/BIN/BIN/IPCONFIG.S +SAVE USR/SRC/SBIN/IPCONFIG.S ASM diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index ae551656..2e2f2a4f 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -115,16 +115,6 @@ CS.START cld .DA SKT.GetTable *-------------------------------------- -L.DEVNAME .DA DEVNAME -L.MSG.DEV.KO .DA MSG.DEV.KO -L.MSG.DEV.OK .DA MSG.DEV.OK -L.MSG.CFG .DA MSG.CFG -L.MSG.CFG.KO .DA MSG.CFG.KO -L.MSG.CFG.OK .DA MSG.CFG.OK -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.CFG.IP .DA CFG.IP L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF @@ -209,9 +199,13 @@ LIB.UNLOAD dec RefCount LIB.UNLOAD.8 clc rts *-------------------------------------- -POLL >PUSHW L.IOCTL +POLL lda IPCFG+S.IPCFG.hFD + beq .99 + + pha + >PUSHW L.IOCTL >PUSHBI IOCTL.READ - lda IPCFG+S.IPCFG.hFD + pla >SYSCALL IOCTL bcs .99 No Frame @@ -388,33 +382,6 @@ SKT.Dump ldy #S.SOCKET.REM.PORT+1 *-------------------------------------- CS.END *-------------------------------------- -DEVNAME .AZ "/DEV/ETH1" -MSG.DEV.KO .AZ "LIBTCPIP:No Device Found, exiting." -MSG.DEV.OK .AZ "LIBTCPIP:Bound To Device : %s\r\n" -MSG.CFG .AZ "LIBTCPIP:Reading %s..." -MSG.CFG.KO .AZ "Failed!!! [%h]\r\n" -MSG.CFG.OK .AZ "OK." -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" -*-------------------------------------- -CFG.DefaultHost .AZ "a2osx-XXXX" -CFG.Keywords >PSTR "address" - >PSTR "netmask" - >PSTR "gateway" - >PSTR "nameserver" - >PSTR "dnsdomain" - .DA #0 -CFG.hBuf1 .BS 1 -CFG.hBuf2 .BS 1 -CFG.hBuf3 .BS 1 -CFG.hCfgPath .BS 1 -CFG.hCfgFile .BS 1 -CFG.IP .BS 4 -CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s" -*-------------------------------------- SA.LOCAL .DA #AF.INET S.SOCKADDR.AF .BS 1 .BS 4 S.SOCKADDR.ADDR