From 3e44afae7c951b87a9b182813cea520b83020485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 13 Apr 2017 22:59:25 +0200 Subject: [PATCH] Kernel version 0.9 : Few bytes saved in Kernel, SSC Drivers now updating KCONFIG Block --- DRV/SSC.DRV.S.txt | 28 +++++++++++++++++++--------- DRV/SSC.I.DRV.S.txt | 33 ++++++++++++++++++++++----------- Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes README.md | 12 +++++++----- SBIN/KCONFIG.S.txt | 4 ++-- SYS/KERNEL.S.DRV.txt | 30 +++++++++++++----------------- SYS/KERNEL.S.FILE.txt | 34 ++++++++++++++++++---------------- SYS/KERNEL.S.LIB.txt | 12 +++++------- 10 files changed, 86 insertions(+), 67 deletions(-) diff --git a/DRV/SSC.DRV.S.txt b/DRV/SSC.DRV.S.txt index d93e531f..ac22974c 100644 --- a/DRV/SSC.DRV.S.txt +++ b/DRV/SSC.DRV.S.txt @@ -35,15 +35,20 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO L.DEV.HEADER.NAME .DA DEV.HEADER.NAME .DA 0 End Of Reloc Table *-------------------------------------- -Dev.Detect sta hArgs +Dev.Detect >STYA ARGS >LDYA L.MSG.DETECT - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA stz ZPTmpPtr1 lda #$C1 sta ZPTmpPtr1+1 -.1 ldx #DEVSIG.Length-1 +.1 and #$0f + tay + lda A2osX.SLOTS,y + bne .3 + + ldx #DEVSIG.Length-1 .2 ldy DEVSIG.Offset,x lda (ZPTmpPtr1),y @@ -59,7 +64,7 @@ Dev.Detect sta hArgs bne .1 >LDYA L.MSG.DETECT.KO - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA lda #MLI.ERR.NODEV Not Found in any slot, exiting sec @@ -67,6 +72,11 @@ Dev.Detect sta hArgs .4 lda ZPTmpPtr1+1 and #$0F + pha + tay + lda #A2osX.SLOTS.COM + sta A2osX.SLOTS,y + pla ora #$30 sta DEV.HEADER.NAME+4 asl @@ -77,7 +87,7 @@ Dev.Detect sta hArgs >PUSHW L.DEV.HEADER.NAME >LDYA L.MSG.DETECT.OK - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA clc rts *-------------------------------------- @@ -85,10 +95,10 @@ CS.END DEVSIG.Offset .HS 05070B0C DEVSIG.Value .HS 38180131 DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset -MSG.DETECT >CSTR "Apple SSC (Super Serial Card,//c Serial Port) Driver.\r\n" -MSG.DETECT.OK >CSTR "SSC Installed As Device : %S\r\n" -MSG.DETECT.KO >CSTR "No SSC Found.\r\n" -hArgs .BS 1 +MSG.DETECT >PSTR "Apple SSC (Super Serial Card,//c Serial Port) Driver.\r\n" +MSG.DETECT.OK >PSTR "SSC Installed As Device : %S\r\n" +MSG.DETECT.KO >PSTR "No SSC Found.\r\n" +ARGS .BS 2 *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- diff --git a/DRV/SSC.I.DRV.S.txt b/DRV/SSC.I.DRV.S.txt index 062b78a8..3159afbc 100644 --- a/DRV/SSC.I.DRV.S.txt +++ b/DRV/SSC.I.DRV.S.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.BUILD -NEW +LOMEM $A00 INC 1 AUTO 6 .LIST OFF @@ -38,15 +38,21 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO L.DEV.HEADER.NAME .DA DEV.HEADER.NAME .DA 0 End Of Reloc Table *-------------------------------------- -Dev.Detect sta hArgs +Dev.Detect >STYA ARGS + >LDYA L.MSG.DETECT - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA stz ZPTmpPtr1 lda #$C1 sta ZPTmpPtr1+1 -.1 ldx #DEVSIG.Length-1 +.1 and #$0f + tay + lda A2osX.SLOTS,y + bne .3 + + ldx #DEVSIG.Length-1 .2 ldy DEVSIG.Offset,x lda (ZPTmpPtr1),y @@ -62,7 +68,7 @@ Dev.Detect sta hArgs bne .1 >LDYA L.MSG.DETECT.KO - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA lda #MLI.ERR.NODEV Not Found in any slot, exiting sec @@ -70,6 +76,11 @@ Dev.Detect sta hArgs .4 lda ZPTmpPtr1+1 and #$0F + pha + tay + lda #A2osX.SLOTS.COM + sta A2osX.SLOTS,y + pla ora #$30 sta DEV.HEADER.NAME+4 asl @@ -80,7 +91,7 @@ Dev.Detect sta hArgs >PUSHW L.DEV.HEADER.NAME >LDYA L.MSG.DETECT.OK - >SYSCALL CPrintFYA + >SYSCALL PPrintFYA clc rts *-------------------------------------- @@ -88,10 +99,10 @@ CS.END DEVSIG.Offset .HS 05070B0C DEVSIG.Value .HS 38180131 DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset -MSG.DETECT >CSTR "Apple SSC (Super Serial Card,//c Serial Port) Driver (IRQ Enabled).\r\n" -MSG.DETECT.OK >CSTR "SSC Installed As Device : %S\r\n" -MSG.DETECT.KO >CSTR "No SSC Found.\r\n" -hArgs .BS 1 +MSG.DETECT >PSTR "Apple SSC (Super Serial Card,//c Serial Port) Driver (IRQ Enabled).\r\n" +MSG.DETECT.OK >PSTR "SSC Installed As Device : %S\r\n" +MSG.DETECT.KO >PSTR "No SSC Found.\r\n" +ARGS .BS 2 *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- @@ -319,5 +330,5 @@ STAT .DA #S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ+S.DEV.S.IRQ .DA $0900 *-------------------------------------- MAN -SAVE /A2OSX.SRC/DRV/SSC.DRV.I.S +SAVE /A2OSX.SRC/DRV/SSC.I.DRV.S ASM diff --git a/Floppies/A2OSX.BOOT.po b/Floppies/A2OSX.BOOT.po index 85e9fbf79c694fa3be9b284574472483345dfbc7..ff77a4d12134c8a2ca967fbe99613325ec869131 100644 GIT binary patch delta 4894 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 H@@M}A(k>ht delta 4741 zcmbtYdsGuw8ox6M2?&M=KB6Mrgjm4_#1}@?YAaZPce|cgWerF~t$mzRE40d4 zU>O#e?Luwzq}jE{VHp~5Pi^-|i>=23wQYb-GD;HPRH|Ss)<;jb?l+TwJbKRlv6I97 z?&JG?kKes_=3YuJ1(sY2v_(ouGK|L3xxr*uG`flqrGa*qG-8pjog=hK)RVk17ma#C za}j|MDQXKaQH?%29`v9MmK)ovMn!-Jrq-Qpc}>;U+*p@4xwX6 zzZaFFYO;?wM*IWe>8-X9e9>)_@1!At7z0xf>x#D*Mntmtr&wrd9qUdRF zMt}hdC)3e8VzfzI3ra0m508bcA&s$7?KLEu#C4=FXnq=zA6`pR%ju#W5x>)M%sMKL zYt(UU9CvOxXAk%)iSy3Gp`56>-k48x$g9bIdFo)CpwhA3-oqe34C=U&4hz{#Hnc`@ z_Rz-V9N2#hdn1azz9Xhs$CW7`m=iejLXOpO)FMvbUy=%DsKs3WZ&KNKj#|R?qf~YQ zl+`n-1)PzJhrc-Z({Y0doV{akA!k2hG#brIIddY%F5)OX7+IOhf&~By@akz`#Rw*i z;9zhmXForf$l1R&8rfn!XOY#A=4BkabOe|v0INf&M9^Q#4KCyCSB$KlD+7j>iDd$( z%9p0H3%Puh_Nc)qI+WWU+_3)$Y8H77$%IqO1>Talk+j(auHPhJ`U%KmA(&3!29st9 zqyS~-%}LxKklSTsmvgnGgrQU&{zqj44eUjC|x)efA_+jdyn83}0Gwy*&Tn0^Ev*cJ3o z`3b}d`pJShs?`o*DS>i^uxZ4-f;(K)4%$#K@97SgwX-A;+LebL)-Q1pZ#m33z*i-y zU@Xnwg`giGh%Z~TeOlPM?FG8x4i_M;Uoiw|8eq^j#6y||PBFio zK2hisCZE^^f-P{`gUzJEEK!)HijvtKgng3r8-^58R~R}-d%U$vY}vFdsW9zy0&%QF zVJdVAgh&-8larDbD{R5muSGQj^No%<_c%=4i@d`{=5|dBjcn!@}s*Fj3QnCo050QS40~W@gm1jLgkV9>-l1-b1kC zkXN4m9j!9W&l=>-w|VmrZ$ZsuY^Zn2;1I9RUt=2NsX@M4GI*P>SLG{@S6{&yy|!;! z1eI+KSm~NYg(;W?RJg)IG?VXyE1;{r(|#8Z(Y2=JS?=CrB*02Zc-Kk39^&nPvd9=^ z4PpmquL%>k=qbArpT5JFbt>Ups8YNS}vFQ%)_w42Ep9z5*e7F{=cWtbhJHldkXQc7Sh4kGq!2-r|Lqt^qz9w|ViiF(?XV z4SYP3uGr*N1AM9ckj!8ubXKwgSY_g&=(PU?%>JclnoQ?vmY!NdHx$K(&2*jBG77;6 zv!_wD_g#h-ZPk4jb}Ycy{6Xd2cX~WF%Ce#$72a>MyfniO2UULk0_PkiyqeP zZgjb=S;9v;lJ&T8lDOhqP!O&~6&49BL65ru>Fg?7_=Emu#;`?BYDE%Oi9-1TB?`^H5IDaZockJQPnS?KQ|9p0r1)EJwe$ zcadCrk>x#&PWr;$*p+Ti4T6A89*`EL4)z^tXrF?-;bj#n)9AtWlI!()NKZU4w4n73 zttIs8muBGeo@NBDt7lc*>J_Rkk1ezUkY#?mCti8!UT9o#_towPE@jX6J<&Y~t>D%; z-gQ_Vyra)i-=J(8sNEi`Muz2z=fc{iz%6g0`$$f_ipufl_!=hFu=?&{b_#A(V(U6s z3ES<=>C!H%W+R^ehCi2Li+n~V& zAE{_-EpJQsB}Qckd<}YF5UNlSdt(E=0j*_|+EfMx=?$q(2k19HD5jO<)D~Nyz()Wv zjR+#jaToppD+NBJ>i?IIsXjg;HRJd=^X&iNW19NKQG6^`FA#q#pj@Tit}aqnsXtf$ zUE^m&r*3>wWCW6q)Iic^tT9Jv%o>eZtr6K_CJWS*3GDc|5!J+MaZ{A$7S?!`t6O*~10YZ?5A;T#Dr;-PnhHTNO5hU4Y+7;gJ>+M5^@0T6Z6{L1k9Gw`VnbuBdw>T*0ZGbGZMO_w6t@UxbHfLFP`Eh zh|cO9bLGlIs`RvHo?Z8R{01MnNVW^Ef`?$LN8g?3qn%@}TzP0dz;f1RrDgenvVBO2 zHb;zw<@v5$=OU9JlsYUU#>7&WB_qZJa}Z5W%Y(2m$>~FBslg7O_>TXTMi7AZ29Yz5tNH#W$x+FO!o2Nu@5BHqcxC1WoSc%Iwl?LdlWj4? zmS~Zh^zqcBkEP~)6qc3!I8GtOe*!h9Cr~p1H*aIs+T=|cS;Jsi3s7@?0yPtHa1Y;< zla@Y$`v`E6V_%+Obx9fHsTtou4F-4ltR)sd*Sn#=u(cN^2x9U?{;2IGQGHm}VOHtfUa8 z>5u;C?(99g_q@+{?!D`BSzRux|F&FC=}R^A9r-SzTth#nC?pCrbiLvWn4Yhpcc-nF zRpb%9I8llBs7mDcA9_o(vJR_#IQF)lR2N`3FhuFC8hTTwsSw+|d8K)+dDYLim^ZFp zg<)ywxC{#r7^TnEU`ffj8v29IO$$u-C9%YnrUFS$lANtc*(}v;rg0+PD?iH0^D=Nb zc0qx?t4A|Z>~c--fbUIQ&6YwSi^$Y$fu?uUF`E)6>4xLWWqC}T9zH$~-`4xZaV87D zNxygI_1qHP|2h>M@e=5_BmUiNa0G3mA3pmFoThi3)!{b!y|borF^oWL9*CVcfJB=C z9S-{y=){QDVV5*)VW-V;#Gu_NuQk{l$rR95`s=eLHE)EP_J%wZbKUzE!utGAo;S1^ z+NA+3y%9=~y+9Do`EAXwh0u+d-&SkdXKa2c1bpA#P%XX>JA&C>!)mb>;ud}c{|G~x zK7SS(8uu$vRfxeL2xc1n=7uvxqzI@hp{B8rr?uvL$Lk+-d?o34EalkJ97;Gw%>yAy zIogyq+UUiQVifFiA!b@iav<~{4(zD%rWBe7@5UEeL}HCDa{v%k0wE)UU4I8E~dtpsc3gR2>A(OSGJw~e5d@E)QY>jG7eyp;$v!oy&# z1S7LExs-ut9;XUW(16VkOIoEJ5!+V(_qx6>aEEyTn0g`t9F0N||e0nADP$c6<# z<^fplV-proadNYOH6B;457EUJ7Ht|6+*bs*D0r}L!jv7)nGywC)$-~wff^H9WK&m! zc5RjVXv+k$Mg5n1B#{@o(6`aq)J&3DOy!cW^ALw}Ntg-@abF{m{^NyJvjfp11gO;# zuvf}1i2}FZlg6l_Z3J2|jPMA(V7PomOsF4He*^xw{Hd#gYbIJ8wK+UWudEyENb*=w zfJMb#h4JWZP8NvA*l~f13eZGS*mTG6yqX^Zl_Xp_;J7*_q&!Cj?u-<;BdOOTkFPYv zgK~41&Co1qpk`wL?N!d z6cysRN8|}VHS(6OTMAcaB6z5Ms>EKIN7)w>S}`d_;IV?xwZ8bKos9_64(@8mHH0kP?v_`oU1 zq$L8z6T%Pb+~WMNHV4P;?bYW*>b&Tz9uTQPu`v~iz1?;f<^!VhF3bl-kE$Ef?!;;d zIJpEb80a=ieg{PM_t#Sn*>|odU9#uJ#8kh?4vNy$X-P_3-7ivS#G@*Zt3EAKXX%Zc zLwQv29yYbF>>2*-_XE#;{#QK!!-gig-kzM>| zC>pvEQ;klH&Kbq965bZ3!-vCMSPXBA?27mzeUY0H4672Z3AV7Y_t^Dw3j9TS*XM`v z7kbItf0NN_Vph+cj}AY)cEe`)lSI;=qC}ULTP#Hziflzoik_NLaPo8=zGi>T0W1@r zgYU-ND2%>A8XdGnhOQ}H$L1iP8hKX%AUinbbnS>K`{<|lKI3w{vQr08H#gpnIK`0q zD_8!lks~9)0C$z0g?xEQ4aNvRcc5WE%3M2i?=xq*g_^C)fQxF=!E(w+i4M{L(XhG5 zH#4cFbtsgXSvD=cWa+^Ml30qPgClAJ)#Pk=Mals^{>tkw?=U~}+A}X>nDEvdowPZ_ zC11JmXGZ)|V)6tL&gWDXeMdw?r(>k<{V{JOso(~%OnRy-W_QMC0 z+0oeF*U)eI&Zu>$_P`7<;T2vIvv8^^`ZDYLwGIZeIqb*U4pwIqHN@d`_^TG0(c+7 zO?W!)MmLc{XOQ64>YDQZ@9-Lv@LKi%3%qL%HmHd;DR{U4cX&;@=O2J~jc#S)-U#Cp zx;?sgbY5LVcT%4Mc)8BEECDcJXw?IT?oz$GMDH%wyUPx4$|3S=60=E=OZ0b2^>KAy zh5q(6z{ra=m*|0Glpt2^ISK~Ya{a|JJ(mN(n$&S+JHQD7FxxfTvfUU{%piltU5 p_))7of!9^a>MG@Rm5RE`w7N=VU8Sn7GQF-cqpmWuvoh=Pe*>_}NVfn0 delta 4351 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 diff --git a/README.md b/README.md index 48881dde..daa1be79 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Several subprojects are now indentified : + Hardware Support : adding drivers to support more & more hardware (RAM cards, storage....) + Z80 support : Kernel could pass control to any Z80 detected on the system. -+ TCPIP stack : TCP still missing! ++ TCP/IP stack + AppleTalk Support + GUI & Printing + Archive, Disk Image transfer tools (ADT client!)... @@ -79,11 +79,13 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | INSDRV | Working | | 0.9 | | GETTY | Working | | 0.9 | | LOGIN | In Progress | no auth using /etc/passd yet | 0.9 | -| SHELL | Working | (See Internal Shell commands) | 0.9 | -| TCPIP | In Progress | New Socket API. ARP,IP,ICMP,UDP ok, TCP in progress | 0.9 | +| SHELL | Working | Kernel Configuration Utility | 0.9 | +| KCONFIG | Working | (See Internal Shell commands) | 0.9 | +| ---- | ------ | ------- | -----:| +| TCPIP | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 | | DHCPCLNT| Working | rewritten to use new Socket API | 0.9 | -| TELNETD | | | | -| HTTPD | | | | +| TELNETD | In Progress | | 0.9 | +| HTTPD | In Progress | | 0.9 | ## Internal Shell commands: diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index b95b417e..e7e2ed77 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -350,10 +350,10 @@ MSG.KCONF >PSTR "\e[2;1H------ Actual Kernel Configuration ------\r\n" MSG.FCONF >PSTR "\e[13;1H------ KCONFIG File Configuration ------\r\n" MSG.HZ >PSTR " Machine Timing : %d0 Hz\r\n" MSG.CHROOT >PSTR " CHRoot to /RAMx : %S\r\n" -MSG.ENABLED >PSTR "Enabled" +MSG.ENABLED >PSTR "Enabled " MSG.DISABLED >PSTR "Disabled" MSG.SLOT >PSTR " Slot #%d : %S\r\n" -MSG.SLOT.NODEV >PSTR "" +MSG.SLOT.NODEV >PSTR " " MSG.SLOT.Z80 >PSTR "Z80 CPU Board" MSG.SLOT.VSD >PSTR "SSC Shared Driver for VSDRIVE" MSG.SLOT.ATK >PSTR "AppleTalk Board" diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 0342ab1b..9282298d 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -14,21 +14,21 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray >LDYAI ENV.DRV push ENVNAME=DRV >SYSCALL GetEnvYA get value for ENV=DRV - bcs .99 + bcs .9 >PUSHYA Push $DRV value >PUSHW K.LoadDrv.CmdArray (ARG[0] = DRVNAME) - jsr K.FileSearch find libname in $DRV - bcs .99 - stx K.LoadDrv.hFullName - + jsr K.FileSearch find Driver in $DRV + bcs .9 + stx .99+1 + jsr K.LoadExeYA Y,A =filename full path bcs .98 >STYA pDrv - stx K.LoadDrv.hMem + stx .97+1 >LDYA K.LoadDrv.CmdArray Advance to ARG[1] >STYA ZPPtr1 @@ -43,34 +43,30 @@ K.LoadDrvYA >STYA K.LoadDrv.CmdArray .1 >LDYA ZPPtr1 jsr pDrvJmp call Dev.Detect - - bcs .97 + bcs .96 jsr BIN.InstallDRV - - bcs .97 + bcs .96 - jsr .97 Cleanup... + jsr .96 Cleanup... lda #0 Make sure RC = 0 if success clc -.99 rts +.9 rts -.97 pha - lda K.LoadDrv.hMem +.96 pha +.97 lda #$ff jsr K.FreeMemA pla .98 pha - lda K.LoadDrv.hFullName +.99 lda #$ff jsr K.FreeMemA pla sec rts *-------------------------------------- K.LoadDrv.CmdArray .BS 2 -K.LoadDrv.hFullName .BS 1 -K.LoadDrv.hMem .BS 1 *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index f64115ad..8c68da48 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -237,13 +237,12 @@ K.FFlushA jsr PFT.CheckNodeA K.FSeek jsr PFT.CheckNodeSTK >PULLA jsr FILE.SetupPrt1A - >PULLB K.FSeek.FROM + >PULLA FROM + tax >PULLW K.FSeek.OFFSET >PULLW K.FSeek.OFFSET+2 - lda K.FSeek.FROM - -* cmp #SYS.FSeek.SET =0 + cpx #SYS.FSeek.SET bne .1 stz K.MLI.PARAMS+2 @@ -251,26 +250,30 @@ K.FSeek jsr PFT.CheckNodeSTK stz K.MLI.PARAMS+4 bra .8 -.1 cmp #SYS.FSeek.CUR +.1 cpx #SYS.FSeek.CUR bne .2 >MLICALL MLIGETMARK bcc .8 rts -.2 cmp #SYS.FSeek.END +.2 cpx #SYS.FSeek.END bne .98 >MLICALL MLIGETEOF bcs .9 -.8 lda K.MLI.PARAMS+2 - adc K.FSeek.OFFSET - sta K.MLI.PARAMS+2 - lda K.MLI.PARAMS+3 - adc K.FSeek.OFFSET+1 - sta K.MLI.PARAMS+3 - lda K.MLI.PARAMS+4 - adc K.FSeek.OFFSET+2 - sta K.MLI.PARAMS+4 +.8 ldx #0 + ldy #3 + + clc + +.81 lda K.MLI.PARAMS+2,x + adc K.FSeek.OFFSET,x + sta K.MLI.PARAMS+2,x + + inx + dey + bne .81 + bcs .99 Offset out of range! >MLICALL MLISETMARK @@ -283,7 +286,6 @@ K.FSeek jsr PFT.CheckNodeSTK sec rts *-------------------------------------- -K.FSeek.FROM .BS 1 K.FSeek.OFFSET .BS 4 */-------------------------------------- * # FTellA diff --git a/SYS/KERNEL.S.LIB.txt b/SYS/KERNEL.S.LIB.txt index 1101d4e2..aed423a7 100644 --- a/SYS/KERNEL.S.LIB.txt +++ b/SYS/KERNEL.S.LIB.txt @@ -22,12 +22,12 @@ K.LoadLibYA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch jsr K.FileSearch find libname in $LIB bcs .99 - stx K.LoadLib.hFullName + stx .9+1 jsr K.LoadExeYA Y,A=filename full path bcs .98 - stx K.LoadLib.hMem + stx .8+1 >STYA LIB.Jump+1 txa Pass hLib to LibLoad @@ -38,17 +38,17 @@ K.LoadLibYA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch jsr .98 Cleanup... - lda K.LoadLib.hMem +.8 lda #$ff hLib clc rts .97 pha - lda K.LoadLib.hMem + lda .8+1 jsr K.FreeMemA pla .98 pha - lda K.LoadLib.hFullName +.9 lda #$ff jsr K.FreeMemA pla @@ -56,8 +56,6 @@ K.LoadLibYA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch .99 rts *-------------------------------------- K.LoadLib.Name .BS 2 -K.LoadLib.hFullName .BS 1 -K.LoadLib.hMem .BS 1 *-------------------------------------- * K.UnloadLibA * in :