From 45cd7d04fa6b5597c7087cbd29aae9a3ac5d01ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 8 Aug 2018 17:13:37 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Docs/KERNEL.md | 55 ++-- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.S.QC.txt | 6 +- A2osX.S.txt | 6 +- A2osX.STARTUP.txt | 6 +- BIN/DNSINFO.S.txt | 7 +- BIN/IPCONFIG.S.txt | 49 ++-- BIN/LSDEV.S.txt | 9 +- BIN/NFSMOUNT.S.txt | 6 +- BIN/X.CPMVRM.S.txt | 2 - DRV/PIC.DRV.S.txt | 6 +- DRV/UTHERNET.DRV.S.txt | 43 +-- ETC/HOSTNAME | 1 + ETC/HOSTS | 2 +- FNT2FON.S.txt | 5 +- INC/A2osX.I.txt | 16 +- INC/APPLESOFT.I.txt | 8 +- INC/APPLETALK.I.txt | 8 +- INC/COM.6551.I.txt | 2 +- INC/GFX.EVE.I.txt | 8 +- INC/GFX.I.txt | 10 +- INC/GUI.I.txt | 2 +- INC/IO.I.txt | 2 +- INC/KERNEL.I.txt | 10 +- INC/LIBBLKDEV.I.txt | 6 +- INC/LIBCRYPT.I.txt | 6 +- INC/LIBTCPIP.I.txt | 2 +- INC/MACROS.I.txt | 4 +- INC/MONITOR.I.txt | 6 +- INC/NET.DHCP.I.txt | 6 +- INC/NET.TELNET.I.txt | 6 +- INC/NIC.8900A.I.txt | 6 +- INC/NIC.91C96.I.txt | 6 +- INC/NIC.W5100.I.txt | 6 +- INC/PRODOS.I.txt | 8 +- INC/XY.MOUSE.I.txt | 8 +- INC/ZP.I.txt | 8 +- LIB/LIBTCPIP.S.ARP.txt | 24 +- LIB/LIBTCPIP.S.CFG.txt | 605 +++++++++++++++++++-------------------- LIB/LIBTCPIP.S.DNS.txt | 19 +- LIB/LIBTCPIP.S.FRM.txt | 29 +- LIB/LIBTCPIP.S.ICMP.txt | 7 +- LIB/LIBTCPIP.S.IP.txt | 2 +- LIB/LIBTCPIP.S.txt | 83 +++--- SBIN/DHCPCLNT.S.txt | 2 +- SBIN/KCONFIG.S.txt | 6 +- SBIN/NFSD.S.txt | 5 +- SBIN/SHELL.C.CSH.txt | 6 +- SBIN/SHELL.G.CSH.txt | 6 +- SBIN/SHELL.S.txt | 2 +- SBIN/TCPIPD.S.txt | 6 +- SYS/KERNEL.S.CORE.txt | 7 +- SYS/KERNEL.S.DEV.txt | 37 +-- SYS/KERNEL.S.FIO.txt | 65 ++--- SYS/KERNEL.S.IO.txt | 92 +++--- SYS/KERNEL.S.IRQ.txt | 6 +- SYS/KERNEL.S.JMP.txt | 2 +- SYS/KERNEL.S.STAT.txt | 57 +++- SYS/KERNEL.S.STDIO.txt | 181 +++++++----- SYS/KM.APPLETALK.S.txt | 6 +- SYS/KM.NSC.S.txt | 6 +- SYS/KM.RAMWORKS.S.txt | 6 +- X.ERRORS.S.txt | 6 +- _MAKEBOOT.txt | 4 +- _MAKEDEV.txt | 4 +- _RUN.txt | 6 +- 67 files changed, 829 insertions(+), 805 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 9a581091..691001db 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -39,19 +39,20 @@ A = DevID **Out:** CC = OK, CS = ERROR Y,A = FD +X = hFD # GetDevByName **In:** Y,A = Ptr to device name (C-String) **Out:** - CC = OK, CS = ERROR - X = DEVID - Y,A = FD +CC = OK, CS = ERROR +Y,A = FD +X = DevID # GetDevStatus ## C -`int getdevstatus ( int devid, S.DIB * dstat );` +`int getdevstatus ( short int hFD, S.DIB * dstat );` ## ASM **In:** @@ -221,13 +222,13 @@ note : if file is created on ProDOS : T=TXT,X=$0000 # IOCTL ## C -`int ioctl(int devid, int request, void * param );` +`int ioctl(short int hFD, int request, void * param );` ## ASM **In:** `PUSHWI param` `PUSHBI request` -`lda devid` +`lda hFD` `>SYSCALL IOCTL` **Out:** Y,A = ... @@ -504,7 +505,7 @@ return a hFILE to a new FIFO Print A (char) to hFILE ## C -`int fputc ( int character, hFILE stream );` +`int fputc ( hFILE stream , int character );` ## ASM **In:** @@ -667,7 +668,10 @@ Read formatted data from string ## ASM **In:** -`>PUSHBI Argument Byte count` +`>PUSHW ptr` +`...` +`>PUSHBI bytecount` +`>PUSHWI format` + %i : short int + %d : byte + %I : int @@ -678,13 +682,10 @@ Read formatted data from string + %H : HEX word + %s : string -`>PUSHW ptr` -`...` -`>PUSHBI bytecount` -`>PUSHWI format` +TODO : %10s `>LDYA s` **Out:** -Y,A = Number of arguments filled. +A = Number of arguments filled. # FOpen Open a file @@ -750,8 +751,7 @@ Write bytes to file `>PUSHW ptr` `lda hFILE` `>SYSCALL fwrite` - -# Out: +**Out:** Y,A = Bytes Written # FFlush @@ -767,13 +767,14 @@ int fflush(hFILE stream); Set the file-position indicator for hFILE ## C -`int fseek(hFILE stream, long offset, int whence);` +`int fseek(hFILE stream, long offset, short int whence);` ## ASM **In:** - PUSHW = Ptr to Offset (DWORD) - PUSHB = From - PUSHB = hFILE +`>PUSHBI whence` +`>PUSHL offset` +`lda stream` +`>SYSCALL fseek` # FEOF Test the end-of-file indicator for hFILE @@ -793,18 +794,24 @@ Return the current value of the file-position indicator ## ASM **In:** - PUSHW = Ptr to Offset (DWORD) - PUSHB = hFILE +`lda stream` +`>SYSCALL ftell` **Out:** - Offset = Offset +On stack (long) # Remove # Rename Rename a file + +## C +`int rename(const char *oldpath, const char *newpath);` + +## ASM **In:** - PUSHW = New Name - PUSHW = Old Name +`>PUSHW newpath` +`>LDYA oldpath` +`>SYSCALL rename` **Out:** # strtof diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d0d697ec704f470eb48c95e0711a0f52088b778c..c9c91d8f93284e59d04fca7d5d6c685eb4541a4c 100644 GIT binary patch delta 17108 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 x5CI((peeQ<|G&D35(NMN delta 16065 zcmbt*30xFM)_5N?Fx&&fF%rZAMifLqV-$}e(~3AKBHoDCXv9D^<}%49ZW1P0#u#>* zfP8DqE||`IVr)Z`0TYQyAZ%jdfQj2Gmx#voKtRPYYGT|?_+EA6k$k(~@Av=xMY^i1 zUcIV%_3B;yuv#ZttrMMpQ_(*erj{R48B{+Sd_&5wsA5!i4F1}3of=ny1Ink#m4|)G z*Foi<27N&JHubYm(FN@PS#9*tmJ+}Iw|}m0+)mX`2Ex1i_q%rj)@a>+U3Cko{Ypi= z8a-7TL!2iNo@@V=JxjjSx^3FQm ze-YLh7F3>HgBLtCp!`Zrj8f5wc=xdBX=1AOga-^9qYV7XfI`Z*i63i^n4vLVUJ#P0 zl3lwk*g~j?{c7k4QlJkSg2VP-shy@Sw2?&wPY8iFx`^WAgr87T6z?lcvKfnJ@b3#o z+oMIP(CurRRWvgN1%4^FDMK3NAw$B?FogALPWU7K&-Vyf!zd-Wf1%)p{)9g@!+#k3 z=&w4D3VPhj7Yl2K+t12_nuJ^X8$TpTl}%lw+W*Bz>%6JPBjqG@WycXRh|?Y+PjCNX z&BR-R&emDf!Cw_<+v%bnf%v*-dk^0##5+O}(dZ23y~{e-A)O1JL@<7m`%AxwAs=Ve zdb>)`(t10khrJ<|)Y}PtrH7tXH^Y1Lf9_W`Tlj8atRn~TYhJ4PWk?(vVm~-%uRX`> zgmdiBko}h-{$-(w6={1-dHA7G$?WWN_Ox@Xy~+NkCO$}rlZWap=%m4kgbp@V!+!|_ z?*o+=99kVPpkuG-1RwUYj=ico+F#y&D39zfpZ?WIt=!V0c2kZSB?G#WEBo`mdN*h! zB?MH@{D(ol(rfbFx4jy`qzX#8^#6GZ3~G(?=(mtm>mzb&_`Q zN|QtnUTvzqtSh;y^Rn)9tGBleUe}4&b#6*;NwMI{2Jwc@y%sh&yuAhYx3_nNH1jRW zoeG=6YXoT4t%H?D)OUDkVXyDvjl#a6?$p5AF*^UFZk^j}co){=NZIi26pP-%wgzEh z%#n$4>cW_u8@kh@{M_nR>9+NkU8DSfxVwgYGgn-wBcz`!dnFGZxE=V0&^a{+f$+a% z241w(z-l!oVVLJO>9%khx1o&1@r45`uzgQ3zgvd;t~at!9RkeaJ8iCpr|NvY@xQT8upS`} znpf9psysuswQ7IlRdv4XP_PT0Lc;xsH00uw{P17Vzf=p3$*}Mv2qiG?zA-;`we>R3}3|R-iuhbr@vFuer?H{pYC0!o{`EMwMedCp*hSOr)B$y*`s3?r$9a!<$?A%{ZFVI)(8 zFhC-Z?71fNVko#nO)i}l>hTmB>72scwb^+K&bU{cWw)Es!>9y)!)ln zlO0yOFbsKxp_0%ock~vA$LTl1fHSnW^_F7qeXpd3W`<^k{x0;z&^JR%LU)DgEw$Ou ze>6MH8d$S1teKR6pM?c%cG%H{umQkzHq5!QohHtkO=)ogM2HSQ0sqDVL=2Z<8G z`WhF7*`gbt2(!iTV?dB1iey#I{Fvb(XTzj!fD(AQvkXBWMs>py-(o8DXj$u|;vUU4 z1H{g`d-I*%fIx=XVktvgEEqLve4_lB{$)|D7-p{tg9FyMJzHpLq(h$oOheUa*bl;7 z@N|}6>K`@bxLiLGRx&iCx7ebJ5Y}hro%#ZuEj7P@uszD}5d!Y&v|{%N^lpGHrYO4H zI8dRpjVp?`q?GD4q7Z=FM;95&`v*p= z|IlTU+V44-0D21}n{sV^FrGu63+vN^Fem8K{o=L7l;_qRdk%cv(Odt$$wT{k5~${h zSZ5ceVFRW-`*w`#iXm3J|M$0FB(?861l?X(bFa&}ZHV;W|MO2)joNP^5ns_zOp#B~ z;S-1vFAcoR{~z#MxPCY~t*NuN#slHUxQ)Z-$XY++RkLo1oA{k|ReJ{r>6a zHV|kh2?Np+fw2>_nEA8c#6wbw8fHe4O+K0>8S`gjBn_VNWC2ykjv(xMqGWS0Xh;&J zop-8>x9f!=3;T932uao!Y%dCS5RF4az%MH<^jU8SLm<6ymprg0jIdXQ)ah}qF^!BjpX&V8R$pP3CZw>&eL(j~v@l`o1M|)`^x? zQn16Lj&SQ-r}K}=0?E3)@#$kI;zVh&<&~6UZybB^*k6vlf9&gH&mDjM_}=4H$9EnR zjvYF-|M;iJj~+k9J@gnkI{1xa`K4+LUWY^DZ5EOX2o%9Bd5qlUA8|r_mvDOs-YHk# zCHCz=)QAHc$lgiX&}?FHVn+6?^f`%UU{$u^)=tvfXU}djf_(izGdbk7qm>LKYr#Am zJaB|uNNF$o6H{Z7z2Lfp%d}Fez#}t)D??OR(52(Tkfh#uoN|Y{ z>L_<0ApHbUBgqJ^3sK31pI(yBETx~y7_w0qNk0KK8rSZgjC^jd%i0wqah4%*LfRhft&q5&0WhMeRCk;3(*owwe6yBYq zGPtdta8Fgxwv2ZB9;c*{fPSEtw)R3#pwi>eo{n#G`?P{oM?P&rW{L&r+MGA7Usm^| zJlA9Eu?R!Qd)zz6ETM{%9bH4c|RV=H*6_yK5=GJ<`d7T0tBF;pVCo-@W!5$OQ9 zu{}S2<7%E}P z!ZXO!>G)O#x1a@Q@Rpzj7yIzz?unhHolCH~|D|2k5zsM$^E6PAL2*3cp!El9=x2$F z8rsz=-Q-dXR8*mY^zQ>sNc1)>FgxDJujalxtz#Go z81n*AMr;F2@YLQOJ_pC&h8KS4H2S$iK8~J_dJlX$r#rY~1}d}=2yYi@#~1R%@~zq{ z!)ZJ10i8T?5LAT5RZ&1Uo1`1|0-7%nXvG_`07I)BdX#bA>7yVi=3#QIBks}~C~XnO z09W2;ijNiEIM_MN2CJOuwIVHep8e9T5!7c%Hzk0BiyAr|>d!vuJh+ek?DI}|Yn85p zKZe^~Vm<9Gm;32>TnYp(^p=XDA&W}wq4ApZ$mGN%c}mVBmNFE+amLB8nl8I%S4mVC zPt^IgsH6$S4qvb|onv{e!eXPa?}~R+rUFt9!P7(Z>?%{aL=8NP!9;_7KtBmymvcj|I6C$DNL) zMihS3b)RD~*UD`BMb`tQbbDrgc2Xc<4ItB{A1dFcVKM%)=SpMo;rL2Ez)~v30^;RR zSLIh-l`VL;R9t{NaImE-rNFf5P#5%+(t}@hfo-MTTY3)ZPC5TxPjN4dp+c9cdN79; zBUKOj^i(|s;+}{PXH)2WEJ)|FQyw_`;lpF6(oTKN2ejy<*%`EbI$cvwi~DIdiMA)w z=+CE)wsdi40d=A36tDs;n8MV{EcvoaS-5#;fyzeNRM^I&ZE6g_en8u6X-BJ|!gpgN zSdN4g!ACpjI;!e$7xpt?FH+cGYnL?$d7lD$ctRgB+$XklWen{TTj9C4PoiD!9?{js zejU+umnQX;J1)-M;&%JCoOS!u194IgjHSFO@*pUrTL;Ebm#9eF#i9$vJWO^X(4%do#|FZ6y6eLbXw(~{j8a5?TU0_Q>mCHz`HtI1< zW~-t8oV1?T)O9#602Jd5|qrvts#{2~TR#`WyO0xRlH}3t()bSu((^q#Fys@|X z6p$IO?(Hd5ej#oL(0%mz#f=(*1&2?zv*z7BG`|9-6eg2*~KDLw5wj_ zo`nf1sZs1HYjn$5NdpxWcgh-y4xPdbq=IeGTt9VQZIP zOP5;@c-^{cl{}HEbYHL9x<@`%@gDbszu?(;xC_J@R&(B`97Dz6O`F9pm4DYMNtM`jDu0{Qmk+xP zz|j&FOa`~-N0^OEokm3$V)x@g{eaSYsz2UN@MQHtkde3-H4qT_I@}1lx?gSUvDvCm z+qOEi&;s!dIL~35;I5>{$k6s4r*9s$oe+pTnkO+LfC3W?^t97Im!}U_$x*d!+T}mw zKiH?*T~)oy0?a=SJ<;ooMd_z)Rk8|qhv9}GvqObaPCI=eo{_JvvQ=3x=q*@$rJq)y zV$hmiXJjr4<0en1Vm$zKBue4dPp8I?z~am?1U8APCCMGedx5nB3ILYH{r7arq?b-x zgSSbM#qNiYbh@>X@NY?yZbOy(=X7e8uPi&Qf}adOcLo)$W>e4Djoh;{sF9}4XYR^B z64Z1cys*!nu|IPrKVRH@CUa;A+?j8CbP}kVDl^T1%c|z4xYi$hihj*xox0%i$FUFn8Cuvd}ojTuC`a#g51fn zs+e=0js4C(`n&GhUT%SriWoiEtFs8dSpFz)g>VqCREvk@ zGAX?ZgK-g=R6#IaqT>yaa(t=qIc|n)vLlsRrIPQiC6yX4*BZ)FDb_0tH-ct-uB_X| zZ!YWJeYW}^@?Cz!OkGw+7&54hO06V=ic!XXltIm-8Y(iWSE&$uHF!^JfP+qO1n^}- z8*XSAw}46|)$CB4{TJ@3Z0aFpfowJv9m3|c+n2YaSKFNlsJ`7fhRtucKh7P>rjo+h zuR839I`~?ly;Q~T6WY;Rr=6i}XOF#u^IJ%Tk5~HH3+?vv?X@0yw;80EUOAt7LK`RB zT`~ATFSXlyxg`s!d1`iBr~OTC_d;r_vV?yuq*9dH$VJpBrDj@0rRJW~={K$J+$)~f zZCcamWSZ~v4>_mToYO%ATH7g})7glWt8aF)Y$vqX$gA5r*^*B5A@13WN3t@g83wcG zb@`y!hp?rHPotr05%m-h>81uTia*7aTZA)!Y?V7JC?y4y6(Z7 zI`==tn>q*!mfpAnl`7=d&6^Y*4~BM;s`yS7;fGqfc}l#=eZGWR?|oBO)&cPi%mL$; zQsF9@Ni&vG3sv|ixLr%B_2GP2nM!}phPrES$dKXBQKNM?bzt*qEv$~P2N8Uz!=v#m zw+K4qF9Y=;5CFRa#Ef`N2L=gVyKf`mhpQ$zNay2F*O{u`WbliS!xl22a;=PD&FqTe z<3N*|PM4-iTIjvSht!!`NVk6r<(?>h&p5Ca)LZyb7^vzQ1=~Y1wz;ONCkk=H&6*q} zu0W_W+IsXp^5G$Wl;`A?A;Sx>qOPdS>CtE)+8I=zqn!ZGQclIIjH_8I{Q#jfy77-p zRhkKwTC)s^%Q0f77X0f%rV`dn!eHT}6bqZ5YJa>im5&Fx{zR(1AT{%u@il9ZxE9$~ z6y*T8o2k!n2ZA2)0({4EBoDkjy`?$_j38SMxGgJ=x)}*`{0l_}NLVRcdi7geNusRZF%0*2&66Xx} z%aUICiX!;RFt$`jB(@;Fu6Y89ze6%zQo-^mNEHhdEctRF5QV>j=O9%3Tx!+U)GC9i zYLclc+f-!%qF)C3m!?)tGgWOgRlNia*K5p3%uuF>PjBe7LEN1x#ej-97-g)0>W|`; zCKNb^-IrSOeyVs?uGgfNh^gX2W&Uirs4)lJ$CEG`@NlLaDqQntT+N&{hVxkoHnF89 z3yBL5+Be!c+7TiyG)n5)Y@>Sw7-hNOb$h~upmA>q1XR$q(Qs+5jfNx4Mlcy3lz=>9 zol8(|tn&wPkx`1SS#3PH#@G_$yu^N(>L3oTHCBC?>hA7yNjI%+@>oujxAWISj# z?&AxIgDZ?xMX7zRW|edkFtm_Ttzcz~QmyaF)730O;$nFw_5JB9vy7DsjE)cSF-$30 zU<4alwkDLPO0JXmneW(uVRR)~Ms}gmo^32vEWVXRx!^x6FuDsByHm_E4qKr4mde#e zxY`6_VkLF46qaHEG6eQjtv0q8CAxUp-m@m@e2QhKTg$FC7N=ZYZLC;h+_lCC<^+U{ zjgkgv2p>5X8jofh>vMZ^A!M=AQn?6lcJoAIg7M^PqvZR|YNJ~ZG`UuIC&esMUJtrag9;>8(vaM&0?eb5pjtzE`VKbdq z2lMYssUSb9Nt^07mq7EYJMgra$UrRgdU9nVBPI=3lNhlw)jbC8L1k*yYgi6dzGA9; z)g-Qz`FNR_E0<_;vNO2^#_q3CBMP#%LlVsf3Tgo|``o7|6FVnW@-na;q@wgZm71mq5zT2kJZ7BG6{6%~Uhk zBwlM`-!$2`n%L(V`(_42>I+Qei%jM3naY>29FB~0E(ZF^1YIqYL|mm5HWM_?=n;!> z*@JFRz_g8p$A5x-08}`b0`Z6)pHQKz!C=U)c$tB~M&*MuzrjAspe1poI&?m6_mb+R zjw|?1g%yKooFhKVY|nu(%Ck&aj;q-h>ysJ_64wF6mGYi);M|+2M+!j$90u_rgWxV% z@{dlICI7dZ87Uk@|F_RGQjlN;ys8KBV!`jLC=w9-467pk3^Z#_73dgvSCopPQ-)Dv9rfj1t%BZ+|6lt6%=)(|DHsr` z^mRG?1Z=!j`oT#9@B>Q(Je>AvDr7n^d=mNuc_)~#?^OLCEY^1;_g}tmii^`>GHW) z;av7fNzIQs#{s`h;0B+jMy5@G^E_9Q3|9d(U1)-BK~dIO4`9^E5cds)GTy2ZqOAnm zGESeDWt+PfoSp@?c@Ei0&MmpY*fNUD+=6E){aCo}l#~RC5SlVGFm#!j_ZMcvQzw!$ zYpI#xlB%zSn#q#f+s{xV@=H_8%wPfhh@}K2W$}U4b5r{Lp{;rz&LnK#ihS$d`mDyo^RY9UoNN z^&3GNB;Vy><3o-hf)Kkai#WeesKxp`MH+073(OJNBJI0!gX5p0f)(5T8a`H5j%U(##7E^B}aSMZ9U*3+}KRzDnk}NPmNY;Tb`$iCSubUZ8_sq zq4qQS-KuJ}Yz*TT8daVF`{3y5(mVVe;SBaxu45COOMZb`E@!Q9e|mv>VMin#qL|_% zBIyLBJtLCNKJX%?Q57cAG-2`}h-9=E-HK90C&r{3zBWva*$}fQ=8Kq{F(HNygEX2T zYV=4PfgC%5nCxsr&1{3i1JR96Gxp%>&&FA$ISE9w_Mfb_8R7gkS;c|gDu7Wkdj+WiU4)sOc zdw-zD#U88c#sJBfGJgE=yJ0PePFd>Pv|hXffj4^Eo>wR;vJC7F9^m0i5R8b15h9d- z0rJ9;25_OTQKO^!M&k?38$p7etNJRoYLNlnZ}KDM_am`YS=_4EsFB)=XzK;^b~KE8 zI~tH4=iYjaO47V&*ypOdQ1JrS{2CSPlWuVJkf*MR^O zlHkH|La8C9kZM;QD58Qq3@PY|s3)UdjCwtajgq2%%@DVvAOVHi-oYgoQ){^YDyCK_ zj{5atYPC)d2{tU+MLh;#MBtW&gYQst!o3`eV6SlEf!vl)sF=cn7LBxukAk(xzS_cV zt{893dM0EQdCaWN)fZ5< zT=4u>ehXUlMD@yVuQSp&AkOuh)H5M=4B~u~2UIM>B&}0?SDENl@5?V1KC;ft<$Oj( z7M7+O|0`9}0n2?apNo0;2&_JE1UpmV4VV*EL_7T*YF^#=CZp&dy+!X#d4g?8mWAbA zGuEpvcUxetvS6boV~7ZhP6 zs-El|D-0!v>|Rs7)&{2w;rh5~&JdmwsIp}+64J167lcec$F}4I=M;zyOlsktZ=}+e zbxwtA1#PO`%c_@K;tE?#&WYxGYX@xk?ug3YPni4E{ad*F<CG z(boAW?P2)Jewo3s*r#qX+`Bj6yW4#3^BYw76Pc4_j>EIy+1QeYc`YnFyv1L_-ys8! zErT>kZP~J7eL>J(V76u0R;@k4Tu2wcVJ^-oeL{(utvb%;S(uL~zg&8ykCZ&6znw5?yi{nSpmK_u6iam&?3YqF$yb;@K>$h-0k1#10)7c}8Oa%5DM*No1=cTjX zGU8DtZw`Bu(TisoXgI@&r*Xq+24rs!1G4uNSgnYj0t5VxG7@~O{9hD1tWeCw*j86( z!Nz=-_}K=kAF z_u=(lVi1}F-smzf;0oZv72!NWk`@oT7@Dn(8( zn;vsIzYTPp5Tk?c$b=&prv9q9g}7o{h777$e?(vy*SCRL~Gzx)rK+zNky@)>d|s# z3{Su|dt)JaXpB3u(b`-V?E=<~kz2Tz)9F!#$1tNDXT;+Qqa1&LQGf|jE@rVZ6I@&X zOrW>$;~}(AXEOi%9RuNn{HpJ;!E#N!#?%f15AStP)^GYd!~UHq-Xt+`o~*Q~cbLfRT z=F%}!nv?kG2dq%u054A2B>jN7YcOD&MYc$1gGOK=M)MxS<<6xe==Ydod(1S&y*!tG zXycOzn;pou42+`X*eH5WZ^<-H0axffrgAS+DKO$=iX*dLE>KFcbEbWD3cD_)7(M;4 zbFu&?3;Zs}vLDD?KvbP#sxDy~e-9TB{TL+#p*Zdi%=HjG1-?3rPiZ{Q0MvPAp-BqF zT3OHnK=M2~c-5}};J9R%0D!p)sGOc);i$0E0pY?YK^R60A^|&pr?=d>Ba4n-0G4BV%2hXG zOLtOV-)3!=@{u!(*7`b}=8ly%w#VTm4o*rj&iQ0eZaA=W z1fD3I`!0))@Bmw8iek3J7vAs1mI^;n_Fizb1RJ6_q7-dQ#{nhV9QfOnnbqk99uPL- z!yT%BA4`g^PRGh_4k)`mNu3|=9%sJmz+hppQfbuUM%kGubV*&kE3IwH8$a>igrY3q zzx_X4nn!>oCSW&CQbD?k?94^Gn!Tl)V3!R+o4?ZLkA01sVm9{e9(D#=esh@`?s<OgqmeLu~9%&2aGZ|S_ zMz(4`vv?jgXSpgZYw-m9m`M0)gY^;nNlHs{?>^>xxLiw}I*>z0P-Hx3%caMW@eLp3 z(hEswU)iv-l-`4Dd3)B-TCUAp4v% zJxw<&A2`%<{@fRR4)v7++Bv zKC__e?U^S1GautrP@=-WT{;b5Uc+Fc`pgf2fnO}<$;mk42BmmRDb~vc=yzWyow>a| zv!dOhO>hLs`ySbc_Z``Xvo|1jgZD^)KTh$*$vM6_(;%(SKC2Ip#DYa6xJ{esht%xm zKKpYVyO|!f7FHH1U-6fbQG1V+%c|FlYc3wK=!2x&g%XJO5A#^~5TzEr zv2Mf}a_iU;19tsD$s7I9FRwRTDMl!TUMT?0c1X^!zt+!M`w`oZF@@^I*ZMc<2iQOK zi`M>4BXY*i$y>5y1sc5}add<4EA&m>o*i(Q+u^beu&?x20-+$0#xaDm7T@T{S&L>7 z@XGnKmB9m*Ap@161C?O|f;^=Vj8`L2@|tvV6FS-M%zm&JhU0FutpiRmbiglcKuW9$ z9uPwY*oOw};R6a*VPKMsN{-OK1s}Bz}oZmu^#Mdc#&rVu1 z_upgwPl%uU4dU|CXor#%`vBtqZt!-{KhTT*@5TRrO;L7WFYOx<>h~&HvHAIRudkjk zZUW)+8h&~C_0`mOgBo7dOYe`h)P_Gx;EygF@s|>& ziIbDBC%-je)`ap2Urx9^!SL{3Cl<_jYDW2t{WDxMPR%$!Rn(&P4#zZ20rF-twEz2HFSV zoKsi`5mJqLsed;0UGR|de&BuUOc0kfLB!AVtOgu>6x~7$S4Ss-mT}iQ?AU((j%+_W$fhif!SfIIfJgnZq@1nWaj?gjw z5HHo<#^E_1UVZRQ?t>$A)GRr}1T2f}3b_{~$)XC#S<&7W-e6y4AYY{vjIJ0y;NYw9 zc@di7W1O6E0>%{%I^!Vho^NQ1%sX(DhS-WkM^4jyZfG|A&G3ccOT!@pL9lN}*-N+y z-YRnh_&Db(ZZ`=8c62DkpJ6{SfUmBv+fmpvsYg{NY)@1v%H z{EKR6Jk-=X3>sDR-P;T03o*o(WBdr>hQSarT%`%GF`z$Bk`1a>)xUJ|s8IUfj=E_W z=XYeRS_qvHsZ+>Zf h{?nVEZ-^=)zr!72TMe462CuCK@2v)(JqF)Z{{u%(hkgJ6 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index a41950ad2506fa87f296513b5ab45522f3fba4ce..c9c47345b7123d0d2b80cfeb13a95a8a1296073e 100644 GIT binary patch delta 57168 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πbFWjTj!c&K_xU4j64zD_?9W%$|E-6x71 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 L.LIBTCPIP >SYSCALL LoadLib sta hLIBTCPIP -.8 lda (pPs) - ora #S.PS.F.EVENT Now accept events - sta (pPs) +* lda (pPs) +* ora #S.PS.F.EVENT Now accept events +* sta (pPs) clc rts *-------------------------------------- @@ -62,6 +62,7 @@ CS.RUN.ADD cmp #2 >PUSHEA.G DST.IP+2 >PUSHEA.G DST.IP+1 >PUSHEA.G DST.IP + >PUSHBI 8 4 PTRs >PUSHW L.SSCANF.IP lda #1 >SYSCALL GetArg diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index fa7c737d..cd830dd5 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -12,8 +12,9 @@ AUTO 4,1 .INB INC/ETH.I .INB INC/LIBTCPIP.I *-------------------------------------- -ZPIPCfgPtr .EQ ZPBIN -ZPDevPtr .EQ ZPBIN+2 +pIPCFG .EQ ZPBIN +pFD .EQ ZPBIN+2 +pDEV .EQ ZPBIN+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -68,22 +69,22 @@ CS.RUN >LDYA L.MSG0 >SYSCALL printf >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG - >STYA ZPIPCfgPtr + >STYA pIPCFG - ldy #S.IPCFG.HDEV - lda (ZPIPCfgPtr),y + ldy #S.IPCFG.hFD + lda (pIPCFG),y bne .1 >LDYA L.MSG0.NL >SYSCALL printf jmp CS.RUN.DONE -.1 >STA.G DevID - >SYSCALL GetDevByID - >STYA ZPDevPtr S.FD +.1 >STA.G FD.ETH + >SYSCALL GetMemPtr + >STYA pFD >PUSHEA.G DIB - >LDA.G DevID + >LDA.G FD.ETH >SYSCALL GetDevStatus >LEA.G DCB.NIC @@ -93,7 +94,7 @@ CS.RUN >LDYA L.MSG0 >PUSHEA.G IOCTL >PUSHBI IOCTL.STATUS - >LDA.G DevID + >LDA.G FD.ETH >SYSCALL IOCTL CS.RUN.DUMP >LDYA L.MSG0.L @@ -112,14 +113,14 @@ CS.RUN.DUMP >LDYA L.MSG0.L lda #S.FD.DEV.NAME clc - adc ZPDevPtr + adc pFD tay lda /S.FD.DEV.NAME - adc ZPDevPtr+1 + adc pFD+1 >PUSHYA - >PUSHB.G DevID + >PUSHB.G FD.ETH >LDYA L.MSG1.DEV >SYSCALL printf @@ -185,7 +186,7 @@ CS.RUN.LINK >LDYA L.MSG1.LINK.OK CS.RUN.DUMPIP >LDYA L.MSG2 >SYSCALL printf - lda (ZPIPCfgPtr) + lda (pIPCFG) and #S.IPCFG.STATUS.OK beq .11 @@ -198,7 +199,7 @@ CS.RUN.DUMPIP >LDYA L.MSG2 ldy #S.IPCFG.DHCPSRVR+3 ldx #4 -.2 >PUSHB (ZPIPCfgPtr),y +.2 >PUSHB (pIPCFG),y dey dex bne .2 @@ -207,7 +208,7 @@ CS.RUN.DUMPIP >LDYA L.MSG2 ldy #S.IPCFG.IP+7 IP/MASK ldx #8 -.3 >PUSHB (ZPIPCfgPtr),y +.3 >PUSHB (pIPCFG),y dey dex bne .3 @@ -216,7 +217,7 @@ CS.RUN.DUMPIP >LDYA L.MSG2 ldy #S.IPCFG.GW+3 ldx #4 -.4 >PUSHB (ZPIPCfgPtr),y +.4 >PUSHB (pIPCFG),y dey dex bne .4 @@ -225,26 +226,26 @@ CS.RUN.DUMPIP >LDYA L.MSG2 ldy #S.IPCFG.DNS1+7 ldx #8 -.5 >PUSHB (ZPIPCfgPtr),y +.5 >PUSHB (pIPCFG),y dey dex bne .5 >LDYA L.MSG2.DNS >SYSCALL printf - lda ZPIPCfgPtr + lda pIPCFG clc adc #S.IPCFG.DOMAIN tay - lda ZPIPCfgPtr+1 + lda pIPCFG+1 adc #0 >PUSHYA - lda ZPIPCfgPtr + lda pIPCFG clc adc #S.IPCFG.HOSTNAME tay - lda ZPIPCfgPtr+1 + lda pIPCFG+1 adc #0 >PUSHYA @@ -273,7 +274,7 @@ MSG0.L .AZ "Loaded\r\n" MSG0.NL .AZ "Not Loaded\r\n" *-------------------------------------- MSG1.DEV .AS "\r\nDevice Configuration :\r\n" - .AS " DevID : $%h\r\n" + .AS " FD.ETH : $%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" @@ -299,7 +300,7 @@ hLIBTCPIP .BS 1 .DUMMY .OR 0 DS.START -DevID .BS 1 +FD.ETH .BS 1 IOCTL .BS S.IOCTL DIB .BS S.DIB DCB.NIC .BS S.DCB.NIC diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 634da5ec..1f7874c7 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -50,13 +50,15 @@ CS.RUN >LDYA L.MSG0 bcs .7 >STYA ZPPTR1 S.FD - + txa + >STA.G DEV.FD + jsr DumpFD bcs .9 - + >PUSHEA.G DEV.DIB - >LDA.G DEV.ID + >LDA.G DEV.FD >SYSCALL GetDevStatus bcs .6 @@ -167,6 +169,7 @@ MSG.SFLAGS .AS "BWRLNEIO" .OR 0 DS.START DEV.ID .BS 1 +DEV.FD .BS 1 DEV.DIB .BS S.DIB DEV.SFLAGS .BS 9 DS.END diff --git a/BIN/NFSMOUNT.S.txt b/BIN/NFSMOUNT.S.txt index 9b8a31de..8e0592c0 100644 --- a/BIN/NFSMOUNT.S.txt +++ b/BIN/NFSMOUNT.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index c414d550..507ea502 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -541,8 +541,6 @@ CS.RUN.Rename ldy #hDstFullPath ldy #hSrcFullPath jsr CS.RUN.GetPathY - >PUSHYA - >SYSCALL Rename rts diff --git a/DRV/PIC.DRV.S.txt b/DRV/PIC.DRV.S.txt index 9a9adff4..5b19783d 100644 --- a/DRV/PIC.DRV.S.txt +++ b/DRV/PIC.DRV.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index 5e3b7922..ae3aff01 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -167,8 +167,7 @@ FD.DEV.NAME .AZ "ETH7" NAME *-------------------------------------- ZPIOCTL .EQ ZPDRV ZPBufPtr .EQ ZPDRV+2 -Size .EQ ZPDRV+4 -Counter .EQ ZPDRV+6 +Counter .EQ ZPDRV+4 *-------------------------------------- DRV.CS.START cld jmp (.1,x) @@ -397,36 +396,40 @@ READ >STYA ZPIOCTL .1 lda RTDATA+1,x discard RxStatus lda RTDATA,x - lda RTDATA+1,x - sta Size+1 - - ldy RTDATA,x get RxLength - sty Size + lda RTDATA+1,x get RxLength + ldy #S.IOCTL.BYTECNT+1 + + sta (ZPIOCTL),y + pha + eor #$ff + sta Counter+1 + + lda RTDATA,x + dey + sta (ZPIOCTL),y + tay + eor #$ff + sta Counter + pla + >SYSCALL getmem bcs .9 >STYA ZPBufPtr stx .8+1 - ldy #S.IOCTL.BYTECNT - - lda Size + phy + ldy #S.IOCTL.BUFPTR+1 sta (ZPIOCTL),y - eor #$ff - sta Counter - - iny - - lda Size+1 + dey + pla sta (ZPIOCTL),y - eor #$ff - sta Counter+1 - - ldy #0 ldx DEVSLOTx0 + ldy #0 + .2 inc Counter bne .3 inc Counter+1 diff --git a/ETC/HOSTNAME b/ETC/HOSTNAME index 085880f5..7ac4c251 100644 --- a/ETC/HOSTNAME +++ b/ETC/HOSTNAME @@ -1,6 +1,7 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 +# put hostname here (max 15 caracters) a2osx-host MAN TEXT ETC/HOSTNAME diff --git a/ETC/HOSTS b/ETC/HOSTS index 21807a51..3393eef0 100644 --- a/ETC/HOSTS +++ b/ETC/HOSTS @@ -2,6 +2,6 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 # put your IP address and your hostname and aliases below -1.2.3.4 myserver.mydomain myserver +1.2.3.4 myserver.mydomain myserver MAN TEXT ETC/HOSTS diff --git a/FNT2FON.S.txt b/FNT2FON.S.txt index b8d03618..ee2becec 100644 --- a/FNT2FON.S.txt +++ b/FNT2FON.S.txt @@ -251,7 +251,6 @@ CS.RUN ldy #S.FNT.dfBreakChar >PUSHYA >PUSHBI SYS.FSeek.SET >LDA.G hOutputFile - >PUSHA >SYSCALL FSeek bcc .1 .9 rts @@ -742,9 +741,7 @@ CS.RUN.WriteBMAndTbl >LEA.G FileOffset >PUSHYA >PUSHBI SYS.FSeek.SET - >LDA.G hOutputFile - >PUSHA - + >LDA.G hOutputFile >SYSCALL FSeek bcs .9 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 0e8bb8e0..06bab1a7 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -78,7 +78,7 @@ SYS.Stat .EQ $04 SYS.MKDir .EQ $06 SYS.MKNod .EQ $08 SYS.MKFIFO .EQ $0A -* .EQ $0C +SYS.FStat .EQ $0C * .EQ $0E SYS.OpenDir .EQ $10 @@ -116,8 +116,8 @@ SYS.FWrite .EQ $36 SYS.FFlush .EQ $38 SYS.FSeek .EQ $3A SYS.FSeek.SET .EQ $00 -SYS.FSeek.CUR .EQ $01 -SYS.FSeek.END .EQ $02 +SYS.FSeek.CUR .EQ $02 +SYS.FSeek.END .EQ $04 SYS.FTell .EQ $3C SYS.FEOF .EQ $3E @@ -397,15 +397,15 @@ S.FD.DIR.REF .EQ 2 S.FD.DIR.IOBUF .EQ 3 S.FD.DIR.EL .EQ 4 S.FD.DIR.EPB .EQ 5 -S.FD.DIR.FC .EQ 6 word +S.FD.DIR.FC .EQ 6 word * S.FD.DIR .EQ 8 *-------------------------------------- S.FD.DEV.BUSID .EQ 2 S.FD.DEV.DEVID .EQ 3 -S.FD.DEV.BUSPTR .EQ 4 word -S.FD.DEV.DRVPTR .EQ 6 word -S.FD.DEV.NAME .EQ 8 C-String +S.FD.DEV.BUSPTR .EQ 4 word +S.FD.DEV.DRVPTR .EQ 6 word +S.FD.DEV.NAME .EQ 8 C-String * S.FD.DEV .EQ 16 *-------------------------------------- @@ -567,4 +567,4 @@ S.STAT.P.DEVBLOCKS .EQ 59 BYTE S.STAT .EQ 64 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/A2OSX.I +SAVE INC/A2OSX.I diff --git a/INC/APPLESOFT.I.txt b/INC/APPLESOFT.I.txt index 824eb202..cf4238b3 100644 --- a/INC/APPLESOFT.I.txt +++ b/INC/APPLESOFT.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * AppleSoft ZP @@ -82,4 +80,4 @@ ATN .EQ $F09E *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/APPLESOFT.I +SAVE INC/APPLESOFT.I diff --git a/INC/APPLETALK.I.txt b/INC/APPLETALK.I.txt index 8e7b33ad..340cfc0e 100644 --- a/INC/APPLETALK.I.txt +++ b/INC/APPLETALK.I.txt @@ -1,12 +1,10 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- ATGetInfo .EQ $02 ATLookupName .EQ $10 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/APPLETALK.I +SAVE INC/APPLETALK.I diff --git a/INC/COM.6551.I.txt b/INC/COM.6551.I.txt index 5712cd28..55d54ee5 100644 --- a/INC/COM.6551.I.txt +++ b/INC/COM.6551.I.txt @@ -58,4 +58,4 @@ SSC.CTL.B115200 .EQ %00000000 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/COM.6551.I +SAVE INC/COM.6551.I diff --git a/INC/GFX.EVE.I.txt b/INC/GFX.EVE.I.txt index b7a88068..422240a7 100644 --- a/INC/GFX.EVE.I.txt +++ b/INC/GFX.EVE.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * Le Chat Mauve : EVE @@ -25,4 +23,4 @@ LOCKRES.OFF .EQ $C0BE W LOCKRES.ON .EQ $C0BF W *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/GFX.EVE.I +SAVE INC/GFX.EVE.I diff --git a/INC/GFX.I.txt b/INC/GFX.I.txt index 2aa346c7..a856b84b 100644 --- a/INC/GFX.I.txt +++ b/INC/GFX.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * GFX Devices @@ -11,7 +9,7 @@ S.DIB.GFX.F .EQ S.DIB S.DIB.GFX.S .EQ S.DIB+1 S.DIB.GFX.W .EQ S.DIB+2 S.DIB.GFX.H .EQ S.DIB+4 -S.DIB.GFX .EQ S.DIB+6 +S.DIB.GFX .EQ S.DIB+6 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/GFX.I +SAVE INC/GFX.I diff --git a/INC/GUI.I.txt b/INC/GUI.I.txt index 719a30de..68ebdb40 100644 --- a/INC/GUI.I.txt +++ b/INC/GUI.I.txt @@ -228,4 +228,4 @@ S.FON.Break .EQ 7 S.FON .EQ 8 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/GUI.I +SAVE INC/GUI.I diff --git a/INC/IO.I.txt b/INC/IO.I.txt index 73f01a27..7e3dc167 100644 --- a/INC/IO.I.txt +++ b/INC/IO.I.txt @@ -93,4 +93,4 @@ RRAMWRAMBNK1 .EQ $C08B RR *-------------------------------------- *CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards MAN -SAVE /A2OSX.BUILD/INC/IO.I +SAVE INC/IO.I diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 76bbc841..6aa09871 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -99,10 +99,10 @@ K.STACKTOP .EQ $03ED XFer !!! down to $3E0 *-------------------------------------- * free $0C00->$17FF = $C00 (3072) Aux *-------------------------------------- -FD.Table.hMem .EQ $0C00 K.Dev.MAX -FD.Table.F .EQ $0C20 K.Dev.MAX -FD.Table.PTRLO .EQ $0C40 K.Dev.MAX -FD.Table.PTRHI .EQ $0C60 K.Dev.MAX +Dev.Table.hFD .EQ $0C00 K.Dev.MAX +Dev.Table.F .EQ $0C20 K.Dev.MAX +Dev.Table.pFDLO .EQ $0C40 K.Dev.MAX +Dev.Table.pFDHI .EQ $0C60 K.Dev.MAX *-------------------------------------- PS.Table.hMem .EQ $0D00 K.PS.MAX PS.Table.PID .EQ $0D20 K.PS.MAX @@ -162,6 +162,6 @@ H.BIN.EXE.REL.TABLE .EQ 16 H.BIN.DRV.REL.TABLE .EQ 2 Including main jmp *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/KERNEL.I +SAVE INC/KERNEL.I LOAD /A2OSX.SRC/SYS/KERNEL.S ASM diff --git a/INC/LIBBLKDEV.I.txt b/INC/LIBBLKDEV.I.txt index 05033a42..4cf956be 100644 --- a/INC/LIBBLKDEV.I.txt +++ b/INC/LIBBLKDEV.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 *-------------------------------------- diff --git a/INC/LIBCRYPT.I.txt b/INC/LIBCRYPT.I.txt index 18e8e297..322b0743 100644 --- a/INC/LIBCRYPT.I.txt +++ b/INC/LIBCRYPT.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 *-------------------------------------- diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 6b9eda36..a4ed8302 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -77,7 +77,7 @@ S.IPCFG.STATUS.ROFFER .EQ %00000010 OFFER Received S.IPCFG.STATUS.SREQ .EQ %00000100 REQUEST Sent S.IPCFG.STATUS.RACK .EQ %00001000 ACK Received S.IPCFG.STATUS.OK .EQ %10000000 Fully configured (static or DHCP) -S.IPCFG.HDEV .EQ 1 +S.IPCFG.hFD .EQ 1 S.IPCFG.MAC .EQ 2 S.IPCFG.DHCPSRVR .EQ 8 S.IPCFG.IP .EQ 12 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index c9adfff6..67be4a0d 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -351,8 +351,8 @@ AUTO 4,1 dec bne :1 pla - rts .FIN + rts .EM *-------------------------------------- * General WORD Manipulation Macros @@ -378,8 +378,8 @@ AUTO 4,1 tya sta ]1,]2 .ELSE - sta ]1+1 sty ]1 + sta ]1+1 .FIN .EM *-------------------------------------- diff --git a/INC/MONITOR.I.txt b/INC/MONITOR.I.txt index 2cb65b0e..d1b2e4e8 100644 --- a/INC/MONITOR.I.txt +++ b/INC/MONITOR.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 1000 +PREFIX /A2OSX.BUILD +AUTO 4,1 *-------------------------------------- * ROM Standard Routines *-------------------------------------- diff --git a/INC/NET.DHCP.I.txt b/INC/NET.DHCP.I.txt index f628d816..4163eb1b 100644 --- a/INC/NET.DHCP.I.txt +++ b/INC/NET.DHCP.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 *-------------------------------------- diff --git a/INC/NET.TELNET.I.txt b/INC/NET.TELNET.I.txt index b10955dd..c63ce3e2 100644 --- a/INC/NET.TELNET.I.txt +++ b/INC/NET.TELNET.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 *-------------------------------------- * https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/jb-dev/sysroot/usr/include/arpa/telnet.h *-------------------------------------- diff --git a/INC/NIC.8900A.I.txt b/INC/NIC.8900A.I.txt index 6baa59f8..e75bf3c2 100644 --- a/INC/NIC.8900A.I.txt +++ b/INC/NIC.8900A.I.txt @@ -1,8 +1,6 @@ -PR#3 +NEW PREFIX /A2OSX.BUILD -LOMEM $C00 -INC 1 -AUTO 6 +AUTO 4,1 .LIST OFF *-------------------------------------- * CS8900A IO Registers diff --git a/INC/NIC.91C96.I.txt b/INC/NIC.91C96.I.txt index efb05b13..b18ee3d2 100644 --- a/INC/NIC.91C96.I.txt +++ b/INC/NIC.91C96.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * SMSC L91C96 IO Registers diff --git a/INC/NIC.W5100.I.txt b/INC/NIC.W5100.I.txt index 73c618c1..de1def55 100644 --- a/INC/NIC.W5100.I.txt +++ b/INC/NIC.W5100.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * WIZnet W5100 IO Registers diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index a4047f3a..227d6cba 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * PRODOS Constants @@ -135,4 +133,4 @@ MACHID.CLK .EQ %00000001 *KVERSION .EQ $BFFF *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/PRODOS.I +SAVE INC/PRODOS.I diff --git a/INC/XY.MOUSE.I.txt b/INC/XY.MOUSE.I.txt index d9b94a3c..54bd2dab 100644 --- a/INC/XY.MOUSE.I.txt +++ b/INC/XY.MOUSE.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- * //c Mouse Port, IIe Mouse Card @@ -39,4 +37,4 @@ MOUSEMODx.INTMOVE .EQ %00000010 MOUSEMODx.ACTIVE .EQ %00000001 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/XY.MOUSE.I +SAVE INC/XY.MOUSE.I diff --git a/INC/ZP.I.txt b/INC/ZP.I.txt index 40cdd993..6aaff228 100644 --- a/INC/ZP.I.txt +++ b/INC/ZP.I.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 *-------------------------------------- * ProDOS Reserved ZP Location 00-1F,56-FF *-------------------------------------- @@ -29,4 +27,4 @@ RNDL .EQ $4E RANDOM NUMBER LOW RNDH .EQ $4F RANDOM NUMBER HIGH *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/ZP.I +SAVE INC/ZP.I diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index f090c0f0..12aed582 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -125,7 +125,7 @@ ARP.AddFromFrameInPtr *-------------------------------------- ARP.IN ldy #S.ARP.TPA+3 ldx #3 - + .1 lda (ZPFrameInPtr),y cmp IPCFG+S.IPCFG.IP,x bne ARP.IN.EXIT @@ -142,8 +142,10 @@ ARP.IN ldy #S.ARP.TPA+3 beq ARP.IN.REP ARP.IN.EXIT lda hFrameIn + beq .8 + stz hFrameIn >SYSCALL FreeMem - clc +.8 clc rts ARP.IN.REQ ldy #S.ARP.SPA+3 @@ -165,8 +167,10 @@ ARP.IN.REQ ldy #S.ARP.SPA+3 dex bpl .2 - >LDYA L.ARP.REP - jsr ARP.Send.YA + >PUSHWI S.ARP + >PUSHW L.ARP.REP + lda IPCFG+S.IPCFG.hFD + >SYSCALL write bra ARP.IN.EXIT @@ -221,8 +225,10 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP dex bpl .4 - >LDYA L.ARP.REQ - jsr ARP.Send.YA + >PUSHWI S.ARP + >PUSHW L.ARP.REQ + lda IPCFG+S.IPCFG.hFD + >SYSCALL write bcs .99 lda #K.ARP.PENDING.TTL @@ -236,12 +242,6 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP sec .99 rts *-------------------------------------- -ARP.Send.YA >STYA IOCTL+S.IOCTL.BUFPTR - >LDYAI S.ARP - >STYA IOCTL+S.IOCTL.BYTECNT - - jmp FRM.Send.IOCTL -*-------------------------------------- ARP.FIND.BY.IP >LDYA L.ARP.CACHE >STYA ZPCachePtr diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index 36440ea9..406ed992 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -5,11 +5,12 @@ AUTO 4,1 *-------------------------------------- * PULLW = PTR to S.IPCFG *-------------------------------------- -CFG.Init >LDYA L.DEVNAME - >SYSCALL GetDevByName +CFG.Init >PUSHBI 0 + >LDYA L.DEVNAME + >SYSCALL open bcc .1 - inc DEVNAME+3 - lda DEVNAME+3 + inc DEVNAME+8 + lda DEVNAME+8 cmp #'8' bne CFG.Init @@ -20,54 +21,25 @@ CFG.Init >LDYA L.DEVNAME .9 sec rts -.1 stx IPCFG+S.IPCFG.HDEV - +.1 sta IPCFG+S.IPCFG.hFD + >PUSHW L.DEVNAME >LDYA L.MSG.DEV.OK >SYSCALL printf - >PUSHWI 0 - >PUSHBI IOCTL.OPEN - lda IPCFG+S.IPCFG.HDEV - >SYSCALL IOCTL - bcs .9 +CFG.EtcFiles >LDYAI 256 + >SYSCALL GetMem + bcc .1 + rts - >LDYA L.DCB.NIC - >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE +.1 >STYA ZPTmpPtr1 + stx CFG.hBuf - >PUSHW L.IOCTL - >PUSHBI IOCTL.STATUS - lda IPCFG+S.IPCFG.HDEV - >SYSCALL IOCTL - bcs .9 - - ldx #5 - -.2 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 .2 - - ldx #3 - -.3 lda IPCFG+S.IPCFG.IP,x - sta ARP.REQ.SPA,x - sta ARP.REP.SPA,x - sta DNS.SOCKET.SA,x - dex - bpl .3 - -CFG.EtcFiles >LDYA L.MSG.CFG + >PUSHW L.HOSTNAME + >LDYA L.MSG.CFG >SYSCALL printf jsr CFG.Read.HOSTNAME - jsr CFG.Read.Result lda IPCFG+S.IPCFG.HOSTNAME bne .4 @@ -75,7 +47,7 @@ CFG.EtcFiles >LDYA L.MSG.CFG ldy #$ff .2 iny - lda DefaultHostName,y + lda CFG.DefaultHost,y sta IPCFG+S.IPCFG.HOSTNAME,y bne .2 @@ -94,137 +66,273 @@ CFG.EtcFiles >LDYA L.MSG.CFG >SYSCALL printf jsr CFG.Read.TCPIP.CONF - jsr CFG.Read.Result - >PUSHW L.HOSTS + lda IPCFG+S.IPCFG.IP + beq .5 + + lda #S.IPCFG.STATUS.OK + sta IPCFG+S.IPCFG.STATUS + +.5 >PUSHW L.HOSTS >LDYA L.MSG.CFG >SYSCALL printf jsr CFG.Read.HOSTS - jsr CFG.Read.Result - jmp SET.IPCFG.I -*-------------------------------------- -CFG.Read.Result bcc .1 - >PUSHA - >LDYA L.MSG.CFG.KO - bra .2 -.1 >LDYA L.MSG.CFG.OK -.2 >SYSCALL printf - rts + jsr SET.IPCFG.I + + lda CFG.hBuf + >SYSCALL freemem + +.9 rts *-------------------------------------- CFG.Read.HOSTNAME >LDYA L.HOSTNAME - jsr CFG.Read.LoadFile + jsr CFG.Read.Open + jsr CFG.Read.Result bcs .9 -* read 15 chars MAX, until CR or EOF - - ldx #$15 - lda CFG.FileLen+1 - bne .1 File is more than 256....? +.1 jsr CFG.Read.GetS + bcs .8 - ldx CFG.FileLen - beq .9 len is 0 !!! + lda (ZPTmpPtr1) + beq .1 empty line... + cmp #'# + beq .1 comment... -.1 ldy #0 + ldy #0 .2 lda (ZPTmpPtr1),y - cmp #13 - beq .8 A CR, end of name - sta IPCFG+S.IPCFG.HOSTNAME,y + beq .8 end of name + iny - dex + cpy #15 bne .2 -.8 lda #0 - sta IPCFG+S.IPCFG.HOSTNAME,y - - jsr CFG.Read.CleanUp - clc - rts - -.9 jsr CFG.Read.CleanUp - sec - rts +.8 clc + .HS B0 BCS +.9 sec + jmp CFG.Read.Close *-------------------------------------- CFG.Read.TCPIP.CONF >LDYA L.TCPIP.CONF - jsr CFG.Read.LoadFile + jsr CFG.Read.Open + jsr CFG.Read.Result bcs .9 - -.1 jsr CFG.GetLine + +.1 jsr CFG.Read.GetS bcs .8 - jsr CFG.GetKeyword - bcs .1 + lda (ZPTmpPtr1) + beq .1 empty line... + cmp #'# + beq .1 comment... + + ldy #$ff - 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 +.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 -.9 jsr CFG.Read.CleanUp +.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 -.3 jsr CFG.ScanIP - bcs .1 +CFG.Read.dnsdomain + lda (ZPTmpPtr2) + sec + adc ZPTmpPtr1 + sta ZPTmpPtr1 + bcc .1 + inc ZPTmpPtr1+1 + +.1 ldy #$ff - 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 +.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 >LDYA L.HOSTS - - jsr CFG.Read.LoadFile + jsr CFG.Read.Open + jsr CFG.Read.Result bcs .9 - - -.8 jsr CFG.Read.CleanUp - clc - rts -.9 jsr CFG.Read.CleanUp - sec +.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 L.CFG.ALIAS + jsr CFG.DNS.Add + +.2 >LDYA L.CFG.HOSTNAME + jsr CFG.DNS.Add + + bra .1 + +.8 clc + .HS B0 BCS +.9 sec + jmp CFG.Read.Close +*-------------------------------------- +CFG.Read.HOSTS.Scan + >PUSHW L.CFG.ALIAS + >PUSHW L.CFG.HOSTNAME + + 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.Read.LoadFile - stz CFG.hCfgFile +CFG.DNS.ADD >STYA ZPTmpPtr1 + + >LDYA L.CFG.IP + >STYA ZPTmpPtr2 + + >PUSHYA + >PUSHW ZPTmpPtr1 + jsr DNS.Add + + >PUSHW ZPTmpPtr1 + + ldy #3 + +.1 lda (ZPTmpPtr2),y + >PUSHA + dey + bpl .1 + + >LDYA L.MSG.DNS.ADD + bcc .8 + >LDYA L.MSG.DNS.ERR +.8 >SYSCALL printf + + rts +*-------------------------------------- +CFG.Read.Open stz CFG.hCfgFile stz CFG.hCfgPath >SYSCALL ExpandStr @@ -233,21 +341,19 @@ CFG.Read.LoadFile stx CFG.hCfgPath pha - >PUSHWI 0 Aux type - >PUSHBI 4 S.FI.T.TXT + >PUSHWI 0 + >PUSHBI 6 S.FI.T.TXT >PUSHBI SYS.FOpen.R + pla - >SYSCALL LoadFile + >SYSCALL fopen bcs .9 - stx CFG.hCfgFile - >STYA CFG.FileLen - txa - >SYSCALL GetMemPtr - >STYA ZPTmpPtr1 -.9 rts + sta CFG.hCfgFile +* clc +.9 rts *-------------------------------------- -CFG.Read.CleanUp +CFG.Read.Close php pha lda CFG.hCfgPath beq .1 @@ -255,168 +361,28 @@ CFG.Read.CleanUp .1 lda CFG.hCfgFile beq .8 - >SYSCALL FreeMem + >SYSCALL fclose .8 pla + plp 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 (ZPTmpPtr1) - inc ZPTmpPtr1 - bne .9 - inc ZPTmpPtr1+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 +CFG.Read.Result php bcc .1 -.9 rts + >PUSHA + >LDYA L.MSG.CFG.KO + bra .2 -.8 clc +.1 >LDYA L.MSG.CFG.OK +.2 >SYSCALL printf + + plp + rts +*-------------------------------------- +CFG.Read.GetS >PUSHWI 255 + >PUSHW ZPTmpPtr1 + lda CFG.hCfgFile + >SYSCALL fgets rts *-------------------------------------- CFG.A2CharAX pha @@ -447,7 +413,38 @@ SET.IPCFG >PULLW ZPTmpPtr1 IPCFG cpy #S.IPCFG bne .1 -SET.IPCFG.I lda DCB.NIC+S.DCB.NIC.FLAGS +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 ARP.REQ.SPA,x + sta ARP.REP.SPA,x + sta DNS.SOCKET.SA,x + dex + bpl .11 + + lda DCB.NIC+S.DCB.NIC.FLAGS and #S.DCB.NIC.FLAGS.ARPOFFLOAD beq .2 @@ -463,7 +460,7 @@ SET.IPCFG.I lda DCB.NIC+S.DCB.NIC.FLAGS >PUSHW L.IOCTL >PUSHBI IOCTL.CONTROL - lda IPCFG+S.IPCFG.HDEV + lda IPCFG+S.IPCFG.hFD >SYSCALL IOCTL bcs .9 diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 41cc5fb4..042eb1a7 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -131,7 +131,7 @@ DNS.REQUEST lda hDNSSocket1 *\-------------------------------------- DNS.Add >PULLW ZPPtrDNS Get host string >PULLW ZPPtrIP Get host IP address - + ldy #3 .1 lda (ZPPtrIP),y @@ -218,13 +218,13 @@ DNS.FIND.BY.NAME DNS.UPDATE.BY.ID >LDYA L.DNS.CACHE >STYA ZPCachePtr - + ldx #K.DNSCACHE.SIZE .1 lda (ZPCachePtr) beq .6 empty DNS cache entry? bmi .6 resolved ? - + ldy #S.DNSCACHE.ID lda (ZPCachePtr),y cmp DNS.TmpCache+S.DNSCACHE.ID @@ -264,6 +264,7 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE lda #K.DNSCACHE.SIZE sta TmpOffset + lda #$ff sta TmpDWord sta TmpDWord+1 @@ -359,15 +360,16 @@ DNS.FREE ldy #S.DNSCACHE.hNAME *-------------------------------------- DNS.POLL lda hDNSSocket1 beq .8 - jsr SKT.ReadFrame - bcs .8 + bcs .1 + jsr DNS.DecodeMsg - lda hDNSSocket2 +.1 lda hDNSSocket2 beq .8 jsr SKT.ReadFrame bcs .8 + jsr DNS.DecodeMsg .8 clc @@ -376,7 +378,7 @@ DNS.POLL lda hDNSSocket1 DNS.DecodeMsg sta hFrameIn >SYSCALL GetMemPtr >STYA ZPFrameInPtr - + ldy #S.DNS.F+1 lda (ZPFrameInPtr),y and /S.DNS.F.QR @@ -482,7 +484,8 @@ DNS.DecodeMsg sta hFrameIn jsr DNS.UPDATE.BY.ID .9 lda hFrameIn - >SYSCALL FreeMem +* >SYSCALL FreeMem + clc rts *-------------------------------------- DNS.CSTR2DNS lda (ZPPtrDNS) diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index ca965e0d..423e2d3c 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -210,7 +210,7 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload jsr IP.SetDestMAC bcs FRM.Queue -.6 jsr FRM.Send.Out +.6 jsr FRM.Send bcs FRM.Queue @@ -257,21 +257,21 @@ FRM.Retry ldx FRM.QUEUE.Tail lda FRM.QUEUE.hMem,x >SYSCALL GetMemPtr >STYA ZPFrameOutPtr - >STYA IOCTL+S.IOCTL.BUFPTR ldx FRM.QUEUE.Tail + + lda FRM.QUEUE.LenL,x + sta ZPFrameOutLen + lda FRM.QUEUE.LenH,x + sta ZPFrameOutLen+1 + lda FRM.QUEUE.State,x cmp #ERR.DEV+1 Device error ? bcc .1 yes, retry sending... jsr IP.SetDestMAC Err is ARP or higher, retry getting MAC bcs .2 still error getting dest MAC -.1 lda FRM.QUEUE.LenL,x - sta IOCTL+S.IOCTL.BYTECNT - lda FRM.QUEUE.LenH,x - sta IOCTL+S.IOCTL.BYTECNT+1 - - jsr FRM.Send.IOCTL try sending again to DRV +.1 jsr FRM.Send try sending again to DRV bcc .3 .2 ldx FRM.QUEUE.Tail save error... @@ -293,16 +293,11 @@ FRM.Retry ldx FRM.QUEUE.Tail .8 rts *-------------------------------------- -FRM.Send.Out >LDYA ZPFrameOutPtr - >STYA IOCTL+S.IOCTL.BUFPTR - >LDYA ZPFrameOutLen - >STYA IOCTL+S.IOCTL.BYTECNT +FRM.Send >PUSHW ZPFrameOutLen + >PUSHW ZPFrameOutPtr + lda IPCFG+S.IPCFG.hFD -FRM.Send.IOCTL >PUSHW L.IOCTL - >PUSHBI IOCTL.WRITE - lda IPCFG+S.IPCFG.HDEV - - >SYSCALL IOCTL + >SYSCALL write rts *-------------------------------------- MAN diff --git a/LIB/LIBTCPIP.S.ICMP.txt b/LIB/LIBTCPIP.S.ICMP.txt index 19932b0d..0b9f0712 100644 --- a/LIB/LIBTCPIP.S.ICMP.txt +++ b/LIB/LIBTCPIP.S.ICMP.txt @@ -69,8 +69,9 @@ ICMP.IN.ECHOREQ ldy #S.IP.DST+3 jmp FRM.SendIP ICMP.IN.EXIT lda hFrameIn + beq .8 >SYSCALL FreeMem - rts +.8 rts *-------------------------------------- ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDst @@ -128,12 +129,14 @@ ICMP.IN.ECHOREP jsr IP.FillSKT.TemplateSrcDst bne .3 .9 lda hFrameIn + beq .99 >SYSCALL FreeMem +.99 clc rts *-------------------------------------- ICMP.ComputeChecksum >PUSHW ZPFrameOutLen - >PUSHWI S.ICMP.TYPE-2 + >PUSHWI S.ICMP.TYPE ldy #S.ICMP.CHECKSUM lda #0 diff --git a/LIB/LIBTCPIP.S.IP.txt b/LIB/LIBTCPIP.S.IP.txt index d77e291b..fd493a84 100644 --- a/LIB/LIBTCPIP.S.IP.txt +++ b/LIB/LIBTCPIP.S.IP.txt @@ -50,7 +50,7 @@ IP.ComputeChecksum stz IP.CHECKSUM+2 stz IP.CHECKSUM+3 - ldy #2 + ldy #0 .1 clc diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 1475e07b..8814a27d 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -89,10 +89,22 @@ 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.MSG.DNS.ERR .DA MSG.DNS.ERR 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.HOSTNAME .DA CFG.HOSTNAME +L.CFG.ALIAS .DA CFG.ALIAS +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 L.ARP.REQ .DA ARP.REQ L.ARP.REP .DA ARP.REP L.DNS.SOCKET .DA DNS.SOCKET @@ -122,9 +134,6 @@ LIB.LOAD ldx RefCount sta FD.SSOCK+S.FD.HANDLER - jsr CFG.Init - bcs .9 - jsr ARP.CLEAR jsr DNS.CLEAR @@ -132,9 +141,12 @@ LIB.LOAD ldx RefCount >LDYAI K.SKTTABLE.SIZE*S.SOCKET >SYSCALL getmem0 bcs .9 - + stx hSocketTable - + + jsr CFG.Init + bcs .9 + .8 inc RefCount clc @@ -143,12 +155,12 @@ LIB.LOAD ldx RefCount LIB.UNLOAD dec RefCount bne LIB.UNLOAD.8 - lda IPCFG+S.IPCFG.HDEV + lda IPCFG+S.IPCFG.hFD beq .1 >PUSHWI 0 >PUSHBI IOCTL.CLOSE - lda IPCFG+S.IPCFG.HDEV + lda IPCFG+S.IPCFG.hFD >SYSCALL IOCTL .1 lda hSocketTable @@ -161,19 +173,17 @@ LIB.UNLOAD.8 clc *-------------------------------------- POLL >PUSHW L.IOCTL >PUSHBI IOCTL.READ - lda IPCFG+S.IPCFG.HDEV + lda IPCFG+S.IPCFG.hFD >SYSCALL IOCTL bcs .99 No Frame sta hFrameIn + ldx #3 - ldx #S.IOCTL.BUFPTR - -.10 lda IOCTL,x Get Frame Ptr & Len +.10 lda IOCTL+S.IOCTL.BUFPTR,x Get Frame Ptr & Len sta ZPFrameInPtr,x - inx - cpx S.IOCTL.BUFPTR+4 - bne .10 + dex + bpl .10 ldy #S.ETH.ETHERTYPE lda (ZPFrameInPtr),y @@ -206,7 +216,8 @@ POLL >PUSHW L.IOCTL *-------------------------------------- PULSE and #S.EVT.F.T1SEC beq .1 - jsr ARP.EXPIRE + +* jsr ARP.EXPIRE jsr DNS.EXPIRE .1 jsr DNS.POLL @@ -247,37 +258,33 @@ GetDynPort inc DYNPORT.LAST *-------------------------------------- CS.END *-------------------------------------- -DEVNAME .AZ "ETH1" +DEVNAME .AZ "/DEV/ETH1" MSG.DEV.KO .AZ "TCPIPD:No Device Found, exiting.\r\n" MSG.DEV.OK .AZ "TCPIPD:Bound To Device : %s\r\n" MSG.CFG .AZ "TCPIPD:Reading %s..." MSG.CFG.KO .AZ "Failed!!! [%h]\r\n" MSG.CFG.OK .AZ "OK.\r\n" +MSG.DNS.ADD .AZ "Added static host %d.%d.%d.%d %s\r\n" +MSG.DNS.ERR .AZ "***ERROR adding static host %d.%d.%d.%d %s\r\n" *-------------------------------------- HOSTNAME .AZ "${A2OSX}ETC/HOSTNAME" TCPIP.CONF .AZ "${A2OSX}ETC/TCPIP.CONF" HOSTS .AZ "${A2OSX}ETC/HOSTS" -DefaultHostName .AZ "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 -CFG.hCfgFile .BS 1 +*-------------------------------------- +CFG.DefaultHost .AZ "a2osx-XXXX" +CFG.Keywords >PSTR "address" + >PSTR "netmask" + >PSTR "gateway" + >PSTR "nameserver" + >PSTR "dnsdomain" + .DA #0 +CFG.hBuf .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 +CFG.hCfgFile .BS 1 +CFG.IP .BS 4 +CFG.HostName .BS K.DNS.MAXLEN+1 +CFG.Alias .BS K.DNS.MAXLEN+1 +CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s" *-------------------------------------- FD.SSOCK .BS 1 S.FD.HANDLER .DA #S.FD.T.SSOCK @@ -294,7 +301,7 @@ IPCFG .BS S.IPCFG ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE *-------------------------------------- -ARP.REQ .DA S.ARP Frame size +ARP.REQ .EQ * ARP.REQ.DSTMAC .HS FFFFFFFFFFFF ARP.REQ.SRCMAC .BS 6 ARP.REQ.ETYPE .DA /S.ETH.ETHERTYPE.ARP @@ -307,7 +314,7 @@ ARP.REQ.SPA .BS 4 ARP.REQ.THA .BS 6 ARP.REQ.TPA .BS 4 *-------------------------------------- -ARP.REP .DA S.ARP Frame size +ARP.REP .EQ * ARP.REP.DSTMAC .BS 6 ARP.REP.SRCMAC .BS 6 ARP.REP.ETYPE .DA /S.ETH.ETHERTYPE.ARP diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index bdc49e05..c51d43f5 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -63,7 +63,7 @@ CS.INIT >LDYA L.LIBTCPIP and #S.IPCFG.STATUS.OK bne .99 Already Configured, exit - ldy #S.IPCFG.HDEV + ldy #S.IPCFG.hFD lda (ZPIPCfgPtr),y beq .98 diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 7002598f..844b9f1c 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/SBIN/NFSD.S.txt b/SBIN/NFSD.S.txt index f7656365..af679a30 100644 --- a/SBIN/NFSD.S.txt +++ b/SBIN/NFSD.S.txt @@ -1,8 +1,7 @@ PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/SBIN/SHELL.C.CSH.txt b/SBIN/SHELL.C.CSH.txt index cfdeac07..b0bdf997 100644 --- a/SBIN/SHELL.C.CSH.txt +++ b/SBIN/SHELL.C.CSH.txt @@ -1,8 +1,6 @@ -PR#3 +NEW PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 +AUTO 4,1 .LIST OFF *-------------------------------------- CSH.OPChars .AS "!~+-*/%=&|^&<>" diff --git a/SBIN/SHELL.G.CSH.txt b/SBIN/SHELL.G.CSH.txt index 5848c400..53d462c6 100644 --- a/SBIN/SHELL.G.CSH.txt +++ b/SBIN/SHELL.G.CSH.txt @@ -1,8 +1,6 @@ -PR#3 +NEW PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 +AUTO 4,1 .LIST OFF *-------------------------------------- CSH.hBuf .BS 1 diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 80da4c8a..1bb5d8ec 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -159,7 +159,7 @@ CS.RUN >LDA.G bReadMode READ Command ? >SYSCALL GetChar bcs .8 - + >STZ.G bPause .13 jsr CheckSleep diff --git a/SBIN/TCPIPD.S.txt b/SBIN/TCPIPD.S.txt index ef898880..9bf821ec 100644 --- a/SBIN/TCPIPD.S.txt +++ b/SBIN/TCPIPD.S.txt @@ -10,10 +10,6 @@ AUTO 4,1 .INB INC/A2OSX.I .INB INC/ETH.I .INB INC/LIBTCPIP.I - .INB INC/MLI.ERR.I -*-------------------------------------- -ZPIPCfgPtr .EQ ZPBIN -ZPDevStatusPtr .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -25,7 +21,7 @@ CS.START cld .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS - .DA #4 ZP + .DA #0 ZP .DA 0 *-------------------------------------- * Relocation Table diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index db61dc5a..2092b457 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -383,12 +383,15 @@ CORE.ScrSel and #$0F tax - lda A2osX.SCRNDEVS-1,x + lda A2osX.SCRNDEVS-1,x Get DevID beq .8 No device claimed this screen stx A2osX.ASCREEN set active screen - pha + >SYSCALL GetDevByID + bcs .8 + phx + >PUSHWI 0 Param >PUSHBI IOCTL.CONTROL request pla ID diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 9ecf8911..029f7a7e 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -8,15 +8,18 @@ AUTO 4,1 * **Out:** * CC = OK, CS = ERROR * Y,A = FD +* X = hFD *\-------------------------------------- K.GetDevByID cmp DevMgr.DevCnt bcs K.GetDev.NODEV - tax - ldy FD.Table.PTRLO,x - lda FD.Table.PTRHI,x - + lda Dev.Table.hFD,x + pha + ldy Dev.Table.pFDLO,x + lda Dev.Table.pFDHI,x + plx + * clc .9 rts CC @@ -25,16 +28,16 @@ K.GetDevByID cmp DevMgr.DevCnt * **In:** * Y,A = Ptr to device name (C-String) * **Out:** -* CC = OK, CS = ERROR -* X = DEVID -* Y,A = FD +* CC = OK, CS = ERROR +* Y,A = FD +* X = DevID *\-------------------------------------- K.GetDevByName >STYA ZPPtr1 ldx #0 -.1 ldy FD.Table.PTRLO,x - lda FD.Table.PTRHI,x +.1 ldy Dev.Table.pFDLO,x + lda Dev.Table.pFDHI,x >STYA ZPPtr2 @@ -72,7 +75,7 @@ K.GetDev.9 rts */-------------------------------------- * # GetDevStatus * ## C -* `int getdevstatus ( int devid, S.DIB * dstat );` +* `int getdevstatus ( short int hFD, S.DIB * dstat );` * ## ASM * **In:** * `>PUSHWI S.DIB` @@ -85,7 +88,7 @@ K.GetDevStatus pha >PULLW K.S.IOCTL+S.IOCTL.BUFPTR pla - jsr K.GetDevByID + jsr K.GetMemPtr bcs K.GetDev.9 >STYA pFD @@ -114,6 +117,7 @@ K.GetDevStatus pha * A = DEVID *\-------------------------------------- K.MKDev >STYA .1+1 + ldx DevMgr.DevCnt cmp #K.DEV.MAX beq .9 @@ -124,14 +128,14 @@ K.MKDev >STYA .1+1 phx ldx DevMgr.DevCnt - sta FD.Table.PTRHI,x + sta Dev.Table.pFDHI,x tya - sta FD.Table.PTRLO,x + sta Dev.Table.pFDLO,x pla - sta FD.Table.hMem,x + sta Dev.Table.hFD,x .10 lda #$ff SELF MODIFIED - sta FD.Table.F,x + sta Dev.Table.F,x ldx #S.FD.DEV-1 @@ -139,7 +143,8 @@ K.MKDev >STYA .1+1 .2 sta $ffff,x SELF MODIFIED dex bpl .1 - + + lda DevMgr.DevCnt inc DevMgr.DevCnt rts diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 2e03e3bd..6fc6cba7 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -31,15 +31,25 @@ K.LoadTxtFile pha *\-------------------------------------- K.LoadFile clc ror FIO.bTXT - + jsr K.FOpen - bcs .9 - sta FIO.hFile + bcc .12 + rts - jsr FIO.GetSize - bcs .99 +.12 sta FIO.hFile - >LDYA FIO.FSize + pha + >PUSHWI K.S.Stat + pla + + jsr K.FStat + bcs .11 + + lda K.S.Stat+S.STAT.SIZE+3 + ora K.S.Stat+S.STAT.SIZE+2 + bne .10 + + >LDYA K.S.Stat+S.STAT.SIZE bit FIO.bTXT Add 1 to buffer size for ending 0 bpl .1 @@ -47,15 +57,16 @@ K.LoadFile clc bne .1 inc bne .1 - lda #K.E.FTB - bra .99 + +.10 lda #K.E.FTB +.11 bra .99 .1 jsr K.GetMem bcs .99 >STYA FIO.Mem stx .8+1 - >PUSHW FIO.FSize + >PUSHW K.S.Stat+S.STAT.SIZE >PUSHW FIO.Mem lda FIO.hFile jsr K.FRead @@ -97,45 +108,9 @@ K.LoadFile clc sec rts *-------------------------------------- -FIO.GetSize stz FIO.FPos - stz FIO.FPos+1 - stz FIO.FPos+2 - stz FIO.FPos+3 - - >PUSHWI FIO.FPos - >PUSHBI SYS.FSeek.END - >PUSHB FIO.hFile - jsr K.FSeek - bcs .99 - - >PUSHWI FIO.FPos - >PUSHB FIO.hFile - jsr K.FTell - bcs .99 - - lda FIO.FPos+2 - ora FIO.FPos+3 - bne .98 too big! - - >LDYA FIO.FPos - >STYA FIO.FSize - - stz FIO.FPos - stz FIO.FPos+1 - - >PUSHWI FIO.FPos - >PUSHBI SYS.FSeek.SET - >PUSHB FIO.hFile - jmp K.FSeek - -.98 lda #K.E.FTB -.99 rts -*-------------------------------------- FIO.bTXT .BS 1 FIO.hFile .BS 1 -FIO.FPos .BS 4 FIO.Mem .BS 2 -FIO.FSize .BS 2 */-------------------------------------- * # ChTyp * **In:** diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 4f1b1e20..ecd24d95 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -18,7 +18,7 @@ K.Open jsr PFT.CheckPathYA check if not /mnt K.Open.I jsr IO.SetMLIPathYA local pathname... - ldx #5 /DEV/ + ldx #5 $/DEV/ cpx K.MLI.PATH bcs K.Open.REG @@ -28,44 +28,47 @@ K.Open.I jsr IO.SetMLIPathYA local pathname... dex bne .1 -K.Open.DEV ldy #K.MLI.PATH+6 skip L/DEV/ - lda /K.MLI.PATH+6 +K.Open.DEV >LDYAI K.MLI.PATH+6 skip $/DEV/ jsr K.GetDevByName bcs .9 >STYA pFD - stx .8+1 DEVID + stx .1+1 DEVID ldy #S.FD.DEV.DRVPTR lda (pFD),y - sta .1+1 + sta .2+1 iny lda (pFD),y - sta .1+2 + sta .2+2 >PULLA get flags - lda .8+1 pass A=DEVID To Driver + +.1 lda #$ff SELF MODIFIED pass A=DEVID To Driver ldx #IOCTL.OPEN -.1 jsr $ffff SELF MODIFIED +.2 jsr $ffff SELF MODIFIED pDRV bcs .99 -.8 lda #$ff SELF MODIFIED + ldx .1+1 + lda Dev.Table.hFD,x .99 rts .9 >RET 1 discard flags K.Open.REG >LDYAI K.MLI.PATH >STYA K.MLI.PARAMS+1 - + bra * lda (pStack) * sta K.S.IOCTL >RET 1 *-------------------------------------- -* int close(int fd); +* int close(short int hFD); *-------------------------------------- K.Close jsr K.GetMemPtr + bcs .9 + >STYA pFD lda (pFD) #S.FD.T @@ -80,6 +83,10 @@ K.Close jsr K.GetMemPtr .DA STDIO.IOERR DSOCK .DA IO.CLOSE.SSOCK .DA IO.CLOSE.FIFO + +.9 lda #MLI.E.NODEV + sec + rts *-------------------------------------- IO.CLOSE.REG *-------------------------------------- @@ -94,9 +101,11 @@ IO.CLOSE.FIFO clc * ## C * `int read(int fd, void *buf, size_t count);` *\-------------------------------------- -K.Read jsr IO.SELECT - bcs K.Read.9 +K.Read jsr K.GetMemPtr + bcs K.Write.9 + >STYA pFD + >PULLW K.S.IOCTL+S.IOCTL.BUFPTR >PULLW K.S.IOCTL+S.IOCTL.BYTECNT @@ -112,14 +121,14 @@ IO.Read.I lda (pFD) #S.FD.T .DA STDIO.IOERR DSOCK .DA IO.READ.SSOCK .DA IO.READ.FIFO - -K.Read.9 >RET 4 *-------------------------------------- * int write(int fd, const void *buf, size_t count); *-------------------------------------- -K.Write jsr IO.SELECT +K.Write jsr K.GetMemPtr bcs K.Write.9 + >STYA pFD + >PULLW K.S.IOCTL+S.IOCTL.BUFPTR >PULLW K.S.IOCTL+S.IOCTL.BYTECNT @@ -136,20 +145,24 @@ IO.Write.I lda (pFD) #S.FD.T .DA IO.WRITE.SSOCK .DA IO.WRITE.FIFO -K.Write.9 >RET 4 +K.Write.9 lda #MLI.E.NODEV + >RET 4 *-------------------------------------- -IO.READ.REG clc - .HS B0 BCS +IO.READ.REG ldx #MLIREAD + .HS 2C BIT ABS *-------------------------------------- -IO.WRITE.REG sec - >PUSHW K.S.IOCTL+S.IOCTL.BYTECNT - >PUSHW K.S.IOCTL+S.IOCTL.BUFPTR +IO.WRITE.REG ldx #MLIWRITE ldy #S.FD.REG.REF lda (pFD),y - bcs .1 - - jmp K.FRead -.1 jmp K.FWrite + sta K.MLI.PARAMS+1 + >LDYA K.S.IOCTL+S.IOCTL.BUFPTR + >STYA K.MLI.PARAMS+2 + >LDYA K.S.IOCTL+S.IOCTL.BYTECNT + >STYA K.MLI.PARAMS+4 + + lda #4 Param Count = 4 for MLIREAD & MLIWRITE + jsr GP.MLICall + rts *-------------------------------------- IO.READ.CDEV ldx #IOCTL.READ .HS 2C BIT ABS @@ -223,19 +236,21 @@ IO.WRITE.FIFO ldy #S.FD.FIFO.S */-------------------------------------- * # IOCTL * ## C -* `int ioctl(int devid, int request, void * param );` +* `int ioctl(short int hFD, int request, void * param );` * ## ASM * **In:** * `PUSHWI param` * `PUSHBI request` -* `lda devid` +* `lda hFD` * `>SYSCALL IOCTL` * **Out:** * Y,A = ... *\-------------------------------------- -K.IOCTL jsr IO.SELECT +K.IOCTL jsr K.GetMemPtr bcs .9 + >STYA pFD + ldy #S.FD.DEV.DRVPTR lda (pFD),y sta .8+1 @@ -248,28 +263,19 @@ K.IOCTL jsr IO.SELECT >PULLYA param - .8 jmp $ffff SELF MODIFIED x = op -.9 >RET 3 +.9 lda #MLI.E.NODEV + >RET 3 */-------------------------------------- * # pipe * ## C * `int pipe(int pipefd[2]);` * ## ASM * **In:** -*\-------------------------------------- -IO.SELECT cmp DevMgr.DevCnt - bcs .9 - - tax - - ldy FD.Table.PTRLO,x - lda FD.Table.PTRHI,x - >STYA pFD - rts - -.9 lda #MLI.E.NODEV +*\-------------------------------------- +K.Pipe +.9 sec rts *-------------------------------------- IO.PullMLIPath >PULLYA diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index ba8d2237..f79e0f8a 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -190,13 +190,13 @@ K.IrqH.Switch inc IRQ.Tick *-------------------------------------- K.IrqH.DEV ldx #0 -.1 lda FD.Table.F,x +.1 lda Dev.Table.F,x and #S.DIB.S.IRQ beq .2 - lda FD.Table.PTRLO,x + lda Dev.Table.pFDLO,x sta $fe - lda FD.Table.PTRHI,x + lda Dev.Table.pFDHI,x sta $ff ldy #S.FD.DEV.DRVPTR diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 03f065a2..203dc238 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -12,7 +12,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.MKDir .DA K.MKNod .DA K.MKFIFO - .DA 0 + .DA K.FStat .DA 0 .DA K.OpenDir $10 diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 9dd26f0c..2bc99b68 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -4,16 +4,51 @@ AUTO 4,1 *-------------------------------------- * # FStat * Return information about a hfile -* ## ASM -* `int fstat(int fd, struct stat *statbuf);` +* ## C +* `int fstat(short int hFILE, struct stat *statbuf);` * ## ASM * **In:** -* PUSHW = PTR to S.STAT buffer -* PUSHB = hFile +* `>PUSHW statbuf` +* `lda hFILE` +* `>SYSCALL fstat` * **Out:** *-------------------------------------- -*jsr PFT.CheckNodeSTK +K.FStat jsr PFT.CheckNodeA + jsr K.GetMemPtr + bcs .9 + >STYA pFD + + lda #S.FD.REG + clc + adc pFD + tay + lda /S.FD.REG + adc pFD+1 + jsr K.Stat.I + bcs .99 + + ldy #S.FD.DIR.REF + lda (pFD),y + sta K.MLI.PARAMS+1 + >MLICALL MLIGETEOF + bcs .99 + + ldy #S.STAT.SIZE+3 + lda #0 + jsr K.Stat.StoreY + + ldx #2 + +.1 dey + lda K.MLI.PARAMS+2,x + jsr K.Stat.StoreY + dex + bpl .1 + +.99 rts + +.9 >RET 2 */-------------------------------------- * # Stat * Return information about a file @@ -27,7 +62,7 @@ AUTO 4,1 * **Out:** *\-------------------------------------- K.Stat jsr PFT.CheckPathYA - jsr STDIO.SetMLIPathYA +K.Stat.I jsr STDIO.SetMLIPathYA >PULLW K.Stat.StoreY+1 @@ -132,8 +167,8 @@ K.MKDir jsr PFT.CheckPathYA *\-------------------------------------- K.MkNod jsr K.GetDevByName Y,A=NAME bcs .9 - >STYA .1+1 - stx .2+1 + >STYA .1+1 pFD + stx .2+1 devID ldy #S.FD.T lda (pFD),y @@ -194,15 +229,15 @@ K.MKFIFO >LDYAI 256 bcs .9 - >STYA ZPPtr1 + >STYA pFD ldy #S.FD.T lda #S.FD.T.FIFO - sta (ZPPtr1),y + sta (pFD),y iny S.FD.FIFO.hMem .1 lda #$ff Self Modified - sta (ZPPtr1),y + sta (pFD),y txa clc rts diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 83c80df2..fa08af5f 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -5,7 +5,7 @@ AUTO 4,1 * # FPutC * Print A (char) to hFILE * ## C -* `int fputc ( int character, hFILE stream );` +* `int fputc ( hFILE stream , int character );` * ## ASM * **In:** * A : character @@ -32,7 +32,10 @@ K.PutChar sta K.IOBuf ldy #S.PS.hStdOut lda (pPs),y -K.PutChar.1 jsr IO.SELECT +K.PutChar.1 jsr K.GetMemPtr + bcs K.PutS.9 + + >STYA pFD ldx #1 @@ -59,7 +62,7 @@ K.PutS >STYA K.S.IOCTL+S.IOCTL.BUFPTR ldy #S.PS.hStdOut lda (pPs),y jsr K.FPutS.I - bcs .9 + bcs K.PutS.9 lda #13 sta K.IOBuf @@ -67,7 +70,7 @@ K.PutS >STYA K.S.IOCTL+S.IOCTL.BUFPTR sta K.IOBuf+1 ldx #2 bra K.PutChar.X -.9 rts +K.PutS.9 rts */-------------------------------------- * # FPutS * Write Str to FILE @@ -92,8 +95,10 @@ K.FPutS pha pla -K.FPutS.I jsr IO.SELECT - bcs * +K.FPutS.I jsr K.GetMemPtr + bcs K.PutS.9 + + >STYA pFD ldy #0 ldx #0 @@ -178,14 +183,20 @@ K.SPrintF >STYA pIOBuf Out Buffer >PULLW ZPPtr1 format bra K.PrintF.1 -K.FPrintF jsr IO.SELECT A = hFILE +K.FPrintF jsr K.GetMemPtr A = hFILE + + + >STYA pFD + >PULLW ZPPtr1 format bra K.PrintF.0 K.PrintF >STYA ZPPtr1 format ldy #S.PS.hStdOut lda (pPs),y - jsr IO.SELECT + + jsr K.GetMemPtr + >STYA pFD K.PrintF.0 >LDYAI K.IOBuf >STYA pIOBuf @@ -610,7 +621,10 @@ PrintF.Flush jmp IO.Write.I * Y,A: s * CC = success *\-------------------------------------- -K.FGetS pha +K.FGetS pha save hFILE + + >PULLW ZPPtr1 s + >PULLA sec sbc #2 @@ -621,10 +635,11 @@ K.FGetS pha eor #$ff sta ZPPtr2+1 !n - >PULLW ZPPtr1 s pla - jsr IO.SELECT - bcs .9 + jsr K.GetMemPtr + bcs .99 + + >STYA pFD jsr K.GetC.I bcs .9 @@ -652,7 +667,7 @@ K.FGetS pha lda #0 sta (ZPPtr1) pla - rts +.99 rts */-------------------------------------- * # GetChar * Get char from StdIn @@ -676,9 +691,11 @@ K.GetChar ldy #S.PS.hStdIn * CC = success * A = char *\-----------a--------------------------- -K.GetC jsr IO.SELECT +K.GetC jsr K.GetMemPtr bcs K.GetC.9 + >STYA pFD + K.GetC.I >LDYAI K.IOBuf >STYA K.S.IOCTL+S.IOCTL.BUFPTR lda #1 @@ -705,7 +722,10 @@ BCDBUF .EQ ARG * `int sscanf ( const char * s, const char * format, ... );` * ## ASM * **In:** -* `>PUSHBI Argument Byte count` +* `>PUSHW ptr` +* `...` +* `>PUSHBI bytecount` +* `>PUSHWI format` * + %i : short int * + %d : byte * + %I : int @@ -715,19 +735,17 @@ BCDBUF .EQ ARG * + %h : HEX byte * + %H : HEX word * + %s : string -* `>PUSHW ptr` -* `...` -* `>PUSHBI bytecount` -* `>PUSHWI format` +* TODO : %10s * `>LDYA s` * **Out:** -* Y,A = Number of arguments filled. +* A = Number of arguments filled. *\-------------------------------------- K.SScanF >STYA ZPPtr2 String to Scan >PULLW ZPPtr1 format - stz .5+1 - + stz .5+1 reset LStack Ptr + stz .80+1 rest Arg processed + .1 lda (ZPPtr1) End Of format? beq .8 @@ -735,9 +753,12 @@ K.SScanF >STYA ZPPtr2 String to Scan bne .11 inc ZPPtr1+1 -.11 cmp #'%' Escape? +.11 cmp #'%' Escape ? beq .2 + cmp #' ' Space ? + beq .12 + cmp (ZPPtr2) Same char in string? bne .9 @@ -746,6 +767,14 @@ K.SScanF >STYA ZPPtr2 String to Scan inc ZPPtr2+1 bra .1 +.12 inc ZPPtr2 Space.... + bne .14 + inc ZPPtr2+1 + +.14 cmp (ZPPtr2) another one ? + beq .12 + bne .1 + .2 lda (ZPPtr1) Get specifier after % beq .9 unexpected End of format after "%" ? @@ -775,9 +804,11 @@ K.SScanF >STYA ZPPtr2 String to Scan sec ByteCnt byte adc (pStack) ... ByteCnt sta pStack CC + +.80 lda #$ff SELF MODIFIED Arg porcessed .99 rts *-------------------------------------- -.5 lda #$FF SELF MODIFIED +.5 lda #$FF SELF MODIFIED LStack Ptr cmp (pStack) beq .99 CS @@ -790,7 +821,8 @@ K.SScanF >STYA ZPPtr2 String to Scan lda (pStack),y sta ZPPtr3+1 get VAR Ptr sty .5+1 - + + inc .80+1 parsed one more arg! jmp (K.SScanFJMP,x) *-------------------------------------- K.SScanFTBL .DA #'i,#1,#'d,#1,#'I,#2,#'D,#2,#'l,#4,#'u,#4,#'h,#1,#'H,#2,#'s,#2 @@ -838,15 +870,16 @@ K.SScanF.S ldy #$ff lda (ZPPtr2),y sta (ZPPtr3),y beq K.SScanF.Fwd - cmp #' ' + eor #' ' bne .1 - iny + sta (ZPPtr3),y K.SScanF.Fwd tya Y=char count parsed clc adc ZPPtr2 sta ZPPtr2 bcc .8 + clc inc ZPPtr2+1 .8 rts */-------------------------------------- @@ -910,16 +943,34 @@ K.FOpen jsr PFT.CheckPathYA bcc K.FOpen.10 K.FOpen.9 rts -K.FOpen.10 >LDYAI S.FD.REG +K.FOpen.10 lda #S.FD.REG + sec + adc K.MLI.PATH + tay + lda #0 + jsr K.GetMem0 bcs K.FOpen.9 - >STYA ZPPtr1 + >STYA pFD stx .8+1 + ldx #0 + ldy #S.FD.REG + +.1 inx + lda K.MLI.PATH,x + sta (pFD),y + iny + cpx K.MLI.PATH + bne .1 + + lda #0 + sta (pFD),y + * ldy #S.FD.T Done by GetMem0 * lda #S.FD.T.REG -* sta (ZPPtr1),y +* sta (pFD),y jsr STDIO.SetIOBUF bcs .98 @@ -929,7 +980,7 @@ K.FOpen.10 >LDYAI S.FD.REG lda K.MLI.PARAMS+5 get ref_num ldy #S.FD.REG.REF - sta (ZPPtr1),y + sta (pFD),y sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based @@ -990,16 +1041,16 @@ K.FClose jsr PFT.CheckNodeA sta .8+1 jsr K.GetMemPtr - >STYA ZPPtr1 + >STYA pFD ldy #S.FD.REG.REF - lda (ZPPtr1),y + lda (pFD),y beq .1 sta K.MLI.PARAMS+1 >MLICALL MLICLOSE -.1 ldy #S.FD.REG.IOBUF - lda (ZPPtr1),y +.1 ldy #S.FD.REG.IOBUF + lda (pFD),y beq .8 jsr K.FreeMem @@ -1033,7 +1084,7 @@ K.FRead jsr PFT.CheckNodeA * `>PUSHW ptr` * `lda hFILE` * `>SYSCALL fwrite` -* # Out: +* **Out:** * Y,A = Bytes Written *\-------------------------------------- K.FWrite jsr PFT.CheckNodeA @@ -1063,24 +1114,22 @@ K.FFlush jsr PFT.CheckNodeA * # FSeek * Set the file-position indicator for hFILE * ## C -* `int fseek(hFILE stream, long offset, int whence);` +* `int fseek(hFILE stream, long offset, short int whence);` * ## ASM * **In:** -* PUSHW = Ptr to Offset (DWORD) -* PUSHB = From -* PUSHB = hFILE +* `>PUSHBI whence` +* `>PUSHL offset` +* `lda stream` +* `>SYSCALL fseek` *\------------------------------------- -K.FSeek jsr PFT.CheckNodeSTK - >PULLA +K.FSeek jsr PFT.CheckNodeA jsr STDIO.GetRefNum >PULLA FROM tax - >PULLW ZPPtr1 + >PULLW ZPPtr1 offset LW + >PULLW ZPPtr2 offset HW cpx #SYS.FSeek.END+1 bcs .98 - txa - asl - tax jmp (.1,x) @@ -1108,7 +1157,7 @@ K.FSeek jsr PFT.CheckNodeSTK clc .81 lda K.MLI.PARAMS+2,y - adc (ZPPtr1),y + adc ZPPtr1,y sta K.MLI.PARAMS+2,y iny @@ -1177,27 +1226,23 @@ K.FEOF.MARK .BS 3 * `long ftell(hFILE stream);` * ## ASM * **In:** -* PUSHW = Ptr to Offset (DWORD) -* PUSHB = hFILE +* `lda stream` +* `>SYSCALL ftell` * **Out:** -* Offset = Offset +* On stack (long) *\-------------------------------------- -K.FTell jsr PFT.CheckNodeSTK - >PULLA +K.FTell jsr PFT.CheckNodeA jsr STDIO.GetRefNum - >PULLW ZPPtr1 >MLICALL MLIGETMARK bcs .9 - ldy #3 - lda #0 - sta (ZPPtr1),y + >PUSHA + + ldy #2 - dey - .1 lda K.MLI.PARAMS+2,y - sta (ZPPtr1),y + >PUSHA dey bpl .1 @@ -1212,13 +1257,17 @@ K.Remove jsr PFT.CheckPathYA */-------------------------------------- * # Rename * Rename a file +* ## C +* `int rename(const char *oldpath, const char *newpath);` +* ## ASM * **In:** -* PUSHW = New Name -* PUSHW = Old Name +* `>PUSHW newpath` +* `>LDYA oldpath` +* `>SYSCALL rename` * **Out:** *\-------------------------------------- -K.Rename jsr PFT.CheckPathSTK - jsr STDIO.PullMLIPath +K.Rename jsr PFT.CheckPathYA + jsr STDIO.SetMLIPathYA >PULLW .1+1 ldy #0 @@ -1264,13 +1313,13 @@ STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call txa ldy #S.FD.REG.IOBUF - sta (ZPPtr1),y + sta (pFD),y .9 rts *-------------------------------------- STDIO.GetRefNum jsr K.GetMemPtr - >STYA ZPPtr1 + >STYA pFD ldy #S.FD.REG.REF - lda (ZPPtr1),y + lda (pFD),y sta K.MLI.PARAMS+1 rts *-------------------------------------- diff --git a/SYS/KM.APPLETALK.S.txt b/SYS/KM.APPLETALK.S.txt index 2da3102f..dfdbabc0 100644 --- a/SYS/KM.APPLETALK.S.txt +++ b/SYS/KM.APPLETALK.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/SYS/KM.NSC.S.txt b/SYS/KM.NSC.S.txt index d53b3f49..813904c8 100644 --- a/SYS/KM.NSC.S.txt +++ b/SYS/KM.NSC.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/SYS/KM.RAMWORKS.S.txt b/SYS/KM.RAMWORKS.S.txt index 64a17bba..ea7866bb 100644 --- a/SYS/KM.RAMWORKS.S.txt +++ b/SYS/KM.RAMWORKS.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 diff --git a/X.ERRORS.S.txt b/X.ERRORS.S.txt index 959ebecd..3bdb6bc1 100644 --- a/X.ERRORS.S.txt +++ b/X.ERRORS.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF *-------------------------------------- ERR.Codes .DA #MLI.E.IO diff --git a/_MAKEBOOT.txt b/_MAKEBOOT.txt index 78104964..dabba94e 100644 --- a/_MAKEBOOT.txt +++ b/_MAKEBOOT.txt @@ -1,8 +1,6 @@ -PR#3 NEW -INC 1 -AUTO 6 PREFIX /A2OSX.BUILD +AUTO 4,1 echo \fBuilding A2OSX.BOOT Media... format S6D1 A2OSX.BOOT echo Copying Files... diff --git a/_MAKEDEV.txt b/_MAKEDEV.txt index 7da6dde6..917461ad 100644 --- a/_MAKEDEV.txt +++ b/_MAKEDEV.txt @@ -1,8 +1,6 @@ -PR#3 NEW -INC 1 -AUTO 6 PREFIX /A2OSX.BUILD +AUTO 4,1 echo \fBuilding A2OSX.DEV Media... format S6D2 A2OSX.DEV echo Copying Files... diff --git a/_RUN.txt b/_RUN.txt index 5dc36321..ad1b1a84 100644 --- a/_RUN.txt +++ b/_RUN.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 PREFIX /A2OSX.BUILD -A2OSX.SYSTEM MAN