From 4c5584db40cb1ea4ba736884dcaaebe9f464b468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 6 Oct 2017 08:33:21 +0200 Subject: [PATCH] Kernel 0.9.1 : TCPIP stack 0.9.1....(In Progress) --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/UTHERNET.DRV.S.txt | 6 +- LIB/LIBTCPIP.S.CFG.txt | 2 +- LIB/LIBTCPIP.S.DNS.txt | 2 +- LIB/LIBTCPIP.S.SKT.txt | 8 +- LIB/LIBTCPIP.S.txt | 7 +- README.md | 2 +- SBIN/DHCPCLNT.S.txt | 13 +- SBIN/TCPIPD.S.CFG.txt | 373 +++++++++++++++++++++++++++++++++++++++ SBIN/TCPIPD.S.txt | 228 ++++++++++++++++++++++++ 11 files changed, 619 insertions(+), 22 deletions(-) create mode 100644 SBIN/TCPIPD.S.CFG.txt create mode 100644 SBIN/TCPIPD.S.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 51c691e6b93dbe18e81db6973ecb6e3ae72e3b61..346d915b15af5a6a7a6d49ca7e60f05dd8a88750 100644 GIT binary patch delta 6431 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 delta 6382 zcmb7I3s@9amaeYq#^&89j|M?+KdKQlfV}MHRw8PI77$28f`Hnyi950xqRD16Su;+P ze0Ej|MH)>~V!AUmz2c_bF1DL&!WwNyv-6p5qS;C&$xNJ`Y-T1hXarmF6<_SBYBl6F z-#7hzRdw&V_dM>o=lP;>MHi1QId4ZuCvM-<^6`Zgk2RXn#8GZ{799mAQz>+ z@za>cdF7~{PJH9+zLQE#VK%W9_eaGf*M!8j=t9fI)@b0JFfBZcacx$^N;X~y)vpbp7w32DruVF9A{sQwl z4;83%d+_!V%@sb!qk_&pZb>US+wQ`lBO39t*5;vt9_&7Ch8e<2T5D=r;n zap}2~x5-&CrM)nAqV-g zk*5mC-g#!5qhwn#yHeLvr|bP^y7w7L=k#A0PvL^x6>ipT@HTa}SZ2W8w z87Ovdp+jSzt3}vYvrRHWjVKh<+J*`=YN;CsHo*=*Lq}AeB;XZ*mdfQnO44?tkQ-HH zl2qxC4@Fg>Nu4v{m=S0Ov-116XE zUZdHYbk7aC+w&3-91FJVbI#(WsYj5 zVY$9}$Rnw?`#1kBx)*#EGTGaap@_>R28~lG^_tPHY07<&{(~*;7 zA@O3@N3sz}Y4nfyZqWyxp!eH(;(*Eo8$K2~q7*NJgs?&!^megZ=&pa0?Y`@fsB`YR z1$J%P21H$x{XOOh*J#g9SgF=#6|PGWBXxinZP|kxZ7zcJ5Ilhn8bnpMm|?bo_fp2( z1R1_pq`E6!|GZNCv)Q&gqG1WL+dNK?{R;9m1t|rmaDx`r;QC0?`#0(LZ_qvMPKVSZ*8Xc2b=A*c+zaUrnR}0ra^)P z29k_qgo~WX;R=8J5h_v;>Yt*=y2ioJs7L=y2GLnf_8vUsPWtvc$d`eTl(li!S zkm6CvB(radj+6<6DKD9&OuXVabaO*6H;FR&bEKEH6JE38{2Cai4@}W{$v}X%^JAOV z7Wb2mzkBlG%^jNyHYt}kSr^KQf&1lV(m1zb>85{r>=D$o3EjWpsg8#?pbA8#%GokH>_&ey1Z#wp*&o$tf9UtWjfi~u&Qa*aQ)-t5IKDF zAIanxk|4OGEo2@o0T{c)=v!j+#K2kiS4uHHRFu~xF6I@1qR2wt9w_44w~!_~K$DD2 zxyWadj&(G&Whf%dHVBfO=qb&Hk0cL)JSSE6j;@XU4hH2K$im6Du0T4JMG$gXPiN4w1Qa0o0oYuo9<)+K^Np1Yxpj zXxHCqPeURvxCn6P4l2q(wb5+jPXzRm6i7Ege%Z3!C z+;cxCi|wW1MkncQV4pDV4+Tp5A2*JOS8NbArQukht3%d6se7q0G`6uqyeQj*zH3vW zY?De`9Bqj{dZIP?Tnt5 zxe`m|03^~{zlt71gFrseu3$t-To+oZu>hef6Lzsxq&oeQv(5NyEx^DPmj z1fU@=0qu}iA-|`!ce8mGFTv(pgmZ^|6NlLamY(?*b{Fp1iJ@qE3A zw13sHY^X+dX2WL{l0OedKlzrOWfC>dvNIbs7D#o93A!tPVD8sbxuS!le$j5cU31kn zUEOo66QfsY=PYD04XobVBo|BmjBZ}h*CIIa&K90L;N*53Bu&UD2`046Bg}!lfFTS9&OOFp)Xm5`rqqnI`oE zE$&3_M~BEv5cw zY^&r81C@DQk*)lKKqb2qhv2=7(*(&i#V=t=S19BmpuXLWp=MEvm(U++0l41*Zre~( zq$Ir9U-)_!TaRJy8o5`4WcG{(yj}cLZv%HYNG?{S4&MrrrqX#(Es|m(pX62dSz(|1 zth~m%9NuZdTxJk4S)y{R7cuNyuI>Vv8MnjIXO)hLu!7rkft-7vj&bQ3EwAy!1+1Mq zhSfoJYwgrCtey#th+pzqf{y7RR!o6xL4UgiMXEI%12LY?9ltArN_n~wW)A;|g{VIh_2&%ja+8cf4y z({ZFWn1Q2iT(Qjxv|ug{|EE)hj0^nn11t7g0j4r^&UhGc=i<*6!H!FlfJbs3G{@9Y zUA<{s?<857ki~#Q8+gJ)^rmwsC&}3{=}gz3deeumPm=Q*xuP>v(k#zz;Prpz_+XpZ z`<%XKo1T51vz?*R6ant3GZcHOGi>&;@cHr^Ph3=@%#uv%>A4G^A{f7oFWAJ{%(7ccQp_VrcDAb0oP1XJLW(^n~( z%O^%JQSyz-+X7c4`J(0Rf=d#F8=J}uEZJM>06*8+=G~1y6uSVD)ClJ1LD2qI4&6_% zV7w@fG>+Kt8S3G#K&jLO0B&yf@lRPSZMsOeZ zR1H;VzvB+LwgIrDFyNE+NZN<3q7Gcr`a!#xDcx8vc@IOmm%?b`2iERwcdXyGt~Z4l zXqVj54tB4V-107r7cJqF1Fe1Qwrjo`YK5!@62b-;_WQ*gPqBhXW z&`S&bDpbsU-UONwxU|(2&W(z6r7<4G^YxE347Q@@>jvA<^DB|7&`${ojLq!SK9K2^n@#WD*!j)e)V-B86&VBs9zP|cphT44$UVG0YkB*HBWfpZf> z;M@SPL2V_#ka!M@B)B3a&>RJvwr#BtRGnkk(LT`Dc^W&`4%Dxh+CR{+V#@l+x<}UY z#F(hsn3Wr8v$~=ET#&{TJv6XRwLbCytVX+GU34`Y)<;)kKD92onp5jxH9|Zi z&4_1&I0k0KF|e9g=@_UP^mGYN1)5_uea)!2T#6H|>{wXi;AQ-Uu1dHfd9{t7`K@JM zj4tyMm)T6^=3K<$7ZaDTa7i-$r0WtMXqCL+Sle~NY}?mDk&VJ-+2@zBERel|g=@0U zuVLZ3RDOb zsRj@SXjljdJ5Xu8Nign2W}};6AVSUw8fGvVyzzRZT-zDJYy@|Ap2vAJ*z*{S)^=(b zR<^nmQon4rc^pWx-DTrIyN&^7y@Y2($^s9vt4n&CO1gPX-#Vy{&SK#8s$o-r6%gU< zVYiau3~iK&8N=?WDF6pBOLN<|{#)$klAcW^9z$?y$~`7Q$2SI@B|R@ngJYbdjrv*P z9dzYQ0JR^;P%C~HYL^2dEP+xc#1*wuIf@Wh-%b@j@Nx-&c?i40*foNo+*%VY##-Qm zo?YNy+Vf^9d!V#ig5q-Tl%pA*hoqAQ?&~1jH?UhR`R)R25!$cw&P300AGE{SYJ-ZE zFEj_0kndro4^)aNFfHQMNVqctU`N^43=3WeSxFh2&Al4X&lK;q%^F z>Yjb;sP;vC5h#e%)BqX}RGG(97)O<#JXSqWsqHXY2bOdY`!{MkQy8aW%yIwo%ViAs z3j3~dg>O@{fBf5We?D4NEGb7Xmiy-jGvL70vojbWhS|`-#z+TFB^@{=QwKrK_LlR6 zmq5Ta>7C*i!s)Y0jtHumXo&@#`QXE7hc5=0l8UIaT;OfWq>zDCr{RmdjZmw7Js5kC zqH}a$eMbzGV0^Ym`R%%lt360%+oPo#ph=sIM-h$nPIe55zZ-4q`Y4(z`O@#H-)xZH zrJCYyX8-H4R|d7+LMh9ON?sk!_4=8iBXQzINC#6uOp=NF4pB*+Yy%41afmMR>&2dg#eTx)PhaM+=LprTc)ou1W<; zJg+*ik8603(%I!d!y%X(`{hwy6?m|JpES?=9P7fUSMQ|Iul0QL0T=FT0Ww%G|6va2 zOu91PttNk{fUJ8#7tPXAF{**%eu>WjL{LPM!epdWNV&Z}5EuPZKkcpKRPKF>DsEn! zlAgIo*KIzn*}q-N2JTdUhfJY5aEIe`W#1FgU6CQr@{{g8m14sY> diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 5e73b19b54527b454f7a8b8cc7d2d09e9329c9da..4dcf0fb4103345fd8c9106aa938577d3db62fb62 100644 GIT binary patch delta 23741 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 diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index 44191d1e..dcae8b2a 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -62,7 +62,7 @@ Dev.Detect >STYA ARGS cmp #DEVID beq .3 -.2 dec DEV.HEADER.NAME+4 +.2 dec DEV.HEADER.NAME+3 txa sec sbc #$10 @@ -127,7 +127,7 @@ Dev.Detect >STYA ARGS *-------------------------------------- CS.END MSG.DETECT >CSTR "UtherNet/CS8900A Driver.\r\n" -MSG.DETECT.OK >CSTR "UtherNet/CS8900A Installed As Device : %S\r\n" +MSG.DETECT.OK >CSTR "UtherNet/CS8900A Installed As Device : %s\r\n" MSG.DETECT.KO >CSTR "Hardware Not Found.\r\n" ARGS .BS 2 *-------------------------------------- @@ -137,7 +137,7 @@ DEV.HEADER cld jmp (DRV.CS.START,x) .DA #0 .BS 6 -DEV.HEADER.NAME >PSTR "ETH7" NAME +DEV.HEADER.NAME >CSTR "ETH7" NAME *-------------------------------------- * Driver Code *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index 713c58c0..19021041 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -37,7 +37,7 @@ SET.IPCFG >PULLW ZPTmpPtr1 lda IPCFG+S.IPCFG.HDEV - >SYSCALL GetDevByIDA + >SYSCALL GetDevByID.A >STYA NetDevJmp+1 ldx #DEVMGR.STATUS diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 4e442a4d..2100d19f 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -156,7 +156,7 @@ DNS.ADD.I sta DNS.TmpCache jsr DNS.FIND.FREE >LDYA ZPPtrDNS - >SYSCALL NewPStrYA + >SYSCALL NewStr.YA bcs .9 txa ldy #S.DNSCACHE.hNAME diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index ddd2351f..7e95f4a8 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -309,13 +309,7 @@ SKT.AcceptA jsr SKT.GetA.I * ## Out : * A = hFile *\-------------------------------------- -SKT.MkNodA sta NODE.SSOCK+S.NODE.SSOCK.HSKT - - >SYSCALL MkNod.A - - - -K.MkNod.A sta .1+1 +SKT.MkNodA sta .1+1 >LDYAI S.NODE.SSOCK >SYSCALL GetMem0.YA bcs .9 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index cb40db4b..771fb071 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -10,7 +10,8 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I - .INB /A2OSX.BUILD/INC/MLI.ERR.I +* .INB /A2OSX.BUILD/INC/MLI.ERR.I +MLI.ERR.IO .EQ $27 .INB /A2OSX.BUILD/INC/NET.I .INB /A2OSX.BUILD/INC/LIBTCPIP.I *-------------------------------------- @@ -295,8 +296,8 @@ NODE.SSOCK .BS 1 S.NODE.HANDLER .BS 1 S.NODE.SSOCK.HSKT .DA #0 S.NODE.SSOCK.OPEN .DA #0 S.NODE.SSOCK.CLOSE - .DA LIBTCPIP.SKT.GetChar.A - .DA LIBTCPIP.SKT.PutChar + .DA #0 + .DA #0 .DA #0 S.NODE.SSOCK.STATUS *-------------------------------------- MAN diff --git a/README.md b/README.md index 6b32a4a4..6d2a098b 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | SHELL | Working | (See Internal Shell commands) | 0.9.1 | | KCONFIG | Working | Kernel Configuration Utility | 0.9.1 | | ---- | ------ | ------- | ----- | -| TCPIP | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 | +| TCPIPD | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 | | DHCPCLNT| Working | rewritten to use new Socket API | 0.9 | | TELNETD | In Progress | | 0.9 | | HTTPD | In Progress | | 0.9 | diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 7e70390c..992f8b9a 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -26,9 +26,10 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START - .DA DS.END-DS.START Data Segment to Allocate - .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #6 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -51,7 +52,7 @@ L.DHCP.REQ .DA DHCP.REQ .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP - >SYSCALL LoadLibYA + >SYSCALL LoadLib.YA sta hLIBTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG @@ -245,7 +246,7 @@ CS.QUIT ldy #hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CloseA .1 lda hLIBTCPIP - >SYSCALL UnloadLibA + >SYSCALL UnloadLib.A clc rts *-------------------------------------- @@ -439,7 +440,7 @@ Wait.TimeOut ldy #TimeOut rts *-------------------------------------- CS.END -LIBTCPIP >PSTR "libtcpip.o" +LIBTCPIP >CSTR "libtcpip.o" MSG.CFG1 >CSTR "DHCPCLNT:Searching for DHCP servers...\r\n" MSG.CFG2 >CSTR "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n" MSG.CFG.KO >CSTR "DHCPCLNT:Time Out [%h].\r\n" diff --git a/SBIN/TCPIPD.S.CFG.txt b/SBIN/TCPIPD.S.CFG.txt new file mode 100644 index 00000000..17beb41a --- /dev/null +++ b/SBIN/TCPIPD.S.CFG.txt @@ -0,0 +1,373 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +CFG.Read >PUSHW L.HOSTNAME + >LDYA L.MSG.CFG + >SYSCALL PrintF.YA + + jsr CFG.Read.HOSTNAME + bcc .1 + >PUSHA + >LDYA L.MSG.CFG.KO + bra .2 +.1 >LDYA L.MSG.CFG.OK +.2 >SYSCALL PrintF.YA + + >PUSHW L.TCPIP.CONF + >LDYA L.MSG.CFG + >SYSCALL PrintF.YA + + jsr CFG.Read.TCPIP.CONF + bcc .3 + >PUSHA + >LDYA L.MSG.CFG.KO + bra .4 +.3 >LDYA L.MSG.CFG.OK +.4 >SYSCALL PrintF.YA + + >PUSHW L.HOSTS + >LDYA L.MSG.CFG + >SYSCALL PrintF.YA + + jsr CFG.Read.HOSTS + bcc .5 + >PUSHA + >LDYA L.MSG.CFG.KO + bra .6 +.5 >SYSCALL PrintF.YA +.6 >LDYA L.MSG.CFG.OK + >SYSCALL PrintF.YA + rts +*-------------------------------------- +CFG.Read.HOSTNAME + stz CFG.hCfgFile + stz CFG.hCfgPath + + >LDYA L.HOSTNAME + >SYSCALL ExpandStr.YA + bcs .99 + + stx CFG.hCfgPath + pha + + >PUSHWI 0 Aux type + >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI SYS.FOpen.R + pla + >PUSHYA + >SYSCALL LoadFile + bcs .9 + stx CFG.hCfgFile + >STYA CFG.FileLen + + txa + >SYSCALL GetMemPtr.A + >STYA ZPIPCfgPtr + +* read 15 chars MAX, until CR or EOF + + ldx #$15 + lda CFG.FileLen+1 + bne .1 File is more than 256....? + + ldx CFG.FileLen + beq .9 len is 0 !!! + +.1 ldy #0 + +.2 lda (ZPIPCfgPtr),y + cmp #13 + beq .8 A CR, end of name + + iny + sta IPCFG+S.IPCFG.HOSTNAME,y + dex + bne .2 + +.8 sty IPCFG+S.IPCFG.HOSTNAME + + jsr CFG.Read.CleanUp + clc + rts + +.9 jsr CFG.Read.CleanUp + sec +.99 rts +*-------------------------------------- +CFG.Read.TCPIP.CONF + stz CFG.hCfgFile + stz CFG.hCfgPath + + >LDYA L.TCPIP.CONF + >SYSCALL ExpandStr.YA + bcs .99 + + stx CFG.hCfgPath + pha + + >PUSHWI 0 Aux type + >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI SYS.FOpen.R + pla + >PUSHYA + >SYSCALL LoadFile + bcs .9 + stx CFG.hCfgFile + >STYA CFG.FileLen + txa + >SYSCALL GetMemPtr.A + >STYA ZPIPCfgPtr + +.1 jsr CFG.GetLine + bcs .8 + + jsr CFG.GetKeyword + bcs .1 + + lda CFG.Keyword + bne .3 + + ldy UsrBuf256 + + lda UsrBuf256+1,y + cmp #35 DOMAIN too long!!! + bcs .1 + + sta IPCFG+S.IPCFG.DOMAIN + ldx #0 + +.2 lda UsrBuf256+2,y + sta IPCFG+S.IPCFG.DOMAIN,x + beq .1 + inx + iny + bne .2 + bra .1 + +.9 jsr CFG.Read.CleanUp + sec +.99 rts + +.3 jsr CFG.ScanIP + bcs .1 + + ldy CFG.Keyword + lda CFG.Keyword.Map,y + tax + ldy #0 + +.4 lda CFG.IP+1,y + sta IPCFG,x + inx + iny + cpy #4 + bne .4 + lda CFG.Keyword + cmp #1 + bne .1 + lda #S.IPCFG.STATUS.OK + sta IPCFG + bra .1 + +.8 jsr CFG.Read.CleanUp + clc + rts +*-------------------------------------- +CFG.Read.HOSTS >PUSHWI 0 Aux type + >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI SYS.FOpen.R + >PUSHW L.HOSTS + >SYSCALL LoadFile + bcs .99 + stx CFG.hCfgFile + >STYA CFG.FileLen + + txa + >SYSCALL GetMemPtr.A + >STYA ZPIPCfgPtr + +.89 lda CFG.hCfgFile + >SYSCALL FreeMem.A + clc +.99 rts +*-------------------------------------- +CFG.Read.CleanUp + pha + lda CFG.hCfgPath + beq .1 + >SYSCALL FreeMem.A + +.1 lda CFG.hCfgFile + beq .8 + >SYSCALL FreeMem.A + +.8 pla + rts +*-------------------------------------- +CFG.GetLine stz UsrBuf256 + ldx #0 + ldy #0 + +.1 jsr CFG.GetChar + bne .2 end of file? + txa + bne .8 + sec + rts + +.2 cmp #$0D + beq .8 end of line + inx + sta UsrBuf256,x + cmp #'=' + bne .3 + txa + dec + tay +.3 cpx #64 line too long ? + bne .1 + sec + rts + +.8 tya = found ? + beq .9 + + sta UsrBuf256 + txa + sec + sbc UsrBuf256 + sta UsrBuf256+1,y + stz UsrBuf256+1,x End with 0 for ScanIP + clc + rts + +.9 sec + rts +*-------------------------------------- +CFG.GetChar lda CFG.FileLen + bne .1 + lda CFG.FileLen+1 + beq .9 + dec CFG.FileLen+1 +.1 dec CFG.FileLen + lda (ZPIPCfgPtr) + inc ZPIPCfgPtr + bne .9 + inc ZPIPCfgPtr+1 NZ +.9 rts +*-------------------------------------- +CFG.GetKeyword stz CFG.Keyword + + ldx #0 + +.1 phx + ldy #0 + +.2 lda CFG.Keywords,x + cmp UsrBuf256,y + bne .3 + cpy UsrBuf256 + beq .4 + inx + iny + bne .2 + plx + sec + rts + +.3 inc CFG.Keyword + plx + txa + sec + adc CFG.Keywords,x + tax + lda CFG.Keywords,x + bne .1 + sec + rts + +.4 plx + clc + rts +*-------------------------------------- +CFG.ScanIP stz CFG.IP + + ldx UsrBuf256 + +.1 ldy #0 +.11 lda UsrBuf256+2,x + beq .3 + cmp #'0' + bcc .2 + cmp #'9'+1 + bcs .2 + cpy #3 + beq .9 + iny + sta CFG.StrBuf,y + inx + bra .11 + +.2 cmp #'.' + bne .9 + +.3 sty CFG.StrBuf + lda CFG.IP + cmp #4 + beq .9 + jsr CFG.Dec2Hex + bcs .9 + lda CFG.HexByte + inc CFG.IP + ldy CFG.IP + sta CFG.IP,y + inx + lda UsrBuf256+1,x + bne .1 + clc + rts + +.9 sec + rts +*-------------------------------------- +CFG.Dec2Hex sec + ldy CFG.StrBuf + beq .9 + + lda CFG.StrBuf+1 + and #$0f + sta CFG.HexByte + + ldy #1 + +.1 cpy CFG.StrBuf + beq .8 + iny + lda CFG.HexByte + asl CFG.HexByte + bcs .9 + asl CFG.HexByte + bcs .9 + adc CFG.HexByte + bcs .9 + asl + bcs .9 + sta CFG.HexByte + lda CFG.StrBuf,y + and #$0f + adc CFG.HexByte + sta CFG.HexByte + bcc .1 +.9 rts + +.8 clc + rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SBIN/TCPIPD.S.CFG +LOAD /A2OSX.SRC/SBIN/TCPIPD.S +ASM diff --git a/SBIN/TCPIPD.S.txt b/SBIN/TCPIPD.S.txt new file mode 100644 index 00000000..da9b4978 --- /dev/null +++ b/SBIN/TCPIPD.S.txt @@ -0,0 +1,228 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF /A2OSX.BUILD/SBIN/TCPIPD +*-------------------------------------- + .INB /A2OSX.BUILD/INC/MACROS.I + .INB /A2OSX.BUILD/INC/A2OSX.I + .INB /A2OSX.BUILD/INC/LIBTCPIP.I +*-------------------------------------- +ZPIPCfgPtr .EQ ZPBIN +ZPIPDevPtr .EQ ZPBIN+2 +*-------------------------------------- +* 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 CS + .DA DS.END-DS.START DS + .DA #16 SS + .DA #4 ZP + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.LIBTCPIP .DA LIBTCPIP +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.HOSTNAME .DA HOSTNAME +L.TCPIP.CONF .DA TCPIP.CONF +L.HOSTS .DA HOSTS +L.IPCFG .DA IPCFG + .DA 0 +*-------------------------------------- +CS.INIT >LDYA L.LIBTCPIP + >SYSCALL LoadLib.YA + bcs .99 + sta hLIBTCPIP + + jsr CS.INIT.DEV + bcs .99 + + jsr CFG.Read continue even if error opening CFG file + + lda IPCFG+S.IPCFG.HOSTNAME + bne .4 + + ldy DefaultHostName + +.2 lda DefaultHostName,y + sta IPCFG+S.IPCFG.HOSTNAME,y + dey + bpl .2 + +.3 lda A2osX.TIMER16 + jsr A2CharAX + sta IPCFG+S.IPCFG.HOSTNAME+7 + stx IPCFG+S.IPCFG.HOSTNAME+8 + + lda A2osX.TIMER16+1 + jsr A2CharAX + sta IPCFG+S.IPCFG.HOSTNAME+9 + stx IPCFG+S.IPCFG.HOSTNAME+10 + +.4 >PUSHW L.IPCFG + >LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG + + lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + + clc +.99 rts +*-------------------------------------- +CS.INIT.DEV >LDYA L.DEVNAME + >SYSCALL GetDevByName.YA + bcc .1 + inc DEVNAME+3 + lda DEVNAME+3 + cmp #'8' + bne CS.INIT.DEV + + >LDYA L.MSG.DEV.KO + >SYSCALL PrintF.YA + lda #$28 MLI.ERR.NODEV + sec + rts + +.1 >STYA ZPIPDevPtr + >STYA NetDevJmp+1 + stx hNetDev + stx IPCFG+S.IPCFG.HDEV + + >PUSHW L.DEVNAME + >LDYA L.MSG.DEV.OK + >SYSCALL PrintF.YA + + ldx #DEVMGR.OPEN + jsr NetDevJmp + bcs .9 + + ldx #DEVMGR.STATUS + jsr NetDevJmp + bcs .9 + >STYA ZPIPDevPtr + + ldy #S.DEVSTAT+2 MAC + ldx #S.IPCFG.MAC + +.2 lda (ZPIPDevPtr),y + sta IPCFG,x + iny + inx + cpx #S.IPCFG.MAC+6 + bne .2 + + clc + rts + +.9 sec + rts +*-------------------------------------- +CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.POLL + clc + rts +*-------------------------------------- +CS.DOEVENT lda (pEvent) + bpl .9 + + >LIBCALL hLIBTCPIP,LIBTCPIP.PULSEA + +.9 sec never discard TIME event + rts +*-------------------------------------- +CS.QUIT lda IPCFG+S.IPCFG.HDEV + beq .1 + ldx #DEVMGR.CLOSE + jsr NetDevJmp + +.1 lda hLIBTCPIP + >SYSCALL UnloadLib.A + clc + rts +*-------------------------------------- +A2CharAX pha + lsr + lsr + lsr + lsr + and #$0F + 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 +*-------------------------------------- +NetDevJmp jmp * +*-------------------------------------- + .INB /A2OSX.SRC/SBIN/TCPIPD.S.CFG +*-------------------------------------- +CS.END +*-------------------------------------- +LIBTCPIP >CSTR "libtcpip.o" +DEVNAME >CSTR "ETH1" +MSG.DEV.KO >CSTR "TCPIPD:No Device Found, exiting.\r\n" +MSG.DEV.OK >CSTR "TCPIPD:Bound To Device : %s\r\n" +MSG.CFG >CSTR "TCPIPD:Reading %S..." +MSG.CFG.KO >CSTR "Failed!!! [%h]\r\n" +MSG.CFG.OK >CSTR "OK.\r\n" +*-------------------------------------- +HOSTNAME >CSTR "${A2OSX}ETC/HOSTNAME" +TCPIP.CONF >CSTR "${A2OSX}ETC/TCPIP.CONF" +HOSTS >CSTR "${A2OSX}ETC/HOSTS" +DefaultHostName >PSTR "a2osx-XXXX" +CFG.Keywords >PSTR "DOMAIN" + >PSTR "IP" + >PSTR "MASK" + >PSTR "GW" + >PSTR "DNS1" + >PSTR "DNS2" +CFG.Keyword.Map .DA #0 End Of Keyword table and NA Keyword + .DA #S.IPCFG.IP + .DA #S.IPCFG.MASK + .DA #S.IPCFG.GW + .DA #S.IPCFG.DNS1 + .DA #S.IPCFG.DNS2 +hLIBTCPIP .BS 1 +hNetDev .BS 1 +IPCFG .BS S.IPCFG +CFG.hCfgFile .BS 1 +CFG.hCfgPath .BS 1 +CFG.FileLen .BS 2 +CFG.Keyword .BS 1 +CFG.StrBuf .BS 4 +CFG.HexByte .BS 1 +CFG.IP .BS 5 +UsrBuf256 .BS 256 +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +DS.END .ED +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SBIN/TCPIPD.S +ASM