IMD 1.12: 12/12/2009 12:28:07 dual cpm 1.0  OùB€N¹ Zpr$<,N¹ Z| Où`€W NsNVHç*nJgH€>€?<N¹ TO`èJŸLß N^NuNVHç>.0`".¼°aºN¹.¼¾a¬`.¼×a¢`J@gÚ°|gâ°|gæ.¼íaˆN¹JŸLßÀN^NuNVHç*n.¼6ÐBg?<N¹ XO.�Bg?<N¹ XO°|ÿm>¼aÿjB- .�Bg?<N¹ XOJ@g>¼aÿJ&|6Ð S`fJkf>¼aÿ0(k.+Þ«>¼d/ /<6ìN¹nPOÙüdž¼dJ‡o:.ŒBg?<N¹ XO.�Bg?<N¹ XOJ@g>¼aþÔÙü€ž¼€` +JŸLß8€N^NuNVÿøBW?<N¹ TOJ@gBWaþœ.¼Žaþì-@ÿü.¼õaþV.¼.aþL nÿüN�N^Nu$/` 4/`"/`2/0/HçN¹ ZLßxøNu/áH/Nu/ o /€ï 0ÀH@0€ _NuNVÿê|ÿîB.ÿï-nÿò-n ÿø-y6Àÿü.Ž—ÿÿÿîN¹ –N^NuNVÿü.¹6Ä0n/aºXON^NuNVHç *n (y6ÈBG¾lbL0À|f<äN>†a¾J@gpÿ`8?0À|ëHH@B@H@й6Ä// nN�Þü J@g0À|`RG`®0<ÿJŸLß0ÀN^NuNVÿîHç. H€À|ÿ°|opÿ`FB.ÿîGÿñB.ÿï.Ž—ÿÿÿîN¹ –#îÿü6Àfpÿ` y6À#è 6Ä y6À#è6ÈB@JŸLß ÀN^NuNVHç *n(n >.0SGJ@gÝ`ôJŸLß0€N^NuNVHç *n(n ~  ?H€H�³@À|gJgB@`LSGJGfÜJ.g> ?g H€H�³@"y6È)H�FÀAgB@`T�TŒH€H�³@À|?gB@`pJŸLß0ÀN^NuNVHç*n>¼/. / aÿbPOg- >¼ / /. aÿ POG H€JŸLß ÀN^NuNVHç *n(y6È,H†- H€,H�ÀAr’Fã`>0- H�Â|ÿ4äaÐAJŸLß0ÀN^NuNVHç*n>. Jng0GÑÈ>µˆN¹` ` 5pH€À|ÿJŸLß €N^NuNVÿüHç*y6ÈB€0.-H�HÁã -H�. H‚ÂBHÁÐ�-@ÿü.¹6Ì/.ÿüN¹@XOJŸLß N^NuNVHç*n-Î<?- R¼< mBR¾<@mp``H€-H�Â|?°Af*H€- H�³@"y6È)H�FÀAÀ|fF B@`$GF .�/<N¹ŒXO°|ÿep`B@JŸLß ÀN^NuNVHç *n~Ií J$fSGJGfö y6È hÿcâOB€p"y6È)H��Aào0"y6È)H�F- H‚ÂBÂ|€AJŸLß0€N^NuNVHç*n.�aˆ>- H€¾@f-H€À|ÿ``- H€¾@c0<€``B@JŸLß €N^NuNVHç*n y6È8(È|ÿ -€ f.�aþ’J@gp`LB- .�a€- H�Â|ÿ°Abp`2.�aý”<>„?/ aýÒ\O>JGfp`- H€>€?aýôTOR- JŸLß ðN^NuNVHç>.<. *n 0`TH€>€?<N¹TO`V>†N¹`NBB- B-.�/<N¹ŒXO`2B.�N¹ ‚`&#Í6Ì`pÿ``HÀ |^r°˜WÉÿü hNÐB@JŸLß ÀN^NuNVÿüHç*nH€`”-H€>€-H€??< N¹øXO+@`|(m&l.ŽY—?/-N¹(\O>®ÿü0+ÑW?< N¹TO.”?.ÿþ?<N¹òXO>€?< N¹TO.­ ?< N¹þTO>¼ N¹`` J@gÿj°|g†B@JŸLß8N^NuaBNu @låH {N�Nu T h h h Æ h h h h Ú > F Zò h h N hv h h h~9À<gôÁNu <˜&@aâ<aîa*~&49$f9*Ã?aîÅ>(Æü JgÖ|Ö¼²Èüؼü"D&‘'C Nu3Á6NuÁ4Nu BHÁ0HÀNu#Á,Nu9ÀgöÄÁNuAù$9Àgö9ÀgùÁ`äNuxaÆxÏaÂxFa¾Nu9ÂgöNuaòxaªaº9$  Nutxa–<a�aÞWÊÿòNutxa‚<aÿ|aÿvaÂWÊÿêgaÎNu<aÿb<aÿZaÿh9$Ê<Nu<JaÿB<aÿ:aÿzaÿDNut<9:g9?g9@&ÆüÖ¼ "CAù9=å Åù;ù=üÂÙÙÙNuAù1ØÂØÂØÂAùvaþ¸QËÿøaþôaþ¾Nu#üÀ0<9:aÿaÿdza°89$È|øÿ˜|@€gQÍÿìpNupNup,*<96B9=J9>g:Ê|Å=âN3Æ:º9 Z f n 2@²ò?ÀòÀ 4òÀ 4åÿð@<À < ÿð@@+À @Wÿð@     %&'()*+, -. /0  12!"34#$!"#$1234%&'(5678 )*+,9:;<  -./0 12345678 !"#$%&'(9:;<=>?@)*+,-./02L€¼€ÿÿ5ÿååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååREDNS 68K€ REDNS 68K€ UVWXYPIP 68KD STAT 68KIAS68 68K€AS68 68K€ !"#$%&AS68 68K$'()AS68SYMBDAT'*+,TEST TBI-LO68 68K{./012345DDT 68K!678DDT1 68K€9:;<=>?@DDT1 68K€ABCDEFGHDDT1 68K ICPM SYS€JKLMNOPQCPM SYS+RSTREDNS 68KMZ[\]^TBI68K 68K_`TBI S €abcdefghTBI S €ijklmnopTBI S €qrstuvwxTBI S yzTBI68K2 68K{|TBI68K S €}~€�‚ƒ„TBI68K S €…†‡ˆ‰Š‹ŒTBI68K S €�Ž��‘’“”TBI68K S  •TBI 68K–—TEST1 TBI˜NEWTBI 68K™šRANDOM TBI›NEWTBI S €œ�žŸ ¡¢£ågBW?.þÜN¹1FTO`Ö.¼ž N¹G\N¹IÄ=@ÿö>®ÿöaÀJ@g=nÿöÿø` >®ÿöN¹5¤`ž.¼žN¹G\N¹IÄ=@ÿö>®ÿöaˆJ@g=nÿöÿø` >®ÿöN¹9*`f.¼žN¹G\N¹IÄ>€N¹-T`J>®ÿöaLJ@g`> nÿþf >®ÿöN¹2„` nÿþf >®ÿöN¹-T`HÀ |œ"r$°˜WÉÿü h�NÐ`ùØN^NuNVÿü . g . l . mB@`pN^NuNVÿ¢N¹<..¼ž#N¹G\.Ž—ÿÿÿªadnÿªÿú.ÿúH€`p`Ðp`Êp`Ä`°|gò°|gà°|gà.ÿªH€HÀмª¬ @g .ÿªH€Ð| `.ÿªH€°|gfR.Ž—ÿÿÿ«N¹*B-@ÿ¦ nÿ¦Jf`2.ŽY—/.ÿ¦N¹MÖXO°|fBW?.ÿüN¹1FTO` .¼ž-N¹,2`*.¼ž>/—ÿÿÿªa"XOJ@g.Ž—ÿÿÿªN¹D`.¼žE/—ÿÿÿªaøXOJ@gN¹�N¹Gž`Ø.¼žK/—ÿÿÿªaÐXOJ@g.Ž—ÿÿÿªN¹â`®.¼žP/—ÿÿÿªa¦XOJ@g 3üÁ.`Š.¼žX/—ÿÿÿªa‚XOJ@g 3üÁ.`f.¼ža/—ÿÿÿªa^XOJ@g 3üÁ.`B.¼žj/—ÿÿÿªa:XOJ@g 3üÁ0`.¼žr/—ÿÿÿªaXOJ@g 3üÁ0`ú.¼ž{/—ÿÿÿªaòXOJ@g 3üÁ0`Ö.¼ž„/—ÿÿÿªaÎXOJ@g 3ü°0`².¼žŒ/—ÿÿÿªaªXOJ@g 3ü°0`Ž.¼ž•/—ÿÿÿªa†XOJ@g 3ü°0`j.¼žž/—ÿÿÿªabXOJ@g.Ž—ÿÿÿªN¹`@.¼ž¥/—ÿÿÿªa8XOJ@f.¼ž©/—ÿÿÿªa NEWTBI S €¤¥¦§¨©ª«NEWTBI S €¬­®¯°±²³NEWTBI S ´µASM SUB¶TIME TBI·åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå`–v¶ÿÿ`4C Runtime V01.04 Copyright 1982 by Digital Research o"h&IÓèB[¿Ëbú#É«0E耀ÿ?/ �ÎN¹ufN¹~¤NVB€ oÑü¿ÈdpÿN^NuNV0/"/ NB¿ù«0d0< Aù›v"NB0<NBN^NuNVþÒN¹GÆBWN¹?ÔB9´4.¼¯úN¹šâ°|ÿÿf`îN¹S¢p=@ÿþ=@ÿü3îÿþÁ.3üÁ03ü°0>¼N¹BìN¹C&N¹CÈN¹D`N¹.*N¹;È>¼BgN¹C€TO>¼N¹D†.¼�JN¹) .¼�ZN¹) .¼�†N¹) .¼�¬N¹) .¼�­N¹) .¼�ÄN¹) .¼�ÅN¹) BWN¹D†.¼¯úN¹šâ°|ÿÿfBnN¹P8°|f">¼N¹QN¹.*BW?<N¹1FTO`¨ nm|.¼�ÆN¹G\.¼�Ô/—ÿÿÿ.N¹š"XO n .¨/—ÿÿÿ.N¹™¼XO.Ž—ÿÿÿ.N¹ʰ|fN¹J `">¼?<?<N¹V,XO>¼BgN¹C€TO`">¼?<?<N¹V,XO>¼BgN¹C€TO.¼¯úN¹šâBnÿúBnÿø0.ÿþ`:.¼�ÚN¹G\`D.¼�àN¹G\`6.¼�èN¹G\`(.¼�òN¹G\``°|gΰ|gº°|gа|gØJnÿøg =nÿøÿöBnÿø` N¹IÄ=@ÿö n ÿöf=nÿúÿö nÿþg nÿþfØ <ª¬2.ÿöHÁÐ� @g 0.ÿöÐ| `0.ÿö=@ÿö0.ÿö`’=|ÿö`ž=|�ÿö`”=|ÿö`Š=|‚ÿö`€=|ƒÿö`v=|ˆÿö`l=|†ÿö`b=|…ÿö`Z=|ÿö`R=|ÿö`J=|‡ÿö`B=|ÿö`:=|‰ÿö`2=|„ÿöXOJ@gN¹(x°|f N¹PÎp`þ`ô.¼ž®/—ÿÿÿªaìXOJ@g N¹qJ`Ò.¼ž³/—ÿÿÿªaÊXOJ@g.Ž—ÿÿÿªN¹�`¨.¼ž»/—ÿÿÿªa XOJ@g.Ž—ÿÿÿªN¹�`~.¼žÁ/—ÿÿÿªavXOJ@g.Ž—ÿÿÿªN¹>`T.¼žÆ/—ÿÿÿªaLXOJ@g N¹ð`2.¼žË/—ÿÿÿªa*XOJ@g.Ž—ÿÿÿªN¹`.¼žÒ/—ÿÿÿªaXOJ@g.Ž—ÿÿÿªN¹¼`Þ.¼ž×/—ÿÿÿªaÖXOJ@f.¼žÜ/—ÿÿÿªa¾XOJ@g.Ž—ÿÿÿªN¹ÊN¹Gž`–.¼žà/—ÿÿÿªaŽXOJ@g.Ž—ÿÿÿªN¹š`l.¼žå/—ÿÿÿªadXOJ@g.Ž—ÿÿÿªN¹¾N¹Gž`<.¼žê/—ÿÿÿªa4XOJ@g By´T`.¼žñ/—ÿÿÿªaXOJ@g N¹`ø.¼žø/—ÿÿÿªaðXOJ@g N¹p`Ö.¼žý/—ÿÿÿªaÎXOJ@g.Ž—ÿÿÿªN¹Ü`¬.¼Ÿ/—ÿÿÿªa¤XOJ@g&J9´4f.¼Ÿ N¹,2` N¹Wîp`x`n.¼Ÿ/—ÿÿÿªafXOJ@g.Ž—ÿÿÿªN¹$Ò`D.¼Ÿ/—ÿÿÿªa>XOJ@g 3ü´T`$.¼Ÿ#/—ÿÿÿªaXOJ@g` .¼Ÿ$N¹,209Á.N^NuNVÿü n JgJ nH€HÀмª¬ @g nH€Ð| ` nH€"n H�°AgB@`.`R®R® `® nJg n  g n  gB@`pN^NuNVÿðN¹C =@ÿúN¹C=@ÿøN¹G®=@ÿüBW?.ÿüN¹C€TON¹D¦BnÿöN¹IÄ@ÿô°| gXN¹D¦ .ÿôg .ÿôg .å`*=|Šÿö`"=|‹ÿö```HÀ |›šr°˜WÉÿü h@NÐ=nÿöÿú nÿþf=nÿüÿþ0.ÿö`Œ`žaÈ=@ÿþ nÿþf>¼BgN¹C€TON¹Bb`z`rp=@ÿþ=@ÿü`dp=@ÿþ=@ÿü`Vp=@ÿþ=@ÿü`H=nÿþÿü=|ÿþ`8N¹7b09Á0=@ÿþ=@ÿü` N¹709Á0=@ÿþ=@ÿü`N¹: =y°0ÿþ`öN¹/¨=y°0ÿþ`äN¹6´`ÚN¹7†`ÐN¹0Ž`ÆN¹,®`¼N¹4``²N¹8V`¨N¹,v`žN¹.:`”N¹.È`ŠN¹:€`€.¼�úN¹G\N¹IÄ>€N¹2„`bN¹J N¹*^J@fN¹/¨N¹VJ@gN¹/¨``Ü`4BWN¹U\?N¹C?p�_ÑWW N¹Uj°_l N¹Uj?`N¹U\?N¹C?p�_ÑWW N¹1FTO`ÞBWN¹C?N¹U\�_Ð|ÿ÷lBg`N¹U\?N¹C‘WWÿ÷N¹1FTO`¢BWN¹U\Ð|ÿõlBg` N¹U\?WÿõN¹1FTO`xBWN¹U\?W N¹Uj°_l N¹Uj?` N¹U\?W N¹1FTO`>N¹J N¹P J@fN¹*^J@fN¹: `ä`BWN¹C?N¹U\�_R@lBg`N¹U\?N¹C‘WRWN¹1FTO=|ÿú`ÚBWN¹U\?WN¹C‘WN¹Uj°_l N¹Uj?`N¹U\?WN¹C‘WN¹1FTO=|ÿú`ŠBWN¹U\?W N¹C‘WRWN¹Uj°_l N¹Uj?`N¹U\?W N¹C‘WRWN¹1FTO`¼ N¹C^`0nÿþ"n0˜H€>€N¹C^Rnÿþ`º`¢ .ÿôfBW?.ÿüN¹C€TON¹DBnÿö`~ . ÿôf.0.ÿöÐnÿü°|Ol 0.ÿöHÀЮ @¼ Rnÿö>¼ N¹C^`F . ÿôm .ÿôf`þÖ`00.ÿöÐnÿü°|Ol"0.ÿöHÀЮ @®ÿôRnÿö.ÿôH€>€N¹C^N¹D¦`þš .2.ÿöHÁÐ� @B>®ÿø?.ÿúN¹C€TON^NuNVÿö>¼ÿÿ/]—?<}/Y—?</U—/.aÀÞü°|ÿÿf`>¼Bg?<?.ÿü?.ÿþaœPON^NuNVÿüaâ°|f@B9´4N¹CÈN¹UxN¹;È>¼BgN¹C€TO>¼?<?<N¹V,XON¹D–N^NuNVÿüBW/<ŸP/<Ÿ8/.aöÞü N^NuNVÿö>¼ÿÿ/]—?<ÿÿ/Y—N¹U\?/U—/.aüÞü°|ÿÿf`T nÿÿÿüf=nÿþÿü.¼Ÿ^N¹G\>®ÿþN¹Q>®ÿü0.ÿþ‘WRWN¹[ø>®ÿþN¹QN¹.*BW?.ÿþN¹1FTON^NuNVÿâ.Ž—ÿÿÿì/.a2XO°|ÿÿf`ŒJ.ÿìf.¼Ÿmat`x.®aT-@.®al-@>¼ÿÿ/—ÿÿÿæ?<ÿÿ/—ÿÿÿèN¹U\?/—ÿÿÿê/.aÞü nÿÿÿèf=nÿêÿè.¼Ÿ’?.ÿè?.ÿê/—ÿÿÿìa ¢PON^NuNVÿö>¼ÿÿ/]—?<}/Y—N¹U\?RW/U—/.aÀÞü°|ÿÿfpÿ`BW?<Bg?.ÿü?.ÿþaœPON^NuNVÿø>¼ÿÿ/Y—?<ÿÿ/Y—N¹U\?SW/U—/.anÞü°|ÿÿfpÿ`$BW?<Bg?< nÿþo?.ÿþ`?<U\=@=nþh `Sn>®N¹Q`ÿ0 naþdfN¹.*BW?.þjN¹1FTON^NuNVþ^>¼É/—ÿÿÿ6N¹_~XO=@þj nÈþjl0.þj`0<È=@þj N2nþjÑÉB(ÿ6JngJng0.°nþjgpÿ`P`0.°nþjopÿ`>Jng 0.þj�n`B@=@þh n=PþfBnþd0.þh°nþjl .2.HÁÐ�.€ 2.þhHÁÐ�/—ÿÿÿ6aÄXOJ@fJnfJngpÿ`Ô`Rnþh`°`=|þd naþfg$>®þhN¹U\?N¹1FTON¹J N¹C =@þb nfŒ>®þh/. .2.HÁÐ�//—ÿÿþl/—ÿÿÿ6aŽÞü.Ž—ÿÿþlN¹šF>€/—ÿÿþlN¹WfXO naþfg4N¹C>€BgN¹C€TON¹U\>€N¹V°N¹C>€?.þbN¹C€TOJnfp`ø naþffL>¼É/—ÿÿÿ6N¹_~XO=@þj nÈþjl0.þj`0<È=@þj N2nþjÑÉB(ÿ6.® N¹šFÑnþh`„JnfZ.¼¤.N¹G\N¹IÄ=@þf <ª¬2.þfHÁÐ� @g 0.þfÐ| `0.þf=@þf nnþfgp`R`0.Ñnþh`$.¼¤;N¹G\N¹IÄ=@þf <ª¬2.þfHÁÐ� @g 0.þfÐ| `0.þf=@þf n0®þf nyþfg naþff<>¼É/—ÿÿÿ6N¹_~XO=@þj nÈþjl0.þj`0<È=@þj N2nþjÑÉB(ÿ6`T.Ž—ÿÿÿ6N¹šF>€/—ÿÿÿ6N¹WfXON¹C>€BgN¹C€TON¹U\>€N¹V°N¹C>€?.þbN¹C€TO nyþfg naþff.® N¹šFÑnþh` nnþff.®N¹šFÑnþh`p` JnfJngB@``üôJnþdgB@`pÿN^NuNVÿø>¼ÿÿ/Y—?<ÿÿ/0˜H€=@ÿþ n ÿþg n ÿþf``ÎJy«þo0Sy«þ0y«þ"|«60˜H€=@ÿþ n ÿþg n ÿþg``ÈN¹C>€ah?N¹C€TON^NuNVÿø09«þ°y¬m. H€>€a`² <«629«þHÁÐ� @Pÿþ <«629«þHÁÐ� @® >¹¬?9«þ/<«6N¹@\O>¹«þRW/<«6N¹@xXO=@ÿü nOÿüo2 <«629«þHÁÐ� @®ÿþ>¹¬?9«þ/<«6N¹@\O`3ü¬Ry«þa Òa ,N^NuNVÿü3üÿÿ¬N^NuNVÿøN¹C ?a d°_lN¹C>€N¹C ?SWN¹C€TO`ZJy«þf`P3ü¬=y«þÿü0.ÿü°y¬l$0nÿüÑü«6"<«64.ÿüHÂÒ‚"AQÿÿRnÿü`ÐSy«þSy¬a ŽN^NuNVÿøJy«þo<09«þ°y¬f.N¹C ?a À°_nN¹C>€N¹C ?SWN¹C€TO`–Jy¬f`Š3ü¬09«þR@=@ÿü0.ÿü°y¬l$0nÿüÑü«6"<«64.ÿüHÂÒ‚"AQÿÿRnÿü`Ð09«þR@°y¬mJy«þoSy«þSy¬09«þ°y¬fJy«þoSy«þa ®N^NuNVÿúN¹C =@ÿþa vN¹VJ@gBa VJ@g8N¹U\>€Wÿëa è>¼?<N¹U\?RWN¹V,XO>¼BgN¹C€TO`XN¹P°a º>®ÿþa d3À«þa üJ@g"N¹U\>€Wÿêa Ž>¼?.ÿþN¹C€TO`N¹C>€RW?.ÿþN¹C€TON^NuNVÿü3ù¬«þa €N¹C>€a .?N¹C€TON^NuNVÿú09«þ°y¬f aÿaûè`˜Ry«þ09«þ°y¬l*0y«þ"|«60˜H€=@ÿþ n ÿþg n ÿþa¼ÿÿ/—ÿÿÿè?<ÿÿ/—ÿÿÿèN¹U\?/—ÿÿÿê/.aªÞü.¼£&?.ÿê/—ÿÿÿìa ’\O>®ÿêN¹QN¹.*BW?.ÿêN¹1FTON^NuNVÿ&N¹U\=@ÿ*>¼ÿÿ/—ÿÿÿ.?<}/—ÿÿÿ0?</—ÿÿÿ2/.a2Þü°|ÿÿf`Ä.¼£6N¹G\=nÿ2ÿ,0.ÿ,°nÿ0n”BWN¹?ÔaR°|f`~>¼N¹?Ô>®ÿ,N¹QRnÿ,N¹PJ@g`X>¼É/—ÿÿÿ6N¹_~XO=@ÿ4 nÈÿ4l0.ÿ4`0<È=@ÿ4 N2nÿ4ÑÉ| ÿ6BW/—ÿÿÿ6N¹A,XON¹Bb`ÿdBWN¹?Ô>®ÿ*N¹QN^NuNVÿ.Ž—ÿÿÿ$/.aøXO°|ÿÿfB@`¬J.ÿ$f.¼£Da8B@`–a tJ@fB@`ˆ.Ž—ÿÿÿ$N¹MFJ@f.¼£VaB@`f.¼£fN¹G\.¼´4/—ÿÿÿ$N¹MhXON¹GžN¹D¦N¹Ux.¼´4N¹i N¹Wà>¼N¹QN¹.*BW?<N¹1FTOpN^NuNVÿü>¼/<£Œ/<£t/.a <Þü N^NuNVÿü.¼´4/.aXON^NuNVÿü.®a @-@Y—?</U—/.a2Þü°|ÿÿf`">®ÿþN¹BìN¹.*BWN¹U\?N¹1FTON^NuNVÿ*.Ž—ÿÿÿ./.N¹J XO-@ÿüJ®ÿüf.¼¤Paà`~.®N¹G\>® N¹QJn gN¹P°>¼È/—ÿÿÿ4/.ÿüN¹KPO=@ÿ0m4 nÈÿ0o.¼¤`aŒ=|Èÿ0>®ÿ0/—ÿÿÿ4N¹`XON¹P°`®.®ÿüN¹JºN^NuNVÿ$.®N¹G\.Ž—ÿÿÿ(/.N¹J†XO-@ÿüJ®ÿüf.¼¤pa&`ÜN¹U\=@ÿô>® N¹Q0.�n R@=@ÿøJnÿøg”>¼È/—ÿÿÿ*N¹_~XO=@ÿöJnÿöl .¼¤�aÐBnÿú0.ÿú°nÿöl".®ÿü N2nÿúÑÉ(ÿ*H€?N¹LTORnÿú`Ô.®ÿü?< N¹LTO.®ÿü?< N¹LTON¹P°N¹PJ@g`Snÿø`ÿh.®ÿüN¹JÌ.®ÿüN¹Jº>®ÿôN¹QN^NuNVÿ&>¼ÿÿ/—ÿÿÿô?<ÿÿ/—ÿÿÿö?<ÿÿ/Q—/.a Þü°|ÿÿf`L nÿÿÿøg nÿÿÿöf .® aò`0 nÿÿÿôf =nÿöÿô=nÿøÿö0.ÿø°nÿôo>®ÿø`>®ÿôN¹QN¹PJ@g&N¹Yr0.ÿø°nÿôm N¹U\=@ÿö` N¹U\=@ÿô0.ÿö°nÿøm JnÿøoJnÿôm0.ÿô°nÿøm0.ÿô°nÿöl .® a^`œ.®?.ÿö?.ÿø/<¤¡aýêPO.®?.ÿô/<¤®aý&\OJng>0.ÿö�nÿøR@=@ÿþ0.ÿø°nÿôl >®ÿøN¹Q`>®ÿø0.ÿþÑWN¹Q>®ÿþN¹[ø.¼¤»N¹L|>®ÿôN¹QN¹.*BW?.ÿôN¹1FTON^NuNVÿöN¹C =@ÿüN¹C=@ÿúN¹P8J@fp`h.¼¤É/<¤ÈN¹FÐXON¹IÄ>€N¹JB=@ÿþ>®ÿú?.ÿüN¹C€TO <ª¬2.ÿþHÁÐ� @f``Â09«þ°y¬l0Ry«þ0y«þ"|«60˜H€=@ÿþ n ÿþg n ÿþg``Âa ÈN¹C>€a v?N¹C€TON^NuNVÿø09¬Ð|=@ÿüa Ô>®N¹QN¹PJ@gN¹YrN¹U\=@Jy¬o*0.°y¬m0.°nÿün0.�y¬R@=@ÿþ`²N¹Uj?N¹U\Ð| °_oNN¹UjÐ|ÿë°|lp` N¹UjÐ|ÿë3À¬N¹U\�y¬R@=@ÿþ>¼?<?9¬N¹V,XO`LN¹U\Ð|ÿô°|lp` N¹U\Ð|ÿô3À¬N¹U\�y¬R@=@ÿþ>¼?<?9¬N¹V,XOa d3î «þ>®ÿþa 8?N¹C€TON^NuNVÿö yȬmB@`Æ=y¬ÿú3ü¬09«þ°y¬fdN¹C ?aì°_lTaä?N¹C �_=@ÿü09¬Ðnÿü3À¬0.ÿüSnÿüJ@o09«þHÀм«6 @¼ Ry«þ`Ø3ù¬«þ=y¬ÿü0.ÿü°y«þo$ <«62.ÿüHÁÐ� @2nÿüÓü«6©ÿÿSnÿü`Ð <«629«þHÁÐ� @® Ry«þRy¬>¹¬?9«þSW/<«6N¹@\O>¹«þ/<«6N¹@xXO=@ÿü nOÿüo�09«þ°y¬f€Jy´Tgv09«þS@=@ÿüJnÿüm2 <«62.ÿüHÁÐ� @  g <«62.ÿüHÁÐ� @  gSnÿü`ÈJnÿülaú"3îÿú¬B@`60.ÿüR@3À«þa"aü*p`` nOÿüoaùð3îÿú¬`aøB@N^NuNVÿöN¹P J@g`0aºN¹Yr>¼È/<«6N¹_~XO=@ÿþN¹P°>¼È0.ÿþ‘W <«62.ÿþHÁÐ�/N¹_~XO=@ÿü0.ÿþÐnÿü°|Éo>¼È/<«6N¹_~XO`ÀN¹.®a X-@.® /.N¹MhXOB@N^NuNVÿøN¹U\=@ÿüJ9´4f .¼£™a`D.¼´4N¹MFJ@f .¼£©aò`(.¼£¹N¹G\.¼´4N¹oŒN¹Wà>®ÿüN¹QN^NuNVÿöN¹U\=@ÿúJ9´4f .¼£Èa¤`F.¼´4N¹MF°|f .¼£Øa†`(.¼£åN¹G\.¼´4N¹oŒN¹Wà>®ÿúN¹QN^NuNVÿö>¼ÿÿ/]—?<}/Y—?</U—/.a (Þü°|ÿÿf`>¼BgBg?.ÿü?.ÿþaPON^NuNVþX.¼£òN¹G\.Ž—ÿÿÿ6N¹~.Ž—ÿÿÿ6N¹šFJ@f`ÌJn g.¼¤N¹G\.Ž—ÿÿþlN¹~N¹U\=@þj>®N¹QN¹PJ@gN¹YrN¹U\=@þhN¹U\=@=n þf.Ž—ÿÿÿ6N¹šF=@þb .^ÿ6fp`B@=@þ` N2nþbÑÉ ($ÿ5fp`B@=@þ^ N2nþb’îþ^ÑÉB(ÿ60.þ`Ðnþ^‘nþbBnþd.¼¤N¹G\0.°n nö0.°n nÆa D°|f`¸>®þb?.þ^?.þ`/—ÿÿþd?.?. /—ÿÿþl/—ÿÿÿ6a²Þü=@þ\ nþ\f`š`Jnþ\fN¹U\=@þj.¼¤N¹G\N¹VJ@g Jnf`B`¼N¹Q=|=nþh `Rn>®N¹Q`ÿ2 naþdfN¹.*BW?.þjN¹1FTO`` n lp`0. =@ 0.°n mÈa <°|f`º>®þb?.þ^?.þ`/—ÿÿþd?.?. /—ÿÿþl/—ÿÿÿ6aªÞü=@þ\ nþ\f`’`Jnþ\f N¹U\=@þjN¹U\°|f Jnf`N`HN¹U\°|f. nf&Bn>¼}N¹QN¹YrN¹g 0.ÿþÐ| `0.ÿþ°|yfp``B@N^NuNVÿüBW/.N¹A,XON¹BbN^NuNVÿü.®aî-@.®a-@ n 0® n0® n0® nJfB@`´.® /.N¹MÖXOJ@f.¼¤èa®pÿ`�.®aŒ-@.®a¤-@ nJfB@`j.®/.N¹MÖXOJ@f.¼¤öadpÿ`F.®aD-@.®a^-@ nJfB@`&.®/.N¹MÖXOJ@f.¼¥a"pÿ``B@N^NuNVÿü nJg n  gR®`è .N^NuNVÿü n  fR®`ð .N^NuNVÿúN¹I4=@ÿþ nÿÿÿþfB@`pN^NuNVÿúN¹I4=@ÿþ nÿÿÿþg n ÿþlp`B@N^NuNVÿü n Jg@ n H€"nH�°Af R® R®` n ?f nJg R® R®`B@``¸pN^NuNVÿòBnÿþ0.ÿþ°nl0.ÿþHÀЮ @"n‘R®Rnÿþ`Ú-nÿú-nÿö nÿöH€R®ÿöJgR®ÿú`ê nJg’ nÇÿþo.¼¥aÐpÿ`Æ n ?g0.ÿþHÀЮ @"n‘R®Rnÿþ`¸ n ?g" nJf.¼¥%aˆpÿ`~R®R®`Ô0.ÿþHÀЮ @"n‘R®RnÿþR®R®`ÿh nÿúJg0 nÇÿþm .¼¥Ba8pÿ`00.ÿþHÀЮ @"nÿú‘R®ÿúRnÿþ`È . 2.ÿþHÁÐ� @B0.ÿþN^NuNVÿøN¹C =@ÿþN¹C=@ÿü.®/<¥UN¹FÐXON¹IÄ>®ÿü?.ÿþN¹C€TON^NuNVÿüaLaÐa By¬N^NuNVÿüBy«þN¹C>€BgN¹C€TON^NuNVÿúJy«þfN¹P J@fa Da˜`‚Sy«þo*0y«þ"|«6Yr0.ÿþÐnÿü3À¬3îÿþ«þaò3ü¬a"N¹P°N¹[æaJ@f*a N¹C>€SWN¹C ?N¹C€TON¹Yra`TN¹YrN¹U\3À¬>¹¬Bg/<«6N¹@\O>¹¬Bg/<«6N¹@�\ON¹C>€a?N¹C€TON^NuNVÿö09«þ°y¬f`ø3ü¬=|ÿþ=| ÿú09«þÐnÿþ°y¬lx0nÿþ"|«64y«þÓÊ0˜H€°. f40nÿú"|ª¬0˜H€À|g. H€0@"|ª¬0˜H€À|f`&` 0nÿþ"|«64y«þÓÊ0˜H€=@ÿúRnÿþ`ÿx09«þÐnÿþ=@ÿü0.ÿü°y¬l*0.ÿü�nÿþHÀм«6 @"<«64.ÿüHÂÒ‚"A‘Rnÿü`Ê09¬�nÿþ3À¬a¢N^NuNVÿúN¹C ?aê°_l*N¹C>€N¹C S@lBg` N¹C ?SWN¹C€TO`$Jy«þgSy«þN¹C>€a¢?N¹C€TON^NuNVÿüN¹PJ@g>¹¬/<«6N¹`XOaðN¹P°BW/<«6N¹`XOapa‚N^NuNVÿüaÆBW/<«6N¹`XOaLaN^NuNVÿüN¹C ?a°_l2N¹C>€N¹C R@°|Oo?<O` N¹C ?RWN¹C€TO`ˆN¹C ?aÖ°_oN¹C>€aÆ?N¹C€TO`^09«þ°y¬l"Ry«þaèN¹C>€a–?N¹C€TO`.N¹C>€N¹C R@°|Oo?<O` N¹C ?RWN¹C€TON^NuNVÿöBy¬N¹PJ@g>¹«þ/<«6N¹`XO`>¹«þ/<«6N¹WfXO=y¬ÿþ=y«þÿü3ù«þ¬By«þašBy«þ0.ÿü°nÿþl,09«þHÀм«6 @2.ÿüHÁÒ¼«6¬00˜°y¬ o`,0n ÑÈ"|¬>°˜0n "n0˜H€?a¼TORn `®N¹DN^NuNVÿöBnÿü nH€@ÿþR®J@gN . ÿþf`D>®ÿü.ÿþH€?a:TO=@ÿú0.ÿüÐnÿúÐn °y¬ o`>®ÿü.ÿþH€?aJTO0.ÿúÑnÿü`žN^NuNVÿü . f09¬2. HÁƒù¬HA�A`` . lp``pN^NuNVÿú . f&>® ?< a°TO=@ÿþ0.ÿþSnÿþJ@o>¼ a0`ì`( . l>¼^a. H€>€W@a` . H€>€aN^NuNVÿü y¬ f. H€>€N¹Jd`. H€>€N¹C^N^NuNVÿü y¬ f>¼ N¹Jd>¼ N¹Jd`b y´Rf*>¼BgN¹C€TON¹D2>¼BgN¹C€TON¹Cö`.>¼BgN¹C€TO>¼ N¹JB>¼ N¹JBN¹D–N¹D¦N^NuNVÿü nlp`0.3À¬N^NuNVÿü09­ N^NuNVÿü09­¢N^NuNVÿüByµö3ü°.ByµìBy´R3üµî3ü´VBy´TN^NuNVÿü. H€>€N¹JBRy­ . H€N^NuNVÿü3î­ 3î ­¢>¼N¹JB>¼=N¹JB>® W N¹JB>®W N¹JBN^NuNVÿúBnÿþ nÿþl>®ÿþBga TOaRnÿþ`æBWBga�TON^NuNVÿü>¹­¢Bgaÿ|TOaN^NuNVÿü>¼N¹JB>¼TN¹JBN^NuNVÿüN^NuNVÿüN^NuNVÿü>¼Bgaÿ:TO>¼ N¹JBN^NuNVÿüN^NuNVÿü3ü­¤By­¦3ü®v3ü­¬N^NuNVÿü3î­¦N^NuNVÿü3ü­¤N^NuNVÿø y­¦f`*N¹C =@ÿþN¹C=@ÿü>®ÿþa>®ÿü?.ÿþN¹C€TON^NuÿþfB@`$`" nÿþfp`` . 2.ÿþHÁÐ� @¼pN^NuNVÿü0.ï@>€/. ?.N¹�Œ\O2.ïA°Agpÿ`0.N^NuNVÿü>¼/.N¹“ôXOJ@fp`B@N^NuNVÿúBnÿþ nÿþlJ .2.ÿþHÁÐ� @Jg8 .2.ÿþHÁÐ� @  g$ . 2.ÿþHÁÐ� @".4.ÿþHÂÒ‚"A‘Rnÿþ`® . 2.ÿþHÁÐ� @BN^NuNVÿü nH€HÀмª¬ @fB@``/. /.N¹–¨XO _0€pN^NuNVÿî>¼ /—ÿÿÿö?.aT\O=@ÿòBnÿô0.ÿô°nÿòl0nÿô6€öH€>€N¹JBRnÿô`Þ=nÿòÿô0.ÿô°n @ÀRnÿôDÀl >¼ N¹JB`âN^NuNVÿòJnl0.D@`0.=@ÿþ n B=|ÿú0.ÿú°nl:0.ÿþHÀ�ü H@Ð|02.ÿúHÁÒ® "A€Rnÿú0.ÿþHÀ�ü =@ÿþJnÿþf``¼0.ÿú°nlJnl0.ÿúHÀЮ @¼-Rnÿú0.ÿúS@=@ÿüSnÿúBnÿø0.ÿø°nÿúlN0nÿú"n 0˜H€=@ÿö . 2.ÿúHÁÐ� @". 4.ÿøHÂÒ‚"A‘0.ÿö". 4.ÿøHÂÒ‚"A€SnÿúRnÿø`¨0.ÿüN^NuNVÿøN¹C =@ÿþN¹C=@ÿü.®/<¥ŽN¹FÐXON¹IÄ>®ÿü?.ÿþN¹C€TON^NuNVÿøN¹C =@ÿþN¹C=@ÿü.®/<¥–N¹FÐXON¹IÄ>®ÿü?.ÿþN¹C€TON^NuNVÿü09´J°yµúnB@`pN^NuNVÿü y´JgB@`pN^NuNVÿü09´ZN^NuNVÿöBnÿú0.ÿú°yµølR0.ÿúå@HÀм´\ @-Pÿü nÿü0¼ÿÿ nÿü1|ÿÿ nÿüBh nÿü1| nÿü1nÿú nÿü1|ÿÿRnÿú`¢N^NuNVÿüaÿNJ@g` ` Ry´JaN^NuNVÿü yÿÿ´Xg >¹´XN¹"A‘RnÿüRy«þ`Ê3ù«þ¬By«þN¹P°>¹¬/<«6N¹`XOa¾a,N^NuNVÿú09«þ°y¬f`ÈRy«þJy¬f=| ÿþ`0y«þ"|«60˜H€°nÿþgB@`p09«þ°y¬lj0y«þ"|«60˜H€°. f40nÿþ"|ª¬0˜H€À|g. H€0@"|ª¬0˜H€À|f` `0y«þ"|«60˜H€=@ÿþRy«þ`ˆaN¹C>€a²?N¹C€TON^NuNVÿúN¹C =@ÿþaN¹P J@g`TN¹Yra˜>®ÿþaB3À«þaôJ@gN¹U\>€a>¼?.ÿþN¹C€TO`N¹C>€SW?.ÿþN¹C€TON^NuNVÿúN¹[æN¹PJ@g$a J@gN¹YrN¹U\3À¬aaœ`6N¹PJ@g$afN¹C>€SWBgN¹C€TON¹Yraæ`aBaÜN^NuNVÿü>¹«þ/<«6N¹@xXO°|OoSy«þ`ÞN^NuNVÿüN¹C°|gB@`pN^NuNVÿüN¹C°|gB@`pN^NuNVÿü>¹¬Bg/<«6N¹@\O>¹¬09«þS@lBg`?9«þSW/<«6N¹@�\ON¹C>€a?N¹C€TON^NuNVÿü>¹«þ/<«6N¹@xXON^NuNVÿúBy«þBy¬>¼È/<«6N¹_~XO=@ÿþ nÈÿþo.¼¥VN¹O|3üȬ`3îÿþ¬>¹¬Bg/<«6N¹@\ON^NuNVÿüJy¬f`:By¬N¹PJ@g>¹¬/<«6N¹`XO`>¹¬/<«6N¹WfXON^NuNVÿüBy«þ09«þ°y¬l&>¹«þ/<«6N¹@xXO°nlRy«þ```Ì09«þN^NuNVÿü3î¬ y´Rf.>¼BgN¹C€NVÿú y­¤fBWBgN¹C€TON¹Cö y­¤f2BWBgN¹C€TOBW/<¥fN¹A,XO>¼N¹U\?N¹NTO`0N¹U\°y­¨g"BW?<N¹C€TO>¼N¹U\?N¹NTON¹U\3À­¨ y´Vf< y­¤f2BW?< N¹C€TO>¼ /<¥mN¹A,XO>¼?.N¹NTO`4 y´Vf*0.°y­ªgBW?<N¹C€TO>¼?.N¹NTO3î­ª y­¤g y­¬fnBW?<N¹C€TOJ9´4f>¼/<¥vN¹A,XO`D>¼/<´4N¹A,XOBnÿþ.¼´4N¹šF?p�_°nÿþoBW/<¥„N¹A,XORnÿþ`ÒBy­¬ y­¤g y®vf&BW?<)N¹C€TO>¼)/<­®N¹A,XON¹DBy®vBy­¤N^NuNVÿü3ü­¤N¹C >€aýþBW?<)N¹C€TON¹DN¹C >€/<¥†N¹A,XON¹C >€/.N¹A,XON¹C >€/<¥ˆN¹A,XON¹C >€/. N¹A,XO3ü®vN^NuNVÿü.¼­®/.N¹™èXOJ@g .®/<­®N¹š"XO3ü®vBWaüòaýN^NuNVÿü3ü­¬N^NuNVÿü.¼­®N¹šFÐ|)N^NuNVÿêAîÿö-Hÿò nÿòBP.®ÿò?<?N¹uZTO nÿò-hÿî nÿî ("nÿî")Ð�#À¯Ò nÿò (�¼ #À¯ÎBy¯ÌBy¯ÂBy¯ÄBy¯ÆN^NuNVÿü 9¯Ò2.HÁÐ�°¹¯Îd(0.HÀѹ¯Ò>®N¹™j 9¯Ò2.HÁ��``B€N^NuNVÿúJnn`v`r .°® c4Bnÿþ0.ÿþ°nl$ . 2.ÿþHÁÐ� @".4.ÿþHÂÒ‚"A‘Rnÿþ`Ò`40.S@=@ÿþJnÿþm$ . Lj3üÿÿ´X.¼¥ N¹L|N^NuNVÿø=y´Jÿü09µúR@°no0.`09µúR@3À´J y´Jlp`09´J3À´J09´J�nÿü=@ÿþJnÿþf`¸`´ nÿþf a``¤`  nÿÿÿþf a˜`�`ŒJnÿþoR09µú�nÿüâ@Ðnÿü°y´Jl2>¹´LN¹m4#Àµþ09µúR@"yµþ2)�A3À´PaB`<`að`4`20.ÿüâ@°y´Jo">¹µüN¹m4#Àµþ3ü´PaÀ``aN^NuNVÿú ¹ÿÿûúµþg2 y´Pm(09´P°yµún y´Jm09µúR@°y´Jl .¼¥­N¹qr09´P°y´JoT yµþ=Pÿþ nÿÿÿþf .¼¥¸N¹qr>®ÿþN¹m4#Àµþ yµþ0(‘y´PJy´Pn .¼¥ÃN¹qr`žN^NuNVÿúaý0J@g` ¹ÿÿûúµþg@09´P°y´Pm2 y´Pm(09´P°yµún y´Jm09µúR@°y´Jl .¼¥ÎN¹qr yµþ0(Ðy´P°y´JnP yµþ0(Ñy´P yµþ=hÿþ nÿÿÿþg09´P°yµúo .¼¥ÙN¹qr>®ÿþN¹m4#Àµþ`˜N^NuNVÿì3üÿÿ´XBnÿö ndÿöl0>¼N¹H:-@ÿðJ®ÿðf`0.ÿöå@HÀм´\ @ ®ÿðRnÿö`È3îÿöµø yµøl.¼¥äN¹O|N¹~¤.¼¦N¹MFJ@f aX`4`4>¼/<¦N¹LRXO3À´X yÿÿ´Xf.¼¦N¹O|N¹~¤#ù´\µþ.¹µþ?9´XN¹LÄTOByµü 9µþ\€-@ÿø.®ÿøN¹–¨=@ÿô.®ÿøZ—N¹–¨3À´L.®ÿø— N¹–¨3Àµò.®ÿø—N¹–¨3Àµú.®ÿø—N¹TON¹D2>¼?<?.WN¹V,XO`J y°.f&N¹D:>¼?<?.WN¹V,XON¹D–`>¼?<?.N¹V,XON¹D–N^NuNVÿü3î¬ yµìf*>¼BgN¹C€TON¹D*>¼?<?.N¹V,XO`F yµöf"N¹DX>¼?<?.N¹V,XON¹D–`>¼?<?.N¹V,XON¹D–N^NuNVÿúaý8J@g&N¹U\>€WÿêaþÊ>¼aý¬?N¹C€TO`€ yµìf6N¹C=@ÿþ>®ÿþRWBgN¹C€TON¹D*>®ÿþRWaýj?N¹C€TO`>N¹C=@ÿþ>¼0.ÿþ‘W?.ÿþRWN¹U\?N¹V,XO>®ÿþRWaý*?N¹C€TON^NuNVÿú yµìf$N¹C=@ÿþN¹D*>®ÿþaüö?N¹C€TO`baüpJ@g N¹U\>€aþ~>¼aüÎ?N¹C€TO`:N¹C=@ÿþ>¼0.ÿþ‘W?.ÿþN¹U\?N¹V,XO>®ÿþaü’?N¹C€TON^NuNVÿúN¹C=@ÿþ y´Rf*N¹D2>¼?<N¹U\?W0.ÿþ‘WN¹V,XO`VaûÈJ@g0N¹U\>€aýD>¼?<N¹U\?W0.ÿþ‘WN¹V,XO`>¼0.ÿþ‘W?.ÿþN¹U\?N¹V,XO>®ÿþBgN¹C€TON^NuNVÿü nf3ü¬ 3üP¬ `By¬ 3üO¬ N^NuNVÿúBy¬=n ÿþ0.ÿþ°nlV0.ÿþR@ã@HÀм¬/0nÿþÑÈ"|¬?0˜0nÿþ"n0˜H€?aHXO2.ÿþãAHÁÒ¼¬"A2ÐA _0€Rnÿþ` N^NuNVÿü0n ÑÈ"|¬00˜N^NuNVÿú0n ÑÈ"|¬00˜°y¬ m`zN¹C>€0n ÑÈ"|¬?0˜N¹C€TO0. °nlH0n RHÑÈ"|2.ÿþHÁÐ� @".4.ÿþHÂÒ‚"A‘Snÿþ`ÖN^NuNVÿü3î¯È3î ¯ÊJn lB@`0. 3À¯ÌN^NuNVÿø>¼þ?<N¹uNTOJ@g>¼ÿ?<N¹uNTOÀ|=@ÿþ`BnÿþJnÿþg*3îÿþ¯ÆBy¯Ä0.ÿþ29¯ÂHÁÒ¼®ú"A€Ry¯ÂJy¯ÂoSy¯Â0y¯Â"|®ú0˜H€``pÿN^NuNVÿúaÿj=@ÿþ°|ÿÿf. yµîf"Jy¯Ìo>¹¯Ì?9¯Ê?9¯ÈN¹V,XO`Ä0.ÿþN^NuNVÿü yµîf$Jy¯Ìo>¹¯Ì?9¯Ê?9¯ÈN¹V,XO`ÒN^NuNVÿü. H€>€?<N¹uNTO. H€N^NuNVÿü. H€>€?<N¹uNTO. H€N^NuNVÿü.¼¥Š/.N¹}0XON^NuNVÿü.¼¥Œ/.N¹}0XON^NuNVÿü.®N¹~îN^NuNVÿü.®?<N¹€TO.®N¹FN^NuNVÿú.®N¹Ê=@ÿþ nÿÿÿþfpÿ`0.ÿþÀ|N^NuNVÿøBnÿü.®aÈ=@ÿþ n ÿþf`ì`à nÿþg nÿÿÿþfP0.U@°nÿüo0.ÿü`0.U@HÀЮ @¼ 0.S@°nÿüo0.ÿü`0.S@HÀЮ @Bpÿ`ˆ`€ n ÿþfN0.U@°nÿüo0.ÿü`0.U@HÀЮ @¼ 0.S@°nÿüo0.ÿü`0.S@HÀЮ @B0.ÿü`.`(0.U@°nÿüo0.ÿþ2.ÿüHÁÒ® "A€Rnÿü`Rnÿü`ÿN^NuNVÿü.® . H€?N¹€TON^NuNVÿü>¼/.N¹ƒÐXON^NuNVÿü>® /.N¹†ðXON^NuNVÿü>®N¹‚ŒN^NuNVÿü.®N¹�DN^NuNVÿüN^NuNVÿüBW0. HÀr ã /?.N¹„¸\O°|ÿÿfpÿ`B@N^NuNVÿú>¼/. ?.N¹‡Î\O=@ÿþ nÿÿ–¨3À°2.®ÿø—/<´4N¹š"XO3ùµò¶ nÒÿôg.¼¦6N¹O|N¹~¤aûp3À´P3À´JBWN¹m4N¹[æ3ü´ZByµðN^NuNVÿü09´JN^NuNVÿü09µúN^NuNVÿøaúÈ#ù´\µþByµüBy´LByµòBy¶ yµþBh yµþ1| yÿÿ´Xg >¹´XN¹Lj3üÿÿ´X.¼¦RN¹L|3üÿÿ°23ü´JByµú3ü´PBy´ZByµðN^NuNVÿü09´J°yµúlB@`pN^NuNVÿöN¹C =@ÿüN¹C=@ÿú=y´JÿþJn oB>® BgN¹C€TORn >®aFRnSn yµîf>® ?. ?.N¹IXO``¸>®ÿú?.ÿüN¹C€TO>®ÿþaúVN^NuNVÿ0>®aúFJyµúf ngJyµúo&09µúR@°nfBW/<¦_N¹A,XON¹D`h0.°yµúoN¹D`T>¼È/—ÿÿÿ6N¹_~XO=@ÿ4 nÈÿ4l0.ÿ4`0<È=@ÿ4 N2nÿ4ÑÉ| ÿ6BW/—ÿÿÿ6N¹A,XON¹DN^NuNVÿüaø˜J@g>® /.N¹`XO` >¼N¹\ >® /.N¹`XON¹b(N^NuNVÿüN¹lä>¹´XN¹Lj3üÿÿ´X. H€>€/<¦ŽN¹LŽXON^NuNVÿüBy´ZN^NuNVÿ, yÿÿ´Xf N¹fª3À´X>¼aøòBnÿø n-ÿøl N2nÿøÑÉ| ÿ0Rnÿø`ä>¼-/—ÿÿÿ0N¹`XOAîÿ0-Hÿü>¼/.ÿü?<ÒN¹N|\O=@ÿú .ÿü2.ÿúHÁÐ� @B>¼/.ÿüZ—?9´LN¹N|\O=@ÿú nÿü2nÿúÑÉB(>¼/.ÿü— ?9µòN¹N|\O=@ÿú nÿü2nÿúÑÉB( >¼/.ÿü—?9µúN¹”N¹ŠNu<$/*˜N¹ŠNu%jœP%j T*¤SG¤¾<ÿg&jT"jP‘ªPªT`ÔNuaÿp*˜âdGê<%Kjaþ(Gê<%KraþšGìÿX%K^aý¬BG*¥åOB†<ܼ^%thZaý€Gìÿ`%KZaýtJª¦gn&j¦+Þ<ASGXaý,|:Xaý"|ª * ªb@BG*ª&j¦3pÌ<F«¼< g * ªf |.Xaüæj«XaüÜ*ªd¸B*ªaüæ.m<,O`Nu|¥Bª¦aÿNu*9¾*Šf*8¾*‰f*7¾*ˆfp`pNuaþZGêb%KœCê<%I |%¤aþ”Gìÿd%KœCêE%I |¤aþzGê<%KraýdGê<%K~aý� *ÿ¨f|¥Gê<%K¦aþ‚B*\|˜NuaýîGê%Kfaü�*?F* ãÎâd|ÿ¨ *ÿ¨f| ¥Gê%K¦aþ4*Î<€G¢*Î<€G£*Î<€G¤*Î<€G¥*Î<€G¦* Î<€G§Gê%K”aý†@¨Gê7%KœCêˆ%I |¤aýˆB*6B*7B*8B*95|ÿÿŽNu*˜Fâdaþ²>*�Î|ÿ€5G°JGg’Bj®aüô>*®&|.\Cóp%Ibaû†*œŽ*›Gœâd&Gê<%K�aüæ°<ÿf |¥Gê<%K¦aý8` Gê<%K˜aüà>*®¾j°dB>*®&|.\Cóp%Ibaû$Gê<%KzaûÞJ*¨g|¥Gê<%K¦aüæj€®`´*Câd®Bj®Gù-Ô%KbaúÜ>*®¾j°d„Gê<%KŒaü0JWÇG­j^B*¬ *€¬UÇÎ*­âd.BG*¬,Þj®&|-Ô3`"|.\º1pWÄD­*¬`Âj€5@ÈaþÞ@ÅJ*Ãg*ÃaþÊ@Â`êaþÀJg| ¥Gê%K¦aôaüø@Á`þæNuJ*@c| ¥Bª¦aóøJ*>c| ¥Bª¦aóäNu*‘Î<Jg |¸aú¤`èa¼aöaó2Gê<%Kjañò *ÿ¨f|¥Gê<%K¦aóšGêb%Kfañ¸ *ÿ¨g Gêb%Kjañ¶*kãâdd*DFâdZ *Y¨g& *N¨gGìÿh%K^añ"aðÔ@ºaú @¨`Ò *Y¨g GìÿŠ%K^aðüaðÖGê<%KrañÎ`êaðÂ*k*lGêb%K†aòGêb%Krañ¢Gêb%KœCêL%I |¤aò’Gê<%K‚añÈ*cÎ<Ž*¢Gc*dÎ<Ž*£Gd*eÎ<Ž*¤Ge*fÎ<Ž*¥Gf*j*kÎ<Ž*¦Gk*lÎ<Ž*§Gl*mGêb%K†añr*.âdañ¸*€!B*"Gê%K†añPNuGù.\%Kª .*¾¹-ˆoGìÿš%K^aïÔaïzB*Ê.*¾¹-ˆl *Êdª*Ê`ܪGù.\%KP.*žªP |N¹%@TЪP%@.*žªPÎ|ÿâOž|€5G5G *“Fâd2Gù.\%K j@ e5|€ 5|€`$>* Þj5G 5G`>*�¾j eaó’BjŒNu**Œž|€5G B*Ë *€Ëb$BG*ËÞj &j 3pf5GŒ`*ËdÔNu`¢að`Gê%K˜aðŽGù-Ô%Kbaîä~âdzGê%KŒað>@¨Jf5j8^j7]B*™`T *¨f>*8RG5G8JGf¾*7`¶ *¨f>*8Þ|€Î|ÿ€5G8JGfš*7`’B*¥GêN|\O=@ÿú nÿü2nÿúÑÉB(>¼/.ÿü—?9°2N¹N|\O=@ÿú nÿü2nÿúÑÉB(.¼´4/.ÿü—N¹š"XO>¼-/9µþ\—/—ÿÿÿ0N¹H‚PON¹lä>¹´XN¹LjN^NuNVÿüaö¨J@g` ` Sy´Jaø�N^NuNVÿü n0N^NuNVÿü n0® N^NuNVÿü>®/9µþaXON^NuNVÿü .м2. RAãAHÁ��.€a®N^NuNVÿü>® ?./9µþa\ON^NuNVÿü>® .м2. RAãAHÁ��/aÿ|XON^NuNVÿü>®/9µþaXON^NuNVÿüJn m n0(°n n .¼¦œN¹qrN¹PJ@gB@`<`:Jn f>® /.aÿ@XO`$`">® SW/.aÿ,XO??. /.aÿ\O�_N^NuNVÿü>®/9µþaXON^NuNVÿüJn m n0(°n n .¼¦¢N¹qrJn f .\€``>® SW/.aþ¼XOHÀЮ\€N^NuNVÿü>®/9µþaXON^NuNVÿüJn m n0(°n n .¼¦¨N¹qrJn fB@``>® SW/.aþZXON^NuNVÿü yµþ0(N^NuNVÿü n0(N^NuNVÿü.¹µþaN^NuNVÿü nJhf0<ú`*`( n>¨SW/.aýúXO?0<ú�_"n2)ãA�AN^NuNVÿü>¼aa6N^NuNVÿü>®aa$N^NuNVÿøJnoÂN¹PJ@f¶.¹µþN¹gÄ3ü´Z yµþ=hÿþ09´J�y´P=@ÿüJnÿüf(0.°nÿþm>®ÿþar0.ÿþ‘n.¼¦±N¹q `R0.ÿþ�nÿü°nn.>®ÿþ0.ÿü‘W?.ÿüaˆTO0.ÿþ�nÿü‘n.¼¦ºN¹q `>®ap.¼¦ÃN¹q ``ÿ:N^NuNVÿî yµþ®*­Fâdˆ|¥Gê<%K¦aü8`ÿtGê<%Kzaû>*®&|.\Cóp%IœGù.\%K <*�œG5F�F¤aûÀNuaûp5jŒŽ>*Œ¾jd´>*Œ&jCóp%Ibaùèj"‹Gê%KvaúˆJ*¨g| *¨gB*¥Gê%K¦aûž*"¾*‹g *€6fB*6Gê%K˜aû2aühF@›*’FŽ*”Àâd|¥Gê%K¦aûP|™>*Œ&j¼p` j€Œ`ÿDNu * ²e*J*1c *¾*1b°*2âd<BG*²?N¹tBG*‡ã�Gìÿä<3pNû`*²N¹&Z`t<BG*²?N¹t``<BG*²?N¹t`L<BG*²?N¹t`8>*�¾j eaüâ>*�&|.\ª²pj�`<BG*²?N¹tNu * ³g j³²aÿ `PJ*Af j³²aÿ`>j´*´¾*Ae *AŸ*´`ì*Až*´G´J*´c*´| ²aþÐ`è * ³fB*NuJ*µWÇÎ*HGHâd| ³` *µÞ<0G³aÿfNu*¶èGµaÈ*¶Î<GµaºNu|· *;WÇGH*K*·DüÏGK*J|ÏGJ*I|ÏGIjI¶a jJ¶a˜jK¶a� *;f|:³aþâ| ³`| ³aþÐNu*3âd * ¸gz*žâdN * ¸gFj=¹J*=g, *¹f|<¹*RG¾*¹eB*| ³aþvJ*;caÿ&B*ž * ¸fB*j¸³aþR * ¸f|žNu *aºe *zºb*_º*ºNu *A»e *Z»b* »*»Nu|½BG*;ã�Gì%K¦aðL`€Nu*—Î*–G’B*™B*“B*œB*Ì *Ìb\BG*ÌB†<*Ú¼.J2Xg<ܼª 4hfB*’`(BG*ÌB†<ܼª 4hf*—Î*–G“B*’*Ìdœaý¢*—âdañD*’âdj*™Fâdœaóª*›FÎ*™âd*aï Gê%KjaíÀ*”âdaþD5jŒ�*šâej5jŒ�añ¶5j�Œ*™Î*›âdœaþb`–*5Ž*6âdaùl`aù8Fâd j ¸aõø`ê*”Î*šâd5j�Œ` *–âdaûNu`Êaì¬|Ô * Ôb8BG*ÔrpbÕ 2 pbg * Ôf |.Xaì^jÕXaìT*ÔdÀNu*.Fâdp`laî|?"Gê%Knaí *ÿ¨gLGù-Ô%KL*¨Î<ëRB†ݪL%jLœGê%K |¤aî*!ãFâdp`aìÞ`¬pNuBjÎBjÒ~âd0aí˜Gù-Ô%Kbaì(B9-¼Gù-°%KnaìŒBjÐ *ÿ¨g>*оjÎd jÐaì‚`â *ÿ¨f.JjÒf| ¥Gù-°%K¦aí¶*8Fâdºaë^`²>*ÐRG5GÎGù-Ô%KL*¨Î<ëRB†ݪL%jLœGêc%K |¤aí(Gêc%KœCê%I |¤aíaþšâdÿB*nB*"*lãFŽ*?âdþþ*8FâdJjÒf Gìÿ®%K^aêâaþjÒB*˜aü `þÌNu*†¾*:f*b¾*faí¸Nu*+RG+¾*ªep `BG*+B†<ܼ«rhºaô NuaÎ@ °< gôNuað *  gaíjNu`¢B*ÝBG*ݾ| b B†<*Üܼľ4hfp` *Ý`!dèÿÿNù#ß.T#ß.X y.X3è-ˆAè8Cù-Œ0<GØQÈÿü y.XAè€Cù-Ô0<ØQÈÿüKù,øMù,øOù,ø�üIù¸Eù&dN”B€B�2//NB _OïNÐB€"//NB _OïNÐCOPYRIGHT 1982DIGITAL RESEARCH0102821100654321Aù¸CùÚ‘ÉCûˆþ+I,Aù&dCùð‘ÉCûˆþ+I(+O<­`„`ì>*޾je**–FŽ*“âdBjŒ` jÿÿŽg aúf5j�Œaü>*Ž&jsp¼jŽ`6B*½<BgN¹t@¼` <BgN¹tÀ<@¼` N¹&V@¼*½âdT*<âd*ŸRGŸJWÆF½` * ¼WÇG½*½âd$aõzâdaõ°<fp`H|¥Bª¦a÷\*Gâd*¼*Bâd j¼ºaþ `*9âd j¼»aþ¨`*¼Nu`d*¿Þ*G¿Î|ÿB†<*Ú¼«rXÀܼ« 2hfBG*¿B†<ܼ«ª¾hp`*À¾*¾f*`B*pNuJ*c*SG¾<fp `¤p`ž~âd–J*c(*BG*B†<ܼ«rh¾**¾`faýú@¾°<fp`TJ*@c(j@¿aÿ$âd¤j@B*@*RGB*`ŠJ*>cj>¿aþöâdB*>|p `*¾NuaþØ@ *<âd>*޾jŒRÆÌ*™ ` * WÇ Nu`”*Áž<0¾< b `.*Áž<A¾<c| ¥Gê%K¦aõ–*Áž<AÞ< Nuaþd@Á@¸aüNa¬NuNVÿüaæé@ÿüaÞ€.ÿüÐ*Ä@ÄN^NuNVÿüaÜÀ|ÿáH=@ÿüaÐÀ|ÿ€nÿüN^NuB*Æaþ@Á~âd *:Ág8 *Áf*Æâeü|¥Gê%K¦aôöjÁ¸aûÄaýÊ@Á`ÀaýÀ@Áaÿé@ÃjÁÂaý¨@Áaþø�*ÃJ*Ãf|Æ`B*Æ*ÆÎ*6âd *:Ágÿj *Ágÿ`aýf@Á`â|:¸aûLj¸aûBjÁ¸aû8jÃÄaÿdÔpNu*¡BG*¡&jÖª p *? f|•Nu|? *¡¾*ÞdaÈ`òNuaÿ<@  *  WÇ *] WÆŽFâd* ž<AGß¾<c" *  f aÿ@ `Â|¥Bª¦aëÀ`² *S g *Q f0*+RGàaþÌ@ °<Wǰ< WÆŽFâeäaþ°@ `Laþ¦@ �<0@à°< c|à`.aþˆ@ �<0@Û°< bBG*àÎü BF*ÛÞFGà`ÒBG*ßB†<ܼ.ªàh *ßfÿ *àc|¥Bª¦aêü&jÖjà$`þäaþ@ Nu&jÖ| %|  B*¡ *#¡d * ¡fB* aþj`æ*R&jÖG&jÖj,$B*Ú *ÚbBG*ÚB†<ܼ.B2h*ÚdÜB*B*B*aýÂ~âd¸B*¡j ÜaýÎFâd, *¡dš ** f |Þaþ`aýÚaýP@ `Ä *: fþ *¡fN&jÖ+ž<ARG¾<bLaýJj Üaýbâd¶ *[ faýÀ*+&jÖ| %` *¡f|ÿâB*ã * ãbúB*á*áRGá¾<b&,Þ*âÎ|ÿÌ|ÿB…:&jÖÚ¼Ð4X¾3`gÊ *áf"&jÖjã%aü|°<[faý4*+`–*â*ãd„`„ *[ fþ¼aý `þ´J*¡gj|¡ *. f8aü,@ @ÜaürFâd" * ¡d> ** f | Þaü¬`Îaü€`È *[ faü®*+&jÖ|%&jÖB+ Nu(|$^N¹Ì.m<,O(|$^$|&dGù-Ô%KœCêª%I |€¤aè2J*ªWÇG�aæj°|"dGìåFžBG*Ÿ&jšB†3pŒü HF†p*Ÿd Nu&j B‡+á‡B†+Þ†á‡B†+Þ†%G¦%|B@ª|®JªªgB*®BG*® *¦,*ªN¹^€p$ *¦.*ªN¹ %@¦ *ª~ N¹V%@ª`¸j¤‘aþ�NuGê$%KzB*~5|€aüLGê+%KzB*~5|€aü6&j°5kŒaþ&j°k¶B*µ *µb>*¶âd$BG*µåOB†<ܼ,%th–Gê+%Kšaþ˜*¶âG¶*µdºGê+%K–Cê$%Išaþrj´‘aýâNu&j¸>+æOBF+Ì|z ënŽF7G&j¸+æGNu<N¹(0~ž&j¾<+înF<N¹(0&j¾>+áo7GNu*Þ<AGJaøæ|:JaøÜNuaâaøèNuGìýÜ%KLaøúBG*Â5G†5|dˆaü‚Nu&jÄ>*ßSNuGêÎ%K`aùì<.BG*?N¹t *Î~N¹VNu`:aù%jÒ°|ÿ´aþ\|:JaøXaøhNu&jÒB+&jÒ7jÖaÈNuGê%KÒGìýä%KRaøêaÿLGìýî%KLaøL&jÒB+<N¹(`R@&jÒ7@%jÒ¾aþÈaÿzGì�%KLaøGìþ%KLaø %jÒ¸aþtaÿTGìþ%KLa÷ð<N¹(`R@5@ÖaÿXGìþ(%KLa÷ÐGìR%KLa÷Ä< N¹(`åH5@Öaÿ,Gìþ0%KLa÷¤GìR%KLa÷˜<N¹(0RÀ|ÿïH5@ÖaþúGì�%KLa÷rGìþ8%KLa÷f<N¹(0~áo5GÖaþÌGì�%KLa÷DGìþL%KLa÷8B'N¹(`5@Öaþ¤Gì�%KLa÷GìþV%KLa÷<N¹(`5@ÖaþzGìþ`%KLaöòa÷dNua÷^ÿ¸%K^aæ&aåÌ*�âdGìÿÊ%K^aæaåèaçj@,aç@@~âd”B*KB*JB*IB*ŸB*Bj�BjŒB*•B*˜B*”|ž|–|—|š|þ*�âd|*Xaå^aå¢aåp|ÿ+ *ªbaçaå&Gêb%KÖaû*•âd|¥Gêb%K¦aç|aúÔ *= g *_ gaèDGê%KÖaúÒ * ‡fh *;gaè$aúªaúN|‡*•âd$Gê%KœCù-°%I |$¤aæØaø`|Gê%KœCêc%I |#¤aæ¶aö`Z *‡f8 * ;f0aú>aùâ|;Gêc%KœCê%I |#¤aævaõÂ` *‡c|¥Bª¦aæ’` *‡gB*–*šâdêaùÐ *, g *  g|¥Bª¦aæV *, WÇGš�*” *‡f|;J*Af|AJ*=f|= *;UÇ * ;RÆŽŽ*•âd|¥Bª¦aåø *;gB*— *;fB*—~¾<'b*B*¸aì¨*—dè` * ;f |¸aìŒ`aôÄañ *šâdÿ Gê%KÖaù`ÿj�ª`ýhNuERROR: $ - $$$$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$**NO MEMORY SPACE**$COPYING -$REQUIRES CP/M-86$CP/M-68K PIP VERSION 1.0$"6Jp`vŒ (7/31/82) CP/M-68K PIP VERS 1.0 DISK READ$DISK WRITE$VERIFY$INVALID DESTINATION$INVALID SOURCE$USER ABORTED$BAD PARAMETER$INVALID USE`#âNBÿÿNù#ß8f#ß8j y8j3è7šAè8Cù7ž0<GØQÈÿü y8jAè€Cù7æ0<ØQÈÿüKù7 Mù7 Où7 �üIùdEù(âN”B€B�2//NB _OïNÐB€"//NB _OïNÐCOPYRIGHT 1983DIGITAL RESEARCH0102821015-0272-654321AùdCùà‘ÉCûˆþ+I,Aù(âCùö‘ÉCûˆþ+I(+O<­&j>Jg&j>SJa´ª>`äNu<BgN¹tNu<BG*P?N¹tNu< BgN¹tNuaðâd<BgN¹tGìýÌ%KLa�aÿNNu| JaÿN| JaÿDaÈNuaæ%jRLaÿhNu< BgN¹tNu<BgN¹tNuað5@jV<BG*V?N¹tNu</*XN¹Š@Nu</*\N¹Š@Nu<BgN¹t@Nu<BgN¹aýØGìþr%KLaöØjÂaýÊa÷@aýºGìþz%KLaöºB*ØBG*ؾ|bB†<ܼÙB2h*ØdÞGù8n%K`a÷¦Gì%K\a÷f *ÿgJ*Î<ëÎ|ÿ&|8nspØ&|8n 3åpg*ØÎ<Î|ÿB†<ܼÙ¼ÿha÷*`®B*ØBG*ؾ|b*B†<*Ú¼Ù2Xâd5G†5|dˆaù’*ØdÊaö`Nua÷5@êB*ìJjêg"*ëâdjìpa÷¢aýâêê*ì`ØNuB*ôB*ö|ö*ö¾*òbT|ÿõB*ó *ób,BG*ôBF*ó&jî3pº2`gB*õ*ô*ódÌ*õâd*ö` *öd¢pNu`²%jü>&j> :g&j>SJaôîª>`à|:JaôÚNuaõ,@ùB*øaõrB*÷ *÷bn*÷åÎ|ÿB†<ܼÆGôh%Küa”Gìþˆ%KLaôÆ*ùÎ<åÞ*øÎ|ÿB†<ܼHGôh%Küaÿb*ø*ùäGùaõ*÷dŠNuGìþŽ%KRaõaôæGìþ˜%KRaôòGìþ®%KRaôæGìf%KLaôLGì­%KLaô@Gìþ¾%KRaôÂGìþÚ%KRaô¶Gìþö%KRaôªB*÷ *÷b|aô‚*÷åÎ|ÿB†<ܼÆGôh%Küaþ°Gìÿ%KLaóàB*ø * øb6| Jaó–*÷éÞ*øÎ|ÿB†<ܼHGôh%Küaþj*ødÂ*÷dÿ~aôNuB*úGìÆ%Kî|òaýÈ@÷JfJ*úfîp`ø*ú *÷faþF`À *÷faþÂ`° *÷faüF`  *÷faý:`�*÷SG÷éGøaöhFâe†BG*øB†<ܼHGôh%KîR NUMBER$INVALID FORMAT$HEX RECORD CHECKSUM$FILE NOT FOUND$START NOT FOUND$QUIT NOT FOUND$INVALID HEX DIGIT$CLOSE FILE$UNEXPECTED END OF HEX FILE$INVALID SEPARATOR$NO DIRECTORY SPACE$INVALID FORMAT WITH SPARCE FILE$$$‰$”$›$¯$¾$Ë$Ù$í$ü%%%/%>%P%[%v%ˆ%› =.:;,<> _[]OUTPRNLSTAXOCONAXIINPNULEOFNqNuNqNuNqNuNq _OïNÐä°�$$€ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååtNu</*`N¹ŠNu<BgN¹tNu<BgN¹tNu</*dN¹ŠNu< ?<ÿN¹tNu< BG*h?N¹tNu<#/*jN¹ŠNu<.BG*n?N¹tNuN¹(ž<N¹(0W@o°<d5|`<N¹(0W~áo5GNujpVaþÒaºNu%jrB%jvF*qSGq¾<ÿg&jF"jB‘ªBªF`ÔNu%jz>>*€SG5G€¾|ÿÿg&j>ª~ª>`ÞNu` *‚d BG*‚ª„p*‚NuBG*#&|7æspƒ&|7æ 3 pf*#`Ø *[ƒf*#B*‚Gê%Kz| ~5|€aÿhBG*#&|7æspƒ&|7æ 3pcr *!ƒe *,ƒg *:ƒg *[ƒg *=ƒfBG*#&|7æ¼p`*# */ƒg– *$ƒgŽ *]ƒg† *,ƒgÿ~jƒ„aÿ`ÿpJ*ƒg*#Nuaþî *=gp`aþÞ<ÿNuaþÔ * faþÈ * fp`<ÿNu|ÿŠJjˆgZB‡>*†ŽêˆG‹B‡>*†ŽêˆHG5G†B‡>*ˆŽü 5GˆJGVÆÌ*Šâd J*‹faûø`¶B*Š*‹Þ<0GJaûÎ` Nu5|'Ž|�JjŽg:*�BG*�B†<*ŒŒêކp$B‡>*ŒŽêŽHG5GŒB‡>*ŽŽü 5GŽ`ÀNu`8BG*“J2p$f*’âdJ*“g*‘âdaûh`j”JaûHB*’Nu|ÿ’|“*“SG“¾<ÿg.BG*“2p$Ü<0F”a˜ *“g *“fÌ|,”a€`ÂNuB*žB*Ÿ *ŸbXBG*Ÿ&j–"jš3pÜ1pÜ*ž†pBG*Ÿ&jšB†3pŒü |òaý.S@ø°<ÿgV|üù*÷SG÷¾<ÿg*ùåGù*øåGø`ÚaòÆÀ*ù€*ø@û@PaòÀaöFâdþú<ÿ`Gì�%KRaòþ<ÿNu*âd$Gê%K`aóvjnaóÜGê%K¸aø´` B*aù`5@Gê%K°j´a÷æ|KJañâNuaò†aù|RJañÎJ*g>**ìo5G`5j*âd|OJ`|WJañ˜Gìÿ %KLañÀ|ÿaÿNNuaòà5@B*Jjg"*âdjpaónaÿzâê*`ØañòNu` °añè* 0SG 0¾<ÿg |-Jañ$`äNuaø(| 6 * 6b4 * 6f |.JaðüBG* 6&j 23pÌ<FJaðâ* 6dÄNuBG* 8&j 3pãâd<ÿ`pNuj 9 8aÚâd j :Jað¤`að²Nu* ,âd"&j <>| ìo<Ì|ÿëNŽF5G @&j <>àO`&j <æÎ|ÿ5G @&j * B<€î.F D>* @* D&|8nÌ3p¼* DfP*3âd B*3Gìÿ%KRaðÊa÷Gìÿ,%KRaðºaðž&jSÂa÷|Kaïü%j 2aþ¶p`>* @* D&|8n�3p<ÿNu| J * Jb:BG* J&j F 3?pg &j F3pÌ<&j3pÊ<¼gp` * Jd¾<ÿNu|ÿ M| L* Lž* 'G L¾<TÆÌ* Mâd`BG* L&jsp (* ,âdBG* L&j3p�* (J* (g¶* KâdBG* L&jCóp%I *ßS`†Nu *ÿgTGù7æ%K*ëB†ݪ&j  d,|ÿaù &j B+%j daèj `ŠNuaøH@âdJ* .g,<N¹(`^@æH5@ À|°|fj Gù8n%KB‡>* ߪGù8n%KzB*~5j €aèŒ| '<N¹(`°|ÿRÇG ,âd| 'Bj B97Âü?7Îü?7ÐGì%K\aça÷ *ÿgHGù7æ%K>*Î<ëB†ݪ>%j>aø¨* -âdj `aøÌaùbaæÎaö¶`°*3FâdaåzJj fGìÿª%KRaæ6`*FâdaúaûHaó~`aþHNu5| TJ*g ~*ío5G T<%?* TN¹tNu`(Gì%KRaåàaì&Gì”%KLaåB%j XLaå8NuGìæ%Kî|òaït@ V°<faæTGì%K Xa®`N * Vf"aÿxJgGìÿº%KRaå|`0Gì%%K Xa„`$Gì�%KRaåbGìv%KRaåVGìÿÌ%KLaä¼NuGìÆ%Kî|òaîø@ \°<faëð` * \faí¢`aóNuB* B*|#B*2 *2bBG*2B2p$BG*2B2p+*2dÜ|2|ÿ3Bj4Bj6Bj8Bj:B*¼N¹†Î#À›º ¹ÿÿÿÿ›ºf.¼� N¹0–N¹+˜9›½gR¹›º 9›ºÐ¼#À�Ò0.SnJ@n.¼�"N¹qhN¹,f~3üÿÿ¢¬Sno¦ n 2GÓÉÓÉ 0˜ @ -fŽ n 2GÓÉÓÉ p˜(H€RG`ZRyŠd`hRyªj``Ry¤Þ`XRy‹Ô`PBy¢¬`H0å@HÀЮ @#ЉÔRG`20å@HÀЮ @#Њ6RG``ÿV`HÀ |‹Ør °˜WÉÿü h$NÐ`ÿV.¹‰Ô/<‰|N¹‰,XO.¼‰Ì/<‰|N¹‰,XO.¼‰|N¹‰HÀм‰|S€#À©.¹Š6/<‰ØN¹‰,XO.¼Š(/<‰ØN¹‰,XO¾FlþÈBWBg n 2GÓÉÓÉ/0˜N¹y6\O3À¤Ä0å@HÀЮ @#Т¾ n 2GÓÉÓÉ.°˜N¹0Ô>¼/<Š:N¹-4XO3À¤ÖN¹-Ž3ÀŸþ y©ЪzN¹-Ž3À¹¼ y©ФÜN¹-Ž3À®” y©ТÂN¹-Ž3ÀªP y©ПèJyŠdgn#ù›ºŸú3ü,ŸöBG¾|~nh0å@HÀм¤è2åAHÁÒ¼¤è"A"€0R@å@HÀм¤è @ ¼0å@HÀм¢Ä2åAHÁÒ¼¢Ä"A"€0R@å@HÀм¢Ä @ ¼TG`’BW/<�`N¹(îXO>¼/<‹´N¹(îXO>¼ KaÿFGù7Â%K Faþêâd&jÎ<¾*gaï¼`¤Nu>* éOB†<ܪ%F ܼ %F .* Þ¼%G .* Þ¼ %G Nu`>Gì�%KRaîþGìv%KRaîòGìf%KLaîXGìÿH%KLaîLGì­%KLaî@Nuañ´Fâdp`h *=faðtGìæ%Kî|òaøb@ .°<f |ÿ p`6J* .faÿz`&añhâdGìæ%Kî|òaø(@ /JfaÿR<ÿNuBG* Oã�Gìÿö<3pNû`&j +€ Gì%KLaíœ`T&j + Gì%%KLaí„`<&j +€ Gì5%KLaíl`$&j + GìB%KLaíT` Gì�%KRaíÔNuB* -Bj * -Fâd$>* ¾j daþn%j  Faý0@ -j `ÒNu5j j aþF j b.* Þ¼¾¹7šmGìÿP%KRaídaì’>* ãOB†<ܼ5ª hB* & * &bBG* &&j "j±pp* &dÜ>* ãO&j BS&j BSB†<ܼBrhNuNVÿô&j +dÈ| & * &b*BG* &&j3pÌ<€¼<€f &j 3€p* &dÎ&j+ Î<€¾<€g &j + &j Sj6>* ãO&jBF+B…:(ؼÜrH<-Eÿü=Fÿø=GÿôN¹(0&jÀ+ À|ÿïHÐnÿøB‡>.ÿô,Þ¼5€xB* Kaü`&j + d&j €j8N^Nu j c$5| Jj caë´Bj Bj $>* UG¾j $eà>* $ãOB†<ܼ5rh aü|%j >* $ãOB†<ܼ5rh aü\| & * &b¦BG* &&j3pÌ<F )BG*ED TRACKSACTIVE ACTIVE FILES: IS STAT 2.2READ ONLY DISK: D:=ROSET ATTRIBUTE: DISK STATUS : DSK: D:DSK:USER STATUS : USR: D:USR:IOBYTE ASSIGN: =, FREE SPACE: BAD DIRECTORY ON SPACE ALLOCATION CONFLICT:[SIZE] TOO MANY FILES SIZE RECS BYTES FCBS ATTRIBUTES NAMESYSDIRTOTAL:, FILE NOT FOUNDDISK RESET DENIEDD:=ROERROR-READ ONLY STATUS NOT ALLOWED2Jb????????????? DRIVE READ ONLY (RO)READ WRITE (RW)SYSTEM (SYS)DIRECTORY (DIR) DIRECTORY ENTRIESD:FILENAME.TYP USE: STAT INVALID ASSIGNMENT SET TO 128 BYTE RECORD[RO] [RW] [SYS] OR [DIR]CON:AXI:AXO:LST:DEV:VAL:USR:DSK:RO RW SYS DIR SIZE  'x''†'�'”'›'¢TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:`Úp NuNVÿøHîÿø(|(â$|2@pPLîÿøN^NuNVÿøHîÿø(|(â$|2@BG.2pLîÿøN^ _OïNÐNVÿøHîÿø(|(â$|2@BG.BF2páNBE2pÚF LîÿøN^ _OïNÐNVÿøHîÿø(|(â$|2@Gê%K</ N¹Š<aÿbRæ@LîÿøN^Nu/<�eN¹(îXO>¼/<�kN¹(îXO>¼/<‹ºN¹(îXO>¼/<�qN¹(îXO>¼/<�vN¹(îXO>¼ /<�zN¹(îXO>¼ /<��N¹(îXO>¼ /<�‡N¹(îXO>¼ /<�ŒN¹(îXO>¼ /<��N¹(îXO>¼/<‹ÀN¹(îXO`N¹. 3ü¬�B¹›ª3üªh3üÿÿŸæBy¨þBy¹ºN¹)v3À›¨JyŠdfÞ.¹Ÿú/<‹ÀN¹)BXO.¼¢ÄN¹'Ü#À¹ä.¹Ÿú/<‹´N¹)BXO.¼¢ÄN¹'Ü#ÀªZ.¹Ÿú/<‹ºN¹)BXO.¼¢ÄN¹'Ü#À–ê.¹Ÿú/<�–N¹)BXO.¼¢ÄN¹'Ü#À¤à.¹Ÿú/<�šN¹)BXO.¼¢ÄN¹'Ü#À›¾.¹Ÿú/<�ŸN¹)BXO.¼¢ÄN¹'Ü#ÀŸê.¹Ÿú/<�¤N¹)BXO.¼¢ÄN¹'Ü#ÀÁô.¹Ÿú/<�¨N¹)BXO.¼¢ÄN¹'Ü#ÀªF.¹Ÿú/<�­N¹)BXO.¼¢ÄN¹'Ü#Àªv.¹Ÿú/<�²N¹)BXO.¼¢ÄN¹'Ü#À¬†.¹Ÿú/<�¶N¹)BXO.¼¢ÄN¹'Ü#ÀÁø.¹Ÿú/<�»N¹)BXO.¼¢ÄN¹'Ü#À¢°.¹Ÿú/<�ÀN¹)BXO.¼¢ÄN¹'Ü#À¦ò.¹Ÿú/<�ÅN¹)BXO.¼¢ÄN¹'Ü#ÀªJ.¹Ÿú/<�ÉN¹)BXO.¼¢ÄN¹'Ü#À .¹Ÿú/<�ÎN¹)BXO.¼¢ÄN¹'Ü#À¢´.¹Ÿú/<�ÑN¹)BXO.¼¢ÄN¹'Ü#ÀÁü.¹Ÿú/<�ÕN¹)BXO.¼¢ÄN¹'Ü#À¤ä.¹Ÿú/<�ÚN¹)BXO.¼¢ÄN¹'Ü#À¹¾.¹Ÿú/<�ÞN¹)BXO.¼¢ÄN¹'Ü#À &&j 3pÊ<E *¼dZ>* $ãOB†<ܼ5rh ">* $ãOB†<*(ؼÚ¼5²HX>* $ãOB†<ܼ5ª "hj | &`* )¾* *c| &* &dÿTj $dþþ`þæNuB* QB* RN¹(°<0RÇG Pâd| Q* âd | R* QGì%KRaêšaðü* QÞ<GKaéâjÂaðê* âdGìÿ`%KRaêh`aêJGìÿl%KLaéÈ* Pâd Gìÿ†%KLaé´GìÿŽ%KLaé¨Bj >* ¾j d>* ãOB†<ܼ5rh aúÈaéð|q&j Cë%IrGù7Â%KvaëFB97Â* âd&Gù7Â%Kjaê¾Gù7ã%K |ÿ¤aîlaé>* ãOB†<ܼ5rh†5|'ˆaì¢aèâ>* ãOB†<ܼ>2hæOßj4>* ãOB†<ܼ>2hÎ|JGgj4&j 5S†5|'ˆaìP&j >ßj:|KJaèlaè|| 8a÷ˆ@ +&j &j 5S†5|èˆaìaèP| 8a÷\âdGìÿ–`Gìÿš%KLaèPaè,|RJaè| 8a÷.âd|OJ`|WJaçîaçþ* Pâdl* +âd |XJaçÐ`açÞ| 9|A :a÷| 9|1 :aöò| 9|2 :aöâ| 9|3 :aöÒ| 9|4 :aöÂaçŠ%j  2aöNj `ýô* QÞ<'G 0aöGìÿž%KRaèj RKaçZ5j:†5|'ˆaêü|KJaç"5j6†5|'ˆaêâNuBj >* ¾j dl5j aøvaçž%j  2aõÌGì”%KLaç* .SG Oaù@J* /gGìÿ¦%KLaæò* /SG Oÿÿÿÿÿÿÿ :°�$$€åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå© .¹Ÿú/<�ãN¹)BXO.¼¢ÄN¹'Ü#Àª^.¹Ÿú/<�èN¹)BXO.¼¢ÄN¹'Ü#ÀªR.¹Ÿú/<�îN¹)BXO.¼¢ÄN¹'Ü#À®–.¹Ÿú/<�òN¹)BXO.¼¢ÄN¹'Ü#À›¶.¹Ÿú/<�öN¹)BXO.¼¢ÄN¹'Ü#À¹è.¹Ÿú/<�úN¹)BXO.¼¢ÄN¹'Ü#À©a JŸLßÀN^NuNVHçJy›¨g09ªh°yŠbmBGBy¦èaÂ`Ü#ùªZ›²aJŸL߀N^NuNVÿüJ9¦êf>¼N¹+~`ÎN¹-à.¼¢ÄN¹'Ü#À¹à°¹Ÿúg>¼N¹+~` N¹(t.¼74N¹1< y�ÖfJ¹�Øm ¹�Øo >¼N¹+~`b 9�Ø€¼€"y¹à�i y,›¨g >¼ N¹+~`6.¼74N¹1< y�Ög >¼N¹+~` y¹à!y�ØN¹+´N^NuNVÿüJ9¦êf>¼N¹+~`rN¹-à.¼¤èN¹'Ü#À¹à°¹Ÿúg 9~¦êf#ùŸú¹àN¹(t`N¹(t y¹à(g>¼N¹+~` y¹àhÀ3ü©3ü–ö.¼74N¹1¼N¹+~`šJyŠdg y¹àh€ y¹à!y�Ø y¬„f y¹àh`X y¬„f y¹àh`@ y¬„f y¹àh`( y,›¨fN¹)v3À›¨°|rf y¹àhN¹+´N^NuNVÿü>¼aN^NuNVÿüaÊa (09¬�å@HÀм¤Æ @ ¹›ª3î¬�0.å@HÀм¤Æ @#Лª›¨f¾N¹)v3À›¨ yb›¨g yB›¨f83ü–ö3üb›¨Ry‹Ö3ù›¨›°N¹)v3À›¨N¹+ú`˜`d yw›¨g yW›¨f3ü–ö3üw›¨`²`< yl›¨g yL›¨f3ü–ö3ül›¨`Š`09›¨Àª$3ü.›¨ 9›²°¹®–f3ü–ö3ül›°`3üw›°3ü–öN^NuNVHç~09ªD`òTG>¼a Þ@BWaÞ@`ðJyªVgTG>¼aêÞ@`ØTG`Ò y¢®fR 9—f*9—`$ 9—f*y—-g*-`` `` 9›ªT€š€º¼n º¼ÿÿÿ€lvTG`p yl›°fp`pÞ@>¼abÞ@`PJyªVg yl›°fp`pÞ@>¼a<Þ@`, yŠffBWafÞ@``S@°|bå@0@ÑüŒ( PNÐ0JŸLß àN^NuNVHç0nÑÈ"|ªVJp˜g yl›°fp`p`>®a JŸL߀N^NuNVÿü0nÑÈ"|¬ŠJp˜g.0nÑÈ"|ªlJp˜f0nÑÈ"|›ÆJp˜gp`T`B@`N0nÑÈ"|›ÆJp˜f0nÑÈ"|ªlJp˜g(Jy¢¬g0.ã@HÀмªl @ Pfp``p`B@N^NuNVHçJ9¦êgô.¹Ÿú/<¦êN¹)BXO.¼¤èN¹'Ü#À¹à 9¹à°¹Ÿúg` 9~¦êf#ùŸú¹àN¹(t`B y¹à(g>¼N¹*öB¹¹à`ˆ y¹à(g>¼N¹*öB¹¹à`f`N¹(t y¹àh€ y¬�f y¹àh`$ y¬�f y¹àh` y¹àh y¹à!y›ª`B¹¹àJŸL߀a�3À›¨`a¦`J@gýܰ|gþl°|gþ¢`âJŸLß0àN^NuNVHç y'›¨g y"›¨fš09›¨Jy©f y�ÖfP y#�ÚfFH€>€avJ@g(a 3À›¨H€°y›¨g>¼aúaî3À›¨Jy©gp`2B@`.H€>€a0J@g 3ü�Ö#ü,�ØBy¬„N¹Š`ÔB@JŸL߀N^NuNVHç>.BFzB„aŠ3À›¨g€¾y›¨fat3À›¨¾y›¨gBE`` y ›¨f >¼aXBE`J á€29›¨HÁ€�(RF0°y–öm*a,3À›¨°Gfa3À›¨BE` 09›¨Àª$``ÿv¼y–ölá„RF`ò3ü�Ö#Ä�ØBy¬„Jy©fN¹Š0JŸLßðN^NuNVHç nf~`& nf~` nf~`.¼�Âa °a®B…a†3À›¨<9›¨¼|0m ¼|9nœ|0`&¼|am ¼|fnÜ|ÿ©`¼|Am ¼|FnÜ|ÿÉ``JFm¼nl 2ã 2HÁÐ�*```š#Å�Ø3ü�ÖBy¬„JŸLßàN^NuNVHç*n B…BG¾nlB n H€<R® ¼|0m ¼|9nœ|0JFm¼| mB@` ç€"ã�Ð�2HÁÐ�*RG`¸ n …pJŸLß àN^NuNVHça\å@HÀЮ#À¤Ø y¤Ø*h f*yŸú` y¤Ø P!yŸú (M&yŸú~JGg·Lg*m `èSG`î JŸLß8€N^NuNVHçBF*yŸúBG¾|l H€Ü@RG`ð0À|~JŸLß ÀN^NuNVÿü y¤Ø ¹Ÿú y¤ØJ¨f y¤Ø!yŸú¹Ÿú 9Ÿú°¹�Òe4>¼N¹†Î°¼ÿÿÿÿf.¼�ÚaÆa’`¹�ÒyN¹!b09¢®À–ùN¹*N¹+´N^NuNVÿü>¼a’N^NuNVÿü>¼a„N^NuNVÿü3ü–ö9›­g >¹¬�aÿb`N¹+´N^NuNVÿüN¹!ø y�Ög>¼N¹+~`†.¼¤èN¹'Ü#À¹à°¹ŸúfN¹(t` y¹à(g >¼N¹*ö y¹àh  y¹à(g y¹àhwÿ y,›¨fN¹)v3À›¨`N¹+´``ÿ`N^NuNVÿüN¹!ø y�Ög>¼N¹+~`´.¼¤èN¹'Ü#À¹à°¹ŸúfN¹(t`& y¹à(g y¹à(f >¼N¹*ö y¹àhˆ.¹¹àaZ y,›¨f:N¹)v3À›¨N¹!ø y�Ög >¼N¹+~`$ 9�Ø"y¹à3@` y¹à1|N¹+´N^NuNVÿü y¨þm.¼�N¹0–N¹,f 9›Â�¼¹ìä€"n3@ y›Â ®X¹›ÂRy¨þN^NuNVHçB¹¹àN¹!bJy›¨ga ª09¢®À–ùN¹*BG¾|l BWN¹*dRG`îJyŠdgN¹/L.¼�N¹qhN¹,fN¹)v3À›¨g .¼�9N¹0–09¬�å@HÀм¤Æ @ ¹›ªN¹f¢Jy‹ÔfN¹9ÈN¹=$JŸLßÀN^NuNVÿüaòN¹!bByªp.¼74N¹1< y�Ög >¼N¹+~`\Jy¬„g >¼ N¹+~`HJyªpgRy‹Ôa T09¢®À–ùN¹*09–öHÀ//9�ØN¹ˆ´POѹ›ªN¹+´N^NuNVHç y–öo>9›­g4*y›²#ù©›²N¹!b09¢®À–ùN¹*#Í›²R¹›ªJŸLß N^NuNVÿüa >¹–öaN^NuNVÿüaN^NuNVHçBGBy‹²RyŠfByŠj3ù‹²ª" y'›¨g y"›¨fBGN¹!ø y¢®f yªDf yBŠhfaÎa< y�Öf" y,�ÚfJGg >¼N¹*öRGN¹+ú`BG ¹ �Øf y�Ög y ›¨fN¹)v3À›¨``ÿVJyŠjgH yŠff*JyªXf"Jy¬ŒfJyªnfJy›Èf yªdm#ùª^—#ùª^›²JGg >¼N¹*öJŸL߀N^NuNVHç y�ÖfV.¼¤èN¹'Ü*@»ùŸúg@-g8 ­m.#ù¦ò›²N¹!ba&3ü�Ö#ü,�Øa3ü�ÖJŸLß N^NuNVHçBy‹² y�ÖfZ y,�ÚfJyª&fRyŠfJy›®fRy›® y �Úf y ›¨gN¹)v3À›¨`è`d y �ÚgX`3ü‹² yÈ¢®m.¼�]N¹0–N¹+˜09�Ö"y©€ y�Öf‚.¼¤èN¹'Ü*@ y©!M»ùŸúfN¹(tRy¢®\¹©-f(0y›®ÑÈ"|›Æ00˜29›®ãAHÁÒ¼›Æ"ARQ` -29›®ãAHÁÒ¼ªb"A2€`š`l y�ÖfbJy�Øg" yÿÿ�Øg09›®ã@HÀмªl @0¼`,09›®ã@HÀмªl @JPf09›®ã@HÀмªl @0¼ yŠffa4 y©!y�Ø09¬„"y©@Ry¢®\¹©JŸLß €N^NuNVHç y,›¨fìJyªVgâ.9�Ø y¢®g* y¢®fÆ 9—fº y-—f® D€.*y—»ùª^f@Jy‹Ög y–öf†¾¼ÿÿÿ€m"¾¼ndŸöN^NuNVHç.¹Ÿú/.a@XO.¼¢ÄaþÐ*@»ùŸúg>¼aØav`aÿLm€€0n +HJŸLß N^NuNVHç *n(n ~Jg JGgÝSG`òJGgBSG`öJŸLß0€N^NuNVHçJ9ª$g9ª$H‡B9ª$`TJyŸæn4>¼/<�ä?9¤ÄN¹z|\O3ÀŸæJyŸænB@`H#ü�äÁð yÁðH€>R¹ÁðSyŸæ¾|g¦¾| fJy¹ºfRyªh`¾| f~ 0JŸL߀N^NuNVHçJ9–øgal*|–ø9–ùH‡Î|ÿ0SGJ@gBF¼|l>�aRF`ò`æJŸLß ÀN^NuNVHç 9�ܰ¼¬”e <®”°¹�Üd.¼�ñN¹qhaÐ <®”°¹�Üb6>¼/<¬”?9ŸþN¹~‚\O°|g.¼‘ aÊa–#ü¬”�Ü y�Ü0®T¹�ÜJŸL߀N^NuNVHçJy¹ºg*0nSHÑÈÑÈ"|Šì.°˜?9Ÿø/<‘&N¹qh\O`> y ›¨f >9ªhSG`>9ªh0nSHÑÈÑÈ"|Šì.°˜?/<‘1N¹qh\ORy¬’JŸL߀N^NuNVÿü>®aÿnJy¹ºfa N^NuNVÿü.¼‘;aòRy¬’a¸N^NuNVÿü y ›¨gJy›¨g aýª3À›¨`âaýž3À›¨ y ›¨f aýŠ3À›¨`êN^NuNVÿü y ›¨f aýl3À›¨`êN^NuNVÿüJy›¨g, y ›¨f aýF3À›¨`ê y ›¨f aý03À›¨aÈN^NuNVÿü3üÿÿ¬’aN^NuNVÿü y©¹ªz.¼‰|N¹„Þ y©¹¤Ü.¼‰|N¹„Þ y©¹¢Â.¼‰|N¹„Þ y©¹Ÿè.¼‰|N¹„Þ yÿÿ¬’gJy�lg >¼ N¹ðN¹!bByŠfaô09¢®À–ùN¹*09ŠfÁîѹ›ªN^NuNVHç y¬�fJ¹›ªgRy‹Ô.¼74N¹1<09¬„°y¬�gJy¬„g >¼N¹+~`N 9�ذ¹›ªl >¼(N¹+~`4#ù¹ä›²N¹!baô09¢®À–ùN¹*#ù�Ø›ªaJŸL߀N^NuNVHçByªVByªXBy¬ŠBy¬ŒByªlByªnBy›ÆBy›ÈByªbByªdByª&ByŠfBy›®By‹Ö y ›¨fN¹)v3À›¨`è`æ y ›¨f6 y ›¨fN¹)v3À›¨`è y ›¨gº09›¨Àª$3ü ›¨Jy›¨gR y*›¨f6N¹)v3À›¨ y=›¨fN¹)v3À›¨aþlN¹+´By¦è`ÿ 3üw›°N¹+ú3ü‹ÊN¹!øBy‹Ê y:›¨g y=›¨f´ y�Ög>¼N¹*öB9¦ê`.(yŸú*|¦ê»ü¦òd:Ü`ô y:›¨f N¹)v3À›¨N¹,Jy›¨g€ y*›¨fN¹+´`ÞN¹!ø y:›¨g y=›¨f*J9¦êgN¹1aD.¹Ÿú/<‹ÌN¹)BXO`ÿR`B9¦êN¹+ú y=›¨gÿ8 y�Öf y=�Úfa÷,`ô y�Ög`.¼¢ÄN¹'Ü#À›²°¹Ÿúf>¼N¹+~N¹+´`ºaÀ y›²(g" y›² (>0å@HÀмŠl @&PN“`† y›² (3ÀŠh y›²0(À|3ÀªDa`N¹!bJyªDgab`N¹+´ y›²0(À|3ÀªDa6>Ç–ÿ09¢®À–ùN¹*0HÀй›ª#À›ªJŸLß8€N^NuNVÿü y.#ùªR—#ùªR›²RyŠj`XJ‡o¾¼o`J»ù¤àg»ù›¾f#ùŸê—#ùŸê›²`$»ùÁôg»ùªFf#ùªv—#ùªv›²JŸLß €N^NuNVÿüB9–ø y ›¨g0yªh#È–ú`09ªhS@HÀ#À–úü–þ#ù¹à—ü—09–öÀ—#ù›²—ü— 09¬�À— #ù›ª— 3ü¢®#ü—©N^NuNVÿ¬Hç y'›¨g y"›¨f aJ@fò~BFKîÿ¬ y ›¨m z¾|f y.›¨fz`V yA›¨m yZ›¨o( ya›¨m yz›¨o y~›¨g y_›¨fz` y0›¨m y9›¨nBE0ÐGã@HÀм�n @:º|g>09›¨ÀRFa²3À›¨`ÿX0`"B3ü�Ö.¹Ÿú/—ÿÿÿ¬aRXO.¼¤èaà(@ .~ÿ¬gbJy‹ÊfZ0,À|P°|@fL3ü�Ö#ì�Ø,g 3ü¬„`*,g 3ü¬„`,g 3ü¬„`By¬„`¢>†/—ÿÿÿ¬/Y—aôPOJ@f >¼ajB®ÿü#îÿü�Ø3ü�ÖBy¬„`d09›¨`ÐJyª"g Byª"`¨Ryªp3ü�Ö3ù¬�¬„#ù›ª�Ø`®>¼a¾`>¼a²` >¼a¦`þ0y›®ÑÈ"|ªV00˜29›®ãAHÁÒ¼ªV"ARQ`40y›®ÑÈ"|¬Š00˜29›®ãAHÁÒ¼¬Š"ARQRyª&`Syª&3ü�Ö0y›¨#È�Ø`HÀ |�€r°˜WÉÿü hNÐ y ›¨g aÐ3À›¨ ¹<�Øf y<›¨f a°3À›¨ ¹>�Øf y>›¨f  kâBWN¹kâJy¬’o$3ü”f>¹¬’/<‘GN¹qhXOBWN¹kâJy¬’fBW`>¼N¹x$N^NuNVHçJn g>¼?<¶/.N¹yÞ\O>`>¼?. /.N¹y6\O>JGl.¼‘Taaþæ0JŸL߀N^NuNVHç y©¹�ÀR9�À>¼?<€/<‰|N¹yÞ\O<JFm0`.¼‘oaÆaþ’JŸLß ÀN^NuNVHç *yŸú(|¦ê¹ü¦òd:ÔB\`òJŸLß0€N^NuNVÿüHç>¼Bg/<‰ØN¹y6\O>JGl.¼‰Ø/<‘ŽN¹qhXOaþ">¼/<¤è?N¹z|\O°|g`Ì>¼/<¢Ä?N¹z|\O°|f²>¼/Y—?N¹z|\O°|fš .ÿü>€/9›º?N¹z|\O<0HÀ".ÿü°�g`ÿt0HÀ�üH@J@fÿd0HÀй›º#ÀŸú&y›ºS‹*|¤è»ü¦èd J•g Ñ•X�`ì*|¢Ä»ü¤Äd J•g Ñ•X�`ì(y›º¹ùŸúdJ¬ g Ѭ Ùü`ä>‡N¹xVJŸLß8ÀN^NuNVÿüHç>¼?<¤/<‰ØN¹yÞ\O>JGl.¼‰Ø/<‘®N¹qhXO`&y›ºS‹*|¤è»ü¦èd J•g ‘•X�`ì*|¢Ä»ü¤Äd J•g ‘•X�`ì(y›º¹ùŸúdJ¬ g ‘¬ Ùü`ä>¼/<¤è?N¹~‚\O°|g.¼‰Ø/<‘ÄN¹qhXO`v>¼/<¢Ä?N¹~‚\O°|fÐ 9Ÿú�¹›º<0HÀ�üH@J@g`²0F-Hÿü>¼/Y—?N¹~‚\O°|f”>†/9›º?N¹~‚\O°Ffÿ~>‡N¹xVJŸLß8ÀN^NuNVÿüBWN¹kâ3ü”fJyªjfN¹k„.®?9ªh/<‘äN¹qh\ON^NuNVHç *n(|N^NuNVÿü0.°n f0.`"JngJn f 0.Ðn ` >¼N¹*öB@N^NuNVÿü n f >¼N¹*ö0.°n fB@`Jn f 0.Ðn ` >¼N¹*öB@N^NuNVÿüJnfJn g >¼N¹*öB@N^NuNVÿüJyªNg >¼$N¹*öRyªN n3èªf3ü‘ö3ü�ÖB¹�ØN^NuNVHç?#ü¬”�ÜBy”jB‡B¹ŸòB9–ù>¹ŸþN¹xV y©¹ªz>¼?</<‰|N¹y6\O3ÀŸþJyŸþlN¹+˜N¹dDJ@g|#ù—›² y›²(fH y›²0(À|3ÀªD9–ÿH€3À¢¸ yªDf y¢¸g 9›²°¹›¶f9— H€3À¬�°|fê9–ùH€3ÀŸäyÿŸä09ŸäÁüм–ø#ÀÁì9—H€3À–ö3ü›®#ü—© 9— �‡#À›ª.¼7êN¹1< 9›ªT€‘¹�Ø y�ÖfjJyªNf`Jy¬„gV y ªDfXBE ¹ÿÿÿ€�Øm ¹�Øn :9¢¸UE`" 9�ذ¼ÿÿ€m ¹ÿ�Øn:9¢¸YEJEgþ–#ù¹è—`0 ¹ÿÿÿ€�Øm ¹�Øn ¹�Øfz`z``þZ>…aä0HÀÞ€09–ÿ’Á–ÿJ9–ÿfüÿÿ–ÿ>¼B§?9ŸþN¹ƒn\O, 9Ÿò9–ùH�Ãü��&BW/?9ŸþN¹ƒn\OJ€l.¼’ÎN¹0–N¹+˜>¼/<–ø?9ŸþN¹~‚\O°|g.¼’åN¹0–N¹+˜BW/?9ŸþN¹ƒn\O` 9›²°¹ªZfŸ¹¤Î``ý|JŸLßøN^NuNVHç >.*|¤è»ü¦äd@Ií @J�ý¾N^NuNVHçJ9–øgN¹+˜ y›²0(À|3ÀªDB¹�ØBy¬„3ü‹œ y›² (3À“¶3ü“À#ü“¸¢º#ü“Ÿî yŸäo>JyªDf >¼ N¹*ö`* yªDoN¹+˜`0yªDÑÈÑÈ"|’þ 0˜ @N�N¹eàJ@f >¼N¹*ö>¼N¹i09‹œHÀѹ›ª09¢¸°y‹œg >¼&N¹*öN¹mlJŸLßÀN^NuNVÿü.¼7êN¹1¼N¹*öB¹�ØBy¬„ y¢¸fN 9�ذ¼ÿÿ€m ¹ÿ�Øo >¼N¹*öTy‹œ 9�Ø"y¢º2€T¹¢º yŸîBPT¹Ÿî`2 ¹�Øn ¹ÿÿÿ€�Øl >¼N¹*ö09�ÚÀ|ÿ�y“¶N^NuNVHçaJ@fp*|“f.¼ a´J@gZ 9›²°¹ªJg 9›²°¹¢´f.¼ a°J@g >¼N¹*ö.¼ 0y–öÑÈ?5ˆ?9 a®XO``.¼ aLJ@g8.¼ aôJ@g*.¼ 0y–öÑÈ?5ˆW?9 ahXO`À`¼.¼ a,J@gš 9›²°¹¤àf #ùÁø›²`@ 9›²°¹¬†f #ù¢°›²`& 9›²°¹Áôf #ù¦ò›²` >¼N¹*ö`P y›²0(À|3ÀªD y–öf >¼"N¹*ö`&y *|“„`þð`a²J@f >¼N¹*öJŸLß N^NuNVÿü.®a>J@g.®abJ@gp`B@N^NuNVÿü.®a†J@g.®a9�Ú>‡al8JDgÜ3ü‘ú¸|f"Ry‘øRy‘ôRF\�:¹‘î+y‘ð`ÿv¸|f->‡aè°DmRE\Œ8•)mSF]�`à`RF\�:¹‘î+y‘ð`þü`*By‘úBy‘øRE\Œ8¹‘î)y‘ð3üª"`þÐ`þÌ>JGmRE\Œ8•)m]�SG`êº|mÐKîÿ@]�BF0W@¼@n¾\� g® -g¤ - fš.�a~-@ÿü69‘ö.�\—al-@ÿø=y‘öÿö -=@ÿô0.ÿô` .ÿøÑ®ÿü>®ÿö?a¤TO6` .ÿø‘®ÿü>®ÿö?aÄTO6`ð/.ÿø/Y—N¹ˆzPO>®ÿö?aæTO6`Î/.ÿø/Y—N¹ˆšPO>®ÿö?aÄTO6`¬ .ÿøÁ®ÿü>®ÿö?aªTO6`’ .ÿø�®ÿü>®ÿö?a�TO6`x2.ÿú0.ÿüã -@ÿü>®ÿö?apTO6`X2.ÿú0.ÿüâ -@ÿü>®ÿö?aRTO6`:>¼N¹*öB¹�Ø3ü�ÖBy¬„`ò`HÀ |‘ür°˜WÉÿü h NÐ 2ÃüÐ�*@Ûüÿÿÿ@¼+nÿüCIí >RG¾El\�\Œ:”+lRG`ìUE`þ2RF`þ< .ÿ@f* n?ÿDf">¼N¹*öBy¬„B¹�Ø3ü�Ö`` .ÿFfÖ .ÿ@gÎ n?g0(T,g,g ,°¹›ªo0HÀ‘¬¹Õg(l `ÒP�`¸JŸLß0€N^NuNVHç #ü¬”�ÜBy”j3ù¤Ö›Ê3ü›Ì#ü›Ò›Î3ù¹¼ $3ü &#ü , (3ù®”¦ö3ü¦ø#ü¦þ¦ú3ùªPª|3üª~#üª„ª€3ü`ª(9¤ÑgR¹¤Î#ù¤Îª*9¤ÍgR¹¤Ê#ù¤Êª.#ù¤Òª2*|ª(BG¾|l.¼›Ê?N¹w¢TORG`æB¹¤ÆB¹¤ÊB¹¤ÎB¹¤ÒB¹›ª3ü¬�3ü¹º>¹¤ÄN¹xVBWBg/9¢¾N¹y6\O3À¤ÄJy¤Äl.¹¢¾/<”(N¹qhXON¹+˜>¹ŸþN¹xV y©¹ªzBW/<‰|N¹-4XO3ÀŸþ3ü“ÊN¹)v3À›¨N¹dDJ@gÆ 9–ú3ÀŸø09Ÿø°y“ÌmBG#ù—›²9–ùH€3ÀŸäyÿŸä09ŸäÁüм–ø#ÀÁì9—H€3À–ö9–ÿH€3À¢¸3ü›®#ü—©By“Î3ü‹œ y›²(g y›² (>0å@HÀÐ¼Š¬ @(PN”`aV`ÿ2JŸLß0€N^NuNVHç09¬�å@HÀм¤Æ @ ¹›ª9¤Ñg3ü¬�BWBgN¹lFTOR¹¤Î9¤Íg3ü¬�BWBgN¹lFTOR¹¤ÊB¹�ØBy¬„>¼ N¹e¢BWN¹iN¹m¦N¹eü.¼ $N¹wÞN¹mà.¼›ÊN¹wÞ~BW??9¤ÖN¹ƒ2XOJ@m>¼/<“Ð?9¤ÖN¹~‚\O°|g .¼”BN¹0–N¹,fJŸL߀N^NuNVÿüBWN¹i y¬�g y¬�f^.¼7êN¹1< y�Ög >¼ N¹ n>Î|8¾|m ¾|8np`B@JŸL߀N^NuNVHç n>Î|8¾|8f n0À|°|np``B@`pJŸL߀N^NuNVÿü n0À|8°|gp`B@N^NuNVHç n>Î|8¾|g ¾|(g¾|0fp`¾|8f n0À|°|np`B@JŸL߀N^NuNVÿü>¼,/9©N¹dXOJ@g \¹©p`B@N^NuNVHç*nJUm Ulp`B@JŸLß N^NuNVHç*n Um Unp`B@JŸLß N^NuNVHç*n 0.r ã`�y“¶0. �y“¶0�y“¶.�a JŸLß ÀN^NuNVHç*n0æ@À|``4.�a8`* ­n ­ÿÿÿ€l >¼#N¹*ö>-Î|ÿ0- r ã`Ž@0-r ã`Ž@Jmg >¼N¹*ö y¢º0‡T¹¢º yŸîBPT¹ŸîTy‹œ`º0À|`~.�a*Bm.�aª`œJmg,0-°y¬�g >¼N¹*ö09‹œHÀй›ª‘­Bm0À|°|gÿ4.�a``T.�aR y–öf .�aÀBm.�a@`4`°|bå@0@Ñü“Ô PNÐ`°|gþä°|gþæ°|gÿN`þÌJŸLß ÀN^NuNVHç*n y¢º0­T¹¢ºJmg mÿÿg >¼)N¹*ö mÿÿ g0- ç@€|"yŸî2€T¹Ÿî` yŸî0­T¹ŸîTy‹œJŸLß N^NuNVÿü y¢º"n0©T¹¢º yŸî0¼T¹ŸîTy‹œN^NuNVÿüa¼J@f² y“¶gJy“¶g y “¶fb>¼/< apXOJ@f>¼/< a\XOJ@g: y  f3ü–ö0y–öÑÈ"|“p00˜€|<�yÿJg> n+ÿJg6 n-ÿJf.Ž—ÿÿÿ@a€D€-@ÿB``ÿ|ÿ@BFREKîÿ@IîÿF`ÿV.ÿ@H€3À�Ö y�Öf.Ž—ÿÿÿ@a<#À�Ø`#îÿB�Ø y�Öf y�Ø(f`ÿF y�Öfx y�Ø0(À|ff y�Ø(g 3ü¬„`6 y�Ø(g 3ü¬„` y�Ø(g 3ü¬„`By¬„ y�Ø#è�Ø3ü�Ö`8 y�Öf" y�Ø(g.¹�Øap3ü¬„` .ÿAH€3À¬„JŸLß0øN^NuNVÿü0.`$p`8p`4Jy‘úgp`(`$Jy‘ôgp``HÀ |’Dr °˜WÉÿü h,NÐB@N^NuNVHç *n f-H€3À‘ö -`„ g`&(m,g .ŒaÆB€`d,g,g>¼N¹*öBy‘öB€`@,g 3ü‘ö`*,g 3ü‘ö`,g 3ü‘ö`By‘ö ,JŸLß0N^NuNVÿüJy¦ègN¹!øJy¦èf.>¹›¨a°|f3ü¦è3ü�Ö0y›¨#È�Ø`TBy¦èN¹!ø y�Öf(.¼¤èN¹'Ü#À�Ø 9�ذ¹ŸúfN¹(t` y�Öf 09¬„À‘ï09�ÖÀ‘î#ù�Ø‘ðN^NuNVÿü 9©°¹Áìf*3ü�Ö#ü �Ø09�ÖÀ‘î#ù�Ø‘ð`: y©H€3À�Ö y©#è�Ø y©3Бî#ù�Ø‘ð\¹©N^NuNVHç>.¾|0m ¾|9nB@`^¾|am ¾|znB@`L¾|Am ¾|ZnB@`<¾|_g0¾|~g*¾|*g$¾|.g¾|@g¾|$g¾|%g ¾|'g¾|"fB@`pJŸL߀*ö`Z09–öHÀ//<�ØN¹ˆšPOJ¹�ØgBWBgN¹lFTOR¹›ªS¹�Ø`Þ`09–öHÀ//9—N¹ˆ´POѹ›ªN^NuNVÿü09¬�å@HÀм¤Æ @ ¹›ª3ü¬�#ù¤Ê›ªBWN¹iN^NuNVÿü09¬�å@HÀм¤Æ @ ¹›ª3ü¬�#ù¤Î›ªBWN¹iN^NuNVÿü09¬�å@HÀм¤Æ @ ¹›ª3ü¬�#ù¤Ò›ªBWN¹iN^NuNVÿü9›­g& y¬�g y¬�f BWBgN¹lFTOR¹›ªBWN¹iN^NuNVÿø y¬�g y¬�f@ 9—�¹›ª-@ÿüBy“¶>¼N¹iJ®ÿüoBWBgN¹lFTOR¹›ªS®ÿü`â`#ù—›ªBWN¹iN^NuNVHçBEBFBG.¼7êN¹1< 9©°¹Áìd]¹© y�Ög y¬„g>¼ N¹*öB¹�ØBy¬„ y¬„f09ªfç@€|3À¬„ nf” ¹ÿÿÿ€�Øm ¹�ØlJy¬„g>¼N¹*öB¹�ØBy¬„JEf* 9�Ø2ãAHÁÒ¼“¶"A€BW?9�ÚN¹lFTORE`( 9�Ø2FÓÉÓü“¶@RFBEBW?9�ÚN¹lFTO`6`  nfj0ã@HÀм“¶ @0¹�ÚRF>¹¬„?9�ÚN¹lÜTO¼|o80ã@3À‹œ0RGJ@g >¼N¹i` >¼N¹i09‹œHÀѹ›ªBF`,0ã@HÀм“¶ @0¹�ØRF>¼?9�ØN¹lÜTO`ÿl>¼N¹e¢J@gb\¹©N¹eàJ@gNJEg0FÑÈÑü“¶B(RFJFg40ã@�E3À‹œJGg >¼N¹i` >¼N¹i09‹œHÀѹ›ª``ýòJŸLßàN^NuNVÿü>¹–öaýÌN^NuNVÿüBWa “¶.¼ aþÐ`2 y< g >¼ N¹*ö`.¼ aû¨J@f >¼N¹*ö`a6N^NuNVÿüBWN¹_ aü~J@f>¼ N¹*öp` >¼N¹_ B@N^NuNVÿü0y–öÑÈ"|“p00˜€y �y“¶ y–öf.¼ aþ¦By .¼ a.¼ aþ.¼ aü¶N^NuNVHç*n y–öfJmg mÿÿg >¼*N¹*ö`< y–öf2Jmg mÿÿg >¼+N¹*ö mÿn mÿn >¼+N¹*öJŸLß N^NuNVÿü y< gB@`â.¼ aúpJ@fB@`Î 9›²°¹¤àf#ù›¾›²`Š 9›²°¹ªJf#ù ›²`n 9›²°¹¢´f #ùÁü›²`R 9›²°¹Áôf #ùªF›²`8 9›²°¹¬†f #ù¤ä›²` 9›²°¹¹¾f #ù© ›²`B@`( y›²3è“¶ y›²0(À|3ÀªDaþ>pN^NuNVHçaýúJ@fp>¼/< aÊXOJ@gf3üDÀ“¶.¼ aÚJ@g >¼N¹*ö y–ög >¼"N¹*ö09 �y“¶.¼ aù¶J@f >¼ N¹*ö.¼ aú¼`ö>¼/< aPXOJ@g 3üFÀ“¶`„>¼/< a2XOJ@gb.¼ aJJ@g >¼N¹*ö09 €|@À3À“¶.¼ aø¦J@f >¼ N¹*ö.¼ aú< y–ög >¼"N¹*ö`b>¼/< a¼XOJ@gb~<9 .¼ aÌJ@g >¼N¹*ö y–ög >¼"N¹*ö¼|m¼|o >¼!N¹*ö02Â|€A€|N`3À“¶`ì>¼/< aFXOJ@g".¼ a^J@g >¼N¹  3Ç `ª>¼N¹*öJŸL߀N^NuNVÿüBWN¹_  yªDf.J¹ m ¹ o >¼N¹*ö09  �y“¶`œ yNX“¶f.¼ að¦J@f >¼N¹*ö`f.¼ aðfJ@f >¼N¹*ö yH“¶f0 y–öf >¼"N¹*ö09–öã@HÀм“¢ @0�y“¶` y–ög >¼"N¹*ö09 À|�y“¶N^NuNVHçaó4J@f‚.¼ aðJ@f >¼!N¹*ö yAÀ“¶f><À.¼ aï¼N¹*ö`09–öã@HÀм“„ @> y–öf >¼"N¹*ö.¼ ??9 Waï´XOJŸL߀N^NuNVÿü yªDf0.¼ N¹_l3ü< #ü By  >¼N¹_ ` aòbJ@f¨ y< g >¼N¹*öJ¹ o ¹ o >¼N¹*ö.¼ aîJ@f >¼N¹*ö y–öf09 À|8°|f >¼"N¹*ö0y–öÑÈ"|“f00˜29  Â|t åa€A€y �y“¶.¼ aîôN^NuNVHçBGN¹cp°|ÿÿg&]¹©.¼“èaö:aîJ@f >¼ N¹*ö`><BWN¹_ JGg aíîJ@f >¼ N¹*ö.¼”a´:`.¼ aízJ@g>…aX:<9 Ì|8.¼ aíZJ@f¼|g¼| g >¼N¹*ö y–öf >¼"N¹*ö y–öfy@“¶0€y �y“¶ y¢º0…T¹¢º yŸîBPT¹ŸîTy‹œ.¼ aíàJŸLßàN^NuNVHç*nBEN¹cp>¾|ÿÿg†>¼-/9©N¹dXOJ@g:\¹©N¹cp<¼|ÿÿf >¼(N¹*ö 9�ܰ¼¬”e <®”°¹�Üd(.¼®”/<¬”/9�Ü/<”“N¹qhÞü N¹,fJy”jnJ>¼/<¬”?9ŸþN¹z|\O°|g.¹Ÿò/<”ÂN¹qhXON¹+˜#ü¬”�Ü3ü”j y�Ü>Sy”jT¹ŸòT¹�Ü0JŸL߀N^NuNVÿü 9©°¹Áìep`$>¼,/9©aþJXOJ@f>®N¹*öB@`pN^NuNVÿü 9©°¹Áìep`B@N^NuNVHç B¹“ÐJy¨þg:Jyªjg3ü7Âa`.¼”ÝN¹qh*|¹ìBG¾y¨þl .�a¾RG`îJyªjg3ü7Âa&.¼”ñN¹qhRyÂ(y›º¹ùŸúd0,À|€f.ŒavÙü`àJŸLß0€N^NuNVHç *|¤è»ü¦ädBIí @J�g2(T,fJy¤Þf,glˆ.ŒN¹йÕg(l `ÐP�`¶JŸLß0N^NuNVHç*nJyªjf-f .�al`^(MJyªjgÈ-f¾aB-fRy¬’.Œ/<• N¹qhXO`˜-g.Œ/<•N¹qhXO`|.Œ/<•$N¹qhXO>¼?-atTO>¼?-afTO-g.¼•+N¹qh`8-g.¼•3N¹qh`"-g.¼•;N¹qh` .¼•BN¹qh¹“Ð&MBG¾|l.¼›Ê?N¹w¢TORG`æ.¼›Ê?-N¹w¢TO-g$.¼›ÊBgN¹w¢TO.¼›Ê?-N¹w¢TO`$.¼›Ê?-N¹w¢TO.¼›Ê?-N¹w¢TOJŸLß8€N^NuNVÿüRy¬’Jy�lf4 y2Âo3ü7ÂaÎ.¼•IN¹qhRyÂRy�lBy”da¬.®/<•c*öBG<9 `ˆ:9“¶09–öã@HÀм“z @0�y“¶aœ09 �y“¶.¼ aù>º|@f09 À|8°|g >¼N¹*ö`(09 À|8°|g.¼ a÷TJ@f >¼N¹*ö09 À|r ã`�y“¶09 À|8ç@�y“¶.¼ aøÄJŸLßàN^NuNVÿü y–öf09 À|8°|f >¼N¹*öN^NuNVHçN¹c¤>¾|o0`¾|ÿÿg]¹©B@JŸL߀N^NuNVÿü nJPgB@` n0( °n fp`B@N^NuNVÿü nJPgB@` n h m n h np`B@N^NuNVÿüaú¼J@fò yÑ“¶g y‘“¶f09–öã@HÀм“f @0�y“¶ y ªDfF09 À|8°|f09 À|8°|g >¼N¹*ö09–öã@HÀм“f @0�y“¶`.¼ aöäJ@g0.¼ aöÖJ@g"09 À|29 Â|t åa€A�y“¶`409 À|8°| f09 À|8°| f y“¶`´>¼N¹*öN^NuNVÿüaùºJ@fÌ.¼ aö`J@fL 9›²°¹¬†f409 À|8°|f.¼“˜N¹_L`aúzJ@fˆ>¼N¹*ö` >¼N¹*ö 9›²°¹¬†f.¼“ŽN¹_LaýÂ`, y–ög >¼"N¹*ö.¼ aõ¼N¹*ö09 À|r ã`€y �y“¶.¼ aö(N^NuNVÿüaøÞJ@fŽ.¼ aôîJ@f >¼N¹*ö.¼ aõlJ@g09 r ã`€|�y“¶`: y< g >¼N¹*ö y< f >¼N¹*öy“¶.¼ aöø09 �y“¶.¼ aõŠN^NuNV`N¾Fn 2ãAHÁÐ� @0Š@RG`è` 2ãAHÁÐ� @0Š@>¼//9©N¹dXOJ@g\¹©```ÿnJEf >¼(N¹*ö0JŸLß àN^NuNVHç. g:<€`BE~<<@JGg0ÀngŠFãGâF`ì0JŸLßàN^NuNVHçaï’J@f®.¼ aì8J@g><€<9 *| `*.¼ aìJ@g><<9 *| ` >¼N¹*ö0À|8°|(g >¼N¹*ö y–öfŽ|@02t åa€A2Â|€A�y“¶ y¢º0­T¹¢º yŸî0­T¹ŸîTy‹œJŸLß ÀN^NuNVÿüaîÎJ@fj y< g >¼N¹*ö ¹ÿ n ¹ÿÿÿ l >¼N¹*ö.¼ aë@J@f >¼!N¹*ö09 r ã`29  Â|ÿ€A�y“¶N^NuNVÿüaîTJ@fn.¼ aêüJ@faïBJ@fX>¼N¹*ö.¼ aé¶J@f >¼N¹*ö09 r ã`29–öãAHÁÒ¼“¬"A2€A€y �y“¶.¼ aë N^NuNVÿü09–öã@HÀЮ @0�y“¶N^NuNVHç*nBUBmB­;|ÿÿ ;|ÿÿ BmBmJŸLß N^NuNVHç0.é@HÀ*@Ûü BF.�a®>¼#/9©aDXOJ@g& y–öfp`09–ö;@:¼<\¹©`Ø>¼(/9©a XOJ@gV\¹©aŽ>¾|f :¼:;|`D¾|ÿÿg]¹©aü>JGl&JFf a(°|ÿÿg>¼N¹*ö`Ð]¹©`h0À|:€>¼,/9©a’XOJ@gŒ\¹©aâ;@ Jm m m o >¼N¹*ö;|>¼)/9©aPXOJ@f(aÜÐ|ÿì;@Jmm mo>¼"N¹qhXO y”d@ÀRy”dDÀo.¼•jN¹qhBy”dN^NuNVHçJyªjgrJy›¨gh>9‹œ3ü‹œ09“ʰyŸølRa4>¹“Ê/<•lN¹qhXO.¼•qN¹qh>¼a*>¼ abN¹)v3À›¨Jy›¨gRy“Ê` 3Ç‹œaÜ>¹Ÿø/<•ŒN¹qhXO>¼?9›ªaFTO>¼?9›¬a6TO>¼ aþJnf.¼•‘N¹qh`X*|“¶BG09‹œâ@¾@l>¼?aúTORG`ä9‹�g >¼?aàTO>¼ a¨¾|l.¼•¥N¹qhRG`ê09“ʰyŸøn nf >¼ at`&BWa,Jy›¨g>¼ a^N¹)v3À›¨Ry“ÊJŸLß ÀN^NuNVHç y*›¨gJng. y ›¨g Jy›¨g>¹›¨aN¹)v3À›¨`Ö`”|BE y ›¨g„Jy›¨gz y ›¨fRº|lLRE0°|f~`~0ÀGg >¼ a´RF`î y ›¨fN¹)v3À›¨`è y ›¨g$Jy›¨g>¹›¨a|N¹)v3À›¨RF`ÿtJŸLßàN^NuNVÿüJyªjgNRyÂ09°|7m¹¬Ž/<•á/<•ªN¹qhPO.¹¢¾/<•ðN¹qhXO3üÂN^NuNVHç y�à® R¹�àJ. g <¢¬°¹�àb. 9�à�¼¢,>>‡/<¢,?9”fN¹~‚\O#ü¢,�àJŸL߀N^NuNVÿü0y¬�ÑÈ"|”lJp˜g:>® 0y¬�ÑÈ"|”t?0˜0.À|ÿ�Wa\TO09¬�ã@HÀм”l @BP`@0.á@29¬�ãAHÁÒ¼”t"A2€0y¬�ÑÈ"|”l00˜29¬�ãAHÁÒ¼”l"ARQN^NuNVÿü09HçBWN¹_  9©°¹ÁìeŠ.¼ aôÔJ@ga83ü< #ü `¦ y–ög >¼N¹*ö>9“¶Î|?íGyÿÀ“¶0€y €|À�y“¶.¼ aó(J@f >¼N¹*ö.¼ aôâ`¸aô(J@f>¼ N¹*ö`¢>¼N¹_ .¼ aô,J@g09 r ã`€| �y“¶`T y< f.¼ aóþJ@f >¼N¹*öJ¹ m ¹ o >¼%N¹*ö09  À|r ã`�y“¶0y–öÑÈ"|“f00˜€y �y“¶JŸL߀N^NuNVÿü3ù  3ù  #ù  3ù   3ù  3ù   3ù  "N^NuNVÿüBWN¹_  yªDf609–öã@HÀм“f @0�y“¶.¼ añèJ@f >¼N¹*ö`j yªDf.¼ añÂJ@f >¼N¹*ö`D yªDf" y–öf y< g >¼N¹*ö`&`.¼ aò*J@f >¼N¹*ö09 �y“¶.¼ aóN^NuNVÿüaõ¼J@f¬ yªDf..¼ aò~J@f >¼!N¹*ö y< g >¼N¹*ö`X.¼ aò*J@f >¼!N¹*ö y9 g y8 f09 °y¬�g >¼N¹*ö 9›ªT€‘¹ By 09 À|�y“¶.¼ aó¢N^NuNVHçaôüJ@fÌ y–ög >¼"N¹*ö.¼ añŽJ@gR.¼ añ€J@g,y@“¶09 À|r ã`29 Â|€A�y“¶`p.¼ añlJ@g yˆ“¶`Ä.¼ añTJ@g>.¼ añFJ@g yH“¶`ž.¼ añJ@g>9 3ùN¹*öBmaò>®W a¦¾|fRU`U0`aо|g8JFf >¼+/9©aäXOJ@g \¹©U`JFg U(;|`U>®W aF`Ì>¼-/9©a XOJ@gX\¹©>¼(/9©a†XOJ@g8\¹©až>JGl ¹ ©`"0€| :€a,>®W aà`f]¹©N¹QÚ>gx¾|f >¼N¹*ö¾|fJy“¶g >¼N¹*ö¾|g¾|f. y“¶g$Jy“¶g y “¶gJy“¶g >¼N¹*ö;G >®W aX`Þa>JGm2:‡ y–öf¾|m¾|n >¼N¹*ö>®W a`¢.¼7êN¹1< 9©°¹Áìd]¹©JyªNg;yªf ByªN+y�Ø;y¬„>¼(/9©a0XOJ@gRF`ý$JUf0Jy¢¬gJy�Øg yÿÿ�Øf :¼8;|` :¼9;|>®W axJŸLß ÀN^NuNVHça0>¾|m¾|n 0À|``¾|ÿÿg]¹©pÿJŸL߀N^NuNVHça*>JGm ¾|n0``¾|ÿÿg]¹©pÿJŸL߀N^NuNVHç y© f y©*h-g \¹©0-`pÿJŸLß N^NuNVÿü>¼)/9©aXOJ@g\¹©` >¼ N¹*öN^NuNVÿü .°¹ÁìeB@` n f n0(°n gB@`pN^NuNVHç9–ùH‡*|–øBF¼|l az:ÀRF`ðJ9–øg*9–øH€>€/<”|N¹qhXOJ9–øfB@`¼'N¹*ö`(.¼–N¹0–N¹+˜`°|g´°|gˆ°|gÎ`ØN^NuNVHç >9‹œâG*|“¶(|“À0SGJ@g >œ?aÿFTO`ìJŸLß0€N^NuNVÿü.¼›ÊN¹wÞ.¼¦öN¹wÞ.¹¤Ê9¢ÂH€??9®”afXON^NuNVÿü.¼›ÊN¹wÞ.¼ª|N¹wÞ.¹¤Î9¤ÜH€??9¹¼a,XO.¹¤Ê9ŸèH€??9ªPaXO>¹ŸþN¹xVN^NuNVHç>®N¹xV0. "y©€BW/<‰|N¹-4XO=@J® o„ ® o<<` . <>†/<¬”?.N¹z|\O>¾Fg.¼‰|/<–N¹qhXON¹+˜>‡/<¬”?9¤ÖN¹~‚\O°Gg.¼–?N¹0–N¹+˜0HÀ‘® `ÿx>®N¹xVJŸLßÀN^NuNVHç| BG¾n l*:.B€0àeÊ|º| mÚ|7`Ú|0>…aüžYFRG`ÐJŸLßàN^NuNVÿ†HçN¹…�BW/<‰qN¹y6XO>¼/<‰qN¹y6XO>¼/<‰qN¹y6XO-|‰gÿˆ .2. HÁÐ� @B=|ÿ†*nJgJg  o mR�`ìJgþBG 2HÁÐ� @  oR 2HÁÐ� @ lB 2HÁÐ� @ Am 2HÁÐ� @ Zn 5pH€Ð| `5pH€" 4HÂÒ‚"A€RG`žJ5pg 2HÁÐ� @BRG f0>¼N¹xVBWBg/ R—N¹yÞ\O°|g.�R—/<–gaPXO` N2nÿ†ÓÉÓÉÑÉ!MÿˆRnÿ†ÚÇ`þæ N2nÿ†ÓÉÓÉÑÉ!|2/-/ N¹…&Þü°|gpÿ`*.�—?<N¹ˆTO>®N¹…²>®N¹† B@JŸLß N^NuNVHçN¹†h>JGlpÿ`†>‡N¹…²>‡N¹†*@Jn fJnf.¼‰q/.N¹‡ XOJ@f 0`@`.¼‰v/.N¹‡ XOJ@f0` >¼/.?N¹ƒÞ\OJ@gpÿ`0JŸLß €N^NuNVHçN¹†h>JGlpÿ`|>‡N¹…²>‡N¹†*@Jnf.¼‰q/.N¹‡ XOJ@f 0`@`.¼‰v/.N¹‡ XOJ@f0` >¼/.?N¹ƒÞ\OJ@gpÿ`0JŸLß €N^NuNVÿøHç*n :.HÅ>®N¹†2(@¹üÿÿÿÿfpÿ`NgB@`Bgpÿ`6g.…/ / a6PO` f.…/ / aPO` -EÿøJ…oì.,¬gpg2>¼"/</ —2/,/ N¹…&Þü°|gpÿ`Àÿ¿>¼!/</ —2// N¹…&Þü°|g .ÿø�…`ˆ)G ,À¼-@ÿü&L×îÿü×ü2 м²·ÀdDJ…o@¼<f ,°¬ o)l .ÿø�…`4`¼< fR‹R¬` ÆS…R‹R¬`°`ÿ ,°¬ o)l .ÿøJŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼gÈ -°®ÿüglg2>¼"/</ —2/-/ N¹…&Þü°|gpÿ`�ÿ¿>¼!/</ —2/.ÿü/ N¹…&Þü°|gpÿ`^+nÿü "-¼Ð�&@×ü2 м²·ÀdJ‡o ÛS‡R­`æJ‡f -°­ o+mN¹†h>JGlpÿ`&>‡N¹…²>¼/.?N¹ƒÞ\O<>‡N¹† 0JŸLßÀN^NuNVHç? *n.. (n,.:.BƒJ†o<.Œ?<N¹ˆTO+G..�—?N¹ˆTO8JDg `R‡S†Ùü€Rƒ`À JŸLß0øN^NuNVHçBG¾|l>‡aRG`òJŸL߀N^NuNVHç >®aP*@0.@B+|ÿÿÿÿB­B­ B-Ií м¹Àdü `î м.¹ÀdB`ðJŸLß0N^NuNVHç>.0Áü²Ð¼®šJŸL߀N^NuNVHç nepÿ`>®N¹†*@fpÿ` JŸLß N^NuNVHç|BG¾|l0Ày–âf �y–â0`ãFRG`àpÿJŸLßÀN^NuNVHç|BG¾nlãFRG`ô0F@Áy–âB@JŸLßÀN^NuNVHç. gRn*y–ä0.HÀÛÀ.�N¹n°|ÿÿfpÿ`*y–ä0.HÀѹ–ä JŸLß N^NuNVHç *n(n Jg*Jg&H€>€a*H€>€a ¾op` ¾lpÿ``ÒB@JŸLß0ÀN^NuNVHç. ¾<am ¾<znž< H€JŸL߀N^NuNVHç*nBGJgRG`ø0JŸLß €N^NuNVHç*nBGJgRG`ø0JŸLß €N^NuNVHç?BC..,. J†f#ü€–î <€`p¼‡o #Ç–îB€``J‡l D€.RCJ†l D€,RC¾†fzB‡` x¾†mã†ã„`öB…J„g¾†mŠ„ž†â„â†`î¶|f D€#À–î D€`#Ç–î JŸLßøN^NuNVÿþ/. n/N¹‡Ø¿�"n"€N^Nu/ *o// /N¹ˆ´PO*€*_NuNVÿüBBJ®lD®RBJ® lD® RB0. Àî-@ÿü0.Àîÿˆ.Ž—ÿÿÿˆ?.ÿ†N¹¶TOJŸLß €N^NuNVÿü.®N¹‡¶>€/.?<N¹~‚\O.® N¹‡¶>€/. ?<N¹~‚\O>¼/<–v?<N¹~‚\O>¼ÿÿN¹x$N^NuNVÿ”HçIîB®ÿªBnÿ® .R€°¼dRnÿ®-\ÿª ®ÿÿÿÿÿªfRnÿ®-\ÿª*\&Lg(K¾<%gH€>€/—ÿÿÿª?.ÿ®a\O`ØBnÿ¤¾<-fRnÿ¤| ÿ ¾<0fGÿ =|ÿÿÿ¨¾<0m*¾<9n$Jnÿ¨lBnÿ¨H€2.ÿ¨Ãü ÐAÐ|ÿÐ=@ÿ¨`Ð=|ÿÿÿ¦¾<.fBnÿ¦¾<0m ¾<9nH€2.ÿ¦Ãü ÐAÐ|ÿÐ=@ÿ¦`ÚBnÿ¢¾<lfRnÿ¢Aîÿ°-HÿœH€`@Jnÿ¢g -|u<ÿ–`-|vlÿ–BW/.ÿ–?<?< /—ÿÿÿ°/ N¹uîÞüT‹Jnÿ¢gT‹`BW/<vlBg?< /—ÿÿÿ°/ N¹uîÞüT‹`æJnÿ¢g -|u<ÿ–`-|vlÿ–BW/.ÿ–Bg?</—ÿÿÿ°/ N¹uîÞüT‹Jnÿ¢gT‹` Jnÿ¢g -|u<ÿ–`-|vlÿ–¾<XgBW`>¼/.ÿ–Bg?</—ÿÿÿ°/ N¹uîÞüT‹Jnÿ¢gT‹`N-\ÿœ&L`F=[ÿš0.ÿš@ÿ°B.ÿ±`4H€>€/—ÿÿÿª?.ÿ®a"\O`ýì`HÀ |–xr °˜WÉÿü h0NÐ.®ÿœN¹‡”=@ÿ”0.ÿ¦°nÿ”l Jnÿ¦m=nÿ¦ÿ”0.ÿ¨�nÿ”=@ÿšJnÿ¤f^ . ÿ g. nÿœ -f$Snÿ” nÿœH€>€/—ÿÿÿª?.ÿ®až\OR®ÿœ0.ÿšSnÿšJ@o.ÿ H€>€/—ÿÿÿª?.ÿ®at\O`Ø0.ÿ”Snÿ”J@g nÿœH€>€/—ÿÿÿª?.ÿ®aJ\OR®ÿœ`Ô0.ÿšSnÿšJ@o.ÿ H€>€/—ÿÿÿª?.ÿ®a \O`Ú`üê nÿ®f nÿªBJŸLß8€N^NuNVÿü0.`@. .ÿô` R®ÿüB† î€-@ÿøJ®ÿøo>¼!/.ÿø/ /.ÿü/ N¹…&ÞüHÀ,Ý®ÿü ï€Ñ­ € ï€ÙÀ -°­ o+m ¼®ÿøg .ÿô�‡`žJ‡f .ÿô`’g0>¼"/</ —2/-/ N¹…&Þü°|gpÿ`^ÿ¿>¼!/</ —2/.ÿü/ N¹…&Þü°|g  .ÿô�‡`&ß­ -°­ o+m Gí2J‡oÛS‡`ö .ÿôJŸLß8ÀN^NuNVþþHç *n.. |ÿþþ.Ž—ÿÿþþ?< N¹ˆTO0| .ˆ?<N¹ˆTO.þÿH†HÆÌ¼ÿIîÿJ‡o J†oÜS‡S†`ðJ‡oü RŒ "Ò¼ÿÿÿ��JŸLß0ÀN^NuNVÿôHç*n :.HÅ>®N¹†2(@¹üÿÿÿÿfpÿ`®J…nB@`¤gpÿ`˜g>¼// aPO`€g>¼// aðPO`hf.…/ / abPO`R-EÿøBJ…oF ,î€-@ÿôB®ÿü ,°®ÿôg8g2>¼"/</ —2/,/ N¹…&Þü°|gpÿ`úÿ¿ ,À¼g8 ,°¬ l.>¼!/</ —2/.ÿô/ N¹…&Þü°|gpÿ`²)nÿô ,À¼-@ÿü&L×îÿü×ü2, м²·Àd"J…o  f ¾< g< `S…ÇR¬`Ò Ð¼²·Àe2>¼"/</ —2/.ÿô/ N¹…&Þü°|g .ÿø�†`$`@J…f ,°¬ o)l .ÿø``þ¸JŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼g -°®ÿügŒg2>¼"/</ —2/-/ N¹…&Þü°|gpÿ`Úÿ¿ -°­ l0>¼2. Âî ÐAÐnÿü=@ÿü .ÿügD€N^NuNVHç *n(MJgRŒ`ø ��JŸLß0N^NuNVHç*n(n &MJgR‹`øÜg`ú JŸLß8N^NuStack Overflow$C runtimeCON:LST:a6xxxxAŒŒas68symb.datŒ�ÿ ”ÌNøÜ"?¤AFA€DÊAº@¦AôB4ŒŽŒžŒ¬Œ»ŒÌŒÝŒêŒþ��+�<�S�d�v�…�”�¬�Å�Ü�í�ýŽŽ!Ž+Ž=ŽJŽeŽvŽŠŽ¥Ž¾ŽÚŽó.end.equ~.yxzorgLNfilnpsu°¨¸�°¨˜Î äòˆòöò&Êüö öö òüÀö ðòÀ¦üülabel redefinedinvalid labelinvalid opcodeno label for opdopcode redefinedillegalH€>€N¹kâ`@ n .€.H€?N¹vÜTO`& n  @®"n R‘``J@g¼°|gư|gÚ.H€N^NuNVHç*n<.HÆ n. nfzJ‡gJEg À¼Àè‡SE`è`j nf&z J‡gJEg À¼Àæ‡SE`èJEf-ÿÿ`¼/— ?. N¹~‚\ON^NuNVHç*n ;|Aí+HJnfB@`p=@>®?</.N¹yÞ\O:€JŸLß N^NuNVHç*n Jmn*Aí+H>¼/-?N¹~‚\O°|gpÿ`;| m® R­Sm. H€JŸLß N^NuNVÿþHç*n .�0.à@?WÿaˆTO.�?.WÿaÿzTO0.JŸLß €N^NuNVHç*n><žm;|Aí+H>‡/-?N¹~‚\O°Ggpÿ`B@JŸLß €N^NuNVHçBG¾|l >‡N¹xVRG`îB—BgN¹ˆTOJŸL߀N^NuNVHç>®N¹†2*@»üÿÿÿÿfpÿ`¶H€À|g>®N¹…²>®N¹† B@`’g.f(>¼B§?.N¹ƒn\O>¼/<‰{?.N¹~‚\Og,>¼"/</ —!/</ —2/.ÿü/ N¹…&Þü°|gpÿ`ž`>¼€/ —2a–XO+nÿü "-¼Ð�&@×ü2 м²·Àd J‡oÜS‡`êJ‡n$@ .ÿôÑ­ -°­ o+m .ÿô`0>¼"/</ —2/.ÿü/ N¹…&Þü°|gpÿ`R®ÿü î€-@ÿøJ®ÿøo*>¼"/.ÿø/ /.ÿü/ N¹…&ÞüHÀ".ÿø°�gpÿ`Æ .ÿøï€ž€ .ÿøï€ÙÀ .ÿôÑ­ -°­ o+m J‡f .ÿô`’g,>¼"/</ —2/-/ N¹…&Þü°|gpÿ`^@ -î€+@ -°­ l$>¼!/</ —2/-/ N¹…&Þü`>¼€/ —2aXOGí2J‡oÜS‡`ö .ÿôJŸLß8€N^NuNVHç*n>. 0SGJ@oB`ôJŸLß €N^NuNVÿüHç*n.. <.-GÿüJ‡o,  f0| .ˆ?N¹ˆTOH€HÀ.€?N¹ˆTOS‡`Ð .ÿüJŸLß ÀN^NuNVÿünÿÿ n o0. r ã`=@ Wn >® 0n /?.N¹ƒn\ON^NuNVHç>®N¹†2*@»üÿÿÿÿfpÿ`F0.`&+n `0 . Ñ­`& - Ю +@`pÿ``J@gÖ°|gذ|gÜ`èÿß -JŸLß N^NuNVÿüHç*n >®N¹†(@Gì -:f" am zn H€Ð|ÿà`H€Ð|ÿÀ€T�BG  o6¾|l0 .g* am zn H€Ð|ÿà`H€"K4GÓÊ@RGR�`Ä .f:R�BG  o0¾|l* am zn H€Ð|ÿà`H€"K4GÓÊ@ RGR�`Ê nf.‹?<N¹ˆTO.‹?.N¹ˆTO>¾|nB@`pÿJŸLß8€N^NuNVHç  exprundefined in equateinvalid first operandinvalid second operandundefined symbolillegal index registerillegal constantconstant requiredillegal formatillegal stringillegal addressing modeillegal relative addressillegal text delimiterrelocation errorsymbol requiredbad use of symbolinvalid data listmissing )register requiredillegal sizeillegal 8-bit displacementillegal externalillegal shift countinvalid instruction lengthbackward assignment to *illegal 16-bit displacementillegal 16-bit immediateillegal 8-bit immediateSymbol table overflow & Usage: as68 [-p] [-u] [-L] [-N] [-S d:] [-F d:] sourcefile .opd.data.text.set.dc.globl.comm.bss.ds.evenaddaddiaddqsubsubisubqcmpaddacmpasubaandandiororicmpieoreorimovemoveqexgjsrbsr.evenoverflow of external table 68000 assembler initialized end statement not at end of source i.t. overflow #$%()*@$#î$$:$h#¶#ú$nAinvalid radix in oconstsymbol tabå ­r8Ѐr9ЀY r10Ѐg r11ЀK r12Ѐ r13Ѐo r14Ѐr15Ѐ³d0Ѐ¥d1ЀYd2ЀÉd3Ѐ}d4Ѐíd5Ѐ¡d6Ѐd7ЀCa0Ѐûa1ЀG a2Ѐy a3Ѐk a4Ѐƒ a5Ѐ� a6Ѐ ãa7Ѐ wuspЀ KspЀccrЀ srЀ.bЀ.BЀ .wЀ ‰.WЀ.lЀÓ.LЀpcЀ ·PCЀ µabcd„¯Áadd�QÐadda�Ðaddi‚ µaddq‘Pinc�_Paddx„ %Ñand�«Àandi‚ maslˆóáasrˆËàbcc† 7dbcs†uebeq†)gbge†¹lbgt†ánbhi†Ïbbhis† dble† oblo†Ýebls†le overflow doitwr: it buffer botch I/O write error on it file && %d: %s & %d: %s as68 abort & %d errors Unable to open input file Unable to open temporary file & Unable to read init file: %s can't creat init: %s & Write error on init file: %s & %d: %s!&*+-/<>3Æ3¬3Š343N3h3à3þ4!&()*+-/<>^6B6B6J6X6F6B6B6F6F6F6B6|expr tree overflow expr opstk overflow seek error on it file write error on it file G LfO$RfShEðTDTâV˜RfWfX"YV˜YêZ†Z†YWf[x]Œ^T^ÎV˜V˜@€@€0 ÀÀ@€ÀÀ€À@€ÿKKKKK`€@ €@  @€ @€& Unable to open file %s I/O error on loader output file it sync error itty=%x doitrd: buffer botch pitix=%x itbuf=%x end=%x it read error itoffset=%d -EXTERNÿÿâçýë1E3iW�{ÿÿãÿÿãû#y5k“�·¡ÛCÿÿÿãWÿÿã_ÿÿãg…=aÍ»ñßÿÿã—ÿÿãŸÿÿã§ŸŸÃ±çÕ×ùÿÿãÏÿÿã×ÿÿãßÿÿãçÿÿãïÿÿã÷ÿÿãÿÿÿäÿÿäÿÿäÿÿäÿÿä'g'K9o]³OÿÿäOÿÿäWÿÿä_ÿÿägÅÅééÿÿäÿÿä‡ÿÿä�ÿÿä—ÿÿäŸ ›¿­ã /+SUwÿÿä×ÿÿäßÿÿàÃÿÿà˵µÿÿàÛÿÿà㯋 [ [ÿÿàûÿÿá µÁƒƒ ã Ù w ‘ÓÓ  i i Ç÷ s• ‰ ý ›½ ­�YYé I /‡k §;×ï c åÝ™ ] ¿-¡ “ Õ5?Å%Gq  í + ç · —ÿÿâÿÿâ K ßû‘#ÇÙÙ = =ÿÿâK ÿ ÿÿÿâcÿÿâkÿÿâsÿÿâ{77mm££II[[ÿÿâ³ÿÿâ» cblos†cblt† Ñmbmi† Ÿkbne†§fbpl† ]jbvc† Whbvs† Sibchg‡@bclr‡ E€bra†`bset‡ {Àbsr† ±abtst‡chk… �A€clr˜ Bcmp… ¿°cmpa� ǰcmpi‚ ­ cmpmŠ £±dbcc‹TÈdbcs‹ UÈdbeq‹ !WÈdbra‹ 3QÈdbf‹�QÈdbge‹\Èdbgt‹^Èdbhi‹ ëRÈdble‹ ã_Èdbls‹ ‰SÈdblt‹ ›]Èdbmi‹ [Èdbne‹ wVÈdbpl‹ sZÈdbt‹ õPÈdbvc‹XÈdbvs‹ ÃYÈdivs… e�Àdivu… €Àeor— ù°eori‚ / exgŒ ©Áext� AHjmp‰ ÛNÀjsr‰ oN€lea� AÀlink“NPlsrˆ +àlslˆ Oámoveƒ amoveaƒ@movem”H€movep•moveq–pmuls…ÁÀmulu…¡ÀÀnbcd™HnegAL SYMBOLS- S y m b o l T a b l e %-8s *UNDEFINED* %-8s %-8s DATA TEXT BSS ABS && UNDEFINED SYMBOLS && %-8s %4d %4d C P / M 6 8 0 0 0 A s s e m b l e r %s Page%4d Revision 01.01Source File: %s & outword: bad rlflg & Read Error On Intermediate File: %s & Object file write error Cannot open Cannot create CDOSUXcdosuxs�r‚ròsˆrÊs8s�r‚ròsˆrÊs8s¢åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå.opd€€ .end€€.data€€ '.text€€.equ€€y.set€€.dc€€.globl€€M .comm€€û .bss€€ .ds€€ .even€€# ~.yxzorg€€R0ЀýR1ЀR2Ѐ!R3Ѐ1R4ЀER5ЀR6ЀiR7ЀR8Ѐ�R9Ѐ¯ R10Ѐk R11Ѐà R12Ѐ§ R13Ѐç R14Ѐ×R15Ѐ×D0ЀD1ЀÑD2ЀAD3ЀõD4ЀeD5ЀD6Ѐ‰D7ЀUA0Ѐ A1Ѐ¿ A2Ѐ A3Ѐã A4Ѐ A5Ѐ A6ЀA7Ѐ+USPЀySPЀsCCRЀ�SRЀ—r0Ѐ…r1Ѐ sr2Ѐ©r3Ѐr4ЀÍr5Ѐ ›r6Ѐñr7Ѐ ˜}Dnegx˜k@nop€ …Nqnot˜For�€ori‚ »pea‰×H@reset€Nprolˆárorˆ ¥àroxlˆ �ároxrˆ Íàrte€GNsrtr€ ñNwrts€ KNusbcd„�scc™TÀscs™ 9UÀseq™ ÉWÀsf™QÀsge™\Àsgt™ í^Àshi™ “RÀsle™_Àsls™ ·SÀslt™]Àsmi™Å[Àsne™5VÀspl™ZÀst™PÀsvc™XÀsvs™YÀstopŽNrsub��suba��subi‚subq‘³Qdec�éQsubx„‘swap� H@tas™JÀtrap’N@trapv€Nvtst˜Junlk�NXåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååP²(f, yP²>¨/<?úN¹#’XO>¼ÿÿa  "yP²Ñ© JŸL߀N^NuNVHç yP²(g.¼RÄaN*@aÌ`ž yP²(gvJng.¼RÄa$*@»ùP²gRyTÆ.¼SÆa *@»ùP²fa€`8JngRyUÒ#ÍUÔ`$ yP²0(°mf yP² ( °­ g.�a$` yP² Lg JyRÂga\JŸLß N^NuNVÿü.¹j /./<@N¹#’PORy=8N^NuNVHç >¼N¹:Š#ÀHŒ9H�gR¹HŒ 9HŒÐ¼#ÀH’#ùHŒP²3ü,P°*|RÄ(|SÆBG¾| l *ÍB�(ÌBœRG`îJŸLß0€N^NuNVHçaå@HÀЮ#ÀVØ yVØ*h f*yP²` yVØ P!yP².�a JŸLß N^NuNVHç*n(M&yP²BG¾|l·Lg*m`æRG`ì JŸLß8€N^NuNVÿü yVØ ¹P² yVØJ¨f yVØ!yP²aN^NuNVÿü¹P² 9P²°¹H’e<>¼N¹:а¼ÿÿÿÿf.¼@7N¹#’>¼ÿÿN¹,`¹H’ydP°N^NuNVHçBG*yP²BF¼|l H€Þ@RF`ð0À|>JŸLß ÀN^NuNVHç *n(n BG¾|l8ÝRG`ôJŸLß0€N^NuNVHç y<ÂH€"y<ÂR>¼?</<<ÆN¹-Ö\O<JFm0`.¼<Æ/<@PN¹#’XO>¼ÿÿaÀJŸLßÀN^NuNVÿü 9XFѹTÌ 9XJѹXt 9XNѹFTN^NuNVHç #ùP²TÈ(|RÄ*|TÒBG¾|@l*ÜRG`ô(|SÆ*|UØBG¾|@l*ÜRG`ôJŸLß0€N^NuNVHç #ùå`7†´'Øÿÿ`4C Runtime Copyright 1982 by Digital Research V01.03 o"h&IÓèB[¿Ëbú#ÉD>E耀ÿ?/ �ÎN¹!€N¹,NVB€ oÑü¿ÈdpÿN^NuNV0/"/ NB¿ùD>d0< Aù<†"NB0<NBN^NuNVHça4aX#üL°Z„#üHdH„#üZÄXf nn.¼?_N¹#’>¼ÿÿa*n X�~¾nlJ(].¼?}/ N¹:ÜXOJ@g, -fRŒH€`üSŒ`J,g.¥/<?€N¹#’XO>¼ÿÿN¹,#Ý<¶RG`èRyX``ÞRyRÂ`ÔRySÄ>¼RŒ/ afXO#ÀXb#ùXbTÌ`¬Ryj>¼RŒ/ a>XO#ÀDD`ŽRyiè>¼RŒ/ a XO#ÀVÞ`pRy=4`fRyJž`^&yP²RŒBF¼|l ÔJgRŒRF`î yP²1|BWa`.#Ý<ºRGaÆ` `�|B°|8bå@0@Ñü=: PNÐ.ŒaöRG`þ²a ÎRyH�*n X�#üL°Z„#üHdH„#üZÄXfa~¾nlT(].¼?•/ N¹:ÜXOJ@g: -f.RŒH€`SŒ`"X�RG`"` `�|B°|8bå@0@Ñü> PNÐ.Œa >RG`¦a¼JŸLß8ÀN^NuNVÿüB9<Æ.¹<º/<<ÆN¹¹F\N¹,NN^NuNVÿüTÈP²*|RÄ(|TÒBG¾|@l*ÜRG`ô*|SÆ(|UØBG¾|@l*ÜRG`ôJŸLß0€N^NuNVHç 9TÌ�¹Xb#Àiä#ùXtL¬#ùFTVâJyjg #ùDDXt` 9TÌR€À¼ÿÿÿþ#ÀXt#ùXtDDJyièg #ùVÞFT`$ 9XtйL¬R€À¼ÿÿÿþ#ÀFT#ùFTVÞ#ùXbTÌa a\J¹XjgD.¹P²/<=aýìXO.¼RÄaüž*@+yiä m÷ÿm .­aüÎ*@»ùP²fÚJ¹FXgL.¹P²/<= aý XO.¼RÄaüR*@ 9iäйL¬+@ m÷ÿm .­aüz*@»ùP²fÒJ¹XngR.¹P²/<=*aýLXO.¼RÄaûþ*@ 9iäйL¬Ð¹Vâ+@ m÷ÿm .­aü *@»ùP²fÌJŸLß N^NuNVHç*yHŒ»ùP²d6-f&-g 9XtÑ­ `-g 9FTÑ­ Ûü`ÂJŸLß N^NuNVHç(|RĹüSÀd0Gì @J�g &SJ« g.‹a"`.‹aÀ*K»Ôg&k`âPŒ`ÈJŸLß8N^NuNVHç *n.¹P²/ aüBXO.¼SÆaúô(@¹ùP²g n!l ``B‡.¼RÄaúÒ¾­ l.- B­ .­aû *@»ùP²fà;|¡ 9FTйVâ+@ n!m ß¹Vâ.¼SÆaú‚aûJŸLß0€N^NuNVHç *n.¹P²/ aûžXO.¼SÆaúP(@¹ùP²f€.¼RÄaú:(@¹ùP²f.¼@uN¹#’>¼ÿÿaš.­aúb*@»ùP²gJ­ g .®aþæ`:`Ü.®a òJ@f,JyVÜf.¼@†N¹#’RyVÜRy=8.�a`+l JŸLß0N^NuNVHça¬`.¼×a¢`J@gÚ°|gâ°|gæ.¼íaˆN¹JŸLßÀN^NuNVHç*n.¼6ÐBg?<N¹ XO.�Bg?<N¹ XO°|ÿm>¼aÿjB- .�Bg PRINT "LEW" åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå yH„BP#ü?aÈJ@g¸a†ByTÆByUÒ#üVæj a>¼a�09TưyUÒo8JyUÒg .¹UÔa²aX¹Z„ yH„RP yXf ¹?X¹Xf`aj9? g.¼F\N¹+nR¹?09jHÀй?ѹ?.¼F\/9?a:XO`ÿBT¹H„N^NuNVHç *|VæBG¾|l.¼F\N¹+nÀRG`èB¹Vô#ùVü?J9VæfB@`pJŸLß0€N^NuNVHç*n -f.R� @ lf"R� @JgÕ<³`ü6<³*|<®`*n>¼/<F\/ N¹+0PO3ÀF\l.�/<?˜N¹#’XO>¼ÿÿa Š#Íj .¼XD?9F\alTOJ@g.¹j /<?­N¹#’XO>¼ÿÿa TByF^ yÿeXDgBWB§?9F\N¹7*\OaVJyH�g>¼/<J¤/ N¹+0POJŸLß €N^NuNVÿú>¼/U—?.N¹.t\O°|gp` n 0®ÿþB@N^NuNVHç*|XDBG¾|l.¼F\N¹+Æ:ÀRG`è y`XDg.¹j /<?ÇN¹#’XO>¼ÿÿa ŒJyX^g.¹j /<?àN¹#’XO>¼ÿÿa hJŸLß €N^NuNVHç yZ„ ¹P² 9XFйXJм,Jng 9?мÜ€.¼F\/a îXO.9XRJ‡oaaz>®až¼`æJŸLßÀN^NuNVHç*yP²BG¾|l.¼F\N¹+Æ:ÀRG`è.¼F\N¹+Æ:À.¼F\N¹+Æ:€.¼F\N¹+Æ;@JŸLß €N^NuNVHçB‡ yP²(f~ yP²(g.9TÌ`Z yP²(g.9Xt`D yP²(g.9FT`. y*nBG¾|lJgH€>€N¹)&``RG`â>¼ N¹)&JŸLß €N^NuNVÿü.®aôè yÿmXDf3üja<`: yÿeXDf3üja$`" y¹F\N¹,N>¹J¤N¹,NN^NuNVÿø>¼¶/9<¶N¹-ÖXO3ÀH–l.¹<¶/<@”N¹#’XO>¼ÿÿa@3üH˜#üHžHš09j€yièg.¼H–?<`N¹*®TO`.¼H–?<`N¹*®TO.¼H–?9iäN¹*®TO.¼H–?9iæN¹*®TO.¼H–?9L¬N¹*®TO.¼H–?9L®N¹*®TO.¼H–?9VâN¹*®TO.¼H–?9VäN¹*®TO 9P²�¹HŒ-@ÿü.¼H–?.ÿüN¹*®TO.¼H–?.ÿþN¹*®TO.¼H–?9R¾N¹*®TO.¼H–?9RÀN¹*®TO.¼H–?9XbN¹*®TO.¼H–?9XdN¹*®TOJyJžg.¼H–BgN¹*®TO`.¼H–?<ÿÿN¹*®TO09j€yiègP.¼H–?9DDN¹*®TO.¼H–?9DFN¹*®TO.¼H–?9VÞN¹*®TO.¼H–?9VàN¹*®TO.¼P¶a@ y<ÂÐTÐJyJžg(.¼DLa$ y<ÂÐj .¼X|a y<ÂÐXrN^NuNVHç*naø:€;|Aí+HJŸLß N^NuNVÿüJ9TÐg y<¹TÐ.¼<ÆN¹8šJyJžg0 y<¹j .¼<ÆN¹8š y<¹Xr.¼<ÆN¹8š>®N¹,N^NuNVHç yH„>T¹H„JGgJ0SGJ@gB yXf*X¹Xf.¼F\/a4XO.¼J¤/a(XOaðüaòp#Å?>¼ata÷‚`¶JŸLßà#ÍXnp`B@JŸLß N^NuNVHç *n(n BG¾|l ¹ gB@`RG`îpJŸLß0€N^NuNVHç 0.Áü*@ÛùJ .¼A˜N¹#’(M P€¹ÀdJgH€>€N¹)&RŒ`ä>¼ N¹)&JŸLß0N^NuNVÿ†HçN¹9LBW/<<ŸN¹-.XO>¼/<<ŸN¹-.XO>¼/<<ŸN¹-.XO-|<•ÿˆ .2. HÁÐ� @B=|ÿ†*nJgJg  o mR�`ìJgþBG 2HÁÐ� @  oR 2HÁÐ� @ lB 2HÁÐ� @ Am 2HÁÐ� @ Zn 5pH€Ð| `5pH€" 4HÂÒ‚"A€RG`žJ5pg 2HÁÐ� @BRG f0>¼N¹,NBWBg/ R—N¹-Ö\O°|g.�R—/<A·aPXO` N2nÿ†ÓÉÓÉÑÉ!MÿˆRnÿ†ÚÇ`þæ N2nÿ†ÓÉÓÉÑÉ!|ÿˆ.Ž—ÿÿÿˆ?.ÿ†N¹¶TOJŸLß €N^NuNVÿü.®N¹;r>€/.?<N¹2z\O.® N¹;r>€/. ?<N¹2z\O>¼/<AÆ?<N¹2z\O>¼ÿÿN¹,N^NuNVÿ”HçIîB®ÿªBnÿ® .R€°¼dRnÿ®-\ÿª ®ÿÿÿÿÿªfRnÿ®-\ÿª*\&Lg(K¾<%gH€>€/—ÿÿÿª?.ÿ®a\O`ØBnÿ¤¾<-fRnÿ¤| ÿ ¾<0fGÿ =|ÿÿÿ¨¾<0m*¾<9n$Jnÿ¨lBnÿ¨H€2.ÿ¨Ãü ÐAÐ|ÿÐ=@ÿ¨`Ð=|ÿÿÿ¦¾<.fBnÿ¦¾<0m ¾<9nH€2.ÿ¦Ãü ÐAÐ|ÿÐ=@ÿ¦`ÚBnÿ¢¾<lfRnÿ¢Aîÿ°-HÿœH€`@Jnÿ¢g -|'fÿ–`-|(–ÿ–BW/.ÿ–?<?< /—ÿÿÿ°/ N¹(Þü/ N¹8âÞü°|gpÿ`*.�—?<N¹ˆTO>®N¹9n>®N¹:\B@JŸLß N^NuNVHçN¹:$>JGlpÿ`†>‡N¹9n>‡N¹9Ì*@Jn fJnf.¼<Ÿ/.N¹:ÜXOJ@f 0`@`.¼<¤/.N¹:ÜXOJ@f0` >¼/.?N¹7š\OJ@gpÿ`0JŸLß €N^NuNVHçN¹:$>JGlpÿ`|>‡N¹9n>‡N¹9Ì*@Jnf.¼<Ÿ/.N¹:ÜXOJ@f 0`@`.¼<¤/.N¹:ÜXOJ@f0` >¼/.?N¹7š\OJ@gpÿ`0JŸLß €N^NuNVÿøHç*n :.HÅ>®N¹9î(@¹üÿÿÿÿfpÿ`NgB@`Bgpÿ`6g.…/ / a6PO` f.…/ / aPO` -EÿøJ…oì.,¬gpg2>¼"/</ —2/,/ N¹8âÞü°|gpÿ`Àÿ¿>¼!/</ —2// N¹8âÞü°|g .ÿø�…`ˆ)G ,À¼-@ÿü&L×îÿü×ü2 м²·ÀdDJ…o@¼<f ,°¬ o)l .ÿø�…`4`¼< fR‹R¬` ÆS…R‹R¬`°`ÿ ,°¬ o)l .ÿøJŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼gÈ -°®ÿüglg2>¼"/</ —2/-/ N¹8âÞü°|gpÿ`�ÿ¿>¼!/</ —2/.ÿü/ N¹8âÞü°|gpÿ`^+nÿü "-¼Ð�&@×ü2 м²·ÀdJ‡o ÛS‡R­`æJ‡f -°­ o+m .ÿôN^NuNVHç..B€p à§B€p á§BW/ n 0?N¹7*\OJ€l.¹j /<@«N¹#’XOaþâ n Bh . P€"n #@¾®l.® N¹+nR‡`ìJŸL߀N^NuNVHç 0.Áü*@ÛùJ -f - `2.¹P²/ aö@XO.¼SÆaôò(@¹ùP²f .¼RÄaôÞ(@ , JŸLß0N^NuNVHç 0.Áü*@ÛùJ -f(M`..¹P²/ aõàXO.¼SÆaô’(@¹ùP²f .¼RÄaô~(@>, gp`` gp`` gp`B@JŸLß0€N^NuNVÿöHç B…*|H–(|DL=|ÿÿÿü yZ„#ÐJ X¹Z„ 9XFйXJйXRм(Jng 9?мØ€.¼J¤/aþ8XO(9XFU„J„m¼Bnÿþ.¼F\N¹+Æ>.¼J¤N¹+Æ<T…Bnÿö0À|`t.�?N¹*®TOJyJžg .Œ?N¹*®TO`d=GÿøJyJžg .Œ?N¹*®TO.¼F\N¹+Æ=@ÿú.¼J¤N¹+Æ<T…RnÿþU„0À|`0JyJžg .Œ?N¹*®TO`.`Î 9TÌÑ®ÿøJyJžg .Œ?N¹*®TO` 9XtÑ®ÿøJyJžg .Œ?N¹*®TO`æ 9FTÑ®ÿøJyJžg .Œ?N¹*®TO`ÄRnÿö0æ@>€aýxÑ®ÿøJyJžg.Œ0æ@?aýÂTO?N¹*®TO`Ž0æ@>€aýFЮÿø�¹TÌ�…T€-@ÿø .ÿø°¼ÿÿ€m ®ÿÿøo&.¹j //<@ÄN¹#’PO0æ@>€aÄRy=8BnÿøJyJžg .ŒBgN¹*®TO`¤`°|bþäå@0@Ñü? PNÐJy=4fnJnÿþfh .ÿøÀ¼ÿÿ€g\JnÿügV.¹j /<@îN¹#’XOJnÿög 0æ@>€aT‹Jnÿ¢gT‹`BW/<(–Bg?< /—ÿÿÿ°/ N¹(ÞüT‹`æJnÿ¢g -|'fÿ–`-|(–ÿ–BW/.ÿ–Bg?</—ÿÿÿ°/ N¹(ÞüT‹Jnÿ¢gT‹` Jnÿ¢g -|'fÿ–`-|(–ÿ–¾<XgBW`>¼/.ÿ–Bg?</—ÿÿÿ°/ N¹(ÞüT‹Jnÿ¢gT‹`N-\ÿœ&L`F=[ÿš0.ÿš@ÿ°B.ÿ±`4H€>€/—ÿÿÿª?.ÿ®a"\O`ýì`HÀ |AÈr °˜WÉÿü h0NÐ.®ÿœN¹;P=@ÿ”0.ÿ¦°nÿ”l Jnÿ¦m=nÿ¦ÿ”0.ÿ¨�nÿ”=@ÿšJnÿ¤f^ . ÿ g. nÿœ -f$Snÿ” nÿœH€>€/—ÿÿÿª?.ÿ®až\OR®ÿœ0.ÿšSnÿšJ@o.ÿ H€>€/—ÿÿÿª?.ÿ®at\O`Ø0.ÿ”Snÿ”J@g nÿœH€>€/—ÿÿÿª?.ÿ®aJ\OR®ÿœ`Ô0.ÿšSnÿšJ@o.ÿ H€>€/—ÿÿÿª?.ÿ®a \O`Ú`üê nÿ®f nÿªBJŸLß8€N^NuNVÿü0.`@.H€>€N¹)&`@ n .€.H€?N¹)TO`& n  @®"n R‘``J@g¼°|gư|gÚ.H€N^NuNVHç*n<.HÆ n. nfzJ‡gJEg À¼Àè‡SE`è`j nf&z J‡gJEg À¼Àæ‡SE`èJEf-ÿÿ`¼!/.ÿø/ /.ÿü/ N¹8âÞüHÀ,Ý®ÿü ï€Ñ­ € ï€ÙÀ -°­ o+m ¼®ÿøg .ÿô�‡`žJ‡f .ÿô`’g0>¼"/</ —2/-/ N¹8âÞü°|gpÿ`^ÿ¿>¼!/</ —2/.ÿü/ N¹8âÞü°|g  .ÿô�‡`&ß­ -°­ o+m Gí2J‡oÛS‡`ö .ÿôJŸLß8ÀN^NuNVþþHç *n.. |ÿþþ.Ž—ÿÿþþ?< N¹ˆTO0| .ˆ?<N¹ˆTO.þÿH†HÆÌ¼ÿIîÿJ‡o J†oÜS‡S†`ðJ‡oü RŒ "Ò¼ÿÿÿ��JŸLß0ÀN^NuNVÿôHç*n :.HÅ>®N¹9î(@¹üÿÿÿÿfpÿ`®J…nB@`¤gpÿ`˜g>¼// aPO`€g>¼// aðPO`hf.…/ / abPO`R-EÿøBJ…oF ,î€-@ÿôB®ÿü ,°®ÿôg8g2>¼"/</ —2/,/ N¹8âÞü°|gpÿ`úÿ¿ ,À¼g8 ,°¬ l.>¼!/</ —2/.ÿô/ N¹8âÞü°|gpÿ`²)nÿô ,À¼-@ÿü&L×îÿü×ü2, м²·Àd"J…o  f ¾< g< `S…ÇR¬`Ò Ð¼²·Àe2>¼"/</ —2/.ÿô/ N¹8âÞü°|g .ÿø�†`$`@J…f ,°¬ o)l .ÿø``þ¸JŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼g -°®ÿügŒg2>¼"/</ —2/-/ N¹8âÞü°|gpÿ`Úÿ¿ -°­ l0>¼!/<FRy=8Jng" yXf-hÿüÿø>®ÿú/<AN¹#’XOB®ÿøBnÿüJnÿþg.�?.ÿøN¹*®TO.�?.ÿúN¹*®TO`<0G-Hÿø`þ.¹j /<A#N¹#’XO>¼ÿÿaú°`°|bÜå@0@Ñü?, PNÐ`ý@»üH–f*|P¶(|X|(9XJ`ý"JŸLß0ðN^NuNVÿü 9iäйXb°¹TÌg.¼AJN¹#’Ry=8.¹L¬9TÐH€?/<P¶aª\Oa0JyJžg6.¹iä9j H€?/<DLa‚\O.¹L¬9XrH€?/<X|af\O.¼H–N¹*êBW/<?9H–N¹7*\OJ€m>¼/<Hˆ?9H–N¹2z\O°|g.¼AfN¹#’Ry=8>¹=8aù†N^NuNVHç*n.�N¹*ê>•N¹,N0. "y<€>¼/ /<<ÆN¹+0POJ@l.¼<Æ/<A�N¹#’XO>¼ÿÿaù&J®o .�N¹+Æ>.¼H–?N¹*®TOU®`ÚJŸLß €N^NuNVHçB¹HˆJyX`f8*yHŒ»ùP²d*-f-f Lg JyRÂg.�aÛü`ÎJŸLß N^NuNVHç *n(M¹Hˆ(MBG¾|l.¼H–?N¹*®TORG`æ.¼H–?-N¹*®TO#í ?L.¼H–?9?LN¹*®TO.¼H–?9?NN¹*®TOJŸLß0€N^NuNVHç*n n f~` n f~` n f~`B€``B…H†¼|0m ¼|9nœ|0`&¼|am ¼|fnÜ|ÿ©`¼|Am ¼|FnÜ|ÿÉ``JFm¼n l 2ã 2HÁÐ�*```¦ JŸLß àN^NuNVHç*n.�/<=aPXOJ@g #ÍXjp`6.�/<= a6XOJ@g #ÍFXp`.�/<=*aXOJ@g N¹;”XOHÀ. 9DHÀ`â JŸLß ÀN^NuNVÿü>¼/— ?. N¹2z\ON^NuNVÿü yB2n*>¼/— ?<N¹2z\O°|gpÿ``. H€`XJyB4n4#üB:B6>¼/9B6?9B2N¹2z\O°|gpÿ`$3üB4 yB6® R¹B6SyB4. H€N^NuNVHç><žyB43üB4#üB:B6>‡/9B6?9B2N¹2z\O°Ggpÿ`B@JŸL߀N^NuNVHç*n ;|Aí+HJnfB@`p=@>®?</.N¹-Ö\O:€JŸLß N^NuNVHç*n Jmn*Aí+H>¼/-?N¹2z\O°|gpÿ`;| m® R­Sm. H€JŸLß N^NuNVÿþHç*n .�0.à@?WÿaˆTO.�?.WÿaÿzTO0.JŸLß €N^NuNVHç*n><žm;|Aí+H>‡/-?N¹2z\O°Ggpÿ`B@JŸLß €N^NuNVHç*n BmJnfB@`p=@>®Bg/.N¹-.\O:€JŸLß N^NuNVHç*nJmnAí+H>¼/-?N¹.t\O;@Jmnpÿ`Sm mH€À|ÿR­JŸLß N^NuNVHç*n.�a˜>¾|ÿÿfpÿ`0<Ì|ÿáF.�a€>¾|ÿÿfpÿ`0À|ÿŒ@g <ÿÿŒ@0JŸLß ÀN^NuNVHçBG¾|l >‡N¹,NRG`îB—BgN¹ˆTOJŸL߀N^NuNVHç>®N¹9î*@»üÿÿÿÿfpÿ`¶H€À|g>®N¹9n>®N¹:\B@`’g.f(>¼B§?.N¹7*\O>¼/<<©?.N¹2z\Og,>¼"/</ —2/-/ —2/.ÿü/ N¹8âÞü°|gpÿ`ž`>¼€/ —2a–XO+nÿü "-¼Ð�&@×ü2 м²·Àd J‡oÜS‡`êJ‡n$@ .ÿôÑ­ -°­ o+m .ÿô`0>¼"/</ —2/.ÿü/ N¹8âÞü°|gpÿ`R®ÿü î€-@ÿøJ®ÿøo*>¼"/.ÿø/ /.ÿü/ N¹8âÞüHÀ".ÿø°�gpÿ`Æ .ÿøï€ž€ .ÿøï€ÙÀ .ÿôÑ­ -°­ o+m J‡f .ÿô`’g,>¼"/</ —2/-/ N¹8âÞü°|gpÿ`^@ -î€+@ -°­ l$>¼!/</ —2/-/ N¹8âÞü`>¼€/ —2aXOGí2J‡oÜS‡`ö .ÿôJŸLß8€N^NuNVHç*n>. 0SGJ@oB`ôJŸLß €N^NuNVÿüHç*n.. <.-GÿüJ‡o,  f0| .ˆ?N¹ˆTOH€HÀ.€?N¹ˆTOS‡`Ð .ÿüJŸLß ÀN^NuNVHç>®N¹9î*@»üÿÿÿÿfpÿ`F0.`&+n `0 . Ñ­`& - Ю +@`pÿ``J@gÖ°|gذ|gÜ`èÿß -JŸLß N^NuNVÿüHç*n >®N¹9Ì(@Gì -:f" am zn H€Ð|ÿà`H€Ð|ÿÀ€T�BG  o6¾|l0 .g* am zn H€Ð|ÿà`H€"K4GÓÊ@RGR�`Ä .f:R�BG  o0¾|l* am zn H€Ð|ÿà`H€"K4GÓÊ@ RGR�`Ê nf.‹?<N¹ˆTO.‹?.N¹ˆTO>¾|nB@`pÿJŸLß8€N^NuNVHçN¹:$>JGlpÿ`&>‡N¹9n>¼/.?N¹7š\O<>‡N¹:\0JŸLßÀN^NuNVlx in %s : short address overflow in %s library offset = %x : lo68: invalid relocation flag in %s : finalwr: text size error : output file write error : unable to reopen %s : external name: Cannot open Cannot create CDOSUXcdosux%º$¬%%²$ô%b%º$¬%%²$ô%b%ÌB:ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååHç? *n.. (n,.:.BƒJ†o<.Œ?<N¹ˆTO+G..�—?N¹ˆTO8JDg `R‡S†Ùü€Rƒ`À JŸLß0øN^NuNVHçBG¾|l>‡aRG`òJŸL߀N^NuNVHç >®aP*@0.@B+|ÿÿÿÿB­B­ B-Ií м¹Àdü `î м.¹ÀdB`ðJŸLß0N^NuNVHç>.0Áü²Ð¼^ÄJŸL߀N^NuNVHç nepÿ`>®N¹9Ì*@fpÿ` JŸLß N^NuNVHç|BG¾|l0ÀyD0.HÀÛÀ.�N¹n°|ÿÿfpÿ`*yD>0.HÀѹD> JŸLß N^NuNVHç *n(n Jg*Jg&H€>€a*H€>€a ¾op` ¾lpÿ``ÒB@JŸLß0ÀN^NuNVHç. ¾<am ¾<znž< H€JŸL߀N^NuNVHç*nBGJgRG`ø0JŸLß €N^NuNVHç*nBGJgRG`ø0JŸLß €N^NuNVHç?BC..,. J†f#ü€DH <€`p¼‡o #ÇDHB€``J‡l D€.RCJ†l D€,RC¾†fzB‡` x¾†mã†ã„`öB…J„g¾†mŠ„ž†â„â†`î¶|f D€#ÀDH D€`#ÇDH JŸLßøN^NuNVHç *n(MJgRŒ`ø ��JŸLß0N^NuNVHç*n(n &MJgR‹`øÜg`ú JŸLß8N^NuStack Overflow$C runtimeCON:LST:lib6.a?P?V?W`€#߈#ߌOùˆ yŒCùˆ <a" yŒè$�0<"<�NB ÿg 0<"<²NB0<"<�NB @fìAù² (ШШ мм h`fÄJhf¼AùˆCù2Eù�#J"(#A’€�#ABiB9°0<;" NBJ@f|$i %h.i/ /9ˆ/*Aè8Cê8 <ÈaDNu(+ü)+,(,)+œ0üP+\,:„�:p4¨T¢7´2ðV# ,+\£2ðZ#:˜,+p¤6Ä^# ¥2ð`7(,-(,ˆ)¦4¨f7§:˜&Àh , ,C,a,n,n,o,t, ,l,o,a,d,_etext_edata_endÆL¨LLLLäLLLLLLLLLL€ôLLvL€LLLLLLLÆL¨L$LLäLL:LL@LLìl€ôLLvL€ÀÜÀÜÜÜÜÀÜÜÜÜÜÜÜÜÜÜÀÀÜÜÀÜÀÜÜÜÜÜÜÜÀÜÀܺÜÜÀÜܶÜܺÜÜÀÀÀÀÜÜÀÜÀ^œz¾àvvò<<<<<òc.outloxxxxA: Invalid lo68 argument list .o: Illegal option %s .o: unable to open %s : read error on file: %s : file format error: %s : no relocation bits: %s : Invalid symbol flags: %o : %s duplicate definition in %s : symbol table overflow : Unable to open temporary file: %s : asgnext botch : Undefined: : Unable to create %s : seek error on file %s : relative address overflow at %DDT1 68KS€kØQÈÿüNu0< 2<fNB/9ˆNu Cannot load DDT1.68K. $a,d,åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå`¤` .ÿúм¿-@ÿö.®N¹J@f N¹æ`| .ÿö2.ÿþHÁ��R€-@ÿö .ÿú°®ÿöbRN¹|J@fR.®ÿúN¹`>¼ N¹¸>¼ N¹¸=| ÿì-nÿúÿò .ÿúм°®ÿöd .ÿúм` .ÿö-@ÿî .ÿò°®ÿîbp0.ÿþ`4 nÿòH€>€N¹Ž`4 nÿò0>€N¹v`$ nÿò .€N¹```°|gư|gÒ°|gÜ>¼ N¹¸0.ÿþã@R@Ñnÿì0.ÿþHÀÑ®ÿò`† n<ÿì@ÀRnÿìDÀl >¼ N¹¸`ä-nÿúÿò .ÿúм°®ÿöd .ÿúм` .ÿö-@ÿî .ÿò°®ÿîb nÿòH€>€N¹¬R®ÿò`à>¼ N¹¸®ÿú`þ¦ .ÿöR€"n "€N^NuNVÿØ.ŽP—N¹¢.¼3 /—ÿÿÿÜ/P—N¹POJ@g6.®N¹J@g(.® /././././. /—ÿÿÿÜaÞü`N¹æN^NuNVÿÚ.®?<N¹2XTOÀ¼ÿ°¼ÿf.¼3N¹ú`ä-nÿê n -Pÿî-n ÿòBnÿþ.Ž—ÿÿÿê?<;N¹2XTOÀ¼ÿÿ=@ÿè0.ÿè`‚-nÿöÿä n0¼ n"nÿä!i n"nÿä!i  n"nÿä!i n"nÿä!i n"nÿä!i n"nÿä!i n!nÿä n!nÿú n"nÿä ©-nÿúÿàY®ÿà nÿà ®ÿäY®ÿàY® nÿà"n ‘ n!nÿà n!nÿàJ nBh n"nÿä © n"nÿä © nÿäB(\ nÿäB(8BnÿÞ n ÿÞl& nÿä2nÿÞÑÉ| ] nÿä2nÿÞÑÉ| 9RnÿÞ`Ò nÿäB(| nÿäB(X nÿäB(h nÿäB(D`\.¼3(N¹ú`X`L.¼3PN¹ú`H`<.¼3\N¹ú`8`,.¼3qN¹ú`>¼ N¹¸0`4 nÿüH€>€N¹Ž`4 nÿü0>€N¹v`$ nÿü .€N¹```°|gư|gÒ°|gÜ>¼ N¹¸|Sÿ¢.Ž—ÿÿÿ¢?< N¹2XTO>¼ N¹¸ N.ÿ£H�=AÿœHÁÑÁB(ÿ¤Jnÿœot ..ÿ¤fB@`rAîÿ£-HÿžR®ÿž .ÿž @Jg2 nÿž am nÿž zn nÿžH€Ð|ÿà` nÿžH€"nÿž€`ÀAîÿ£-Hÿž.ŽQ—/—ÿÿÿžN¹$XOJ@g` N¹æB@`üR®ÿž .ÿž @  f`î nÿžJf0¾|f .ÿø°¼ÿnJ®ÿøm¾|f .ÿø°¼ÿÿnJ®ÿøl N¹æB@`¦0`€ .ÿø"nÿü€ nÿüH€HÀ".ÿø³€À¼ÿg .®ÿüN¹ø`d .ÿø"nÿü2€ nÿü0HÀ".ÿø³€À¼ÿÿg .®ÿüN¹ø`8 nÿü ®ÿø nÿü ".ÿø³€g .®ÿüN¹ø``°|gÿ|°|g¢°|gÈ0HÀÑ®ÿü`ýÜJŸL߀N^NuNVÿüHç.ŽP—N¹¢.ŽY—/P—N¹$XOJ@f-|ÿü.®N¹J@f N¹æ`„Jnf .® N¹Œ .ÿüS®ÿüJ€g\Jng .® N¹Œ n , F>¾|NBg¾|NCfT† F> F0¼Jü.® N¹0® F0‡` .® N¹1vN¹|J@gB®ÿü`˜ n"n ‘JŸLßÀN^NuNVÿü.®N¹J@g .® N¹¸N^NuNVÿÐ.ŽP—N¹¢.¼3Î/—ÿÿÿÜ/P—N¹POJ@f N¹æ`X.®N¹J@g2 n Pg N¹æ`6 n -hÿØ n (ЮÿØS€-@ÿÔ`d.ŽP—N¹FJ@gL.Ž—ÿÿÿØ/P—N¹$XOJ@g4.ŽP—N¹FJ@g&.Ž—ÿÿÿÔ/P—N¹$XOJ@g.®N¹J@f N¹æ`´.Ž—ÿÿÿÜ?<å`(``J@gþ|°|g²°|g¼°|gÆ`Ô.®N¹¸N^NuNVÿôHç.ŽP—N¹È>.ŽY—/P—N¹$XOJ@g` N¹æB@`޾|g.ÿÿg N¹æB@`t.ŽP—N¹FJ@g.ŽQ—/P—N¹$XOJ@g` N¹æB@`D.ŽP—N¹FJ@g.Ž—ÿÿÿô/P—N¹$XOJ@g` N¹æB@`.®N¹J@f N¹æ`ø .ÿü°®ÿøb0¾|f .ÿô°¼ÿnJ®ÿôm¾|f .ÿô°¼ÿÿnJ®ÿôl N¹æB@`²0HÀЮÿü".ÿøR�°�bž0`z .ÿô"nÿü€ nÿüH€HÀ".ÿô³€À|ÿg .®ÿüN¹ø`^ .ÿô"nÿü2€ nÿü0HÀ".ÿô³€À|ÿÿg .®ÿüN¹ø`4 nÿü ®ÿô nÿü °®ÿôg .®ÿüN¹ø``°|g‚°|g¨°|gÌ0HÀÑ®ÿü`ÿRJŸL߀N^NuNVÿ´.ŽP—N¹¢ n -Pÿ¾.Ž—ÿÿÿº/P—N¹$XOJ@g-nÿºÿ¾Bnÿþ.ŽP—N¹FJ@gP n ÿþm N¹æ`è`:.Ž—ÿÿÿº/P—N¹$XOJ@g N2nÿþÓÉÓÉÑÉ!nÿºÿÖRnÿþ` N¹æ`¬`¢.®N¹J@f N¹æB@`�Bnÿ¸0.ÿ¸°nÿþl4 N2nÿ¸ÓÉÑÉ2nÿ¸ÓÉÓÉ"6˜Ö"A1QÿÂ0nÿ¸ÑÈÑÈ 6ˆÖ @0¼JüRnÿ¸` n ®ÿ¾.® N¹0®Bnÿ¸0.ÿ¸°nÿþl"0nÿ¸ÑÈÑÈ 6ˆÖ @"N4nÿ¸ÕÊÓÊ0©ÿÂRnÿ¸`Ô.® N¹ŒN^NuNVÿô.ŽP—N¹¢.ŽY—/P—N¹$XOJ@gf.ŽP—N¹FJ@gX.ŽQ—/P—N¹$XOJ@gD.®N¹J@g6 .ÿüЮÿø.€N¹`>¼ N¹¸ .ÿü�®ÿø.€N¹`>¼ N¹¸`N¹æN^NuNVHç n PgN¹æ`j n &h*nR�Ië�BJgN¹2XTO.Ž—ÿÿÿÜ?<N¹2XTOÀ¼ÿ°¼ÿf.¼3ÒN¹ú`nB.ÿü .ÿذ®ÿÔnL.®ÿØ?<N¹2XTO.Ž—ÿÿÿÜ?<N¹2XTOÀ¼ÿg.¼3çN¹ú .ÿÔR€-@ÿØ®€ÿØ`ª.Ž—ÿÿÿÜ?<N¹2XTON^NuNVÿü.¼3úN¹ú.®N¹ú.¼4N¹úN^NuNVHç. H€HÀ.€?<N¹2XTO¾< f0| .ˆ?<N¹2XTOJŸL߀N^NuNVHç*nBGJg H€>€a¤RG`ð0JŸLß €N^NuNVHçB‡BF n*PR�H€>€a4J@gH€>€a\HÀ"é�Ð�.RF`ÜS� n � n ‡0JŸLß ÀN^NuNVHç. ¾<0m¾<9o¾<Am¾<FoB@`pJŸL߀N^NuNVHç. ¾<0m¾<9n H€Ð|ÿÐ` `H€Ð|ÿÉJŸL߀N^NuNVHç. ¾< l H€Ð|0`H€Ð|7JŸL߀N^NuNVHç..<. :.¼|m0YF 2â À¼>€a¦¸<0gBEJEgJFf H€>€aþf`ÊJŸLßðN^NuNVÿüBW?< /.aœ\ON^NuNVÿüBW?<0n/a„\ON^NuNVÿüBW?<. H€HÀ/aÿh\ON^NuNVÿþHç. B.ÿÿ¾< m¾<~op.`H€@ÿþ.ŽU—aþ JŸL߀N^NuNVÿü.¼4aþN^NuNVÿü.¼4aýö.®aÿT>¼ aý¤N^NuNVÿüR® nJg n  gB@` `R®`âpN^NuNVHç *n(URŒ  g ,gB@`2  fRŒ`öJfB@` ,gSŒ*Œp`RŒ  fRŒ`öSŒ*ŒpJŸLß0N^NuNVHç*nR• U  fR•`ôS•JŸLß N^NuNVHç *n(URŒ @ Wf~`2t ÂtºNVÿ.HçBG¾|l00Ð|ÐHÀ"N4GÕÊÕÊÓÊ#@ÿ^0Ð| HÀ"N4GÕÊÕÊÓÊ#@ÿ~RG`ÊB®ÿP-|ÿT-| ÿX=|ÿÿÿ\B®ÿ¢B®ÿžBnÿ..ŽP—/—ÿÿÿž/—ÿÿÿ¢/—ÿÿÿ./—ÿÿÿP/.aØÞü.Ž—ÿÿÿªa-@ÿ¦f`ì nÿ¦H€`Ž.Ž—ÿÿÿ¢/.ÿ¦a–XO`�.ŽP—/—ÿÿÿž/—ÿÿÿ¢/—ÿÿÿ./—ÿÿÿP/./.ÿ¦a”Þü`X.®ÿ¦a`L.Ž—ÿÿÿP/.ÿ¦N¹ ÞXO`4.®ÿ¦N¹ `&.Ž—ÿÿÿ./.ÿ¦N¹ ²XO`.Ž—ÿÿÿž/.ÿ¦N¹ @XO`ö.®ÿ¦N¹ j`è.Ž—ÿÿÿ¢/—ÿÿÿ././.ÿ¦N¹@Þü `Â.®ÿ¦N¹r`´>¼/—ÿÿÿž/—ÿÿÿP/.ÿ¦N¹ Þü `ŽBW/—ÿÿÿž/—ÿÿÿP/.ÿ¦N¹ Þü `j.Ž—ÿÿÿ./.ÿ¦N¹ÞXO`T.Ž—ÿÿÿ./.ÿ¦N¹þXO`>.Ž—ÿÿÿP/.ÿ¦N¹XO`(.¼2ÈN¹ú``�|D°|bæå@0@Ñü2t PNÐ`þ:JŸL߀N^NuNVÿü.¼2ÚN¹ú n ( ]g*.®/./././. /./.—\aRÞüN^NuNVHç *n.¼3N¹ú¼R.�?< N¹2XTO>¼ N¹¸-H†JFgÎ M2FÑÉB(IíJg am zn H€Ð|ÿà`H€€RŒ`ÜIíBG  o m ¾FlRGRŒ`ê¾FfB@` JŸLß0ÀN^NuNVÿüN^NuNVÿè.ŽP—N¹È=@ÿþ.Ž]—/P—N¹$XOJ@f$.®N¹J@g n -Pÿú` N¹æB@`è nÿþg .ÿýgR®ÿú.ŽP—N¹FJ@g$.Ž—ÿÿÿö/P—N¹$XOJ@f N¹æÝR`ö•G€.¼3Ž/ —\/P—N¹POJ@g(.ŽP—N¹FJ@g.¼3’/ —8/P—N¹POJŸLß8€N^NuNVÿøHç.ŽP—N¹¢.ŽY—/P—N¹$XOJ@f$.®N¹J@g n -Pÿü` N¹æB@`Ø.ÿÿg N¹æB@`Ä.ŽP—N¹FJ@g&.ŽQ—/P—N¹$XOJ@gBG` N¹æB@`’`-nÿüÿø~.®N¹J@g .ÿü°®ÿøc N¹æB@`dBF .ÿü°®ÿøc JGgT¼| lNN¹|J@fD.®ÿüN¹`>¼ N¹¸#îÿü>„N¹ ’>¼ N¹¸09>€HÀÑ®ÿüRF n ®ÿü`žJŸLßÀN^NuNVÿð.ŽP—N¹¢.ŽY—/P—N¹$XOJ@g` N¹æB@`¤.ŽP—N¹FJ@g.ŽQ—/P—N¹$XOJ@g` N¹æB@`t.ŽP—N¹FJ@g.Ž—ÿÿÿô/P—N¹$XOJ@g` N¹æB@`@.®N¹J@g .ÿü°®ÿøc N¹æB@` .ÿü°®ÿøb nÿô"nÿü‘R®ÿôR®ÿü`âN^NuNVÿÊ.ŽP—N¹¢.¼3–/—ÿÿÿÜ/P—N¹POJ@gü.®N¹J@gì.Ž—ÿÿÿÜ?<N¹2XTOÀ¼ÿ°¼ÿf.¼3šN¹ú`ÀB.ÿü n -PÿØ-n ÿÔ-nÿØÿÐBnÿÎJnÿÎfH .ÿÐм€°®ÿÔn8.®ÿÐ?<N¹2XTO.Ž—ÿÿÿÜ?<N¹2XTOÀ¼ÿ=@ÿή€ÿÐ`²JnÿÎf .¼3¬N¹ú n0¼ n!nÿØ .ÿÐ�®ÿØÐ¼ÿÿÿ€"n#@.®N¹¸ n ®ÿØ`N¹æN^NuNVÿœHç.ŽP—N¹È>.ŽY—/P—N¹$XOJ@g` N¹æB@`\¾|g.ÿÿg N¹æB@`B.®N¹J@f N¹æB@`(.®ÿüN¹` Lf~`~SŒ*Œ.�a¨0JŸLß0€N^NuNVHç *n n B( n B( (URŒ¾<am¾<zo¾<Am¾<Zo¾<0m¾<9oB@`" ,:fH€Ð|ÿÀ"n €TŒ` n BBF¾<am¾<zo¾<Am¾<Zo ¾<0m$¾<9n¼|mB@`Î0FÑî GRFRŒ`¾¼|l0FÑî | RF`êBF¼|l, nJg0FÑî "nQ R®` 0FÑî | RF`Î .gSŒ*Œp`bBFRŒ¾<am¾<zo¾<Am¾<Zo ¾<0m"¾<9n¼|mB@`.0FÑî G RFRŒ`À¼|l0FÑî | RF`êSŒ*ŒpJŸLß0ÀN^NuNVÿü.¼?< N¹2XTOÀ¼ÿÿg.¼?<N¹2XTOp``B@N^NuNVHç *n0`.¼47aû(`BG¾|lªIí0å@HÀÙÀBF¼|l†0`&.¼4[aúö`*.¼4aaúê`.¼4gaúÞ``J@gÖ°|gܰ|gâ0`.¼4laú¼`.¼4taú°` ` J@gâ°|gè.¼4|aú˜.”aûøPŒ.¼4€aú†RF`ÿv>¼ aú6RG`ÿR.¼4„aúh.­aûÆ.¼4™aúV.­aû´`D.¼4¹aúB.­aû .¼4Âaú0 -ЭS€.€aû†``J@gþæ°|gþì°|g¼>¼ aù¾JŸLß0ÀN^NuNVÿü.®aü J@g .® ap`>R® . @ Df.® —/.?<Da’\O` n Af.® —./.?<Aal\O`ìS®.®/<4ÎaÎXOJ@g.® /<4Ña¢XO`À.®/<4Ôa¦XOJ@g4.® X—/<4ØaxXOJ@g n ( f n "n !iJÎ|ÀìG>‡a>¼ N¹¸<9>fÌ|B€p àf9>gg >¹>fWa >¼,N¹¸>†a ò`>¹>fWa V>¼,N¹¸>†a FJŸLßÀN^NuNVHçBE>9>fÎ|ð<9>fÌ|ÀìF¾|°f¼|g¼|f REâF¼|f|>†aT`|>¼ N¹¸>†?9>fW?a´TO>¼,N¹¸>9>fÎ|B€p àgJEg>‡a Ú`>‡aZJŸLßàN^NuNVÿüJnf.¼=½N¹ú` nf.¼=ÀN¹ú` ngaN^NuNVÿü.¼=ÃN¹úN^NuNVHç>.¾|o >‡QWa ``>‡a 4JŸL߀N^NuNVÿüHç<.Ì|8æF>.Î|0`>‡a ` >‡a `>‡a Z`ö>‡a Š`ì>‡a h`âaè>‡a 8`Ô>‡a`ÊB®ÿü0`– y>h=PÿüT¹>hTy>€ y>h=PÿþT¹>hTy>€>¼$N¹¸.®ÿüa 4`~ y>h0HÀ(gˆ¼ÿÿT¹>hTy>€.„a `PaX.¼=ÚN¹ú`@>¼az`6>® a `,`°|bå@0@Ñü: PNÐ`°|bå@0@Ñü:Ö PNÐJŸLßðN^NuNVHç y>h>T¹>hTy>€>¼$N¹¸>‡a šJŸL߀N^NuNVHç y>h>T¹>hTy>€>¼$N¹¸H€>€Wÿa z>¼(N¹¸ nf.¼=ßN¹ú`>®a€>¼,N¹¸0r â`>€Waýî g .¼=ãN¹ú>¼)N¹¸JŸL߀N^NuNVÿøB®ÿü nf y>h=PÿüT¹>hTy>€ y>h=PÿþT¹>hTy>€.¼=æN¹ú.®ÿüaˆN^NuNVÿü3ü>6N^NuNV(N¹¸>®a¤>¼)N¹¸N^NuNVÿü>¼(N¹¸>®a¦>¼)N¹¸N^NuNVÿü>¼-N¹¸>®aÊN^NuNVÿü>®a¼>¼+N¹¸N^NuNVÿü>¼?< /.N¹ \ON^NuNVÿü>¼?<0n/N¹ \ON^NuNVÿü>¼?<. H€HÀ/N¹ \ON^NuHù?ÿ2HùÀ20<2<3Á2P$<1NC#À2L o#Ð2R3è 2VLèÿÿ/92Ryÿ2V?92VNw3ß2V#ß2R|_ÿHùÀ2 .y2,o,¹2R=y2V nÿ Hî?ÿ0<292P$92LNC-y2 F-y2J,y2Lù?ÿ2NuHù?ÿ2HùÀ20<2<$<1žNC#À2LJü\O0<2<$92LNC0<2< 3Á2P$<1NC#À2L y2 h#Ð2R0( @€3À2V"hJNaLèÿ/92R?92VNs0/#Á2p"/NB"92pNu¶Ì(622Nf2222tš¨ÎðUnknown Command DDT-68K Copyright 1982, Digital Research -68KCannot open program file Insufficient memory or bad file header Read error Bad relocation bits Unknown program load error Cannot open file File too big -- read truncated. Cannot create file`x.®/<4Üa^XOJ@g2.® P—/<4àa0XOJ@g n ( g n "n !iJ`0.®/<4äaXOJ@g.® — /<4çaþXO`aúŠ n ( g n "n !iJ` n "n !iJN^NuNVHç*n.¼4êaøZ.•aùº>¼ aø .¼4îaøB.­aù >¼ a÷ð.¼4óaø(.­aù†>¼ a÷Ö.¼4øaø>- >‡aù€.¼4üa÷úg .¼4ÿa÷ê g .¼5a÷Ú.¼5a÷Ð0À|à@>€W0a÷|g .¼5 a÷®g .¼5a÷žg .¼5a÷Žg .¼5a÷~g .¼5 a÷n>¼ a÷$.�—?<Da0TO.�—.?<AaTO#Õ>„N¹ ’>¼ aöìJŸLß €N^NuNVÿüHç*n R� @ 0m< 7n6.�aù J@g,n ÿüUÿýB.ÿþH€å@HÀЮ.€—ÿÿÿ@/Y—aXO`aø¸JŸLß N^NuNVÿü>¼/. /.aPON^NuNVÿü>¼/. /.aPON^NuNVÿ¢Hç *n(n >.BE.�aöv>¼=aö,0`H€>€a÷ô`$>”a÷Ô`.”a÷¶``°|gܰ|gâ°|gä>¼ aõð|Sÿª.Ž—ÿÿÿª?< N¹2XTO>¼ aõÎ.ÿ«H†JFoÒ0FÑÎB(ÿ¬Aîÿ«-Hÿ¢R®ÿ¢ .ÿ¢ @Jg2 nÿ¢ am nÿ¢ zn nÿ¢H€Ð|ÿà` nÿ¢H€"nÿ¢€`ÀAîÿ«-Hÿ¢.Ž—ÿÿÿ¦/—ÿÿÿ¢aõÂXOJ@gJ.®ÿ¢a÷ªJ@g>0`$ .ÿ¦À¼ÿ€`( .ÿ¦À¼ÿÿ8€`(®ÿ¦``°|gÖ°|gÞ°|gæz`.Ž—ÿÿÿ«a÷\J@fa÷ 0JŸLß0àN^NuNVHç. H€>€Hç9>gH‡JGg :GÛù>h` y>h0HÀ*@Ûù>hT¹>hTy>€.¼=éN¹ú.�a&JŸLß €N^NuNVÿü>¼ N¹¸9>fg09>fÀ|r â`>€aüà`>¼aÿ>¼,N¹¸>¼?9>fW?aüæTON^NuNVHç9>fg >¼lN¹¸` >¼rN¹¸<9>fÌ|ÀìF¼|gb>†aü$>¼ N¹¸>9>fÎ|B€p àg9>gg>‡aüJ`JGf~>¼#N¹¸>‡a|>¼,N¹¸>¹>fWaü`>¼ N¹¸>¼?9>fW?aü(TOJŸLßÀN^NuNVÿü>¼ N¹¸>¼?9>fW?aûüTON^NuNVHç09>fÀ|Àì@>€aû`>9>fÎ|B€p àg>¼ N¹¸>¹>fWa€>¼,N¹¸>‡apJŸL߀N^NuNVHç>¼ N¹¸>¹>fWaûN>¼,N¹¸ y>h0HÀ*@Ûù>hT¹>hTy>€.�a0JŸLß N^NuNVHç>9>fÎ|B€p àg<9>fÌ|:9>fÊ|øº|HfPGPF`º|ˆfPF>¼ N¹¸>‡aúÆ>¼,N¹¸>†aú¶JŸLßàN^NuNVÿü>¼ N¹¸>¹>fWaú�N^NuNVÿü>¼ N¹¸>¼aü°N^NuNVÿü>¼ N¹¸>¼?9>fW?aú~TO>¼,N¹¸09>fÀ|r â`>€PWaú0N^NuNVÿü.¼=ìN¹úN^NuNVHç09>fÀ|Àì@>€aù®>9>fÎ|B€p àgJGf~.¼=ûN¹úH€>€a>¼,N¹¸>¼?9>fW?aùâTOJŸL߀N^NuNVÿü.¼=ÿN¹ú>¹>fWaÖN^NuNVÿü>¼ N¹¸>¹>fWaä.¼>N¹ú. File write error. Unimplemented Function: ? Bad or non-existent RAM at ERROR, no program or file loaded. text data bss base length = base page address = initial stack pointer = Start = End = PCPCUSPUSPSSPSSPSTSTPC=USP=SSP=ST==>TR SUP IM= EXT NEG ZER OFL CRYñÀÁÀ;6ñÀÀÀ;;ñðÁ;@ÿøH@ ;EñÁ ;JÿøTÈ ;NÿøUÈ ;SÿøWÈ ;XÿøQÈ ;]ÿø\È ;bÿø^È ;gÿøRÈ ;lÿø_È ;qÿøSÈ ;vÿø]È ;{ÿø[È ;€ÿøVÈ ;…ÿøZÈ ;ŠÿøPÈ ;�ÿøXÈ ;“ÿøYÈ ;˜ÿÀTÀ;�ÿÀUÀ;¡ÿÀWÀ;¥ÿÀQÀ;©ÿÀ\À;­ÿÀ^À;±ÿÀRÀ;µÿÀ_À;¹ÿÀSÀ;½ÿÀ]À;ÁÿÀ[À;ÅÿÀVÀ;ÉÿÀZÀ;ÍÿÀPÀ;ÑÿÀXÀ;ÕÿÀYÀ;ÙñðÑ;ÝñðÑ@;âñðÑ€;çðÐ;ìÿ;ðñP;õðÀ;úÿ;þðà<þÀàÀ<ÿ`< ÿd< ÿe<ÿg<ÿl<ÿn<ÿb¼ aôÊBG¾|l*>¼ aôº n .€aöVX® ¾|f>¼ aôœRG`Ð>¼ aô�JŸL߀N^NuNVHç *n(n aö JŸLß0N^NuNVHç *n(n Jg RŒH€°f`ðJf.Œaö J@gp``B@JŸLß0N^NuNVHç 9>„T€#À>h3ü>€ y>„3Ð>f*|5&0Ày>f°mgÛü `ê.­N¹úJmm mnJmgô0-`Øa`äa`Üap`ÔaÖ`Ìa°`Äa.`¼aª`´aú`¬aJ`¤a`œa$`”ax`ŒaÈ`„a *`|a B`ta T`la ’`da ž`\a `Ta `La ^`Fa z`@a `:a Z`4a ª`.a À`(a à`"a L`a n``°|bå@0@Ñü:N PNÐ>¼ N¹¸` >¼?N¹¸JŸLß €N^NuNVÿü.¼=œN¹úN^NuNVHç>9>fÎ|B€p àg09>fÀ|À°|Àf.>¼aN¹¸|09>fÀ|À°|Àf|.¼=ºN¹úPG`<9>fÌ|ÀìF>†aj>¼ N¹¸¾|n 9>ff$>†?9>fW?a¼TO>¼,N¹¸>‡a~`">‡av>¼,N¹¸>†?9>fW?aˆTOJŸLßÀN^NuNVHç<9>fÌ|0¼|fBG`¼|0f~`¼| f~`a>‡aÆ>¼ N¹¸>‡?9>fW?a(TO>¼,N¹¸09>fÀ|r â`29>fÂ|ÀæA€A<>‡?aöTOJŸLßÀN^NuNVHç>9>fÎ|ÀìG>‡aT>¼ N¹¸>‡aÎ>¼,N¹¸>‡?9>fW?a¦TOJŸL߀N^NuNVHç>9>f y>h0>€a~T¹>hTy>€N^NuNVÿü9>gg .¼>N¹ú>¼ N¹¸9>fg(>¼?9>fW?aù.TO>¼,N¹¸.¼;aF`@09>fÀ|8°| f .¼:öa,`.¼;a">¼,N¹¸>¼?9>fW?aøÚTON^NuNVHç y>h<T¹>hTy>€*nzÿBG¾|lB0À]g(JEf >¼/N¹¸º|g>‡aø^>¼-N¹¸z`º|f >‡SWaøBBERG`¸º|f .¼> N¹úJŸLß àN^NuNVHç9>gg .¼> N¹ú>¼ N¹¸>9>fÎ|€¾|€f09>fÀ|r â`>€a÷Ô>¼,N¹¸ y>h<>†aè>¹>fWal¾|f>¼,N¹¸09>fÀ|r â`>€a÷ŠT¹>hTy>€JŸLßÀN^NuNVÿü.¼>N¹ú>¹>fWÿa >¼,N¹¸09>fÀ|r â`>€a÷8N^NuNVÿü09>fÀ|Àì@>€aöÎ>¼ N¹¸09>fÀ|r â`>€a÷>¼,N¹¸>¼?9>fW?a÷TON^NuNVÿü09>fÀ|Àì@>€aöxaN^NuNVÿü>¼ N¹¸>¼?9>fW?aöÎTON^NuNVHç>9>fÎ|JGf.¼>N¹ú` >¼ N¹¸>¼?9>fW?aöˆTO¾|f.¼>N¹ú`¾|f .¼>N¹úJŸL߀N^NuNVÿü09>fÀ|À°|Àf .¼>"N¹úaû\N^NuNVHç>9>fÎ|9>gg.¼>%N¹ú>‡aL`.¼>-N¹ú>‡a:.¼>1N¹úJŸL߀N^NuNVÿü>¼DN¹¸>®N¹Þ>€N¹¸N^NuNVÿü>¼AN¹¸>®N¹Þ>€N¹¸N^NuNVÿü>¼€8s_mytpr¡>`s_mytc¡>di_snrt¡>fs_odt¡>he_ysbmfu¡>lt_odt¡>pf_ysbmlo¡>te_rrlfg¡>~d_tonic¡>€s_ysfmgl¡>‚d_to¡>„s_ysbmlo¡>ˆt_ysm¡>�s_ysvmla¡>šs_myubf¡>žs_myeln¡>¢s_fefagl¡>¤s_feafrd¡>¦t_xestmy¡>¨dxaddxaddaddiaddqandandiasasbrabccbcsbeqbgebgtbhibleblsbltbmibnebplbvcbvsbsrcmpimovepmovepmovepmovepbchgbchgbclrbclrbsetbsetbtstbtstchkclrcmpmcmpmcmpmcmpacmpaeorcmpdivsdivueoriextjmpjsrlealinklslsmovemovemovemovemovemovemmoveqnbcdnegnegxnopnotororipearesetroroxroroxrtertrrtssbcdstopsubxsubxsubxsubsubisubqtastraptrapvtstunlk*unknown instruction*illegal instruction format # .l.b.l **illegal size field (PC)PC,.l#$ $unknown opcode #$ #$,#$.lA7.l #$ SR,,CCR,SR.l.l USP,.l ,USPr_aecdmo¢²m_ian¢i_int¢hd_silpya¢Ze_mcd¢Žf_limlme¢l_aopdmg¢úc_elna¢Rg_codm¢ Þh_xeamht¢ i_cnmolt¢ ²d_sisam¢ @m_vomeme¢ jr_aefdl¢@s_teemm¢rt_arec¢ v_mcd¢Þw_trifel¢þd_muym¢Žh_xehcra¢Þg_teofmr¢Èp_tuhcra¢¸s_ottu¢úg_teehx¢$i_hsxe¢th_xeavl¢¨p_tuehx¢ p_tuehlx¢`p_tuehwx¢vp_tuehbx¢Žp_tuybet¢¬b_da¢æb_daarm¢øn_moroe¢g_teesp¢Fd_bealkn¢¢p_raes¢k_yeiht¢|s_ohvwla¢¸e_aximen¢s_ohswat¢Œp_aderg¢Øc_pm¢ Rp_erlg¢:p_erwg¢Rp_erlgor¢Ôp_erg¢jt_yrlfga¢ 4o_tpba¤5&n_ion¢"i_fn1¢""i_fn2¢#†i_fn3¢"ôi_fn4¢#Öi_fn5¢$\i_fn6¢'ài_fn7¢(8i_fn8¢(�i_fn9¢)Ti_fn01¢)zi_fn11¢)Öi_fn21¢*.i_fn31¢*˜i_fn41¢*¸i_fn51¢*Òi_fn61¢+i_fn71¢+,i_fn81¢+ši_fn91¢+¼i_fn02¢,i_fn12¢-$i_fn22¢-Ði_fn32¢.i_fn42¢.fi_fn52¢.‚i_fn62¢.¨i_fn72¢/i_fn82¢/Bp_nitsr¢ ’p_srzie¢$òp_trpo¢%np_trerg¢%Bb_daisez¢%.p_irmm¢'|p_rapid¢0"p_rd¢/–p_ra¢/ºp_rai¢0p_rapii¢0:p_drsip¢&ªp_irdnxe¢&àh_xezls¢0Rh_xezws¢0nh_xezbs¢0Œi_instvs¢'Ðr_gesm0k¤:ör_gesm1k¤;p_tulrsi¢,œp_rdi¢/ÞG_O¢0®S_ETP¢1vB_ODS¢2Xs_vsla¡>6l_ubf¡ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÆRD`ô0|.ˆ?<N¹PüTO:RE…J9 Lgp `|`B@`t0ÀüмÍLB�29 PÐ� @ (:fn0y P2ÂüÒ¼ÍL0H€:0Ð|ÿÀ€Ty P0ÀüмÍLB�29 PÐ� @Jf(Iíx¸| bÆRD`ôJ9 Lgp `ð`B@`è`0|.ˆ?<N¹PüTO:RE…(MRŒx¸|b$0ÀüмÍLB�29 PÐ�.€aþF:ÅRD`Ö0ÀüмÍLB�29 PÐ�.€aýòJ@fRy P`Ø0y P2ÂüÒ¼ÍL0H€HÀr.°�f2Ry Px¸|b$0ÀüмÍLB�29 PÐ�.€aýÌ:ÅRD`ÖBCx¸| b B�2Ð� @ ?fRCRD`ä0JŸLß0øN^NuNVÿøHç?>.BCBnÿøB.ÿþ0CÑüÍLJ(g0CÑüÍL (:gRC`Þ0CÑüÍL (:f¶|gBW/<ÍfaùvXOB@`8J9Í€g.¼ ,?< N¹PüTOB@` 9:Ígf( 9AÍfm 9PÍfoBW/<Ífaù$XOB@`æ.¼Ðp?<aý TO9ÐpH€Ð|@=@ÿú.¼Ðp?<N¹PüTO<¼|ÿf.¼Ÿª?< N¹PüTO8ëLRDBE¼|ÿgVJGg0DÑüÍ´( fJGf80DÑüÍ´( f(J.ÿþga÷DB.ÿþJEfB€0.ÿú.€?<N¹PüTO`"=|ÿø.¼Ðp?<N¹PüTO<8ëLRD`†ëNRF0|:.ˆ?<N¹PüTO0| .ˆ?<N¹PüTOv¶| b>¶| f0| .ˆ?<N¹PüTO |Í´0`H€À|HÀ.€?<N¹PüTORFRC`¼0| .ˆ?<N¹PüTO.¼Ðp?<N¹PüTO<¼|ÿgHRE8ëLRDº|f6BEJGg0DÑüÍ´( fJGf0DÑüÍ´(`Ntž+‚PÿÿNùPºNùP´COPYRIGHT (C) 1982, Digital Research B9P Où©ÂN¹—Ö3ÀžtN¹xú0<29žtAÿNB0< 9žtNBOù©ÂN¹q¾`ò0/"/NBNu"<žŒ0<?NB#ùžŽžz#ùž’ž~#üÐpžvp;"<žvNBJ@f†29 Rp NBB�"9ž‚Ò|€"ApNB |ÏðB€ØØQÈÿü/<Ðp?<N¹W`\�B€p\av/<Ðp?<N¹W`\�B€p8a\ yž†"yž‚/)@À@_?! !<QúN`Ns @f"<ž«`" @f"<žÔ` @f"<žñ`"<ž–p NBpNBйž‚ @"|ÐpB€p#ÙQÈÿüNuNVÿü0| .ˆ?<N¹PüTO0| .ˆ?<N¹PüTON^NuNVHç *n(n JgH€°op`H€°lpÿ`R�RŒ`ÞJfB@`pÿJŸLß0N^NuNVHç *n(|Î8Jg \gÝ`òBJŸLß0N^NuNVÿüHç0|ÿ.ˆ?< N¹PüTO<0|.ˆ?<N¹PüTO>Þ|Aaÿ,JFgB¼| e|1ÿüœ| 0Ð|0@ÿý|$ÿþ`0Ð|0@ÿü|$ÿý.ŽY—?< N¹PüTOB€0.€?<N¹PüTO0|>.ˆ?<N¹PüTOJŸLßÀN^NuNVHç *n>. ¾|faÿ<(MJg \gRŒ`òJGf ü?BJg \gH€HÀ.€?<N¹PüTO`àJGf L…SŒ†`aþNJŸLß0àN^NuNVHç*nBG faö.`|ÿþ`þ¦Jnÿøg.aöJGg.¼ŸD?< N¹PüTO`.¼ŸH?< N¹PüTOJŸLßøN^NuNVHçJ9Íff".¼Ÿ^?< N¹PüTO>¼/<Ífaù"XOJ9Í€g.¼ ,?< N¹PüTOB@`@BG0GÑüÍLJ(g0GÑüÍL (:gRG`Þ0GÑüÍL (:f.¾|f 9AÍfm 9PÍfoBW/<Ífaö‚XOB@`Þ.¼Ðp?<aújTO>JGf”J9ÍfgŠ.¼Ðp?<N¹PüTO°|bp.¼Ðp?<N¹PüTOJ@fXBG¾|bN0H@B@H@мÍ´ @ g |Í´0pH€HÀ.€?<N¹PüTO`.¼Ðp?<N¹PüTOB@`:RG`¬`’`2J9Ífg*JGc.¼Ÿ´?< N¹PüTO`.¼Ÿª?< N¹PüTOJŸL߀N^NuNVÿÜHçBDJ9Íff^.¼Ÿp?< N¹PüTO>¼/<Íša÷†XOJ9ÍšfB@`Â.¼Ÿ‚?< N¹PüTO>¼/<Ífa÷VXOü=Í€`pBG0GÑüÍL (=g0GÑüÍLJ(gRG`Þ0GÑüÍL (=f0GÑüÍLJ(fx 9=Íffx0GÑüÍL (=f0GÑüÍLJ(g J9Í€gx0GÑüÍLJ(f 9=Í€f J9Í�gx0GÑüÍLJ(f 9=Í€fJ9Í�f J9Íšfx0GÑüÍLJ(f 9=Í€gx0GÑüÍLJ(f J9Í€fx0GÑüÍLJ(fJ9Í€g 9=Í€g J9ÍšgxJDfJ0GÑüÍL (=f:0GÑüÍLB(RGBF |ÍL0pH€2FÓüÍL@NRGRFJ@g`Þü=Í€JDf J9ÍfgJ9Íšgö.Ž—ÿÿÿÜ?<a÷ŠTO>.¼Ðp?<¾|d80Àü @"|Ÿ.°˜/ aþDXOJ@f0Àü @"|Ÿ00˜`~RG` 9:ÍMf4J9ÍNf,J9Íff$9ÍLH€Ð|ÿ¿m9ÍLH€Ð|ÿ¿°|np`:.¼ÐpBgaöTOJ@cpÿ`$ 9SÐyf 9UÐzf 9BÐ{fp`pJŸLß €N^NuNVHç *n(|ÏñJg  g \gR�`ì  fR�`öBGJg \gÝRG`ðÇÏðB \f.Jg*ü N  fR�`öJ9 Fg#Í V`#Í Z`ZJ9 FgLJ9 Jf#üÏn V.¼Î8aœü N`$B9 FB9 DB9 B y ZJgü N`B9 NJŸLß0€N^NuNVHç *n.. S€Þ€ü€Í´.¼Í´?< N¹PüTOJ9͵gaüX9͵H€À|ÿHÀмÍ´ @| (|Ͷ  fRŒ`ö  g2»Çd. am zn H€Ð|ÿà`H€À  f  fRŒ`ö`ÈBJŸLß0€N^NuNVHç*n \gJgR�`ò \g  fR�`ð JŸLß N^NuNVHç *n(|ÍLBG¾|hdBRG`ôBGJgb \g\¾|dVBF \g,  g&Jg"¼|d0ÀüB�2Ð�мÍL @•RFR�`ÎB€02ÂüÐ�мÍL @BRG  fR�`šJŸLß0ÀN^NuNVHç*n  o .g :fp``B@JŸLß N^NuNVHç*n *fp?`.�a¶J@f Ry PH€`p JŸLß N^NuNVHç? >.*n Bv ¶|#b B�2Ð� @BRC`êv¶| b B�2Ð� @¼ RC`èJ9 Lg<?`< By P(M0ÀüмÍLB�29 PÐ� @Jf>RŒx¸| ba÷xTO<JGf¸JFf²J.ÿÜm . ÿÜoxJDf..Ž—ÿÿÿÜ?<N¹PüTO°|ÿg.¼Ÿ”?< N¹PüTO`lBE~¾|#b"0H@B@H@мÐp @"N•Ê4EÓÊ©ÿÜRERG`ØJ9Ðpm 9ÐpoxJDf(.¼Ðp?<N¹PüTOJ@c.¼Ÿª?< N¹PüTO`.¼Ÿ´?< N¹PüTOJDg.¼ŸÌ?< N¹PüTOJŸLßðN^NuNVHçJ9Íff".¼Ÿ^?< N¹PüTO>¼/<Ífaô|XOJ9ÍffB@`¬J9Í€g.¼ ,?< N¹PüTOB@`Œ.¼Ðp?<aöTO>JGcBJ9 Ff:.¼ŸÜ?< N¹PüTO>¼/<Í€aôXO 9NÍ€g 9YÍ€gB@`2 9NÍ€g(.¼Ðp?<N¹PüTOJ@c.¼Ÿª?< N¹PüTOJŸL߀N^NuNVHçJ9Íff".¼Ÿì?< N¹PüTO>¼/<ÍfaóˆXOJ9Í€g.¼ ,?< N¹PüTOp`| 90Ífm 99ÍfoB@`b9ÍfH‡Þ|ÿо| cB@`LJ9Ígg0Àü >9ÍgH€Þ@Þ|ÿо|dJ9ÍhfB€0.€?< N¹PüTO`B@`3Ç RpJŸL߀N^NuNVÿü9ÍLH€Ð|ÿ¿3À TB€09 T.€?<N¹PüTON^NuNVHç0|ÿ.ˆ?< N¹PüTO3À RBFB9 L.¼ÐpBgaôXTO> 9 Ðyfö 9 Ðzfê 9 Ð{fÞü6Ðyü8ÐzüKÐ{.¼Ðp?<N¹PüTO°|b|`¦0|.ˆ?< N¹PüTO.¼Ðp?<N¹PüTO°|b|`vü Ðyü Ðzü Ð{B€09 R.€?< N¹PüTO.¼Ðp?<N¹PüTO°|b|`,0|H@мÏn @BRG`ä`D0H@B@H@мÎÞ @ g.0H@B@H@мÎÞ @JgJGc0H@B@H@мÏn @¼\RG=DÿþJFgÖBEJGcr0H@B@H@мÎÞ @ g0H@B@H@мÎÞ @Jf0H@B@H@мÏn @B`SG0H@B@H@мÏn @B0H@B@H@мÎÞ @ fü J`B9Ïn0H@B@H@мÎÞ @Jg(0H@B@H@мÎÞ @2HABAHAÒ¼ÎÞ"A‘RDRE`Ä0H@B@H@мÎÞ @B0<ÿ`À` RD`0H@B@H@мÏn @Bü J`æ0R@°|€e ¾|€d0H@B@H@мÏn @BRG`ä`¼0R@=@ÿþJFgnBERD0H@B@H@мÎÞ @Jg(0H@B@H@мÎÞ @2HABAHAÒ¼ÎÞ"A‘RDRE`Ä0H@B@H@мÎÞ @B0H@B@H@мÏn @BRG0<ÿ`ô0H@B@H@мÏn @2HABAHAÒ¼ÎÞ"A‘RDRG``HÀ | br °˜WÉÿü h$NÐ`øðJ9 JgB9ÎÞ0<ÿ`š`–zJEc"0H@B@H@мÏn @ \g n€ÿþdSE`ÚJEfB9ÏîB9ÎÞ`Z0H@B@H@мÏn @BBE n€ÿþd,0H@B@H@мÎÞ @2.ÿþHABAHAÒ¼ÎÞ"A‘RnÿþRE`Ì0H@B@H@мÎÞ @BJŸLß0øN^NuNVHç*nBG¾|€d0H@B@H@мÏn @BRG`äJ9 BfJ9 DgBG¾|€d0H@B@H@мÎÞ @BRG`äBF~J9ÎÞg>‡?/ a÷\O<¼|ÿf‚.¼Í´?<N¹PüTOBG¾|€d`0H@B@H@мÏn @ am(0H@B@H@мÏn @ zn |Ïn0pH€Ð|ÿà` |Ïn0pH€2HABAHAÒ¼Ïn"A€RG`šB@`Î.¼ÎÞ?<J9Ìãg"J-gS--H†Ì|ÿ5`H€>€aü€` >®ÿþ/ aþRXO`о<fJ9ÌâgB@`pÀÌâ`²¾<f>®ÿþ/ aþXOJ-fî`–¾<f >®ÿþaýÎ`„¾<f>¼#aü>®ÿþaý´B-`f¾<f8>¼#aûø>®ÿþaý˜BF-H€À|ÿ¼@d>¼5`H€?aü>TORF`Ü`(>¼H€"M-H‚Ä|ÿHÂÓÂ@?aüTOR-`þxJŸLß0àN^NuNVHç.¼sp?<"?<N¹s¨XOB9Ìàü$ÌáB9ÌâüÌãB¹Ìæ>¼ N¹‹V>¼N¹s¾*@ -#ÀÏb#ÀÏj -йÏb#ÀÏ^#ÀÏf.¼ÍN¹•fJŸLß N^NuNVÿü09¡RF@Áy¡PBy¡RBy¡TJngB@À NÀ F#ùÏbÏj#ùÏ^Ïf.¼ÍN¹•f>¼N¹s¾N^NuNVÿü0.`:.¼ üN¹v`B.¼¡N¹v`4.¼¡N¹v`&.¼¡,N¹v``J@g°|gʰ|gÒ°|gÚ.¼¡>N¹v9ÌêH€>€WAN¹tŠ>¼aÿ N^NuNVHç*n>UG¾| g¾|!fpÿ`F¾|m ¾|%nž|`JGm¾| opÿ`&0GÑÈÑÈÑüÌà+h$0GÑÈÑÈÑüÌà!m$B@JŸLß €N^NuNVHç*n-g.#íÏj#íÏf-g#ùÏjÏb#ùÏfÏ^`+yÏj+yÏfJŸLß N^NuNVÿîHç>.yÌêÿñJGg,|ÿî0S@@ÿïp.ÿñH�ã`Ày¡Rg >¼N¹yì` |ÿîB.ÿï-nÿò-n ÿø-yÌîÿü.Ž—ÿÿÿîN¹�Ž<JFgBWN¹yì0JŸLßÀN^NuNVÿüBW/9Ìò0n/aÿbPON^Nu.ˆ?< N¹PüTO.¼Ðp?<N¹PüTO°|b|`H.¼Ðp?<N¹PüTO°|b|`,0|.ˆ?< N¹PüTO.¼Ðp?<N¹PüTO°|b|JFg4JGf0.¹ ^að>0|.ˆ?<N¹PüTO3À Tü @N¹QB€09 R.€?< N¹PüTOü LB@JŸLßÀN^NuNVÿÜHç>.BE0|ÿ.ˆ?< N¹PüTO8¾|f8J9Íff0.¼Ÿ^?< N¹PüTO>¼/<Ífað€XOJ9Íff0`:.Ž—ÿÿÿÜ?aò. <.=|€ÿþBDJ9 Hg˜BD¸|€d00H@B@H@мÎÞ @ g0H@B@H@мÎÞ @  gRD`ʸ|€d*B9 H0H@B@H@мÎÞ @  fTD`ü J`*.¼κ?<N¹PüTOJ@gB9 Hü JB9Ïn`ÿbJ9 Jf ¾|€d¸|€dú |ÎÞ0@H€`и|€d00H@B@H@мÎÞ @ g0H@B@H@мÎÞ @  gRD`ʸ|€f&0H@B@H@мÎÞ @  g=|€ÿþü H`,0H@B@H@мÎÞ @  fTD=Dÿþ`ü JB9 H`TJGc,¸nÿþg&0H@B@H@N¹PüTO.¼κ?<N¹PüTOJ@gü JB9 HB9ÏnBGJ9 Jf >‡?/ aö2\O.¼Í´?<N¹PüTOBG¾|€d`0H@B@H@мÏn @ am(0H@B@H@мÏn @ zn |Ïn0pH€Ð|ÿà` |Ïn0pH€2HABAHAÒ¼Ïn"A€RG`šJŸLß ÀN^NuNVHç*n.�aã`ÜBWaèÊ`æ>¼aè¾`ÚaëX`Òaìê`Êaïî`ÂaðÚJ@f.¼ ?< N¹PüTO`¤añ’`œ|` añ¶J@fŽBF>†aóŠJ@g$J9 Ff ü B`ü Dü F`\¼|gVBG |ÍL0pH€RGJg`ìSG0°| bBW/<ÍLaáÚXO`BW/9 ^aáÊXO``°| b¸å@0@Ñü ² PNÐJŸLß ÀN^NuNVHçü L.¼Í´?<N¹PüTOJ9 @g2B€09 T.€?<N¹PüTOB€09 R.€?< N¹PüTOB9 @J9 Ng*J9 Fg*y V`*y ZB9 N>¼/ aáXO`*aàh*|P J9P f>¼€/<P aãXO`B9P Jgì#Í ^.�aãâJ9ÍLg .¼ÍLaþJ9 Ff .�aãŒ*@`¦J9 Bg4.�aßÐ*|Ïn.¹ ^aãh#À Z.¼Î8aüB9 BB9 D`.J9 Dg.�aß”*|Ïn.¼Î8aûÚB9 D`.�aã*@Jf6J9 Jg*y ZB9 FB9 BB9 D``*|Ïn.¼Î8aû’`ÆJg >¼/ aàXO`ÿJŸLß N^Nu @>g,Hçþ @2g/??N¹‹VHÀPOLßþNs A0LØNC`îW Ns$/` 4/`"/`2/0/HçNCLßxøNu/áH/Nu/ o /NVHç>.>¼/9Ìò0G/aÿ>PO< yÌö¾h d0HÀ"yÌî")Ð�/a _€0JŸLßÀN^NuNVHç*yÌòB‡| Þ�SFJFfø râ Þ€ à€Þ€ À¼ÿJŸLß ÀN^NuNVHç?*n >.(yÌö8<ÿg 09ÌúR@`B@<g0,` yÌî0(¼@bÖ0À|f†:äM>…aþüºl dtB€0"yÌî")Ð�&@gaÿF€`Raÿ>°gJ yÌî1lvB€9ÌêH€ák0Ày¡Tg‡y¡R`0F@Áy¡P9ÌêH€>€N¹~ö`ÿ~3ÆÌú?0À|ëHH@B@H@йÌò// nN�Þü J@ggBD`0À|`RF`ÿ0JŸLß8øN^NuNVHç>.0<€2Â|â`? yÌî (2æIHABAHAÐ� @‚_�JŸL߀N^NuNVHç>.JGg.0<€2Â|â`F@? yÌî (2æIHABAHAÐ� @Â_�JŸL߀N^NuNVHç yÌö<( yÌî*hBG¾Fb*0æH5H€F2<€4Ä|äaÀAg >‡aÿ40`RG`ÒpÿJŸLß ÀN^NuNVHç*n H€À|ÿ°|lV yÌî1nBG yÌö hd5pH€>€WÿN¹}šRG¾|oæ`0GÑÈ>µˆN¹sÎ>€N¹}šRG¾|oâJŸLß €N^NuNVÿîHç. 09¡PH�âhF@Ê<¾9ÌêfJgtB.ÿîH€@ÿñÀÌêH€À|ÿ°|o >¼N¹yìH€r³@@ÿï.Ž—ÿÿÿîN¹�Ž#îÿüÌîf >¼N¹yì yÌî#è Ìò yÌî#èÌöJgP yÌö<(>†N¹}Ü0SFJ@fð yÌî*h yÌö:¨ >¼B§/<~|N¹|pPOpH�ã`мÏn @2HABAHAÒ¼ÎÞ"A‘RDRG0H@B@H@мÎÞ @  f ¸|€dRD`à`RD¸|€dö0H@B@H@мÎÞ @ 0m®0H@B@H@мÎÞ @ 9n– |ÎÞ0@H€6Ö|ÿÐ(M Sf& Uf Bf Mf If Tf  fRC(MzºCb  gJgRŒ`ò  fRŒRE`â  g&Jg" \g¾|€d0H@B@H@мÏn @œRG`ÔRD`¦0H@B@H@мÎÞ @Jfb.¼ÎÞ?<N¹PüTO.¼κ?<N¹PüTOJ@g4ü J0H@B@H@мÏn @¼$RG0H@B@H@мÏn @B`ÂBD`þÈ0H@B@H@мÏn @¼$RG0H@B@H@мÎÞ @ $fRD`ŠRD¸|€d€0H@B@H@мÎÞ @ ^f*0H@B@H@мÏn @2HABAHAÒ¼ÎÞ"A‘RDRG`¢0H@B@H@мÎÞ @  m@0H@B@H@мÎÞ @ ?n* |ÎÞ0@H€Ð|ÿà2HABAHAÒ¼Ïn"A€RDRG`L0H@B@H@мÎÞ @ @m@0H@B@H@мÎÞ @ _n* |ÎÞ0@H€Ð|ÿÀ2HABAHAÒ¼Ïn"A€RDRG`ö0H@B@H@мÎÞ @ `m@0H@B@H@мÎÞ @ n* |ÎÞ0@H€Ð|ÿ 2HABAHAÒ¼Ïn"A€RDRG` 0H@B@H@мÎÞ @Jfd.¼ÎÞ?<N¹PüTO.¼κ?<N¹PüTOJ@g4ü J0H@B@H@мÏn @¼^RG0H@B@H@мÏn @B`ÎBD`þJ`&0H@B@H@мÏn @2HABAHAÒ¼ÎÞ"A‘RDRG`œJFg0`D`RD`Š0H@B@H@мÎÞ @  g0H@B@H@мÎÞ @  f ¸|€dRD`ʸ|€e¾|€d0H@B@€ï 0ÀH@0€ _NuNVÿüJ9Ìàgp` >¼N¹s¾N^NuNVHçB>¼N¹s¾J@gX>¼N¹s¾¾<f >¼N¹yŒ¾<f<`,¾<fB`"¾<fJ9ÌâgB@`pÀÌâ`ÇÌàJf¨JŸLßÀN^NuNVHç. aÿxH€>€?<N¹sºTOJ9ÌâgH€>€?<N¹sºTO¾< mRyÌä`¾< fByÌä` ¾<fSyÌäJŸL߀N^NuNVHç. ¾< f>¼ aÿz09ÌäÀ|fì`"J. g¾< l >¼^aÿXŽ<@H€>€aÿJJŸL߀N^NuNVHç9ÌàB9ÌàJgH€` >¼N¹s¾JŸL߀N^NuNVHçaÄH€>€aþø¾<fJ9ÌâgB@`pÀÌâH€JŸL߀N^NuNVHç>.¾|ÿfaÿ|`"` ¾|þfaþ``>‡Wÿ?<N¹sºTOJŸL߀N^NuNVHç*nH€°9ÌágBWH€?aþÖTO`äJŸLß N^NuNVHç>.>¼ aþF>¼ aþ>JGg >¼ aþ2SG`ðJŸL߀N^NuNVHç*nJ-gS--H†Ì|ÿ`BF>. 0SFJ@g& M2FÑÉ(º< fPGÎ|ÿø` º< lTG`RG`Ò¾yÌäd>¼aý¾>¼ aý¶>¼aý®`ÞJŸLß àN^NuNVÿþHç *n=yÌäÿþJ¹Ìæg\ yÌæH€<Ì|ÿR¹ÌæH…Ê|ÿºFd<FIíJFg">¼ yÌæH€À?aý®TOR¹ÌæSF`ÚB¹Ìæ`�B--H€À|ÿH�Â|ÿ°Altaý̾<f"J-f>¼?<aý^TO>¼N¹yŒ`B¾< g¾< f>¼ aüÌ`.`&¾<f>®ÿþ/ aþ’XO`¾<f:�y¡PJŸLß àN^NuNVHç *n(n >.0SGJ@gÝ`ôJŸLß0€N^NuNVHç *n(n ~  ?H€H�³@À|gJgB@`LSGJGfÜJ.g> ?g H€H�³@"yÌö)H�FÀAgB@`T�TŒH€H�³@À|?gB@`pJŸLß0ÀN^NuNVHç*n>¼/. / aÿbPOg0- >¼ / /. aÿ POG -€p9ÌêH�ã`�y¡TH€JŸLß ÀN^NuNVÿüHç*n(n >¼/ / aÿPOJ@g GíAì-Hÿü yÌö hd:~ nÿüJgJg nÿüH€°f¾` nÿü�` nÿü“R‹R®ÿüSGJGfÊ`6~ nÿüJPgJSg nÿü0°Sf†` nÿü6�` nÿü0“T‹T®ÿüSGJGfÌ.�N¹ˆð<, H…Ê|¼Eb¼Ef"-H€À|ÿ,H�Â|ÿ°Ao mF m - g >¼N¹yì0.ä@>€N¹{äp`p9ÌêH�ã`�y¡RB@``B@JŸLß8àN^NuNVÿê|ÿî.Ž—ÿÿÿîN¹�ŽJ@gBWN¹yì n(gB@`BW/./<�N¹|pPON^NuNVÿüpN^NuNVÿü>¼/. /.aýzPON^NuNVHç*n>. ?f$9ÌëH€>€aü(>‡/ /<‚ˆN¹|pPO<`..®N¹�B -? gB- B->‡/ /<‚’N¹|pPO<>¼€/9Ìü/9ÌòaüÎPO0JŸLß ÀN^NuNVHç*n(n >. ågB@`pgPGí|BSFJFfø>¼ / / aü‚PO0ä@>€N¹{ä yÌî¾hc yÌî1Gp9ÌêH�ã`�y¡TH€JŸLß8àN^NuNVHç *n(n >.BW/ / aüJPOgj, g T>¼N¹s¾`F>†?<N¹sºTO`(.�N¹v`.�N¹vê`N¹sò`0< "` By¡PBy¡RBy¡TüÿÌêB9Ìë`ÚH€>€N¹~öÆÌë`Ä.Ž]—aÒB- B-BW/ /<€¤N¹|pPO:`œ.Ž]—aª.�N¹‚<:`†#ÍÍ.Ž]—Bg/ N¹‚¬\O:`j*yÍ-Mÿü.Ž]—?</ N¹‚¬\O:`H.Ž]—aV>¼/ /<ƒ¸N¹|pPO:`&.Ž]—a4BW?</ N¹‰ \O:`.Ž]—aBWBg/ N¹‰ \O:`ì.Ž]—aúB- B- B-B->¼/ /<ƒ6N¹|pPO:`º.Ž]—aÈ>¼/ /<„TN¹|pPO:`˜09¡P`š9ÌëH€À|ÿ`Š#ÍÌü`tp9ÌëH�ã`�y¡R`^09¡R``.Ž]—ab>¼/ /<„ÊN¹|pPO:`2>¼/ /9ÌöN¹ôPO`0À|ÿ°|bÆÌì9ÌìH€À|ÿ`.Ž]—a>¼?</ N¹‰ \O:`Ø.Ž]—aæ>¼Bg/ N¹‰ \O:`º.Ž]—aÈ.�N¹…æ`¦.Ž]—a´.�N¹…P`’0F@<Íy¡PÍy¡RüÿÌêBE`r.Ž]—a€>¼Bg/ N¹‰ \O:`T>†N¹†V`J#ùÌüÌæBWN¹yŒ.�N¹�¾`:.�N¹zr`0.�N¹zâ`pÿ`"`°|?bôå@0@Ñü¡V PNÐJ.ÿûg®ÿú0JŸLß àN^NuNVHç *n(mH€€Jg H€>€SW` 9ÌëH€>€N¹~ö¹Ìì|JŸLß0€N^NuNVÿüHç*nBGH€`ôí©Ä-H€>€9©ÄH€??< N¹s®XO+@`â-H€°9©ÄgBW-¢£#ü—ôŒB€Nu @låH {N�Ns—Ö˜l˜�˜¦˜¾™™™(™Ö™n™Ø™à™üšš˜Ø™è™üš–šžš¬šJš¶B9¢…B9¢£B¹¢¤aÖvÿâš3â–â›NùPî9g <ÿNuB€Nu9gö9À¼Nu?aˆ29göÁNu9¢„À¼À9g´9gª <ÿNu9¢„À<Àg9gö9gìÁNu9¢„À<Àg9gö9gì9Nu< aÿp< aÿhNugaÿ^`öNup²<d^Á¢�ÂüAù¤ÑÁ gH @"(’¼£”‚üCù¤ñ¢…9¢…²<eB@`Kù¢¤9¢�’<J5faNuBA3Á¢”NuÁ¢‘NuJ‚g BHÁ0HÀ`0Nu#Á¢ˆNu9¢…aDJ@f B"AaRNuÁ¢†a,J@f A"Ba:ü¢£9¢†²<faNuB€J9¢£g:9¢šž<¾<j*ù¢š¢ 3ù¢–¢’ù¢›¢¡üªahB9¢£Nu <¢°Nu9¢„À¼ÿNuÁ¢„B€Nu�ÿåI A  ‚Nu9ÀgöÄÁNuAùª9Àgö9ÀgùÁ`äNu9ÂgöNuaòxa¸aÈ9ª9¢ ’<¹AÂ|fàø  g9ªg |¢çaäNutxaÿv9¢ ˜<aÿha¦WÊÿèNutxaÿX9¢ ˜<aÿJaÿDa‚WÊÿâga¼Nu<aÿ09¢ ˜<aÿ"aÿ09ªÊ<Nu<Jaÿ 9¢ ˜<aþüaÿ.aÿNu&@ù¢�¢ a>¼N¹yì¼å0ä@>€N¹{ä yÌö hd|SF4`H€>€WÿN¹}ÜJFfè`|SF0FÑÈ>´ˆN¹sÎ>€N¹}ÜJFfäH€JŸLß0àN^NuNVÿüHç*n(n >.BW/ / aû®POgD, g >¼N¹yìGíAì-Hÿü| H€À|"nÿü€R®ÿüSFJFfè0ä@>€N¹{äH€JŸLß8àN^NuNVHç *n(n >.BW/ / aû8POg>¼ / R—/ R—aúøPO0ä@>€N¹{äH€JŸLß0ÀN^NuNVHç*n- H€À|HÀï€-H�Â|?HÁt å¡€�JŸLß N^NuNVÿüHç*n.�aº- H�Â|ÿHÁÐ�-@ÿünÿý!nÿþ"nÿÿ#JŸLß N^NuNVÿüHç *n(n BW/ / aúxPOg*.Œaÿh,H�Â|ÿHÁÐ�-@ÿünÿý!nÿþ"nÿÿ#H€JŸLß0€N^NuNVÿøHç*nB®ÿüBGB®ÿø>‡/ /<…ŽN¹|pPO°|ÿd&m!ÿùm"ÿúm#ÿû .ÿø°®ÿüo-nÿøÿü~`Ânÿý!nÿþ"nÿÿ#JŸLß €N^NuNVHç. H€>€aøŽB‡ yÌî*hBFBD yÌö¸hb,JFf <<€0F@:0ÀFg yÌö(H€R@HÀÞ€âNRD`È yÌü ‡JŸLß ðN^NuNVHç *n(yÌö,H†- H€,H�ÀAr’Fã`>0- H�Â|ÿ4äaÐAJŸLß0ÀN^NuNVHç*n>. Jng0GÑÈ>µˆN¹sÎ` ` 5pH€À|ÿJŸLß €N^NuNVHç*n>. <.-Jng M2GÓÉÑÉ/?N¹sÎTO _1@` M2GÑÉFJŸLß ÀN^NuNVHç>. *yÌöB€0.-H�HÁã -H�. H‚ÂBHÁÐ�,>‡/9Ìü/N¹{>POJŸH€À©Ä??< N¹s®XO(m&l.ŽY—?/-N¹sÚ\O>®ÿü0+ÑW?< N¹sºTO.”?.ÿþ?<N¹s¨XO>€?< N¹sºTO.­ ?< N¹s´TO f>¼ N¹s¾>`-H€>€?<N¹sºTO>`*>¼N¹s¾>`J@gÿ °|gÿ0°|gÿ(°|gÖ0JŸLß8€N^NuHçþ o<d y`©ÆgQG3Ǫ3üª$y©ê$9©ÈBƒ69ª¶‚m&a�`H”ƒaŠ&<€´ƒm" aý„aýpJAfV”ƒÕü€`äJ‚g"9©öaýdaýPJAf63ê&aÿH$y©î$9©ÌSyªf’$y©ò$9©ÐgBÿfa¨<aÿzaÄ~&49ªÄ|üÿf9ªAù¢¨9¢ ž<ƒpAù¢¬…pAù¢¤¼ÿp(Æü JgÖ|Ö¼£”Èüؼ¤ö"D&‘'C Nu~$9¢ ž<<9¢’gCù¢¨1pg9@ª&ÆüÖ¼¥"CAùª9¢¡å ŽÇù¢“ù¢¡üÂÙÙÙNuAù¢�ØÂØÂØÂAùªvaýâQËÿøaþaýèNu#ü¬à¢Œ<9¢’aþbaÿRz a°89ªÈ|øÿ˜|@€g,<È<g |¢çaú`Ì<g |¢òaèQÍÿÈpNupNu9¢…B€B‡B†B…B„9¢�Ç¢�ž<<9¢”B9¢žCù¢¬J1pg:Ê|Å¢žâN3Æ¢˜Cù¢¨1pÞ<¾9¢šf¼y¢–fº9¢›gLaü†ù¢�¢ 3ù¢˜¢’ù¢ž¢¡üªaÿù¢ ¢š3ù¢’¢–ù¢¡¢›t9¢‘SBÄü€Ô¼¬à"9¢ˆNuaû6 |£aû,9¢ Ò|Aaú‚aû |£aûaúP€< °<rfùþaúêNut"ØQÊÿüNu Program Load Error$ insufficient memory or bad file header$ read error on program load$ bad relocation information bits$ Ú Þ  ã è ì ð õÿÿNON-SYSTEM FILE(S) EXIST$Enter Filename: $Enter Old Name: $Enter New Name: $File already exists$No file$No wildcard filenames$Bad file name$Confirm(Lß ÀN^NuNVHç*nJng,-!H€é@-"H�èA€A-"Ì<ã-#gŒ<`-Î<?- R¼< mBR¾<@mp`šH€-H�Â|?°Af*H€- H�³@"yÌö)H�FÀAÀ|fF B@`\.�N¹‚<°|ÿep`JGF BW/ /<€¤N¹|pPO°|ÿe(J. gp` >¼/ /<ƒ6N¹|pPO°|ÿep`B@JŸLß ÀN^NuNVHç *n~Ií J$fSGJGfö yÌö hÿcâOB€p"yÌö)H��Aào0"yÌö)H�F- H‚ÂBÂ|€AJŸLß0€N^NuNVHç*n.�aˆ>- H€¾@f-H€À|ÿ``- H€¾@c0<€``B@JŸLß €N^NuNVÿüHç? *n. yÌö6(Æ|ÿJf- g >¼N¹yìJng0>¼H€?/ aþ\O=@ÿþg0.ÿþ`T-#H€À|@ `& -€ fBWH€?/ aýÎ\OJ@gp`"B- mÿü.�aÿ- H�Â|ÿ°AbJgp`ú-- H€R@@ÿü.�aüZ:>ƒ?/ aü˜\O<JFgJgB@`p8`ŽJgp`´N¹~$<¼|ÿÿfp` >†??/ aü’POx nfV(yÌü#ùÌòÌü:<€SE0HÀйÌü @BJEfìBE yÌö(H€º@n>„H€??aüŽXOxRE`Ú#ÌÌü>„- H€??aüpXO=@ÿþJnÿþfnÿüJnfR- 0.ÿþJŸLß0øN^NuNVÿúHç>.<. *n B.ÿû-MÿüBE0` BWN¹yŒN¹u~`®BWH€?N¹tøTO`Ž>¼N¹s¾`ŒH€>€?<N¹sºTO`jH€>€?<N¹sºTO`T>†N¹u¼`S‚fúNupNu>GãONûp``"` ````` pNu‚JZNuÂJZNu‚f<ÜE4ÆNuJb,Ü…$ÆNu"9©öaüÎ.9©þŽü€<HG69ª–GlC€RF&y©öÖü€–ÃâK` aüŒJAfÿrQÎÿô*9©ê$Eš¹©Ü(9©È3üªB‚âL`SCjaüXJAfÿ>&y©ö6<?aÿ4S„J„fÞ$y©î(9©ÌSyªfÄNu!y©ö .9©úÞ¹©Ø‡!G"y©ö"è"è"ù©ê"ù©È"ù©î"ù©Ì"ù©ò"¹©Ð.(,)ÿüÜ™,|©êzB¹©ò¼–b¾–c.JžQÍÿòž†"Ç$hfpNBR@ÀB€Nupr$<•âHçàNCLßRAX‚ Afr A"gì A#gæ A0mÖpNC @JX"$Ô�&9Ïb(9Ï^p o#Ȫ ²�b´�c¶�b ¸�cB�J˜QÈÿâNua–a’aŽaŠa†a‚a~azavaranajafaba^aZaVaRaNaJaFaBa>a:a6a2a.a*a&a"aaaaaa aaBgH瀀 / �¼•æ @$o @Xm( @tn @0 yª ÐÀJ�f` @(m@0Þüä@ @lLßJ_T@ @oP@?Aù¢Va¢0aÀAù¢ea’ aœAù¢xa‚B€NBNs/P Nh @m(/ fN!/1/N`Lß/o\O—Ns/ f2!/1/!/!/N`Lß/oÞü—Ns?o`?oLßNsB�gpNB`òNu?H@a0?àHa0?èHa0@ @ m02pNBNu |¢ºa„B9Y/N)? $Enter User No: $.SUB file not found$User # range is [0-15]$Too many arguments$ÏnP P  $;\^kŠmkœm"gÒh&g@m@iœmäpÆpÜpäpìpôqqq(qpÐDIRDIRSTYPERENERAUSERSUBMIT Permanent disk$ Disk select$ Disk change$ Read-Only file$ error on drive $‹z‹‚‹Œ‹ ‹®‹Ä‹Ú‹æ‹ôŒŒŒŒ(Œ0ŒTŒjŒ’Œ¨ŒÄŒæ��&�B�t�–� �°��º�Ð�Ú�üŽŽ6ŽVŽtŽˆŽœ��޼�����ŽØŽâ�����������Žô�Žþ�� Exception $ at user address $. Aborted.™™L CP/M-68K version 1.1K Bios version 0 Not ready Write protected on drive Type R to retry, A to abort ¤,¬`£”ª « ¤,¬`£”ª`«p¤,¬`£”ª «À¤,¬`£”ªà¬ò?ÀòÀ 4òÀ 4æÿð@<À 0.ÿî°nÿìmH>® ?.ÿìSWaø²TOHÀйµþ/\—/.N¹H‚PO>®ÿìSWaøŽ>€0. ÑW?.ÿìaø¶TO`®>®ÿîaùt-@ÿô>®ÿîaùh2. HÁÐ�-@ÿø>®ÿîaùº=@ÿê>®ÿìSWaøB�nÿê=@ÿð>®ÿð/.ÿø/.ÿôN¹H‚PO>® /.ÿô/.N¹H‚PO=nÿìÿò0.ÿò°nÿîo">®ÿòSWa÷ø>€0. ÑW?.ÿòaø TOSnÿò`Ô>®ÿê0. ÑW?.ÿîaøTOJn f N¹VJ@f3ü´Z yµþ0("yµþRiRyµúa.¼¦åN¹q N^NuNVÿü yµþ>¨ yµþ0?aTO yµþ>¨ yµþ?(aTON^NuNVÿÜ nÿÿg nÿÿ f`î>®N¹m4-@ÿü>® N¹m4-@ÿø nÿü0(°n f nÿø0°ng .¼¦ìN¹qr.®ÿøaøä?/.ÿüaøÚXOÐ_°|úl`Œ nÿü=hÿä nÿø=hÿâJnÿân .¼¦öN¹qr .ÿø\€-@ÿðJnÿäf .ÿü\€-@ÿìBnÿà`0>®ÿäSW/.ÿüaö˜XOHÀЮÿü\€-@ÿì>®ÿäSW/.ÿüaö|XO=@ÿà>®ÿâSW/.ÿøaöhXO=@ÿè>®ÿè/.ÿì/.ÿðN¹H‚POBnÿê0.ÿê°nÿâl0>®ÿê/.ÿøaö4XO>€0.ÿàÑW?.ÿê0.ÿäÑW/.ÿüaöT\ORnÿê`Æ.®ÿüN¹gÄ.®ÿøN¹gÄ nÿø hÿÿg( nÿø>¨N¹m4-@ÿô nÿô"nÿü0©.®ÿôN¹gÄ 9µþ°®ÿøf#îÿüµþ nÿü0(‘y´P nÿø"nÿü0(Ñi nÿü"nÿø1i0. °y´Lf3î´L.®ÿøa.¼¦þN¹q N^NuNVÿü n1y°2 n3è°2 nBh.®N¹gÄN^NuNVÿò yÿÿ°2g$=y°2ÿö>®ÿöN¹m4-@ÿü nÿü3è°2`Ryµò=yµòÿö>®ÿöN¹mþNVÿöBnÿú0.ÿú°yµøl80.ÿúå@HÀм´\ @-Pÿü nÿü hf.®ÿüaûº nÿü1|Rnÿú`¼N^NuNVÿôJnm 0.°yµòo .¼§›N¹qrBnÿú0.ÿú°yµølB0.ÿúå@HÀм´\ @-Pÿü nÿü hg nÿü0(°nf.®ÿüaùt .ÿü`XRnÿú`²>®aP-@ÿü>®?9´XN¹L–TO=@ÿø nÿÿÿøfaùâ.®ÿü?9´XN¹LÄTO=@ÿø nÿÿÿøfaùÀ .ÿüN^NuNVÿöBnÿú0.ÿú°yµøl(0.ÿúå@HÀм´\ @-Pÿü nÿü hf`Rnÿú`Ì0.ÿú°yµøfa(-@ÿü nÿü1| nÿü1n.®ÿüaø¨ .ÿüN^NuNVÿö yÿÿ´Xf aø*3À´XBnÿú0.ÿúå@HÀм´\ @-Pÿü nÿü0(29µøSA°Af`Rnÿú`Ð nÿü hf.®ÿüaú .ÿü`0 nÿü hÿÿf .¼§¥N¹qr nÿü1| nÿü1|ÿÿ .ÿüN^NuNVÿô=nÿú0.ÿú°n njBnÿø0.ÿø°yµøl<0.ÿøå@HÀм´\ @-Pÿü nÿü0(°nÿúf.®ÿüaù‚ nÿü1|`Rnÿø`¸0.ÿø°yµøf .¼§®N¹qrRnÿú`ŒN^NuNVÿæ.®N¹L:3ÀÁ( yÿÿÁ(fa÷øBy´N=yµüÿî nÿÿÿîgÆ>®ÿîaýh-@ÿü nÿü=hÿî nÿü=hÿò .ÿü\€-@ÿøBnÿìBnÿô0.ÿô°nÿòl„Jnÿôf>®ÿô/.ÿüN¹YÄXO=@ÿð`*>®ÿôSW/.ÿüN¹YÄXO??.ÿô/.ÿüN¹YÄ\O�_=@ÿðJnÿðg" nÿø2nÿì0�H€=@ÿêRnÿì>®ÿêaVSnÿð`Ø>¼ aJ>¼ aDRnÿô`ÿt`ÿ4>¼a2a„>¹Á(N¹Lj>¹µüaüŒ#Àµþp3À´P3À´JN^NuNVÿü09´NHÀм°4 @® Ry´N y€<1ÿð@@+À @Wÿð@£,£F£`£z     %&'()*+, -. /0  12!"34#$!"#$1234%&'(5678 )*+,9:;<  -./0 12345678 !"#$%&'(9:;<=>?@)*+,-./0¤,¤F¤z¤¶€ÿÿ5ÿåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå-@ÿü nÿü"yµþ1i nÿü"yµþ0© yµþ1nÿö nÿü hÿÿg$ nÿü>¨N¹m4-@ÿø nÿø0®ÿö.®ÿøN¹gÄ nÿüBh.®ÿüN¹gÄ .ÿüN^NuNVÿâaÿ8-@ÿü.¹µþN¹gÄ.®ÿüN¹gÄ09´J�y´P=@ÿè yµþ=hÿò09´J�y´P°nÿòo0.ÿò` 09´J�y´P=@ÿð0.ÿò�nÿðlB@`0.ÿò�nÿð=@ÿîN¹PJ@fP>®ÿèaõ,=@ÿæ 9µþ2.ÿæHÁÐ�\€-@ÿô .ÿü\€-@ÿø>®ÿòSWaó–�nÿæ=@ÿê>®ÿê/.ÿø/.ÿôN¹H‚POBnÿì0.ÿì°nÿîl*>®ÿì0.ÿðÑWaó^>€0.ÿæ‘W?.ÿì/.ÿüaóœ\ORnÿì`Ì nÿü1nÿî yµþ1nÿð yµþ0(°y´Lf nÿü3è´L .ÿüN^NuNVÿü.¼§N¹L|.¼§N¹L:3À´X yÿÿ´Xf .¼§ a’>¹´XN¹Lj>¼/<§8N¹LRXO3À´X09´XN^NuNVÿô n=hÿøBnÿú0.ÿú°yµøl80.ÿúå@HÀм´\ @-Pÿü nÿü0(°nÿøl nÿü0("nÿüRiRnÿú`¼ nBhN^NuNVÿü.®N¹O| yµðfN¹Ux>¼ÿÿ/<¯úN¹šðXON^NuNVÿü.¼§EaÀN^NuNVÿü.¼§]a°N^NuNVÿü n1|N^NuNVÿú09¶R@°n l>® SW?9¶RWaTO09¶°n o09¶`0. 3À¶>® ?9´XN¹L–TO=@ÿþ nÿÿÿþfaÿj>¼/.?9´XN¹M\O°|gaÿJN^NuNVÿø-|°4ÿü09µòS@"nÿü2€09µòR@"nÿü3@09´J�y´P"nÿü3@Jnl .¼§nN¹qrRyµò3ù´J´P>¹µòSW/<°4aÿXON^NuNVÿü n hÿÿ´Nf(>¼/<°4?9Á(N¹M\O°|gaöšBy´NN^NuNVÿüJy´Nf`">¼/<°4?9Á(N¹M\O°|gaö`N^NuNVÿü>¼BgN¹C€TOaa^.¹µþaúN^NuNVÿü.¼§¸/.N¹FÐXON¹IÄaº.¼¯úN¹šðN^NuNVÿô yµþ=hÿúN¹[”=@ÿþ ¹ÿÿûúµþgJy´Jm09µúR@°y´Jl.¼§ÆN¹O|.®a‚Jnÿúm núÿúlJnÿþl.¼§ØN¹O|.®aÿ\Bnÿü0.ÿü°nÿúl<>®ÿüN¹Y®=@ÿøJnÿøm0<ú�nÿþ°nÿøl.¼§êN¹O|.®aÿRnÿü`ºN^NuNVÿê n=hÿð .\€-@ÿüBnÿîBnÿö0.ÿö°nÿðl,>®ÿö/.N¹YÄXO=@ÿò0.ÿò�nÿî=@ÿø>®ÿò?.ÿø?.ÿî?.ÿöRW/<§ü/<©ÈN¹wzÞüJnÿøl`Ú n2ÿøm.¼¨+/<©ÈN¹wzXOBnÿô0.ÿô°nÿølŒ nPÿôl‚0nÿô"nÿü4nÿîÓÊ0˜H€À|=@ÿú n ÿúf.¼¨-/<©ÈN¹wzXO`> n ÿúl>®ÿúW@/<¨//<©ÈN¹wzPO`>®ÿú/<¨3/<©ÈN¹wzPORnÿô`ÿl.¼¨6/<©ÈN¹wzXO=nÿòÿîRnÿö`þÌN^NuNVÿöBnÿú0.ÿú°yµøl¢0.ÿúå@HÀм´\ @-Pÿü>®ÿú/<¨8/<©ÈN¹wzPO nÿü>¨ nÿü?( nÿü0?/.ÿü/<¨C/<©ÈN¹wzÞü.®ÿüN¹[¤>€ nÿü?( nÿü?( nÿü?(/<¨q/<©ÈN¹wzÞüRnÿú`ÿTN^NuNVÿü>¹µú?9´J?9´P/<¨œ/<©ÈN¹wzÞü >¹µò?9°2?9´L?9µü/<¨º/<©ÈN¹wzÞüN¹[”>€ yµþ?(=Pÿö yµþ=hÿô yµþ=hÿò-yµþÿøJnÿòf> yµþBh.®ÿøN¹gÄ nÿÿÿôg>®ÿôN¹m4#Àµþp3À´J3À´P`Ú nÿÿÿôg\>®ÿôN¹m4#Àµþ3ù´J´P yµþ0®ÿö.¹µþN¹gÄ>®ÿöN¹m4-@ÿü nÿü1nÿô.®ÿüN¹gÄ.®ÿøa¼`t nÿÿÿög`>®ÿöN¹m4#Àµþ yµþ0(‘y´P yµþ0(Ðy´P3À´J yµþ1nÿô.¹µþN¹gÄ3îÿö´L.®ÿøaT` .¼¦ÌN¹qr0.‘yµúN^NuNVÿè09´J�y´P=@ÿð yµþ=hÿî>®ÿð0.ÑWaüT-@ÿü>®ÿðaüH-@ÿø>®ÿð0.ÑWSWaû0??.ÿîSWaû$TO�_=@ÿô>®ÿô/.ÿø/.ÿüN¹H‚PO>®ÿðaüj??.ÿð0.ÑWaüZTO�_=@ÿì0.ÿî�n=@ÿò=nÿðÿö0.ÿö°nÿòl&>®ÿö0.ÑWaú¾>€0.ÿì‘W?.ÿöaúæTORnÿö`Ð0."yµþ‘i0.‘yµúN^NuNVÿú yµþ1n.¹µþN¹gÄ yµþ=hÿþ nÿÿÿþg>®ÿþN¹m4#Àµþ3ù´J´P0. ‘yµúN^NuNVÿôN¹PJ@g n¼ B@`t>¹´J09´P‘Waû-@ÿø>¹´J09´P‘Waúj=@ÿþ0. S@°nÿþo0.ÿþ`0. S@=@ÿü>®ÿü/./.ÿøN¹H‚PO .2.ÿüHÁÐ� @¼ 0.ÿþN^NuNVÿæ nú o .¼¦ÓN¹qraûj2. TA°Al@a$-@ÿüaûT2. TA°Al* yµþ0(Ñy´P#îÿüµþaû.2. TA°Alaèaû2. TA°Al .¼¦ÜN¹qr.¹µþN¹gÄ09´J�y´P=@ÿî yµþ=hÿìJnÿìf(>® /9µþ\—/.N¹H‚PO>® BgaùTO`f .¼§vN¹qr n>¨/.aþÔXON^NuNVÿìN¹Ux yµþ1|BW/.N¹LRXO3ÀÁ( yÿÿÁ(f .¼§aþ*3üµðaýX3ü´J3ü´Ppÿ3À´L3ÀµüByµò-|°:ÿø3ü´H3ùµø¶B@=@ÿö3Àµô3üø¶p3À´P3À´JJy¶nZJnÿöfT.¼§�N¹O|>¹µô?9´J09´P‘W/<°4N¹Z\ORy´J>¹¶aþbB@=@ÿö3Àµô3üø¶`nJy¶nf09µôT@�nÿöÑy¶>¹¶aþ(>¹µô0.ÿö‘W/.ÿø .ÿø2.ÿöHÁÐ�/N¹H‚PO09µô�nÿö3ÀµôBnÿö0<ø�yµô3À¶at=@ÿô nÿôf^09µô°nÿög2>¹µô?9´J09´P‘W/<°4N¹Z\ORy´J=yµôÿö`Ty¶ yú¶g >¹¶aýv`v`n n ÿôf8>¹µô?9´J09´P‘W/<°4N¹Z\OUy¶Ry´J=yµôÿö`. n ÿôf`þx` 0.ÿô29µôHÁÒ®ÿø"A€RyµôSy¶`þR>¹Á(N¹LjJyµòfN¹Ux`v-|°4ÿü nÿü1|ÿÿ>¹µòSW/<°4aü4XOSyµòByµü3ùµò´LN¹PF09´JS@3Àµú3ü´J3ü´P>¹µüaL#ÀµþByµðN^NuNVÿü y´HfF09µøS@°y¶naTB@3À¶3À´H` Ry¶By´H09¶å@HÀм´\ @#ÐÁ* yÁ*2y´H0�H€À|Ry´HN^NuNVÿøBnÿþ0.ÿþ°yµøl^0.ÿþå@HÀм´\ @#ÐÁ*.¹Á*?9Á(N¹LÄTO=@ÿü nÿÿÿüfaúú nÿül0.ÿüï@HÀйÁ* @¼`Rnÿþ`–N^Nu yµþ?( yµþ0?/9µþ/<¨ã/<©ÈN¹wzÞü yµþ>¨ yµþ?( yµþ?(/<©/<©ÈN¹wzÞü N^Nu0/2/NBNu0/"/NBNuNVÿ†HçN¹”¼BW/<›�N¹†ÄXO>¼/<›�N¹†ÄXO>¼/<›�N¹†ÄXO-|›…ÿˆ .2. HÁÐ� @B=|ÿ†*nJgJgH€HÀмª¬ @gR�`äJgøBG 2HÁÐ� @JgN5pH€HÀмª¬ @f85pH€HÀмª¬ @g 5pH€Ð| `5pH€" 4HÂÒ‚"A€RG`¤J5pg 2HÁÐ� @BRG f0>¼N¹‚ŒBWBg/ R—N¹ƒ¤\O°|g.�R—/<©AaPXO` N2nÿ†ÓÉÓÉÑÉ!MÿˆRnÿ†ÚÇ`þä N2nÿ†ÓÉÓÉÑÉ!|ÿˆ.Ž—ÿÿÿˆ?.ÿ†N¹¶TOJŸLß €N^NuNVÿü.®N¹šF>€/.?<N¹�Œ\O.® N¹šF>€/. ?<N¹�Œ\O>¼/<©P?<N¹�Œ\O>¼ÿÿN¹~¤N^NuNVÿü.Ž—/. /.N¹wšPON^NuNVýäHç*nBnýè n H€R® J@gÞ¾<%g.®H€?N¹€TORnýè`ÎB.ýæ n ¾<-@ÀR® DÀf n R® R.ýæ| ÿö¾<0fGÿö n R® =|ÿÿýð¾<*f-Mÿø nÿø=PýðT� n R® `8¾<0m2¾<9n,JnýðlBnýðH€2.ýðÃü ÐAÐ|ÿÐ=@ýð n R® `È=|ÿÿýî¾<.fBnýî n R® ¾<*f-Mÿø nÿø=PýîT� n R® `.¾<0m(¾<9n"H€2.ýîÃü ÐAÐ|ÿÐ=@ýî n R® `ÒB.>¼/-?N¹‡Î\O;@ Jm n mÿÿ fm0`m pÿ`Sm +m mH€À|ÿR­JŸLß N^NuNVÿþHç. *n BF:-fpÿ`$-fTJ­fN>¼N¹—+@+@fm`2m>•N¹”†J@gm@`;|þ H€"m€R­`È-gAîÿþ+H +@ m‡R­-gz>…/-?N¹�Œ\O<Bm `n-g>¾< g -м°­b" -�­:>…/-?N¹�Œ\O<+mBm `( -�­:>…/-?N¹�Œ\O<;|ÿ +mºFg mpÿ`H€À|ÿJŸLß àN^NuNVHç>®N¹•D*@»üÿÿÿÿfpÿ`îH€À|g>®N¹”Þ>®N¹–€B@`Êg8f2 -°­ l>¼B§?.N¹„¸\O>¼/<›™?.N¹�Œ\Og>>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`F.�—?<N¹ˆTO°|ÿf3üª¨3ù«4ªªpÿ`>®N¹”Þ>®N¹–€B@JŸLß N^NuNVÿüBW?. /.a4\ON^NuNVÿüBW?. /.a\ON^NuNVÿü>¼?. /.a\ON^NuNVHçN¹–6>JGlpÿ`š>‡N¹”Þ0Áü²*@Ûü¶Jnf.¼›�/.N¹›XOJ@f 0`Z`.¼›”/.N¹›XOJ@f0`:>¼/.?N¹’Ì\OJ@g>‡N¹–€3ü#ª¨3ù«4ªªpÿ`0JŸLß €N^NuNVÿüB—BgN¹ˆTON^NuNVHç>®N¹•D*@»üÿÿÿÿfpÿ`d0.`6+n N¹ˆTO.þÿH†HÆÌ¼ÿ¼…l0| .ˆ?<N¹ˆTOGîÿJ‡o J†oÛS‡S†`ðJ‡oü R‹ "Ò¼ÿÿÿ��JŸLß8àN^NuNVHçN¹–6>JGlpÿ`&>‡N¹”Þ>¼/.?N¹’Ì\O<>‡N¹–€0JŸLßÀN^NuNVÿôHç*n :.HÅ>®N¹•D(@¹üÿÿÿÿfpÿ`äJ…nB@`Úg3ü ª¨3ù«4ªªpÿ`¼g>¼// a†PO`¤g>¼// anPO`Œf.…/ / a†PO`v-EÿøBJ…oj ,î€-@ÿôB®ÿü ,°®ÿôgJgD>¼"/</ —2/,/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ` ÿ¿ ,À¼gJ ,°¬ l@>¼!/</ —2/.ÿô/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`²)nÿô ,À¼-@ÿü&L×îÿü×ü2, м²·Àd"J…o  f ¾< g< `S…ÇR¬`Ò Ð¼²·Àe2>¼"/</ —2/.ÿô/ N¹•¢Þü°|g .ÿø�†`$`@J…f ,°¬ o)l .ÿø``þ”JŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼gT -°®ÿüg°gD>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`"ÿ¿ -°­ lB>¼!/</ —2/.ÿü/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`Ô`>¼€/ —2aÌXO+nÿü "-¼Ð�&@×ü2 м²·Àd J‡oÜS‡`êJ‡n$@ .ÿôÑ­ -°­ o+m .ÿô`f>¼ýä¾<lg¾<LfR.ýä n R® Aîýò-HÿòH€`�R.ýäJ.ýäg <|` <|Â#À¯Ö.¹¯Ö?<?< /—ÿÿýò/ N¹{¨Þü J.ýägp`pHÀÛÀ`RR.ýäJ.ýäg <|` <|Â#À¯Ö.¹¯ÖBg?< /—ÿÿýò/ N¹{¨Þü J.ýägp`pHÀÛÀ`R.ýäJ.ýäg <|` <|Â#À¯Ö.¹¯ÖBg?</—ÿÿýò/ N¹{¨Þü J.ýägp`pHÀÛÀ`®R.ýäJ.ýäg <|` <|Â#À¯Ö.¹¯ÖBg?</—ÿÿýò/ N¹{¨Þü J.ýägp`pHÀÛÀ`\-Mÿü nÿü-PÿòX�`L-Mÿø nÿø0À|ÿ@ýòB.ýóT�`2.®H€?N¹€TORnýè`ý`HÀ |©Rr °˜WÉÿü h0NÐ.®ÿòN¹šF=@ýì0.ýî°nýìl Jnýîm=nýîýì0.ýð�nýì=@ýêJ.ýæfZ .0ÿöf, nÿò -f"Snýì.® nÿòH€?N¹€TOR®ÿòRnýè0.ýêSnýêJ@o.®.ÿöH€?N¹€TO`ÞRnýè0.ýìSnýìJ@o.® nÿòH€?N¹€TOR®ÿò`ØRnýè0.ýêSnýêJ@o.®.ÿöH€?N¹€TO`ÞRnýè`ü0.ýèJŸLß €N^NuNVHç /<¯Ú?.?./— /. nN�Þü*@»ü¯ÚfB(n »ü¯Úg%H‡¾| lp0`p7Þ@Ç`âB JŸLß0€N^NuNVHç*n<.HÆ n. nfzJ‡gJEg À¼Àè‡SE`è`j nf&z J‡gJEg À¼Àæ‡SE`èJEf-ÿÿ`®N¹…^HÀ+@ - Ю +@`pÿ`*`J@gư|gȰ|gÌ`èÿßJ­l+|ÿÿÿÿ -JŸLß N^NuNVÿü>¼B§?.aÿb\ON^NuNVHç>®N¹•D*@»üÿÿÿÿfpÿ`<H€À|gB€`,.�—?<#N¹ˆTOJ@g3üª¨3ù«4ªªpÿ`ügÜJ­.oÎ -.S€.¾­gˆgD>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`–ÿ¿>¼!/</ —2// N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`T+G -ï€+@Ií2Gí²¹Ëd gRŒ`ò " Ò¼2��Ñ­`B­` -.ï€+@+m  -JŸLß8€N^NuNVÿüBW?. /.a4\ON^NuNVÿüBW?. /.a\ON^NuNVÿü>¼?. /.a\ON^NuNVHçN¹–6>JGlpÿ`¤>‡N¹”Þ0Áü²*@Ûü¶Jn fJnf.¼›�/.N¹›XOJ@f 0`Z`.¼›”/.N¹›XOJ@f0`:>¼/.?N¹’Ì\OJ@g>‡N¹–€3üª¨3ù«4ªªpÿ`0JŸLß €N^NuNVÿøHç*n :.HÅ>®N¹•D(@¹üÿÿÿÿfpÿ`vgB@`jg3ü ª¨3ù«4ªªpÿ`Lg.…/ / N¹‹¶PO`4f.…/ / a.PO`-EÿøJ…o.,¬g„gD>¼"/</ —2/,/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`Àÿ¿>¼!/</ —2// N¹•¢Þü°|g .ÿø�…"/</ —2/.ÿü/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`&R®ÿü î€-@ÿøJ®ÿøo<>¼"/.ÿø/ /.ÿü/ N¹•¢ÞüHÀ".ÿø°�g3üª¨3ù«4ªªpÿ`Ø .ÿøï€ž€ .ÿøï€ÙÀ .ÿôÑ­ -°­ o+m J‡f .ÿô`¤g>>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`^@ -î€+@ -°­ l$>¼!/</ —2/-/ N¹•¢Þü`>¼€/ —2aXOGí2J‡oÜS‡`ö .ÿôJŸLß8€N^NuNVHç*n>. 0SGJ@oB`ôJŸLß €N^NuNVÿüHç*n.. <.-GÿüJ‡o,  f0| .ˆ?N¹ˆTOH€HÀ.€?N¹ˆTOS‡`Ð .ÿüJŸLß ÀN^NuNVÿüHç*n 0.Áü²(@Ùü¶Gì -:f*H€HÀмª¬ @g H€Ð|ÿà`H€Ð|ÿÀ€T�BG  o>¾|l8 .g2H€HÀмª¬ @g H€Ð|ÿà`H€"K4GÓÊ@RGR�`¼ .fBR�BG  o8¾|l2H€HÀмª¬ @g H€Ð|ÿà`H€"K4GÓÊ@ RGR�` + fpÿ`2 nf.‹?<N¹ˆTO.‹?.N¹ˆTO>¾|nB@`pÿJŸLß8€N^NuNVHç *n>. zÿN¹–6<JFlpÿ`f>†N¹”Þ0Áü²(@Ùü¶>¼/ ?N¹’Ì\OJ@fBE.Œ—?<N¹ˆTO>†N¹–€JEfB@``3üª¨3ù«4ªªpÿJŸLß0àN^NuNVHç>®N¹•D*@»üÿÿÿÿfB@` fB@`pJŸLß N^NuNVHçBG¾|l>‡aRG`òJŸL߀N^NuNVHçJ‡l D€. n  @¼-"n R‘`μÿÿJ‡g.†/N¹šjXO. 9«,À`ä JŸLß ÀN^NuNVÿüBW/. /.a4PON^NuNVÿüBW/. /.aPON^NuNVÿü>¼/. /.aPON^NuNVHç*n(n BG0Áü&@×ü©º0+À|g ¾|lRG`Þ¾|mB€`è wg Wf.H€>€?</ N¹ƒè\O<`~ ag AfH.H€>€?</ N¹‡\O<JFl.H€>€?</ N¹ƒè\O<`>¼B§?N¹„¸\O`( rg Rf.H€>€Bg/ N¹‡\O<`B€`BJFlB€`:Bk 6†B@HÀ'@'@ rg Rf7|`7|J.fk JŸLß8ÀN^NuNVÿüN¹~¼>®N¹„¤N^NuNVHçBG¾|l0Áüм©º.€N¹~îRG`âJŸL߀N^NuNVHç*n0-À|g*.�N¹F-g .­N¹˜B@HÀ+@+@Bm mÿ€>•N¹‚ŒJŸLß N^NuNVHç*n0-À| °|f. -�­<JFo >†/-?N¹�Œ\O>¼Gg mpÿ`2-gJ­g-g;| `;|ÿ `Bm +mB@JŸLß ÀN^NuNVHç*nSm m mH€À|ÿR­` `.�N¹€HJŸLß N^NuNVHç. *n Sm mH€"m€À|ÿR­``.�H€?N¹�>TOJŸLß €N^NuNVHç*n-fpÿ`Ô-g m pÿ`ÀJ­f&-f>¼N¹—+@fm`m-g0HÀм¯ê+@»ü©ºf9©Ëg .¼©ÈN¹F-g>¼``ˆ)G ,À¼-@ÿü&L×îÿü×ü2 м²·ÀdDJ…o@¼<f ,°¬ o)l .ÿø�…`4`¼< fR‹R¬` ÆS…R‹R¬`°`þþ ,°¬ o)l .ÿøJŸLß8àN^NuNVÿôHç*n(n ..-Gÿô -î€-@ÿü -À¼gî -°®ÿüg’gD>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`´ÿ¿>¼!/</ —2/.ÿü/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`p+nÿü "-¼Ð�&@×ü2 м²·ÀdJ‡o ÛS‡R­`æJ‡f -°­ o+m .ÿô`R®ÿüB† î€-@ÿøJ®ÿøo>¼!/.ÿø/ /.ÿü/ N¹•¢ÞüHÀ,Ý®ÿü ï€Ñ­ € ï€ÙÀ -°­ o+m ¼®ÿøg .ÿô�‡`°J‡f .ÿô`¤gB>¼"/</ —2/-/ N¹•¢Þü°|g3üª¨3ù«4ªªpÿ`^ÿ¿>¼!/</ —2/.ÿü/ N¹•¢Þü°|g  .ÿô�‡`&ß­ -°­ o+m Gí2J‡oÛS‡`ö .ÿôJŸLß8ÀN^NuNVþúHç*n(n ..gðAí-Hþú nþú(g.¼ÿ?<N¹ˆTO€p`< nþú(g´&L.¼ÿ?<N¹ˆTO€ nþú(H€°f >¼N¹~¤ nþú(g Am Zn H€Ð| `H€€ nþú(g*  f$ nþú(gH€HÀ.€?<N¹ˆTO¼ nþú(gH€HÀ.€?<N¹ˆTOp`|¾¼ÿl ` <ÿ*Eþþ.Ž—ÿÿþþ?<  0.Áü²*@Ûü¶0.@B+|ÿÿÿÿB­B­ B-Ií м¹Àdü `î м.¹ÀdB`ðJŸLß0N^NuNVHç>.¾|e3ü ª¨3ù«4ªªpÿ`,0Àü²*@Ûü¶f3ü ª¨3ù«4ªªpÿ` JŸLß €N^NuNVHç? *n.. (n,.:.BƒJ†of.Œ?<N¹ˆTO+G.x.�—?N¹ˆTOJ@g ¸|o89«4B€p àd`BD 2HÁÐ�`0HÀÞ€0HÀœ€0HÀÖ€0ï@HÀÙÀ`– JŸLß0øN^NuNVHç|BG¾|l À¹ªšf �¹ªš0`ã†RG`à3üª¨3ù«4ªªpÿJŸLßÀN^NuNVHç>.p2ã`F@HÀÁ¹ªšB@JŸL߀N^NuNVHç*nBGBFH€HÀмª¬ @gR�`è +fR�` -fR�RF 0m 9n0Áü >H€Þ@Þ|ÿÐ`àJFg0D@>0JŸLß ÀN^NuNVHç>.ZGB€0€ü>RGJ¹ª¤f <ªž#Àª¤#ÀªžByª¢(yª¤*T¾mb80X@°me(•` 2ÂüÐ�&@0-�G7@&•(‹;G#̪¤ \€`»ùª¤f>‡a*@ fB€`(M*T`¦JŸLß8€N^NuNVHç >.Þ|?ìGíG0Áü>€N¹™j*@»üÿÿÿÿfB€` R€À¼ÿÿÿþ*@(M9G.Œ\—a 9ª¤JŸLß0€N^NuNVHç *n]�(yª¤»Ìc»Ôe¹Ôe»Ôe»Ìb»Ìf#̪¤`J(T`Ü 2-ÂüÐ�°”f T0(Ñm T*�`*” 2,ÂüÐ�»Àf 0-Ñl(•`(�#̪¤JŸLß0N^NuNVÿî .]€-@ÿô nÿô0(Àü=@ÿò>® aþV-@ÿüfB€`–.®aÿ@ .°®ÿüga pattern;findr Backward find.g Enter edit mode at line help Print this messageinject Add a line to the bufferlist 1 9999 List lines to the printerload Replace the buffer with move Move lines of after line name Set filenamenowrap Disable line wrapping.resave Save the buffer to an existing filesave Save the buffer to a new filesearch 1 9999 Search for patterntabs 8 Set tabs to every columnswrap Enable line wrappingusage: inject line-- injecting ---- listing --No file argument.File not found.-- loading --usage: move -- moving --File not named.File not found.-- resaving --File not named.File exists.-- saving --Search mask? Change mask? -- searching ---- searching --next, exit? yes, no, all, exit? File not found.line truncated.Can not open temporary file.Error reading line.@@TEMP@@.TMP@@TEMP@@.TMP@@TEMP@@.TMPBuffer not saved. Proceed ` r€ÿÿ``F` Ô` â` ô` ` ò.xMø.a ¤!ø– 8�¼!Àž�¼l!ÀšB€!À‚!Àz!Àv.xMøSa l<>a a (HAø¢a ´a æJAg²¼ÿÿdvàYáYa*Ifa0$M&x–a0!Ê– �ˆ°¼g¨&x–,K×À 8š°‹c.!Ë–"N$Ma "H$M&Laø`ÿ~LISÔLOAÄNE×RUÎSAVÅNEXÔLEÔIÆGOTÏGOSUÂRETURÎREÍFOÒINPUÔPRINÔPOKÅSTOÐBYÅCALÌPEEËRNÄABÓSIZÅTÏSTEÐ>½<¾¾½<½¼@jâôÈvZÆ,ÆîÄ ìl Fì ^T " . ` p .$ º8> ‚ ˆ Ž š ” ¢ ²CøèEøTa¼&HBf K`$ƶ<.gÂ<²g TŠ KBJjü`ØtÿJjÒGø6RNÓaÊ!ø–aÀ`þXa¸ x!ÈvJ¸vgþDB�"Haªeþ8!Év ITˆašCøúEø^`ÿzaDa|"arfÆ`Ôaêaha`eýüa¨abg °<faVgúaP`àx a¤:aT`¢a˜ aH`ÿzaŠ# aâ8`a°`av,að`àa `?aÀ8"aÌ`ÞaÔ`öa>a¦/"aÖf,/8v/8zB¸‚!Ïz`ÿ(a¾"8zgÂ.A!ßz!ßv _aä`²aøah!΂CøAEø†`þ‚aL!ÀŠCøDEøŠ`þna8`p!À†!øvŽ!È’,O`Ýü g°¸‚fð$O"NGø×Éav.K`ÿJaâe>"@ 8‚g4³Àga^`î и†ih"€"8ŠJ¸†jÁA²€m!øŽv x’`ÿa.`þü` aªJ€fþN"HB�aüdþ:`ül.x~~0. °nÿòd=n ÿò .ÿü°®d&-nÿüÿøJnÿòg nÿø"n‘R®R®ÿøSnÿò`â`< .ÿüB�2.ÿòÐ�-@ÿø0.ÿòH@B@H@Ñ®JnÿògS®ÿøS® nÿø"n‘Snÿò`â .ÿüN^NuNVHç. gRn*y«00.HÀÛÀ.�N¹n°|ÿÿfpÿ`*y«00.HÀѹ«0 JŸLß N^NuNVHç*n(n &MJgR‹`øÜg`ú JŸLß8N^NuNVHç *n(n H€°fJfB@`RŒR�`êH€H��AJŸLß0N^NuNVHç*n(n &MÜg`ú JŸLß8N^NuNVHç *n(MJgRŒ`ø ��JŸLß0N^NuNVHç..,. J†f#ü€«, <€`H¼‡c #Ç«,B€`:¾†fzB‡`(x¾†e 〼€bã†ã„`îB…J„g¾†eŠ„ž†âŒâŽ`î#Ç«, JŸLßðN^Nu o Ï Î —B€Nu o0/HÀ.X,X.�NuNVHç *n(n Jg*Jg&H€>€a*H€>€a ¾op` ¾lpÿ``ÒB@JŸLß0ÀN^NuNVHç. ¾<am ¾<znž< H€JŸL߀N^NuStack Overflow$C runtimeCON:LST: +-bdeghkmpqsuxzjîæt~ˆœ’¦®¶¾ÆÎÖÞö �‚ƒ„…†‡ˆ‰Š‹ , –   N  š ô Æ þ :? Bad argument.Bad argument.Bad argument.New line too long.Too many ?'s in change mask.New line too long.line truncatedline: column: ..no file.. wrError: Warning: @@DATA@@.TMPbuf_gobk 1buf_gobk 2buf_gobk 3buf_gofw 1buf_gofw 2Not enough room for buffers.@@DATA@@.TMP@@DATA@@.TMPCan not re-open work file.Previous work file garbled.@@DATA@@.TMP---------------- End of file. ----------------@@DATA@@.TMPb_lenb_ptrb_prefixdelete 1delete 2delete 3del_blbufins 1bufins 2bufinscombine 1combinecombine@@DATA@@.TMP@@DATA@@.TMPCan not open swap file.@@DATA@@.TMPDisk or directory full?Drive not ready?put_bufput_slotFile not found.Line split.swap_in 1swap_outswap_sync:can't happenIn check block 1.In Check block 2.In check block 3.line %3d, offset %3d, length %3d, total %3d: ^%c%c slot %2d, address %4lx, back %3d, diskp %3d, next %3d, lines %3d, lru %3d, status %3d, avail %3d start %d line %d, maxline %d head %d, tail %d, free %d, max_diskp %d a!ßvX� _/aX` adeL$@`/aXe´$@B€"_a‚//8v!üÿÿÿÿv!Ï~/ <:aØAø¢a8$_$€!ßv _X�aÊ,`œ`þl  g aa´,`ô`þV x< aû˜aû˜gú°<@g°<:fîaÁaÁaû~gúÀ°< fò`Ö!È–`û¤tBAaûbgú°<ae_À<é ‚QÊÿèNu x"x–< aû6< aû.³Èc<:aû"a6a2°< gÔaû`ò<@aû< aúü< aúô<aúì`û&téÀ<Ð<0°<9c^aúÎQÊÿæNua*aÊ, /a "_€`ýf`^aJ€gž/"@N‘ _`ýNaR/CøIEøŽ`ü$a2m$`&a,g` a&o`a n`af `Nual`NuB€NupNu Nu "//a"²€NuaL-B€`"aB+a"a:+/a"Ð�i`ìa&-c/aD€`èa&a* /a"až`îa/A/a "ÁAaÈ`ÚCø2Eø|`ûxa*e"@B€ Nuað JBfôaÎ( aÿ&aÄ)Nu`baB€�<@e>f&RHaÖЀe�ЀeŠ/aò"°�ct 8š��Nu°< <e RHÐ@Ð@"8šÐANu(±„J€jD€J�jD�²¼ÿÿc ÁA²¼ÿÿb84ÄÁH@ÀÁH@B@Ђk&J„jD€NuJ�g$(±„J€jD€J�jD�v"B€Ò�Ñ€g°‚kR��‚QËÿðÁAJ„jD€D�Nuaÿ "@B€NuaÿJ€gÌkÈ""xr³üreCø €!ÉraŒ R€NuaþâJ€jD€k–Nu 8š�¸–NuaþÞe:/a�= aýè,_,€Nu`&a~:X�`ú~ar X�`úVNua²  fNu/Møaa _ 8vgø~°¼ÿÿÿÿgü B"xva 0 ® x \ ð ê & j � Ø D l † 0 ’ ¢ ¶ ô D ø 0 ² f , V ‚Welcome to RED.DRI version 6.04 for CP/M 68K, May 20, 1985Copyright (C) 1985 by Edward K. Ream.Type ^c help for help.-- loading --load edit:insert:overtype:escape:verbatim:goto: kill:search:eXchange:command: Bad line number.changeclearcopydef0insdef0overdef0editdef1insdef1overdef1editdef2insdef2overdef2editdeletedosexitdumpextractfindrfindhelpinjectlistloadredmovenamenowrapresavesavesearchquitFile not named.tabswrapCommand not found.usage: copy -- copying ---- deleting --usage: extract first last-- extracting --Command Default args Descriptionchange 1 9999 Change all lines in clear Reset the editorcopy Copy lines in after line delete Delete one or more linesexit Exit from the editorextract Create a file from a blockfind Search for ddress %lx, back %d, diskp %d, next %d, avail %d, lines %d, lru %d, status %d Cannot open Cannot create CDOSUXcdosuxzhyy¶zXydzzhyyºzXyhz z‚  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªž!!!!"ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååŸ<?aøB@S‰a8`øR/Møi`¾/MøZ`¶a÷ø< a÷ðAø¢aœgú°<g&°<gD°< g°< eâÀa÷Ȱ< g\±üñeÎ<a÷²< a÷ª±ü¢c¶<a÷šSˆ`ª"’¼¢gSA<a÷‚< a÷z<a÷rQÉÿæAø¢`ÿ|< a÷^Nu²¼ÿÿdÿP"x$x–SŠ´Ée áJS‰´AeNuT‰  fú`Þ·ÉgÙ`øNuµÉgú!`ø,_!ß‚g!߆!ߊ!ߎ!ß’NÖ"8ž’�dþì,_"8‚g/8’/8Ž/8Š/8†/NÖ²gaöΰ< fð< aöÀNuaÊ"<""HaÖ I"_°< gø T‰NÑa¬'<'`àa _ < aö†"_`ÞNu&?<ÿJ�jD�SD‚ü i ¼ÿÿ`0BAHA‚ü 42‚ü HA2HAH@H@SDJ�fÊSDk < aö.QÌÿöJƒj<-aök Ð<0aö`ò8NuB�áIxa€< aõøB@`ÿaL"_²gB�ÓÁNÑRˆR‰NÑB�BBa0 0e( 9b"²¼ ÌÌÌdý¼ Ò�Ò�Ò€Ò�À¼Ò€RB`ÒNu  fRˆ`öNuAø¢B°< g°<"g°<'gJfèaRˆ`àNuJf`Ö²fÒB`ΰ<ae °<zb�< NuaõNg °<f`õ„NuMøogaõ0`öNu9göÀNu9g 9À<Nu9AgöÀCNu9Ag 9CÀ<NupNC Gordos MC68000 Tiny Basic, v1.1 ok how? what? sorry. **************************** cr = $0d ascii equates lf = $0a tab = $09 ctrlc = $03 ctrlh = $08 ctrls = $13 ctrlx = $18 esc = $1b writef = $15 write sequential readf = $14 read sequential openf = $0f open file closef = $10 close file deletef = $13 delete file createf = $16 create file setdma = $1a set DMA address fcb = $5c offset for default fcb in base page buflen = 80 length of keyboard input buffer * * standard jump table. you can change these addresses if you are * customizing this interpreter for a different environment. * start: bra cstart cold start entry point gowarm: bra wstart warm start entry point goout: bra outchr jump to character-out routine goin: bra inchr jump to character-in routine goauxo: bra auxout jump to auxiliary-out routine goauxi: bra auxin jump to auxiliary-in routine gobye: bra byebye jump to monitor, dos, etc. * * modifiable system constants: * txtbgn: .dc.l txt beginning of program memory endmem: .dc.l 0 end of availablelled area move.l a5,a2 points to beginning of move area bsr mvdown move things out of the way move.l a0,a1 set up to do the insertion move.l a5,a2 move.l a4,a3 bsr mvup do it bra st3 go back and get another line * ******************************************************************* * * *** tables *** direct *** exec *** * * this section of the code tests a string against a table. when * a match is found, control is transferred to the section of * code according to the table. * * at 'exec', a0 should point to the string, a1 should point to * the character table, and a2 should point to the execution * table. at 'direct', a0 should point to the string, a1 and * a2 will be set up to point to tab1 and tab1p1, which are * the tables of all direct and statement commands. * * a '.' in the string will terminate the test and the partial * match will be considered as a match, e.g. 'p.', 'pr.','pri.', * 'prin.', or 'print' will all match 'print'. * * there are two tables: the charaåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå memory * * the main interpreter starts here: * cstart: move.l 4(sp),basepag save cp/m base page pointer move.l 4(sp),a0 get it to where we can use it move.l 4(a0),endmem top of the base page move.l 4(a0),sp initialize stack pointer lea initmsg,a6 tell who we are bsr prmesg move.l txtbgn,txtunf init. end-of-program pointer move.l endmem,d0 get address of end of memory sub.l #2048,d0 reserve 2k for the stack move.l d0,stklmt sub.l #108,d0 reserve variable area (27 long words) move.l d0,varbgn wstart: clr.l d0 initialize internal variables move.l d0,lopvar move.l d0,stkgos move.l d0,currnt current line number pointer = 0 move.l endmem,sp init s.p. again, just in case lea okmsg,a6 display "ok" bsr prmesg st3: move.b #'>',d0 prompt with a '>' and bsr getln read a line. bsr toupbuf convert to upper case move.l a0,a4 save pointer to end of line lea buffer,a0 point to the beginning of line bsr tstnum is there a number there? bsr ignblk skip trailing blanks cter table and the execution * table. the character table consists of any number of text items. * each item is a string of characters with the last character's * high bit set to one. the execution table holds a 16-bit * execution addresses that correspond to each entry in the * character table. * * the end of the character table is a 0 byte which corresponds * to the default routine in the execution table, which is * executed if none of the other table items are matched. * * character-matching tables: tab1: .dc.b 'LIS',('T'+$80) direct commands .dc.b 'LOA',('D'+$80) .dc.b 'NE',('W'+$80) .dc.b 'RU',('N'+$80) .dc.b 'SAV',('E'+$80) tab2: .dc.b 'NEX',('T'+$80) direct / statement .dc.b 'LE',('T'+$80) .dc.b 'I',('F'+$80) .dc.b 'GOT',('O'+$80) .dc.b 'GOSU',('B'+$80) .dc.b 'RETUR',('N'+$80) .dc.b 'RE',('M'+$80) .dc.b 'FO',('R'+$80) .dc.b 'INPU',('T'+$80) .dc.b 'PRIN',('T'+$80) .dc.b 'POK',('E'+$80) .dc.b 'CURSO',('R'+$80) added drl 25Mar86 .dc.b 'STO',('P'+$80) .dc.b '****************************************************************** * * * tiny basic for the motorola mc68000 * * * * derived from palo alto tiny basic as published in the may 1976 * * issue of dr. dobb's journal. adapted to the 68000 by: * * gordon brandly * * r.r. 2 * * fort sask., alberta, canada * * t8l 2n8 * * * * version 1.0 as of july 17, 1984 * * * * * * this version is for mex68kecb educational computer board i/o. * * * ****************************************************************** * copyright (c) 1984 by gordon brandly. this program may be * * freely distributed for personal use only. all commercial * * rights are reserved. * ****************************************************************** * CP/M-68K file and console I/O added by Dann Lunsford, * * Carmichael, CA, March 25, 1986 * ************************************** tst d1 does line no. exist? (or nonzero?) beq direct if not, it's a direct statement cmp.l #$ffff,d1 see if line no. is <= 16 bits bcc qhow if not, we've overflowed move.b d1,-(a0) store the binary line no. ror #8,d1 (kludge to store a word on a move.b d1,-(a0) possible byte boundary) rol #8,d1 bsr fndln find this line in save area move.l a1,a5 save possible line pointer bne st4 if not found, insert bsr fndnxt find the next line (into a1) move.l a5,a2 pointer to line to be deleted move.l txtunf,a3 points to top of save area bsr mvup move up to delete move.l a2,txtunf update the end pointer st4: move.l a4,d0 calculate the length of new line sub.l a0,d0 cmp.l #3,d0 is it just a line no. & cr? beq st3 if so, it was just a delete move.l txtunf,a3 compute new end move.l a3,a6 add.l d0,a3 move.l varbgn,d0 see if there's enough room cmp.l a3,d0 bls qsorry if not, say so move.l a3,txtunf if so, store new end position move.l a6,a1 points to old unfiBY',('E'+$80) .dc.b 'CAL',('L'+$80) .dc.b 0 tab4: .dc.b 'PEE',('K'+$80) functions .dc.b 'RN',('D'+$80) .dc.b 'AB',('S'+$80) .dc.b 'SIZ',('E'+$80) .dc.b 0 tab5: .dc.b 'T',('O'+$80) "to" in "for" .dc.b 0 tab6: .dc.b 'STE',('P'+$80) "step" in "for" .dc.b 0 .even * execution address tables: tab1p1: .dc.l list direct commands .dc.l load .dc.l new .dc.l run .dc.l save tab2p1: .dc.l next direct / statement .dc.l let .dc.l if .dc.l goto .dc.l gosub .dc.l return .dc.l rem .dc.l for .dc.l input .dc.l print .dc.l poke .dc.l cursor added drl 25Mar86 .dc.l stoprun .dc.l gobye .dc.l call .dc.l deflt tab4p1: .dc.l peek functions .dc.l rnd .dc.l abs .dc.l size .dc.l xp40 tab5p1: .dc.l fr1 "to" in "for" .dc.l qwhat tab6p1: .dc.l fr2 "step" in "for" .dc.l fr3 * direct: lea tab1,a1 lea tab1p1,a2 exec: bsr ignblk ignore leading blanks move.l a0,a3 save the pointer clr.b d2 clear match flag exlp: move.b (a0)+,d0 get the pr this line and executes it. * 'runsml' continues the execution on same line. * * 'goto expr' evaluates the expression, finds the target * line, and jumps to 'runtsl' to do it. * new: bsr endchk move.l txtbgn,txtunf set the end pointer stoprun: bsr endchk bra wstart run: bsr endchk move.l txtbgn,a0 set pointer to beginning move.l a0,currnt runnxl: tst.l currnt executing a program? beq wstart if not, we've finished a direct stat. clr.l d1 else find the next line number move.l a0,a1 move.l txtunf,a2 setup for search subq.l #1,a2 bsr fndlnp bcs wstart if we've fallen off the end, stop runtsl: move.l a1,currnt set currnt to point to the line no. move.l a1,a0 set the text pointer to addq.l #2,a0 the start of the line text runsml: bsr chkio see if a control-c was pressed lea tab2,a1 find command in tab2 lea tab2p1,a2 bra exec and execute it goto: bsr expr evaluate the following expression bsr endchk must find end of line move.l d0,d1 bsr fnn move d0,d4 and save it as print width bra pr3 look for more to print pr1: bsr qtstg is it a string? bra pr8 if not, must be an expression pr3: bsr ignblk if ",", go find next cmpi.b #',',(a0) bne pr6 addq.l #1,a0 bsr fin in the list. bra pr0 pr6: bsr crlf list ends here bra finish pr8: move d4,-(sp) save the width value bsr expr evaluate the expression move (sp)+,d4 restore the width move.l d0,d1 bsr prtnum print its value bra pr3 more to print? finish: bsr fin check end of command bra qwhat print "what?" if wrong * ******************************************************************* * * *** gosub *** & return *** * * 'gosub expr:' or 'gosub expr' is like the 'goto' command, * except that the current text pointer, stack pointer, etc. are * saved so that execution can be continued after the subroutine * 'return's. in order that 'gosub' can be nested (and even * recursive), the save area must be stacked. the stack pointer * is saved in 'stkgosogram character move.b (a1),d1 get the table character bne exngo if end of table, move.l a3,a0 restore the text pointer and... bra exgo execute the default. exngo: move.b d0,d3 else check for period... and.b d2,d3 and a match. cmp.b #'.',d3 beq exgo if so, execute and.b #$7f,d1 ignore the table's high bit cmp.b d0,d1 is there a match? beq exmat addq.l #4,a2 if not, try the next entry move.l a3,a0 reset the program pointer clr.b d2 sorry, no match ex1: tst.b (a1)+ get to the end of the entry bpl ex1 bra exlp back for more matching exmat: moveq #-1,d2 we've got a match so far tst.b (a1)+ end of table entry? bpl exlp if not, go back for more exgo: move.l (a2),a3 execute the appropriate routine jmp (a3) * ******************************************************************* * * what follows is the code to execute direct and statement * commands. control is transferred to these points via the command * table lookup code of 'direct' and 'exec' in the lasdln find the target line bne qhow no such line no. bra runtsl go do it * ******************************************************************* * * *** list *** print *** * * list has two forms: * 'list' lists all saved lines * 'list #' starts listing at the line # * control-s pauses the listing, control-c stops it. * * print command is 'print ....:' or 'print ....' * where '....' is a list of expressions, formats, back-arrows, * and strings. these items a separated by commas. * * a format is a pound sign followed by a number. it controls * the number of spaces the value of an expression is going to * be printed in. it stays effective for the rest of the print * command unless changed by another format. if no format is * specified, 11 positions will be used. * * a string is quoted in a pair of single- or double-quotes. * * an underline (back-arrow) means generate a without a * * a is generated after the entire list has been printed * or if the '. the old 'stkgos' is saved on the stack. * if we are in the main routine, 'stkgos' is zero (this was done * in the initialization section of the interpreter), but we still * save it as a flag for no further 'return's. * * 'return' undoes everything that 'gosub' did, and thus * returns the execution to the command after the most recent * 'gosub'. if 'stkgos' is zero, it indicates that we never had * a 'gosub' and is thus an error. * gosub: bsr pusha save the current 'for' parameters bsr expr get line number move.l a0,-(sp) save text pointer move.l d0,d1 bsr fndln find the target line bne ahow if not there, say "how?" move.l currnt,-(sp) found it, save old 'currnt'... move.l stkgos,-(sp) and 'stkgos' clr.l lopvar load new values move.l sp,stkgos bra runtsl return: bsr endchk there should be just a move.l stkgos,d1 get old stack pointer beq qwhat if zero, it doesn't exist move.l d1,sp else restore it move.l (sp)+,stkgos and the old 'stkgos' move.l (t section. * after the command is executed, control is transferred to other * sections as follows: * * for 'list', 'new', and 'stop': go back to the warm start point. * for 'run': go execute the first stored line if any; else go * back to the warm start point. * for 'goto' and 'gosub': go execute the target line. * for 'return' and 'next'; go back to saved return line. * for all others: if 'currnt' is 0, go to warm start; else go * execute next command. (this is done in 'finish'.) * ******************************************************************* * * *** new *** stop *** run (& friends) *** goto *** * * 'new' sets txtunf to point to txtbgn * * 'stop' goes back to wstart * * 'run' finds the first stored line, stores its address * in currnt, and starts executing it. note that only those * commands in tab2 are legal for a stored program. * * there are 3 more entries in 'run': * 'runnxl' finds next line, stores it's address and executes it. * 'runtsl' stores the address oflist is empty. if the list ends with a semicolon, * however, no is generated. * list: bsr tstnum see if there's a line no. bsr endchk if not, we get a zero bsr fndln find this or next line ls1: bcs wstart warm start if we passed the end bsr prtln print the line bsr chkio check for listing halt request beq ls3 cmp.b #ctrls,d0 pause the listing? bne ls3 ls2: bsr chkio if so, wait for another keypress beq ls2 ls3: move.l txtunf,a2 setup for search subq.l #1,a2 bsr fndlnp find the next line bra ls1 print: move #11,d4 d4 = number of print spaces bsr ignblk if null list and ":" cmpi.b #':',(a0) bne pr2 addq.l #1,a0 bsr crlf give cr-lf and continue bra runsml execution on the same line pr2: bsr ignblk if null list and cmpi.b #cr,(a0) bne pr0 addq.l #1,a0 bsr crlf also give cr-lf and bra runnxl execute the next line pr0: bsr ignblk else is it a format? cmpi.b #'#',(a0) bne pr1 addq.l #1,a0 bsr expr yes, evaluate expressiosp)+,currnt and the old 'currnt' move.l (sp)+,a0 and the old text pointer bsr popa and the old 'for' parameters bra finish and we are back home * ******************************************************************* * * *** for *** & next *** * * 'for' has two forms: * 'for var=exp1 to exp2 step exp1' and 'for var=exp1 to exp2' * the second form means the same thing as the first form with a * step of positive 1. the interpreter will find the variable 'var' * and set its value to the current value of 'exp1'. it also * evaluates 'exp2' and 'exp1' and saves all these together with * the text pointer, etc. in the 'for' save area, which consisits of * 'lopvar', 'lopinc', 'loplmt', 'lopln', and 'loppt'. if there is * already something in the save area (indicated by a non-zero * 'lopvar'), then the old save area is saved on the stack before * the new values are stored. the interpreter will then dig in the * stack and find out if this same variable was used in another * currently active d0 get control variable's value add.l lopinc,d0 add in loop increment bvs qhow say "how?" for 32-bit overflow move.l d0,(a1) save control variable's new value move.l loplmt,d1 get loop's limit value tst.l lopinc bpl nx1 branch if loop increment is positive exg d0,d1 nx1: cmp.l d0,d1 test against limit blt nx2 branch if outside limit move.l lopln,currnt within limit, go back to the... move.l loppt,a0 saved 'currnt' and text pointer. bra finish nx2: bsr popa purge this loop bra finish * ******************************************************************* * * *** rem *** if *** input *** let (& deflt) *** * * 'rem' can be followed by anything and is ignored by the * interpreter. * * 'if' is followed by an expression, as a condition and one or * more commands (including other 'if's) separated by colons. * note that the word 'then' is not used. the interpreter evaluates * the expression. if it is non-zero, execution continues. if it * is zero, the commands that folstg' bsr tstv must be a variable now bcs qwhat "what?" it isn't? move.l d0,a2 put away the variable's address move.b (a0),d2 get ready for 'prtstg' clr.b d0 move.b d0,(a0) move.l (sp)+,a1 bsr prtstg print string as prompt move.b d2,(a0) restore text ip3: move.l a0,-(sp) save in case of error move.l currnt,-(sp) also save 'currnt' move.l #-1,currnt flag that we are in input move.l sp,stkinp save the stack pointer too move.l a2,-(sp) save the variable address move.b #':',d0 print a colon first bsr getln then get an input line lea buffer,a0 point to the buffer bsr expr evaluate the input move.l (sp)+,a2 restore the variable address move.l d0,(a2) save value in variable move.l (sp)+,currnt restore old 'currnt' move.l (sp)+,a0 and the old text pointer ip4: addq.l #4,sp clean up the stack bsr ignblk is the next thing a comma? cmpi.b #',',(a0) bne finish addq.l #1,a0 bra input yes, more items deflt: cmp.b #cr,(a0) empty line is ok beq finish el'for' loop. if that is the case, then the old * 'for' loop is deactivated. (i.e. purged from the stack) * * 'next var' serves as the logical (not necessarily physical) end * of the 'for' loop. the control variable 'var' is checked with * the 'lopvar'. if they are not the same, the interpreter digs in * the stack to find the right one and purges all those that didn't * match. either way, it then adds the 'step' to that variable and * checks the result with against the limit value. if it is within * the limit, control loops back to the command following the * 'for'. if it's outside the limit, the save area is purged and * execution continues. * for: bsr pusha save the old 'for' save area bsr setval set the control variable move.l a6,lopvar save its address lea tab5,a1 use 'exec' to test for 'to' lea tab5p1,a2 bra exec fr1: bsr expr evaluate the limit move.l d0,loplmt save that lea tab6,a1 use 'exec' to look for the lea tab6p1,a2 word 'step' bra exec fr2: bsr expr foulow are ignored and execution * continues on the next line. * * 'input' is like the 'print' command, and is followed by a list * of items. if the item is a string in single or double quotes, * or is an underline (back arrow), it has the same effect as in * 'print'. if an item is a variable, this variable name is * printed out followed by a colon, then the interpreter waits for * an expression to be typed in. the variable is then set to the * value of this expression. if the variable is preceeded by a * string (again in single or double quotes), the string will be * displayed followed by a colon. the interpreter the waits for an * expression to be entered and sets the variable equal to the * expression's value. if the input expression is invalid, the * interpreter will print "what?", "how?", or "sorry" and reprint * the prompt and redo the input. the execution will not terminate * unless you press control-c. this is handled in 'inperr'. * * 'let' is followed by a list of items separatse it is 'let' let: bsr setval do the assignment bsr ignblk check for more 'let' items cmpi.b #',',(a0) bne finish addq.l #1,a0 bra let * ******************************************************************* * * *** load *** & save *** * * These commands save and restore a program to/from CP/M-68K disk files. * Syntax is: * LOAD FILENAME * SAVE FILENAME * Limitations are (currently) that the file type is forced to TBI, and * that the filename is not checked extensively for validity. The format * of a saved BASIC program file is a one-sector header, which contains in * its first four bytes, the length of the program's core image. The * remaining sectors of the file are a core image of the program space * (line numbers in binary, CR only at end of line). This is easiest * to program. It does, however, preclude the use of a full-screen editor * for program preparation. Think about building one for this BASIC. * Dann Lunsford, 25Mar86 * load: bsr ignblk move.l basepag,nd it, get the step value bra fr4 fr3: moveq #1,d0 not found, step defaults to 1 fr4: move.l d0,lopinc save that too fr5: move.l currnt,lopln save address of current line number move.l a0,loppt and text pointer move.l sp,a6 dig into the stack to find 'lopvar' bra fr7 fr6: add.l #20,a6 look at next stack frame fr7: move.l (a6),d0 is it zero? beq fr8 if so, we're done cmp.l lopvar,d0 same as current lopvar? bne fr6 nope, look some more move.l sp,a2 else remove 5 long words from... move.l a6,a1 inside the stack. lea 20,a3 add.l a1,a3 bsr mvdown move.l a3,sp set the sp 5 long words up fr8: bra finish and continue execution next: bsr tstv get address of variable bcs qwhat if no variable, say "what?" move.l d0,a1 save variable's address nx0: move.l lopvar,d0 if 'lopvar' is zero, we never... beq qwhat had a for loop, so say "what?" cmp.l d0,a1 else we check them beq nx3 ok, they agree bsr popa nope, let's see the next frame bra nx0 nx3: move.l (a1),ed by commas. * each item consists of a variable, an equals sign, and an * expression. the interpreter evaluates the expression and sets * the variable to that value. the interpreter will also handle * 'let' commands without the word 'let'. this is done by 'deflt'. * rem: bra if2 skip the rest of the line if: bsr expr evaluate the expression if1: tst.l d0 is it zero? bne runsml if not, continue if2: move.l a0,a1 clr.l d1 bsr fndskp if so, skip the rest of the line bcc runtsl and run the next line bra wstart if no next line, do a warm start inperr: move.l stkinp,sp restore the old stack pointer move.l (sp)+,currnt and old 'currnt' addq.l #4,sp move.l (sp)+,a0 and old text pointer input: move.l a0,-(sp) save in case of error bsr qtstg is next item a string? bra ip2 nope bsr tstv yes, but is it followed by a variable? bcs ip4 if not, branch move.l d0,a2 put away the variable's address bra ip3 if so, input to variable ip2: move.l a0,-(sp) save for 'prta6 lea fcb(a6),a5 bsr fcbset bcs qwhat lea $80(a6),a6 move.l a6,d1 moveq #setdma,d0 trap #2 move.l a5,d1 moveq #openf,d0 trap #2 tst.b d0 bmi qhow clr.b 32(a5) move.l a5,d1 moveq #readf,d0 trap #2 read header sector tst.b d0 bne qsorry move.l (a6),d4 save program length move.l txtbgn,a6 .rloop: move.l a6,d1 moveq #setdma,d0 trap #2 set buffer addr move.l a5,d1 moveq #readf,d0 trap #2 read one sector's worth of program tst.b d0 bne .rclose lea 128(a6),a6 bra .rloop .rclose: move.l txtbgn,d0 add.l d4,d0 cmpa.l d0,a6 blt qsorry move.l d0,txtunf bra wstart save: move.l txtunf,d5 compute length of program sub.l txtbgn,d5 cmpi.l #5,d5 smallest possible valid program bcs qsorry unable to comply bsr ignblk skip blanks in command move.l basepag,a6 use default fcb lea fcb(a6),a5 point at it bsr fcbset a0 points at string, a5 at fcb bcs qwhat bad filename move.l a5,d1 set up for system call moveq #deletef,d0 deleess specified by 'expr1'. * * 'call expr' jumps to the machine language subroutine whose * starting address is specified by 'expr'. the subroutine can use * all registers but must leave the stack the way it found it. * the subroutine returns to the interpreter by executing an rts. * * 'cursor expr1,expr2' positions the cursor on the terminal screen * expr1 is the row co-ordinate, and expr2 is the column. * note: No checking is done for proper range of row or column. * Contains terminal dependent code, must be altered if ported to * a different terminal. * poke: bsr expr get the memory address bsr ignblk it must be followed by a comma cmpi.b #',',(a0) bne qwhat addq.l #1,a0 move.l d0,-(sp) save the address bsr expr get the byte to be poke'd move.l (sp)+,a1 get the address back move.b d0,(a1) store the byte in memory bra finish cursor: bsr expr get the row coord bsr ignblk must be followed by a comma cmpi.b #',',(a0) bne qwhat addq.l #1,a0 move.b d0,-(sp) savebge xprt0 if not, return d0=0 bra xprt1 else return d0=1 xp16rt: rts xprt0: clr.l d0 return d0=0 (false) rts xprt1: moveq #1,d0 return d0=1 (true) rts * added per ddj #106 xxp2: cmpi.b #'=',(a0) <=? bne xxp3 no addq.l #1,a0 bra xp14 process <= xxp3: cmpi.b #'>',(a0) <>? bne xp16 no, process < addq.l #1,a0 skip past > bra xp12 process <> xxp1: cmpi.b #'<',d2 <, <=, or <>? beq xxp2 no subq.l #1,a0 default case, so drop through and handle xp17: move.l (sp)+,d0 it's not a rel. operator rts return d0= xp18: move.l (sp)+,d0 reverse the top two stack items move.l (sp)+,d1 move.l d0,-(sp) move.l d1,-(sp) bsr expr2 do second move.l (sp)+,d1 cmp.l d0,d1 compare with the first result rts return the result expr2: bsr ignblk negative sign? cmpi.b #'-',(a0) bne xp21 addq.l #1,a0 clr.l d0 yes, fake '0-' bra xp26 xp21: bsr ignblk positive sign? ignore it cmpi.b #'+',(a0) bne xp22 addq.l #1,a0 xp22: bsr expr3 first <te old file if present trap #2 move.l a5,d1 set up for create moveq #createf,d0 trap #2 tst.b d0 bmi qhow can't create clr.b 32(a5) set current record field, file is open lea $80(a6),a6 point at default buffer move.l a6,d1 but it might have been changed moveq #setdma,d0 trap #2 move.l d5,(a6) set length into header record move.l a5,d1 moveq #writef,d0 trap #2 write header tst d0 bne closfile move.l txtbgn,a6 beginning of program buffer sloop: move.l a6,d1 set dma moveq #setdma,d0 trap #2 move.l a5,d1 moveq #writef,d0 trap #2 write program block tst d0 bne closfile lea 128(a6),a6 bump dma pointer cmpa.l txtunf,a6 done? bls sloop no, go write next record closfile: move.l a5,d1 moveq #closef,d0 trap #2 tst.b d0 bmi qhow bra wstart * fcbset builds a CP/M-68K FCB in the place that a5 points at, out * of the string that a0 points at. File type is forced to TBI. * returns C set if something is uncool. A5 is unchanged on return row bsr expr get column move.b d0,-(sp) save column moveq #$1b,d0 cursor position lead in bsr goout moveq #$3d,d0 bsr goout moveq #$20,d0 add.b 2(sp),d0 bsr goout moveq #$20,d0 add.b (sp),d0 bsr goout tst.l (sp)+ bra finish call: bsr expr get the subroutine's address tst.l d0 make sure we got a valid address beq qhow if not, say "how?" move.l a0,-(sp) save the text pointer move.l d0,a1 jsr (a1) jump to the subroutine move.l (sp)+,a0 restore the text pointer bra finish * ******************************************************************* * * *** expr *** * * 'expr' evaluates arithmetical or logical expressions. * ::= * * where is one of the operators in tab8 and the result * of these operations is 1 if true and 0 if false. * ::=(+ or -)(+ or -)(... * where () are optional and (... are optional repeats. * ::=( <* or /> )(... * ::= expr3> xp23: bsr ignblk add? cmpi.b #'+',(a0) bne xp25 addq.l #1,a0 move.l d0,-(sp) yes, save the value bsr expr3 get the second xp24: move.l (sp)+,d1 add.l d1,d0 add it to the first bvs qhow branch if there's an overflow bra xp23 else go back for more operations xp25: bsr ignblk subtract? cmpi.b #'-',(a0) bne xp42 addq.l #1,a0 xp26: move.l d0,-(sp) yes, save the result of 1st bsr expr3 get second neg.l d0 change its sign jmp xp24 and do an addition expr3: bsr expr4 get first xp31: bsr ignblk multiply? cmpi.b #'*',(a0) bne xp34 addq.l #1,a0 move.l d0,-(sp) yes, save that first result bsr expr4 get second move.l (sp)+,d1 bsr mult32 multiply the two bra xp31 then look for more terms xp34: bsr ignblk divide? cmpi.b #'/',(a0) bne xp42 addq.l #1,a0 move.l d0,-(sp) save result of 1st bsr expr4 get second move.l (sp)+,d1 exg d0,d1 bsr div32 do the division bra xp31  * a0 has been advanced to point to the last valid char for the fcb fcbset: move.l a5,a1 moveq #32-1,d0 .cloop: clr.b (a1)+ dbra d0,.cloop move.b #'T',9(a5) move.b #'B',10(a5) move.b #'I',11(a5) move.l a5,a1 cmpi.b #':',1(a0) drive present? bne .fcbs1 nope move.b (a0),d0 subi.b #'A',d0 whole buffer was touppered, remember? bcs .fcbex whoops! cmpi.b #'P'-'A'+1,d0 eori #1,ccr bcs .fcbex move.b d0,(a1)+ store drive addq.l #2,a0 bump past D: bra .fcbs2 .fcbs1: addq.l #1,a1 .fcbs2: moveq #8-1,d0 8 chars max .fcbs3: move.b (a0)+,d1 get char cmpi.b #cr,d1 end of line? beq .fcbol yep cmpi.b #'.',d1 alien filetype? beq .fcbol move.b d1,(a1)+ dbra d0,.fcbs3 .fcbol: cmpi #-1,d0 beq .fcbex .fcbl1: move.b #$20,(a1)+ fill in rest of fcb dbra d0,.fcbl1 .fcbex: rts * ******************************************************************* * * *** poke *** & call *** & cursor *** * * 'poke expr1,expr2' stores the byte from 'expr2' into the memory * addr* * () * is recursive so that the variable '@' can have an * as an index, functions can have an as arguments, and * can be an in parenthesis. * expr: bsr expr2 move.l d0,-(sp) save value * added per ddj #106 bsr ignblk skip blanks move.b (a0)+,d2 get first char cmpi.b #'=',d2 equals beq xp15 yes, go process * cmpi.b #'>',d2 >, or >=? bne xxp1 no * cmpi.b #'=',(a0) >=? bne xp13 no, process > * addq.l #1,a0 skip past = xp11: bsr xp18 is it ">="? blt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp12: bsr xp18 is it "<>"? beq xprt0 no, return d0=0 bra xprt1 else return d0=1 xp13: bsr xp18 is it ">"? ble xprt0 no, return d0=0 bra xprt1 else return d0=1 xp14: bsr xp18 is it "<="? bgt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp15: bsr xp18 is it "="? bne xprt0 if not, return d0=0 bra xprt1 else return d0=1 xp15rt: rts xp16: bsr xp18 is it "<"? go back for any more terms expr4: lea tab4,a1 find possible function lea tab4p1,a2 bra exec xp40: bsr tstv nope, not a function bcs xp41 nor a variable move.l d0,a1 clr.l d0 move.l (a1),d0 if a variable, return its value in d0 exp4rt: rts xp41: bsr tstnum or is it a number? move.l d1,d0 tst d2 (if not, # of digits will be zero) bne exp4rt if so, return it in d0 parn: bsr ignblk else look for ( expr ) cmpi.b #'(',(a0) bne qwhat addq.l #1,a0 bsr expr bsr ignblk cmpi.b #')',(a0) bne qwhat addq.l #1,a0 xp42: rts * * ===== test for a valid variable name. returns carry=1 if not * found, else returns carry=0 and the address of the * variable in d0. tstv: bsr ignblk clr.l d0 move.b (a0),d0 look at the program text sub.b #'@',d0 bcs tstvrt c=1: not a variable bne tv1 branch if not "@" array addq #1,a0 if it is, it should be bsr parn followed by (expr) as its index. add.l d0,d0 bcs qhow say "how?" if index is too big add.l d0,d0 bcs: add.l d1,d1 (this algorithm was translated from addx.l d0,d0 the divide routine in ron cain's beq div4 small-c run time library.) cmp.l d2,d0 bmi div4 addq.l #1,d1 sub.l d2,d0 div4: dbra d3,div3 exg d0,d1 put rem. & quot. in proper registers tst.l d4 were the signs the same? bpl divrt neg.l d0 if not, results are negative neg.l d1 divrt: rts * * ===== the peek function returns the byte stored at the address * contained in the following expression. * peek: bsr parn get the memory address move.l d0,a1 clr.l d0 upper 3 bytes will be zero move.b (a1),d0 get the addressed byte rts and return it * * ===== the rnd function returns a random number from 1 to * the value of the following expression in d0. * rnd: bsr parn get the upper limit tst.l d0 it must be positive and non-zero beq qhow bmi qhow move.l d0,d1 move.l ranpnt,a1 get memory as a random number cmp.l #lstrom,a1 bcs ra1 lea start,a1 wrap around if end of program ra1: move.l (a1)+l: bsr tstv variable name? bcs qwhat if not, say "what?" move.l d0,-(sp) save the variable's address bsr ignblk get past the "=" sign cmpi.b #'=',(a0) bne qwhat addq.l #1,a0 bsr expr evaluate the expression move.l (sp)+,a6 move.l d0,(a6) and save its value in the variable rts fin: bsr ignblk *** fin *** cmpi.b #':',(a0) bne fi1 addq.l #1,a0 addq.l #4,sp if ":", discard return address bra runsml continue on the same line fi1: bsr ignblk not ":", is it a cr? cmpi.b #cr,(a0) bne fi2 addq.l #1,a0 addq.l #4,sp yes, purge return address bra runnxl execute the next line fi2: rts else return to the caller endchk: bsr ignblk cmp.b #cr,(a0) does it end with a cr? bne qwhat if not, say "what?" rts qwhat: move.l a0,-(sp) awhat: lea whtmsg,a6 error: bsr prmesg display the error message move.l (sp)+,a0 restore the text pointer move.l currnt,d0 get the current line number beq wstart if zero, do a warm start cmp.l #-1,d0 is the line no. point qhow move.l d0,-(sp) save the index bsr size get amount of free memory move.l (sp)+,d1 get back the index cmp.l d1,d0 see if there's enough memory bls qsorry if not, say "sorry" move.l varbgn,d0 put address of array element... sub.l d1,d0 into d0 rts tv1: cmp.b #27,d0 if not @, is it a through z? eori #1,ccr bcs tstvrt if not, set carry and return addq #1,a0 else bump the text pointer add d0,d0 compute the variable's address add d0,d0 move.l varbgn,d1 add d1,d0 and return it in d0 with carry=0 tstvrt: rts * * ===== multiplies the 32 bit values in d0 and d1, returning * the 32 bit result in d0. * mult32: move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl mlt1 neg.l d0 mlt1: tst.l d1 take absolute value of d1 bpl mlt2 neg.l d1 mlt2: cmp.l #$ffff,d1 is second argument <= 16 bits? bls mlt3 ok, let it through exg d0,d1 else swap the two arguments cmp.l #$ffff,d1 and check 2nd argument again bhi qh,d0 get the slightly random number bclr #31,d0 make sure it's positive move.l a1,ranpnt (even i can do better than this!) bsr div32 rnd(n)=mod(number,n)+1 move.l d1,d0 mod is the remainder of the div. addq.l #1,d0 rts * * ===== the abs function returns an absolute value in d0. * abs: bsr parn get the following expr.'s value tst.l d0 bpl absrt neg.l d0 if negative, complement it bmi qhow if still negative, it was too big absrt: rts * * ===== the size function returns the size of free memory in d0. * size: move.l varbgn,d0 get the number of free bytes... sub.l txtunf,d0 between 'txtunf' and 'varbgn' rts return the number in d0 * ******************************************************************* * * *** setval *** fin *** endchk *** error (& friends) *** * * 'setval' expects a variable, followed by an equal sign and then * an expression. it evaluates the expression and sets the variable * to that value. * * 'fin' checks the end of a command. if it endeder = -1? beq inperr if so, redo input move.b (a0),-(sp) save the char. pointed to clr.b (a0) put a zero where the error is move.l currnt,a1 point to start of current line bsr prtln display the line in error up to the 0 move.b (sp)+,(a0) restore the character move.b #'?',d0 display a "?" bsr goout clr d0 subq.l #1,a1 point back to the error char. bsr prtstg display the rest of the line bra wstart and do a warm start qsorry: move.l a0,-(sp) asorry: lea srymsg,a6 bra error qhow: move.l a0,-(sp) error: "how?" ahow: lea howmsg,a6 bra error * ******************************************************************* * * *** getln *** fndln (& friends) *** * * 'getln' reads in input line into 'buffer'. it first prompts with * the character in d0 (given by the caller), then it fills the * buffer and echos. it ignores lf's but still echos * them back. control-h is used to delete the last character * entered (if there is one), and control-x is used to delete the * whole line aow one of them must be 16 bits mlt3: move d0,d2 prepare for 32 bit x 16 bit multiply mulu d1,d2 multiply low word swap d0 mulu d1,d0 multiply high word swap d0 *********** multiply overflow fix ********** rev 1.1 tst d0 test for overflow bne qhow add.l d2,d0 d0 now holds the product * if sign bit set after add then overflow bmi qhow if overflow, say "how?" ******************************************** tst.l d4 were the signs the same? bpl mltret neg.l d0 if not, make the result negative mltret: rts * * ===== divide the 32 bit value in d0 by the 32 bit value in d1. * returns the 32 bit quotient in d0, remainder in d1. * div32: tst.l d1 check for divide-by-zero beq qhow if so, say "how?" move.l d1,d2 move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl div1 neg.l d0 div1: tst.l d1 take absolute value of d1 bpl div2 neg.l d1 div2: moveq #31,d3 iteration count for 32 bits move.l d0,d1 clr.l d0 div3 with ":", * execution continues. if it ended with a cr, it finds the * the next line and continues from there. * * 'endchk' checks if a command is ended with a cr. this is * required in certain commands, such as goto, return, stop, etc. * * 'error' prints the string pointed to by a0. it then prints the * line pointed to by currnt with a "?" inserted at where the * old text pointer (should be on top of the stack) points to. * execution of tiny basic is stopped and a warm start is done. * if currnt is zero (indicating a direct command), the direct * command is not printed. if currnt is -1 (indicating * 'input' command in progress), the input line is not printed * and execution is not terminated but continues at 'inperr'. * * related to 'error' are the following: * 'qwhat' saves text pointer on stack and gets "what?" message. * 'awhat' just gets the "what?" message and jumps to 'error'. * 'qsorry' and 'asorry' do the same kind of thing. * 'qhow' and 'ahow' also do this for "how?". * setvand start over again. cr signals the end of a line, * and causes 'getln' to return. * * 'fndln' finds a line with a given line no. (in d1) in the * text save area. a1 is used as the text pointer. if the line * is found, a1 will point to the beginning of that line * (i.e. the high byte of the line no.), and flags are nc & z. * if that line is not there and a line with a higher line no. * is found, a1 points there and flags are nc & nz. if we reached * the end of the text save area and cannot find the line, flags * are c & nz. * 'fndln' will initialize a1 to the beginning of the text save * area to start the search. some other entries of this routine * will not initialize a1 and do the search. * 'fndlnp' will start with a1 and search for the line no. * 'fndnxt' will bump a1 by 2, find a cr and then start search. * 'fndskp' uses a1 to find a cr, and then starts the search. * getln: bsr goout display the prompt move.b #' ',d0 and a space bsr goout lea buffer,a0 a0 is the buffer pointer  to where a2 points * until a1=a3 * * 'mvdown' moves a block down from where a1 points to where a3 * points until a1=a2 * * 'popa' restores the 'for' loop variable save area from the stack * * 'pusha' stacks for 'for' loop variable save area onto the stack * mvup: cmp.l a1,a3 see the above description beq mvret move.b (a1)+,(a2)+ bra mvup mvret: rts mvdown: cmp.l a1,a2 see the above description beq mvret move.b -(a1),-(a3) bra mvdown popa: move.l (sp)+,a6 a6 = return address move.l (sp)+,lopvar restore lopvar, but zero means no more beq pp1 move.l (sp)+,lopinc if not zero, restore the rest move.l (sp)+,loplmt move.l (sp)+,lopln move.l (sp)+,loppt pp1: jmp (a6) return pusha: move.l stklmt,d1 are we running out of stack room? sub.l sp,d1 bcc qsorry if so, say we're sorry move.l (sp)+,a6 else get the return address move.l lopvar,d1 save loop variables beq pu1 if lopvar is zero, that's all move.l loppt,-(sp) else save all the others move.l lopln,-(spne? cmpi.b #'_',(a0) bne qt5 addq.l #1,a0 move.b #cr,d0 if so, output a cr without lf bsr goout move.l (sp)+,a1 pop return address bra qt2 qt5: rts none of the above prtnum: move.l d1,d3 save the number for later move d4,-(sp) save the width value move.b #$ff,-(sp) flag for end of digit string tst.l d1 is it negative? bpl pn1 if not neg.l d1 else make it positive subq #1,d4 one less for width count pn1: divu #10,d1 get the next digit bvs pnov overflow flag set? move.l d1,d0 if not, save remainder and.l #$ffff,d1 strip the remainder bra toascii skip the overflow stuff pnov: move d1,d0 prepare for long word division clr.w d1 zero out low word swap d1 high word into low divu #10,d1 divide high word move d1,d2 save quotient move d0,d1 low word into low divu #10,d1 divide low word move.l d1,d0 d0 = remainder swap d1 r/q becomes q/r move d2,d1 d1 is low/high swap d1 d1 is finally high/low toascii: swap d0 get remainder move.b d0,gl1: bsr chkio check keyboard beq gl1 wait for a char. to come in cmp.b #ctrlh,d0 delete last character? beq gl3 if so cmp.b #ctrlx,d0 delete the whole line? beq gl4 if so cmp.b #cr,d0 accept a cr beq gl2 cmp.b #' ',d0 if other control char., discard it bcs gl1 gl2: move.b d0,(a0)+ save the char. bsr goout echo the char back out cmp.b #cr,d0 if it's a cr, end the line beq gl7 cmp.l #(buffer+buflen-1),a0 any more room? bcs gl1 yes: get some more, else delete last char. gl3: move.b #ctrlh,d0 delete a char. if possible bsr goout move.b #' ',d0 bsr goout cmp.l #buffer,a0 any char.'s left? bls gl1 if not move.b #ctrlh,d0 if so, finish the bs-space-bs sequence bsr goout subq.l #1,a0 decrement the text pointer bra gl1 back for more gl4: move.l a0,d1 delete the whole line sub.l #buffer,d1 figure out how many backspaces we need beq gl6 if none needed, branch subq #1,d1 adjust for dbra gl5: move.b #ctrlh,d0 and display bs-space-bs sequences bsr g) move.l loplmt,-(sp) move.l lopinc,-(sp) pu1: move.l d1,-(sp) jmp (a6) return * ******************************************************************* * * *** prtstg *** qtstg *** prtnum *** prtln *** * * 'prtstg' prints a string pointed to by a1. it stops printing * and returns to the caller when either a cr is printed or when * the next byte is the same as what was passed in d0 by the * caller. * * 'qtstg' looks for an underline (back-arrow on some systems), * single-quote, or double-quote. if none of these are found, returns * to the caller. if underline, outputs a cr without a lf. if single * or double quote, prints the quoted string and demands a matching * end quote. after the printing, the next 2 bytes of the caller are * skipped over (usually a short branch instruction). * * 'prtnum' prints the 32 bit number in d1, leading blanks are added if * needed to pad the number of spaces to the number in d4. * however, if the number of digits is larger than the no. in * d4, all-(sp) stack it as a digit swap d0 subq #1,d4 decrement width count tst.l d1 if quotient is zero, we're done bne pn1 subq #1,d4 adjust padding count for dbra bmi pn4 skip padding if not needed pn3: move.b #' ',d0 display the required leading spaces bsr goout dbra d4,pn3 pn4: tst.l d3 is number negative? bpl pn5 move.b #'-',d0 if so, display the sign bsr goout pn5: move.b (sp)+,d0 now unstack the digits and display bmi pnret until the flag code is reached add.b #'0',d0 make into ascii bsr goout bra pn5 pnret: move (sp)+,d4 restore width value rts prtln: clr.l d1 move.b (a1)+,d1 get the binary line number lsl #8,d1 move.b (a1)+,d1 moveq #5,d4 display a 5 digit line no. bsr prtnum move.b #' ',d0 followed by a blank bsr goout clr d0 stop char. is a zero bra prtstg display the rest of the line * * ===== see if the text pointed to by a0 is a number. if so, * return the number in d1 and the number of digits in d2, * else return zero in d1 andoout move.b #' ',d0 bsr goout move.b #ctrlh,d0 bsr goout dbra d1,gl5 gl6: lea buffer,a0 reinitialize the text pointer bra gl1 and go back for more gl7: move.b #lf,d0 echo a lf for the cr bsr goout rts fndln: cmp.l #$ffff,d1 line no. must be < 65535 bcc qhow move.l txtbgn,a1 init. the text save pointer move.l txtunf,a2 check if we passed the end subq.l #1,a2 fndlnp: cmp.l a1,a2 change per ddj #106 bcs fndret if so, return with z=0 & c=1 move.b (a1),d2 if not, get a line no. lsl.l #8,d2 move.b 1(a1),d2 cmp d1,d2 is this the line we want? bcc fndret no, not there yet f1: addq.l #2,a1 f2: cmpi.b #cr,(a1)+ bne f2 bra fndlnp fndret: rts return the cond. codes fndnxt: move.l txtunf,a2 subq.l #1,a2 find the next line bra f1 fndskp: move.l txtunf,a2 subq.l #1,a2 bra f2 * ******************************************************************* * * *** mvup *** mvdown *** popa *** pusha *** * * 'mvup' moves a block up from where a1 points digits are printed anyway. negative sign is also * printed and counted in, positive sign is not. * * 'prtln' prints the saved text line pointed to by a1 * with line no. and all. * prtstg: move.b d0,d1 save the stop character ps1: move.b (a1)+,d0 get a text character cmp.b d0,d1 same as stop character? beq prtret if so, return bsr goout display the char. cmp.b #cr,d0 is it a c.r.? bne ps1 no, go back for more move.b #lf,d0 yes, add a l.f. bsr goout prtret: rts then return qtstg: bsr ignblk *** qtstg *** cmpi.b #'"',(a0) bne qt3 addq.l #1,a0 move.b #'"',d0 it is a " qt1: move.l a0,a1 bsr prtstg print until another move.l a1,a0 move.l (sp)+,a1 pop return address cmp.b #lf,d0 was last one a cr? beq runnxl if so, run next line qt2: addq.l #2,a1 skip 2 bytes on return jmp (a1) return qt3: bsr ignblk is it a single quote? cmpi.b #'''',(a0) bne qt4 addq.l #1,a0 move.b #'''',d0 if so, do same as above bra qt1 qt4: bsr ignblk is it an underli  d2. * tstnum: clr.l d1 initialize return parameters clr d2 bsr ignblk skip over blanks tn1: cmp.b #'0',(a0) is it less than zero? bcs tsnmret if so, that's all cmp.b #'9',(a0) is it greater than nine? bhi tsnmret if so, return cmp.l #214748364,d1 see if there's room for new digit bcc qhow if not, we've overflowd move.l d1,d0 quickly multiply result by 10 add.l d1,d1 add.l d1,d1 add.l d0,d1 add.l d1,d1 move.b (a0)+,d0 add in the new digit and.l #$f,d0 add.l d0,d1 addq #1,d2 increment the no. of digits bra tn1 tsnmret: rts * * ===== skip over blanks in the text pointed to by a0. * ignblk: cmp.b #' ',(a0) see if it's a space bne igbret if so, swallow it igb1: addq.l #1,a0 increment the text pointer bra ignblk igbret: rts * * ===== convert the line of text in the input buffer to upper * case (except for stuff between quotes). * toupbuf: lea buffer,a0 set up text pointer clr.b d1 clear quote flag toupb1: move.b (a0)+,d0 get the next text char. d0,d1 moveq #4,d0 trap #3 movem.l (a7)+,d0-d1/a0 rts * * ===== input a character from the console into register d0 (or * return zero status if there's no character available). * *inchr btst #0,$10040 is character ready? * beq incret if not, return zero status * move.b $10042,d0 else get the character * and.b #$7f,d0 zero out the high bit *incret rts inchr: move.l a0,-(a7) moveq #2,d0 trap #3 tst d0 beq.b incret moveq #3,d0 trap #3 incret: move.l (a7)+,a0 rts * * ===== output character to the host (port 2) from register d0 * (preserves all registers.) * auxout: btst #1,$10041 is port 2 ready for a character? beq auxout if not, wait for it move.b d0,$10043 out it goes. rts * * ===== input a character from the host into register d0 (or * return zero status if there's no character available). * auxin: btst #0,$10041 is character ready? beq axiret if not, return zero status move.b $10043,d0 else get the character and.b #$7f,d0 zero out the high ` „€ÿÿ``T` æ` ô` ` ` & .yMù @a ²#ù ¨ 9�¼#À °�¼l#À ¬B€#À ”#À Œ#À ˆ.yMù ea f<>axa ö(HAù ´a ¨a ÚJAgl²¼ÿÿdJàYáYaì*Ifa $M&y ¨a #Ê ¨ �ˆ°¼g¢&y ¨,K×À 9 ¬°‹cø#Ë ¨"N$Maà"H$M&LaÌ`ÿrLISÔLOAÄNE×RUÎSAVÅNEXÔLEÔIÆGOTÏGOSUÂRETURÎREÍFOÒINPUÔPRINÔPOKÅSTOÐBYÅCALÌPEEËRNÄABÓSIZÅTÏSTEÐ>½<¾¾½<½¼Â.Tj�|®Hxzœ¦îb*þ BRº ÔÚRX^jdr‚Cù Eùxa Z&HBf K`$ƶ<.gÂ<²g XŠ KBJjü`ØtÿJjÒGù&RNÓa>#ù ¨a0`ýða( y#È ˆJ¹ ˆgýÖB�"Ha$eýÊ#É ˆ ITˆa ,CùEùŒ`ÿhaŽaà"aäf2`ÎavaÌaÒeýˆa4aðg °<faägúaÄ`àx a0:aâ`ža$ aÖ`ÿra# a,8`a<`a,aT`àa®`?a 8"aX`Þa8`Za¾að/"aHf˜/9 ˆ/9 ŒB¹ ”#Ï Œ`ÿa"9 Œg.A#ß Œ#ß ˆ _aL`¤aja¾#Î ”CùeEùÜ`þ\a‚#À œCùhEùä`þBah`p#À ˜#ù cmp.b #cr,d0 is it end of line? beq toupbrt if so, return cmp.b #'"',d0 a double quote? beq doquo cmp.b #'''',d0 or a single quote? beq doquo tst.b d1 inside quotes? bne toupb1 if so, do the next one bsr toupper convert to upper case move.b d0,-(a0) store it addq.l #1,a0 bra toupb1 and go back for more toupbrt: rts doquo: tst.b d1 are we inside quotes? bne doquo1 move.b d0,d1 if not, toggle inside-quotes flag bra toupb1 doquo1: cmp.b d0,d1 make sure we're ending proper quote bne toupb1 if not, ignore it clr.b d1 else clear quote flag bra toupb1 * * ===== convert the character in d0 to upper case * toupper: cmp.b #'a',d0 is it < 'a'? bcs toupret cmp.b #'z',d0 or > 'z'? bhi toupret sub.b #32,d0 if not, make it upper case toupret: rts * * 'chkio' checks the input. if there's no input, it will return * to the caller with the z flag set. if there is input, the z * flag is cleared and the input byte is in d0. however, if a * control-c is bit axiret: rts * * ===== return to the resident monitor, operating system, etc. * *byebye move.b #228,d7 return to tutor * trap #14 byebye: clr d0 trap #2 initmsg: .dc.b esc,"EGordo's MC68000 Tiny Basic, v1.0",cr,lf,lf,0 okmsg: .dc.b cr,lf,'ok',cr,lf,0 howmsg: .dc.b 'how?',cr,lf,0 whtmsg: .dc.b 'what?',cr,lf,0 srymsg: .dc.b 'sorry.' clmsg: .dc.b cr,lf,0 .even lstrom = * end of possible rom area * * internal variables follow: * basepag: .ds.l 1 cp/m-68k base-page addr ranpnt: .dc.l start random number pointer currnt: .ds.l 1 current line pointer stkgos: .ds.l 1 saves stack pointer in 'gosub' stkinp: .ds.l 1 saves stack pointer during 'input' lopvar: .ds.l 1 'for' loop save area lopinc: .ds.l 1 increment loplmt: .ds.l 1 limit lopln: .ds.l 1 line number loppt: .ds.l 1 text pointer txtunf: .ds.l 1 points to unfilled text area varbgn: .ds.l 1 points to variable area stklmt: .ds.l 1 holds lower limit for stack growth buffer: .ds.b buflen keyboard input buffer  ˆ  #È ¤,O`Ýü g°¹ ”fî$O"NGù×ÉaÆ.K`ÿ$ae|"@ 9 ”gp³Àga¬`ì й ˜iª"€"9 œJ¹ ˜jÁA²€m#ù   ˆ y ¤`þÐap`þÈ` aÀJ€fþ"HB�a>dþ`ûÄ.y �#ß ˆX� _/a¬` a~eV$@`/areà$@B€"_al‚//9 ˆ#üÿÿÿÿ ˆ#Ï �/ <:aAù ´aB$_$€#ß ˆ _X�a,`’`þ*  g a@aþ,`ô`þ y< aúÒaúÒgú°<@g°<:fîa ÁaÁaú¸gúÀ°< fò`Ö#È ¨`úêtBAaúšgú°<ae_À<é ‚QÊÿèNu y"y ¨< aúj< aúb³Èc<:aúVa6a2°< gÔaúB`ò<@aú8< aú0< aú(<aú `úhtéÀ<Ð<0°<9c^aúQÊÿæNua*a , /a "_€`ý`xaJ€gÀ/"@N‘ _`ýaV/CùmEùì`ûÄa2m$`&a,g` a&o`a n`af `Nual`NuB€NupNu Nu "//a"²€NuaŠ-B€`"a€+a"ax+/a"Ð�i8`ìad-g/aD€`èa&aT* /a"a¦`îaB/E/a "ÁAaÔ`ÚCùVEùÈ`ûa*e"@B€ Nua* JBfôa( aÿaþ)Nu`ta@B€�<@eBf(RHaÖЀeªÐ€e¤/a"°�cŒ 9 ¬��Nu°< <eRHÐ@Ð@"9 ¬ÐANu(±„J€jD€J�jD�²¼ÿÿc ÁA²¼ÿÿbN4ÄÁH@ÀÁH@J@f>Ђk8J„jD€NuJ�g*$(±„J€jD€J�jD�v"B€Ò�Ñ€read, 'chkio' will warm-start basic and will not * return to the caller. * chkio: bsr goin get input if possible beq chkret if zero, no input cmp.b #ctrlc,d0 is it control-c? bne chkret if not bra wstart if so, do a warm start chkret: rts * * ===== display a cr-lf sequence * crlf: lea clmsg,a6 * * ===== display a zero-ended string pointed to by register a6 * prmesg: move.b (a6)+,d0 get the char. beq prmret if it's zero, we're done bsr goout else display it bra prmesg prmret: rts ****************************************************** * the following routines are the only ones that need * * to be changed for a different i/o environment. * ****************************************************** * * ===== output character to the console (port 1) from register d0 * (preserves all registers.) * *outchr btst #1,$10040 is port 1 ready for a character? * beq outchr if not, wait for it * move.b d0,$10042 out it goes. * rts outchr: movem.l d0-d1/a0,-(a7) exg  .even txt = * beginning of program area .end  lower limit for stack growth buffer: .ds.b buflen keyboard input buffer åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå!g°‚kR��‚QËÿðÁAJ„jD€D�Nuaÿ"@B€Nuaÿ J€gÞkÚ""y „³ü „eCù €#É „a† R€NuaþÔJ€jD€k¢Nu 9 ¬�¹ ¨NuaþÌe:/a¸= aýÎ,_,€Nu`&a¦:X�`úaš X�`ùêNuaÚ  fNu/Mù sa6 _ 9 ˆg÷¢°¼ÿÿÿÿgûÖB"y ˆa:Ÿ<?a÷,B@S‰aZ`÷t/Mù {`¸/Mù l`®a÷< a÷Aù ´aºgú°<g&°<gD°< g°< eâÀaöÖ°< g^±ü eÎ<aöÀ< aö¸±ü ´c¶<aö¨Sˆ`ª"’¼ ´gSA<aö�< aöˆ<aö€QÉÿæAù ´`ÿz< aöjNu²¼ÿÿdÿJ"y$y ¨SеÉe áJS‰´AeNuT‰  fú`Ü·ÉgÙ`øNuµÉgú!`ø,_#ß ”g#ß ˜#ß œ#ß  #ß ¤NÖ"9 °’�dþÔ,_"9 ”g/9 ¤/9  /9 œ/9 ˜/NÖ²gaõÀ°< fð< aõ²NuaÊ"<""HaÖ I"_°< gø T‰NÑa¬'<'`àa _ < aõx"_`ÞNu&?<ÿJ�jD�SD‚ü i ¼ÿÿ`0BAHA‚ü 42‚ü HA2HAH@H@SDJ�fÊSDk < aõ QÌÿöJƒj<-aõk Ð<0aõ`ò8NuB�áIxa€< aôêB@`ÿaL"_²gB�ÓÁNÑRˆR‰NÑB�BBa0 0e( 9b"²¼ ÌÌÌdýœ Ò�Ò�Ò€Ò�À¼Ò€RB`ÒNu  fRˆ`öNuAù ´B°< g°<"g°<'gJfèaRˆ`àNuJf`Ö²fÒB`ΰ<ae °<zb�< Nuaô>g °<f`ô‚NuMù �gcommercial * * rights are reserved. * ****************************************************************** cr = $0d *ascii equates lf = $0a tab = $09 ctrlc = $03 ctrlh = $08 ctrls = $13 ctrlx = $18 buflen = 80 *length of keyboard input buffer * * standard jump table. you can change these addresses if you are * customizing this interpreter for a different environment. * .text start: bra cstart *cold start entry point gowarm: bra wstart *warm start entry point goout: bra outc *jump to character-out routine goin: bra inc *jump to character-in routine goauxo: bra auxout *jump to auxiliary-out routine goauxi: bra auxin *jump to auxiliary-in routine gobye: bra byebye *jump to monitor, dos, etc. * * modifiable system constants: * txtbgn: .dc.l txt *beginning of program memory endmem: .dc.l $30000 *end of available memory * * the main interpreter starts here: * cstart: move.l endmem,sp *initialize stack pointer lea intmsg,a6 *tell who we are * ******************************************************************* * * *** tables *** direct *** exec *** * * this section of the code tests a string against a table. when * a match is found, control is transferred to the section of * code according to the table. * * at 'exec', a0 should point to the string, a1 should point to * the character table, and a2 should point to the execution * table. at 'direct', a0 should point to the string, a1 and * a2 will be set up to point to tab1 and tab1x1, which are * the tables of all direct and statement commands. * * a '.' in the string will terminate the test and the partial * match will be considered as a match, e.g. 'p.', 'pr.','pri.', * 'prin.', or 'print' will all match 'print'. * * there are two tables: the character table and the execution * table. the character table consists of any number of text items. * each item is a string of characters with the last character's * high bit set to one. the execution table holds a 16-bit * execution aô`öNu9göÀNu9g 9À<Nu9AgöÀCNu9Ag 9CÀ<NupNC Gordos MC68000 Tiny Basic, v1.1 ok how? what? sorry. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå bsr prmesg move.l txtbgn,txtunf *init. end-of-program pointer move.l endmem,d0 *get address of end of memory sub.l #2048,d0 *reserve 2k for the stack move.l d0,stklmt sub.l #108,d0 *reserve variable area (27 long words) move.l d0,varbgn wstart: clr.l d0 *initialize internal variables move.l d0,lopvar move.l d0,stkgos move.l d0,currnt *current line number pointer = 0 move.l endmem,sp *init s.p. again, just in case lea okmsg,a6 *display "ok" bsr prmesg st3: move.b #'>',d0 *prompt with a '>' and bsr getln *read a line. bsr toupbuf *convert to upper case move.l a0,a4 *save pointer to end of line lea buffer,a0 *point to the beginning of line bsr tstnum *is there a number there? bsr ignblk *skip trailing blanks tst d1 *does line no. exist? (or nonzero?) beq direct *if not, it's a direct statement cmp.l #$ffff,d1 *see if line no. is <= 16 bits bcc qhow *if not, we've overflowed move.b d1,-(a0) *store the binary line no. ror #8,d1 *(kludge to store a woraddresses that correspond to each entry in the * character table. * * the end of the character table is a 0 byte which corresponds * to the default routine in the execution table, which is * executed if none of the other table items are matched. * * character-matching tables: tab1: .dc.b 'LIS',('T'+$80) *direct commands .dc.b 'LOA',('D'+$80) .dc.b 'NE',('W'+$80) .dc.b 'RU',('N'+$80) .dc.b 'SAV',('E'+$80) tab2: .dc.b 'NEX',('T'+$80) *direct / statement .dc.b 'LE',('T'+$80) .dc.b 'I',('F'+$80) .dc.b 'GOT',('O'+$80) .dc.b 'GOSU',('B'+$80) .dc.b 'RETUR',('N'+$80) .dc.b 'RE',('M'+$80) .dc.b 'FO',('R'+$80) .dc.b 'INPU',('T'+$80) .dc.b 'PRIN',('T'+$80) .dc.b 'POK',('E'+$80) .dc.b 'STO',('P'+$80) .dc.b 'BY',('E'+$80) .dc.b 'CAL',('L'+$80) .dc.b 0 tab4: .dc.b 'PEE',('K'+$80) *functions .dc.b 'RN',('D'+$80) .dc.b 'AB',('S'+$80) .dc.b 'SIZ',('E'+$80) .dc.b 0 tab5: .dc.b 'T',('O'+$80) *"to" in "for" .dc.b 0 tab6: .dc.b 'STE',('P'+$80) *"step" in "for" .dc.b ****************************************************************** * * * tiny basic for the motorola mc68000 * * * * derived from palo alto tiny basic as published in the may 1976 * * issue of dr. dobb's journal. adapted to the 68000 by: * * Gordon Brandly * * R.R. 2 * * Fort Sask., Alberta, Canada * * T8L 2N8 * * * * Version 1.0 as of july 17, 1984 * * * * * ************************* UPDATES ******************************** * This version is for for cp/m-68k with compupro interfacer 1 * * To assemble: as68 -l tbi68k.s [long addresses] * To link: lo68 -taddress -s -o tbi68k.68k tbi68k.o * Revisions: * 03/22/85 rev 1.1 * Change address modes to long word rev 1.1 * Correct error in multiply routine rev 1.1 * * ****************************************************************** * copyright (c) 1984 by Gordon Brandly. this program may be * * freely distributed for personal use only. all d on a move.b d1,-(a0) *possible byte boundary) rol #8,d1 bsr fndln *find this line in save area move.l a1,a5 *save possible line pointer bne st4 *if not found, insert bsr fndnxt *find the next line (into a1) move.l a5,a2 *pointer to line to be deleted move.l txtunf,a3 *points to top of save area bsr mvup *move up to delete move.l a2,txtunf *update the end pointer st4: move.l a4,d0 *calculate the length of new line sub.l a0,d0 cmp.l #3,d0 *is it just a line no. & cr? beq st3 *if so, it was just a delete move.l txtunf,a3 *compute new end move.l a3,a6 add.l d0,a3 move.l varbgn,d0 *see if there's enough room cmp.l a3,d0 bls qsorry *if not, say so move.l a3,txtunf *if so, store new end position move.l a6,a1 *points to old unfilled area move.l a5,a2 *points to beginning of move area bsr mvdown *move things out of the way move.l a0,a1 *set up to do the insertion move.l a5,a2 move.l a4,a3 bsr mvup *do it bra st3 *go back and get another line *" 0 tab8: .dc.b '>',('='+$80) *relational operators .dc.b '<',('>'+$80) .dc.b ('>'+$80) .dc.b ('='+$80) .dc.b '<',('='+$80) .dc.b ('<'+$80) .dc.b 0 .even *<- for aligning on a word boundary * execution address tables: ******** modified to long word rev 1.1 tab1x1: .dc.l list *direct commands .dc.l load .dc.l new .dc.l run .dc.l save tab2x1: .dc.l next *direct / statement .dc.l let .dc.l if .dc.l goto .dc.l gosub .dc.l return .dc.l rem .dc.l for .dc.l input .dc.l print .dc.l poke .dc.l stop .dc.l gobye .dc.l call .dc.l deflt tab4x1: .dc.l peek *functions .dc.l rnd .dc.l abs .dc.l size .dc.l xp40 tab5x1: .dc.l fr1 *"to" in "for" .dc.l qwhat tab6x1: .dc.l fr2 *"step" in "for" .dc.l fr3 tab8x1: .dc.l xp11 >= *relational operators .dc.l xp12 <> .dc.l xp13 > .dc.l xp15 = .dc.l xp14 <= .dc.l xp16 < .dc.l xp17 * direct: lea tab1,a1 lea tab1x1,a2 exec: bsr ignblk *ignore leading blanks move.l a0,a3 *save the 3 more entries in 'run': * 'runnxl' finds next line, stores it's address and executes it. * 'runtsl' stores the address of this line and executes it. * 'runsml' continues the execution on same line. * * 'goto expr' evaluates the expression, finds the target * line, and jumps to 'runtsl' to do it. * new: bsr endchk move.l txtbgn,txtunf *set the end pointer * stop: bsr endchk bra wstart run: bsr endchk move.l txtbgn,a0 *set pointer to beginning move.l a0,currnt runnxl: tst.l currnt executing a program? beq wstart if not, we've finished a direct stat. clr.l d1 else find the next line number move.l a0,a1 bsr fndlnp bcs wstart if we've fallen off the end, stop runtsl: move.l a1,currnt set currnt to point to the line no. move.l a1,a0 set the text pointer to addq.l #2,a0 the start of the line text runsml: bsr chkio see if a control-c was pressed lea tab2,a1 find command in tab2 lea tab2x1,a2 bra exec and execute it goto: bsr expr evaluate the followiint width bra pr3 look for more to print pr1: bsr qtstg is it a string? bra pr8 if not, must be an expression pr3: bsr tstc if ",", go find next pr6x: .dc.b ',',pr6-pr6x-1 bsr fin in the list. bra pr0 pr6: bsr crlf list ends here bra finish pr8: move d4,-(sp) save the width value bsr expr evaluate the expression move (sp)+,d4 restore the width move.l d0,d1 bsr prtnum print its value bra pr3 more to print? finish: bsr fin check end of command bra qwhat print "what?" if wrong * ******************************************************************* * * *** gosub *** & return *** * * 'gosub expr:' or 'gosub expr' is like the 'goto' command, * except that the current text pointer, stack pointer, etc. are * saved so that execution can be continued after the subroutine * 'return's. in order that 'gosub' can be nested (and even * recursive), the save area must be stacked. the stack pointer * is saved in 'stkgos'. the old 'stkgos' is saved on the stack. * if we pointer clr.b d2 *clear match flag exlp: move.b (a0)+,d0 *get the program character move.b (a1),d1 *get the table character bne exngo *if end of table, move.l a3,a0 *restore the text pointer and... bra exgo *execute the default. exngo: move.b d0,d3 *else check for period... and.b d2,d3 *and a match. cmp.b #'.',d3 beq exgo *if so, execute and.b #$7f,d1 *ignore the table's high bit cmp.b d0,d1 *is there a match? beq exmat addq.l #4,a2 *if not, try the next entry rev 1.1 move.l a3,a0 *reset the program pointer clr.b d2 *sorry, no match ex1: tst.b (a1)+ *get to the end of the entry bpl ex1 bra exlp *back for more matching exmat: moveq #-1,d2 *we've got a match so far tst.b (a1)+ *end of table entry? bpl exlp *if not, go back for more exgo: lea 0,a3 *execute the appropriate routine move.l (a2),a3 rev 1.1 jmp (a3) * ******************************************************************* * * what follows is the code to execute direct and statemng expression bsr endchk must find end of line move.l d0,d1 bsr fndln find the target line bne qhow no such line no. bra runtsl go do it * ******************************************************************* * * *** list *** print *** * * list has two forms: * 'list' lists all saved lines * 'list #' starts listing at the line # * control-s pauses the listing, control-c stops it. * * print command is 'print ....:' or 'print ....' * where '....' is a list of expressions, formats, back-arrows, * and strings. these items a separated by commas. * * a format is a pound sign followed by a number. it controls * the number of spaces the value of an expression is going to * be printed in. it stays effective for the rest of the print * command unless changed by another format. if no format is * specified, 11 positions will be used. * * a string is quoted in a pair of single- or double-quotes. * * an underline (back-arrow) means generate a without a * * a e are in the main routine, 'stkgos' is zero (this was done * in the initialization section of the interpreter), but we still * save it as a flag for no further 'return's. * * 'return' undoes everything that 'gosub' did, and thus * returns the execution to the command after the most recent * 'gosub'. if 'stkgos' is zero, it indicates that we never had * a 'gosub' and is thus an error. * gosub: bsr pusha save the current 'for' parameters bsr expr get line number move.l a0,-(sp) save text pointer move.l d0,d1 bsr fndln find the target line bne ahow if not there, say "how?" move.l currnt,-(sp) found it, save old 'currnt'... move.l stkgos,-(sp) and 'stkgos' clr.l lopvar load new values move.l sp,stkgos bra runtsl return: bsr endchk there should be just a move.l stkgos,d1 get old stack pointer beq qwhat if zero, it doesn't exist move.l d1,sp else restore it move.l (sp)+,stkgos and the old 'stkgos' move.l (sp)+,currnt and the old 'currnt' move.l (sp)+,a0 ent * commands. control is transferred to these points via the command * table lookup code of 'direct' and 'exec' in the last section. * after the command is executed, control is transferred to other * sections as follows: * * for 'list', 'new', and 'stop': go back to the warm start point. * for 'run': go execute the first stored line if any* else go * back to the warm start point. * for 'goto' and 'gosub': go execute the target line. * for 'return' and 'next'* go back to saved return line. * for all others: if 'currnt' is 0, go to warm start* else go * execute next command. (this is done in 'finish'.) * ******************************************************************* * * *** new *** stop *** run (& friends) *** goto *** * * 'new' sets txtunf to point to txtbgn * * 'stop' goes back to wstart * * 'run' finds the first stored line, stores its address * in currnt, and starts executing it. note that only those * commands in tab2 are legal for a stored program. * * there ar is generated after the entire list has been printed * or if the list is empty. if the list ends with a semicolon, * however, no is generated. * list: bsr tstnum see if there's a line no. bsr endchk if not, we get a zero bsr fndln find this or next line ls1: bcs wstart warm start if we passed the end bsr prtln print the line bsr chkio check for listing halt request beq ls3 cmp.b #ctrls,d0 pause the listing? bne ls3 ls2: bsr chkio if so, wait for another keypress beq ls2 ls3: bsr fndlnp find the next line bra ls1 print: move #11,d4 d4 = number of print spaces bsr tstc if null list and ":" pr2x: .dc.b ':',pr2-pr2x-1 bsr crlf give cr-lf and continue bra runsml execution on the same line pr2: bsr tstc if null list and pr0x: .dc.b cr,pr0-pr0x-1 bsr crlf also give cr-lf and bra runnxl execute the next line pr0: bsr tstc else is it a format? pr1x: .dc.b '#',pr1-pr1x-1 bsr expr yes, evaluate expression move d0,d4 and save it as pr#and the old text pointer bsr popa and the old 'for' parameters bra finish and we are back home * ******************************************************************* * * *** for *** & next *** * * 'for' has two forms: * 'for var=exp1 to exp2 step exp1' and 'for var=exp1 to exp2' * the second form means the same thing as the first form with a * step of positive 1. the interpreter will find the variable 'var' * and set its value to the current value of 'exp1'. it also * evaluates 'exp2' and 'exp1' and saves all these together with * the text pointer, etc. in the 'for' save area, which consisits of * 'lopvar', 'lopinc', 'loplmt', 'lopln', and 'loppt'. if there is * already something in the save area (indicated by a non-zero * 'lopvar'), then the old save area is saved on the stack before * the new values are stored. the interpreter will then dig in the * stack and find out if this same variable was used in another * currently active 'for' loop. if that is the case, then the old * 'add in loop increment bvs qhow say "how?" for 32-bit overflow move.l d0,(a1) save control variable's new value move.l loplmt,d1 get loop's limit value tst.l lopinc bpl nx1 branch if loop increment is positive exg d0,d1 nx1: cmp.l d0,d1 test against limit blt nx2 branch if outside limit move.l lopln,currnt within limit, go back to the... move.l loppt,a0 saved 'currnt' and text pointer. bra finish nx2: bsr popa purge this loop bra finish * ******************************************************************* * * *** rem *** if *** input *** let (& deflt) *** * * 'rem' can be followed by anything and is ignored by the * interpreter. * * 'if' is followed by an expression, as a condition and one or * more commands (including other 'if's) separated by colons. * note that the word 'then' is not used. the interpreter evaluates * the expression. if it is non-zero, execution continues. if it * is zero, the commands that follow are ignored and execution * continues on the n "what?" it isn't? move.l d0,a2 put away the variable's address move.b (a0),d2 get ready for 'prtstg' clr.b d0 move.b d0,(a0) move.l (sp)+,a1 bsr prtstg print string as prompt move.b d2,(a0) restore text ip3: move.l a0,-(sp) save in case of error move.l currnt,-(sp) also save 'currnt' move.l #-1,currnt flag that we are in input move.l sp,stkinp save the stack pointer too move.l a2,-(sp) save the variable address move.b #':',d0 print a colon first bsr getln then get an input line lea buffer,a0 point to the buffer bsr expr evaluate the input move.l (sp)+,a2 restore the variable address move.l d0,(a2) save value in variable move.l (sp)+,currnt restore old 'currnt' move.l (sp)+,a0 and the old text pointer ip4: addq.l #4,sp clean up the stack bsr tstc is the next thing a comma? ip5x: .dc.b ',',ip5-ip5x-1 bra input yes, more items ip5: bra finish deflt: cmp.b #cr,(a0) empty line is ok beq lt1 else it is 'let' let: bsr setval do the assignment bsrfor' loop is deactivated. (i.e. purged from the stack) * * 'next var' serves as the logical (not necessarily physical) end * of the 'for' loop. the control variable 'var' is checked with * the 'lopvar'. if they are not the same, the interpreter digs in * the stack to find the right one and purges all those that didn't * match. either way, it then adds the 'step' to that variable and * checks the result with against the limit value. if it is within * the limit, control loops back to the command following the * 'for'. if it's outside the limit, the save area is purged and * execution continues. * for: bsr pusha save the old 'for' save area bsr setval set the control variable move.l a6,lopvar save its address lea tab5,a1 use 'exec' to test for 'to' lea tab5x1,a2 bra exec fr1: bsr expr evaluate the limit move.l d0,loplmt save that lea tab6,a1 use 'exec' to look for the lea tab6x1,a2 word 'step' bra exec fr2: bsr expr found it, get the step value bra fr4 fr3: moveq #1,ext line. * * 'input' is like the 'print' command, and is followed by a list * of items. if the item is a string in single or double quotes, * or is an underline (back arrow), it has the same effect as in * 'print'. if an item is a variable, this variable name is * printed out followed by a colon, then the interpreter waits for * an expression to be typed in. the variable is then set to the * value of this expression. if the variable is preceeded by a * string (again in single or double quotes), the string will be * displayed followed by a colon. the interpreter the waits for an * expression to be entered and sets the variable equal to the * expression's value. if the input expression is invalid, the * interpreter will print "what?", "how?", or "sorry" and reprint * the prompt and redo the input. the execution will not terminate * unless you press control-c. this is handled in 'inperr'. * * 'let' is followed by a list of items separated by commas. * each item consists of a variable,  tstc check for more 'let' items lt1x: .dc.b ',',lt1-lt1x-1 bra let lt1: bra finish until we are finished. * ******************************************************************* * * *** load *** & save *** * * these two commands transfer a program to/from an auxiliary * device such as a cassette, another computer, etc. the program * is converted to an easily-stored format: each line starts with * a colon, the line no. as 4 hex digits, and the rest of the line. * at the end, a line starting with an '@' sign is sent. this * format can be read back with a minimum of processing time by * the 68000. * load: move.l txtbgn,a0 set pointer to start of prog. area move.b #cr,d0 for a cp/m host, tell it we're ready... bsr goauxo by sending a cr to finish pip command. lod1: bsr goauxi look for start of line beq lod1 cmp.b #'@',d0 end of program? beq lodend cmp.b #':',d0 if not, is it start of line? bne lod1 if not, wait for it bsr gbyte get first byte of line no. move.b d1,d0 not found, step defaults to 1 fr4: move.l d0,lopinc save that too fr5: move.l currnt,lopln save address of current line number move.l a0,loppt and text pointer move.l sp,a6 dig into the stack to find 'lopvar' bra fr7 fr6: add.l #20,a6 look at next stack frame fr7: move.l (a6),d0 is it zero? beq fr8 if so, we're done cmp.l lopvar,d0 same as current lopvar? bne fr6 nope, look some more move.l sp,a2 else remove 5 long words from... move.l a6,a1 inside the stack. lea 20,a3 add.l a1,a3 bsr mvdown move.l a3,sp set the sp 5 long words up fr8: bra finish and continue execution next: bsr tstv get address of variable bcs qwhat if no variable, say "what?" move.l d0,a1 save variable's address nx0: move.l lopvar,d0 if 'lopvar' is zero, we never... beq qwhat had a for loop, so say "what?" cmp.l d0,a1 else we check them beq nx3 ok, they agree bsr popa nope, let's see the next frame bra nx0 nx3: move.l (a1),d0 get control variable's value add.l lopinc,d0 an equals sign, and an * expression. the interpreter evaluates the expression and sets * the variable to that value. the interpreter will also handle * 'let' commands without the word 'let'. this is done by 'deflt'. * rem: bra if2 skip the rest of the line if: bsr expr evaluate the expression if1: tst.l d0 is it zero? bne runsml if not, continue if2: move.l a0,a1 clr.l d1 bsr fndskp if so, skip the rest of the line bcc runtsl and run the next line bra wstart if no next line, do a warm start inperr: move.l stkinp,sp restore the old stack pointer move.l (sp)+,currnt and old 'currnt' addq.l #4,sp move.l (sp)+,a0 and old text pointer input: move.l a0,-(sp) save in case of error bsr qtstg is next item a string? bra ip2 nope bsr tstv yes, but is it followed by a variable? bcs ip4 if not, branch move.l d0,a2 put away the variable's address bra ip3 if so, input to variable ip2: move.l a0,-(sp) save for 'prtstg' bsr tstv must be a variable now bcs qwhat$(a0)+ store it bsr gbyte get 2nd bye of line no. move.b d1,(a0)+ store that, too lod2: bsr goauxi get another text char. beq lod2 move.b d0,(a0)+ store it cmp.b #cr,d0 is it the end of the line? bne lod2 if not, go back for more bra lod1 if so, start a new line lodend: move.l a0,txtunf set end-of program pointer bra wstart back to direct mode gbyte: moveq #1,d2 get two hex characters from auxiliary clr d1 and store them as a byte in d1 gbyte1: bsr goauxi get a char. beq gbyte1 cmp.b #'a',d0 bcs gbyte2 subq.b #7,d0 if greater than 9, adjust gbyte2: and.b #$f,d0 strip ascii lsl.b #4,d1 put nybble into the result or.b d0,d1 dbra d2,gbyte1 get another char. rts save: move.l txtbgn,a0 set pointer to start of prog. area move.l txtunf,a1 set pointer to end of prog. area save1: move.b #cr,d0 send out a cr & lf (cp/m likes this) bsr goauxo move.b #lf,d0 bsr goauxo cmp.l a0,a1 are we finished? bls savend move.b #':',d0 if not, start a line bsr  * * *** expr *** * * 'expr' evaluates arithmetical or logical expressions. * ::= * * where is one of the operators in tab8 and the result * of these operations is 1 if true and 0 if false. * ::=(+ or -)(+ or -)(... * where () are optional and (... are optional repeats. * ::=( <* or /> )(... * ::= * * () * is recursive so that the variable '@' can have an * as an index, functions can have an as arguments, and * can be an in parenthesis. * expr: bsr expr2 move.l d0,-(sp) save value lea tab8,a1 look up a relational operator lea tab8x1,a2 bra exec go do it xp11: bsr xp18 is it ">="? blt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp12: bsr xp18 is it "<>"? beq xprt0 no, return d0=0 bra xprt1 else return d0=1 xp13: bsr xp18 is it ">"? ble xprt0 no, return d0=0 bra xprt1 else move.l d0,a1 clr.l d0 move.l (a1),d0 if a variable, return its value in d0 exp4rt: rts xp41: bsr tstnum or is it a number? move.l d1,d0 tst d2 (if not, # of digits will be zero) bne exp4rt if so, return it in d0 parn: bsr tstc else look for ( expr ) xp43x: .dc.b '(',xp43-xp43x-1 bsr expr bsr tstc xp43xx: .dc.b ')',xp43-xp43xx-1 xp42: rts xp43: bra qwhat else say "what?" * * ===== test for a valid variable name. returns carry=1 if not * found, else returns carry=0 and the address of the * variable in d0. tstv: bsr ignblk clr.l d0 move.b (a0),d0 look at the program text sub.b #'@',d0 bcs tstvrt c=1: not a variable bne tv1 branch if not "@" array addq #1,a0 if it is, it should be bsr parn followed by (expr) as its index. add.l d0,d0 bcs qhow say "how?" if index is too big add.l d0,d0 bcs qhow move.l d0,-(sp) save the index bsr size get amount of free memory move.l (sp)+,d1 get back the index cmp.l d1,d0 see if there's enough memory bls goauxo move.b (a0)+,d1 send first half of line no. bsr pbyte move.b (a0)+,d1 and send 2nd half bsr pbyte save2: move.b (a0)+,d0 get a text char. cmp.b #cr,d0 is it the end of the line? beq save1 if so, send cr & lf and start new line bsr goauxo send it out bra save2 go back for more text savend: move.b #'@',d0 send end-of-program indicator bsr goauxo move.b #cr,d0 followed by a cr & lf bsr goauxo move.b #lf,d0 bsr goauxo move.b #$1a,d0 and a control-z to end the cp/m file bsr goauxo bra wstart then go do a warm start pbyte: moveq #1,d2 send two hex characters from d1's low byte pbyte1: rol.b #4,d1 get the next nybble move.b d1,d0 and.b #$f,d0 strip off garbage add.b #'0',d0 make it into ascii cmp.b #'9',d0 bls pbyte2 addq.b #7,d0 adjust if greater than 9 pbyte2: bsr goauxo send it out dbra d2,pbyte1 then send the next nybble rts * ******************************************************************* * * *** poke *** & call *** * * 'pokreturn d0=1 xp14: bsr xp18 is it "<="? bgt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp15: bsr xp18 is it "="? bne xprt0 if not, return d0=0 bra xprt1 else return d0=1 xp15rt: rts xp16: bsr xp18 is it "<"? bge xprt0 if not, return d0=0 bra xprt1 else return d0=1 xp16rt: rts xprt0: clr.l d0 return d0=0 (false) rts xprt1: moveq #1,d0 return d0=1 (true) rts xp17: move.l (sp)+,d0 it's not a rel. operator rts return d0= xp18: move.l (sp)+,d0 reverse the top two stack items move.l (sp)+,d1 move.l d0,-(sp) move.l d1,-(sp) bsr expr2 do second move.l (sp)+,d1 cmp.l d0,d1 compare with the first result rts return the result expr2: bsr tstc negative sign? xp21x: .dc.b '-',xp21-xp21x-1 clr.l d0 yes, fake '0-' bra xp26 xp21: bsr tstc positive sign? ignore it xp22x: .dc.b '+',xp22-xp22x-1 xp22: bsr expr3 first xp23: bsr tstc add? xp25x: .dc.b '+',xp25-xp25x-1 move.l d0,-(sp) yes, save the value bsr expqsorry if not, say "sorry" move.l varbgn,d0 put address of array element... sub.l d1,d0 into d0 rts tv1: cmp.b #27,d0 if not @, is it a through z? eori.b #1,ccr play with condition code reg bcs tstvrt if not, set carry and return addq #1,a0 else bump the text pointer add d0,d0 compute the variable's address add d0,d0 move.l varbgn,d1 add d1,d0 and return it in d0 with carry=0 tstvrt: rts * * ===== multiplies the 32 bit values in d0 and d1, returning * the 32 bit result in d0. * mult32: move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl mlt1 neg.l d0 mlt1: tst.l d1 take absolute value of d1 bpl mlt2 neg.l d1 mlt2: cmp.l #$ffff,d1 is second argument <= 16 bits? bls mlt3 ok, let it through exg d0,d1 else swap the two arguments cmp.l #$ffff,d1 and check 2nd argument again bhi qhow one of them must be 16 bits mlt3: move d0,d2 prepare for 32 bit x 16 bit multiply mulu d1,d2 multiply low word swap d0 e expr1,expr2' stores the byte from 'expr2' into the memory * address specified by 'expr1'. * * 'call expr' jumps to the machine language subroutine whose * starting address is specified by 'expr'. the subroutine can use * all registers but must leave the stack the way it found it. * the subroutine returns to the interpreter by executing an rts. * poke: bsr expr get the memory address bsr tstc it must be followed by a comma pkerx: .dc.b ',',pker-pkerx-1 move.l d0,-(sp) save the address bsr expr get the byte to be poke'd move.l (sp)+,a1 get the address back move.b d0,(a1) store the byte in memory bra finish pker: bra qwhat if no comma, say "what?" call: bsr expr get the subroutine's address tst.l d0 make sure we got a valid address beq qhow if not, say "how?" move.l a0,-(sp) save the text pointer move.l d0,a1 jsr (a1) jump to the subroutine move.l (sp)+,a0 restore the text pointer bra finish * *******************************************************************r3 get the second xp24: move.l (sp)+,d1 add.l d1,d0 add it to the first bvs qhow branch if there's an overflow bra xp23 else go back for more operations xp25: bsr tstc subtract? xp42x: .dc.b '-',xp42-xp42x-1 xp26: move.l d0,-(sp) yes, save the result of 1st bsr expr3 get second neg.l d0 change its sign bra xp24 and do an addition expr3: bsr expr4 get first xp31: bsr tstc multiply? xp34x: .dc.b '*',xp34-xp34x-1 move.l d0,-(sp) yes, save that first result bsr expr4 get second move.l (sp)+,d1 bsr mult32 multiply the two bra xp31 then look for more terms xp34: bsr tstc divide? xp42xx: .dc.b '/',xp42-xp42xx-1 move.l d0,-(sp) save result of 1st bsr expr4 get second move.l (sp)+,d1 exg d0,d1 bsr div32 do the division bra xp31 go back for any more terms expr4: lea tab4,a1 find possible function lea tab4x1,a2 bra exec xp40: bsr tstv nope, not a function bcs xp41 nor a variable %mulu d1,d0 multiply high word swap d0 ******** correction for overflow *********** * if lower word is not zero then was an overflow tst d0 rev 1.1 bne qhow if overflow on multiply, say "how" rev 1.1 add.l d2,d0 d0 now holds the product * if sign bit set after add then overflow bmi qhow if overflow, say "how?" rev 1.1 ********************************************* tst.l d4 were the signs the same? bpl mltret neg.l d0 if not, make the result negative mltret: rts * * ===== divide the 32 bit value in d0 by the 32 bit value in d1. * returns the 32 bit quotient in d0, remainder in d1. * div32: tst.l d1 check for divide-by-zero beq qhow if so, say "how?" move.l d1,d2 move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl div1 neg.l d0 div1: tst.l d1 take absolute value of d1 bpl div2 neg.l d1 div2: moveq #31,d3 iteration count for 32 bits move.l d0,d1 clr.l d0 div3: add.l d1,d1 (this algorithm was translaended with a cr, it finds the * the next line and continues from there. * * 'endchk' checks if a command is ended with a cr. this is * required in certain commands, such as goto, return, stop, etc. * * 'error' prints the string pointed to by a0. it then prints the * line pointed to by currnt with a "?" inserted at where the * old text pointer (should be on top of the stack) points to. * execution of tiny basic is stopped and a warm start is done. * if currnt is zero (indicating a direct command), the direct * command is not printed. if currnt is -1 (indicating * 'input' command in progress), the input line is not printed * and execution is not terminated but continues at 'inperr'. * * related to 'error' are the following: * 'qwhat' saves text pointer on stack and gets "what?" message. * 'awhat' just gets the "what?" message and jumps to 'error'. * 'qsorry' and 'asorry' do the same kind of thing. * 'qhow' and 'ahow' also do this for "how?". * setval: bsr tstv variable name? bcs qwhat igetln' to return. * * 'fndln' finds a line with a given line no. (in d1) in the * text save area. a1 is used as the text pointer. if the line * is found, a1 will point to the beginning of that line * (i.e. the high byte of the line no.), and flags are nc & z. * if that line is not there and a line with a higher line no. * is found, a1 points there and flags are nc & nz. if we reached * the end of the text save area and cannot find the line, flags * are c & nz. * 'fndln' will initialize a1 to the beginning of the text save * area to start the search. some other entries of this routine * will not initialize a1 and do the search. * 'fndlnp' will start with a1 and search for the line no. * 'fndnxt' will bump a1 by 2, find a cr and then start search. * 'fndskp' uses a1 to find a cr, and then starts the search. * getln: bsr goout display the prompt move.b #' ',d0 and a space bsr goout lea buffer,a0 a0 is the buffer pointer gl1: bsr chkio check keyboard beq gl1 wait for a char. to cometed from addx.l d0,d0 the divide routine in ron cain's beq div4 small-c run time library.) cmp.l d2,d0 bmi div4 addq.l #1,d1 sub.l d2,d0 div4: dbra d3,div3 exg d0,d1 put rem. & quot. in proper registers tst.l d4 were the signs the same? bpl divrt neg.l d0 if not, results are negative neg.l d1 divrt: rts * * ===== the peek function returns the byte stored at the address * contained in the following expression. * peek: bsr parn get the memory address move.l d0,a1 clr.l d0 upper 3 bytes will be zero move.b (a1),d0 get the addressed byte rts and return it * * ===== the rnd function returns a random number from 1 to * the value of the following expression in d0. * rnd: bsr parn get the upper limit tst.l d0 it must be positive and non-zero beq qhow bmi qhow move.l d0,d1 move.l ranpnt,a1 get memory as a random number cmp.l #lstrom,a1 bcs ra1 lea start,a1 wrap around if end of program ra1: move.l (a1)+,d0 get the slightly random number bclr f not, say "what?" move.l d0,-(sp) save the variable's address bsr tstc get past the "=" sign svlx: .dc.b '=',sv1-svlx-1 bsr expr evaluate the expression move.l (sp)+,a6 move.l d0,(a6) and save its value in the variable rts sv1: bra qwhat if no "=" sign fin: bsr tstc *** fin *** fi1x: .dc.b ':',fi1-fi1x-1 addq.l #4,sp if ":", discard return address bra runsml continue on the same line fi1: bsr tstc not ":", is it a cr? fi2x: .dc.b cr,fi2-fi2x-1 addq.l #4,sp yes, purge return address bra runnxl execute the next line fi2: rts else return to the caller endchk: bsr ignblk cmp.b #cr,(a0) does it end with a cr? bne qwhat if not, say "what?" rts qwhat: move.l a0,-(sp) awhat: lea whtmsg,a6 error: bsr prmesg display the error message move.l (sp)+,a0 restore the text pointer move.l currnt,d0 get the current line number beq wstart if zero, do a warm start cmp.l #-1,d0 is the line no. pointer = -1? beq inperr if so, redo input move.b (a0),-(sp) save  in cmp.b #ctrlh,d0 delete last character? beq gl3 if so cmp.b #ctrlx,d0 delete the whole line? beq gl4 if so cmp.b #cr,d0 accept a cr beq gl2 cmp.b #' ',d0 if other control char., discard it bcs gl1 gl2: move.b d0,(a0)+ save the char. bsr goout echo the char back out cmp.b #cr,d0 if it's a cr, end the line beq gl7 cmp.l #(buffer+buflen-1),a0 any more room? bcs gl1 yes: get some more, else delete last char. gl3: move.b #ctrlh,d0 delete a char. if possible bsr goout move.b #' ',d0 bsr goout cmp.l #buffer,a0 any char.'s left? bls gl1 if not move.b #ctrlh,d0 if so, finish the bs-space-bs sequence bsr goout subq.l #1,a0 decrement the text pointer bra gl1 back for more gl4: move.l a0,d1 delete the whole line sub.l #buffer,d1 figure out how many backspaces we need beq gl6 if none needed, branch subq #1,d1 adjust for dbra gl5: move.b #ctrlh,d0 and display bs-space-bs sequences bsr goout move.b #' ',d0 bsr goout move.b #ctrlh,d0 bsr goout #31,d0 make sure it's positive move.l a1,ranpnt (even i can do better than this!) bsr div32 rnd(n)=mod(number,n)+1 move.l d1,d0 mod is the remainder of the div. addq.l #1,d0 rts * * ===== the abs function returns an absolute value in d0. * abs: bsr parn get the following expr.'s value tst.l d0 bpl absrt neg.l d0 if negative, complement it bmi qhow if still negative, it was too big absrt: rts * * ===== the size function returns the size of free memory in d0. * size: move.l varbgn,d0 get the number of free bytes... sub.l txtunf,d0 between 'txtunf' and 'varbgn' rts return the number in d0 * ******************************************************************* * * *** setval *** fin *** endchk *** error (& friends) *** * * 'setval' expects a variable, followed by an equal sign and then * an expression. it evaluates the expression and sets the variable * to that value. * * 'fin' checks the end of a command. if it ended with ":", * execution continues. if it the char. pointed to clr.b (a0) put a zero where the error is move.l currnt,a1 point to start of current line bsr prtln display the line in error up to the 0 move.b (sp)+,(a0) restore the character move.b #'?',d0 display a "?" bsr goout clr d0 subq.l #1,a1 point back to the error char. bsr prtstg display the rest of the line bra wstart and do a warm start qsorry: move.l a0,-(sp) asorry: lea srymsg,a6 bra error qhow: move.l a0,-(sp) error: "how?" ahow: lea howmsg,a6 bra error * ******************************************************************* * * *** getln *** fndln (& friends) *** * * 'getln' reads in input line into 'buffer'. it first prompts with * the character in d0 (given by the caller), then it fills the * buffer and echos. it ignores lf's but still echos * them back. control-h is used to delete the last character * entered (if there is one), and control-x is used to delete the * whole line and start over again. cr signals the end of a line, * and causes '& dbra d1,gl5 gl6: lea buffer,a0 reinitialize the text pointer bra gl1 and go back for more gl7: move.b #lf,d0 echo a lf for the cr bsr goout rts fndln: cmp.l #$ffff,d1 line no. must be < 65535 bcc qhow move.l txtbgn,a1 init. the text save pointer fndlnp: move.l txtunf,a2 check if we passed the end subq.l #1,a2 cmp.l a1,a2 rev 1.1 bcs fndret if so, return with z=0 & c=1 move.b (a1)+,d2 if not, get a line no. lsl #8,d2 move.b (a1),d2 subq.l #1,a1 cmp d1,d2 is this the line we want? bcs fndnxt no, not there yet fndret: rts return the cond. codes fndnxt: addq.l #2,a1 find the next line fndskp: cmp.b #cr,(a1)+ try to find a cr bne fndskp keep looking bra fndlnp check if end of text * ******************************************************************* * * *** mvup *** mvdown *** popa *** pusha *** * * 'mvup' moves a block up from where a1 points to where a2 points * until a1=a3 * * 'mvdown' moves a block down from where a1 points to where a3  * 'prtln' prints the saved text line pointed to by a1 * with line no. and all. * prtstg: move.b d0,d1 save the stop character ps1: move.b (a1)+,d0 get a text character cmp.b d0,d1 same as stop character? beq prtret if so, return bsr goout display the char. cmp.b #cr,d0 is it a c.r.? bne ps1 no, go back for more move.b #lf,d0 yes, add a l.f. bsr goout prtret: rts then return qtstg: bsr tstc *** qtstg *** qt3x: .dc.b '"',qt3-qt3x-1 move.b #'"',d0 it is a " qt1: move.l a0,a1 bsr prtstg print until another move.l a1,a0 move.l (sp)+,a1 pop return address cmp.b #lf,d0 was last one a cr? beq runnxl if so, run next line qt2: addq.l #2,a1 skip 2 bytes on return jmp (a1) return qt3: bsr tstc is it a single quote? qt4x: .dc.b '''',qt4-qt4x-1 move.b #'''',d0 if so, do same as above bra qt1 qt4: bsr tstc is it an underline? qt5x: .dc.b '_',qt5-qt5x-1 move.b #cr,d0 if so, output a cr without lf bsr goout move.l (sp)+,a1 pop return address bra qt2 q,a1 get the return address move.b (a1)+,d1 get the byte to compare cmp.b (a0),d1 is it = to what a0 points to? beq tc1 if so clr.l d1 if not, add the second move.b (a1),d1 byte following the call to add.l d1,a1 the return address. jmp (a1) jump to the routine tc1: addq.l #1,a0 if equal, bump text pointer addq.l #1,a1 skip the 2 bytes following jmp (a1) the call and continue. * * ===== see if the text pointed to by a0 is a number. if so, * return the number in d1 and the number of digits in d2, * else return zero in d1 and d2. * tstnum: clr.l d1 initialize return parameters clr d2 bsr ignblk skip over blanks tn1: cmp.b #'0',(a0) is it less than zero? bcs tsnmret if so, that's all cmp.b #'9',(a0) is it greater than nine? bhi tsnmret if so, return cmp.l #214748364,d1 see if there's room for new digit bcc qhow if not, we've overflowd move.l d1,d0 quickly multiply result by 10 add.l d1,d1 add.l d1,d1 add.l d0,d1 add.l d1,d1 move.b (a0)+,d0 add in * points until a1=a2 * * 'popa' restores the 'for' loop variable save area from the stack * * 'pusha' stacks for 'for' loop variable save area onto the stack * mvup: cmp.l a1,a3 see the above description beq mvret move.b (a1)+,(a2)+ bra mvup mvret: rts mvdown: cmp.l a1,a2 see the above description beq mvret move.b -(a1),-(a3) bra mvdown popa: move.l (sp)+,a6 a6 = return address move.l (sp)+,lopvar restore lopvar, but zero means no more beq pp1 move.l (sp)+,lopinc if not zero, restore the rest move.l (sp)+,loplmt move.l (sp)+,lopln move.l (sp)+,loppt pp1: jmp (a6) return pusha: move.l stklmt,d1 are we running out of stack room? sub.l sp,d1 bcc qsorry if so, say we're sorry move.l (sp)+,a6 else get the return address move.l lopvar,d1 save loop variables beq pu1 if lopvar is zero, that's all move.l loppt,-(sp) else save all the others move.l lopln,-(sp) move.l loplmt,-(sp) move.l lopinc,-(sp) pu1: move.l d1,-(sp) jmp (a6) return * *********t5: rts none of the above prtnum: move.l d1,d3 save the number for later move d4,-(sp) save the width value move.b #$ff,-(sp) flag for end of digit string tst.l d1 is it negative? bpl pn1 if not neg.l d1 else make it positive subq #1,d4 one less for width count pn1: divu #10,d1 get the next digit bvs pnov overflow flag set? move.l d1,d0 if not, save remainder and.l #$ffff,d1 strip the remainder bra toascii skip the overflow stuff pnov: move d1,d0 prepare for long word division clr.w d1 zero out low word swap d1 high word into low divu #10,d1 divide high word move d1,d2 save quotient move d0,d1 low word into low divu #10,d1 divide low word move.l d1,d0 d0 = remainder swap d1 r/q becomes q/r move d2,d1 d1 is low/high swap d1 d1 is finally high/low toascii: swap d0 get remainder move.b d0,-(sp) stack it as a digit swap d0 subq #1,d4 decrement width count tst.l d1 if quotient is zero, we're done bne pn1 subq #1,d4 adjust padding c the new digit and.l #$f,d0 add.l d0,d1 addq #1,d2 increment the no. of digits bra tn1 tsnmret: rts * * ===== skip over blanks in the text pointed to by a0. * ignblk: cmp.b #' ',(a0) see if it's a space bne igbret if so, swallow it igb1: addq.l #1,a0 increment the text pointer bra ignblk igbret: rts * * ===== convert the line of text in the input buffer to upper * case (except for stuff between quotes). * toupbuf: lea buffer,a0 set up text pointer clr.b d1 clear quote flag toupb1: move.b (a0)+,d0 get the next text char. cmp.b #cr,d0 is it end of line? beq toupbrt if so, return cmp.b #'"',d0 a double quote? beq doquo cmp.b #'''',d0 or a single quote? beq doquo tst.b d1 inside quotes? bne toupb1 if so, do the next one bsr toupper convert to upper case move.b d0,-(a0) store it addq.l #1,a0 bra toupb1 and go back for more toupbrt: rts doquo: tst.b d1 are we inside quotes? bne doquo1 move.b d0,d1 if not, toggle inside-quotes flag bra tou********************************************************** * * *** prtstg *** qtstg *** prtnum *** prtln *** * * 'prtstg' prints a string pointed to by a1. it stops printing * and returns to the caller when either a cr is printed or when * the next byte is the same as what was passed in d0 by the * caller. * * 'qtstg' looks for an underline (back-arrow on some systems), * single-quote, or double-quote. if none of these are found, returns * to the caller. if underline, outputs a cr without a lf. if single * or double quote, prints the quoted string and demands a matching * end quote. after the printing, the next 2 bytes of the caller are * skipped over (usually a short branch instruction). * * 'prtnum' prints the 32 bit number in d1, leading blanks are added if * needed to pad the number of spaces to the number in d4. * however, if the number of digits is larger than the no. in * d4, all digits are printed anyway. negative sign is also * printed and counted in, positive sign is not. * ount for dbra bmi pn4 skip padding if not needed pn3: move.b #' ',d0 display the required leading spaces bsr goout dbra d4,pn3 pn4: tst.l d3 is number negative? bpl pn5 move.b #'-',d0 if so, display the sign bsr goout pn5: move.b (sp)+,d0 now unstack the digits and display bmi pnret until the flag code is reached add.b #'0',d0 make into ascii bsr goout bra pn5 pnret: move (sp)+,d4 restore width value rts prtln: clr.l d1 move.b (a1)+,d1 get the binary line number lsl #8,d1 move.b (a1)+,d1 moveq #5,d4 display a 5 digit line no. bsr prtnum move.b #' ',d0 followed by a blank bsr goout clr d0 stop char. is a zero bra prtstg display the rest of the line * * ===== test text byte following the call to this subroutine. if it * equals the byte pointed to by a0, return to the code following * the call. if they are not equal, branch to the point * indicated by the offset byte following the text byte. * tstc: bsr ignblk ignore leading blanks move.l (sp)+'pb1 doquo1: cmp.b d0,d1 make sure we're ending proper quote bne toupb1 if not, ignore it clr.b d1 else clear quote flag bra toupb1 * * ===== convert the character in d0 to upper case * toupper: cmp.b #'a',d0 is it < 'a'? bcs toupret cmp.b #'z',d0 or > 'z'? bhi toupret sub.b #32,d0 if not, make it upper case toupret: rts * * 'chkio' checks the input. if there's no input, it will return * to the caller with the z flag set. if there is input, the z * flag is cleared and the input byte is in d0. however, if a * control-c is read, 'chkio' will warm-start basic and will not * return to the caller. * chkio: bsr goin get input if possible beq chkret if zero, no input cmp.b #ctrlc,d0 is it control-c? bne chkret if not bra wstart if so, do a warm start chkret: rts * * ===== display a cr-lf sequence * crlf: lea clmsg,a6 * * ===== display a zero-ended string pointed to by register a6 * prmesg: move.b (a6)+,d0 get the char. beq prmret if it's zero, we're doointer stkgos: .ds.l 1 saves stack pointer in 'gosub' stkinp: .ds.l 1 saves stack pointer during 'input' lopvar: .ds.l 1 'for' loop save area lopinc: .ds.l 1 increment loplmt: .ds.l 1 limit lopln: .ds.l 1 line number loppt: .ds.l 1 text pointer txtunf: .ds.l 1 points to unfilled text area varbgn: .ds.l 1 points to variable area stklmt: .ds.l 1 holds lower limit for stack growth buffer: .ds.b buflen keyboard input buffer txt = * beginning of program area .end ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååD€Nù Èa2aØ *fRˆ/a""a¸`èaÀ /fVRˆ/a "ÁAaà`ÎCùnEùÚ`ùÜa6e"@B€ NuaT JBfôa€ (fšRˆaþÄan )fˆRˆNua^B€�<@eBf(RHaÊЀeºÐ€e´/a"°�cœ 9��Nu°< <eRHÐ@Ð@"9ÐANu(±„J€jD€J�jD�²¼ÿÿc ÁA²¼ÿÿb^4ÄÁH@ÀÁH@J@fNЂkHJ„jD€NuJ�g:$(±„J€jD€J�jD�v"B€Ò�Ñ€g°‚kR��‚QËÿðÁAJ„jD€D�Nuaÿ "@B€NuaÿJ€gîkê""yܳüØeCù €#ÉÜa† R€NuaþÈJ€jD€k²Nu 9�¹NuaþÌeJ/a$ =f>Rˆaýj,_,€Nua :fRˆX�`øÊaü  fRˆX�`ø�Nuaè  fNu/MùÆaD _ 9àgöj°¼ÿÿÿÿgú¤B"yàa`Ÿ<?aõâB@S‰an`ö<aõ6QÉÿæAù `ÿz< aõ Nu²¼ÿÿdÿJ"y$ySеÉeáŠ)´Ad T‰  fú`æNu$ySŠ`ê$ySŠ`â·ÉgÙ`øNuµÉgú!`ø,_#ßìg#ßð#ßô#ßø#ßüNÖ"9’�dþÀ,_"9ìg/9ü/9ø/9ô/9ð/NÖ²gaôb°< fð< aôTNua "fRˆ<""HaÐ I"_°< gö˜T‰NÑaî 'fRˆne bsr goout else display it bra prmesg prmret: rts ****************************************************** * the following routines are the only ones that need * * to be changed for a different i/o environment. * ****************************************************** * * ===== output character to the console (port 1) from register d0 * (preserves all registers.) * data1 = $007F0000 *Compupro interfacer status1 = data1+1 dav = 1 *bit to test tbmt = 0 outc: btst #tbmt,status1 *is port 1 ready for a character? beq outc *if not, wait for it move.b d0,data1 *out it goes. rts * * ===== input a character from the console into register d0 (or * return zero status if there's no character available). * inc: btst #dav,status1 *is character ready? beq incret *if not, return zero status move.b data1,d0 *else get the character and.b #$7f,d0 *zero out the high bit incret: rts * * ===== output character to the host (port 2) from register d0 * (preserves all registers.) `\ÿÿ``f` >` J` X` f` x\#ïØ o#è.hMù’a ø#ù 9�¼#À�¼l#ÀB€#Àì#Àä#Àà.yMù¸a ¬<>a °a <(HAù a îa JAgP²¼ÿÿd ‚àYáYa $*Ifa P$M&ya X#Ê �ˆ°¼g¢&y,K×À 9°‹c 0#Ë"N$Ma ,"H$M&La `ÿrLISÔLOAÄNE×RUÎSAVÅNEXÔLEÔIÆGOTÏGOSUÂRETURÎREÍFOÒINPUÔPRINÔPOKÅCURSOÒSTOÐBYÅCALÌPEEËRNÄABÓSIZÅTÏSTEк PDZ  6 < ”¦`� ’´ ¾î ° ÌR  48D|Œ 0ÒêìòCùEù†a ¼&HBf K`$ƶ<.gÂ<²g XŠ KBJjü`ØtÿJjÒ&RNÓa˜#ùaŠ`þa‚ y#ÈàJ¹àgýøB�"H$ySŠa~eýä#Éà ITˆa ŒCù0Eùš`ÿfara2"a6f„`Îa Öaa$eý¢a ¬a Pg °<fa Dgú$ySŠa`Øx a Ö :fRˆa 4`�a Ä  f Rˆa "`ÿVa ° #f Rˆaö8`aˆ`a – ,fRˆaz`Ôa î`?aÎ8"a°`Øa^`Œaa´/"azfÊ/9à/9äB¹ì#Ïä`þúaL"9ägN.A#ßä#ßà _a’`¤a°aà#ÎìCù}Eùî`þ:aF#ÀôCù€Eù<'`ÚaÜ _fRˆ< aô"_`ÒNu&?<ÿJ�jD�SD‚ü i ¼ÿÿ`0BAHA‚ü 42‚ü HA2HAH@H@SDJ�fÊSDk < aó°QÌÿöJƒj<-aó k Ð<0aó”`ò8NuB�áIxa€< aózB@`ÿB�BBa0 0e( 9b"²¼ ÌÌÌdýŽ Ò�Ò�Ò€Ò�À¼Ò€RB`ÒNu  fRˆ`öNuAù B°< g°<"g°<'gJfèaRˆ`àNuJf`Ö²fÒB`ΰ<ae °<zb�< Nuaòæg °<f`óB- Mî€"pNB,…" pNBJ@f",y"pNB" pNBJ@f Mùcä" pNBJkö`ú""MpBQÈÿü|T |B |I "M (:fAe6  <e,ÀTˆ`R‰p  g .gÁQÈÿî @ÿÿgü QÈÿúNuaha ,f.Rˆ/aV"_€`üŽaLaø ,fRˆa:paùp=aùp Ð/aùp ÐaùJŸ`üTaJ€g./"@N‘ _`ü@a~/a¦ =g& >fL =fRˆaNm$`&aHg` aBo`afàRˆ` ¼aÿjB- .�Bg FOR I=1 TO 100 PRINT I*I*I*I*I*I NEXT I N^NuNVHç *n.¹P²/ aüBXO.¼SÆaúô(@¹ùP²g n!l ``B‡.¼RÄaúÒ¾­ l.-ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååƒEùü`þ a,`p#À#ù#È,O`Ýü g°¹fî$O"NGù×Éa(.K`ÿ$a0eÊ"@ 9g¾³Àga`ì йiø"€"9J¹jÁA²€m#ù y`þÐaÒ`þÈ` a„J€fýö"HB�aždýà`û¸.y #ßX� _/a` a eV$@`/a”e.$@B€"_a΂//9#üÿÿÿÿ#Ï / <:aVAù.a$_$€#ß _X�a¾ ,fþ*Rˆ`Š  gþaxa¢ ,fþRˆ`ìa’,yúKî\aêe¢Mî€"pNB" pNBJkÜB- " pNBJfÂ(,y"pNB" pNBJfMî€`ê 9Є½Àm–#À"`ú¤*9"š¹ …eva ,yúKî\abe" pNB" pNBJkZB- Mî€"pNB,…" pNBJ@f",y"pNB" pNBJ@f Mù"cä" pNBJk`ú"MpBQÈÿü|T |B |I "M (:fAe6  <e,ÀTˆ`R‰p  g .gÁQÈÿî @ÿÿgü QÈÿúNuaha0 ,fJRˆ/aV"_€`üŽaLa ,f.Rˆa:paùp=aùp Ð/aùp ÐaùJŸ`üTaJ€gJ/"@N‘ _`ü@a~/a =g& >fL =fRˆaNm$`&aHg` aBo`afàRˆ` ¼aÿjB- .�BgX=0 FOR I=0 TO 100000 CURSOR RND(22),RND(78) PRINT "*", NEXT I .- B­ .­aû *@»ùP²fà;|¡ 9FTйVâ+@ n!måååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååRˆ/aD€Nù Îa2aô *fRˆ/a""a¸`èaÜ /fVRˆ/a "ÁAaà`ÎCùnEùÜ`ùÜa6e"@B€ Nuap JBfôaœ (f¶RˆaþÄaŠ )f¤RˆNuazB€�<@eBf(RHaÊЀeÖЀeÐ/a"°�c¸ 9&��Nu°< <eRHÐ@Ð@"9&ÐANu(±„J€jD€J�jD�²¼ÿÿc ÁA²¼ÿÿbz4ÄÁH@ÀÁH@J@fjЂkdJ„jD€NuJ�gV$(±„J€jD€J�jD�v"B€Ò�Ñ€g°‚kR��‚QËÿðÁAJ„jD€D�Nuaÿ "@B€NuaÿJ€g k""yþ³üúeCù €#Éþa† R€NuaþÈJ€jD€kÎNuaþ¸J€g/rÿT���núR�≠"Nu 9&�¹"Nuaþ°eJ/a$ =f>RˆaýN,_,€Nua :fRˆX�`ø®aü  fRˆX�`øtNuaè  fNu/MùèaD _ 9göH°¼ÿÿÿÿgúˆB"ya`Ÿ<?aõÀB@S‰an`ö/Mùð`¸/Mùá`®aõœ< aõ”Aù.aÈgú°<g&°<gD°< g°< eâÀaõj°< g^±ü}eÎ<aõT< aõL±ü.c¶<aõa Òa ^(HAù.a a BJAgV²¼ÿÿd ¤àYáYa F*Ifa r$M&y"a z#Ê" �ˆ°¼g¢&y",K×À 9&°‹c R#Ë""N$Ma N"H$M&La :`ÿrLISÔLOAÄNE×RUÎSAVÅNEXÔLEÔIÆGOTÏGOSUÂRETURÎREÍFOÒINPUÔPRINÔPOKÅCURSOÒSTOÐBYÅCALÌPEEËRNÄABÓSIZÅSQÒTÏSTEÐÀ VJ` È < B š¬f– ˜º Äô ¶ ÒX :>J‚®’ 6Ø òøCùEùˆa Ø&HBf K`$ƶ<.gÂ<²g XŠ KBJjü`ØtÿJjÒ&RNÓa´#ù"a¦`þ až y#ÈJ¹gýòB�"H$y"SŠašeýÞ#É ITˆa ¨Cù0Eùœ`ÿfaraN"aRf `Îa òa:a@eýœa Èa lg °<fa `gú$y"SŠa2`Øx a ò :fRˆa P`�a à  f Rˆa >`ÿVa Ì #f Rˆaö8`a¤`a ² ,fRˆa–`Ôa `?aÎ8"aÌ`Øaz`¨a a´/"a–fæ/9/9B¹#Ï`þúah"9gj.A#ß#ß _a®`¤aÌaü#ÎCù€Eùô`þ:aF#ÀCù""HaÐ I"_°< gö|T‰NÑaî 'fRˆ<'`ÚaÜ _fRˆ< aóæ"_`ÒNu&?<ÿJ�jD�SD‚ü i ¼ÿÿ`0BAHA‚ü 42‚ü HA2HAH@H@SDJ�fÊSDk < aóŽQÌÿöJƒj<-aó~k Ð<0aór`ò8NuB�áIxa€< aóXB@`ÿB�BBa0 0e( 9b"²¼ ÌÌÌdýŽ Ò�Ò�Ò€Ò�À¼Ò€RB`ÒNu  fRˆ`öNuAù.B°< g°<"g°<'gJfèaRˆ`àNuJf`Ö²fÒB`ΰ<ae °<zb�< NuaòÄg °<f`óNuMùögaò¤`öNuHçÀ€ÁApNCLßNu/pNCJ@gpNC _Nu9AgöÀCNu9Ag 9CÀ<NuB@NBEGordo's MC68000 Tiny Basic, v1.0 ok how? what? sorry. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå)****************************************************************** * * * tiny basic for the motorola mc68000 * * * * derived from palo alto tiny basic as published in the may 1976 * * issue of dr. dobb's journal. adapted to the 68000 by: * * gordon brandly * * r.r. 2 * * fort sask., alberta, canada * * t8l 2n8 * * * * version 1.0 as of july 17, 1984 * * * * * * this version is for mex68kecb educational computer board i/o. * * * ****************************************************************** * copyright (c) 1984 by gordon brandly. this program may be * * freely distributed for personal use only. all commercial * * rights are reserved. * ****************************************************************** * CP/M-68K file and console I/O added by Dann Lunsford, * * Carmichael, CA, March 25, 1986 * ************************************** tst d1 does line no. exist? (or nonzero?) beq direct if not, it's a direct statement cmp.l #$ffff,d1 see if line no. is <= 16 bits bcc qhow if not, we've overflowed move.b d1,-(a0) store the binary line no. ror #8,d1 (kludge to store a word on a move.b d1,-(a0) possible byte boundary) rol #8,d1 bsr fndln find this line in save area move.l a1,a5 save possible line pointer bne st4 if not found, insert bsr fndnxt find the next line (into a1) move.l a5,a2 pointer to line to be deleted move.l txtunf,a3 points to top of save area bsr mvup move up to delete move.l a2,txtunf update the end pointer st4: move.l a4,d0 calculate the length of new line sub.l a0,d0 cmp.l #3,d0 is it just a line no. & cr? beq st3 if so, it was just a delete move.l txtunf,a3 compute new end move.l a3,a6 add.l d0,a3 move.l varbgn,d0 see if there's enough room cmp.l a3,d0 bls qsorry if not, say so move.l a3,txtunf if so, store new end position move.l a6,a1 points to old unfiBY',('E'+$80) .dc.b 'CAL',('L'+$80) .dc.b 0 tab4: .dc.b 'PEE',('K'+$80) functions .dc.b 'RN',('D'+$80) .dc.b 'AB',('S'+$80) .dc.b 'SIZ',('E'+$80) .dc.b 'SQ',('R'+$80) rev 1.1 .dc.b 0 tab5: .dc.b 'T',('O'+$80) "to" in "for" .dc.b 0 tab6: .dc.b 'STE',('P'+$80) "step" in "for" .dc.b 0 .even * execution address tables: tab1p1: .dc.l list direct commands .dc.l load .dc.l new .dc.l run .dc.l save tab2p1: .dc.l next direct / statement .dc.l let .dc.l if .dc.l goto .dc.l gosub .dc.l return .dc.l rem .dc.l for .dc.l input .dc.l print .dc.l poke .dc.l cursor added drl 25Mar86 .dc.l stoprun .dc.l gobye .dc.l call .dc.l deflt tab4p1: .dc.l peek functions .dc.l rnd .dc.l abs .dc.l size .dc.l sqrt rev 1.1 .dc.l xp40 tab5p1: .dc.l fr1 "to" in "for" .dc.l qwhat tab6p1: .dc.l fr2 "step" in "for" .dc.l fr3 * direct: lea tab1,a1 lea tab1p1,a2 exec: bsr ignblk ignore leading blanks move.l a0,a3 save the pointer c**************************** cr = $0d ascii equates lf = $0a tab = $09 ctrlc = $03 ctrlh = $08 ctrls = $13 ctrlx = $18 esc = $1b writef = $15 write sequential readf = $14 read sequential openf = $0f open file closef = $10 close file deletef = $13 delete file createf = $16 create file setdma = $1a set DMA address fcb = $5c offset for default fcb in base page buflen = 80 length of keyboard input buffer * * standard jump table. you can change these addresses if you are * customizing this interpreter for a different environment. * start: bra cstart cold start entry point gowarm: bra wstart warm start entry point goout: bra outchr jump to character-out routine goin: bra inchr jump to character-in routine goauxo: bra auxout jump to auxiliary-out routine goauxi: bra auxin jump to auxiliary-in routine gobye: bra byebye jump to monitor, dos, etc. * * modifiable system constants: * txtbgn: .dc.l txt beginning of program memory endmem: .dc.l 0 end of availablelled area move.l a5,a2 points to beginning of move area bsr mvdown move things out of the way move.l a0,a1 set up to do the insertion move.l a5,a2 move.l a4,a3 bsr mvup do it bra st3 go back and get another line * ******************************************************************* * * *** tables *** direct *** exec *** * * this section of the code tests a string against a table. when * a match is found, control is transferred to the section of * code according to the table. * * at 'exec', a0 should point to the string, a1 should point to * the character table, and a2 should point to the execution * table. at 'direct', a0 should point to the string, a1 and * a2 will be set up to point to tab1 and tab1p1, which are * the tables of all direct and statement commands. * * a '.' in the string will terminate the test and the partial * match will be considered as a match, e.g. 'p.', 'pr.','pri.', * 'prin.', or 'print' will all match 'print'. * * there are two tables: the charalr.b d2 clear match flag exlp: move.b (a0)+,d0 get the program character move.b (a1),d1 get the table character bne exngo if end of table, move.l a3,a0 restore the text pointer and... bra exgo execute the default. exngo: move.b d0,d3 else check for period... and.b d2,d3 and a match. cmp.b #'.',d3 beq exgo if so, execute and.b #$7f,d1 ignore the table's high bit cmp.b d0,d1 is there a match? beq exmat addq.l #4,a2 if not, try the next entry move.l a3,a0 reset the program pointer clr.b d2 sorry, no match ex1: tst.b (a1)+ get to the end of the entry bpl ex1 bra exlp back for more matching exmat: moveq #-1,d2 we've got a match so far tst.b (a1)+ end of table entry? bpl exlp if not, go back for more exgo: move.l (a2),a3 execute the appropriate routine jmp (a3) * ******************************************************************* * * what follows is the code to execute direct and statement * commands. control is transferred to these points via the com memory * * the main interpreter starts here: * cstart: move.l 4(sp),basepag save cp/m base page pointer move.l 4(sp),a0 get it to where we can use it move.l 4(a0),endmem top of the base page move.l 4(a0),sp initialize stack pointer lea initmsg,a6 tell who we are bsr prmesg move.l txtbgn,txtunf init. end-of-program pointer move.l endmem,d0 get address of end of memory sub.l #2048,d0 reserve 2k for the stack move.l d0,stklmt sub.l #108,d0 reserve variable area (27 long words) move.l d0,varbgn wstart: clr.l d0 initialize internal variables move.l d0,lopvar move.l d0,stkgos move.l d0,currnt current line number pointer = 0 move.l endmem,sp init s.p. again, just in case lea okmsg,a6 display "ok" bsr prmesg st3: move.b #'>',d0 prompt with a '>' and bsr getln read a line. bsr toupbuf convert to upper case move.l a0,a4 save pointer to end of line lea buffer,a0 point to the beginning of line bsr tstnum is there a number there? bsr ignblk skip trailing blanks cter table and the execution * table. the character table consists of any number of text items. * each item is a string of characters with the last character's * high bit set to one. the execution table holds a 16-bit * execution addresses that correspond to each entry in the * character table. * * the end of the character table is a 0 byte which corresponds * to the default routine in the execution table, which is * executed if none of the other table items are matched. * * character-matching tables: tab1: .dc.b 'LIS',('T'+$80) direct commands .dc.b 'LOA',('D'+$80) .dc.b 'NE',('W'+$80) .dc.b 'RU',('N'+$80) .dc.b 'SAV',('E'+$80) tab2: .dc.b 'NEX',('T'+$80) direct / statement .dc.b 'LE',('T'+$80) .dc.b 'I',('F'+$80) .dc.b 'GOT',('O'+$80) .dc.b 'GOSU',('B'+$80) .dc.b 'RETUR',('N'+$80) .dc.b 'RE',('M'+$80) .dc.b 'FO',('R'+$80) .dc.b 'INPU',('T'+$80) .dc.b 'PRIN',('T'+$80) .dc.b 'POK',('E'+$80) .dc.b 'CURSO',('R'+$80) added drl 25Mar86 .dc.b 'STO',('P'+$80) .dc.b '*mand * table lookup code of 'direct' and 'exec' in the last section. * after the command is executed, control is transferred to other * sections as follows: * * for 'list', 'new', and 'stop': go back to the warm start point. * for 'run': go execute the first stored line if any; else go * back to the warm start point. * for 'goto' and 'gosub': go execute the target line. * for 'return' and 'next'; go back to saved return line. * for all others: if 'currnt' is 0, go to warm start; else go * execute next command. (this is done in 'finish'.) * ******************************************************************* * * *** new *** stop *** run (& friends) *** goto *** * * 'new' sets txtunf to point to txtbgn * * 'stop' goes back to wstart * * 'run' finds the first stored line, stores its address * in currnt, and starts executing it. note that only those * commands in tab2 are legal for a stored program. * * there are 3 more entries in 'run': * 'runnxl' finds next line, stores it'serated after the entire list has been printed * or if the list is empty. if the list ends with a semicolon, * however, no is generated. * list: bsr tstnum see if there's a line no. bsr endchk if not, we get a zero bsr fndln find this or next line ls1: bcs wstart warm start if we passed the end bsr prtln print the line bsr chkio check for listing halt request beq ls3 cmp.b #ctrls,d0 pause the listing? bne ls3 ls2: bsr chkio if so, wait for another keypress beq ls2 ls3: move.l txtunf,a2 setup for search subq.l #1,a2 bsr fndlnp find the next line bra ls1 print: move #11,d4 d4 = number of print spaces bsr ignblk if null list and ":" cmpi.b #':',(a0) bne pr2 addq.l #1,a0 bsr crlf give cr-lf and continue bra runsml execution on the same line pr2: bsr ignblk if null list and cmpi.b #cr,(a0) bne pr0 addq.l #1,a0 bsr crlf also give cr-lf and bra runnxl execute the next line pr0: bsr ignblk else is it a format? cmpi.b #'#',(a0) re it move.l (sp)+,stkgos and the old 'stkgos' move.l (sp)+,currnt and the old 'currnt' move.l (sp)+,a0 and the old text pointer bsr popa and the old 'for' parameters bra finish and we are back home * ******************************************************************* * * *** for *** & next *** * * 'for' has two forms: * 'for var=exp1 to exp2 step exp1' and 'for var=exp1 to exp2' * the second form means the same thing as the first form with a * step of positive 1. the interpreter will find the variable 'var' * and set its value to the current value of 'exp1'. it also * evaluates 'exp2' and 'exp1' and saves all these together with * the text pointer, etc. in the 'for' save area, which consisits of * 'lopvar', 'lopinc', 'loplmt', 'lopln', and 'loppt'. if there is * already something in the save area (indicated by a non-zero * 'lopvar'), then the old save area is saved on the stack before * the new values are stored. the interpreter will then dig in the * stack and find out if  address and executes it. * 'runtsl' stores the address of this line and executes it. * 'runsml' continues the execution on same line. * * 'goto expr' evaluates the expression, finds the target * line, and jumps to 'runtsl' to do it. * new: bsr endchk move.l txtbgn,txtunf set the end pointer stoprun: bsr endchk bra wstart run: bsr endchk move.l txtbgn,a0 set pointer to beginning move.l a0,currnt runnxl: tst.l currnt executing a program? beq wstart if not, we've finished a direct stat. clr.l d1 else find the next line number move.l a0,a1 move.l txtunf,a2 setup for search subq.l #1,a2 bsr fndlnp bcs wstart if we've fallen off the end, stop runtsl: move.l a1,currnt set currnt to point to the line no. move.l a1,a0 set the text pointer to addq.l #2,a0 the start of the line text runsml: bsr chkio see if a control-c was pressed lea tab2,a1 find command in tab2 lea tab2p1,a2 bra exec and execute it goto: bsr expr evaluate the following expression  bne pr1 addq.l #1,a0 bsr expr yes, evaluate expression move d0,d4 and save it as print width bra pr3 look for more to print pr1: bsr qtstg is it a string? bra pr8 if not, must be an expression pr3: bsr ignblk if ",", go find next cmpi.b #',',(a0) bne pr6 addq.l #1,a0 bsr fin in the list. bra pr0 pr6: bsr crlf list ends here bra finish pr8: move d4,-(sp) save the width value bsr expr evaluate the expression move (sp)+,d4 restore the width move.l d0,d1 bsr prtnum print its value bra pr3 more to print? finish: bsr fin check end of command bra qwhat print "what?" if wrong * ******************************************************************* * * *** gosub *** & return *** * * 'gosub expr:' or 'gosub expr' is like the 'goto' command, * except that the current text pointer, stack pointer, etc. are * saved so that execution can be continued after the subroutine * 'return's. in order that 'gosub' can be nested (and even * recursive), the save areathis same variable was used in another * currently active 'for' loop. if that is the case, then the old * 'for' loop is deactivated. (i.e. purged from the stack) * * 'next var' serves as the logical (not necessarily physical) end * of the 'for' loop. the control variable 'var' is checked with * the 'lopvar'. if they are not the same, the interpreter digs in * the stack to find the right one and purges all those that didn't * match. either way, it then adds the 'step' to that variable and * checks the result with against the limit value. if it is within * the limit, control loops back to the command following the * 'for'. if it's outside the limit, the save area is purged and * execution continues. * for: bsr pusha save the old 'for' save area bsr setval set the control variable move.l a6,lopvar save its address lea tab5,a1 use 'exec' to test for 'to' lea tab5p1,a2 bra exec fr1: bsr expr evaluate the limit move.l d0,loplmt save that lea tab6,a1 use 'exec' to look for the bsr endchk must find end of line move.l d0,d1 bsr fndln find the target line bne qhow no such line no. bra runtsl go do it * ******************************************************************* * * *** list *** print *** * * list has two forms: * 'list' lists all saved lines * 'list #' starts listing at the line # * control-s pauses the listing, control-c stops it. * * print command is 'print ....:' or 'print ....' * where '....' is a list of expressions, formats, back-arrows, * and strings. these items a separated by commas. * * a format is a pound sign followed by a number. it controls * the number of spaces the value of an expression is going to * be printed in. it stays effective for the rest of the print * command unless changed by another format. if no format is * specified, 11 positions will be used. * * a string is quoted in a pair of single- or double-quotes. * * an underline (back-arrow) means generate a without a * * a is gen must be stacked. the stack pointer * is saved in 'stkgos'. the old 'stkgos' is saved on the stack. * if we are in the main routine, 'stkgos' is zero (this was done * in the initialization section of the interpreter), but we still * save it as a flag for no further 'return's. * * 'return' undoes everything that 'gosub' did, and thus * returns the execution to the command after the most recent * 'gosub'. if 'stkgos' is zero, it indicates that we never had * a 'gosub' and is thus an error. * gosub: bsr pusha save the current 'for' parameters bsr expr get line number move.l a0,-(sp) save text pointer move.l d0,d1 bsr fndln find the target line bne ahow if not there, say "how?" move.l currnt,-(sp) found it, save old 'currnt'... move.l stkgos,-(sp) and 'stkgos' clr.l lopvar load new values move.l sp,stkgos bra runtsl return: bsr endchk there should be just a move.l stkgos,d1 get old stack pointer beq qwhat if zero, it doesn't exist move.l d1,sp else resto+ lea tab6p1,a2 word 'step' bra exec fr2: bsr expr found it, get the step value bra fr4 fr3: moveq #1,d0 not found, step defaults to 1 fr4: move.l d0,lopinc save that too fr5: move.l currnt,lopln save address of current line number move.l a0,loppt and text pointer move.l sp,a6 dig into the stack to find 'lopvar' bra fr7 fr6: add.l #20,a6 look at next stack frame fr7: move.l (a6),d0 is it zero? beq fr8 if so, we're done cmp.l lopvar,d0 same as current lopvar? bne fr6 nope, look some more move.l sp,a2 else remove 5 long words from... move.l a6,a1 inside the stack. lea 20,a3 add.l a1,a3 bsr mvdown move.l a3,sp set the sp 5 long words up fr8: bra finish and continue execution next: bsr tstv get address of variable bcs qwhat if no variable, say "what?" move.l d0,a1 save variable's address nx0: move.l lopvar,d0 if 'lopvar' is zero, we never... beq qwhat had a for loop, so say "what?" cmp.l d0,a1 else we check them beq nx3 ok, they agree bsr popa inperr'. * * 'let' is followed by a list of items separated by commas. * each item consists of a variable, an equals sign, and an * expression. the interpreter evaluates the expression and sets * the variable to that value. the interpreter will also handle * 'let' commands without the word 'let'. this is done by 'deflt'. * rem: bra if2 skip the rest of the line if: bsr expr evaluate the expression if1: tst.l d0 is it zero? bne runsml if not, continue if2: move.l a0,a1 clr.l d1 bsr fndskp if so, skip the rest of the line bcc runtsl and run the next line bra wstart if no next line, do a warm start inperr: move.l stkinp,sp restore the old stack pointer move.l (sp)+,currnt and old 'currnt' addq.l #4,sp move.l (sp)+,a0 and old text pointer input: move.l a0,-(sp) save in case of error bsr qtstg is next item a string? bra ip2 nope bsr tstv yes, but is it followed by a variable? bcs ip4 if not, branch move.l d0,a2 put away the variable's address bra ip3 inn Lunsford, 25Mar86 * load: bsr ignblk move.l basepag,a6 lea fcb(a6),a5 bsr fcbset bcs qwhat lea $80(a6),a6 move.l a6,d1 moveq #setdma,d0 trap #2 move.l a5,d1 moveq #openf,d0 trap #2 tst.b d0 bmi qhow clr.b 32(a5) move.l a5,d1 moveq #readf,d0 trap #2 read header sector tst.b d0 bne qsorry move.l (a6),d4 save program length move.l txtbgn,a6 .rloop: move.l a6,d1 moveq #setdma,d0 trap #2 set buffer addr move.l a5,d1 moveq #readf,d0 trap #2 read one sector's worth of program tst.b d0 bne .rclose lea 128(a6),a6 bra .rloop .rclose: move.l txtbgn,d0 add.l d4,d0 cmpa.l d0,a6 blt qsorry move.l d0,txtunf bra wstart save: move.l txtunf,d5 compute length of program sub.l txtbgn,d5 cmpi.l #5,d5 smallest possible valid program bcs qsorry unable to comply bsr ignblk skip blanks in command move.l basepag,a6 use default fcb lea fcb(a6),a5 point at it bsr fcbset a0 points at string, a5 at fcb bcs qwhat bad filename monope, let's see the next frame bra nx0 nx3: move.l (a1),d0 get control variable's value add.l lopinc,d0 add in loop increment bvs qhow say "how?" for 32-bit overflow move.l d0,(a1) save control variable's new value move.l loplmt,d1 get loop's limit value tst.l lopinc bpl nx1 branch if loop increment is positive exg d0,d1 nx1: cmp.l d0,d1 test against limit blt nx2 branch if outside limit move.l lopln,currnt within limit, go back to the... move.l loppt,a0 saved 'currnt' and text pointer. bra finish nx2: bsr popa purge this loop bra finish * ******************************************************************* * * *** rem *** if *** input *** let (& deflt) *** * * 'rem' can be followed by anything and is ignored by the * interpreter. * * 'if' is followed by an expression, as a condition and one or * more commands (including other 'if's) separated by colons. * note that the word 'then' is not used. the interpreter evaluates * the expression. if it is non-zero, exf so, input to variable ip2: move.l a0,-(sp) save for 'prtstg' bsr tstv must be a variable now bcs qwhat "what?" it isn't? move.l d0,a2 put away the variable's address move.b (a0),d2 get ready for 'prtstg' clr.b d0 move.b d0,(a0) move.l (sp)+,a1 bsr prtstg print string as prompt move.b d2,(a0) restore text ip3: move.l a0,-(sp) save in case of error move.l currnt,-(sp) also save 'currnt' move.l #-1,currnt flag that we are in input move.l sp,stkinp save the stack pointer too move.l a2,-(sp) save the variable address move.b #':',d0 print a colon first bsr getln then get an input line lea buffer,a0 point to the buffer bsr expr evaluate the input move.l (sp)+,a2 restore the variable address move.l d0,(a2) save value in variable move.l (sp)+,currnt restore old 'currnt' move.l (sp)+,a0 and the old text pointer ip4: addq.l #4,sp clean up the stack bsr ignblk is the next thing a comma? cmpi.b #',',(a0) bne finish addq.l #1,a0 bra input yes, more itemsve.l a5,d1 set up for system call moveq #deletef,d0 delete old file if present trap #2 move.l a5,d1 set up for create moveq #createf,d0 trap #2 tst.b d0 bmi qhow can't create clr.b 32(a5) set current record field, file is open lea $80(a6),a6 point at default buffer move.l a6,d1 but it might have been changed moveq #setdma,d0 trap #2 move.l d5,(a6) set length into header record move.l a5,d1 moveq #writef,d0 trap #2 write header tst d0 bne closfile move.l txtbgn,a6 beginning of program buffer sloop: move.l a6,d1 set dma moveq #setdma,d0 trap #2 move.l a5,d1 moveq #writef,d0 trap #2 write program block tst d0 bne closfile lea 128(a6),a6 bump dma pointer cmpa.l txtunf,a6 done? bls sloop no, go write next record closfile: move.l a5,d1 moveq #closef,d0 trap #2 tst.b d0 bmi qhow bra wstart * fcbset builds a CP/M-68K FCB in the place that a5 points at, out * of the string that a0 points at. File type is forced to TBI. * returnecution continues. if it * is zero, the commands that follow are ignored and execution * continues on the next line. * * 'input' is like the 'print' command, and is followed by a list * of items. if the item is a string in single or double quotes, * or is an underline (back arrow), it has the same effect as in * 'print'. if an item is a variable, this variable name is * printed out followed by a colon, then the interpreter waits for * an expression to be typed in. the variable is then set to the * value of this expression. if the variable is preceeded by a * string (again in single or double quotes), the string will be * displayed followed by a colon. the interpreter the waits for an * expression to be entered and sets the variable equal to the * expression's value. if the input expression is invalid, the * interpreter will print "what?", "how?", or "sorry" and reprint * the prompt and redo the input. the execution will not terminate * unless you press control-c. this is handled in ' deflt: cmp.b #cr,(a0) empty line is ok beq finish else it is 'let' let: bsr setval do the assignment bsr ignblk check for more 'let' items cmpi.b #',',(a0) bne finish addq.l #1,a0 bra let * ******************************************************************* * * *** load *** & save *** * * These commands save and restore a program to/from CP/M-68K disk files. * Syntax is: * LOAD FILENAME * SAVE FILENAME * Limitations are (currently) that the file type is forced to TBI, and * that the filename is not checked extensively for validity. The format * of a saved BASIC program file is a one-sector header, which contains in * its first four bytes, the length of the program's core image. The * remaining sectors of the file are a core image of the program space * (line numbers in binary, CR only at end of line). This is easiest * to program. It does, however, preclude the use of a full-screen editor * for program preparation. Think about building one for this BASIC. * Da,s C set if something is uncool. A5 is unchanged on return * a0 has been advanced to point to the last valid char for the fcb fcbset: move.l a5,a1 moveq #32-1,d0 .cloop: clr.b (a1)+ dbra d0,.cloop move.b #'T',9(a5) move.b #'B',10(a5) move.b #'I',11(a5) move.l a5,a1 cmpi.b #':',1(a0) drive present? bne .fcbs1 nope move.b (a0),d0 subi.b #'A',d0 whole buffer was touppered, remember? bcs .fcbex whoops! cmpi.b #'P'-'A'+1,d0 eori #1,ccr bcs .fcbex move.b d0,(a1)+ store drive addq.l #2,a0 bump past D: bra .fcbs2 .fcbs1: addq.l #1,a1 .fcbs2: moveq #8-1,d0 8 chars max .fcbs3: move.b (a0)+,d1 get char cmpi.b #cr,d1 end of line? beq .fcbol yep cmpi.b #'.',d1 alien filetype? beq .fcbol move.b d1,(a1)+ dbra d0,.fcbs3 .fcbol: cmpi #-1,d0 beq .fcbex .fcbl1: move.b #$20,(a1)+ fill in rest of fcb dbra d0,.fcbl1 .fcbex: rts * ******************************************************************* * * *** poke *** & call *** & cursor *** * * 'poke expr1,::=( <* or /> )(... * ::= * * () * is recursive so that the variable '@' can have an * as an index, functions can have an as arguments, and * can be an in parenthesis. * expr: bsr expr2 move.l d0,-(sp) save value * added per ddj #106 bsr ignblk skip blanks move.b (a0)+,d2 get first char cmpi.b #'=',d2 equals beq xp15 yes, go process * cmpi.b #'>',d2 >, or >=? bne xxp1 no * cmpi.b #'=',(a0) >=? bne xp13 no, process > * addq.l #1,a0 skip past = xp11: bsr xp18 is it ">="? blt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp12: bsr xp18 is it "<>"? beq xprt0 no, return d0=0 bra xprt1 else return d0=1 xp13: bsr xp18 is it ">"? ble xprt0 no, return d0=0 bra xprt1 else return d0=1 xp14: bsr xp18 is it "<="? bgt xprt0 no, return d0=0 bra xprt1 else return d0=1 xp15: bsr xp18 is it "="? bne xprt0 if not, return d0=0 bra xprt1 els)+,d1 exg d0,d1 bsr div32 do the division bra xp31 go back for any more terms expr4: lea tab4,a1 find possible function lea tab4p1,a2 bra exec xp40: bsr tstv nope, not a function bcs xp41 nor a variable move.l d0,a1 clr.l d0 move.l (a1),d0 if a variable, return its value in d0 exp4rt: rts xp41: bsr tstnum or is it a number? move.l d1,d0 tst d2 (if not, # of digits will be zero) bne exp4rt if so, return it in d0 parn: bsr ignblk else look for ( expr ) cmpi.b #'(',(a0) bne qwhat addq.l #1,a0 bsr expr bsr ignblk cmpi.b #')',(a0) bne qwhat addq.l #1,a0 xp42: rts * * ===== test for a valid variable name. returns carry=1 if not * found, else returns carry=0 and the address of the * variable in d0. tstv: bsr ignblk clr.l d0 move.b (a0),d0 look at the program text sub.b #'@',d0 bcs tstvrt c=1: not a variable bne tv1 branch if not "@" array addq #1,a0 if it is, it should be bsr parn followed by (expr) as its index. add.l d0,d0 bexpr2' stores the byte from 'expr2' into the memory * address specified by 'expr1'. * * 'call expr' jumps to the machine language subroutine whose * starting address is specified by 'expr'. the subroutine can use * all registers but must leave the stack the way it found it. * the subroutine returns to the interpreter by executing an rts. * * 'cursor expr1,expr2' positions the cursor on the terminal screen * expr1 is the row co-ordinate, and expr2 is the column. * note: No checking is done for proper range of row or column. * Contains terminal dependent code, must be altered if ported to * a different terminal. * poke: bsr expr get the memory address bsr ignblk it must be followed by a comma cmpi.b #',',(a0) bne qwhat addq.l #1,a0 move.l d0,-(sp) save the address bsr expr get the byte to be poke'd move.l (sp)+,a1 get the address back move.b d0,(a1) store the byte in memory bra finish cursor: bsr expr get the row coord bsr ignblk must be followed by a comma cmpi.b e return d0=1 xp15rt: rts xp16: bsr xp18 is it "<"? bge xprt0 if not, return d0=0 bra xprt1 else return d0=1 xp16rt: rts xprt0: clr.l d0 return d0=0 (false) rts xprt1: moveq #1,d0 return d0=1 (true) rts * added per ddj #106 xxp2: cmpi.b #'=',(a0) <=? bne xxp3 no addq.l #1,a0 bra xp14 process <= xxp3: cmpi.b #'>',(a0) <>? bne xp16 no, process < addq.l #1,a0 skip past > bra xp12 process <> xxp1: cmpi.b #'<',d2 <, <=, or <>? beq xxp2 no subq.l #1,a0 default case, so drop through and handle xp17: move.l (sp)+,d0 it's not a rel. operator rts return d0= xp18: move.l (sp)+,d0 reverse the top two stack items move.l (sp)+,d1 move.l d0,-(sp) move.l d1,-(sp) bsr expr2 do second move.l (sp)+,d1 cmp.l d0,d1 compare with the first result rts return the result expr2: bsr ignblk negative sign? cmpi.b #'-',(a0) bne xp21 addq.l #1,a0 clr.l d0 yes, fake '0-' bra xp26 xp21: bsr ignblk positive sign? ignore it cmpi.b #'cs qhow say "how?" if index is too big add.l d0,d0 bcs qhow move.l d0,-(sp) save the index bsr size get amount of free memory move.l (sp)+,d1 get back the index cmp.l d1,d0 see if there's enough memory bls qsorry if not, say "sorry" move.l varbgn,d0 put address of array element... sub.l d1,d0 into d0 rts tv1: cmp.b #27,d0 if not @, is it a through z? eori #1,ccr bcs tstvrt if not, set carry and return addq #1,a0 else bump the text pointer add d0,d0 compute the variable's address add d0,d0 move.l varbgn,d1 add d1,d0 and return it in d0 with carry=0 tstvrt: rts * * ===== multiplies the 32 bit values in d0 and d1, returning * the 32 bit result in d0. * mult32: move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl mlt1 neg.l d0 mlt1: tst.l d1 take absolute value of d1 bpl mlt2 neg.l d1 mlt2: cmp.l #$ffff,d1 is second argument <= 16 bits? bls mlt3 ok, let it through exg d0,d1 else swap the two argume#',',(a0) bne qwhat addq.l #1,a0 move.b d0,-(sp) save row bsr expr get column move.b d0,-(sp) save column moveq #$1b,d0 cursor position lead in bsr goout moveq #$3d,d0 bsr goout moveq #$20,d0 add.b 2(sp),d0 bsr goout moveq #$20,d0 add.b (sp),d0 bsr goout tst.l (sp)+ bra finish call: bsr expr get the subroutine's address tst.l d0 make sure we got a valid address beq qhow if not, say "how?" move.l a0,-(sp) save the text pointer move.l d0,a1 jsr (a1) jump to the subroutine move.l (sp)+,a0 restore the text pointer bra finish * ******************************************************************* * * *** expr *** * * 'expr' evaluates arithmetical or logical expressions. * ::= * * where is one of the operators in tab8 and the result * of these operations is 1 if true and 0 if false. * ::=(+ or -)(+ or -)(... * where () are optional and (... are optional repeats. * +',(a0) bne xp22 addq.l #1,a0 xp22: bsr expr3 first xp23: bsr ignblk add? cmpi.b #'+',(a0) bne xp25 addq.l #1,a0 move.l d0,-(sp) yes, save the value bsr expr3 get the second xp24: move.l (sp)+,d1 add.l d1,d0 add it to the first bvs qhow branch if there's an overflow bra xp23 else go back for more operations xp25: bsr ignblk subtract? cmpi.b #'-',(a0) bne xp42 addq.l #1,a0 xp26: move.l d0,-(sp) yes, save the result of 1st bsr expr3 get second neg.l d0 change its sign jmp xp24 and do an addition expr3: bsr expr4 get first xp31: bsr ignblk multiply? cmpi.b #'*',(a0) bne xp34 addq.l #1,a0 move.l d0,-(sp) yes, save that first result bsr expr4 get second move.l (sp)+,d1 bsr mult32 multiply the two bra xp31 then look for more terms xp34: bsr ignblk divide? cmpi.b #'/',(a0) bne xp42 addq.l #1,a0 move.l d0,-(sp) save result of 1st bsr expr4 get second move.l (sp-nts cmp.l #$ffff,d1 and check 2nd argument again bhi qhow one of them must be 16 bits mlt3: move d0,d2 prepare for 32 bit x 16 bit multiply mulu d1,d2 multiply low word swap d0 mulu d1,d0 multiply high word swap d0 *********** multiply overflow fix ********** rev 1.1 tst d0 test for overflow bne qhow add.l d2,d0 d0 now holds the product * if sign bit set after add then overflow bmi qhow if overflow, say "how?" ******************************************** tst.l d4 were the signs the same? bpl mltret neg.l d0 if not, make the result negative mltret: rts * * ===== divide the 32 bit value in d0 by the 32 bit value in d1. * returns the 32 bit quotient in d0, remainder in d1. * div32: tst.l d1 check for divide-by-zero beq qhow if so, say "how?" move.l d1,d2 move.l d1,d4 eor.l d0,d4 see if the signs are the same tst.l d0 take absolute value of d0 bpl div1 neg.l d0 div1: tst.l d1 take absolute value of d1 bpl div2 neg.l d1 div2: moveq #31,d3 : move.l varbgn,d0 get the number of free bytes... sub.l txtunf,d0 between 'txtunf' and 'varbgn' rts return the number in d0 * ******************************************************************* * * *** setval *** fin *** endchk *** error (& friends) *** * * 'setval' expects a variable, followed by an equal sign and then * an expression. it evaluates the expression and sets the variable * to that value. * * 'fin' checks the end of a command. if it ended with ":", * execution continues. if it ended with a cr, it finds the * the next line and continues from there. * * 'endchk' checks if a command is ended with a cr. this is * required in certain commands, such as goto, return, stop, etc. * * 'error' prints the string pointed to by a0. it then prints the * line pointed to by currnt with a "?" inserted at where the * old text pointer (should be on top of the stack) points to. * execution of tiny basic is stopped and a warm start is done. * if currnt is zero (indicating a direct com ahow: lea howmsg,a6 bra error * ******************************************************************* * * *** getln *** fndln (& friends) *** * * 'getln' reads in input line into 'buffer'. it first prompts with * the character in d0 (given by the caller), then it fills the * buffer and echos. it ignores lf's but still echos * them back. control-h is used to delete the last character * entered (if there is one), and control-x is used to delete the * whole line and start over again. cr signals the end of a line, * and causes 'getln' to return. * * 'fndln' finds a line with a given line no. (in d1) in the * text save area. a1 is used as the text pointer. if the line * is found, a1 will point to the beginning of that line * (i.e. the high byte of the line no.), and flags are nc & z. * if that line is not there and a line with a higher line no. * is found, a1 points there and flags are nc & nz. if we reached * the end of the text save area and cannot find the line, flags * are c & nz. * 'fniteration count for 32 bits move.l d0,d1 clr.l d0 div3: add.l d1,d1 (this algorithm was translated from addx.l d0,d0 the divide routine in ron cain's beq div4 small-c run time library.) cmp.l d2,d0 bmi div4 addq.l #1,d1 sub.l d2,d0 div4: dbra d3,div3 exg d0,d1 put rem. & quot. in proper registers tst.l d4 were the signs the same? bpl divrt neg.l d0 if not, results are negative neg.l d1 divrt: rts * * ===== the peek function returns the byte stored at the address * contained in the following expression. * peek: bsr parn get the memory address move.l d0,a1 clr.l d0 upper 3 bytes will be zero move.b (a1),d0 get the addressed byte rts and return it * * ===== the rnd function returns a random number from 1 to * the value of the following expression in d0. * rnd: bsr parn get the upper limit tst.l d0 it must be positive and non-zero beq qhow bmi qhow move.l d0,d1 move.l ranpnt,a1 get memory as a random number cmp.l #lstrom,a1 bcs ra1 lemand), the direct * command is not printed. if currnt is -1 (indicating * 'input' command in progress), the input line is not printed * and execution is not terminated but continues at 'inperr'. * * related to 'error' are the following: * 'qwhat' saves text pointer on stack and gets "what?" message. * 'awhat' just gets the "what?" message and jumps to 'error'. * 'qsorry' and 'asorry' do the same kind of thing. * 'qhow' and 'ahow' also do this for "how?". * setval: bsr tstv variable name? bcs qwhat if not, say "what?" move.l d0,-(sp) save the variable's address bsr ignblk get past the "=" sign cmpi.b #'=',(a0) bne qwhat addq.l #1,a0 bsr expr evaluate the expression move.l (sp)+,a6 move.l d0,(a6) and save its value in the variable rts fin: bsr ignblk *** fin *** cmpi.b #':',(a0) bne fi1 addq.l #1,a0 addq.l #4,sp if ":", discard return address bra runsml continue on the same line fi1: bsr ignblk not ":", is it a cr? cmpi.b #cr,(a0) bne fi2 addq.l #1,a0 dln' will initialize a1 to the beginning of the text save * area to start the search. some other entries of this routine * will not initialize a1 and do the search. * 'fndlnp' will start with a1 and search for the line no. * 'fndnxt' will bump a1 by 2, find a cr and then start search. * 'fndskp' uses a1 to find a cr, and then starts the search. * getln: bsr goout display the prompt move.b #' ',d0 and a space bsr goout lea buffer,a0 a0 is the buffer pointer gl1: bsr chkio check keyboard beq gl1 wait for a char. to come in cmp.b #ctrlh,d0 delete last character? beq gl3 if so cmp.b #ctrlx,d0 delete the whole line? beq gl4 if so cmp.b #cr,d0 accept a cr beq gl2 cmp.b #' ',d0 if other control char., discard it bcs gl1 gl2: move.b d0,(a0)+ save the char. bsr goout echo the char back out cmp.b #cr,d0 if it's a cr, end the line beq gl7 cmp.l #(buffer+buflen-1),a0 any more room? bcs gl1 yes: get some more, else delete last char. gl3: move.b #ctrlh,d0 delete a chara start,a1 wrap around if end of program ra1: move.l (a1)+,d0 get the slightly random number bclr #31,d0 make sure it's positive move.l a1,ranpnt (even i can do better than this!) bsr div32 rnd(n)=mod(number,n)+1 move.l d1,d0 mod is the remainder of the div. addq.l #1,d0 rts * * ===== the abs function returns an absolute value in d0. * abs: bsr parn get the following expr.'s value tst.l d0 bpl absrt neg.l d0 if negative, complement it bmi qhow if still negative, it was too big absrt: rts * * * ===== the sqr function returns the integer square root of d0 * sqrt: bsr parn get argument tst.l d0 is argument 0? beq sqrtn yes, so return * move.l d1,-(a7) save d1 moveq #-1,d1 initialize odd sqrtlp: addq.l #2,d1 next odd init sub.l d1,d0 done yet? bgt sqrtlp if not, loop * addq.l #1,d1 round up lsr.l d1 move.l d1,d0 return in d0 move.l (a7)+,d1 restore d1 sqrtn: rts * * ===== the size function returns the size of free memory in d0. * size addq.l #4,sp yes, purge return address bra runnxl execute the next line fi2: rts else return to the caller endchk: bsr ignblk cmp.b #cr,(a0) does it end with a cr? bne qwhat if not, say "what?" rts qwhat: move.l a0,-(sp) awhat: lea whtmsg,a6 error: bsr prmesg display the error message move.l (sp)+,a0 restore the text pointer move.l currnt,d0 get the current line number beq wstart if zero, do a warm start cmp.l #-1,d0 is the line no. pointer = -1? beq inperr if so, redo input move.b (a0),-(sp) save the char. pointed to clr.b (a0) put a zero where the error is move.l currnt,a1 point to start of current line bsr prtln display the line in error up to the 0 move.b (sp)+,(a0) restore the character move.b #'?',d0 display a "?" bsr goout clr d0 subq.l #1,a1 point back to the error char. bsr prtstg display the rest of the line bra wstart and do a warm start qsorry: move.l a0,-(sp) asorry: lea srymsg,a6 bra error qhow: move.l a0,-(sp) error: "how?" .. if possible bsr goout move.b #' ',d0 bsr goout cmp.l #buffer,a0 any char.'s left? bls gl1 if not move.b #ctrlh,d0 if so, finish the bs-space-bs sequence bsr goout subq.l #1,a0 decrement the text pointer bra gl1 back for more gl4: move.l a0,d1 delete the whole line sub.l #buffer,d1 figure out how many backspaces we need beq gl6 if none needed, branch subq #1,d1 adjust for dbra gl5: move.b #ctrlh,d0 and display bs-space-bs sequences bsr goout move.b #' ',d0 bsr goout move.b #ctrlh,d0 bsr goout dbra d1,gl5 gl6: lea buffer,a0 reinitialize the text pointer bra gl1 and go back for more gl7: move.b #lf,d0 echo a lf for the cr bsr goout rts fndln: cmp.l #$ffff,d1 line no. must be < 65535 bcc qhow move.l txtbgn,a1 init. the text save pointer move.l txtunf,a2 check if we passed the end subq.l #1,a2 fndlnp: cmp.l a1,a2 change per ddj #106 bcs fndret if so, return with z=0 & c=1 move.b (a1),d2 if not, get a line no. lsl.l #8,d2 move.b returns * to the caller. if underline, outputs a cr without a lf. if single * or double quote, prints the quoted string and demands a matching * end quote. after the printing, the next 2 bytes of the caller are * skipped over (usually a short branch instruction). * * 'prtnum' prints the 32 bit number in d1, leading blanks are added if * needed to pad the number of spaces to the number in d4. * however, if the number of digits is larger than the no. in * d4, all digits are printed anyway. negative sign is also * printed and counted in, positive sign is not. * * 'prtln' prints the saved text line pointed to by a1 * with line no. and all. * prtstg: move.b d0,d1 save the stop character ps1: move.b (a1)+,d0 get a text character cmp.b d0,d1 same as stop character? beq prtret if so, return bsr goout display the char. cmp.b #cr,d0 is it a c.r.? bne ps1 no, go back for more move.b #lf,d0 yes, add a l.f. bsr goout prtret: rts then return qtstg: bsr ignblk *** qtstg *** c pnret: move (sp)+,d4 restore width value rts prtln: clr.l d1 move.b (a1)+,d1 get the binary line number lsl #8,d1 move.b (a1)+,d1 moveq #5,d4 display a 5 digit line no. bsr prtnum move.b #' ',d0 followed by a blank bsr goout clr d0 stop char. is a zero bra prtstg display the rest of the line * * ===== see if the text pointed to by a0 is a number. if so, * return the number in d1 and the number of digits in d2, * else return zero in d1 and d2. * tstnum: clr.l d1 initialize return parameters clr d2 bsr ignblk skip over blanks tn1: cmp.b #'0',(a0) is it less than zero? bcs tsnmret if so, that's all cmp.b #'9',(a0) is it greater than nine? bhi tsnmret if so, return cmp.l #214748364,d1 see if there's room for new digit bcc qhow if not, we've overflowd move.l d1,d0 quickly multiply result by 10 add.l d1,d1 add.l d1,d1 add.l d0,d1 add.l d1,d1 move.b (a0)+,d0 add in the new digit and.l #$f,d0 add.l d0,d1 addq #1,d2 increment the no. of digit1(a1),d2 cmp d1,d2 is this the line we want? bcc fndret no, not there yet f1: addq.l #2,a1 f2: cmpi.b #cr,(a1)+ bne f2 bra fndlnp fndret: rts return the cond. codes fndnxt: move.l txtunf,a2 subq.l #1,a2 find the next line bra f1 fndskp: move.l txtunf,a2 subq.l #1,a2 bra f2 * ******************************************************************* * * *** mvup *** mvdown *** popa *** pusha *** * * 'mvup' moves a block up from where a1 points to where a2 points * until a1=a3 * * 'mvdown' moves a block down from where a1 points to where a3 * points until a1=a2 * * 'popa' restores the 'for' loop variable save area from the stack * * 'pusha' stacks for 'for' loop variable save area onto the stack * mvup: cmp.l a1,a3 see the above description beq mvret move.b (a1)+,(a2)+ bra mvup mvret: rts mvdown: cmp.l a1,a2 see the above description beq mvret move.b -(a1),-(a3) bra mvdown popa: move.l (sp)+,a6 a6 = return address move.l (sp)+,lopvar restore lopvarmpi.b #'"',(a0) bne qt3 addq.l #1,a0 move.b #'"',d0 it is a " qt1: move.l a0,a1 bsr prtstg print until another move.l a1,a0 move.l (sp)+,a1 pop return address cmp.b #lf,d0 was last one a cr? beq runnxl if so, run next line qt2: addq.l #2,a1 skip 2 bytes on return jmp (a1) return qt3: bsr ignblk is it a single quote? cmpi.b #'''',(a0) bne qt4 addq.l #1,a0 move.b #'''',d0 if so, do same as above bra qt1 qt4: bsr ignblk is it an underline? cmpi.b #'_',(a0) bne qt5 addq.l #1,a0 move.b #cr,d0 if so, output a cr without lf bsr goout move.l (sp)+,a1 pop return address bra qt2 qt5: rts none of the above prtnum: move.l d1,d3 save the number for later move d4,-(sp) save the width value move.b #$ff,-(sp) flag for end of digit string tst.l d1 is it negative? bpl pn1 if not neg.l d1 else make it positive subq #1,d4 one less for width count pn1: divu #10,d1 get the next digit bvs pnov overflow flag set? move.l d1,d0 if not, save remainders bra tn1 tsnmret: rts * * ===== skip over blanks in the text pointed to by a0. * ignblk: cmp.b #' ',(a0) see if it's a space bne igbret if so, swallow it igb1: addq.l #1,a0 increment the text pointer bra ignblk igbret: rts * * ===== convert the line of text in the input buffer to upper * case (except for stuff between quotes). * toupbuf: lea buffer,a0 set up text pointer clr.b d1 clear quote flag toupb1: move.b (a0)+,d0 get the next text char. cmp.b #cr,d0 is it end of line? beq toupbrt if so, return cmp.b #'"',d0 a double quote? beq doquo cmp.b #'''',d0 or a single quote? beq doquo tst.b d1 inside quotes? bne toupb1 if so, do the next one bsr toupper convert to upper case move.b d0,-(a0) store it addq.l #1,a0 bra toupb1 and go back for more toupbrt: rts doquo: tst.b d1 are we inside quotes? bne doquo1 move.b d0,d1 if not, toggle inside-quotes flag bra toupb1 doquo1: cmp.b d0,d1 make sure we're ending proper quote bne toupb1 if not, , but zero means no more beq pp1 move.l (sp)+,lopinc if not zero, restore the rest move.l (sp)+,loplmt move.l (sp)+,lopln move.l (sp)+,loppt pp1: jmp (a6) return pusha: move.l stklmt,d1 are we running out of stack room? sub.l sp,d1 bcc qsorry if so, say we're sorry move.l (sp)+,a6 else get the return address move.l lopvar,d1 save loop variables beq pu1 if lopvar is zero, that's all move.l loppt,-(sp) else save all the others move.l lopln,-(sp) move.l loplmt,-(sp) move.l lopinc,-(sp) pu1: move.l d1,-(sp) jmp (a6) return * ******************************************************************* * * *** prtstg *** qtstg *** prtnum *** prtln *** * * 'prtstg' prints a string pointed to by a1. it stops printing * and returns to the caller when either a cr is printed or when * the next byte is the same as what was passed in d0 by the * caller. * * 'qtstg' looks for an underline (back-arrow on some systems), * single-quote, or double-quote. if none of these are found,  and.l #$ffff,d1 strip the remainder bra toascii skip the overflow stuff pnov: move d1,d0 prepare for long word division clr.w d1 zero out low word swap d1 high word into low divu #10,d1 divide high word move d1,d2 save quotient move d0,d1 low word into low divu #10,d1 divide low word move.l d1,d0 d0 = remainder swap d1 r/q becomes q/r move d2,d1 d1 is low/high swap d1 d1 is finally high/low toascii: swap d0 get remainder move.b d0,-(sp) stack it as a digit swap d0 subq #1,d4 decrement width count tst.l d1 if quotient is zero, we're done bne pn1 subq #1,d4 adjust padding count for dbra bmi pn4 skip padding if not needed pn3: move.b #' ',d0 display the required leading spaces bsr goout dbra d4,pn3 pn4: tst.l d3 is number negative? bpl pn5 move.b #'-',d0 if so, display the sign bsr goout pn5: move.b (sp)+,d0 now unstack the digits and display bmi pnret until the flag code is reached add.b #'0',d0 make into ascii bsr goout bra pn5/ignore it clr.b d1 else clear quote flag bra toupb1 * * ===== convert the character in d0 to upper case * toupper: cmp.b #'a',d0 is it < 'a'? bcs toupret cmp.b #'z',d0 or > 'z'? bhi toupret sub.b #32,d0 if not, make it upper case toupret: rts * * 'chkio' checks the input. if there's no input, it will return * to the caller with the z flag set. if there is input, the z * flag is cleared and the input byte is in d0. however, if a * control-c is read, 'chkio' will warm-start basic and will not * return to the caller. * chkio: bsr goin get input if possible beq chkret if zero, no input cmp.b #ctrlc,d0 is it control-c? bne chkret if not bra wstart if so, do a warm start chkret: rts * * ===== display a cr-lf sequence * crlf: lea clmsg,a6 * * ===== display a zero-ended string pointed to by register a6 * prmesg: move.b (a6)+,d0 get the char. beq prmret if it's zero, we're done bsr goout else display it bra prmesg prmret: rts ***********************currnt: .ds.l 1 current line pointer stkgos: .ds.l 1 saves stack pointer in 'gosub' stkinp: .ds.l 1 saves stack pointer during 'input' lopvar: .ds.l 1 'for' loop save area lopinc: .ds.l 1 increment loplmt: .ds.l 1 limit lopln: .ds.l 1 line number loppt: .ds.l 1 text pointer txtunf: .ds.l 1 points to unfilled text area varbgn: .ds.l 1 points to variable area stklmt: .ds.l 1 holds lower limit for stack growth buffer: .ds.b buflen keyboard input buffer .even txt = * beginning of program area .end  lower limit for stack growth buffer: .ds.b buflen keyboard input buffer .even txt = * beginning of progåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå#a¬`.¼×a¢`J@gÚ°|gâ°|gæ.¼íaˆN¹JŸLßÀN^NuNVHç*n.¼6ÐBg?<N¹ XO.�Bg?<N¹ XO°|ÿm>¼aÿjB- .�BgdLET C = 8323104 nLET D= C + 1 xLET G= 00 ÈPOKE C,G úLET H = 128 LET J = 192 "POKE C,H ,FOR L = 1 TO 13 6POKE C,J @LET V = PEEK(D) JPRINT J,V-240 TFOR N = 1 TO 100 YNEXT N ^POKE C,G hLET H = H+1 rLET J = J+1 |NEXT L †FOR X = 1 TO 100000 �NEXT X šPRINT ¤GOTO 250 ®STOP åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå******************************* * the following routines are the only ones that need * * to be changed for a different i/o environment. * ****************************************************** * * ===== output character to the console (port 1) from register d0 * (preserves all registers.) * *outchr btst #1,$10040 is port 1 ready for a character? * beq outchr if not, wait for it * move.b d0,$10042 out it goes. * rts outchr: movem.l d0-d1/a0,-(a7) exg d0,d1 moveq #4,d0 trap #3 movem.l (a7)+,d0-d1/a0 rts * * ===== input a character from the console into register d0 (or * return zero status if there's no character available). * *inchr btst #0,$10040 is character ready? * beq incret if not, return zero status * move.b $10042,d0 else get the character * and.b #$7f,d0 zero out the high bit *incret rts inchr: move.l a0,-(a7) moveq #2,d0 trap #3 tst d0 beq.b incret moveq #3,d0 trap #3 incret: move.l (a7)+,a0 rts * * ===== output character to the host as68 -l -p $1.s >$1.prn lo68 -t500 -o $1.68k $1.o era $1.o ddt $1.68k ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå(port 2) from register d0 * (preserves all registers.) * auxout: btst #1,$10041 is port 2 ready for a character? beq auxout if not, wait for it move.b d0,$10043 out it goes. rts * * ===== input a character from the host into register d0 (or * return zero status if there's no character available). * auxin: btst #0,$10041 is character ready? beq axiret if not, return zero status move.b $10043,d0 else get the character and.b #$7f,d0 zero out the high bit axiret: rts * * ===== return to the resident monitor, operating system, etc. * *byebye move.b #228,d7 return to tutor * trap #14 byebye: clr d0 trap #2 initmsg: .dc.b esc,"EGordo's MC68000 Tiny Basic, v1.0",cr,lf,lf,0 okmsg: .dc.b cr,lf,'ok',cr,lf,0 howmsg: .dc.b 'how?',cr,lf,0 whtmsg: .dc.b 'what?',cr,lf,0 srymsg: .dc.b 'sorry.' clmsg: .dc.b cr,lf,0 .even lstrom = * end of possible rom area * * internal variables follow: * basepag: .ds.l 1 cp/m-68k base-page addr ranpnt: .dc.l start random number pointer å0åååååååå1åååååååå2åååååååå3åååååååå4åååååååå5åååååååå6åååååååå7åååååååå8åååååååå9åååååååå:åååååååå;åååååååå<åååååååå=åååååååå>åååååååå?åååååååå@ååååååååAååååååååBååååååååCååååååååDååååååååEååååååååFååååååååGååååååååHååååååååIååååååååJååååååååKååååååååLåååååååå