From 5d0ce8f1e4c906e3f910321c2d192c3fe764afc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 12 Sep 2019 08:39:47 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes INC/IO.I.txt | 10 ++- INC/MONITOR.I.txt | 9 ++- ProDOS.203/ProDOS.S.DiskII.txt | 2 +- ProDOS.203/ProDOS.S.GP.txt | 32 ++++---- ProDOS.203/ProDOS.S.IRQ.txt | 6 +- ProDOS.203/ProDOS.S.LDR.A.txt | 130 +++++++++++++++++---------------- ProDOS.203/ProDOS.S.LDR.B.txt | 64 ++++++++-------- ProDOS.203/ProDOS.S.RAM.txt | 6 +- ProDOS.203/ProDOS.S.RAMI.txt | 2 +- ProDOS.203/ProDOS.S.RAMX.txt | 26 +++---- ProDOS.203/ProDOS.S.SEL0.txt | 38 +++++----- ProDOS.203/ProDOS.S.SEL1.txt | 46 ++++++------ ProDOS.203/ProDOS.S.SEL2.txt | 23 +++--- ProDOS.203/ProDOS.S.TCLK.txt | 7 +- ProDOS.203/ProDOS.S.XDOS.A.txt | 12 +-- ProDOS.203/ProDOS.S.XDOS.C.txt | 6 +- ProDOS.203/ProDOS.S.XDOS.D.txt | 7 +- ProDOS.203/ProDOS.S.XDOS.E.txt | 20 ++--- ProDOS.203/ProDOS.S.XDOS.M.txt | 10 +-- ProDOS.203/ProDOS.S.txt | 118 ++++++++++++++++++++++++++++-- 21 files changed, 347 insertions(+), 227 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e7b4d92ded2ccb2f746049ad6d67d5a203a0d036..4d413b4f070c35f1fc9cc8e2063522251946e6c3 100644 GIT binary patch delta 339024 zcmZ^L2V7Lg^Z34_9p&KYM|rSxj&fX~oL#D*C<;VPm39iD9HCfJzIYTh>M4fAl|&O_ zq7ma6OumtrglO`OMvdiC6-CcONaT0fxI(!H(9^x*!&^ZxBw1@e;rBlVhS&m(Itn}+EA;n&>0$aHM;U9q>d+#tYcJ60(og2GbLG_h~f&f=4a&R{e_H8~T-W#tv|yjv?U0fr~RkX6-KT2`YQ&qJPhnk+&# zFlr{79N)l9Wpaq~MrN8U7sVB)&&|%8Bd{`6*nb} zIJAHxr z*8J>D+Z@;AD3OmC%`I4vU3kx2ey}t-Y9w9N~q?HG5H*$QuzK2T{1l2NA77#LE%j0})Ae6vc{y5Giql@?b>PJBkuSEFy11x+OXUHRx-r z8XlqjZH>%HPgb?o>g%eS^bH2cHR$S^8de~AC@O2vl~ykmpi(A`L2(6!r685`4Ja0) z23@1BX$&w`JqE}X*bpkhP+|6rtRnK0qbNocj)`>8oYi!moBHKjd!PI2}sFVQM5yH#HH`@I~V z-O26KtDk?%0e+6~bAq23e$Mc7fuAe<+~6nafBr4^o=?2oP>U~mC0gwY8iC=VgqScV zGIyF8FTdldS92B;HhE&vvoKt&jN zeyvA-i`MI~Q~VhCjJZ_(xYgnAicWX~)=-Kyxg;S*>2%mBVGIm}5Cz-h?ts!91+Zha z@iB7W@n9ftDcELrM-(OoFb&0Ksium`VW&h68>w37;gL3sp){G6%8KG+e8)$w&w|P~+?|l#MF87Wl@Jr} zwEFfs5BN#p=LtVA_<6(62Y$Zr^Mjv%|Lt`${ZxB@7t~E2IWDX9_m!f#O%28R+|s%V zPG%mmSE2wS$?=ZZ#cyTJGnKX3s9FY;MZZFRSA=V4Caig9>$} z6~$Gxx?J6IZvN72Z(o#G*QAClPOQ)@)(;iu7weWc&DJ;9HO<%8G}r3d1mqHb)UBAE zZph1PnNfr!GSppDvD^?5@t_KM1fcGR8*2=a*(!=g90-uvvyopAnya06PhK%EQL~j< zN)Y=#!DvQNK@k;jtxy5fL@n}VxjZ%9QuxdaB}xlH1x1T83JQuj5yy1HzHb1LQn=dX zgsk7?M8IDY98TNWJ2(<1-u}1EPJs@NQcwB^Tjj4i#etu(r|XfzZg z6&b2P@>iAC)T}U+>Ge&zigqLp<#!@)jB51y>iVVzUeYSlQDhiMk<$A58l5dG6Qpc~ zuEtPXT3!i~1>`JJg#*m;8ooy=W$O}Movxv@#z5ZtSQgOY8G$NvpxyF)Q>l?hBx-CZ z=NBwZMxlzvCR;KYc|@b~Iw6^gJYrCJh0a#0MbcQLgS4%wbmSF>mep01HP!MgR%?() zBC0R1;VWp;kw=RH(v`M!2J%Qk>8gBNG81_yA(?ASW+4w1N>>Y|*~mi;Nue|cd1z3& z##WlFL>|c~Jy}Sqk#`De2F}(s*Ycc7)*xjnDywQ<%%e|EZdE7JEy++(3Ikczym+y$ z!BDTSsskm?u&lDGyb`6Qq0;j5#!}nXnw-+Ahh46ww7${6=Nn?1bhY&~VE`x{x5dfP z1T8A7(f5yD2xO+V)YaD52uN*hZq!x4nWC`?2D`M;ph`8ARW%s^w!GR9A+(J&6VRje zHkK!ATPv%UR02F#_fcJg-cVn<1jf0pLbrUZiee&yUcf}*`JSBK3h#y{y`h2(9|`dS zrbkRdjrvAg*E3t;{U2Rcp!mtCxv>ElVMCJL%5jEbs;Z;yH`uBuP|{QsXShSm($a=1 zskffj?TSyZF90jgW!_-5dMAs^O~zRnP< z;fA77j(jo!yanKEt15WaJynCevv?epRW=;SNSTdl8k_1t^|EE9w9;h)?bd)=FEH8= z%a55Hh3258r8TfLcxI)hwbqr^>I~&nQUR6p@0*O-+^&MqYWI+!e)o{zXCINs6G0ed z6d5AbAbrRi8-r(U?hL-p`brSpv1S*|P-N=sS2Vzw!->-!VAG2XWVAClF2%=V45SeB zy@sW_3KS~kA;QyZY7B+6QlmjARD`1>FH*26SiyLc|7;3YGd^VBreOa7U&M(nuD$%c zf;stlbFvk4<5g($Q^AqM;V1FX<}P@N`wM>whi=DEZ$Bzd8w|8UQGHEmV7(?T4$(DO(|EZQFsLT@af<%CX#&rbZ|5iMI_GzM@gfpfL~!q%2jLB8AuUB zGM))e%!@_cW#x^A+GK5YyRM-D)Zw7GJES!j#?YrGS0hORk0T-y9RDSkUusDM=;Y!FbU40M`;oq4~t=pE2(M7J(C})1|5hL`Zumay53PdqSyZinMfn#98?)VF`goi#YRMmM84Zp15${Y!k= z>x^668Z=|BA~z!^UAdk-=+91-2Cfxw@XR8+{Mko+;x`H`96Q6R`;{_Q%}k1U_FqM+ zHV{CtW*bUt4dtZ`6$X7Bihb_iU}R$eyUJa)ozehDuH{ut%C#gQkbThy?-HQzoWjY` zKsM4(@hVcN2%R$HdZ{LV2eK?fNMI1V+b8XHmHi={)&E*FJKb)796M9&9R=f02L%oa z3kvg!v(xWcNbXm&&w0n>^97*1j1@R(*t62qg=4~LLPla-d;eb=)&1&=w3_yIERgQE@?G_G&UZkxg^~bheEC)Jg33j_HX-C_hD&rfL1h)KIrKH8<43 z*nkv(oh6df!+eVc2HY8FGB1N&C29*uRiH&qRg0qYBV> zRr<1rc|O=y_o}hg9p`~|-p7hO1Qk)M1asHi4#J4Azc-2lp>5M0p4hZa0Tz$v z-=YWDe#Yf#Ds?OMwYqkKA7b}K5^h;WW~L#j98RmSMk|1f`o+spXdImipbwOhTMw}l zf;>Ue(I)C)H;-2(EJp#HwBrC4E@D%CQj=h4(o@u}bRa2I!ty8kUs=SyWAEa>NT^F5 zsbJe(a0N}%s{Qsl*2~c)VCxt_R5e@cqUaF-$cxo%B$GsrRI_ps!2edw&Tw^M0~t=B z0CD-t*e_hza3S5VT+UXDT!JQ!W$b>GozK98({6s8ZIK2#3p3m%64pP?u6IlH;H6w- zrbbDko?r)e{)ZKb5)AuSvR{i_qHU`JTD#WDzTpxMvXm#EywS$Wv+)#xddiyiM!KIF z%5)$%bg&0iprEOD$`h8imoBDC4Bgv7L7GO39;KX6wzEl$i)5C7yT7i3z3QTT`eD!p zD;m`u++L(GfFZ|F2L~7fRYesj`X%6cwt50Lu(R{?+Q|A&cAq^pu#ogk?6V$zeG~wc zK7LsGf7!&U9i8ErUsPOJkdfUVw}q98A|-zcqusn1Np8_9Sy`a2EJq%H@eG5`S3b+8 zyGRgYn-~3WJ z*j)}TF}WP|Z9t5?pRI9C1opzLZi@hh@91YAxAzTu4CSXPCrsD~7}|tgwO{itd&8Mo zMPiPyv9PbrJ;HwC$cRb!Nmj`?lcJMsn8t;n3JK_FO|YGT;+;svG(9;fkl2;!US6(4 z?ru!nmi&S_Gg|W!W}{dMdF3PrXqzBGKAM)5KHi7XayH3I8;75*}0>b>sFSN3ZudECpey3p$1(KZ8Y_xL_ zl+|P=_!P2 z4a-4kUIMDGEQ0BtnwK}D$S_;i*a(M)Ot371ZW%5udP;;#fJ;T~$}!PUd~WhK0pJo$`v-+R|!RJ226g z87it8z$(cdQ4}a9o^*Y}Mr#weIo3wCE{{Yy|5mh76%158se&d;+wPB4CO??40=Xp# zplTGWB-cJ+V?0%3AW8}nt0wYKVPG_5-lwc$YBD#l$Rma6F0Cl%@oJGTvJNT ztZ9=;)@LmBbUgMMjN4T5>St^sXk&w)!NizOe*KJ%0;MeIb9N$=LFRwXM)_wl-4(hO z$UO_%udku)XDd-kHhJoE*x7T)N1wAvku#XG(uzg3jZ2U$SD1dY+idd_npdE(JQDZ? zi=`#ZmKn^4wyo9h6;Thtgq;WWYQU6&b_4c3>)ls z9|I7ojE&{B^nu=l2_AX4jciS z>naq;#lR@k1el53TY;v6xrWpfaHXPPwp{=^l&%*YUaf`bChxswzouvq>QT^^Crr+7Fs* z$B&7>kw`DHz9Rn(*ddi$iSieNQt~=c9}t-=@zqLLsj*51vWJJIUW|am{m;;rFD(eV8t06kpEUA3>QHg*BLC-^ z@*1$r0`l<``oBOs=cnjl9%-&>;wBE~ldyHq_rRgyN*7lXSfG)tkGx=E{R8$1AmuQkcZ%n{K~7uP+01_ldx_1D+RyQ;v8h2do|}?> z8zqq-uA<)}8!oX?(+>!soV&f%##zbRW1z_>=p9IaeJ6ZwgC2q)4B6CxVVGiw3`Z&N zk{g%UWXXUH!Vr!$?~&xMShd?h$l_)UDtMnXe8tXTJ|ORZ#ZHR)kg28CC)iBxBJS{5 zi)kqQ2nqX|4XgTyDQj+O($}dtW0yeNQ2|n!g}jg1T26;?sBfAG1Oy%z%2gTd&=d$? zs@lR4TlTR~qReTps-xBu9nB9pL0XuY~aMxHe%Fw z5n~>!lY#s`fdpk#W+_+#YbF}98_UCy;xm%`4T#UrN!Z7ZJNJLfKFD}X^Fq}1p(wAZ zZmenAKuW&@t=F4$eFxIkhxC63BFC4U{f=dKe$R^B!Ry*oX@C;|=;jH2#BLZAT7Qx> z%!Xs|CvXR-@|w1oCS6@)i~+V?uq=QeXx1VB0P@H%>lXrMuhPaE%vmtp= zU^1w$F(_1qs>OyCx<&=^2P0Th>5A5Jpc_ukVE3XOK;jtClN%e57_4E`1SXdAPl#-x z>DA=mWj0I_kGf%%7{J_)ViL&Dm)Yn^a44*=tY5{MuBn-sQ+o7^d9+}@QV3=!RnDra zMm;D()LOnmfkKkVoF74^D@o0dAf{A={K(1!)d)5KYAyrIyh20x?kdwzP%=69Bb)+L z$gcp#q>|7ppdF`?{40P$OCG+$%H1X)MKYm%L+nKI!WA|c0!-e$!p1vKrhTYE0aM7x z6;|d0r!#tbfL_F_+A8(U4JZICVn4C6i0QTxb$(lIRb4ZzdyjP6AZod#9-2WG`~+%r zCRzFu8;Wh#5tu1-mxVL3BpcCdch%WR=clhHQ2v;lkx-gAVkl=Qar`i80+EA*Q$;b_bQtM+S*3?xQ~2EANLdX z7dEHv0R&cGI2=$`7+{{z_hmX=wF3D(gjO_^Ry;hOK|Wwe;2D&vY@4mGgIdU^M953Y zX)6M~0rLDx$MUk4r5XWj?ev70XeaVK zRF*!O37%&s>UmzKjF0j1A&0NCQ7r-9|3Z>}s}>w>5qSU}LBTJ?(FnPJfo0$N5xjMe zW&v0n1zVLA9}@s1-R<_yK)0Td#-mk5g4_F1h@x{E!`5GQgC#EH(gGImx3c##)8eOc zC#<`ymTeF@0-Gv$KT7MCG}FD6np2VQw10z=wWDl`S9k{1%Q<7CU<5RevW)$H`;g~9 zcMWnz%PaJaU@?2D|E04b3z(hfLPU3wu8|@joCRonZYe-KQ_UZpKGc=8nPP)aH6$xdf zH$(jTXJ&`K5WK%E^qz+yVsQS6&=k*Dg^0t^)Y!DFzCqu#nru7~DsxW~*=+p~Bc)K1 zH&28nf7TJARgeL7EF`YwLgQ>5zGLWQf5& zp7CHep{;P%YHF6KhyPKY)Mt+*ya+{0&u&hGh+U2s#_Dlq&W=iZ4s{ufd5TCo!0cV7Km1 zU5mfA4;4@0Qow23lddqjmrv)RrftOEI=ekh_q>Wl6lFU}>c-Jd2`_NvVGx{|?JOcfyz>pP#t zfi2XL3&tGk_C*dks2h3DfZb7Mhoc}KlTnM{hS#1@B^ERcm zfku^-q(g2C5F|C76qf{?A5=jC)07s8@8#?I-p4Cp)On@mYn3C({Q@L}9Rxo>X1|Gp z93Ocg&RDc;wWY@aoUf=z*ZsOk5x=1xqm;7W2(r&18k(X=fgY}Xt24SsxdLuWMDsz zW@^c|`|&hJPa^xVlBp;6&_@GV)sGcS6M3^Aj9<; z@%R|~dP7{z3SOV${eMXDD7p9!_9OAvun$BSggi!JVelGiK&MJgZUZ6=&GiO2f0kDx z&&O#g_-}2c$o+}&zDn;F;E75zVHNe}0(UaAkr%jUxN$Fs;23H)MzIFI{f8Uj#Hs`R zZ?4wRxB`N1YYimv0CrDpjazF8orOw*`7JfUFO|s=Z9Ob^BpDA?EQCL6u_&p#O^b)%I$9E+_5pqC)%*kn|tB2Y;8tbV= z0GQ?eHeUxaVJ+ZyNcuror|*)|gE-n_;2-#)`+=gk_sHu9u^b zz<|K4&~v)sjAP{eLpa-4^)a1dSt*=&8_(-t5k5h*?*q{%$wGJ}#-HM+NmZk;O=#Mi zz?V=*TY?a28g|4*acfZIY4YOxu)01Whu_CDm`{o116;63@i`h-cY}?i+~BtB>S#og ztvw&#Vrfljoh#CP)*C5>eWbm9eN4o755w5 z)4=Dt-{iY%Oa01oHCL?$!6W_+kb(B({yX;+YWy+2hQpt9(%*tfs@5bbg;~lI#l<7= z*E&$_Upy_)Yg@<2dxx<<^EdhOFo^WqbR{ZXuN1U(hOhVjx-XxWc^c@&2v$SC2dY25As z{_A#qT@3`CBJTj3u@3V1crqjlB={Ki4+Y02-9YZBh{4Qy6vOgugQNHUV>m&V?8u&rqHncdBC`DkO~TK8AxM!fdKMbrH042M+20s9HYe4pK&ttH-b+ z&m)r8e)(_+m4O74v&UrkSLnJ^GicKW1AIC8Xyr&H0QQB8?nL8KpJALkSV{uxLv=aMa{$N?Om$RE6(bR(yI;D(P2 zB}IPV{S^98n4O-LkzbHG3k9X|xwg2!u>#PgJ;5n@cZVhb_817u;13B(O&j$KbCC?R z33B0MESW8x#E)VukSzz#taviV07Q>8)bUB}3RLN}l~e7xOb_-}8gvT*v|wD|9L?0N zqnt)EPhf>oN>4qYRgIxcrzpXP3f2Xh&ofAz$vb^xvxw;gtcPs!#R;4W$4j@9pdaTF z^+~J+e`)ne9G)4T&j^!;lVQS6bLT)J0iUT5XoDQ)K*uEoLdR8EC}}wkjIrueZG_+o*BEV2j&j>q*aP(2X7;1E)b#Y9!}R;}kf1c$z_&E+twsD9y`= z&Wt0OhMA+w)go}@E8SDliUvAPk=z!1P8 z`4687ik1pVTlj=6fF8N8$vg0f@8AKTfvn7S zTLaQnkO?NloSe1PwT&EBgB*!lLzqvooOzPOe+nw+S~BBPoUB-9!*7cd>ku%k{|5#m zV2Iy9c7KZF{5IaHQ&X;9T>%z2r0FC-eu~wJoA|Oa2(2z#p%Z#6ed-_Rx+p_o|m}Iq!U2=2@k?Yh0$3{30m_LIfWjFcjGZ=+uInbEr{x4AJ zR-ye4jv?CTN&V+IRg~I8c72YOVU)c=FY-0PkOPY(dM8h&TeyjJ9Nnc`>_H{mw6VFw8Bz*(Y+(cT(@y-8D2sWq%!#qetu!-v$_%pM% zpX~S&tHUW9gWuv&G{M<=QB~cl@qE-CAfsR6w1BtAK;Xo^NGVJ@`8%ZG432GicdVFV zK>h=Kn)7)i0$#2XlD>C0nCn4E1FgVH$suMnea%#5s*un7)U#X;2Yn-Ni3b4b2Rv*} z4&SeU4~2e}>l@sgUYx^Ee^&YX(BjOAQTh^QsQC2lsDi`cXcO62B!n z0Ajxz!`4{~;xoH&m|XI~zJgzGpz@`>^q8X|yvuKb&d;GdYb z@oMBcoAOT;N&GWO8G_^9RdUY|j&B)((O3+3ZE6gB2fVL?>H}O`MXg5g24^1M8(dZj zXFKGwz%S=@bNsHD3OV9mZGl3+-C=$Ta`_!npgYH*$UiBX9OXuSW~$QLfj4Ay2uqn; zM0x>7w)_P)mYy!2Rlr zaO@M4z>7F3#aVQR4%*-<8_7W~fEa2Z3{h^xbP*0O5_0$= zj*_~IxH&_wiNTbK@gTP@!Y(W&VHWJmc#<>=j&t`C<*Ji4$*tT)4sW8jV7a@`oq8zJ zm+Z8_2H{7JTcEN(xdsodOvFtG8)m-%NH#Wf=wRUkMV$PbhP(nrZM+pZIYncv(?i@= z5GlBXL%f5bfLlz-$yr>1oFywS!R8!7dN1J#?xEw_kH%!=66kwj#P2H{&V-W*U*Tx4 z2vHlo!4XRdph{_ABzfd3955qF)CP*=>P8)0omvcLCK?BdJfnGP$Dl)FfB^3Jm8?-4 z0T8a%L6k!Uw=y9TE|z@q6%LVv%XvDe?zEmTUt>Qej>x_SI^#+D*PyHcKnIvi}uV2AMg(LULV(u%{LE0k~R7Y6qQ4ozr~RY zX9zVQpwlClPv{o&HS+GN;XadR1cY$KL%8WIzOYHJuK^bga?ih0szQmg$+d5BLgE|% zf+MQ{BrV{n76h!@+_6e1Y#y2U9mWtlS^XUjV~Yg3GC|4~^9h@jO}vNneuopL&Ijgl z7N(Tc^|tRvKs3kVnyT_9Fa|GxreXTonqI?2Q9=SdGYz2FL@gxV--CX9FVTLFW7zw~ zS_4UaKcBEk>Zk|E;}r5C^5XY+Duhm6`W{b=EfGOTBc1#ZLjyNL!I@-$OQZG3y^QZs z`Qn<=B`BesWc&b|RRyX00VJhPAb3K?dR=3AX}xY5@>|UF5hh$#4qYakSukt~* z^;P9?wF_=j=~k5KsrNXnl1|aA9Bv5+2eH-THjKzBQ5$tAfl;6P2*SE0dg4Bey_knd z*f91EtcFfnKeVyEjE>|9_lPN*SshH-pyEmXH1ha2?<8rlXH^g4k}sVT@)&nJYa zH>9X1reU1e@(9lXxNrr2qXy^)jbdqpCxq-&@zYh@1TbJ*@@R%73c)@?_EIWYmLtDq zv~xM>T<5B|1qG|ZYdOyo{@BRvT`TydEPj+<+U}15FI)IEos*8-ABQ9yAmQMl0wwDS zk!>yjTFzaUjr{%t4W%ggI|4OJ=t_fzd|K{mC_V-9#4Bx07yu{N0#rlZt+c*M)q1BH zU%xgHkBROo2HUP8ZzoqT<5<5A5#OEhWx=aR!jCv8U^Q%6G%(AsP*Jpk^TZr-jtfV= zYe>nD*vIWjVZe}lEm`>^j#aN4+wLUm`R$GhQRHsq6IFVea@}Bq0uTO1V)+rr=XBa~ z)W~g-Ia@FWo_|eVNq%gwwotKq=+5qUheD;_TVsDC!mR_D?u+YA+qo zvzC=krNV!YBXAE1{uu`(n)sE+!>=uG zYN$zEA$(!PV=qsmQkhI|%qP4?%6`Uifm8cLHRY$!{b)HFT~B^@MQzhH&< z5CvXth$Okc;1Kus1>p27>KAGHh4YJS{sk!fkQ||p!{oPLz=(PTVu~R35m_(-V)iI` zd<5fI=`nr{3f3#X<3Jv#&ZJ~bF!EMm1&aEZ9H*5|l3$<_bDBu6VO6kMAUYjnz$ZK& z-W4bRlstG1REy8Zs%to5!sh@8GL9=V@=lBzxc9LH;sKH53js??3UdFFS1oufk!Q%2 zYoM*2B_7u?_8b(oQPZ5@eO8|%)31X!d5APzhi+XY+ppuvjD=XP<9K{YKne!>)USBb zz%(jc9c(ADH*k1N)YoGr)G!2>4Lj&@k26bBKNf6u3Z(gl)ZYMe^0(xr8#qq>9gn$! zu6fD#!bU^=06*}YtJ6bO6gNzMy8$Ma%LLy9#q>uWkgJt&g)F>@6&hwZywW%P0kL`;nL7x-M~835n{15m&Xz6sbL!TY%urn1cqD!nOcbEoGfVFV(6 zC8fXO@Rr|rBto|AcM)HgyJ=`MW`W8s{sZ7(kCOZePuQbC1x!I+xA@9;z}){D>muAF zmi|rm1Gv1&e^dfaI<%K+CD&!KRkXUHiHLr~!6Ne~gxMb8Lp=7fKW+}i;lf>T@#a5p z#Kc%f?jkyW6?`r2MA6*r^jX=3ZRMcGR0Esgvqf;vD9&k|1BFJ~7`O|Nr2Y@=Jnph1 zY5N0z8Wij$+^!XDnd$T^7kPOJ%SpqZc)Bbo0HRBuqOA!4eAF~~|4*E}^A;Al@S1i8 zatI}(f8pYwkQj(5y{pF9)p}C)H=Y*ADv%=OE&$=~Jn8!z_j}@ra8H{nw{@_;`8KX% zLLd|d{1b2uw$eyX+SEMb4xuo%_kQsx_VN;Y-b9qy8~P(X!#?-$i+h;?y|1c*6PDDG zM!&Vy-tQI`w!zgiCY)agf=;xqe^)}-6;XIZrYLTW3jDvEZHW6C!(!?er8jWt#~m7* z`rkVd-_gmygoTBHNYL@F4f2&gBn0U>QaLUEtX6Pt9Fx~<}+xo$l57k8mafE zl-ex#zy+)Zn)}(5un&@@=kLIA{){18?=Ot?K06D^E{^NHk$f>V>?JoT2r}9vZJ~ed zw6IiH7oT!F+vU6d!!yGs*+H18re#7dqM8VIXM_I+6nsT4g6iZnzNMyg1?RG+AmGJ? z`%~OyI{3sKiq1pyG!F`m?dud1TJKhFxU)V)DKDvCbmyBC>0_UMsc&w8Z)3FF`94MX zEClwVr8@prOJr(B>sVvpJ%fC>QHB=RaWSB_CNsGYa?pmxLfeF|rHp+QLp~dU;tr(Q zzKQ`H7Wx2RA#0)6VR^by+#Cv7R#R<*%()8^e1N*fB;K2)D&Uz`*TfS7Q}_;2?z0~p zKks~+BYrM?ex-VG4gZCkG<7S7$FR7jrF4lQi95=VeWyb`4>jrQX{T(+HE@2W;c(oj zKoMs};Rk~oA*3wi$N{@vBX`XrGA+3kWILx#8Jf5Ogz=%Ga{vtFDl};Uy}D1W#(YPWYNfK3+D3&CMh*$o zBGZQgy;>p`BJPHr4Fd%hj&Z_W9egjMsyqMT2&EcGvw2@36K*CU#eJw=L%&gHBOdH= ztsLDNn_k(-4;l3a%2C+;@O>J%Yt4UZrzKJep9gG(Z&GF#3tDKz1E_vkgRY{v-qr(6 zPI4=!%hD(_?&ES{52CtSFzl2Ioz&!Hv_g)d666IOd6D8F#Dxvmx&`Vi@DqX_!6wal zMg%6baDgExb`jzaZc1B|$?0(HqMuoU>r8i6EmD=BrSuYkfEHTizaP4|s-bon^>l)r z7Y^L?TZ9x2#g^I-^A~Vn^X9&<6VpgHPmt~XcvaYS{}#2-nreJ&xD44YE!e0^(P&`{ z2U|RkJiZ*2S8A0Idm)skWwdIQFz4Z_RUI7p;aV^Mog5TfVWWe;djoWgbx>{4w~Wap z2tMQiQ*48oN@ovcM9O%|Vi()cX>2X0j`cuu7u*sXT(ST+)@<@PxE2&!$pfkdglQ?Z zcGY(ytg<0YwINI!Lzp@aA&Pz2hEHfXEla>RzG38B4PV}>XyJ58y2^RKfnN>E61?}^ zN6_e3W#Pjnh^nHtbpSc7TFwu3M|=w_Cb14JfoPhrK^(Oq`V{3c(E6*M=kV@ zTz)Oie;DU4!JIyX^YVDL2W#TB!aB1}U9&Z{d| zBw*D9tp?!WV?mhzSP&Kz9>vx9;qY%qrcn}sy`ulQF^@e|P|{^hZ# z?JM}^pYHw0Xm9EL+vs31wH<Nv6H`eHK2qR=N9NJ?Y-8(u8(3i}; zs4oBtp~nofVRUr8b(B`%UV0g$#j^EJt0^F2#Nq0n)|C$f0#mo8>wJ<*1pRYYPMi-# zp1t`-N6Ys09QnPB+m?es?T7<#qXc1e@UUA%-z<|sB=;D}3N)@1^(Gk&BFH}?jp)UHbzHTp-amqly{h=7un-d)ctqg)2UyZ1P(k^Zi<62&PjYr)y{=3r06f#LA( z-Hu!V@BPm%!r60j)8}MnXJPI$xG;aRaX}%@PcP0c6qOi6%u10R_q8g77$iQ!JRQM| z*hx`!6yt(K$Okbiq4Y%5D1$yhcGvH?U7dG|D_Tszc8uGUy=SQ6O{% zIWg$sE&OK^gUq9jHws6Yj5ALllw_ZArV3@8LGQnhXx7rM9#v-SrHFw`5!-e-9XJ0z zVhy~93*Ey_dQ3McoL-y<-Z4zK)Gk+bfFth%>55Zd&Wek}n72D&xDv4h))Lf$YSdhc zaUA^Ne;^a=R9qnii0fLQVf}43m3wd9J9=OKy`%6CO-ENOUF$T-%wt`LG|fy`S88&I ze>~o{-|@Kg_wCUG33%IFC;I9=P}EhOoX}$FbvHg1-TOg@C;lq7?(yi}kGQwK2lh!v zqK=LB6&qJX_c-m7!Wwxfw#T|pDz`gkr!`N(U&hMBGk18JB^_Q`vFUmYz?p8u7$1$s zirCoB;N!4?oy;vyV`uqZ6;Pr5 z`LXDca9OR&VpLg%dn5XAWsPlmy z$9>Yln=$6VHEX25?(n?)zHw~?w*A5^A;EQ+co>|m?~GZ-43^sUQ{BceRJ6b`S{V8*oUR|w6P5;i;HPRbhp&f zY1fS{rbnZ@J?U$hr39F{!xLBs#l{V>vMM{HlN`#8V!3f+EJfduS&>nZ)%8rOPs^{d z*invd#%>i}Opip5L>?0X+jn>#J8TX}csyF_1DVI{Iwi;Kxsg@G_8#u=%>OHz4&Y4q z>+mWujh^mt;Cik#J3!ZO%1Z3eBhkn)#68$8(8b5zOC%G6T&$3CQ{ue5Z*I@%K4}Y2 z9gr)Qufb>UA_H1X41{^mYqwV{zjWB_L`f0#I-Fb)-REN*N3YVu^lNP3${*+?ICjYV zQpt9=cmIq%AhjIZVRky;X*qUr#QwPSr;;6>x##ZNGE?s4dmnJ9qw%Xe!v3%R(w?Rf-Raxjq?!!O0H zTq7&VSH@$v_?6f2mM()9+y5+wmmS*0_q-dwW}gge<4y0z2%>pe5WI2!?hCG6Q{aL zCSd0AF2jVXCF^o?Zz6P4if%Hho3fR;x!Vy6N9e1UnB6bg?V?5Mg!|6%Ahx1guMRM1 z*PBQ_dd2wxV;_=Lxf*w&EymYT6*BHdufD4NE4Jh%rp*bC&f?0-N}#A3J^(tcYvn|D z<&9O7kFT1#_r}~+Q-)Vf>qQ+Iy`qjxE%y9hFEU13V5f<(@LcbutFHtqW;`{ihp}|M zILXJ+Vq9S9wRF8RDKyz)ns4dIHmy5E|1GfOe`Z-vEbE`Olo*M{2#>$)J|2B;G=G*Q z-_BB!aVFpHQoc)<`{Z=MG58i)oEzdcwLx@GpOI*Nw?pfKfXow8gSxim}VGW2*5fOXc3V zXSQh_N>J#e`<9b8KfCUunOCytp$E%KOJFN8RUR^KIwL=AtUM(9s~6?MpN+GoO=lpp zvXY_zT$RTvVA@rz{KL4(QWNnVp;!! zWyAB9%8u!>DtqHrcu9vb*=8|qw&cd1?Lq53EJycEr)yUB$aHz=?tRlQblo=VAuktx z9qCZ92MxS&dnD+S>E;Ipx^5rSjYwRiUVVWx<#zbjiz@?wo7mB^(sO1N(~*JSytvY7 zCg8!-E^U3rvZuwva){X?UOwkJ%PrG3ORj0FCHLHxz0X_rya0)tmi!(|Z!C7U^fG2q zuRR{T*mu0gLA-q5^i3IS%zy68UR5wWyd!Ib8ODac`^0$YVxL{Ctc2FsktrYP$OO7~ z4@fP>Ve5dW#dz6TGi>e1nAw-G-EQDN7PDWEyWPI&BZ1rgV_CCr`nD%5U7pi?TP!^c zWd3^0q3@c@?p_3i+gdELk{#K`HI@xeTGp?%yuD$a#bmLV-71aif$tmOx6$&f=?^F4 z7nZk`&OIKL-CtSONdMe^>rJ%n_lv{kKTHP8hy(uJ(iv-Nqi?q?ogt0??= z-_WH_m#dd7lgtji40f|@zcujt#b*#y-n-7CbnQV0zOv*VJtQ^%PMh}Hv(~crNzf%v zo6!5FFD%ACobt`EOSs8eYF1imS}is0mYP)-qle|zEp5qequU|VyhElxts{0@<%dkg zhkCqwaktu`TkUut)7t$yC`P}mm3uh%9ecY|ROM*=&|#%@;IG>*#`mo9X}bqLyG=Rx z`EB4}FE$>ub~@n4FZKDmzenHR{i;tw-|S$R@%4)(@ZxMKp-k-H=1AUl)Ppu0v2H+T z_T`Q&JeCfd`flsh-PWV~a-CNmd(CWbJYqfCJGu>>F@9j(@S*j@Zfjr4KG34Y|ePWxli%~MVFR=GLPY}V`nSUZ5-rTuxg z_1K}#ExYlJQPaa#aqW47TlVbhbBBTY|s1w)Gq9)^DwpgYprmG2+xKg?7w#SHI;NOX@{?zOk;^G{^jx z@k1*p9p(@$A3itmnH7L>#wqpvz4^X5VSwa!g{D0tk+{+2?9{#X91YzwMjeS=tiQ0;^=9)okCJr!Co$le=R^ zF5dX#tyME_t;*^9+9(=YZ#RTLxYBoKJM(7FHZ(LK8hR$@xb(*G+HIntZRo>n^?-meZh)yi-MEte-@Vp)$kF_psm0f7TyHh`S&c?3 z>=A8NQ?=FjjMY?QHEy=jS$SzBWqZg#y>*-Y5VV!2G};escN*}qZu1!$@U?Ekkb7;r zXu~S&K&^FK423b3S&eZ+z^%SCqrtkq)!LEMK7)2E_G$&4JUT1h@@-#Ge)$z(NDFXe zuinZrrOev-2gj7$5>uyT#MZ}6w2!6@R>?stbbu}en7g&sy>*nUeP7^~Z}*g0*Bq#~ zZpvLF{R7B9oMUzZ`VY?-kBoT{2(cXPgA6+m{QY0K|bxj9q@{TV$TVPlb-$o>0E*kiYr20}?9* zJLF;hwbu-TXc7%c?1s!Py&~f(er$TDmu!8-s@?jM76149&Jxqh)}LEmvUWO~r6+e- zN21Kmr*?oi>Yb-8F}}>rHb7x^IB7RDa%C?}*Zo&I50}6kHwTU7dm3x4Cc7bH9c@5w zHNIlSvwqNy*!5rVQqZ%WQP5ciPeMBmK(CBSShM|6cwGw}Gk>#18qkY&15r{jmvM8%1-mOPx+~58#5?0mQWZ5M{=1ynwzYD-lQo5#M=FPw4Y#a2Qk;{LpuO zGqC(}Upie+9=mcS+qzEVX5y_@v+FL&R_pEq_CpuYAe`Aiy4{fN-D(AbcVmaHq&&9e zkaffRR^SG7+INuk88jDQ>t*9E>sDgjy2T2bI!yEOD}A#mK;U3U&Op#0&+19|{mZ9z zS(W1NbIiYdKVv1`rC{zU@wVVW(-!MC-$4@r$u~IQGpPN!hhqQvMQf)Bra`V2&Nm0p z(1;zr+H&~-x+-rqbMV}Qbuk>Y` z-n5=<*<~H^qaD3tXqP(00qA@;I^X9QfX;QJbG<9w_F1of zObI$cwSfCT0RVhpG+f^YGyR-7@TmEZt9{n1uR-d(*^Q=Nvts`%ofk^h@3opAxTo|6hCe9v)SB=zDxk5<&t5VgwBkU|CTUKnQBvh^KoamzabQsG{3e z+m019R1rko+HJchUZQNuXfW20U4k)+63XxlwV=_)Djp$82`+U@2bBgC5r~PyO)8h= z`Mql<7d-ZyKlk(O=iA4InRUOs>$Be9yDn2cMTc2|ww{iq(2M4%{G*P_(0vE(ZS8AI z)v?02)L)+eh&fRG^$E_~`hP;@))@mcO(1MEm5=hN-Elxga#dx=jB^94-2MCWbQ1of z_QS3rk%~lTU(1peg+8Z!-72kXB*zU_xuKUtWR>|;F{n8~wUd|Kor5E4fbw@V^o>OO zs`@gZ_=%3%=i(JMbqv1c^I+k-m8gEZ;Y z`PBm>tFNja6sZ{JS1;53c3j+vPo*x3=z)>PEDsi`iZAtO@rJGXI@Tb&Wn**2QFx~RNZ zQ_Jzqn^8W~Z`Mpp`gcvm-<%fhQ(vUIzKTncP9EBRtuMJ118XgNOGkKg=kuxu=B`nL zgT9@kbAxj<`kxz$%JZ9jO&f}wWYr0a^Zex(U1j!mU6K9W&Tv|6?b6NKofYwWJqk>Z zf$LU1QF4xU-=4e`5-8Z6& zRZimWG$%oiMW#k_5~6)V&$`a~-KrX^>)N_xmG)Kch>JD)17`G=^v?1?zM0YU=Bxeg z$?#}<$DYuWZPmjgDuK;O;j#5!R}YS;{oAVEWKOpBh|g7XH(R2AB${kbIHix?vX#mh z?e)DP${o2=Cz8~%nzMGA0j)@FpXHNvz*^d$L7nZNcGs-enk8yyHduj(leW~!UZ%-> ztv=4k6{*Q<>XJ3quKBK$t~ETW8bX7&Ith9H6*;@j`RdQAkG+4$e&tYs{n???9G^B* zi8H$50yDoMk&aESqD`>DZ8#^=@sbjqzO(-d~n>x+wDjfOsP)Anlq#hat{+`y@D zhrRodj=#j>hYo4=!hf@OM(xByi}r*Mg5x z`TJ(| z%>flQO*Wdip&)ZhVYptqNZ;x*Q|?t0?GPS`T5VN@hD+AlBoC%2(rB>1YkZj);cyY&sOf2otA zHH-dG%iR*#P`tb(oVzqSw57>8vU=veS!O*FwI2IsPM;Co^YZNRX4s)kPV#DXa1u4r zlCt+U6kq%&cjl|Ev!%)D*E7zzyALhfzB?9D@k*VI^6xtYeEO|JO)^(SskmAkYsA)3^*-`U?- zO_*1jmqfJrj8=YHgH5EChmemH_;4`j$^?~pJ z(<3Q5$SyrnaZZ8#YSbQl*c?>qssq`6?nwBc{pAr&Wb?7qG7rn{;kwVX2I8J zQMJhX0%qCGqMM~2q@^AhvHdzH6_4`{OP`P#)LGH&HzWSD+1Udk1!mOh0TG?#3N&(c zS|mQ=zQWQcG$s8plQ>KBo$nKi4Jnb-6ti@GlVgXOg-zGjhRjIjd|ze1IRky0D~Ha> z3aFt^&Sht=jr#IR%kxXiuUhK0I60REw+gwS*liddX??P-Vu*NBAl-d5Tx>sj)N9&H zP~}#|O(Eg0p{;K862HCwXn4F?V71sxI2Ar$;X-R@MPjEARpce*-$w3qQe&%u;Ote`&m8;IA*y>KdZM$Gl0l z#7_sGnZxX3P0p)hcn7Es%r9$`>STcqdVM)wm!PA1*CsV7I+<$GsZA0s`}eE&kVwmt z*Av3WibtI=durA5GXkbL?fIfd%<&ViwU`mljRB#KbylNSg=x~7I!EoF98hTwzHO>@ z!R@Nc1RXd{k+whe> zcU81DxrJr1dX_nxRrFn3n!PkHrNAEirPj0iYiYKsuWoHZkGsPYhFdcVU zAEo3(o#bV2nug$uYPD#zJ~9mnYA5(ei#b^(wO7mJ zAvF=3RXm`YUH$Cv$EJcdSok<($8;EjOh@S6446~DCpYUW@z zL9B|G6J0yhYYp7(IGJiZUjLxi2(~=7M5(*YYCf!OQ)j7dFSfj27H@7hErm_xI;hGE ziyz%xYpHP~H*sB6Tb&xOv|Q7)T&9XRDYk3vs{;qrgk9iVY!9EBu8YDJ+;p3?_N)w^?cmYxb#i%t@$t)6B5HI>Z~x_WHe8QLw_RykgB<)O_fg%k=8!>}%52c+WLm(vL4$_KsWE_px_fweFPX zkND7yzTEg>d`&X!;K^{BY1&L#|E>n!nY+@zuGMX_A3quX(sVwwE}(hog!55(zM0X- znvu5=D*F5F8%~DbHH*}`ZoAv0772~C*^Jbv@4d!Z-#t#cKV+89jF@9a9KFtQqsdF0 ztaWdD)%aaa&IxsLQuV#s`bgi3HwW7N+JD-M#cKF&c9$0DTY=YRup|(;}F05U_ zW>+!oPbc%VNe`r}OlVPb7{(ghm(}ag(cXE@+NHhI-|U@!>*{sxI@#oWlDSqVTTO4N zKXgz9V{J59gK6+;YuD21O6P`Afoo4)etnyhy?2IlWWWB`Vqbe|==E*Y*SD$5VdJP3 z=~vx9vUc^1nuTr38rSLiRO20O!F_Jy!nWXNu3uM8)6%F4*P5;- z^Z944^F^kAX{=eMV5t(7%Eszh%?TARuHWk>gg&WUbmQO&vBjv|J4?+}s&a<*d3Es5 z^jBXK?f*I%wnLw}<+IeIyu`ku^2Hmc&1+kEI8oPHjwBYY4jxS`w$keoS5FBRo_6}x zwm&?rcE`ih=jQ7wdP1G=v1O-Mo2!euyx6%T7(Cs$;B@e+(~ZA69V|Fqm$Y$eP4IM! z^LJYpZeSWaL_1MVcPoJu&Jo%HNvvo)3oGY)MW5*t0x>zr7uyvuY*0;6N{b`*q z^~Gm?c9U;hr>)Y(>PuY*1R{Q9V zv+5JeFVJV*xwZAV%4ww!pZ#1$MPGZ;*Y#HP+4x{XDnBe;5cqY5g5bwzg&xRg{#v^D z^jTs(m7y`W{WjjOEJLT^KJ^!=pE@@^9`F2QMsP(&u+|Lv&eIv;S)pe$bV|6$$qzk~ z5&T_7s4gS8()4Vp%1DV%E-Bl|&JLd_w(QlTqk~%NYb&?T9~;muea(}j>CMxk1DdDn z43QsAs++C?a;;XR_;2avcYLq5V=qLqv-R&a*VtCPvwrl6YHgD6aq1!YwKQd2e2Pggcd1`Oo?F%QVQ{_M1_C4Ru%6o2W z)SX(F-u{{X4qtG0zljC4W9;IL((;Lw)eF8e{_5#-uD!Zsl6{SCrN8-Z`&YJpdTEk9 zwe(h7zb>n<)32F2$)2Kzd#pjjum4fyfdyHCV$0Fb7U?DhJLfFjagb{1#ueS7HzuQ^ zkNsqN*^!gFfvUhuUKd(>At_QZ*1pOctb>d!0nZ}bIygK85tYEwk} zR$GJiHEL1TeS%TpkTJ+XFb~GWJzDBQqPPVJ91l@90Z#|SY zwzTwUqM4jGkAdIO?L6^S*FTkMi|i3&GIS9w^JHCe*ADyNg&7t7yzN@?MdhqTH@~=X z(G2rm@JUsFPEW{6_^DO3%lyFg&#bCGXC;jB`MX~nK08BEPBmmDlKEEkP*Zn(!^?CZ z{^Lxy#bmmgZ)UnSlj$Dm$#l9_;$^xmUZ(rZWI9zP`$z2Yu}oLfE7MKduS*yIFw=F< z&&zb0&yY}T;>vWIy2*6!n@snIV=K3~_N(8_bZ^8mo&GVIZf<9Ihpo>h)7{${_A;GW z7iGHA?o9U!WxCs3dt-a}_xAn!bQyKs0=M-SCez*4mFeDUxBq>web1+6rIhI&^fKK; z@l5w{Po@j>&UCt%ywGI2r(9j|v#a)ohndm4GTnT)b%V)tKmTT?+u~(94XJisFVnU4 zWV+_=OgF@2x|;4x=e5IhWx9=BnXby+wXs*G(`COiGTq1%w)WH+nJzxXjEEVrE7R4O zOt;ar_rx>ZjR$niMd8dOyH=Cwym(g>+~(fV>Y7^N+a}YsdYP^@mg%;|GTk;af(AER zLYZ!>m+6|6=~_&zvva*n=gn_xSEg&}o#~omnNGz?nXbIU4u93P5!4v9u~(+c>Xqrv z{!;6CMy9LzmQ1IMM!hoKqF$M9p}X>F6YErL?Hdp1ugP>ubINp2dztR>Sf+bSneJ&< zrK2$%HAQ=0nJ(AMbPIbj-J#xmW)Z_RWs>@BX^Yd_SL>8vv{ zotEmGneI?5)2%dVtaqjxcxI;4bf(w?&&+hX8R*S3Gu>u0mAnO;yE5IIu}t@7?@ael z&)p`6?E81yTEzqQ{jp4^mF&uNIx5c0bXo#sy3J=~I&A`z>CCWRrd#NGnXb%T|A2R_ zF4yo{B4s+Q=EKD=oSEs~I3v?NVlv%ZJ(*6+HBHMEsxz6++qL!&yEB~@w0EZa&e8DD zP?@Wu8c%lK()VP#=2)g{j%T{J-OdB19B)5hGMy^?YIquCGTqO;Ot;W&z1d{Cx$gFx zU6o$3(39y_x{3txO!pTr(@ij$uFPaQ1-q;4x7x$smg(MT51*OoG{de;x3RsVSElp) z>B)4>-;(KC-L!2c(_M5jw9U(OohH*cuKh!k=^S_4w(d;#ZcnEBAeQMgrkCm7b!*hc zWID%Wx_8{hcTJ}Iz+}1);%ky&FEg1=3!k$7ovuu`O_}a7lj+o1nNIWizcSrh?IzRx z*kn2_Qmcu9%5)lOvl*#T-+PS{&vY6`na(Vo88OF}pYZGTj;#)LxlRd#B&J zH9B{FBhwxD_DnbDo0)D-?@XsX`VTVQr(UMpr%Y$}%5?kUnQqRh?o79@C)15~zme%a zQKtLYWV)i*V)SIXPrXcMlAV|7-ZPm_ac)-VQ~!Ppr-S*Y8}B!v&x?D@y5in%Ox)8X&Ww9sd_4TC z4~{>3{L15_KK{<0f7|oh&I!kxznFRWs-v5Ze%*ececQ1S$5)+t{QnvEwsgn68+?~2 zSn4X^|1b27>kfV6{#!$zWfA&fNs!P-==+}+`Yx{umz*~wX__@IRCV60^TzttSKV21 zUUpKxdGC$)X{I$MY(AaeSHA#oy)|xw_a#+txR_B`XpQ-U_qA%|!{;UI_W-=%^sAr~ ztucS}z6{bAz1mzq3NU{9Y%ArZsyok3dNgp)E%66y^YuvRnZJoRWRdrC<2TJ+9DBA^ zuRG1PM&4<8uS$wNaXisH$lU9UVVq(Z{7L5+n*XA zFpv1E-_+jyex-h;PkB%Os+WFX+dQW0Ez|H{TX%k6qs7NEZ#n4h_3!G{GnRR+L07M_ zW!B=kci+4yw$G+c)GNI7gJ$0AUIX6K+upl!yceHY;~uc?y}S3YQ@V%s295m!MSR$Y z%+vnn6&tZlKJ`+)+{=4oNcN>ub1u%lbb5|?TS)e0m*iL(4_o)?;r!Uc${O%8YwRP| z;(G&k-xcdL&Forlk>}5UVD4f)OTXB>{J{H}3%x|(QLiZK?ZmM;O;cHXP-VmX0?SZNxc{hH`_Zs5fl*7XTWyTAG*g7tp{odw`i=Fky?bA--s;fRd(1NH=LSKJ}&5>~HygTMCK40%BjlD8M54d-a>23JQ zR3WyU`6}#IN`*D%^$RbyE?izUa@Vj6d{0zO+coTbUu9M4u3;DXo~)|aHEg)=w^i$Q z4a@R9Rn@GH=~dR42S;C$Z=TWjp5uQiYxpqVimKsR!}Zqqs-mpn7wI+3i?fEGKjL?0 z$nR>6^usf^|19?r?J8|Vy#{KrmAA6$4_SK2drj5Btl`<|1D}>KvkM*=ZH`uJ>@yxd zDdycdS6XB1dcIAu#ylHSN}3f~InQ}tlJ&*PS?ztU`eMZJKECI@&wZ|%ZH;*$)_HP? zgj?f%?mJaKx@nE8H($o;XIDHYr&!~DANw@b8n@1TI=kxK&(bb=F?~R40)N;BlmiX} zC_q9aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& zBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a zL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{& mBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&B>XlBE7J%3^Zx;xg3p`) delta 317631 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

