<ATARIBUSDQC =AFC CQ BJAFC DQCR-AMON C `AS CQ LAS DQC 3ATARI H qvATARI LIBATARIFN CQM3#DOSTRUCTH +HARDWAREDQC3 PATCHINGDQCS!{}v68ATARIBUS.DOCN   !#"$%(&')*+.,-/o102354678;9:<=>?AB@DFECIHJLMGK2Beے-/VνPEj*M||1w煪 ^d~mɖb+6d oB Zծ-??وj/qЯ*67^@y}'0u9δݯۗn^g1wm{_|ǵond J8v׻.=}7w3O6K\>qĀd&f{ @K-/A=}a'}037ے-/D;Bu>5l f_fBxWs7&j '_ev75)-},G/gmɖνIՆ__,̗n^gr`&sZ5{za&6IC]~fCӏnd{4c'j߉nw3O%S%/G[.{Q7 o7srNn)a[%t-Bl7 S]0JDq-3 4b^2,}n{(}yN662pnu3}nd s_򡣝yvQNLԟVy T2uK L?p\5w-Bffva(m@Ɩ7“o _Ji9MfGac˃x\D6N͜R ٧@xY}SQh/?@ABCDFEGHIJKLMNOPRQTSUVXYWZ[\]_^`O3Nw*K+q*~~[nqF Gag]͠ (@[M~:dUZ<~8oWz B!|7@a~GͤK3ͨ} 쾆jPgGm*̀H |=uX~[ 5 Ig(+{[\n65V[\kpv8j3fS VH_2\U`5 qQIG^~=,n PmR=,T3ߺ:Z:*S8*=XA.C՝qӁWiroאU j] G#+5 Go[?Ψ\6M?~q3G#-l6BMoq-y:h4ۦ,EES9GVhd_A Tio]9Z8Hs8h}q"-a}mFhd_[WxhIcg5zWimv_o[AhDqӁ^߶5V4ۦz㇣@.1*~Vz 5 G#-lmz{ݸaU-y:h4Moq7Ž=Og),\@#-iJݖ;z qGR3/NN1_ߺ-pƎHs8h}q"-a}mdQD КBѭs 2bf9 YՠE﷮B;@SUn{t+t3jmO6\߶*=5tT&04ߺ [X?MC7o[04￟⾦BjT!RI=@?3j. mb6@ 8 ?=xj”*J/?L3f b׍ہ*Y>}~Liֈ g OUi?}?h8jf4M[k”\i 2bg(XqL02vF>sMoq?~ G.2m1i;z#T0ŏx{^~zݷL:_3y^zA5ea/SڶtO84=wLM݆ޟTӥc}mt>њ{R4LilѵtB=^z?*k}?*ă*N^kۖр* uXȽ~UʼnSs㵾tm_"{эjg۞K˾8ɹg M0^kۖiQ>MJK} 3d\;]۶til=6qTn{LQǔ{!w;*׶-Ӂ[^zb@q˟#V˾8׶싓7,xv`}YʔIasgKw3Rh8 |=[Oxjtf*1s7pB!xr7p7"ŽntU5uu,\spWo˾tOAuzjy? t)t ܼo!՝;~8,7\7p~\94cq+il 6\7Н&ҍ\Ns8 ܼN!Jѭc)긁Z*]騤#L*=b,B ܼ3z)4~8*HU7НK缾4ix8Xk0qk鞪 CV5 =K]>4-{`' IPkd r'S t>K;9#IB݋wY)aIz`s"L~Є<_՞cb#XR!1oFi|_c 2K/j1U?#o0Afrs^o~Qa4jnqzk6g+]9qptc0~uk8X=g}M0_HQ5S5~᳔+]9ͣ|}MR_` 0K mG~DeޚyYJk^ .wq| f^oN`iA^6~ ~V{` ܺxm{6z99M`0 X4~еt[{1#h8*= E8[YB=e.;q!0nIa8cB=e JsAvMz[)[@a9!0n{Nm3`[9&69bO8*=05z=ey}^tmJV]~Е<_7C {X!Zҋ. vo@"s]3ڝҽ0rc!Ժ|/OQ1e~еcȝ&~U g}+yltorcYxT۞Tc}x˾R,[yjUYYb]Uy}' % 8l>D2DNw0`&g)Pl iVf6cߗ}qr/9@6trgɸ8w?zXngYɎ]Ut-Ӂ6K]Rv@=,ftMA ~V{ьOG4<y}?hrt& ]A/wU"5VX۶tOgݩ*=j(Sp4UA^z?:|S’ hSƻ44x:M3`S# (Sl: m Գ`u˾8<MHc˾8 AȔ%r[soC.]Ѵg+6ix?hb3|0Mˣb/as"L~Є<_՞cb#ȣbkxj,\O@0Mn~Фkk,Cݷ5u#-K],~d,U|dDn7~ФGtU%9 t9!πn4M~:U'G6ͣ|}MM=YQiku6gi4%--8 ;ls^oNTe?$ *<0^so#E2̼2lޜmQaF-mYrٷy} 2<*Pp "a~^2D )Heasʔ 9TP~Фkت;{Y6cC[.zb 6Q˰y}?c.6ҽ%Ir㇣mȪ.z_㇣K,qL/Ne_4cZuCLw0P˼t}q-,3;X A;U% z{:) s/t>@=,9M3`S# OjP뢣§z&"$g}qy^Ɩ}q&g%r[#e͇ast& ]=Y(Ek(Lp5 Y.tx]xG`S\8N39ͣ|}?:| !;ls^op !r{sn 4mmۛ}k6ȬHoqomTTly`0BD& 4)pXcu^z?hRU^@Y()S~^TP|M hATUzU%[4 t&=zጭ -*9ۍwi| ylt3?rz]vG*6XmHc9mgQ"nA/[u9Mn3)ݣF48V=,KMkw6D:̎ u)d JKU5_lhAvMzQA)[PUs"L~ ~J;qS4z=rz][a^oõ|] o+,i^ostR4s}MA !,UTLA. SL8 & ]kw6D:̎mp!RƑ_z)4U'Tl sj@;́  Jk6t}q2X~u,2)JLIi|?hB/ݦ*=Wx tY&Gq L^4t>KU5_,Es"L~?ڣG POقCax&ҭFϱ'ҁNU . ~6vAҽvYޞ,(Z3tfC9M3`{Kم~x5M3`[9&6`ӁWix tY~6MgKtvY~mOPהZa}+C8PUn{44!-,7p;MϢ;@r3 t9ͣ|}?hU'D )Heasʔ 9TP~Є<_.t [Q~xh*/iZIAW ~ z7e= {? H~:tS>ܙ`2.xߗ}qr]e_kǐ;LŹUų' % 8kha;]d\APl ix{ hHtv`~dv,ƒ*+e6W9^)K*kN0_o3|Hg眣8ߦmH~_q[#RUn{冬jPg{;qlUeNAW'MV9~uNUY?:|m?UestRtu TʺtdiEk),Z4M[&ޞ,ͱKNEkci=e 9f,mEU$i+96X^gKZm ñ 쾦96W7НGq`}}cy?V^T\ArnJ{}?ZUn{Biz紾teG4.S蜃T۞mHUYoxKT۞XH~:dUZ=KZUf;mAW'MV9Aצik@LIaAWoOH±iM]r*Z.ךؙ2蜳to+/J 97M[yAW G ~k 2ۦKم~x5M3`[9&6`ӁWix tY~6vAFC.DOCG   !"#$%'&()*+,.-/10234576o89:<;@>?A=BDCEF8{ ?C n^ &pX֓;Z^ qk(swSh^mʞfn_Dߵ{*pN`6j {OiSmΪ_oeʝ$[g1`g F di6b}z[/?U9G_JÙv\ܵCѸ,޵+>mYL+ٵGdzS]aB͕ oF}}Ki>|@RtHmIJ/}*LiV2ڨ+3 è($q7Ҫd1`9g=*,w4#wV{O`OO`p:r'Y 18 l@һv{%qߗV 4&ѣw{ g۟YLmVߵne εQ7W.gԧeXƴWbp䪲k'W5i6b?sSg1W; }2*zO`K_/o<&{ɇK_/|=W)6UkLj@ZO`{O'z%sV6ɝ9yӝZz{S/*ONkS}=IN`OCw}z,78YmszI+]!ξSKbm߸43bw' / \Z־>CC AMON.C A>CLINK AMON -F ATARIFN 9/83 Dave Warker */ #include #include "atari.h" #define MAXENTRIES 1000 /* max # bus cmds stored */ #define PRINTER 2 /* printer file id */ struct cmdframe { /* ATARIBUS cmd frame */ char dev; char cmd; union { char byte[2]; unsigned word; } aux; } cf; struct cmdframe frames[MAXENTRIES]; struct cmdframe *curframe; #define FIRSTFRAME (&frames[0]) #define LASTFRAME (&frames[MAXENTRIES-1]) char *p,*q; char fn[20],iob[BUFSIZ]; char c,bucket,*error; main (argc,argv) char **argv; { error = ""; curframe = FIRSTFRAME; for (;;) { cls(); printf("\ ATARIBUS Monitor version of %s\n\ (ATARIFN version of %s)\n\n\ currently %u frames in buffer\n",VERSION,atarifnver(),(curframe-FIRSTFRAME)); printf("%s\n",error); error = ""; puts("\n\n\ I-nitialize frame buffer\n\ M-onitor bus\n\ D-isplay current frame list\n\ P-rint current frame list to CPM printer\n\ Q-uit to CPM\n\n\ which? "); switch (toupper(getchar())) { case 'I': curframe = FIRSTFRAME; break; case 'M': monitor(); break; case 'D': display(); break; case 'P': writef(); break; case 'Q': cls(); puts("exiting to CPM."); exit(0); } } } monitor () { puts("\n\nmonitoring, press any key to stop. "); while (!getcf(cf)) if (cf.dev == DISK1) if (curframe <= LASTFRAME) for (p=cf, q=curframe++, c=5; --c;) *q++ = *p++; else { error = "Oops, buffer full."; return; } bucket = getchar(); /* drop char on floor */ } display () { struct cmdframe *p; char lines; if (curframe == FIRSTFRAME) { error = "Buffer empty."; return; } printf("\n\n%u entries:\n\n",(curframe-FIRSTFRAME)); for (lines=23, p=FIRSTFRAME; pdev); switch (p->cmd) { case READ: printf("READ sector %u\n",p->aux.word); break; case WRITE: printf("WRITE sector %u\n",p->aux.word); break; case PUT: printf("PUT sector %u\n",p->aux.word); break; case STATUS: printf("STATUS REQUEST\n"); break; case FORMAT: printf("FORMAT\n"); break; default: printf("UNKNOWN cmd = %c, aux=0x%04x\n",p->cmd,p->aux.word); } if (!--lines) { lines = 23; puts("PRESS ANY KEY FOR MORE (ESC TO QUIT) "); if (getchar() == 0x1b) break; puts("\r \r"); } } puts("\n\npress a key to continue "); getchar(); } writef () { struct cmdframe *p; if (curframe == FIRSTFRAME) { error = "Buffer empty."; return; } printf("\n%u entries:\n",(curframe-FIRSTFRAME)); fprintf(PRINTER,"\n\n%u entries:\n\n",(curframe-FIRSTFRAME)); for (p=FIRSTFRAME; pdev); switch (p->cmd) { case READ: fprintf(PRINTER,"READ sector %u\n",p->aux.word); break; case WRITE: fprintf(PRINTER,"WRITE sector %u\n",p->aux.word); break; case PUT: fprintf(PRINTER,"PUT sector %u\n",p->aux.word); break; case STATUS: fprintf(PRINTER,"STATUS REQUEST\n"); break; case FORMAT: fprintf(PRINTER,"FORMAT\n"); break; default: fprintf(PRINTER,"UNKNOWN cmd = %c, aux=0x%04x\n",p->cmd,p->aux.word); } } } v4AS.Ch  !"$#%&o('*)+,.-/102354768:9;=<?>@BACDEGFHIJKLMONPRQSTUVWXZY[\]_^`adbcfegX';"-%_R^w3>I˕ܜqg0|\CDa|xs얢5W<ga]ER&Ws(7//q9HL]HVtRN+kXM=6/Ӑ15/JGа?4 *iԊm{nr(SËqspZYæBdIhr v&6 4c^M޼ 'S!ȋ̇{̋1Yla\󋅯=fr-xh:W뵚3-Ec^liYZC_9y\CZYe== G 6"K4$ڌ7'7䜸}M."ijRa[BӤ+zKp3 &=rKњt>p-G=| |U1xZ xM[J܊4떢5|iRևrcaj){.k,MvA"iJA4`nrr!5ǘR"f>|h{|iH5ntjkydkmDbej\A?/#0'I֥?|?GO0j'[K2}R&"g '<l7ayy&_L̂8=>|uyحa'+a=ȴn^.^q+?]Q>ݺ^ܼ4ܸ N,vY{]e*q=>f<‰.| ;_aƭ8v‡}9x{X9l^=9|*حa'b+CӺyyX9lkf?5ǸQJ1as u5-,4 Ĺ[)q -:eQF)f}.7fÂ񾖛t񣹉CWICr"_Lpj68w3>||uFϓحpEX&ŽvCnLcGx\Vְpys1q.32G\+9\ۉ_C/jz\Vְk~W?|x~M# DW=iy虸. 'jߖN=ɦd))ٔK6%);%=ɺgoKE1RHZ>ӻ#aobg)l+ NJ>I)'Fow$6hQQ~[#ݺWICt½hQQ~[#ݺR^.Mw)ܫFɗݺ޹WݫF`|[v.C)8W?R ѻmu{/9k9qkW?ryg-;N&sDRJ\sfш_]A7~]Ϛv")՜5p8S A]k8;Iv :k:DRֵoHJkbR\{hste12٭7ŦF~ۄH­{Xqr=9p~0zCTߞGv޹Wݫ`|[v.C)8W?=+~/bR\{joWͯ$,.{6v~Y^.`4/qѰrN}h)ZNy㎓77zu]Mw/p|[k=ԇWUhhM:EZK+~\SA&;"tӕk:`4ie )l+ NݎJ>Vҩ`$>-m'RNAw>I)q́caSZ;I=DRֵC)xsc?ît*=FvYM?./hd' D:--jh4v=SDž@1 ӺyY;7+m*TtX9lq0 t*L-Y\/5l4?"K SkCie = Ic$l<4VTЍfڌ%h~I{biݼ$O,k2fK"yI* Sa1MrӖFq~%q=;p=…s"~4i׺W?'35Jobg.wtיĚh޳8!9玎;qI!;dt;HJkc)_O\gk~$R19>F +<Fjo25ى6VIպpNV$ѽh$"c*)tzS&ӦBdI8ۍŴ`4T ."Kyn,M b%wih` c$˼gfҢ\虫XŻ\`ie )l+ NݎJQ>I)q́ː?VҩDžDR?`-NTsx_CsFzyb?|ִY\/Iq5=T, >}0z1]?=rS:BK, N+kxZzUmiѢi)}~ׅaY2E?=S^g虫O 4qx.W?=sHJk}0 +]OT >M_is'SEu vZvG")pFcqː?%؋whY^.`4էw tHËwhϳ5p8k[v~L&>VDž,vx1켣Q\}v/<+J?Y/dnrnPnqJ֒k@Ƌf=#=c ;ct+]OTjҽsqgAxiCvG=&7ώ(k;-FeAwѼg[qE\[x;**tr泦vGjuv2.9[ҩ cSµ|ڦkmN3_೦YWgG= ;tcL_ ӝ&LCǼ;zW?gMmr¶?NFn=Ĺȼv~НeUoFYSob=.Kx㡙<`-NT( a'|m鴲7ii`ׅ' ò*;<_Dhѳ.qvӖ NYXȉM>%+ox J+kؽ!b >}0zt*(.ŎXyumWpZY`giip") ڌ磷>|P{!q́M[֤S^v/v~(C3^%N+k}]_3jNHJkl\{{.WbR\\Me_x+Qk6u~a[EW9 N o<<&px.WbR\{0z. ~Ԛk>|P{Kx[C_9M5˽鲄7ii|.`cکkO\_ve1z8ʄ`b /}0 +]OTyM5gJ~?K۩q0L}c=6EpGy@px.Wp?r~0rPnqJBZY~޼,v"Q>%VְClr~a[;-EZFa) 6/5>Hl+ NEQ>ϴ4xc햼]`Ť`4gZ<'l+ NEW9|0 NK&'`4J~#a=-MFwf(CޮŁ6 ɉ+-_9|%k1t}r8fC) 6/_@ry{_0:8~0C8.~Qk6?=s. r}ܺ!9qkc6^`\5b?|ړrLԒ,ZV$qV;ӫ>f ZNYxLCzr~HY5p}:p'=ѶFu13JVl+k }MrZp݋wAwMqyFY;jNGZD\+eok'|45;RﷵpaSJ|O@^L}-? v")u13JAڗSxF#:7yFCS=;RpVyFŴ`TM:ic*d+?r -cf"V\.<rF#:?r)ّemǵﷵ]p03ump݉$6ѻyow)tӡܼyt/ ݱFY;jNGZD\+eok'|눕75;RﷵpaSJ|O@؎Xy}-? v")u13JAڗSxF#:7yFŴ`T㊖x|ш妸<F#:7yFCS=;IIlQ")Mwb~[#ݺ{.t½hXL FOLD~K1hDrS\pQ>sYSb-;~[;M}kMVRxڼֵʕZM v")tRxiݕ6ϚDR9kpv$R A7kA]ph$x7yFYqm6-;Fz--y;'QQ;W+o>kjFY]ok'aɵ/F#:7yFQb~;5ߖzjpA}-^`4ʝemw=?i虸?P@ `ÇjayyLCzr~VE""o< nE v\RO0ѡhDr:h(wg 6meѨ vIB;hDrS\pQ>%S=;FYdu~L&ihT3O: eeM"[D>}Ѝ`stdž'aj0A7z,WU앇Et#2|m{M"0DE6>|Ѝg9\?Fd~Ѝk,ݘ vKђ7A7zlXx|6?F5ӂnL0tdž'aj0%z@8cŴ;qkOЍ.?09?Pn^q05ӂ3qkO0ѡ܁!ÇjaMtQyW? kw}e|EKѨ.q[W{FO~ `4jKuw\d|nV^ÇjOB1s-TMG# sqrzwbxQ9kY5\ؽ!峊徊.`cjG>%YEr巉nD.}03* enDr1]'a*nߖt~0kx;'lznHC񘮳(b_3D:<: &Q#>S^cQ`ʍt@8>=`/ Zq^vʫKlUk8>1]h5v]q쨸Ѯ?=g\ o;e=F\})pg|RLW\q~9sV{ѨoFŻ\Zqh)xph5z+\DCbx+X1)?~A]sHck~qMwbR\\?=U+%؋wl\W?䰝 }p|cpEt3Ug>ϔWލt3>)T&R펊ۑs:g>`4Z5Fw g FYM4)vwC ^ہ69Qೆvō徆v_q֋>=.g>?ӻ!>q}]Q?= ?=6ap0z 55+n ^ۏ dˡ|y5s4$k~qMЫ|ЮQr_CQm}0z1]m|0zFEUܨS- Rr( ^Fz-u;H}0F QQ`ᾆ(F\}fߞp_CT&FF\}g 3$R g_ߖb?̯h! enDr1]'a*nߖt~0kx;'lznHC񘮳vAS.DOCL    !"#%$&'()*+-,./01o3245697:8<;>?=@ABDFGECHIJKTvzVV۵cubrg#)-X*.4EDɳ@Jk<YppIς799\IDnE_,'ca yg'weOMy=^%; !gy%\a+1yPۮ̞MmH9ς q8G^_Ӹ(ԶtfT:TmE=lAg]lw<򖟨sζkf<w99C۵*Yporsy7g bɳ5aL9uG(mו=799\IDqwa[j!,X XyʻKk,bRȧ8"sgU Y.Rȶ &-N{ ?/|^ʞǩ#*,K$nMQʞ^5)}1z= [sSp7ћ'\o4`&0^9ߩ}ogs? n8^-nZ,boCRmVW8Jz9,ݟԾn;1z=~X̞.eO+1-`qjKl/N([i{=bJۋCPN ԀԶ{.QpI^?*O, 灻|h|9.lG۹?s R$hKf?Q綋[^(!(O|D^wZ[jYE<,GS799k@GTuJf |#R89!MF[;zme.[ݥy_Yr}pIa ݚ8gԟ(\k^/E{y)wi5E^mW-Xh`\'9׬gk|ḡ,^8Sxآۮ!y[ς799@{(Z,bWYGc%=3E|<*7Ir۹sZ8q{\ٓ&ςWYy8ߩ}oj8mScy#֔fyؓ3{jh||Lr$S[AyLbx ۢ׳®9mnueOMy8x`Yn8lmWp«?Qzj!) s < "6N?ZK$?IԀg= ֱY5EqYppIWysZ,bRۮԀȳisrjY;gv"^^ς;xW-qj۵cu+݉gKܛ8k@^z@&e;w賴] D9q1zEX)(!Yv~Xwjgs? .k+{zB8<#4ڮZ9>5D~XO9bZ~/mvmX(y I;p[Q'y~%\3h;jJ{4yW-SV> ,$/ÿ9$Ѱm79Sf'g&yxnxKղ.ςĸGj185vζMw$yxkko8!I }i M,:HB__{o9XN ]=V(iVxxs=zBk"^&]ȯ /ς799ܣ)?IX,21m>]$wg=zBkbu<v.Qٳ +ςܙ"^^m{.QvfuQ˿j!ܛPs-@5v~X$yxkqj@i,x=m~Xj۵]=V(&;xW-a !ʠE^wj[o,Xi~s7W-qXׅW>gE|z͂+{z*-um+9Emk6׼;ߏԾ 5ɷʞ^s՛RK\[1w[Tft){ 4zSwmygz|l;ueOռ^cWa׋j,ba ]O|~XyOgu4sS3E|ڊ>5Ypmm= ԾX5mߩ}o+{zѳN{ 8/Y+$x\IC_[1w=5ϵ]SS^[1w[Y0ԾQۮD9=Ω{|g08m/^wj[/S]v$Ԁ`m= zFڢGV,K$͵s-@ֳNs{ xճIV4ڮ%@ؘпTA7Ǖy RΙ~uX/* ATARI.H header for ATARI-CPM interface hardware */ /* ATARIBUS ids */ #define DISK1 '1' /* D1: disk 1 bus device id */ #define DISK2 '2' /* D2: disk 2 */ #define PRNTR '@' /* P: printer 1 */ #define PRNTR2 'O' /* P2: printer 2 */ #define SER1 'P' /* R1: 850 port 1 */ /* device commands */ #define READ 'R' /* read record bus command */ #define WRITE 'W' /* write record */ #define STATUS 'S' /* read status */ #define PUT 'P' /* put record, no verify */ #define FORMAT '!' /* format disk */ #define DOWNLD ' ' /* download */ #define RDADDR 'T' /* read address */ #define RDSPIN 'Q' /* read spin (disk) */ #define MOTRON 'U' /* motor on (disk) */ #define VERIFY 'V' /* verify record (disk) */ /* end of ATARI.H */ ;************************************************ ; ATARI.LIB - 7/8/82 ; Assembler library of data for ATARI-CPM ; interface. ; WILL HAVE TO BE CHANGED FOR DIFFERENT SYSTEMS ;************************************************ ; PORT equates a2661 equ 2Ch ;base of ATARI 2661-2 adata equ a2661+0 ;data port astat equ a2661+1 ;status port acstat equ astat ;CMD- bit status port amode equ a2661+2 ;mode registers port acmd equ a2661+3 ;command port ; PORT BIT equates AXRDYB equ 01h ;xmit ready ARCVDB equ 02h ;received char ACMDFB equ 80h ;CMD- line from bus AERRSB equ 38h ;error bits ; characters ACK equ 'A' ;acknowledge NAK equ 'N' ;negative acknowledge CMPL equ 'C' ;operation complete ERR equ 'E' ;operation error ;************************************************ vATARIFN.CSMW   !"#%$'&)(+*-,./1023546789:;<=>?oA@BCEDFGHIJLMKPONQRSTUV؃nM eRqw= L-}:ݔJL*DiwۛZ3KݿRf BF^X˿eFobG7qw= L}7?#Lqw= L#[qEMF/79rBw%/\ܖX} ַzg|N2[+H Oǣ.q-vK}8ا q bGH_%>:=\-}VS >oyFvse\ JSxq!J];|zykNn]5>ppJ+qډ|%8{=[U)]co^%N_^uŗr=wqVEEN.ně/&ߔ>uDAQ'&ד2^[)3_J +xeEī]6ObmbG;qܱo:v ۨ]nyH~=VOAP0Om%N_6 qzP_Dկ'Rb+ ,l:j;1xGYH-B[ )p__nwD_(T-B[hS+gkk_#}Gҥ;/C*xYAQ&@մ_;dg0 I/Hp4BWox:1J׈6Uaj%1jM쓘xاѿ>U~qHܮHL*Diq+fcӂ8Dp2Bq?GQ@(G]rrxyƦe4oѫƨщ-!;?tG=v3_QG=n^ׇ:i%N+ˬ.*sE_ȸ|gBJϰ.+qA.WoKݔ]t|%ˮuqoJےeSyeev3]n%N;!- MUƦ !^llv{%:d^8L7 % a`TxAIl%W?Jaq#<&PG<!&MsSߌ7ۆAW3vBG#vP_#*/ W Ķa:w'x7__"^{gԻJxyF[~"8xM /o1ڒxǁU6kFwS'DžHqޢW_5FCv' !4nfmM}EoQ^%N1*qms!8AfO{QfwqoJG8en|hgP?}얟 qXQ;!}"1qm7|Fv?nK^"AW3vBG#vP_#*/ W Ķ:w'x7?(ozxVe&^9+wBGK[$q`x"Gq#z'ifGQljwB;⵷Y[wSoѫ[TW׾nGQO=gԇW.9PKpxMmHĂ. (f7ecyxo-N$BrA{Q3rHĂx2Թ;!}TUo1hn2qll=ċ`;wS%D:-& h7>Cι"bly6Kfg!C/O>l鴘XvD:-&;zn*'DfgGk+q7 %N9@ߌgxe;h79.tD9b5RpiAl+ϨswB; وwS]_Q%6+Ϩ}>Q}oEm֣,u4N7BGtbyF#wM /o1ڒxǁU6k+ϨwS}QlBƨM:3꟣(KbƄ&fӵ[Uo4?T|m#Έ] i[8QxyF5.cԭĸOAWM ؽKȦ1:w'wDpT|w}"nҺ"8WN/o1ڒxǁU6DM}J:q8mS!z+w<O'^ل8N}򟣛GgD]qBXPvDu!q`a7oT uDMJll=Rb.'116OǣU]6ī!|uD6#W>8UZ_UWƦ N;Ɔ8-A;q[ռo[-9 N\.YllZ-A#I>A [DṗѫӼ#} (8=6˯8NKxDž-ޑ7ڥ|F}|.{xyQ5}]/W>>!N]QJwB[@i%6>Z[JWhT~mA:@]~u 鴘Xnz9^oqw༏7%^O{QK pYH']8=tG=>_bBC|[ͶEIj`^AGC|B}GM}+,w=&No˟wb]:w'#W4,vyxmhM}_o1s74J! !>xQov7i@{ԉS›%NnU_U|sFh j9=y%&NV"ut|llA{ ll/.Kp@wۛoWWAʣ|llZ~&7ĉx'd@)FσG!:h7W ḾB?h:"z+wS66R*Nu4hqoJ=l[&i1_D>Q7Kp@IJ uNaG#ĻiX۬lBxTUll=?]x'#DdN fwS%D:-& h7>Cι"bo +`n^ @"6+P>ѕ8.ߑD:-&ܝŽG^wӰ7%⵷i n-B;KB}"11֣n2́Bv>}:>t_>DbTi%"N?T'-ߪwO3oo.,qn8BĉxlvBG#v':w'wDpޑDf'MWZ[$q`xVCxDž*DoQL m7x:qw?xc'(w'O$MU~CNjڢtx:jM쓘xا \O#W>8UZB}8[O'hfM}JB2}TUvDHLGx&ILLMutU~D?J'J+qZô|:z>ŸL>>\8}&'NuPvD?J}./C" |FhHx'#Db=ī]6ObbmbGϢī!~䕸=O$&NV"PGEb \n>úw?}|.{sdy+qGM N !~x7 x]^"^{z7EoqMF|GsuPWŽv>}: \O#W>8UZB]-[G?rq.[۟L>>\8}&'NuPvD?J}./C" dw! !>x:jM쓘xا,ī!~䕸=O$&NV"PG`-[G?|ŵw79|FeBqqZ/~"80]qz\.Ye㏚8CB+nFD6[Gn#"/&]#NaG{ԉWlbĩJq"N9-(/\]([w7eĉ8}>wߌ-obG7_D՟zU7'Fvse\ pzhy]~=pb7ĉ8Y]#wpا4 E4~V"Uv8J+a>8UZ #NO; P_~]cʯxw[qz FoT?l%Nċ42J_|=/tKM*uDlfnTxSJDeYFLLLM_>8UZ #NO; P_<YG{(qO; P?8/ w78BǛ˻ɨQ'N+ffJ75L$Nī]6ϯHLLLMDbTi%8z~D?Dp`Q~ΟJIxW^MF&@x:q"^i63s7Uaj%q"^}~䕘xاDHL*^G|sF?Z}<_ĉxG {ԉJvS V'.}:g0ī!|J+a3yG›yT{+q"N%Xa-kMYmɌ/]/_| 7w_nw%S|R?#_Bn2*Bċ/)_(/% 3gHyԘ?WѠE;!4JW&yFp{ԉJM*ojZIg8OfQ[ܫgP8oQ++jڢ-j6Uaj%q"^} ZN9/* Volume Table Of Contents structure */ struct SVTOC { char dostype; /* DOS type # that made disk */ unsigned totsecs; /* total # data sectors available */ unsigned freesecs; /* # data sectors currently free */ char reserved; char unused[4]; char secmap[90]; /* sector available bit map */ char unused2[28]; }; /* directory entry structure */ struct SDENT { char flag; /* entry flag byte */ unsigned count; /* count of sectors in file */ unsigned ssn; /* first data sector # */ char name[8]; /* primary file name */ char ext[3]; /* extension */ }; #define DELETED 0x80 /* entry has been deleted */ #define INUSE 0x40 /* entry in use bit */ #define LOCKED 0x20 /* entry locked bit */ #define DOS2FILE 0x02 /* created by DOS 2 bit */ /* data sector structure */ struct SDSEC { char data[125]; /* data bytes */ char nsn1; /* next sector #/file # */ char nsn2; /* low byte of next sector # */ char nbytes; /* # bytes used */ }; vӜHARDWARE.DOCY  ! #"$%'&()*+,-o./021345678:9<;=?>@BACDFEGHIKLJMNOQRSPUWXTVE%L׊xR/*6Yq \j @+W_V|X!%^T yqfff;k]l< o (SC,GShd#0^uY3۞m}y<1{V7 ̶g߷N_ÛEKhqyՋJ^<ۼ_E'&~JAXO EגS<;F!VVNԋJ=hLJﱿԋJ]?{!!אyjȯ9xﱿԋJ]}t%cz鍱5ȫ}W&$yհ[0|)4֒zվ+,Zf=Myվ< ҶTمkR$OBo-:<K{_Ilf~N33%o|͊զjga'ڕ"T! o{ /R ǻ[䐕=8n`Hrh w;}fx=ZxqW iyb)А=Sh`,{f6C KC妜"j; `cwjm%*QC iC8A_Ev}=Y[_uSx& J 4>y0w(9] Ǿ3}P.}4 jf%:ku+T}R/%]׬G43[ri^ۼR/*uP0~ pE!5L}p{Za?u4:>2fi=+0nV\=q 9_~}}FcN<3wx{lku+T}R/ .ykV|:;!אZIz"Mq}_E&+lfne-Vձ+yb=zQɊhg6g3|K;} Aֿ=ec,>YzyjoCK?Y[ilh(V~tKbֆq{+rpg6PBE4\)]6.hCr}|g?1xz~:à~]5{wlF?< YDC8<6 HA.y^ۥy|R/*6Yq-Or?rpn+䢰dzxPŋ~5&.R5J^ WRVU+J.O@"8re.V^^*@¯z"MW&ѕ\҃J.J 4qR/"SK|eKNV+br8J8KNR%ɯ'’ VK.䒓$R^M|JJ W%:zQɊqO9c3<30qed)lVq5ycoC yٜ|킡"R/*0%W{˭L< Yx$&N*7:ɺ̣Wwa}}fs6s+C=o#}/*_E\rHR%ɊLV'z5&t%?@t2!]ROWNWIWHM'}믿āIK~`Ep}zLk*RA믿믿NIK~ a*@UUUN2?dҒ_ Gjz1r L]^*BTQbҒ qee'/vQXz=< QEM%? K~`ER/OC/ KV%?T|&ĒK.qW,Zf=Myзfn_E&+\ĺ5tM}fs6s+=iyv 7w<{q-ϱǙ!>g{voy<,ڷre.Sàg}n_E&+}!U{霶r-OCtxg6g32<*-` %_s%{;lfgnϞ`\s/:JK.z gVJ3 Z3[Ǿ;0 S&0~9}^Tj-Vۣ,zhG J{ %إF=Y J}>MӮlf~P9c{KZr Fc4j^0th Ww{ OBL~x!lfn{.݂˙ ^0T!=5ǕKc ߥ˳_<C1~lVv >c{4v:ei.I$!m-XE %cw`qW;~%v䢆>!~K_MI0i+ϓ!4ݮmg[rg V.*]ik%?JС~~kY"zt.ÿdz_+VaBG4gmc?UBOP^/&W챖\(4۵b)9u =jٜͼûIϬf3?A@BDECFGIKJLHoNPMO,CE>RPSJ'6->+Ji)gHܭR|Ic3Y!VJ[;c}09cyw~}l[r1nTJ=d\#?Q qT|;<c-~}.<w+ON&qRRah6_?9G{Q"-RԞީ&30 rBIi3I/{x<= <*RP9qȏg /iiT_cۈ*;w+o^OCW߻RV^VG;~m9W߻%̨u^|=d\/iQүsKCN<&]$3ektJYyZ=#GCQ=n쉭Ntmo;GRJ_}&)|jOw3rm/QeuF=| g >xW߻RV^V|9⶗=AW߻jq37MSøW/ić=/{Tt(ůcڱS jǫS-T;4.jy[ƃ^3rm<_zF jǫS;5ҵ-ӸV/(v~)lr}0g ίh6;O\:Wߏm@4r6XIC'>,?/{Tt(ů,TNtm{/ W{+eekq)#n{6ϧNtmÃ^c1@CՐ.Ye|^ڇn1Ԯ-Oy~7g_}Q';x:8sա͢FwRS1bյW(޷m*N1G6h''/{[w+oYuMN& qR)/'Q?6VOr>^}7'Bܭ||C2^leWT|Ŷ(HK}=+ąs9[{cůsKCN |V҈Ϻ"]I-BrEP0T&RLR)#$RTi{ '>cC8rŧyn;Ǝƹw<C8Wߓh=Q<ߡZ![!'NvSF|Ň|?WON&?N ĵ9y2o 9<ؚCz'ŞDCuPl>t]/|3T0> ĝ/.[N< -}!3I/ ^f !9x 1{ێ>g -qAN";mթu\T<3ڛ/i*{ ~4T?}J0yȣ-B5;ՋLŗtIIAIj/A!_ۼ/zz.6KSecW߻j0L_o9ڭ4}B-? _}cN % A'^NyF\gOyPMm_ƛxڛO痛$r,aD >x_}/BOͯwK'!aP;rUHvfZb#]*"C#*xՔ`2<įzo~[:vyZ#rE3*xRigQR2RigQ<ʤ[@ tT/2_C&|TW߫Sec}z,!>]wjk[zAfΫ$;:cP/;foշa,|͢>NewK'x3T;^ƾ/[gNyuFckםzAE(aܢ^y>]wjk[eg+ڭ4zz9%^v:6 {m~tC|^pS{٫)m^Wߏm@Q?S&`ԶO/{=d\?a\ۼ͢!j#J!Fy8P ^5% >x6AO=&`Զq)=Bu=zS9!/iiTuF},hޣˮR;c(xmyvViT=ݡiA->Ư;5ҵm[NOy.S~:ET1_pON&ꧻ)j[;X<_Ȫ/{JTvӔe?WO+}m [exl[z?8e:ĭW ,3w]Ȫ/ '.SbGV}[ƞ1 BV}O8I/Vg>Afet촏~bq(ώȉS~R풲^Aa|bD3څwP?!>E!j_FF]BV}o8+Ji sJ>1L bOe*OU>AlrE<Qc[NCT)E>8 ՞*#[;+x6AO=&`Զq)=Bu=zS9!/iiTuF},h