k|xg-rHI#_wu*BtXk|4;rg8b3 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 zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t zLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#t sLPAIg2_YdQgoKa~5<)^q2nit}B!q;J5E4Q{NC*ib;ZYJ^k(}uNe{JeHc>n+a diff --git a/INC/IO.I.txt b/INC/IO.I.txt index f08df148..65ee14e4 100644 --- a/INC/IO.I.txt +++ b/INC/IO.I.txt @@ -16,8 +16,8 @@ CLRCXROM .EQ $C006 W SETCXROM .EQ $C007 W CLRALTZP .EQ $C008 W SETALTZP .EQ $C009 W -*CLRC3ROM .EQ $C00A W -*SETC3ROM .EQ $C00B W +CLRC3ROM .EQ $C00A W +SETC3ROM .EQ $C00B W CLR80DISP .EQ $C00C W SET80DISP .EQ $C00D W CLRALTCHAR .EQ $C00E W @@ -39,6 +39,7 @@ RDHIRES .EQ $C01D R RDALTCHAR .EQ $C01E R RD80DISP .EQ $C01F R *TAPEOUT .EQ $C020 W +newvideo .EQ $C029 video mode select SPEAKER .EQ $C030 W, toggle speaker diaphragm *STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5 *RDVBLIIC .EQ $C05A R, VBL switch Status (IIc) @@ -78,6 +79,7 @@ SOLIDAPPLE .EQ $C062 R *PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer *PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer *PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer +statereg .EQ $C068 memory state register *PDLTRIG .EQ $C070 W, trigger paddles SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F @@ -85,7 +87,7 @@ RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F *-------------------------------------- *RRAMBNK2 .EQ $C080 R -*RROMWRAMBNK2 .EQ $C081 RR +RROMWRAMBNK2 .EQ $C081 RR RROMBNK2 .EQ $C082 R RRAMWRAMBNK2 .EQ $C083 RR *RRAMBNK1 .EQ $C088 R @@ -93,6 +95,6 @@ RRAMWRAMBNK2 .EQ $C083 RR RROMBNK1 .EQ $C08A R RRAMWRAMBNK1 .EQ $C08B RR *-------------------------------------- -*CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards +CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards MAN SAVE INC/IO.I diff --git a/INC/MONITOR.I.txt b/INC/MONITOR.I.txt index 75cde81c..ec6e3e4d 100644 --- a/INC/MONITOR.I.txt +++ b/INC/MONITOR.I.txt @@ -27,13 +27,18 @@ SCRN .EQ $F871 READ LORES SCREEN COLOR PRNTAX .EQ $F941 OUTPUT A THEN X. AS HEX PRBLNK .EQ $F948 OUTPUT 3 SPACES VIA BOOKS PRBL2 .EQ $F94A OUTPUT X BLANKS VIA HOOKS +romirq .EQ $FA41 monitor irq entry +breakv .EQ $FA59 monitor break vector +resetv .EQ $FA62 monitor reset entry REGDSP .EQ $FAD7 DISPLAY WORKING REGISTERS PREAD .EQ $FB1E READ GAME PADDLE X INIT .EQ $FB2F INITIALIZE TEXT SCREEN SETTXT .EQ $FB93 SET UP TEXT SCREEN (NOT 2E!) SETGR .EQ $FB40 SET UP GRAPHICS SCREEN SETWND .EQ $FB4B SET NORMAL TEXT WINDOW +TABV .EQ $FB5B SETPWRC .EQ $FB6F +version .EQ $FBB3 monitor ROM id byte BASCALC .EQ $FBC1 CALCULATE TEXT BASE ADDRESS (NOT 2E!} BELL1 .EQ $FBD9 BEEP SPEAKER IF CTRL-G BELL2 .EQ $FBE4 BEEP SPEAKER ONCE @@ -49,7 +54,7 @@ HOME .EQ $FC58 CLEAR TEXT SCREEN AND HOME CURSOR CR .EQ $FC62 CARRIAGE RETURN TO SCREEN LF .EQ $FC66 LINEFEED TO SCREEN ONLY SCROLL .EQ $FC70 SCROLL TEXT SCREEN UP ONE -CLEOL .EQ $FC9C CLEAR TEXT TO END OF LINE +CLREOL .EQ $FC9C CLEAR TEXT TO END OF LINE WAIT .EQ $FCA8 TIME DELAY SET BY ACCUMULATOR RDKEY .EQ $FD0C GET INPUT CHARACTER VIA HOOKS KEYIN .EQ $FD1B READ THE APPLE KEYBOARD @@ -64,12 +69,14 @@ PRBYTE .EQ $FDDA OUTPUT FULL A IN HEX TO HOOKS PRHEX .EQ $FDE3 OUTPUT LOW A IN HEX TO HOOKS COUT .EQ $FDED OUTPUT CHARACTER VIA HOOKS COUTl .EQ $FDF0 OUTPUT CHARACTER TO SCREEN +idroutine .EQ $FE1F returns system info MOVE .EQ $FE2C MOVE BLOCK OF MEMORY VERIFY .EQ $FE36 VERIFY BLOCK OF MEMORY LIST .EQ $FE5E DISASSEMBLE 20 INSTRUCTIONS LIST2 .EQ $FE63 DISASSEMBLE •A• INSTRUCTIONS SETINV .EQ $FE80 PRINT INVERSE TEXT TO SCREEN SETNORM .EQ $FE84 PRINT NORMAL TEXT TO SCREEN +SETKBD .EQ $FE93 GRAB INPUT HOOKS FOR KEYBOARD SETVID .EQ $FE93 GRAB OUTPUT HOOKS FOR SCREEN XBASIC .EQ $FEB0 GO BASIC, DESTROYING OLD BASCON .EQ $FEB3 GO BASIC, CONTINUING OLD diff --git a/ProDOS.203/ProDOS.S.DiskII.txt b/ProDOS.203/ProDOS.S.DiskII.txt index ce4687c0..75c24688 100644 --- a/ProDOS.203/ProDOS.S.DiskII.txt +++ b/ProDOS.203/ProDOS.S.DiskII.txt @@ -712,7 +712,7 @@ wrefa2 .EQ *-ofsD beq L58C0 (2+) branch if code written was page aligned. lda A2H (3) get byte address of last byte to be written. beq L58B3 (2+) branch if only 1 byte left to write. - lsr (2) test for odd or even last byte (carry set/clear) + lsr (2) test for odd or even last byte (carry set/clear) lda pch (3) restore nibl to acc. sta q6h,x (5) lda q6l,x (4) diff --git a/ProDOS.203/ProDOS.S.GP.txt b/ProDOS.203/ProDOS.S.GP.txt index e8741186..0b8d1f2d 100644 --- a/ProDOS.203/ProDOS.S.GP.txt +++ b/ProDOS.203/ProDOS.S.GP.txt @@ -3,7 +3,7 @@ NEW * object code = mli_1 * global page -ofsG .EQ H2E00-MLI offset to global org +ofsG .EQ $E00-MLI offset to global org H2E00 jmp mlient1 $2E00-2EFF moved to $BF00 jspare .EQ *-ofsG @@ -16,7 +16,7 @@ p8errv .EQ *-ofsG error reporting hook. sysdeath .EQ *-ofsG jmp sysdeath1 system failure hook. p8error .EQ *-ofsG P8 error code - .DA #0 + .DA #0 drivertbl1 .EQ *-ofsG device driver table 1 .DA nodevice .DA nodevice @@ -35,7 +35,7 @@ drivertbl2 .EQ *-ofsG device driver table 2 .DA nodevice .DA nodevice .DA nodevice -devnum .EQ *-ofsG most recent accessed device +*devnum .EQ *-ofsG most recent accessed device .DA #0 numdevs .EQ *-ofsG count (-1) active devices .DA #$ff @@ -50,7 +50,7 @@ mlient1 .EQ *-ofsG sei jmp mlicont aftirq .EQ *-ofsG irq returns here. - sta ramin read/write RAM bank 1 + sta RRAMWRAMBNK1 read/write RAM bank 1 jmp fix45 restore $45 after interrupt in LC oldacc .EQ *-ofsG .DA #0 @@ -114,7 +114,7 @@ spare1 .EQ *-ofsG used to save acc .DA #0 newpfxptr .EQ *-ofsG appletalk alternate prefix ptr .DA #0 -machid .EQ *-ofsG machine ID byte +*machid .EQ *-ofsG machine ID byte .DA #0 rommap .EQ *-ofsG slot ROM bit map .DA #0 @@ -133,14 +133,14 @@ mliy .EQ *-ofsG MLI Y register savearea * workstation software patches this area HBFA0 .EQ *-ofsG - eor $E000 test for rom enable +GP.HBFA0 eor $E000 test for rom enable beq .1 taken if ram enabled - sta romin read ROM + sta RROMBNK2 read ROM bne .2 always .1 lda bnkbyt2 for alternate ram eor $D000 test beq .2 branch if not alternate ram - lda altram else enable alt $D000 + lda RRAMWRAMBNK2 else enable alt $D000 .2 pla return code rti re-enable interrupts and return @@ -151,32 +151,32 @@ mlicont .EQ *-ofsG sta bnkbyt1 for proper restoration when mli exits. lda $D000 sta bnkbyt2 - lda ramin force ram card on - lda ramin with write allowed + lda RRAMWRAMBNK1 force ram card on + lda RRAMWRAMBNK1 with write allowed jmp xdosmli irqexit .EQ *-ofsG lda bankid determine state of ram card (ROM/RAM) irqxit0 .EQ *-ofsG - beq .2 branch if ram card enabled. +GP.irqxit0 beq .2 branch if ram card enabled. bmi .1 branch if alternate $D000 enabled. lsr determine if no ram card present. bcc .3 branch if rom only system. - lda romin1 enable rom + lda RROMWRAMBNK2 enable rom bcs .3 always taken -.1 lda altram enable alternate $D000 -.2 lda #$01 preset bankid for rom. +.1 lda RRAMWRAMBNK2 enable alternate $D000 +.2 lda #$01 preset bankid for rom. sta bankid (reset if ram card interrupt) .3 lda p8areg restore acc rti exit irqent .EQ *-ofsG this entry only used when rom - bit ramin was enabled at time of interrupt. - bit ramin + bit RRAMWRAMBNK1 was enabled at time of interrupt. + bit RRAMWRAMBNK1 jmp irqrecev bnkbyt1 .EQ *-ofsG diff --git a/ProDOS.203/ProDOS.S.IRQ.txt b/ProDOS.203/ProDOS.S.IRQ.txt index 4fe4eacb..86859301 100644 --- a/ProDOS.203/ProDOS.S.IRQ.txt +++ b/ProDOS.203/ProDOS.S.IRQ.txt @@ -33,7 +33,7 @@ H2DC2 lda /romirq setup ROM re-entry lda #romirq pha gorom .EQ *-ofsR2 - sta romin hits ROM rts at $FFCB + sta RROMBNK2 hits ROM rts at $FFCB * 'lreset' address must = $FFCB for rom switch i/o to work @@ -49,8 +49,8 @@ fix45 .EQ *-ofsR2 sta p8areg A register savearea lda oldacc sta accsav - lda ramin read/write RAM bank 1 - lda ramin + lda RRAMWRAMBNK1 read/write RAM bank 1 + lda RRAMWRAMBNK1 lda afbank jmp irqxit0 stypfx .EQ *-ofsR2 fix appletalk PFI bug diff --git a/ProDOS.203/ProDOS.S.LDR.A.txt b/ProDOS.203/ProDOS.S.LDR.A.txt index 72ebe27c..8c693dfa 100644 --- a/ProDOS.203/ProDOS.S.LDR.A.txt +++ b/ProDOS.203/ProDOS.S.LDR.A.txt @@ -10,8 +10,10 @@ LDR.MSG.AppleII .AS "Apple II" LDR.MSG.ProDOS .AS "ProDOS 8 V2.0.3 " .AS "06-May-93" H202F .AS " " -H203B .AS "Copyright Apple Computer, Inc., 1983-93" -H2062 .AS "All Rights Reserved." +LDR.MSG.Copyright + .AS "Copyright Apple Computer, Inc., 1983-93" +LDR.MSG.Reserved + .AS "All Rights Reserved." p16start inc setuprts set = 2 for GQuit rts atalkset inc setuprts set = 1 for appletalk rts @@ -50,7 +52,7 @@ prostart lda unitnum lda kversion bne m48k still not. - lda romin read ROM + lda RROMBNK2 read ROM jsr whchrom get preliminary system config bcs m48k machine too small lda idapple @@ -69,7 +71,7 @@ m64k ldx #H2367 yx=2367 relocation table H20CE bcc H20D3 jmp relocerr -H20D3 lda romin read ROM +H20D3 lda RROMBNK2 read ROM ldx version ROM id byte cpx #$06 bne H211D then it's a //e @@ -94,7 +96,7 @@ mach2 inc cflag //c or later set7 ora #$80 H20FD sta idapple - lda romin read ROM + lda RROMBNK2 read ROM sec jsr idroutine returns system info bcs H211D branch if // family @@ -127,8 +129,8 @@ H2139 bcs H20CE sta jspare+1 P8 system death vector lda /calldisp sta jspare+2 - lda altram read/write RAM bank 2 - lda altram + lda RRAMWRAMBNK2 read/write RAM bank 2 + lda RRAMWRAMBNK2 ldx #altdsptbl GQuit dispatcher ldy /altdsptbl lda setuprts @@ -162,29 +164,29 @@ H216E jsr reloc php save interrupt status pla in acc. sei no interrupts. - sta setaltzp use alt zero page/stack + sta SETALTZP use alt zero page/stack stx auxsp init aux sp to $FF - sta setstdzp use main zero page/stack + sta SETALTZP use main zero page/stack pha restore interrupt status plp - sta int3rom enable internal slot 3 ROM + sta CLRC3ROM enable internal slot 3 ROM jsr H2C80 install ram disk * check interrupt vector to determine ROM version -noramdsk lda romin1 read ROM/write RAM bank 2 +noramdsk lda RROMWRAMBNK2 read ROM/write RAM bank 2 ldy irqv interrupt vector ldx irqv+1 x = high byte jsr lc1in set language card bank 1 to r/w cpx #$D0 is it > $D000 (old roms) lda #$00 bcs H21C5 branch if old roms - sta setaltzp use alt zero page/stack + sta SETALTZP use alt zero page/stack lda #$FF set aux sp = $FF sta auxsp stx irqv+1 interrupt vector sty irqv save irq vector in aux lc - sta setstdzp use main zero page/stack + sta SETALTZP use main zero page/stack stx irqv+1 save irq vector in main lc sty irqv lda #$01 @@ -198,26 +200,26 @@ H21C5 sta irqflag 1 = new roms * check for a rom in slot 3. if no rom, use internal $C300 firmware -H21D5 sta int3rom enable internal slot 3 ROM +H21D5 sta CLRC3ROM enable internal slot 3 ROM lda rommap slot ROM bit map and #$08 mask all but slot 3 - bne isromin3 taken if rom in slot 3 + bne isRROMBNK23 taken if rom in slot 3 bra H2247 else continue booting * found a rom in slot 3. is it an external, identifiable 80 col card * with interrupt routines? if so, enable it else use internal $C300 firmware. -isromin3 sta slot3rom enable slot 3 rom - lda slot3id1 check card id bytes +isRROMBNK23 sta SETC3ROM enable slot 3 rom + lda $C305 check card id bytes cmp #$38 bne hitswtch not terminal card - lda slot3id2 + lda $C307 cmp #$18 bne hitswtch - lda slot3id3 + lda $C30B cmp #$01 bne hitswtch - lda ext80col is it an apple 80 col compatible card? + lda $C30C is it an apple 80 col compatible card? and #$F0 cmp #$80 bne hitswtch if not. @@ -229,12 +231,12 @@ isromin3 sta slot3rom enable slot 3 rom cmp #$2C does card have an interrupt handler? beq docard yes -hitswtch sta int3rom enable internal $C300 firmware +hitswtch sta CLRC3ROM enable internal $C300 firmware * verify that the card in aux slot is actually present - sta store80on enable 80-col store - sta txtpage2 switch in text page 2 + sta SET80STORE enable 80-col store + sta SETPAGE2 switch in text page 2 lda #$EE sta txtp2 asl @@ -245,8 +247,8 @@ hitswtch sta int3rom enable internal $C300 firmware lsr txtp2 cmp txtp2 -H2230 sta txtpage1 main memory - sta store80off disable 80-col store +H2230 sta CLRPAGE2 main memory + sta CLR80STORE disable 80-col store beq docard branch if card is there lda machid machine ID byte and #$FD clear 80-col bit 2 (no card) @@ -268,7 +270,7 @@ H2247 lda cortland are we running on a //gs ? H225D lda setuprts get setup entry point flag beq H2267 taken if normal boot. - lda romin read ROM + lda RROMBNK2 read ROM rts return to caller at setup entry point. setuprts .DA #$00 0 = normal boot, <>0 = return @@ -280,14 +282,14 @@ H2267 jsr MLI online .DA LDR.MLIONLINE.P bcs relocerr - lda PrefixBuf+1 get volume name length. + lda pbuf+1 get volume name length. and #$0F strip devnum beq relocerr inc add 1 for leading '/' - sta PrefixBuf save prefix length. + sta pbuf save prefix length. lda #'/' place leading '/' in prefix buffer - sta PrefixBuf+1 + sta pbuf+1 jsr MLI set prefix .DA #MLISETPREFIX @@ -295,11 +297,11 @@ H2267 jsr MLI online bcs relocerr tax =0 - stx ZP.DstPtr + stx dst ldy #$02 read directory into buffer lda /DirBlkBuf -H228E sta ZP.DstPtr+1 +H228E sta dst+1 sta LDR.MLIREADBLOCK.P+4 sty LDR.MLIREADBLOCK.P+5 stx LDR.MLIREADBLOCK.P+6 @@ -310,14 +312,14 @@ H228E sta ZP.DstPtr+1 bcs relocerr ldy #$03 get next block# from link - lda (ZP.DstPtr),y + lda (dst),y tax dey - ora (ZP.DstPtr),y if both bytes are the same + ora (dst),y if both bytes are the same beq H22B7 then no more blocks of directory. - lda (ZP.DstPtr),y + lda (dst),y tay - lda ZP.DstPtr+1 + lda dst+1 clc adc #$02 add $200 to buffer pointer cmp /dbuf+$800 until it points past end of buffer. @@ -327,7 +329,7 @@ H22B7 jmp lodintrp jmp to 'licode' (load interpreter) * relocation/configuration error -relocerr sta romin read ROM +relocerr sta RROMBNK2 read ROM jsr home ldy #$1D @@ -354,11 +356,11 @@ LDR.MSG.EnhErr .AS "REQUIRES ENHANCED APPLE IIE OR LATER" LDR.MLIONLINE.P .DA #2 .DA #$60 - .DA PrefixBuf+1 + .DA pbuf+1 LDR.MLISETPREFIX.P .DA #1 - .DA PrefixBuf + .DA pbuf LDR.MLIREADBLOCK.P .DA #3 @@ -380,24 +382,24 @@ H232B .DA #1 move interpreter loader code .DA #$01 .DA lookptr .DA $0002 - .DA ZP.DstPtr + .DA dst .DA #$01 move 128k test to zero page .DA tst128 destination .DA H2622-H25DC length .DA H25DC source - .DA #FF done + .HS FF done dsp64 .DA #$01 move p8 dispatcher code .DA displc2 destination .DA birdbye-disp1obj length (must be <= 3 pages) .DA disp1obj source - .DA #FF done + .HS FF done newquitbl .DA #$01 move Bird's Bye code .DA displc2 dest .DA GQdisp-birdbye length (must be <= 3 pages) .DA birdbye source - .DA #FF done + .HS FF done altdsptbl .DA #$01 move GQuit launcher .DA displc2 destination @@ -407,11 +409,11 @@ altdsptbl .DA #$01 move GQuit launcher .DA dispadr to dispadr for gsos .DA $0300 length (must be <= 3 pages) .DA GQdisp source - .DA #FF done + .HS FF done * tables for moving 64k version of mli for execution -H2367 .DA #$01 relocation table. 1=move src to ZP.DstPtr +H2367 .DA #$01 relocation table. 1=move src to dst .DA lanirq destination .DA H2E00-H2D9B length to move .DA H2D9B source @@ -430,11 +432,11 @@ H2367 .DA #$01 relocation table. 1=move src to ZP.DstPtr .DA rwts .DA disp1obj-blockio length of disk ii driver .DA blockio - .DA #FF done + .HS FF done * move thunderclock -rlclk64 .DA #$01 relocation table. 1=move src to ZP.DstPtr +rlclk64 .DA #$01 relocation table. 1=move src to dst .DA tclk_in destination .DA tclk_end-tclock_0 length of thunderclock driver .DA tclock_0 source @@ -445,15 +447,15 @@ rlclk64 .DA #$01 relocation table. 1=move src to ZP.DstPtr .HS 00 .HS C1C1 clock64 .DA #$00 - .DA #FF done + .HS FF done * move cortland clock -cortclock .DA #$01 relocation table. 1=move src to ZP.DstPtr +cortclock .DA #$01 relocation table. 1=move src to dst .DA tclk_in destination .DA cclk_end-cclock_0 length of cortland clock driver .DA cclock_0 source - .DA #FF done + .HS FF done * load and run appletalk configuration file (atinit) if present * or continue loading and running .system file @@ -487,7 +489,7 @@ gfi_ok lda gfi_type .DA #$CC .DA clparm bne H23E2 error - lda romin enable ROM + lda RROMBNK2 enable ROM jsr sysentry execute ATinit H23DF jmp goloadint execute .system file @@ -548,7 +550,7 @@ H2453 ldy #$10 check file type. lda (idxl),y beq H2432 if deleted file. and #$0F strip file 'kind'. - sta PrefixBuf save length of name. + sta pbuf save length of name. cmp #$08 must be at least 'x.system' bcc H2432 else, ignore it. tay compare last 7 chars for '.system' @@ -563,10 +565,10 @@ H246C lda (idxl),y ldy #$00 H247A iny lda (idxl),y - sta PrefixBuf,y + sta pbuf,y ora #$80 msb on so can be displayed if error sta iomess+$11,y - cpy PrefixBuf + cpy pbuf bne H247A lda #$A0 space after name sta iomess+$12,y @@ -610,8 +612,8 @@ H24C8 jsr MLI close interpreter file lda kbd else, check for keypress cmp #$9B escape? bne H24DF if not. - sta kbdstrobe clear keyboard -H24DF lda romin enable ROM + sta KBDSTROBE clear keyboard +H24DF lda RROMBNK2 enable ROM jmp sysentry go run interpreter cflag .EQ *-ofsL .HS 00 set if a //c. @@ -647,7 +649,7 @@ ierlen .EQ *-ofsL .HS 00 opparm .EQ *-ofsL parms for open call .HS 03 - .DA PrefixBuf + .DA pbuf .DA iobuf .HS 01 efparm .EQ *-ofsL parms for get eof call @@ -683,8 +685,8 @@ H257B .DA breakv jmp oldrst ctrl-y vector .HS 004000 .DA irqent global page interrupt vector -lc1in lda ramin read/write language card RAM bank 1 - lda ramin +lc1in lda RRAMWRAMBNK1 read/write language card RAM bank 1 + lda RRAMWRAMBNK1 rts * determine which system model and save in machine id (idapple) @@ -699,7 +701,7 @@ whchrom stz idapple assume standard apple // lda #$40 cpx #$EA apple //+? bne H25B6 it not, then machine is unknown. - ldx HFB1E apple /// in emulation? + ldx $FB1E apple /// in emulation? cpx #$AD beq H25BC taken if apple //+. lda #$D0 test again for apple /// emulation @@ -708,7 +710,7 @@ whchrom stz idapple assume standard apple // H25B4 sec apple /// emulation is not allowed rts because insufficient memory. H25B6 lda #$02 machine unknown - sta (ZP.DstPtr),y + sta (dst),y bne H25D9 always. H25BC sta idapple save machine id @@ -732,8 +734,8 @@ H25D9 jmp tst128 jumps to page 0 routine below H25DC sta idapple H25DC-2621 was moved to location tst128 bpl not128 if already determined < 128k lda #$EE - sta wrcardram write to aux mem while on main zp - sta rdcardram and read aux mem. + sta SETWRITEAUX write to aux mem while on main zp + sta SETREADAUX and read aux mem. sta dbuf write these locs just to test aux mem sta lodintrp 1k apart from each other. lda dbuf @@ -748,8 +750,8 @@ H25DC sta idapple H25DC-2621 was moved to location tst128 noaux sec no aux memory available. bcs H2607 H2606 clc -H2607 sta wrmainram switch back to main memory - sta rdmainram +H2607 sta CLRWRITEAUX switch back to main memory + sta CLRREADAUX bcs not128 if < 128k lda idapple ora #$30 set id = 128k present diff --git a/ProDOS.203/ProDOS.S.LDR.B.txt b/ProDOS.203/ProDOS.S.LDR.B.txt index f189369a..96c78a85 100644 --- a/ProDOS.203/ProDOS.S.LDR.B.txt +++ b/ProDOS.203/ProDOS.S.LDR.B.txt @@ -3,9 +3,9 @@ NEW * prodos greeting splash screen -LDR.Splash lda spkr click speaker - sta clr80vid disable 80 col hardware - sta store80off disable 80 col store +LDR.Splash lda SPEAKER click speaker + sta CLR80DISP disable 80 col hardware + sta CLR80STORE disable 80 col store jsr setnorm set normal text mode jsr init init text screen jsr setvid reset output to screen @@ -15,14 +15,14 @@ LDR.Splash lda spkr click speaker ldx #$07 -.1 lda H2009,x print title +.1 lda LDR.MSG.AppleII,x sta vline10+16,x dex bpl .1 ldx #$1D -.2 lda H2011,x +.2 lda LDR.MSG.ProDOS,x sta vline12+5,x dex bpl .2 @@ -36,14 +36,14 @@ LDR.Splash lda spkr click speaker ldx #$26 -.4 lda H203B,x +.4 lda LDR.MSG.Copyright,x sta vline23,x dex bpl .4 ldx #$13 -.5 lda H2062,x +.5 lda LDR.MSG.Reserved,x sta vline24+10,x dex bpl .5 @@ -55,7 +55,7 @@ LDR.Splash lda spkr click speaker lda #$80 trb newvideo video mode select -.8 lda spkr click speaker +.8 lda SPEAKER click speaker rts * find all disk devices in system slots and set up address @@ -68,8 +68,8 @@ driveradr .DA 0 d2idx .DA #0 diskins2 .DA #0 msb clear if drive in slot 2 -devsrch stz ZP.DstPtr - stz ZP.DstPtr+1 +devsrch stz dst + stz dst+1 stz idxl ldx #$FF init to no active devices. stx numdevs count (-1) active devices. @@ -241,7 +241,7 @@ H27BA ldy #$05 bne H27E4 ldy #$0B lda (idxl),y - dec a must = 1 + dec must = 1 bne H27E4 iny lda (idxl),y @@ -417,7 +417,7 @@ H28E8 lda (idxl),y * check unknown card to see if disk id = $Cn00:nn 20 nn 00 nn 03 -cmpid lda clrrom switch out $C8 ROMs +cmpid lda CLRC8ROM switch out $C8 ROMs ldy #$05 H28F6 lda (idxl),y compare id bytes cmp dskid,y @@ -543,7 +543,7 @@ H2994 lda idxl+1 sta spvectlo-1,x lda spvect+2 sta spvecthi-1,x - lda romin write protect lc ram. + lda RROMBNK2 write protect lc ram. inc numdevs ldx numdevs tya @@ -576,7 +576,7 @@ H29F8 rts * with the following parameters: * * (1) command: 0 = zero destination range -* 1 = move data from src to ZP.DstPtr +* 1 = move data from src to dst * 2 = hi addr ref tbl, relocate and move * 3 = lo/hi addr ref tbl, relocate and move * 4 = program, relocate and move @@ -601,10 +601,10 @@ rloop lda (idxl) get relocation command. tax move destination to page 0 ldy #$01 for indirect access. lda (idxl),y - sta ZP.DstPtr + sta dst iny lda (idxl),y - sta ZP.DstPtr+1 + sta dst+1 iny lda (idxl),y also the length (byte count) sta cnt of the destination area. @@ -656,7 +656,7 @@ H2A5A iny cpx #$03 beq rlcode branch if program relocation jsr reladr otherwise, relocate addresses in -H2A70 jsr move tables then move to destination. +H2A70 jsr moveSrcDst tables then move to destination. bra rloop do next table rlend clc rts @@ -671,16 +671,16 @@ zero jsr adjtbl adj table pointer to next entry. ldy cnt+1 is it at least 1 page? beq H2A94 branch if not. tay -H2A89 sta (ZP.DstPtr),y +H2A89 sta (dst),y iny bne H2A89 - inc ZP.DstPtr+1 next page + inc dst+1 next page dec cnt+1 bne H2A89 if more pages to clear. H2A94 ldy cnt any bytes left to 0? beq H2AA0 if not. tay -H2A99 sta (ZP.DstPtr),y zero out remainder +H2A99 sta (dst),y zero out remainder iny cpy cnt bcc H2A99 @@ -694,32 +694,32 @@ adjtbl tya add previous table length to bcc H2AB2 inc idxl+1 H2AB2 rts -move lda src+1 is move up, down or not at all? - cmp ZP.DstPtr+1 +moveSrcDst lda src+1 is move up, down or not at all? + cmp dst+1 bcc movup bne movdn lda src - cmp ZP.DstPtr + cmp dst bcc movup bne movdn rts no move. movup ldy cnt+1 calc highest page to move up - tya and adj src and ZP.DstPtr. + tya and adj src and dst. clc adc src+1 sta src+1 tya clc - adc ZP.DstPtr+1 - sta ZP.DstPtr+1 + adc dst+1 + sta dst+1 ldy cnt move partial page 1st. beq H2ADE taken if no partial pages H2AD6 dey lda (src),y - sta (ZP.DstPtr),y + sta (dst),y tya end of page transfer? bne H2AD6 no -H2ADE dec ZP.DstPtr+1 +H2ADE dec dst+1 dec src+1 dec cnt+1 done with all pages? bpl H2AD6 no @@ -728,17 +728,17 @@ movdn ldy #$00 lda cnt+1 partial page move only? beq H2AFC taken if < 1 page to move H2AED lda (src),y - sta (ZP.DstPtr),y + sta (dst),y iny bne H2AED - inc ZP.DstPtr+1 next page + inc dst+1 next page inc src+1 dec cnt+1 more pages? bne H2AED if more. H2AFC lda cnt move partial page. beq H2B09 if no more to move H2B00 lda (src),y - sta (ZP.DstPtr),y + sta (dst),y iny cpy cnt bne H2B00 @@ -864,7 +864,7 @@ patch101 .OP 65816 phx pea $0000 length of patch = 0000/0010 pea $0010 - _PtrToHand + >IIGS PtrToHand plx low word of handle plb set DBR to handle's bank lda >1,x get upper 16 bits of 24 bit address diff --git a/ProDOS.203/ProDOS.S.RAM.txt b/ProDOS.203/ProDOS.S.RAM.txt index df54fd97..f1056fe7 100644 --- a/ProDOS.203/ProDOS.S.RAM.txt +++ b/ProDOS.203/ProDOS.S.RAM.txt @@ -65,7 +65,7 @@ H2D4B lda a1l1,x plp and status. rts mainwrt .EQ *-ofsR2 transfer data to card. - sta wrcardram write to alt 48K + sta SETWRITEAUX write to alt 48K ldy #$00 H2D6A lda (A1L),y pointers set in card by 'setptr' sta (A4L),y @@ -73,7 +73,7 @@ H2D6A lda (A1L),y pointers set in card by 'setptr' sta (A3L),y dey bne H2D6A - sta wrmainram write to main 48K. + sta CLRWRITEAUX write to main 48K. lda #donewrt done writing card sta passit lda /donewrt @@ -85,7 +85,7 @@ a1l1 .EQ *-ofsR2 13 bytes of storage * end of obj ram_2 r2_end .EQ * - .BS $D9B-(r2_end-H2000) fill to lanirq ($FF9B see note below) + .BS $2D9B-* fill to lanirq ($FF9B see note below) *-------------------------------------- MAN SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM diff --git a/ProDOS.203/ProDOS.S.RAMI.txt b/ProDOS.203/ProDOS.S.RAMI.txt index 2b75b2fd..481d52a4 100644 --- a/ProDOS.203/ProDOS.S.RAMI.txt +++ b/ProDOS.203/ProDOS.S.RAMI.txt @@ -42,7 +42,7 @@ RAM_1 .BS $2C80-* rts end of obj ram_1 RAM_1_END .EQ * end of /RAM installer - .BS 256-* pad 0's to page boundary + .BS $2D00-* pad 0's to page boundary *-------------------------------------- MAN SAVE USR/SRC/PRODOS.203/PRODOS.S.RAMI diff --git a/ProDOS.203/ProDOS.S.RAMX.txt b/ProDOS.203/ProDOS.S.RAMX.txt index fc669a47..3d14f9ec 100644 --- a/ProDOS.203/ProDOS.S.RAMX.txt +++ b/ProDOS.203/ProDOS.S.RAMX.txt @@ -18,9 +18,9 @@ NEW ofsR0 .EQ *-ramdest offset to /RAM driver org -ramsrc lda rd80col read 80 store +ramsrc lda RD80STORE read 80 store pha save for later - sta store80off turn off 80 store + sta CLR80STORE turn off 80 store ldx #$04 move the parameters for use: L5109 lda A4L,x cmd, unit, bufptr and block (lo) sta tcmd,x -> tcmd, tunit, R2L, R2H, R01 @@ -80,13 +80,13 @@ lcrd .EQ *-ofsR0 bcs L5173 in main bank. ora #$10 in secondary bank. bne L5179 branch always. -L5173 sta altram turn on main $D000 - sta altram +L5173 sta RRAMWRAMBNK2 turn on main $D000 + sta RRAMWRAMBNK2 L5179 sta R01 restore R1. lda R2H save R2 for later pha ldx R2L - sta setaltzp use alternate zero page/stack + sta SETALTZP use alternate zero page/stack lda /dbuf set R2 to dbuf sta R2H lda #dbuf @@ -99,14 +99,14 @@ L5194 lda (A1L),y move A1,A2 to A4,A3 sta (A3L),y dey bne L5194 - sta setstdzp use main zero page/stack + sta SETALTZP use main zero page/stack L51A2 stx R2L pla restore R2 sta R2H plp get direction. L51AA bcs L51B5 write, done with move. - sta ramin switch in MLI part of LC - sta ramin + sta RRAMWRAMBNK1 switch in MLI part of LC + sta RRAMWRAMBNK1 jsr blockdo0 read, transfer dbuf to main L51B5 jmp exitcard L51B8 jsr blockdo0 transfer main to dbuf. @@ -125,7 +125,7 @@ blockdo1 .EQ *-ofsR0 blockdo .EQ *-ofsR0 jsr setptr set pointers. bcs L51DB it's a write. - sta wrmainram transfer buffer directly to main. + sta CLRWRITEAUX transfer buffer directly to main. tay 0 left from setptr. L51CC lda (A1L),y transfer A1,A2 to A4,A3 sta (A4L),y @@ -133,7 +133,7 @@ L51CC lda (A1L),y transfer A1,A2 to A4,A3 sta (A3L),y dey bne L51CC - sta wrcardram back the way it was. + sta SETWRITEAUX back the way it was. donewrt .EQ *-ofsR0 mainwrt returns here rts L51DB lda #mainwrt pointers set up, @@ -315,11 +315,11 @@ access .EQ *-ofsR0 .HS 7F 128 blocks exitcard .EQ *-ofsR0 - lda ramin restore language card - lda ramin + lda RRAMWRAMBNK1 restore language card + lda RRAMWRAMBNK1 pla get 80store bpl L52EA 80store wasn't on - sta store80on enable 80store + sta SET80STORE enable 80store L52EA jmp bypass jump around passit passit .EQ *-ofsR0 .HS 0000 diff --git a/ProDOS.203/ProDOS.S.SEL0.txt b/ProDOS.203/ProDOS.S.SEL0.txt index d0c43d24..97da12e8 100644 --- a/ProDOS.203/ProDOS.S.SEL0.txt +++ b/ProDOS.203/ProDOS.S.SEL0.txt @@ -11,10 +11,10 @@ NEW ofsS .EQ *-dispadr offset to dispatcher org -disp1obj lda romin read ROM - sta clr80vid disable 80 col hardware - sta clraltchar normal LC, flashing UC - sta store80off disable 80 column store +disp1obj lda RROMBNK2 read ROM + sta CLR80DISP disable 80 col hardware + sta CLRALTCHAR normal LC, flashing UC + sta CLR80STORE disable 80 column store jsr setnorm set normal text mode jsr init init text screen jsr setvid reset output to screen @@ -29,7 +29,7 @@ L5A22 sta memmap,x bpl L5A22 lda #$CF protect zero page, stack and sta memmap $400-$7FF (text screen display) -L5A2D jsr home clear screen +L5A2D jsr home clear screen jsr crout position top/left ldx #dsp1msg0-dsp1msgs jsr prntmsg 'enter prefix...' @@ -37,14 +37,14 @@ L5A2D jsr home clear screen sta cv jsr crout jsr MLI get prefix - .DA #$C7 - .DA dsp1pfx - ldx PrefixBuf get prefix length + .DA #$C7 + .DA dsp1pfx + ldx pbuf get prefix length lda #$00 put 0 at end of prefix - sta PrefixBuf+1,x - ldx PrefixBuf get length. + sta pbuf+1,x + ldx pbuf get length. beq L5A5D if no prefix to display. -L5A52 lda PrefixBuf,x display prefix directly to screen +L5A52 lda pbuf,x display prefix directly to screen ora #$80 normal text sta vline5-1,x line 5 dex @@ -92,12 +92,12 @@ L5A9F cmp #$AE below '.' ? goodkey inx cpx #$27 more than 39 chars ? bcs L5A76 then too many, go restart. - sta PrefixBuf,x save it + sta pbuf,x save it jsr cout jmp getkey get another. L5ABD cpx #$00 prefix length = 0 ? beq L5AD3 if yes, don't set length. - stx PrefixBuf set prefix length. + stx pbuf set prefix length. jsr MLI call mli to set prefix. .DA #$C6 .DA dsp1pfx @@ -153,12 +153,12 @@ L5B29 pha it's good, save it. inx cpx #$27 more than 39 chars ? bcs L5AF6 too long, get pathname again. - sta PrefixBuf,x store it. + sta pbuf,x store it. jmp loop1 get another char L5B3C lda #$A0 jsr cout after cr, blank out the cursor. - stx PrefixBuf put length in front of the name. - jsr MLI get file info for pathname in PrefixBuf + stx pbuf put length in front of the name. + jsr MLI get file info for pathname in pbuf .DA #$C4 .DA dsp1info bcc L5B4F if no errors. @@ -279,7 +279,7 @@ dsp1err3 .EQ *-ofsS .HS 00 dsp1info .EQ *-ofsS get file info parms .DA #$0A 10 parameters - .DA PrefixBuf pathname buffer + .DA pbuf pathname buffer dsp1acess .EQ *-ofsS .HS 00 access dsp1type .EQ *-ofsS @@ -287,7 +287,7 @@ dsp1type .EQ *-ofsS .BS 13 the rest are unimportant dsp1open .EQ *-ofsS open file parms .HS 03 3 parameters for open - .DA PrefixBuf pathname buffer + .DA pbuf pathname buffer .DA fbuf fcb buffer dsp1refn .EQ *-ofsS .HS 00 reference # @@ -311,7 +311,7 @@ dsp1eofb .EQ *-ofsS .HS 000000 3 byte eof dsp1pfx .EQ *-ofsS get/set prefix parms .DA #01 1 parameter - .DA PrefixBuf prefix buffer + .DA pbuf prefix buffer disp1end .EQ * .BS $300-disp1end+disp1obj fill to page boundary diff --git a/ProDOS.203/ProDOS.S.SEL1.txt b/ProDOS.203/ProDOS.S.SEL1.txt index 50b8c994..859d16e8 100644 --- a/ProDOS.203/ProDOS.S.SEL1.txt +++ b/ProDOS.203/ProDOS.S.SEL1.txt @@ -6,13 +6,13 @@ NEW ofsB .EQ *-dispadr offset to Bird's Bye org birdbye cld - lda romin read ROM + lda RROMBNK2 read ROM stz softev lda /dispadr set reset vector to 'dispadr' sta softev+1 jsr setpwrc create power-up byte lda #$A0 - jsr init80 initialize 80 column text card + jsr $C300 initialize 80 column text card ldx #$17 * set up memory bitmap in global page @@ -50,17 +50,17 @@ volname sta ol_unit store unit number for online. .DA ol_parms bcs L5D32 error check. stz dlevel haven't read root directory yet. - lda PrefixBuf+1 load description byte. + lda pbuf+1 load description byte. and #$0F mask for name length. beq L5D32 if 0, then try next unit. adc #$02 add 2 to length. tax name length in x. vnam1 .EQ *-ofsB - stx PrefixBuf save the name length + stx pbuf save the name length lda #$2F '/' - sta PrefixBuf+1 slash before and - sta PrefixBuf,x after name. - stz PrefixBuf+1,x null after complete name. + sta pbuf+1 slash before and + sta pbuf,x after name. + stz pbuf+1,x null after complete name. * open and read directory @@ -72,7 +72,7 @@ vnam1 .EQ *-ofsB beq L5D32 yes, just move to next volume. jsr bell1 no, generate bell tone jsr popdir and stay at same level. - stx PrefixBuf + stx pbuf jmp keyloop L5D7F inc dlevel stz filecount zero file count. @@ -159,21 +159,21 @@ L5E15 lda sysentry,y get byte of filename sta (fnstore),y restore in name buffer inc filecount increment valid file counter bne L5DB5 get next file (branch always) -L5E26 jmp ds2 error. try next unit. -L5E29 jsr MLI close directory file +L5E26 jmp ds2 error. try next unit. +L5E29 jsr MLI close directory file .DA #$CC .DA cl_parms bcs L5E26 error. jsr settxt use full screen for windows jsr home lda #$17 cursor at bottom of screen. - jsr tabv set vertical position. + jsr TABV set vertical position. ldy #$00 lda #$14 horizontal position. jsr sethorz print message. jsr homecurs cursor to upper/left. ldx #$00 -L5E48 lda PrefixBuf+1,x +L5E48 lda pbuf+1,x beq showfiles jsr output inx @@ -225,7 +225,7 @@ L5EAA jsr setinv set inverse text mode. keyloop .EQ *-ofsB L5EB0 lda kbd get keyboard input. bpl L5EB0 loop until key pressed. - sta kbdstrobe clear strobe. + sta KBDSTROBE clear strobe. jsr setnorm set normal text mode. ldx filecount are any files displayed ? beq L5ECB no, don't accept arrow keys or return. @@ -246,14 +246,14 @@ L5ECB cmp #$89 tab ? dec dlevel bra L5EF1 popdir .EQ *-ofsB - ldx PrefixBuf + ldx pbuf L5EDD dex - lda PrefixBuf,x + lda pbuf,x cmp #$2F slash bne L5EDD cpx #$01 bne L5EEC - ldx PrefixBuf + ldx pbuf L5EEC rts L5EED jmp ds2 set up new unit number. L5EF0 inx @@ -267,14 +267,14 @@ L5EF4 jsr MLI set prefix bcs L5EED error. ldx valcnt get name number. jsr namecalc set up name storage area (on return y=0) - ldx PrefixBuf get prefix length. + ldx pbuf get prefix length. L5F04 iny start at y = 1. lda (fnstore),y get character of name. inx - sta PrefixBuf,x store in prefix buffer. + sta pbuf,x store in prefix buffer. cpy namelen check length of name. bcc L5F04 loop until all transferred. - stx PrefixBuf put prefix length into buffer. + stx pbuf put prefix length into buffer. ldy valcnt get file number. lda filetyps,y get file type. bpl L5EF0 branch if directory. @@ -347,7 +347,7 @@ nameprnt .EQ *-ofsB sbc topname calculate line # to display name inc inc - jsr tabv set vertical position. + jsr TABV set vertical position. lda filetyps,x get filetype (x is unchanged by tabv). bmi L5F99 branch if system file. stz ch80col adjust cursor position. @@ -393,7 +393,7 @@ fldrmsg .EQ *-ofsB .HS 00 op_parms .EQ *-ofsB open parameters .DA #$03 3 parms - .DA PrefixBuf pathname + .DA pbuf pathname .DA op_buf file buffer op_refn .EQ *-ofsB .HS 00 reference number @@ -404,10 +404,10 @@ ol_parms .EQ *-ofsB online parameters .HS 02 2 parms ol_unit .EQ *-ofsB .HS 60 unit number, default = s6, d1 - .DA PrefixBuf+1 data buffer + .DA pbuf+1 data buffer pf_parms .EQ *-ofsB set prefix parameters .DA #01 one parm - .DA PrefixBuf pathname + .DA pbuf pathname rd_parms .EQ *-ofsB read parameters .DA #04 4 parms rd_refn .EQ *-ofsB diff --git a/ProDOS.203/ProDOS.S.SEL2.txt b/ProDOS.203/ProDOS.S.SEL2.txt index 792fcefa..3275a1a3 100644 --- a/ProDOS.203/ProDOS.S.SEL2.txt +++ b/ProDOS.203/ProDOS.S.SEL2.txt @@ -17,7 +17,7 @@ NEW ofsQ .EQ *-dispadr offset to GQuit dispatcher org -GQdisp lda ramin read/write LC bank 1 +GQdisp lda RRAMWRAMBNK1 read/write LC bank 1 clc xce 16 bit native mode. jmp >P8QUIT go to GQuit. @@ -69,10 +69,10 @@ L6020 jsr MLI set prefix L602D xce native mode (carry clear) * LONG I 16 bit regs, 8 bit acc. - lda PrefixBuf+1 is the application name + lda pbuf+1 is the application name cmp #$2F a complete pathname ? bne L603D no, use prefix as volume name - ldx #PrefixBuf else use the application name. + ldx #pbuf else use the application name. jsr copyvol copy the volume name to buffer. L603D sec back to emulation mode. xce @@ -120,7 +120,7 @@ L608B jsr dolaunch check for possible 2nd pathname. bcc L6099 if so then run the program. lda #$45 volume not found error. bra L60AB -L6099 lda romin enable ROM +L6099 lda RROMBNK2 enable ROM jmp sysentry execute the system application gqerror .EQ *-ofsQ @@ -205,8 +205,8 @@ L6101 pha save error code in case esc pressed. pea button2 'Escape' >IIGS TLTextMountVolume lda [$01] restore first 2 bytes of vilume name - xba back to their original positions - inc and values. + xba back to their original positions + inc and values. sta [$01] pla which button: 1=Return 2=Escape. pld restore D reg. @@ -260,6 +260,7 @@ dolaunch .EQ *-ofsQ cmp sysentry+4 beq L6170 both match, go get a filename message. L616F rts just return to launch the app. + L6170 lda #$FF put flag conditioning value on pha the stack (assume error). clc native 16-bit mode. @@ -293,7 +294,7 @@ L6170 lda #$FF put flag conditioning value on pha (will be used as a direct page pointer) tsc get the stack pointer. phd save current direct register. - inc a point to new direct page space. + inc point to new direct page space. tcd make a new direct page. lda [$04] de-reference the handle. sta $00 @@ -353,16 +354,16 @@ L6225 dex don't include trailing slash. .DA #$C6 .DA pfxparms lda #$00 set z-flag -L6231 rts and go launch the app. +L6231 rts and go launch the app. * check for disk volume * * on exit: * carry clear = disk was found * carry set = disk not found - .OP 65816 + ckfordrv .EQ *-ofsQ - clc native mode +SEL2.ckfordrv clc native mode xce * LONG I 16-bit regs, 8-bit acc. ldx #sysentry+6 point to pathname buffer. @@ -390,7 +391,7 @@ pfxparms .EQ *-ofsQ set prefix parms. .DA inbuf address of prefix. opnparms .EQ *-ofsQ open parms. .DA #3 3 parms. - .DA PrefixBuf pathname + .DA pbuf pathname .DA op_buf i/o buffer oprefnum .EQ *-ofsQ .HS 00 reference # diff --git a/ProDOS.203/ProDOS.S.TCLK.txt b/ProDOS.203/ProDOS.S.TCLK.txt index 3e3fe828..b35cf92b 100644 --- a/ProDOS.203/ProDOS.S.TCLK.txt +++ b/ProDOS.203/ProDOS.S.TCLK.txt @@ -14,7 +14,8 @@ tclock_0 ldx clkslt clock slot = $C1. lda #$A3 send numeric mode byte to Thunderclock jsr wttcp clkslt .EQ *-ofsT+2 points to $C1. - jsr rdtcp read month, day of week, day of month + +TCLK.clkslt jsr rdtcp read month, day of week, day of month clc and time into input buffer. ldx #$04 index for 5 values. ldy #$0C read minutes 1st, month last. @@ -38,10 +39,10 @@ clkslt .EQ *-ofsT+2 points to $C1. lsr ror ror - ror high bit of month held in carry + ror high bit of month held in carry ora A1L sta p8date save low value of date. - php save high bit of month. + php save high bit of month. and #$1F isolate day. adc tdays-1,y (y = month) bcc .2 branch if not Sept 13 thru 30th diff --git a/ProDOS.203/ProDOS.S.XDOS.A.txt b/ProDOS.203/ProDOS.S.XDOS.A.txt index ad535fd1..a0a544c7 100644 --- a/ProDOS.203/ProDOS.S.XDOS.A.txt +++ b/ProDOS.203/ProDOS.S.XDOS.A.txt @@ -6,7 +6,7 @@ NEW ofsX .EQ *-xdosorg offset to xdos org xdosmli .EQ *-ofsX xdos MLI in aux ram -* cld no decimal. +xdosobj cld no decimal. pla get processor status sta spare1 save it temporarily sty mliy save x and y @@ -256,7 +256,7 @@ H31C6 lda irqflag check for old roms. bne H31DD branch if new roms. ldy p8yreg restore registers. ldx p8xreg - lda clrrom re-enable i/o card. + lda CLRC8ROM re-enable i/o card. irqdev .EQ *-ofsX lda $C100 Cn is self modifying. lda irqdev+2 restore device id. @@ -287,12 +287,12 @@ syserr1 .EQ *-ofsX rts sysdeath1 .EQ *-ofsX tax death error code. - sta clr80vid disable 80 col hardware. - lda txtset switch in text. + sta CLR80DISP disable 80 col hardware. + lda SETTEXT switch in text. lda cortflag is this a Cortland? beq H321A if not, don't use super hires switch. stz newvideo force off super hires. -H321A lda txtpage1 switch in text page 1. +H321A lda CLRPAGE2 switch in text page 1. ldy #$13 H321F lda #$20 inverse space border sta vline11+10,y @@ -510,7 +510,7 @@ findfcb .EQ *-ofsX cmp #$09 must be 1 to 8 only. bcs badref pha - dec a + dec lsr ror ror diff --git a/ProDOS.203/ProDOS.S.XDOS.C.txt b/ProDOS.203/ProDOS.S.XDOS.C.txt index 191a8917..b7857f51 100644 --- a/ProDOS.203/ProDOS.S.XDOS.C.txt +++ b/ProDOS.203/ProDOS.S.XDOS.C.txt @@ -116,7 +116,7 @@ L3CF7 lda #$80 indicate map is modified. sta vcbbuf+20,y bcs L3D10 if high free count doesn't need adj. lda vcbbuf+21,y adjust high count - dec a + dec sta vcbbuf+21,y L3D10 clc no errors. lda scrtch return address in y,a of newly @@ -232,7 +232,7 @@ L3DE8 plp file i/o error. restore interrupts. * get mark command getmark .EQ *-ofsX - ldx fcbptr index to open fcb. +XDOS.GetMark ldx fcbptr index to open fcb. ldy #$02 index to user's mark parmeter. .1 lda fcbbuf+18,x transfer current position sta (A3L),y to user's parameter list @@ -247,7 +247,7 @@ L3DFD lda #$4D invalid position rts * set mark command setmark .EQ *-ofsX - ldy #$04 index to user's desired position. +XDOS.SetMark ldy #$04 index to user's desired position. ldx fcbptr file's control block index. inx inc by 2 for index to hi eof inx diff --git a/ProDOS.203/ProDOS.S.XDOS.D.txt b/ProDOS.203/ProDOS.S.XDOS.D.txt index acf5bb88..8950d30d 100644 --- a/ProDOS.203/ProDOS.S.XDOS.D.txt +++ b/ProDOS.203/ProDOS.S.XDOS.D.txt @@ -552,14 +552,17 @@ alcwblk .EQ *-ofsX sta fcbbuf+25,y L4615 clc no error L4616 rts + tstwprot .EQ *-ofsX check for 'never been modified' - jsr gfcbstat condition + +XDOS.tstwprot jsr gfcbstat condition and #$F0 bne L4615 ordinary rts if known write ok. lda fcbbuf+1,y get file's dev #. sta devnum get current status of block device. + twrprot1 .EQ *-ofsX make the device status call - sta unitnum +XDOS.twrprot1 sta unitnum lda bloknml+1 pha lda bloknml save the current block values diff --git a/ProDOS.203/ProDOS.S.XDOS.E.txt b/ProDOS.203/ProDOS.S.XDOS.E.txt index 9e2db218..1f45d8a1 100644 --- a/ProDOS.203/ProDOS.S.XDOS.E.txt +++ b/ProDOS.203/ProDOS.S.XDOS.E.txt @@ -272,7 +272,7 @@ L485F jsr tkfrecnt force free block count before releasing and #$01 sta dseed+1 lda tposhi - lsr a + lsr sta dtree ror dsap pass position in terms of block & bytes. lda dseed now adjust for boundaries of $200 @@ -314,10 +314,10 @@ L48C2 lda firstbl,x and #$01 test for both bytes adjusted bne L48C2 without disturbing carry. lda stortyp get possibly modified storage type - lsr a - lsr a - lsr a - lsr a + lsr + lsr + lsr + lsr ldy fcbptr and save it in fcb. sta fcbbuf+7,y jsr clrstats make it look as though position has @@ -411,11 +411,11 @@ getinfo .EQ *-ofsX pla sbc reqh sta d_usage+1 -L4988 lda d_stor transfer bytes from internal order to - lsr a call spec via 'inftabl' translation - lsr a table but first change storage type to - lsr a external (low nibble) format. - lsr a +L4988 lda d_stor transfer bytes from internal order to + lsr call spec via 'inftabl' translation + lsr table but first change storage type to + lsr external (low nibble) format. + lsr sta d_stor ldy #$11 index to last of user's spec table. L4994 lda inftabl-3,y diff --git a/ProDOS.203/ProDOS.S.XDOS.M.txt b/ProDOS.203/ProDOS.S.XDOS.M.txt index ab445671..c55c23e3 100644 --- a/ProDOS.203/ProDOS.S.XDOS.M.txt +++ b/ProDOS.203/ProDOS.S.XDOS.M.txt @@ -160,8 +160,8 @@ L4EC7 rts * this move routine must be resident above $E000 at all times calldisp .EQ *-ofsX - lda altram read/write RAM bank 2 - lda altram + lda RRAMWRAMBNK2 read/write RAM bank 2 + lda RRAMWRAMBNK2 lda /dispadr sta A2L+1 lda #dispadr @@ -180,8 +180,8 @@ L4EE0 dey move a page of code. inc A2L+1 dex move all pages needed bne L4EE0 - lda ramin read/write RAM bank 1 - lda ramin swap mli space back in + lda RRAMWRAMBNK1 read/write RAM bank 1 + lda RRAMWRAMBNK1 swap mli space back in stz mliact MLI active flag stz softev lda /dispadr point RESET to dispatch entry @@ -227,7 +227,7 @@ L4F3F lda buf-1,x from prodos parameters sp_vector .EQ *-ofsX smartport call jsr $0000 (entry address gets modified) cmdnum .EQ *-ofsX - .HS 00 command # + .HS 00 command # .DA statparms bcs L4F6E ldx cmdnum status call ? diff --git a/ProDOS.203/ProDOS.S.txt b/ProDOS.203/ProDOS.S.txt index 9f7d26c4..571b4d50 100644 --- a/ProDOS.203/ProDOS.S.txt +++ b/ProDOS.203/ProDOS.S.txt @@ -7,12 +7,13 @@ NEW *-------------------------------------- .INB INC/ZP.I .INB INC/IO.I -* .INB INC/MONITOR.I + .INB INC/MONITOR.I .INB INC/MLI.I .INB INC/MLI.E.I *-------------------------------------- MMStartUp .EQ 0000 NewHandle .EQ 0000 +PtrToHand .EQ 0000 MessageCenter .EQ 0000 DisposeHandle .EQ 0000 MMShutDown .EQ 0000 @@ -23,18 +24,121 @@ TLTextMountVolume .EQ 0000 ldx ##]1 jsl $E10000 .EM +P8QUIT .EQ $E0D000 +GSOS .EQ $E100A8 +GSOS2 .EQ $E100B0 +OS_BOOT .EQ $E100BD indicates O/S initially booted *-------------------------------------- +lookptr .EQ $0A +idapple .EQ $0C model machine id idxl .EQ $10 general use 16 bit index pointer -ZP.SrcPtr .EQ $12 -ZP.DstPtr .EQ $14 +devid .EQ $12 +src .EQ $12 +dst .EQ $14 cnt .EQ $16 +cde .EQ $18 +ecde .EQ $1A + +wndbtm .EQ $23 + + +pcl .EQ $3A +pch .EQ $3B +A1L .EQ $3C +A1H .EQ $3D +A2L .EQ $3E +A2H .EQ $3F +A3L .EQ $40 +A4L .EQ $42 +unitnum .EQ $43 +buf .EQ $44 2-byte data buffer pointer which +accsav .EQ $45 overlaps accsav (temp acc save byte) +bloknml .EQ $46 used mostly as 16 bit block # pointer +zpt .EQ $48 highly used zero page index pointer +datptr .EQ $4A ptr to data area of buffer. +sos .EQ $4C sos buffer pointer. +usrbuf .EQ $4E data ptr in user buffer. + +* zero page variables for Bird's Better Bye + +smparms .EQ $60 set mark parms +sm_refn .EQ $61 file reference number +fpos_lo .EQ $62 new file position (3 bytes) +fpos_mid .EQ $63 +fpos_hi .EQ $64 +lstpntr .EQ $65 device list pointer (16 bit) +valcnt .EQ $67 name counter + +filecount .EQ $68 # of displayable files in directory +namelen .EQ $69 length of filename +gp_cnt .EQ $6A general purpose counter +dlevel .EQ $6B directory level +fnstore .EQ $6C filename storage pointer (16 bit) +entlen .EQ $6E directory entry length +entblk .EQ $6F directory entries/block +filecnt .EQ $70 directory file count (16 bit) +blkfl .EQ $72 block flag / file counter +topname .EQ $73 index # of top name in display +filetyps .EQ $74 128 byte table of filetypes +errnum .EQ $DE *-------------------------------------- -ramdest .EQ $200 load address for aux bank /RAM driver -PrefixBuf .EQ $280 +tst128 .EQ $0080 temp page 0 routine for memory test +auxsp .EQ $0101 +ramdest .EQ $0200 load address for aux bank /RAM driver +inbuf .EQ $0200 keyboard buffer +pbuf .EQ $0280 prefix buffer +p3vect .EQ $03F0 page 3 vectors (16 bytes) +softev .EQ $03F2 RESET vector +pwredup .EQ $03F4 power up byte +nmivect .EQ $03FB nmi handler +txtp2 .EQ $0400 test location for aux card +vline10 .EQ $04A8 line 10 of display +vmode .EQ $04FB video firmware operating mode +vline11 .EQ $0528 line 11 of display +clkmode .EQ $0538 clock mode +ch80col .EQ $057B 80 column ch position +vline12 .EQ $05A8 line 12 of display +vline5 .EQ $0600 line 5 of display +vline13 .EQ $0628 line 13 of display +vline14 .EQ $06A8 line 14 of display +vline23 .EQ $0750 line 23 of display +vline16 .EQ $07A8 line 16 of display +vline24 .EQ $07D0 line 24 of display lodintrp .EQ $800 DirBlkBuf .EQ $C00 +dbuf .EQ $0C00 8 page directory buffer +vblock1 .EQ $0E00 ramdisk directory block +volbuf .EQ $0F00 volume buffer dispadr .EQ $1000 +iobuf .EQ $1400 i/o buffer +fbuf .EQ $1800 FCB buffer +op_buf .EQ $1C00 open file buffer (selector) +sysentry .EQ $2000 .SYS file load address +prodos8 .EQ $BF00 prodos MLI and global page + +phaseoff .EQ $C080 disk port +motoroff .EQ $C088 disk port +motoron .EQ $C089 disk port +drv0en .EQ $C08A disk port +q6l .EQ $C08C disk port +q6h .EQ $C08D disk port +q7l .EQ $C08E disk port +q7h .EQ $C08F disk port + +rdtcp .EQ $C108 Thunderclock read entry +wttcp .EQ $C10B Thunderclock write entry + +auxmove .EQ $C311 move (3C)-(3E) to (42) +xfer .EQ $C314 + +rwts .EQ $D000 disk ii driver in bank 1 +displc2 .EQ $D100 system death routine stored in bank 2 +pathbuf .EQ $D700 pathname buffer tclk_in .EQ $D742 clock driver in bank 2 +fcbbuf .EQ $D800 fcb buffer +vcbbuf .EQ $D900 vcb buffer +bmbuf .EQ $DA00 512 byte bitmap buffer +gbuf .EQ $DC00 general purpose 512 byte block buffer xdosorg .EQ $DE00 xdos MLI in aux memory lcdest .EQ $FF00 *-------------------------------------- @@ -52,7 +156,7 @@ lcdest .EQ $FF00 * $5D00 sel_1 enhanced quit code (Bird's Better Bye) * $6000 sel_2 GQuit dispatcher support -* .PH $2000 + .PH $2000 .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.B @@ -75,7 +179,7 @@ lcdest .EQ $FF00 .INB USR/SRC/PRODOS.203/PRODOS.S.SEL1 .INB USR/SRC/PRODOS.203/PRODOS.S.SEL2 -* .EP + .EP *-------------------------------------- MAN SAVE USR/SRC/PRODOS.203/PRODOS.S