NeoDskWp O`  @`!#@%`')+-/1 3@5`79;=?A C@E`IM/OU`]_a c@e`gikmoq s@u`wy{} O` @ ` @ ` @ ` o ǀ ɠ / @ ` ׀  @` @`!Aa   !Aa!!#A%a')+-1!3A5a79;=?A!OEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Ao!Aao?AǁAo!O/a " B o  !"!O!b!!!"!#B"%b"'")""-"/13B#5b##9##=#A"$O$EG$$K$$OQ"%SUb%WY%[]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()")B)b)))"*O*O`  @`!#@%`')+-/1 3@5`79;=?A C@E`IM/OU`]_a c@e`gikmoq s@u`wy{} O` @ ` @ ` @ ` o ǀ ɠ / @ ` ׀  @` @`!Aa   !Aa!!#A%a')+-1!3A5a79;=?A!OEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Ao!Aao?AǁAo!O/a " B o  !"!O!b!!!"!#B"%b"'")""-"/13B#5b##9##=#A"$O$EG$$K$$OQ"%SUb%WY%[]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()")B)b)))"*O*C-64-EMU `E/SPECTRUM `E/ZX81EMU dE/TXT TXT F/d LEES DIT i#`A400 I'. `E/.. AID *t f ARTIKEL DOC .t WARTIKEL TXT 3t "WC64 TOS 8t 88EMULATORDOC It G FPLOT Mt KFUPLOT Pt OREADME DOC Tt Q3SMON Wt S TEST [t W TEST2 `t X8SOURCE `E/YC64 `E/(2080) (C) 1984 BY US _`e(Z[eXY6 7L8Z_"[`#Z8"Z[8X"XYZXZX[Y`x80x7X` 78:莽P{  cLtLL=4⇑ d` s2 kHh,L s kHh`mm` Ղ+_ eL4 ؀L:Lt Ղ+___ ؀ e YL eҠ_"I$0ɏߢݳ۠_ȱ__`_`e_zZ`{[ s ɫ6ɤ0 k ܁ ՂZzH s #hz s y 8z_,ɫɤLB Ղ+$$$bc8 ILݽ ؀$䪈$%$L遆-.XY78L5.-XXXYXXzY{ Ղ_Z(Z`ZʈZHȑZ[hZLb-.- ՂzXXXXYX-Y.찥 Ǡ Lb?OUT OF RANGEhihiHHȱ`+_``H{z&z LLh: LsL`ɤؠ 0 b]ɀ ȹ z 0hhhHH`RENERUAUTSTETRACOFRENUMBEDELETHELFINDUMPROEDICHANGKEMERGINI) *`"B zHLL s," y sL` sV"RzI s=, sC,)"& sLz s, sLL s, s  ՂX_Șe__`_Y eR__EȘM_"IQ$0M,"_ ,0) L !_ȱ_ ͽ L̄МL Ղ_" Ղ-$m8m  ۅ8m_e--e..LC"$#%`ȱ"ȑ" Ѕ`"#$$ Ѕ`$%$LL6,,L{:ަ9ҍ 0# ȢɆXY؅ ! #  0 XHh`šrJ" s L  ZȱZ[ZZXXYZ[ X-Y. Y 3Lt-Z.[` Ղ+X  Ղ_Z y-ɫ@ s" kH  Ղ_Xh-ɫ s k  Ղ_ZZX[Y``:9 ɽ: _ Lt Lת ) G" I ĉDZ_`$ 0̐ ~ȹ0ȹ0 G K`hH L6 :0 ؀L K ȹv v` Ղ-__/`0Lȱ_ &JE)e; % G= G_Hȱ_h ݽ L = G GH L"=$ ƈ G_#_"_ $" G ת L_i_`LfE GFLG ei-.`+ 3#"i-.L s_ | s C0@ 00, <"< < LLH '1;EOYcmw ߩK E Y 1 % , "  ر " ` Lǩ_ ` (2/f Lr  莆l'=KZ莞 YԶ2pVARPUSVARPOMATRIDSAVDLOADVERIFDISCATALOREPEABLOCKMELISSPACKILLREKILLSPACKILLDELETLOCUNLOCSTATUPUGECOMBLOAPROTECUNPROTECKIL`  ͐]ɀ ȹ̐ z hhhHHLs } Lb8/-0.81-2.783478 787171212.1- cLL-e/.e0-m1.m2778213478L ?DONE BEFORE L Ē Ē Ē  Ē'  Ē/H h+8+,, ͽӠ) G(` MEMORYBYTESPROGRAMVARIABLESARRAYSSTRINGSFREE0/21Li腍 eˆ 䓤(  ͽ,) …"# ȱ0 " (e תэȹэץL, }) ȱ) %F$?` =7"ȱ" L׽ L׽ G"%"$"& $ &"L ,3 8-+H.,hi訊  ̼ ׽ L BLOCKS NEEDED: ~" "L6ʠ y s s 6 +, L-. 3 YL _C } תȱ_ȱ_,I ͽ I) G"I_"_ȱ__`е yL,L sLl$08Iȹ0 ȹ0 GI) G Ї ,L+,"#" cLȱ" "ȱ""I$0ɏݥ"#de"Ș#e"_`"""# wЕ, a+,"#" cLȱ" "ȱ""Ia$0٥"#de#e"_`""# wТ"_#`8-".# 3"#i-.de` _dȱ_heȱ_ȱ_Uȱ_ de_`Әe__`-.Z[iXȄY :__ 312-.dei_`Ѝ y cL, sLL _dȱ_Jeȱ_ȱ_7ȱ_ de_`Әe__``i"# wd8_ʆ`Ы y cL, sL3L -, k  y, - s k` * 8 } ߙ hi  ķ  h ע걬 ʥŮ寐 ȄX L  ƫ `Eׅש)   ƣ` `,+, Å Ԙ zL 6 <í= P } AИ >8<eÅ?e(= KEL - ēEׅĥŮ寐 ߙȄXL  } ߙשݢ ș& Ľ ` ș&ƣ`, ݎHhJJ`)x`  L )LLbca o M - W b c g d g abegbcdegdeЮ`x H덐X S䩀 㩣L (8 L 6@3 o S : Ʒȱ ķ 漩  YL SCRATCHING, 6 oLL W o ķ L `$     $p5 $p. ͽ $p Lw ɩ   L , Lբ * L ݐ0 @,) `,H y Wdeg  o Q h  o U C : " LLW-M o $p L ` LO sNH)Fh0 sF`8`LL$륷L "deg  o U C : ķ )x e< b cÅbącd bcde e   GL7XcȆ   G` ,ݢ  &(&I` z h©xO B ĭ0Lx t yȹ yL$  K1LL/!,,0!* !* `X0x  y yl`ݭ ݭ)ݩ, ` L L春Y `mc`Lw ` HLL L L L L LuL[HL) hް)$hH h`**** (C) 1984 BY UWE SEIMET *****06600000005800 1 2 F0110030 9[...................................................]001 Wohljeder,dersichetwasintensivermitseinemComputer beschftigthat,wirdsichschoneinmalgergerthaben,da ausgerechnetdasProgramm,dasergernebesitzenwrde,auf seinemRechnernichtluft.Besondersvielprofessionelle Softwareistz.B.frandereBetriebssystemewieMS-DOSoderCP/M zuerhalten.DadieseSystemejedochfrandereProzessorenals den68000geschriebensind,isteseigentlichnichtmglich, derenProgrammeaufdemAtariSTzuverwenden.Ganzausweglosist dieSituationnunaberauchnicht.Frdieobengenannten BetriebssystemegibtesinzwischenEmulatorenaufdemMarkt,die esermglichen,auchProgramme,diefrandereProzessorenoder Betriebssystemegeschriebenwordensind,aufdemSTlaufenzu lassen.VondiesenProgrammensinddieMAC-Emulatorenbesonders hervorzuheben.DaderMacintoshwiederSTebenfallsmiteinen 68000-Prozessorarbeitet,istesindiesemFallmglich,durch einentsprechendesProgrammnichtnurdasMacintosh- BetriebssystemaufdemSTzuimplementieren,sonderndabeiauch nocheinegrereGeschwindigkeitimProgrammablaufzuerreichen, alsdiesaufdem"Original"MAC-SystemderFallist.DieUrsache hierfrliegtdarin,dader68000beimSThhergetaktetist, alsimMacintosh.LeiderdrftedieseArtvonEmulatorenein Sonderfallbleiben,denndiebekanntestenBetriebssystemelaufen nuneinmalnuraufRechnern,diekeinenProzessorder68000- Familiebenutzen.IndiesemFallbleibtalsAuswegnurdie Software-EmulationdesentsprechendenProzessors.Der Geschwindigkeitsverlust,derdabeiauftritt,ltsichleider nichtvermeiden.Allerdingskannmanbeientsprechender ProgrammierungtrotzdemrechtakzeptableGeschwindigkeiten erreichen,auchwennmandiesesnichtjedemaufdemMarkt befindlichenEmulatoranmerkt. AlsAtari-undC64-Besitzerhabeichmichdamitbeschftigt,das BetriebssystemdesC64sogutwiemglichaufdemSTzu implementieren.FrdieSpiele-Freaksheitdasaberleider nicht,danunderSTinderLageist,C64-Spielezuverarbeiten. DazuistderAufbauderbeidenComputerzuverschieden.Dennoch ltsichbisaufeinigespezielleFhigkeitendesC64ein brauchbarerEmulatorentwickeln.WasmanbeiderProgrammierung einessolchenEmulatorprogrammsbeachtensollte,wirdGegenstand desArtikelssein.DadieserTeilKenntnisseinAssembler- Programmierungvoraussetzt,drfteervorallemfrAssembler- Programmiererinteressantsein.Auerdemmchteichkurzeinpaar FeaturesdesC64-Emulatorsbeschreiben.KonkretereHinweise findensichaufderLeserservice-Diskette,aufdersichder Emulatorbefindet. BevormansichumdieImplementierungeineskonkreten Betriebssystemskmmernkann,gehtesersteinmaldarum,sich detaillierteInformationenberdenzuemulierendenProzessorzu besorgen.(Dabeisetzeichnatrlichvoraus,damandie Programmierungdes68000gutbeherrscht.)Umsichnhermitdem eigentlichenBetriebssystembeschftigenzuknnen,mu schlielichersteinmaldieEmulationfrdenentsprechenden Prozessorstehen.FrdiebekanntestenProzessoren,wieimFall desC64frden6502,isteskeinProblem,andieentsprechende Literaturzukommen.WichtigsindvorallemInformationenber dieBehandlungderFlagsdesProzessorsbeidenverschiedenen BefehlstypensowieeineBeschreibungeventuellerBesonderheiten desProzessors.Zubeachtenist,daz.B.dasCarry-Flagdurchaus nichtinallenProzessorendiegleicheBedeutunghat.Geradeder 6502hathierseineBesonderheit.ImgnstigstenFallhatman schoneinmalmitdemzuemulierendenProzessorgearbeitet,was sichimweiterenVerlaufderProgrammierungalsgroerVorteil erweisenwird. BeidereigentlichenProgrammierungdesEmulatorsspieltdie GeschwindigkeitderBefehlsauswertungeinebesondersgroeRolle. Dader68000mitdenBefehlscodesdes6502berhauptnichts anfangenkann,mujederOpcodeinterpretiertwerden,hnlichwie eseinBASIC-InterpretermiteinemBASIC-Programmmacht.Fr jeden6502-CodemueineRoutinein68000-Assemblerentwickelt werden,dieAktionenvornimmt,diedementsprechenden6502-Befehl entsprechen.HierinliegtauchderGrund,warumesnichtmglich ist,miteinemSoftware-EmulatordiegleicheGeschwindigkeitzu erreichen,wiesiedasSystembesitzt,dasemuliertwird.Obwohl der68000mit8MHzgetaktetistundder6510imC64mitnur knapp1MHz,bedeutetdieInterpretationderBefehlsbyteseinen VerlustanGeschwindigkeit.DieeigentlicheBearbeitungder einzelnenOpcodesindenentsprechendenRoutinenkannjedoch durchausschnellervom68000ausgefhrtwerden,alsvom6502.So bentigtderC64-EmulatorzumSetzendesCarry-Flags4Taktyklen, der6502braucht2Taktzyklen.RechnetmandieseAngabenaufdie TaktfrequenzenderbeidenProzessorenum,soschneidetder68000 deutlichbesserab.AllerdingsmununnochdieZeitaddiert werden,diederEmulatorbentigt,biserdieAdressederRoutine zumSetzendesFlagsermittelthat.DieserVorgangnimmtjedoch sovielZeitinAnspruch,dader6502schlielichdochder Schnellereist.DadieTaktfrequenzneuererProzessortypenimmer weitersteigt,wirdeswohlnureineFragederZeitsein,bises mglichist,einen8Bit-Prozessormindestensmitder Geschwindigkeitzuemulieren,mitderdieserProzessor normalerweisebetriebenwird. NunwiederholtsichderVorgangderInterpretationdesfolgenden Befehlsbytesnatrlichbeijedemneuen6502-Opcode.Deshalbist esgeradeandieserStellebesonderswichtig,einemglichst schnelleAuswertungdesnchstenBefehlsbyteszuerreichen.Spart manhiernureinenTaktzyklusein,sosteigtdieGeschwindigkeit derEmulationbereitsmerklich.Wiekannnundasnchste Befehlsbyteausgewertetwerden?Imallgemeinenwirdhierzudieses ByteineinDatenregistergeladenunddanndieAdresseder zugehrigenEmulationsroutineausdiesemByteberechnet.Dies kannz.B.durchdenfolgendenAlgorithmusgeschehen: LOOP:CLRD0 MOVE.B(A0)+,D0 ASL#2,D0 MOVE.L(A1,D0),A0 Algorithmus1 JSR(A0) BRALOOP Gehtmandavonaus,daA0aufdasnchsteBefehlsbyteim6502- AdreraumzeigtundA1denAnfangeinerTabellemit SprungadressenaufdieentsprechendenEmulationsroutinenenthlt, wrdeobigesProgrammfragmentdenAnforderungengerecht. AllerdingsltdieGeschwindigkeitderInterpretationnochviel zuwnschenbrig.UmeinehhereGeschwindigkeitzuerreichen, kannmandenASL-BefehldurchzweiADD-Befehleersetzenunddie obigeRoutinefrjedenzuemulierendenOpcodeneuprogrammieren, wasdannsoaussehenknnte: CLRD0 MOVE.B(A0)+,D0 ADDD0,D0 ADDD0,D0 MOVE.L(A1,D0),A0 Algorithmus2  JMP(A0) IndiesemFallwirddienchsteauszufhrendeRoutinenichtmehr alsUnterprogrammangesprungen,sodamannichtmitRTSzueiner bergeordnetenInterpretationsroutinezurckkehrenkann.Ebenaus diesemGrundmusichderobigeProgrammteilamEndejeder Emulations-Unterroutinebefinden,alsofrjedenOpcodeeinmalim Programmvorhandensein.DadurchwirddasEmulatorprogrammzwar lnger,dafraberdeutlichschneller,daderAufrufunddie RckkehrauseinemUnterprogrammbesondersvielZeitbentigt. UndGeschwindigkeitistfreinenSoftware-Emulatordashchste Gebot!DarberhinaushatmanaufdemSTgenugSpeicherplatz,um beieinemEmulatorfreinenProzessormitnur64KAdreraum nichtsparenzumssen. DerobendargestellteAlgorithmus2findetsichinhnlicherForm inallenmirbekanntenSoftware-Emulatorenwieder.Lassensieuns einmaleinwenigrechnen:DieAusfhrungsgeschwindigkeitfr diesenAlgorithmusbetrgt46Taktzyklen.Der6502ist normalerweisemit1MHzgetaktet,derSTmit8MHz.Alleindie InterpretationeinesBefehlsbyteswrdedemnacheineZeit verbrauchen,die46/86502-Zyklenentspricht,alsofast66502- Zyklen.Dadiekrzesten6502-Befehle2Taktzyklen(bezogenauf den6502)brauchen,wrdenurdieAuswertungdesnchstenBefehls durchdenEmulatorschonextremvielZeitverschlingen.Das Prinzip,dasinAlgorithmus2zurInterpretationverwendetwurde, kannjedochnichtmehrentscheidendverkrztwerden.Ursprnglich arbeitetauchmeinC64-Emulatormiteinemvergleichbaren Algorithmus. Istmanallerdingsbereit,64KSpeicherplatzmehrfrden Emulatorzuopfern,wasbeimSTnormalerweisemglichist,so kannmandiesozeitkritischeBefehlsinterpretationdurcheine vlligandereProgrammierungdeutlichbeschleunigen.Hierdie Routine,wiesieinmeinemEmulatorverwendetwird: MOVE.B(A0)+,LBL+2(A1) LBL: JMP$0(A1) Algorithmus3 AuchhieristA0PointeraufdasnchsteBefehlsbyte,A1istein speziellerPointerindas64K-Segment,indemsichderEmulator nunbefindet.NuneinpaarErklrungenzuAlgorithmus3,denner drftenichtsoeinsichtigsein,wiedieerstenbeiden.Imobigen FallwirddasBefehlsbytenmlichohneirgendwelcheweiteren BerechnungendirektzurAdrebildungimdarauffolgenden Sprungbefehlverwendet.HierzuambesteneinBeispiel.Nehmenwir an,dernchste6502-Opcode,aufdendasAdreregisterA0zeigt, ist$EA.DiesesBytewirdnunalsDisplacementfrdenfolgenden Sprungbefehlbenutzt,wobeisichdasProgrammselbstverndert. DirektvordemSprungsiehtderSprungbefehldannalso folgendermaenaus: JMP$EA00(A2) Das6502-BefehlsbytebildetdasHi-BytefrdasDisplacement,das Lo-ByteistimmerNull.AufdieseArtundWeisespartmansich jeglicheAdreberechnung,dadieSprungadresseaufdiepassende RoutinenichtmehreinerTabelleentnommenwird,wieesbeiden erstenbeidenAlgorithmenderFallist.Allerdingsmununjede RoutinezurBehandlungderOpcodesingenaueinerPageAbstand hinterdemBeginndervorherigenRoutineanfangen,dadasLo-Byte desDisplacementsimmerNullist.Sokommtesauch,dasfrdiese ArtderEmulation64KSpeicherplatzbentigtwerden,nmlichfr jedenOpcodedes6502256Bytes.DieAusfhrungszeitvon Algorithmus3betrgtnurnoch30Taktzyklen.Eristalsoum50% schnelleralsAlgorithmus2.DieserGeschwindigkeitszuwachsmacht sichdeutlichbemerkbar,dennerschlgtjabeijedem6502-Opcode neuzuBuche. SoweitdasWichtigstezurInterpretationderBefehlsbytesdes 6502.IstdiesesProblemgelst,somumansichalsNchstes darumkmmern,wodieRegisterdeszuemulierendenProzessors "aufbewahrt"werdenknnen.InunseremFallistdieseFragerecht einfachzubeantworten.Der6502hatdreiRegister(Akkumulator, X-undY-Register)sowieeinen8-Bit-Stackpointerundden Programmzhler.Der68000besitztinsgesamt15Register,wennman A7alsStackpointereinmalauerAchtlt.Esistsomitkeine Kunst,dieseRegisterinDaten-bzw.Adreregisterndes68000 unterzubringen.FrStackpointerundProgrammzhlerwirdjeweils einAdreregister,frdieanderen6502-Registerwerdendrei Datenregisterverwendet,indenennurdasLo-Bytegenutztwird. SchlielichmudasProzessorstatusregisterdes6502auchnoch irgendwountergebrachtwerden.Esistimallgemeinennicht mglich,einfachdieFlagsdes68000zuverwenden,dasichderen Verwendungvonderbeim6502geringfgigunterscheidet.Darber hinaushatder68000imGegensatzzum6502z.B.keinDezimalflag. BeidenmeistenarithmetischenOperationenbestehtinder BehandlungderFlagsjedochkeinUnterschied.Esempfiehltsich, dieFlagsineinemweiterenDatenregisterunterzubringenundnur beiBedarfindasCCR-Registerdes68000zubertragen. SchlielichwirddesProzessorstatusregisternichtvonjedem Befehlbeeinflut.NachdembeiRechenoperationendieFlagsimCCR entsprechendgesetztwordensind,werdensiedannwiederindas reservierteDatenregisterbertragen. DurchdiebeschriebeneVerwendungderRegisterbleibennoch einigeRegisterdemProgrammiererzurVerfgung.Sieknnendann Datenaufnehmen,diewhrendderEmulationstndigzurVerfgung stehensollen,wiez.B.einPointeraufden64KAdreraumdes 6502sowieaufdie64K,diefrdenEmulatorreserviertsind,und indemsichdieEmulationsroutinenfrdieeinzelnenOpcodesdes 6502befinden.Prinzipiellistesnatrlichauchmglich,die Registerinhaltedes6502imSpeicherabzulegen.Allerdingsdauern ZugriffeaufdenSpeicherverhltnismiglange,sodamankeine brauchbareGeschwindigkeitmehrerzielenknnte. WillmanProzessorenemulieren,diemehrRegisteraufweisen,als der6502siebesitzt,somumandieAufteilungneuberdenken. DiesistbrigensbeidenmeistenanderenProzessorenderFall, z.B.beim8080,Z80und8086.Mansolltejedochdurchgeschickte WahlderRegisterbelegungstetsdafrsorgen,daabsolute ZugriffeaufdenSpeichermglichstvermiedenwerden,dasie besonderszeitaufwendigsind.BeimC64-Emulatorkonntendirekte ZugriffeaufdenSpeichervollkommenumgangenwerden.Hierwird nurberAdreregisteraufdenAdreraumdes6502-Prozessors zugegriffen. Willmanmitdem68000einen8Bit-Prozessoremulieren,sosind einigeAdressierungsartenundBefehlerechtleicht nachzuvollziehen,anderestellenjedochProblemedar,besonders dann,wennesdarumgeht,einemglichstschnelleAusfhrungszeit zuerzielen.IchmchtehieralsBeispieldieabsolute Adressierungdes6502anfhren.EigentlichkeinProblem,sollte manmeinen.Aberdennochmumanhiervorsichtigsein.Wiesie sicherwissen,kannder68000auf16Bit-Wortenurdann zugreifen,wennsieaufgeradenSpeicheradressenstehen.Verste gegendieseRegelfhrenzueinemAdrefehler,dersichindrei Bombenpersonifiziert.BeiProgrammen,diefrdiesenProzessor geschriebensind,liegendieBefehlsworteundabsolutenAdressen deshalbnatrlichimmeraufgeradenAdressen.Bei8Bit ProzessorensiehtdieSachejedochganzandersaus.Dieoben angefhrteEinschrnkungfrabsoluteAdressenbestehthier nicht.EskannalsoohneWeiterespassieren,dadieabsolute Adresse,dieaufeinenSprungbefehldes6502folgt,aufeiner ungeradenAdresseliegt.Somitistesnichtmglich,dieAdressen frdieabsoluteAdressierungmiteinemeinzigenBefehlausdem 6502-AdreraumineinRegisterdes68000zuholen.Solche AdressenmssenhiergrundstzlichinzweieinzelneBytes aufgespaltenwerden.Darberhinausexistiertnocheinweiteres rgernis.ImGegensatzzum68000werdenbei8BitProzessoren absoluteAdressenmitdenLo-BytezuerstimSpeicherabgelegt. BevormaneinesolcheAdresseverwendenkann,mssenalsoerst diebeidenAdrebytesindierichtigeReihenfolgegebracht werden.MitfolgenderRoutineknntedanndieabsoluteAdresse ausdemSpeicherineinDatenregistergeholtwerden: MOVE.B(A0)+,D0 ASL#8,D0 Algorithmus4 MOVE.B(A0)+,D0 ROR#8,D0 DiebeidenBytesfrdieabsoluteAdressewerdenhiereinzelnaus demSpeichergeholtunddurchSchiebenundRotierenindie richtigeReihenfolgegebracht.Soweit,sogut.Leiderbrauchen Schiebe-undRotierbefehlerelativvielZeit.Algorithmus4mag zwarleichtzudurchschauensein,bentigtjedoch58Taktzyklen. Diesistbesondersungnstig,wennmanbedenkt,dadieabsolute Adressierungrelativhufigvorkommt.Istmanjedochbereit,ein Adreregisterzuopfern,sokannmandurcheinevllig andersartigeProgrammierungeinengroenGeschwindigkeitsvorteil erlangen: MOVE.B(A0)+,-(A2) MOVE.B(A0)+,-(A2) Algorithmus5 MOVE(A2)+,D0 InAlgorithmus5zeigtA2aufeinebeliebigegeradeAdresseim Speicher,anderdiebeidenByteszueinemWortzusammengesetzt undanschlieendnachD0bertragenwerden.Dieseetwas unkonventionelleArtderProgrammierungmagzwarumstndlich erscheinen,siekommtdafrjedochmitnur32Zyklenaus,denn Schiebe-undRotierbefehleentfallennunvllig.Leideristes nichtmglich,denStackpointer,alsoA7,sozubenutzen,wiein diesemBeispielA2.DerStackpointerwirdnmlichgrundstzlich umeinWort,alsozweiBytes,erhhtodererniedrigt,auchwenn Byteoperationendurchgefhrtwerden,sodaersichnichtan StelleeinesanderenAdreregistersbenutzenlt. DieobigeProblematikstelltnureinesvonvielenProblemendar, diemanbeiderEmulationeines8BitProzessorszubewltigen hat,wennmanumjedenTaktzykluskmpfenmu. IstnunendlichdieeigentlicheEmulationdesProzessors fertiggestellt,wobeinatrlichfraglichist,wievieleFehlersie nochenthlt,mumanalsnchstesseinAugenmerkaufdie ImplementationdesBetriebssystemsrichten.Schlielichistes dasersteundwichtigsteProgramm,dasmanzumLaufenbringen mu.LuftdasBetriebssystemunterdemEmulatoreinwandfrei,so kannmandavonausgehen,dasichkaumnochFehlerimProgramm befinden,daalleBefehledesemuliertenProzessorsirgendwann einmalausgefhrtwerdendrften. NichtjedesBetriebssystemltsichgleichgutaufeinenanderen Computerbertragen.DasBetriebssystemdesC64ltindieser HinsichteinigeszuWnschenbrig.ImgnstigstenFallgibtes frjedewichtigeFunktion,dievomSystemerledigtwerdensoll, alsoinsbesondereumdieBehandlungderEin-undAusgabe,eine FunktionsnummerodereinenSprungvektor.BeimC64gibteszwar einesolcheListevonSprungvektoren,nuristsieleidernichtso vollstndig,wiemanesgernehtte.BessersiehtesdabeiCP/M undMS-DOSaus.HiergibtesweitausmehrFunktionenalsbeim C64,sodaeineEmulationerleichtertwird.Diesliegtnatrlich daran,dadiesebeidenSystemohnehinfrdenEinsatzauf unterschiedlichenComputernvorgesehensind,wasbeimC64ja nichtunbedingtderFallist.WelchesSystemmanauchimmer emulierenwill,alleAufgabendiebersolcheVektorenoder Funktionsnummernaufgerufenwerden,mssenvomEmulatorberwacht werden.HierzueinkonkretesBeispiel:FrdieAusgabevon ZeichenaufdemC64existierteinSprungvektorBSOUT.Dadie BildschirmdarstellungderZeichenaufdemSTgrundstzlichanders realisiertwirdalsaufdemC64,muandieserStelle eingegriffenwerden.DieAusgabeaufdemBildschirmdarfnichtso erfolgen,wieesbeimC64geschehenwrde,denndannwrdesich aufdemBildschirmdesSTgarnichtstun.Siemuineiner eigenenAusgaberoutineprogrammiertwerden.Dasgleichegiltfr vieleandereFunktionendesBetriebssystemsaufdemC64. Natrlichmumandaraufachten,dadieRegister,diefrden BetriebdesEmulatorswichtigeDatenenthalten,nichtinden eigenenRoutinenverndertwerdenbzw.nurDatenerhalten,die vomBetriebssystemdesC64erwartetwerden.DieLOAD-Routinesoll z.B.dasEndedesgeladenenProgrammsalsRckgabewertinden Indexregisternliefern. Wieschonangesprochen,mudieEmulationdurchgeeignete Programmierungsogestaltetwerden,dasiemglichstschnell erfolgt.NebenentsprechenderProgrammierungdesEmulatorsgibt esnochweitereMglichkeiten,dieGeschwindigkeitvonProgrammen aufdemSTzuerhhen,besondersdann,wennessichnichtum Programmehandelt,dieinGEM-Umgebunglaufen.IndiesemFallist esnmlichmglich,Vektoren,wiedenevnt_timer-VektordesGEM aufeinenRTS-Befehlumzubiegen,sodadiezugehrigenRoutinen, diewhrendeinesInterruptsausgefhrtwerden,nichtmehr angesprungenwerden.DieshatunteranderemzurFolge,dadie UhrdesKontrollfeldsnichtmehrluft,wennderEmulatoraktiv ist.DamansiebeimC64-Emulatorohnehinnichtbentigt,ist diesaberkeinBeinbruch.DerLohndafristeineerhhte Geschwindigkeit.Weiterhinkanneslohnenswertsein,dieMaus abzuschalten,oderbessernochalleAktionen,dieden Tastaturprozessorbetreffen,selbstzubernehmen. ZumSchlumchteichnochaufdieFrageeingehen,inwieweit berhaupteineKompatibilitt,insbesonderezumC64,aufeinem anderenComputerzuerreichenist.berlegtmansich,wasdenC64 soerfolgreichgemachthat,sosinddiesinersterLiniedie unzhligenSpiele,diefrdiesenComputerexistieren.Gerade SpielereizendiespeziellenFhigkeitendesC64(Sprites, Rasterzeilen-Interrupt,Timer)besondersaus.DadieHardwaredes STkeineDarstellungvonSpriteserlaubt,unddieseGrafikobjekte nichtnurausZeitgrndenunmglichdurchSoftwarenachgebildet werdenknnen,istdieEmulationvonSpielenalsoinFrage gestellt.WeiterhinistesausZeitgrndennichtmglich,die InterruptroutinendesC64durchdenEmulatorausfhrenzulassen, dadanndieArbeitsgeschwindigkeitmerklichnachlassenwrde. SchlielichsindgeradeInterruptseinebesonderszeitkritische Angelegenheit,dasiesehrhufigauftreten. DamitsindnunaberallewesentlichenEinschrnkungenbeider Emulationaufgefhrt.EinGroteilderProgramme,dienichtauf diegenanntenMglichkeitenzurckgreifen,kannvomC64-Emulator verarbeitetwerden.AuchhochauflsendeGrafikistineinem gewissenMaemglich.AllerdingsmudieBitmapfrdieGrafik imBereichvon$E000-$FFFF,alsounterdemBetriebssystemliegen, damitderEmulatorerkennt,wannderGrafikspeicherangesprochen wird.DadieberprfungdesBildschirmspeichersundderBitmap relativvielZeitinAnspruchnimmt,hateinVerzichtaufdiese AusgabekontrolleeineweitereErhhungderGeschwindigkeitzur Folge. NebenderEmulationdesC64sindaucheineDrucker-undeine Floppy-Emulation,dieder1541weitgehendentspricht,imEmulator enthalten.DasProgrammluftbrigensinniedrigerundinhoher Auflsung,sodajederST-BesitzersichnunseineneigenenC64 vonDiskladenkann. Wohl jeder, der sich etwas intensiver mit seinem Computer beschftigt hat, wird sich schon einmal gergert haben, da ausgerechnet das Programm, das er gerne besitzen wrde, auf seinem Rechner nicht luft. Besonders viel professionelle Software ist z.B. fr andere Betriebssysteme wie MS-DOS oder CP/M zu erhalten. Da diese Systeme jedoch fr andere Prozessoren als den 68000 geschrieben sind, ist es eigentlich nicht mglich, deren Programme auf dem Atari ST zu verwenden. Ganz ausweglos ist die Situation nun aber auch nicht. Fr die oben genannten Betriebssysteme gibt es inzwischen Emulatoren auf dem Markt, die es ermglichen, auch Programme, die fr andere Prozessoren oder Betriebssysteme geschrieben worden sind, auf dem ST laufen zu lassen. Von diesen Programmen sind die MAC-Emulatoren besonders hervorzuheben. Da der Macintosh wie der ST ebenfalls mit einen 68000-Prozessor arbeitet, ist es in diesem Fall mglich, durch ein entsprechendes Programm nicht nur das Macintosh- Betriebssystem auf dem ST zu implementieren, sondern dabei auch noch eine grere Geschwindigkeit im Programmablauf zu erreichen, als dies auf dem "Original" MAC-System der Fall ist. Die Ursache hierfr liegt darin, da der 68000 beim ST hher getaktet ist, als im Macintosh. Leider drfte diese Art von Emulatoren ein Sonderfall bleiben, denn die bekanntesten Betriebssysteme laufen nun einmal nur auf Rechnern, die keinen Prozessor der 68000- Familie benutzen. In diesem Fall bleibt als Ausweg nur die Software-Emulation des entsprechenden Prozessors. Der Geschwindigkeitsverlust, der dabei auftritt, lt sich leider nicht vermeiden. Allerdings kann man bei entsprechender Programmierung trotzdem recht akzeptable Geschwindigkeiten erreichen, auch wenn man dieses nicht jedem auf dem Markt befindlichen Emulator anmerkt. Als Atari- und C64-Besitzer habe ich mich damit beschftigt, das Betriebssystem des C64 so gut wie mglich auf dem ST zu implementieren. Fr die Spiele-Freaks heit das aber leider nicht, da nun der ST in der Lage ist, C64-Spiele zu verarbeiten. Dazu ist der Aufbau der beiden Computer zu verschieden. Dennoch lt sich bis auf einige spezielle Fhigkeiten des C64 ein brauchbarer Emulator entwickeln. Was man bei der Programmierung eines solchen Emulatorprogramms beachten sollte, wird Gegenstand des Artikels sein. Da dieser Teil Kenntnisse in Assembler- Programmierung voraussetzt, drfte er vor allem fr Assembler- Programmierer interessant sein. Auerdem mchte ich kurz ein paar Features des C64-Emulators beschreiben. Konkretere Hinweise finden sich auf der Leserservice-Diskette, auf der sich der Emulator befindet. Bevor man sich um die Implementierung eines konkreten Betriebssystems kmmern kann, geht es erst einmal darum, sich detaillierte Informationen ber den zu emulierenden Prozessor zu besorgen. (Dabei setze ich natrlich voraus, da man die Programmierung des 68000 gut beherrscht.) Um sich nher mit dem eigentlichen Betriebssystem beschftigen zu knnen, mu schlielich erst einmal die Emulation fr den entsprechenden Prozessor stehen. Fr die bekanntesten Prozessoren, wie im Fall des C64 fr den 6502, ist es kein Problem, an die entsprechende Literatur zu kommen. Wichtig sind vor allem Informationen ber die Behandlung der Flags des Prozessors bei den verschiedenen Befehlstypen sowie eine Beschreibung eventueller Besonderheiten des Prozessors. Zu beachten ist, da z.B. das Carry-Flag durchaus nicht in allen Prozessoren die gleiche Bedeutung hat. Gerade der 6502 hat hier seine Besonderheit. Im gnstigsten Fall hat man schon einmal mit dem zu emulierenden Prozessor gearbeitet, was sich im weiteren Verlauf der Programmierung als groer Vorteil erweisen wird. Bei der eigentlichen Programmierung des Emulators spielt die Geschwindigkeit der Befehlsauswertung eine besonders groe Rolle. Da der 68000 mit den Befehlscodes des 6502 berhaupt nichts anfangen kann, mu jeder Opcode interpretiert werden, hnlich wie es ein BASIC-Interpreter mit einem BASIC-Programm macht. Fr jeden 6502-Code mu eine Routine in 68000-Assembler entwickelt werden, die Aktionen vornimmt, die dem entsprechenden 6502-Befehl entsprechen. Hierin liegt auch der Grund, warum es nicht mglich ist, mit einem Software-Emulator die gleiche Geschwindigkeit zu erreichen, wie sie das System besitzt, das emuliert wird. Obwohl der 68000 mit 8 MHz getaktet ist und der 6510 im C64 mit nur knapp 1 MHz, bedeutet die Interpretation der Befehlsbytes einen Verlust an Geschwindigkeit. Die eigentliche Bearbeitung der einzelnen Opcodes in den entsprechenden Routinen kann jedoch durchaus schneller vom 68000 ausgefhrt werden, als vom 6502. So bentigt der C64-Emulator zum Setzen des Carry-Flags 4 Taktyklen, der 6502 braucht 2 Taktzyklen. Rechnet man diese Angaben auf die Taktfrequenzen der beiden Prozessoren um, so schneidet der 68000 deutlich besser ab. Allerdings mu nun noch die Zeit addiert werden, die der Emulator bentigt, bis er die Adresse der Routine zum Setzen des Flags ermittelt hat. Dieser Vorgang nimmt jedoch so viel Zeit in Anspruch, da der 6502 schlielich doch der Schnellere ist. Da die Taktfrequenz neuerer Prozessortypen immer weiter steigt, wird es wohl nur eine Frage der Zeit sein, bis es mglich ist, einen 8 Bit-Prozessor mindestens mit der Geschwindigkeit zu emulieren, mit der dieser Prozessor normalerweise betrieben wird. Nun wiederholt sich der Vorgang der Interpretation des folgenden Befehlsbytes natrlich bei jedem neuen 6502-Opcode. Deshalb ist es gerade an dieser Stelle besonders wichtig, eine mglichst schnelle Auswertung des nchsten Befehlsbytes zu erreichen. Spart man hier nur einen Taktzyklus ein, so steigt die Geschwindigkeit der Emulation bereits merklich. Wie kann nun das nchste Befehlsbyte ausgewertet werden? Im allgemeinen wird hierzu dieses Byte in ein Datenregister geladen und dann die Adresse der zugehrigen Emulationsroutine aus diesem Byte berechnet. Dies kann z.B. durch den folgenden Algorithmus geschehen: LOOP: CLR D0 MOVE.B (A0)+,D0 ASL #2,D0 MOVE.L (A1,D0),A0 Algorithmus 1 JSR (A0) BRA LOOP Geht man davon aus, da A0 auf das nchste Befehlsbyte im 6502- Adreraum zeigt und A1 den Anfang einer Tabelle mit Sprungadressen auf die entsprechenden Emulationsroutinen enthlt, wrde obiges Programmfragment den Anforderungen gerecht. Allerdings lt die Geschwindigkeit der Interpretation noch viel zu wnschen brig. Um eine hhere Geschwindigkeit zu erreichen, kann man den ASL-Befehl durch zwei ADD-Befehle ersetzen und die obige Routine fr jeden zu emulierenden Opcode neu programmieren, was dann so aussehen knnte: CLR D0 MOVE.B (A0)+,D0 ADD D0,D0 ADD D0,D0 MOVE.L (A1,D0),A0 Algorithmus 2 JMP (A0) In diesem Fall wird die nchste auszufhrende Routine nicht mehr als Unterprogramm angesprungen, so da man nicht mit RTS zu einer bergeordneten Interpretationsroutine zurckkehren kann. Eben aus diesem Grund mu sich der obige Programmteil am Ende jeder Emulations-Unterroutine befinden, also fr jeden Opcode einmal im Programm vorhanden sein. Dadurch wird das Emulatorprogramm zwar lnger, dafr aber deutlich schneller, da der Aufruf und die Rckkehr aus einem Unterprogramm besonders viel Zeit bentigt. Und Geschwindigkeit ist fr einen Software-Emulator das hchste Gebot! Darber hinaus hat man auf dem ST genug Speicherplatz, um bei einem Emulator fr einen Prozessor mit nur 64K Adreraum nicht sparen zu mssen. Der oben dargestellte Algorithmus 2 findet sich in hnlicher Form in allen mir bekannten Software-Emulatoren wieder. Lassen sie uns einmal ein wenig rechnen: Die Ausfhrungsgeschwindigkeit fr diesen Algorithmus betrgt 46 Taktzyklen. Der 6502 ist normalerweise mit 1MHz getaktet, der ST mit 8MHz. Allein die Interpretation eines Befehlsbytes wrde demnach eine Zeit verbrauchen, die 46/8 6502-Zyklen entspricht, also fast 6 6502- Zyklen. Da die krzesten 6502-Befehle 2 Taktzyklen (bezogen auf den 6502) brauchen, wrde nur die Auswertung des nchsten Befehls durch den Emulator schon extrem viel Zeit verschlingen. Das Prinzip, das in Algorithmus 2 zur Interpretation verwendet wurde, kann jedoch nicht mehr entscheidend verkrzt werden. Ursprnglich arbeitet auch mein C64-Emulator mit einem vergleichbaren Algorithmus. Ist man allerdings bereit, 64K Speicherplatz mehr fr den Emulator zu opfern, was beim ST normalerweise mglich ist, so kann man die so zeitkritische Befehlsinterpretation durch eine vllig andere Programmierung deutlich beschleunigen. Hier die Routine, wie sie in meinem Emulator verwendet wird: MOVE.B (A0)+,LBL+2(A1) LBL: JMP $0(A1) Algorithmus 3 Auch hier ist A0 Pointer auf das nchste Befehlsbyte, A1 ist ein spezieller Pointer in das 64K-Segment, in dem sich der Emulator nun befindet. Nun ein paar Erklrungen zu Algorithmus 3, denn er drfte nicht so einsichtig sein, wie die ersten beiden. Im obigen Fall wird das Befehlsbyte nmlich ohne irgendwelche weiteren Berechnungen direkt zur Adrebildung im darauffolgenden Sprungbefehl verwendet. Hierzu am besten ein Beispiel. Nehmen wir an, der nchste 6502-Opcode, auf den das Adreregister A0 zeigt, ist $EA. Dieses Byte wird nun als Displacement fr den folgenden Sprungbefehl benutzt, wobei sich das Programm selbst verndert. Direkt vor dem Sprung sieht der Sprungbefehl dann also folgendermaen aus: JMP $EA00(A2) Das 6502-Befehlsbyte bildet das Hi-Byte fr das Displacement, das Lo-Byte ist immer Null. Auf diese Art und Weise spart man sich jegliche Adreberechnung, da die Sprungadresse auf die passende Routine nicht mehr einer Tabelle entnommen wird, wie es bei den ersten beiden Algorithmen der Fall ist. Allerdings mu nun jede Routine zur Behandlung der Opcodes in genau einer Page Abstand hinter dem Beginn der vorherigen Routine anfangen, da das Lo-Byte des Displacements immer Null ist. So kommt es auch, das fr diese Art der Emulation 64K Speicherplatz bentigt werden, nmlich fr jeden Opcode des 6502 256 Bytes. Die Ausfhrungszeit von Algorithmus 3 betrgt nur noch 30 Taktzyklen. Er ist also um 50% schneller als Algorithmus 2. Dieser Geschwindigkeitszuwachs macht sich deutlich bemerkbar, denn er schlgt ja bei jedem 6502-Opcode neu zu Buche. Soweit das Wichtigste zur Interpretation der Befehlsbytes des 6502. Ist dieses Problem gelst, so mu man sich als Nchstes darum kmmern, wo die Register des zu emulierenden Prozessors "aufbewahrt" werden knnen. In unserem Fall ist diese Frage recht einfach zu beantworten. Der 6502 hat drei Register (Akkumulator, X- und Y-Register) sowie einen 8-Bit-Stackpointer und den Programmzhler. Der 68000 besitzt insgesamt 15 Register, wenn man A7 als Stackpointer einmal auer Acht lt. Es ist somit keine Kunst, diese Register in Daten- bzw. Adreregistern des 68000 unterzubringen. Fr Stackpointer und Programmzhler wird jeweils ein Adreregister, fr die anderen 6502-Register werden drei Datenregister verwendet, in denen nur das Lo-Byte genutzt wird. Schlielich mu das Prozessorstatusregister des 6502 auch noch irgendwo untergebracht werden. Es ist im allgemeinen nicht mglich, einfach die Flags des 68000 zu verwenden, da sich deren Verwendung von der beim 6502 geringfgig unterscheidet. Darber hinaus hat der 68000 im Gegensatz zum 6502 z.B. kein Dezimalflag. Bei den meisten arithmetischen Operationen besteht in der Behandlung der Flags jedoch kein Unterschied. Es empfiehlt sich, die Flags in einem weiteren Datenregister unterzubringen und nur bei Bedarf in das CCR-Register des 68000 zu bertragen. Schlielich wird des Prozessorstatusregister nicht von jedem Befehl beeinflut. Nachdem bei Rechenoperationen die Flags im CCR entsprechend gesetzt worden sind, werden sie dann wieder in das reservierte Datenregister bertragen. Durch die beschriebene Verwendung der Register bleiben noch einige Register dem Programmierer zur Verfgung. Sie knnen dann Daten aufnehmen, die whrend der Emulation stndig zur Verfgung stehen sollen, wie z.B. ein Pointer auf den 64K Adreraum des 6502 sowie auf die 64K, die fr den Emulator reserviert sind, und in dem sich die Emulationsroutinen fr die einzelnen Opcodes des 6502 befinden. Prinzipiell ist es natrlich auch mglich, die Registerinhalte des 6502 im Speicher abzulegen. Allerdings dauern Zugriffe auf den Speicher verhltnismig lange, so da man keine brauchbare Geschwindigkeit mehr erzielen knnte. Will man Prozessoren emulieren, die mehr Register aufweisen, als der 6502 sie besitzt, so mu man die Aufteilung neu berdenken. Dies ist brigens bei den meisten anderen Prozessoren der Fall, z.B. beim 8080, Z80 und 8086. Man sollte jedoch durch geschickte Wahl der Registerbelegung stets dafr sorgen, da absolute Zugriffe auf den Speicher mglichst vermieden werden, da sie besonders zeitaufwendig sind. Beim C64-Emulator konnten direkte Zugriffe auf den Speicher vollkommen umgangen werden. Hier wird nur ber Adreregister auf den Adreraum des 6502-Prozessors zugegriffen. Will man mit dem 68000 einen 8 Bit-Prozessor emulieren, so sind einige Adressierungsarten und Befehle recht leicht nachzuvollziehen, andere stellen jedoch Probleme dar, besonders dann, wenn es darum geht, eine mglichst schnelle Ausfhrungszeit zu erzielen. Ich mchte hier als Beispiel die absolute Adressierung des 6502 anfhren. Eigentlich kein Problem, sollte man meinen. Aber dennoch mu man hier vorsichtig sein. Wie sie sicher wissen, kann der 68000 auf 16 Bit-Worte nur dann zugreifen, wenn sie auf geraden Speicheradressen stehen. Verste gegen diese Regel fhren zu einem Adrefehler, der sich in drei Bomben personifiziert. Bei Programmen, die fr diesen Prozessor geschrieben sind, liegen die Befehlsworte und absoluten Adressen deshalb natrlich immer auf geraden Adressen. Bei 8 Bit Prozessoren sieht die Sache jedoch ganz anders aus. Die oben angefhrte Einschrnkung fr absolute Adressen besteht hier nicht. Es kann also ohne Weiteres passieren, da die absolute Adresse, die auf einen Sprungbefehl des 6502 folgt, auf einer ungeraden Adresse liegt. Somit ist es nicht mglich, die Adressen fr die absolute Adressierung mit einem einzigen Befehl aus dem 6502-Adreraum in ein Register des 68000 zu holen. Solche Adressen mssen hier grundstzlich in zwei einzelne Bytes aufgespalten werden. Darber hinaus existiert noch ein weiteres rgernis. Im Gegensatz zum 68000 werden bei 8 Bit Prozessoren absolute Adressen mit den Lo-Byte zuerst im Speicher abgelegt. Bevor man eine solche Adresse verwenden kann, mssen also erst die beiden Adrebytes in die richtige Reihenfolge gebracht werden. Mit folgender Routine knnte dann die absolute Adresse aus dem Speicher in ein Datenregister geholt werden: MOVE.B (A0)+,D0 ASL #8,D0 Algorithmus 4 MOVE.B (A0)+,D0 ROR #8,D0 Die beiden Bytes fr die absolute Adresse werden hier einzeln aus dem Speicher geholt und durch Schieben und Rotieren in die richtige Reihenfolge gebracht. So weit, so gut. Leider brauchen Schiebe- und Rotierbefehle relativ viel Zeit. Algorithmus 4 mag zwar leicht zu durchschauen sein, bentigt jedoch 58 Taktzyklen. Dies ist besonders ungnstig, wenn man bedenkt, da die absolute Adressierung relativ hufig vorkommt. Ist man jedoch bereit, ein Adreregister zu opfern, so kann man durch eine vllig andersartige Programmierung einen groen Geschwindigkeitsvorteil erlangen: MOVE.B (A0)+,-(A2) MOVE.B (A0)+,-(A2) Algorithmus 5 MOVE (A2)+,D0 In Algorithmus 5 zeigt A2 auf eine beliebige gerade Adresse im Speicher, an der die beiden Bytes zu einem Wort zusammengesetzt und anschlieend nach D0 bertragen werden. Diese etwas unkonventionelle Art der Programmierung mag zwar umstndlich erscheinen, sie kommt dafr jedoch mit nur 32 Zyklen aus, denn Schiebe- und Rotierbefehle entfallen nun vllig. Leider ist es nicht mglich, den Stackpointer, also A7, so zu benutzen, wie in diesem Beispiel A2. Der Stackpointer wird nmlich grundstzlich um ein Wort, also zwei Bytes, erhht oder erniedrigt, auch wenn Byteoperationen durchgefhrt werden, so da er sich nicht an Stelle eines anderen Adreregisters benutzen lt. Die obige Problematik stellt nur eines von vielen Problemen dar, die man bei der Emulation eines 8 Bit Prozessors zu bewltigen hat, wenn man um jeden Taktzyklus kmpfen mu. Ist nun endlich die eigentliche Emulation des Prozessors fertiggestellt, wobei natrlich fraglich ist, wieviele Fehler sie noch enthlt, mu man als nchstes sein Augenmerk auf die Implementation des Betriebssystems richten. Schlielich ist es das erste und wichtigste Programm, das man zum Laufen bringen mu. Luft das Betriebssystem unter dem Emulator einwandfrei, so kann man davon ausgehen, da sich kaum noch Fehler im Programm befinden, da alle Befehle des emulierten Prozessors irgendwann einmal ausgefhrt werden drften. Nicht jedes Betriebssystem lt sich gleich gut auf einen anderen Computer bertragen. Das Betriebssystem des C64 lt in dieser Hinsicht einiges zu Wnschen brig. Im gnstigsten Fall gibt es fr jede wichtige Funktion, die vom System erledigt werden soll, also insbesondere um die Behandlung der Ein- und Ausgabe, eine Funktionsnummer oder einen Sprungvektor. Beim C64 gibt es zwar eine solche Liste von Sprungvektoren, nur ist sie leider nicht so vollstndig, wie man es gerne htte. Besser sieht es da bei CP/M und MS-DOS aus. Hier gibt es weitaus mehr Funktionen als beim C64, so da eine Emulation erleichtert wird. Dies liegt natrlich daran, da diese beiden System ohnehin fr den Einsatz auf unterschiedlichen Computern vorgesehen sind, was beim C64 ja nicht unbedingt der Fall ist. Welches System man auch immer emulieren will, alle Aufgaben die ber solche Vektoren oder Funktionsnummern aufgerufen werden, mssen vom Emulator berwacht werden. Hierzu ein konkretes Beispiel: Fr die Ausgabe von Zeichen auf dem C64 existiert ein Sprungvektor BSOUT. Da die Bildschirmdarstellung der Zeichen auf dem ST grundstzlich anders realisiert wird als auf dem C64, mu an dieser Stelle eingegriffen werden. Die Ausgabe auf dem Bildschirm darf nicht so erfolgen, wie es beim C64 geschehen wrde, denn dann wrde sich auf dem Bildschirm des ST gar nichts tun. Sie mu in einer eigenen Ausgaberoutine programmiert werden. Das gleiche gilt fr viele andere Funktionen des Betriebssystems auf dem C64. Natrlich mu man darauf achten, da die Register, die fr den Betrieb des Emulators wichtige Daten enthalten, nicht in den eigenen Routinen verndert werden bzw. nur Daten erhalten, die vom Betriebssystem des C64 erwartet werden. Die LOAD-Routine soll z.B. das Ende des geladenen Programms als Rckgabewert in den Indexregistern liefern. Wie schon angesprochen, mu die Emulation durch geeignete Programmierung so gestaltet werden, da sie mglichst schnell erfolgt. Neben entsprechender Programmierung des Emulators gibt es noch weitere Mglichkeiten, die Geschwindigkeit von Programmen auf dem ST zu erhhen, besonders dann, wenn es sich nicht um Programme handelt, die in GEM-Umgebung laufen. In diesem Fall ist es nmlich mglich, Vektoren, wie den evnt_timer-Vektor des GEM auf einen RTS-Befehl umzubiegen, so da die zugehrigen Routinen, die whrend eines Interrupts ausgefhrt werden, nicht mehr angesprungen werden. Dies hat unter anderem zur Folge, da die Uhr des Kontrollfelds nicht mehr luft, wenn der Emulator aktiv ist. Da man sie beim C64-Emulator ohnehin nicht bentigt, ist dies aber kein Beinbruch. Der Lohn dafr ist eine erhhte Geschwindigkeit. Weiterhin kann es lohnenswert sein, die Maus abzuschalten, oder besser noch alle Aktionen, die den Tastaturprozessor betreffen, selbst zu bernehmen. Zum Schlu mchte ich noch auf die Frage eingehen, inwieweit berhaupt eine Kompatibilitt, insbesondere zum C64, auf einem anderen Computer zu erreichen ist. berlegt man sich, was den C64 so erfolgreich gemacht hat, so sind dies in erster Linie die unzhligen Spiele, die fr diesen Computer existieren. Gerade Spiele reizen die speziellen Fhigkeiten des C64 (Sprites, Rasterzeilen-Interrupt, Timer) besonders aus. Da die Hardware des ST keine Darstellung von Sprites erlaubt, und diese Grafikobjekte nicht nur aus Zeitgrnden unmglich durch Software nachgebildet werden knnen, ist die Emulation von Spielen also in Frage gestellt. Weiterhin ist es aus Zeitgrnden nicht mglich, die Interruptroutinen des C64 durch den Emulator ausfhren zu lassen, da dann die Arbeitsgeschwindigkeit merklich nachlassen wrde. Schlielich sind gerade Interrupts eine besonders zeitkritische Angelegenheit, da sie sehr hufig auftreten. Damit sind nun aber alle wesentlichen Einschrnkungen bei der Emulation aufgefhrt. Ein Groteil der Programme, die nicht auf die genannten Mglichkeiten zurckgreifen, kann vom C64-Emulator verarbeitet werden. Auch hochauflsende Grafik ist in einem gewissen Mae mglich. Allerdings mu die Bitmap fr die Grafik im Bereich von $E000-$FFFF, also unter dem Betriebssystem liegen, damit der Emulator erkennt, wann der Grafikspeicher angesprochen wird. Da die berprfung des Bildschirmspeichers und der Bitmap relativ viel Zeit in Anspruch nimmt, hat ein Verzicht auf diese Ausgabekontrolle eine weitere Erhhung der Geschwindigkeit zur Folge. Neben der Emulation des C64 sind auch eine Drucker- und eine Floppy-Emulation, die der 1541 weitgehend entspricht, im Emulator enthalten. Das Programm luft brigens in niedriger und in hoher Auflsung, so da jeder ST-Besitzer sich nun seinen eigenen C64 von Disk laden kann. `7, *OO*m - ЭЭм// Bg?<JNA JfHz(?< NA\tEGBg/?<=NAP>kh/Hy ??<?NA JkL??<>NAXJ@krRN |@@Ad 0g @NEA4rN`K(Nwg@p@ !D3sW"/9W|3@9C:g H`a LJkH!MA6aJ.fS.f|BG.B.@.G6.B.JfR.G.BB(4BH@H>@ zC7Lq J9g.|Cpp$:HF/ΟQ`pFPPQaLC NsN@Nu .@g.˰.g|`VJ.k0.f|:z|<g8<g< g <g<fTJ.gS.fTS.fN| .n@9g#>DB9H.ư.lHAw R.nnNuJ9g@H瀂MA69/ f<af* nGf .f /|`/|`<bfHz?< NA\`ܰ<?fR9W9W`İ<@fR9C9C`<Af Ry`<Bf&a1 9-g -`|+`p<Cf&a1* 9-g -`P+`D<Df /|j`2|@˰<*g<6fA,`Ȱ<g<fA,`<fA-`<fA,`<8fA-9`j<fA,`T<Kf |<`f<Hf |<`T<Rf B.<`D<cf |p(`4<df| p)`$#ZHk A0@ z0<gX.<f.gJ.k 9NLANsBEA4&zjMA6BBBBBr5 J$K?z`dBEA4&z2MA6BBBBBr5 J$K?`&paJ.<BBA`<(dRR<fP`|aSj"z0<?BQB.B..AJ0`k .(Sj0`<.EC.&q`z'RJ0`k<(RjENuAwB@R.fS.<Nua$.EEgJ.g B..a a<f | FA.Cv``Sf`< f.G.B.A(0p< fSfRGB.B.B.J.k8.AJ0`kSfa`.f.EӺ.m`ZHJ.g<..@.G6<?g<JjJ.f f<@R.Ӻ<"f .Ծ.fB.z .g .gaEL<fP<Nu<@J.g<J.gS.aNaLJ.gB.J@NuaR..պ.lV<OgDJ.fl.ּ<m aS..A0`0`.(J0`k6Sf`.S.a,B.Nu.f FX`pSFanNu .gn .gL<NuHB..Ek<< g< m"<`m<`<?<"f .`J.f<fFJfaj`2aSG.B.C(1paDR.fz a6` p`J.f<fEǺ<fa<f$RafGS.mtS.aB.`d<f2<(R.ֺ.nG`DS.֚<(mEfa`,a@<f 9N`<f .`< f.`<<fz^< lº< ghJ.g<@`<fV..B.C( 1 pf.f<Og/ a4|("_.1paS.fz aR.`nJ.f<f&J.gZS..Ӛ<(mEjDal`<<fB.Ǻ<fJfa` aSG`<fa`<a<fN`A*p0gQNu@@@#:Nup/ Ba"_NuB.B.B.B.a`\B..R<faPAJ0`jF`d|B.g <(SfNuS.Nu|z'.g <(SfNu.ּ<gR.Nu/.PS.S.S.Ra<lA.'p`A0`a`aBA0`<0`j<`R<f.J.jR.R..gpNqQ.f.-_Nu.ARJ0`jF<oaN.SS.`/.|Sa̼.oAC.%q`0`Pa6`a|.m0`<J0`j<`Sf.a(-_Nu<.E~'.B.A(.B.C(ppSjB z|"H0<?J9gB9I QNuAC.&q`0`<.ENuB z0<?BQ~'a.B.A( pSjNu?<NAT`??<NAX``<g #+$4<NuENuENu .f a`` .g y$4B` .g` 0< .g0  !&).1@ "%*-26@@'$/,7@@@<@@@@@@@@@3@@+@@(@@@@@@@@@@@@@@@@@@@@@71 8;#,@@@@@@@@@@@@@c64\_basic.c64c64\_kernal.c64c64\_font.c646!6,&;  ,EfC64-Emulator V3.00 1987 by Uwe Seimet Buchenlochstrae 29 6750 Kaiserslautern Telefon: 0631/21237 Belegung der Sondertasten: Help: System-Informationen CTRL: Scrolling verlangsamen ALT: Scrolling anhalten Tab: RUN/STOP Undo: Restore F5: Bildschirmfarbe ndern F6: Zeichenfarbe ndern F7: Hardcopy F8: Bitmap berwachen: + F9: Bildschirmspeicher berwachen: + F10: Emulator verlassenFGEB.aE1aE2 aE+a 9$+gBgHy+?<NNAPJ@g0<`J.fE2NAXJ@k.9+9+UdSFG`PE2La`B.<zNuE2NAXJ@j^0< `R0<.<n: <mR<nL0<J.gB$Q??<NAX.BC)@CA+B00S00QBCNuX`B9B9A+ : Jg  gp C 61gQ`@C ."qp:aNNuB9+,#.aVp,afFB0 0Sg 0Pf 0,fv 0Rg 0WfdP+BgHy+?<<`B9+p 9$+gBgHy+?<=NAPJ@k(BA.SA+p,#A+zB0A++AA+H1A+\BpA0A+ м !Nu.<<gJy+f PJ9+f$a( z#$Sy+fJ9+g.@<NuJy+k/:Hy?9+?<@NA JkBy+#$` zd#$4<NuaA+J0gB0A+ м /AA+\B00/A+H?0?<@NA JkN`AA+HJpk ?0?<>NAXNuJy+g429+SAA+z+AA+\1+AA+ !a^3+Ry+0A+z+AA+\3+A+H3+AA+ #$A #$NuA+pf+q2Nu4PPQB"C+?<Hz?<NNAPJ@fJ1g R`B@<g R`Af?<Hz?<NNAPJ@faD?<ONATJ@gBgC+/ ?<6NAP  PPHAfBBNuPP )мXX| l |dl  "B@1g <.gR`"<g R`J10gJ10f   `(0J10 f   `0 J10!f `0!)g$BgHr0?<=NAPJk`6//9+??<?NA JkD??<>NAXJ@k6Bg/ ?<NAX/?<INA\B`fE Jp=afB0Bg/ ?<NNAPJ@g/ Hr0Bg?<VNA J@gt`f|EJgl Jp,arB0/ ?<ANA\J@kR9` JB@aR``6fBEJg( Jp,a8B0B/ ?<CNA J@k@??</ ?<CNA JB@a`B@0ggR@`<Nu.k< {0N"" #########ƺ< g$0a< fp aB9A.B9A1By,$Nup `By,$B9A.B9A1p `B9A/< g<"f F9A1`vJ9A1fl<fPA.Nu<fB9A.Nu<fPA/Nu<fB9A/Nu<fPA0Nu<fB9A0Nu<gb<g`< e&<gZ Jk< m*<`m<`(<?`"<< m <fp^`<@<`<@@J9A/gмC,&`CA&t zJ9A.gFJ9A0gQ#$Nu <&$gCPkaz`"z><&0 ah0 Haf4 SBC<&#$aNQ`JtC`$ y,$g09,$AA&Ry,$NutAa0`PA/NuB9A/Nut@pa0|??<NAXNuVIDMUP&CRSNT !(!,*.*" ST 2ABLOCKS FREE.+00, OK01, FILES SCRATCHED30,SYNTAX ERROR73,VC 1541 EMULATOR63,FILE NOT FOUND62,FILE EXISTS<&*  p ~      H \ l |    & 8 J \ j x    " 6 B Z p    "2BRj"<Xh 4<T6@t"@Rfr*>T`x.FR`n@Tnx&2BNn,DPj(8\j ( R l x 5 J$49A4ZK(AN68684DĊ6(@]NDĊ68@]N6868@]NJ$] NDĊ@] N@] N4DĊ6(@] N46(6(@]NfH]N68684GDĊ6(@]N68684G|e|AYDĊ0(@],NDĊ6(@]NJ4K(]@N686846(Dķ@]AN68Dķ@]EN68 @8]FNJ$]H NDķ@]IN @]J N-4|d K(]LNNT46(Dķ@]MN46( @(]NNfH]PN68684G6(Dķ@]QN68684G|e|AY0(Dķ@]Q.N6(Dķ@]Q@N68Dķ@]UN68 @8]VN]X N4G6(Dķ@]YN4F6(Dķ@]]N4F6( @(]^NJ4K(]`N686846(Df @]a"N<@]a2N68Df @]eN<@]e&N68D@8]fNJD@]hNDf @]iN<@]i"ND@]j N4<f B6`6(v(4K(]l,N46(Df @]mN<@]m*N46(D@(]nNgH]pN68684G6(Df @]q"N<@]q2N68Df @]uN<@]u(N68D@8]vN]x N4G6(Df @]yN<@]y,N4F6(Df @]}N<@]},N68684(]N68684?|d,( .BBe|dNfr:A]N||d.g |(`AY(9Gg”||@dNp8] N8] N8] NSDJ@]ND@] N4(]N4?N.4(]N4N.4(]N4?N.fH]N68684G(]N68684GN.8]N8]N8]ND@] N4G(]N4GN.I] N4F(]N4FN.D@] N68684D6(@]ND@] ND68@]ND68@]ND68@]ND@] ND@] ND@] N4D6(@]N4D6(@]N4D6(@]NgH]N68684GD6(@]ND68@]ND68@]ND68@]N<] N4GD6(@]N, B6DJ@]N4F6(]N4FD6(@]N4GD6(@]N6@ijD]N6868466(@ijD]N468@ijD]N468@ijD]NS68DJ68@]NRDJ@]N6@ijD]NSDJ@]N466(@ijD]N466(@ijD]N4S6(DJ6(@]NfH]N68684G66(@ijD]N468@ijD]NS68DJ68@]N]N4G66(@ijD]N4F66(@ijD]N4FS6(DJ6(@]N6@ijD]N686846(DDf@ijD]&N<@ijD]8N468@ijD]N68DDf@ijD]N<@ijD],NR68DJ68@]NRDJ@]NDDf@ijD]N<@ijD](N]N466(@ijD]N46(DDf@ijD]N<@ijD]0N4R6(DJ6(@]NgH]N68684G6(DDf@ijD]&N<@ijD]8N68DDf@ijD]N<@ijD].NR68DJ68@]N]N4G6(DDf@ijD] N<@ijD]2N4F6(DDf@ijD] N<@ijD]2N4FR6(DJ6(@]NH y.C7E6G$v0442t!X@XAQQLNuH y.C7E6G$v0442t!X@XAQQLNu . H 1Q0("*"< &,"h F. (&  $\$  $.  t28 p (B  j( 0 " N&V ( DH     $      "d h,:  h   *d"PP42 j"B`0xt006600000005800 1 2 F0110030 9[...................................................]001 KurzbeschreibungzumC64-Emulator  DerC64-EmulatoremulierteinSystem,dasauseinemC64,einem kompatiblenDruckersowiesovielenFloppiesbesteht,wie angemeldetwordensind.DieDiskstationenerhaltendabeidie folgendenGertenummern:A=8,B=9usw.DerDruckerkannwie gewohntunterderGertenummer4angesprochenwerden.Die DruckeremulationistfrEpson-kompatibleDruckerausgelegt.ber dieSekundradressenvon0bis10kannmandiverseDruckmodi erreichen. KernstckderEmulationistdereingebaute6502/6510-Emulator, deralledokumentiertenBefehlediesesProzessorsnachvollziehen kann.DabeiwirdaufdemATARISTeineGeschwindigkeiterreicht, dieeiner6510-Taktfrequenzvonfast0.4MHzentspricht.(Zur Erinnerung:ImC64luftder6510miteinerTaktfrequenzvon knapp1MHz.)DamitschlgtderC64-Emulatordieanderenfrden STerhltlichenEmulatorendeutlich.Disk-Operationenverlaufen natrlichschnelleralsbeimC64.AuerdemkanndieRS232- SchnittstellekannnunauchmitBaudratengenutztwerden,dieauf demC64ausGeschwindigkeitsgrndennichtimplementiertsind. DieTastenbelegungdesEmulatorsentsprichtsoweit,wiemglich, derdesC64.VergessensiealsodieAngabenaufderST-Tastatur, siehabeneinenC64vorsich! WelcheProgrammelaufenaufdemEmulator,welchenicht? Nun,eslaufennichtodernichteinwandfrei:Programme,die 1.komplizierteGrafikoperationenvornehmen 2.dasRAMunterdemROMbenutzenwollen 3.eigeneTimer-oderIRQ-Routineneinrichten DieobigenPunktetreffeninderHauptsachefrSpielezu.Viele andereProgrammelaufenalsoeinwandfrei,egalobinBasicoder Assembler.SomitbietetderEmulatorauchdieMglichkeit,sich mitderProgrammierungeines65xxzubeschftigen. Zeichen,dieperPOKEdirektindenBildschirmspeicherdesC64 gebrachtwerden,bzw.PunkteaufdemGrafikbildschirm,erscheinen ausZeitgrndennormalerweisenichtaufdemBildschirmdesST, damitnichtjederZugriffaufdenBildschirmspeicheroderdie Bitmapberprftwerdenmu.berdieFunktionstastenkanndie DarstellungdieserZeichenein-bzw.ausgeschaltetwerden.Der GeschwindigkeitsverlustinderEmulationbetrgtdannetwasmehr als1%.DieaugenblicklichaktiveEinstellungkannebensowie diverseweitereInformationenberdieHELP-Tasteermittelt werden. DasProgrammluftinjederAuflsung.Wirdesindermittleren Auflsunggestartet,soschaltetesautomatischaufniedrige Auflsungum,damitdieFarbmglichkeitenvollausgenutztwerden knnen.BeimVerlassendesProgrammswirddannwiederdie ursprnglicheAuflsungaktiviert. DieVERIFY-Routineistnichtimplementiert,dasieaufdemST kaumntigseindrfte.ManerhlthierstetseinOK,dakein Vergleichdurchgefhrtwird. NunnocheinpaarWortezurFloppy-undDruckeremulation.Es wurdenfolgendeDisk-Befehleimplementiert: S:Fileslschen R:Filesumbenennen C:Fileskopieren T:Schreibschutzsetzen/aufheben I:Floppyinitialisieren U9:Floppy-Reset AndereBefehle,z.B.zumFormatieren,werdenignoriert,bzw. erzeugeneineFehlermeldung,dieberdenKommandokanalerhalten werdenkann.FralleangemeldetenLaufwerkeistbrigensnurein Fehlerkanalvorhanden. Esknnen10Floppy-DateienzurgleichenZeitgeffnetsein. RelativeDateiensind(noch)nichtmglich. (2080) RV2.1 (C) BY US _`٠Z[٠΅XY6 7L8Z_"[`#Z8"Z[8X"XYZXZX[Y` xXÍ ~EȌABCDW  +L *** FUNKTIONENPLOT V2.1 BY US ***³_HHH ݬ 0$ l  lLrLK    LHMODCENTRCLEAREGIOCOLOMULTPLOFPLOLINTRANSFEREXCHANGCOPINVERTEXCOMHARDCOPYGSAVGLOADISCATALOEXETRARESUMTESSCREEASACQ9%ȊʒW|ʺgh"ΌćΟΨΊ06@X .*&:`9_;=<>?8 ŨLL?Lȩ:@Lz> 7 "V$p-?%0<q z8ɀ0 qșY8:I8UПșz ȹд8ɀz ȹL B>$0:Ḭ #" L#"  "#"0ȱ"0 GLL了? s#̐ åz;{<L }H|HLsɋ y L s yɉ a ;L y Lé sL @L(Lɺ=LL HHLs˪ȹ0ȹ0 G)LG s +4LH ǻa8Ji(iag ʻ\ W gag` k  _9`:`L::@(2 k LŨ =z>{ y ziz{ sL=z>{`j"LERESUME WITHOUT TRALH  ,&?F)Э)Э)Э ` ĭ)ݭ Э x` ` @` 8頍ABedCdD`LH  f0aɑLE` ũE8ABeCdDȰҤ ˥@xJJJ )yEƅyFƨ)ee)4tJ'81, I17X`Q7X`I17X`ii8JfJfJfi܅FG7X`wƤ17X`I1,Q,7X`@@ @ @@@@ @ 0  Ŧed Ŧedijkl8mninm8opjpomonpmoomnppniljkȄijnJrmjqLǥi0 e k0 e qeoqrepr汥mqnr=8qmqrnrl0 e j0 e edEH =hE"mŰn屰 yL`L@|}LH  ȅ z{ʆ?X@ z{ ׻  ( eidddȰ qe@ gLrȢ@?L u! k s ɭ )a܄x4)a7X` / a܅x4)a7X`LH  H ׎GhF`edde`cebd4xbdbdce؅c܅ebdbdce7X`cebd4xdbdce7X`H s # 21]h2X h1Mࠠcebd 4xbdce7XLs cb4xQbbc7X`LH W    ( e c &cb cebbccicƼƻЅķ`a漢0. Ѕ(؅`))?)^ LH & & &ex1Eb7XbibcaLʪݭ ݩcb4L1LHx4, ̈(b%˅ Fbibcн ̩@ ̩ ̩ ̩7XLs@* 1@ x42, ̈(b%˅$))JJJJ̅ ̥ FȥbibcжI 8b@bccЏL* 1 03740 HA$:A$""1140 R"F'(X)",0,0 \960 fX5 pX15 zY1(F1(QX1W)S)P X2X5.25 Y2(F1(QX2W)S)P%2,A32X1,O20Y1A32X2,O20Y25X1X2:Y1Y2;D990RX1X1.25aX15990jXX1s890A$:A$""1140"F''(X)",0,01110X5X15Y1(F2(QX1W)S)PX2X5.25$Y2(F2(QX2W)S)P!.3,A32X1,O20Y1A32X2,O20Y218X1X2:Y1Y27BAL1140OVX1X1.25_[X151140h`XX1rj1060tA$:A$" "1140~Hallo C64-Fans, wenn ihr nicht wit, wie ihr Programme vom C64 zum ST bertragen knnt, hier ein wichtiger Hinweis: Am besten eignet sich zur bertragung in beide Richtungen eine serielle Schnittstelle. Entsprechende Hardware-Anleitungen knnen lteren ct-Heften entnommen werden. Kostenpunkt: weniger als 10 DM. Wenn ihr noch Software zur bertragung bentigt, wendet euch an mich. Fr 20 DM (Schein) bekommt ihr eine Disk mit Programm, C-Quelltext und Anleitung, sowie die neueste Version des Emulators, falls eine vorliegt. Schreibt einfach an: Uwe Seimet Buchenlochstrae 29 6750 Kaiserslautern Antwort kommt prompt! Nun noch ein paar Worte fr diejenigen, die einen Farbmonitor besitzen. Leider besitzt ich nmlich keinen, so da es sein kann, da die Farben des Emulators denen des C64 nicht vllig entsprechen. Man kann jedoch Abhilfe schaffen, indem man die Farbtabellen im Quelltext ndert. Die Tabelle NEWCOL enthlt die neuen Werte fr die Farbpalette, die Tabelle PENCOL ordnet diese Werte der aktuellen Zeichenfarbe zu. (2080) SMON _` Z[ ΅XY6 7L8Z_"[`#Z8"Z[8X"XYZXZX[Y`'#$%,:;=?ABCDFGIKLMOPRSTVWX-ĵʙk<\CȶM<ȅMBmAZIRT @ S172 }L} PC SR AC XR YR SP NV-BDIZC,,Y)X l@@ %&!"!&FfA!a$L 0PpxXʈHh(@`8*J jO#3SsRLARESSOLLLCAASSIDCCBJJBBBBBBBBSBCCCCDDIINPPPPRRTTTTTTSSOSSOOTBRDDDMNDTTNEPPIMSCCEMNPVVERLLLLEENNOHHLLTTAASXXYEELRLRRACAYXAPDCYXCCXYTPRCSQIELCSIKCDIVXYXYPAPAPISXYXASACD"!&   ة Ѝ!ЩhΨΩRL ~`  ~© w` ~, • •` , `:i)` ` ` ?  Qá': ; ,. .)  LŠ )Hʽ)H` *åHJJJJ 5h) ii0L L Lé L L `` Щ!Щ7Lt Vâ; @í # Lâ * LL N¢  LýLÅ 0i` I®Hhhh@ d¢: @ #à Lá *á 9 ]Đ` ~  L 9` ` ې.)?)ѭ g(` oLf gå`  w` H h`L ($ȄЩ  L$0P 5"".`4(3"H HW &ha0hh43`l &"'#  ת E"H) Gh zi : ½v  l `z{ s: yL k y D_#-"`%__e--$.i.`8_-%e"#"$#% Y 3-Ze X.[ȄY 12-. _ Y 3L+,"#"ȱ"Șe""#iȑ""#`  YL7Lʪlz> 7"V$p-?%0<q z8ɀ0 qș68:I8UПșz ȹд{z`+,_`_ȥ_ _ __`+ȑ++i-,i. - 7834-./012 hhHH>`+iz,i{`ɫ k  y ɫЎ s kІhh_C , תȱ_ȱ_,I ͽ I) G"I__ȱ__`еLl$08Iȹ0ȹ0 G ihh ezH{iH:H9H f %bb"#LC yɩ s + 8JHIHH ,z{=>zCzLKȱz9ȱz:ezz{l s L<逐# H HLsL:LK s L8+,AB` 9:;L7=z{;<9:` (LY `L {HzH:H9HH y L k 89: 8ez{+, _z`{`J ɍ ,L7Lhh9h:hzh{ ezz{`:,z" yɉ a yLL HɍɉБehL s k,h`/"ԥ &" &"e"e&e sLq IJ H H h* h  dIȥeI`LлhJL =afq  qq   q dceL" LH/L~d4d3e. d-deLhd uPQop zaPQ ۶PIȱPIȱPI` L ,  (L ! y5CɣPɦK,7;^ $ 0 ݽ ! ;ө G$ GI`8 8 Ii8 )Y(  sL ; " G L( ,,? )`0?@9:LL7 =>z{` # s ,  @ ` ,   Ϋ `" ; ! ,  ) L L E ;L`AB,CD IJz{KLCDz{ y $P $ 0u E z{ s$ 1$P z ":,z{i کL  © y,LMz{CDKLz{ y- L Ȫ ȱzlȱz?ȱzȅ@ yLQCDL'C L`?EXTRA IGNORED ?REDO FROM START  IJ  L7iHi$h fIJ g л ]8 9:z{Li y, s $ $8$ 0`L7z{z$HH M y8鱐*IEMMaM sLM,{iwe L=i" e"hـg H hKV_F *z{zMـHٹHH 3MLLfh""h#H eHdHcHbHaHl"h#d KhJhihjhkhlhmhnEfoa`l  sL L( LsIڡ.ɫXɪ"z{i Lɨ; eIdILɥLɴL ),(,,zLs L7hhL8de預de` deEF &p T ^q]$ hLo`$ dȱdL -TI% LO dceb`S T Lnk'nk(q ڽ:9bc8 I ߽L $f-fqȩ0aL (] [ [ ] ] I ]i 0 i8^]q.ș0șqeyedydcycbyb00ڊIi i/ȄGqȪ)].șqGI)$<Цq0.ȩ+^.8^-E/8 i:`  Ks`<쪪  piLN Իn ̼N [ H 깩N ( hJ afIf`8;)q4X>Vt~w/z*|cYX ~uƀ1r (piP #L|t>~~>l|D|8|\8lƂ`0`p8||`xzbdL  88>zD00<~(((($t\H0fLN `8|Ƃ|8T|88|T|| 0`@||"FΊbDƒl(h梢|Llld|$$'&8lƂ((((((l8@`:~~:00000000```````` 88p88p<~~~~<p~p~<<~<~ff~<02208||833> 3333  }M //mm}}9}9mm}}oo}m!}}}Ǔ9}ϟ}}oo{ygc mm!99yqeM=}}mm}}πÁ ۋ))93ϙ9MMߟ?ǃ9}}9遲ǃϟm]1um 9mmח]]Acmm!??aA?mm mmǓ9}}}}9?ueŁϟ?Ǐ?????????????Á<Á<Á11ǃ33?3333?????????|t.**>~~ >""" ~~>**:>~PP=%%?>~~^^_^~~B~~>>8>>> >>"">??$$<<$$??>> 0:**.$ |~""<>>>8<<88>>8"66"9=><"&.:2">zD00<~(((($t\H0fLN `8|Ƃ|8T|88|T|| 0`@||"FΊbDƒl(h梢|Llld|$$'&8lƂ((((((l8@`>~~>l|D|8|\8lƂ`0`p8||`xzbdL  88333333f3f33333  ̙3f̙3f 0`}M 큁߃}}mm}}πÁ ۋ))93ϙ9MMߟ?ǃ9}}9遲ǃϟm]1um 9mmח]]Acmm!??aA?mm mmǓ9}}}}9?ue//mm}}9}9mm}}oo}m!}}}Ǔ9}ϟ}}oo{ygc mm!99yqeM=333333f3f333333f̙3f̙????????ϟ?V aɈ Ժ ̼i8HiaaiVp S Ġ Yoh `qr ʻW ( ]WL(qr ǻqgqȘrqr (qriȅqr g\g`5Dzh(F +07 "#"bȱ"d"cȱ"eLੋ ( gebebcdcdfapa ׸LԻ87LcL7 ` ` ` ` ` HFHH  (l  h` -.+ `, +, W  )zdL` )L7{-.v L* 3Lw  ` I L   W  I  ⊨IL L yhh` yL  I  JI  ⊨JI   "#L g n  ̼o S PfH If0 I gh LC ʻ kN W f NLHLIڢIڢ-(h#5ᆥ](IڢfH aHɁ > ChɁ PhL` vy{| g|S}dpL}Qz}c0~~D:~L̑  zXl0L:Lt S "z{`: 808`ORXLTHsSh8 +,8 7834++,`+, s 78+8, ͽ` LDヤ|䧆 G` BASIC BYTES FREE **** COMMODORE 64 BASIC V2 **** 64K RAM SYSTEM \H h`!Б`iš`&D p 7i`(`ք l֤` ϩH덐  ͅL i(٢ ӄ֦֥Ӵ0i() ҽѩ'0i(` Lf/`wxwƘX` ƅ̍x ή  Ƀ xƽv ȤՄб ȄȠӄԥ0 ʅȐ +HHӱх)?$ p @ Щ   hh`"Iԩ"` @ خ  hFhhX` ӥӰ?O2Lg ֦V ʥi(յ0L |`hhНʆ lՄ`H׊HHФӥL L `))? LL. Ls 舄 $ȱшȱ ѭML f ӈՐ |Li(Ր( |L LD)^ L L?7ձ O$ e $ꈱȑшȑ ѭL @L7֥8(* l% 舄L L DL LOFɦ Ll؆džԆ |Li(``'i(````HHHHΥ  셬 0 )  ܭ( Ʀhhhh` 讥L楬HHHH  셬 0 ) 쮥 LX)  'ѱ` $ꥬ) ؅`ѵ) `' $ ` $꘤ӑъ`х) ؅` )%ͤFϮѰυ $I )  ) hhh@L@ˍܮaܢHJH  hA 8h*hl˱6),0pI) 5Ό+΋&ƈ˄ŬwƩ`͎0ILv yzLx 3WA4ZSE5RD6CFTX7YG8BHUV9IJ0MKON+PL-.:@,\*;=^/1_2 Q#$%&'()=>[<]=?!_"у)0>[<]=?_  Ɏ )L 0 -L  7LOAD RUN (Px@h0X HpLLH$ 8f @FFhx ? x x d $  ?f  ) ƥԩܩܭ ܭ ) X`, XJL)`Lx 0X`L8fH @h`L ݩ_,L 튢 LL ܩ ܭ ) 0L @ ʩ f 0ƥ $P X`)` `)ߍ` ` ``G0?FʊEƴ)` ,0pƴƴpP洢˭J,P̞`@,  M  ` ,P`3ƨ60 EFf`ƨg e祖 L;不ꅩ`̜* J ,0Ep,P,,, L~索셚J), ),p ,p0@` (̝Jݭݭݩ ; `J()$,"J)ݭ)L;ﭡ)`̛ )` `H) ݩh` I/O ERROR SEARCHINGFOR PRESS PLAY ON TAPPRESS RECORD & PLAY ON TAP LOADIN SAVING VERIFYIN FOUND OK$ ) (`LxL `LӅʥօL2 ХՅL28? H @ Ʀh`h` A` `L N)`LhLhLJhHH#  dȄhh` LLL LM`L `  LH $LLL L L惡`ꅚ`   $LL` HPLGh 'ȥȩL})# 8 dh`b  jL BhƘYYccmm`0Y`Ycm`䚰 䙰 톚`LL L L春Y `mcZV OL L) 6 (L , 8 j``0 hhL ķLT ķ  J)  L@䌖 .J    '8L- ݩݍݩ ݍݠ`Äl0L{L ` JJP Åą % L3 JJ芤 Ѯ ,$P ByLJL L h Z ,Sӥ)8Jݠȱİ񲪠eÅeąÅą J$` / / ķ`IYL+񆮄l2L_aL   B8` $0 ) `JL 8% ) j g ) j$`Q /L8O0ܮ`xxX` (`,,,,,,,, H $P /hH 0 h8`H Ah2*$c /  ` ^HHHH ȥȥ‘ȥȥȄķ i khhhh˜`` ii` ,ķѲ柤` 榤` . / .jL/$$` ..ݩ x  8lx ܍ ܭ ) )Э  )X L  8hh` ee$0***e܊m܍ܭ܍ ) H*HLCX`ܠ򆱪܌ܩܭ ܍屆JfJfi<űJL`0i0eűi&eűi,eűL橰Ʃ8eI+ץ")00 йL0ư,氩Р0Eƣ0Ff L0LF8e 朥& ܅  ܥL $  Lp1J0)ƪݩ@ Щʥ  LJ LH- ѬK=䞐>膞L:5.'查 ѬȄ   Cx ܮ ܦ0Ƨ'# E E L…``J`܎ܭ ܩܥI)`8f0< /樥)LW  II)ELFƣ: Xƥ Б步ׅʠEׅ лILƾ Px x Ƨ ƫآ X櫥0 Ѓx    (` 𗽓` `8宥``x l P  [Xl`800ÄĠÑÙ`1fGJP3W>/f< -`j1, ܍ ݍܩ܍ݍ܍ݢ܎ݎʎܩݩ?ݩ/ %ܩ@LܩBLn`` Hh`````xlHHH ݬ 0 l  l-)()ݭ ݊) ) L  L) L)  hhh@'>t EFq)mݭmݩݭ ݩݍLYﭕݭݩݩMݍݮ`*iȍi`h)HHHH)ll )L ܭ) LL[LLPLLLLLL%L4LL!LLLLL L LLLllll l"l$l&LLLLl(l*l,LLL LRRBYCH. `E/.. SPECCI DAT tPSPECCI PRG ]\/LSPECCITTDAT UC^GSPECTRUMTXT NPROGRAMM aE/INHALT INF ulE/`> :vN;??q??tcAC]A]?ou_w]}ww}t_]]wt?wAd5wC 5_þUAp?ouw]uwwW}u߾I]w?A]wwYwu]pCcCt݌?wcC7cAuuuwww?uw}_?ut?www?C0w~?C=uuٯw?Wuw_C]|?ل?Yuc?DEODEODDODDODDODEODDODDDDODDDDODDDDO`````a aa aa`DEODEODDODD ODDODEODDODD ODDDDODDDDO````aaa aa``````DEODEOdDD ODDOdDDOdDEODDOdDD ODDDDOdDDDDO  DDEODEODDODDDODDDODDEODDDODDD ODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO"   DDDCODDDnDODDDEODDDGODDDBODDDFODDDFODDDFODDDCODDDDDO, 1DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO]]toctCcc _5]|u]uu]twCT?C _v0]t?0] Pw_e_}w]wݝ]wcta0cYt0]ewcwccwA]c c77Mwuuu_~wWݏWw??t?wggww____u~wwcw]d?]d?c 0``DDDDO4DDDDODDDDODDDDODDDDOdDDDDOdDDDDODDDDODDDDODDDDO`0`````a1aa"a<>aa`0 ```` dFDDOFDDOADDOFDDOADDOODOdHDDOODDOdD@DOdDIDO` ``aa&a````DDDDOtDDDDODDDDOdDDDDODDDDODDDDOdDDDDODDDDOdDDDDODDDDO00a1DDDDODDDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOs">/">"/K$OO<"/*ODBODMDOdDGDODODOD@DODDDDDMUw `"`"```r!aa"!aaU```````~f~~dDDDDOdDDDDODDDDODDDDDOdDDDDOdDDDDOdDDDDOdDDDDODDDDO~f~~MUw``0`v`aa1`v`W|~|DDDDODDDDODDDDODDDDDODDDDODDDDODDDDODDDDDODDDDO|~|MWw`n``n`]`f`DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO~f~MWw~f~z/s{>} """" "("  DJDODG>ODHDODO"DODI"$OIr/ODD"$ODDpODD< DODDDDDMw R""  ("  "#!!DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDMwDDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOw*5_wjcca ]?DU]u]u_w A? 0Տw?w]ݿ__]wcfA݄?d]wݟEU]UEUWw UU5_w*]7AwݴaDU]wwsww7ͭWwjuw=W՜:Uw_vwwg٭]]_f7wa=wݴD]U```0DCDDODDDDOdDDDDODDDDOdDDDDODDDDOdDDDDO4DDDDODDDDDODDDDDDDDO`````pgfaaaaq|Qffg ``QADFfcDDOD@DODDDODCDOdDFDODGDOD@DOD@DOOE$ODGyDDO` `EQ TAaa1)W!}Qff```0Q DFff@dDDODDDDOdDDDDOdDDDDODDDDOdDDDDOdDDDDO4DDDDO~ ?g????g03?30DFaDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOC9OD83330DDOa330>!yϼ??0>" ("Ȁ(" PQ>?00D@aDODH"DODHDH"ODHpDOO"/O9ODC0330DDOfa"*"(( P"(0330fa)Ϧ"{ϟ?03??g>13?DGgEDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDODDDDDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDDDDOWw ?ݷ oÎA?tU]_}ͯ]uu]w]}u_ ?՟ 00ݐw] ?t05_w_}ٯ}wWwk}٭*ݷ|t7َwCDU]jw|?D]?Ul7GUWw MUU_w*]\"_\C*]\~}t[3*a\Þ*x\#"x\| 4@Ϳnu{=\*\| E*]\#"]\~! ?#8#7"]\ɿRNINKEYPFPOINSCREENATTATAVALCODVALESICOTAASACATLEXINSQSGABPEEIUSSTRCHRNOBIOAN<>/`:Ψҩ./x/(g}<0S_ -8z<({ZW͎!\~ #5+ 6}!\ !\(.!\('~ ~_w#6#: \w#NV3w2\#6#5: \w#~B{' x!~7{:8/ O(O!(!~!)@(Z( 0^ ƥ0  !Th(80 6!09(0(ƀh!0 "( >_>@}==/O! :H\8 ?DOg z( yMM 1'4l8!\~ ^#N#Fx T# Px<%l 0 !n4ʹ38w18͔ 0"4CU45q8͙͙PYzõ  `uA$Sʉ.68I>CjsOT\i$v$:;\+bk !?!(! +>G- %/> 7;oz( n|g>7%lyx0B> <#1>z<;:H\8>8 >!? O0!+| 00>Ƹ0$ 0x0yO& 0uyO~#.>˸|gz |>= >Щ (y/O7:t\2t\͌0%(<:t\(" > 6+! 0:t\ x(  # I:t\ʊͲ(0 !:t\=(Š0%(#~w #~w #q>q(6R~ݾ 0 ! ~< yO#  y > ~( :t\=ʶnf^ V |( R8&(~ | n f:t\7 >V^ V |  nf7R8 DM~(>|(+F+N+"_\*_\*Y\+N F ~U#w#s#r#7>*Y\+"_\N F U*_\#NF "K\f| n "B\6 7>N F 67>[S\~ # +0͸, ~O*K\~(%(͸ # 0><7,  "_\͸*_\͸"_\*S\8+U#U#SS\[_\> 2v^ V >Start tape, then press any key Program: Number array: Character array: Bytes: 8i0e! _^ NW)TSR7PO_^]\[ZTS >" N > ! :\6W> e 2\N!U   y==Z>?l 2\ m  2\*Q\s#r ̀ *\W}" )DJ>8 ON >ڟ ;  $ N F C\"\C\C\"\qE"\N K\*\FK\*\NE*\8=0&G8  \G!\> Ow# ֥0 K{\   K6\!;\ˆ &o))) y=>! ON(yU :\8O>N(078#= %N #> _|Xg[\~Wv(W 8Wf(o w&A 8 > F; ; 0H(z> <~#(= AN xF 18f(^-(Z>{?\5R E>2\*\:\> !;\ˮ (E(A n(;>2\"\ F1!͛|XgZN q#ɀscroll 81DG*\*\M x!k\Fx*Q\ s#r#?8!*!"}\0͔ >M D*Q\ s#r6R!![N xF(1G͛>!_ ͛xx ! =!GOx $ ͈!͛xOx T]6=G $ ͈bk:\F(:H\w !|=Pgah)))))DM>Woz@g!@$| } o?g ![>![uFGw#0! xWT8 > 0 ^#0z *=\!s=\^!͵!8018-8:W8 7~_*[\U#p#q *[\RS[\_!^*[\ fjPp~*I\7n—n͕zʗ#N#F! DM͗*Q\>+5U4*Y\####"[\7n !I\m61~ #"[\1"=\~7͕R#DMbk# # #B 87n*I\n͕!J\͕>7~(Á0f(6^!͵0͐+"[\6^n:\nn 0R0-0 GOx* !j\>w !A\w 6޿GO>X  ^!͵6[\"=\ "\6&*a\+[Y\7n[a\*c\~~# >[\K\[8\*{\G>>?Gbk6+ R#05(5(+C\S8\"{\("\>#"{\+@C8\"\!<"6\*\6>+++"=\V!:\!\"O\+"W\#"S\"K\6#"Y\6 #6#"a\"c\"e\>82\2\2H\!#" \55!\61k 8 61͕Ͱ>,~ 0f(@*Y\ͧ6*Y\"]\x] (0Fį n >O2\66 ͊v0N::\ x 6 KE\>:N ͗::\<( ( 4 p\!D\~( 6 ìONEXT without FOVariable not founSubscript wronOut of memorOut of screeNumber too biRETURN without GOSUEnd of filSTOP statemenInvalid argumenInteger out of rangNonsense in BASIBREAK - CONT repeatOut of DATInvalid file namNo room for linSTOP in INPUFOR without NEXInvalid I/O devicInvalid colouBREAK into prograRAMTOP no gooStatement losInvalid streaFN without DEParameter erroTape loading erro, 1982 Sinclair Research Lt>CI\*]\!U*a\7R`in ͸y=((+[S\U"S\*a\++*I\p+q+s+râ K SR P n (*Q\##0*Q\^#V,ɇo&\^#Vz *O\"Q\0####N!-^KSP0M d*e\!K\>^#VR0 r+s##= RDM~ V#^*c\+U##Ca\#*Y\6 "[\#6#"a\*a\"c\*c\"e\!\"h\[Y\#~ȹ# 78 N#Fq#p*O\ ###N!N KSP͔8!\O N#F+8x(*O\ ###~K(S(P ]s#r+x O!z0N KSP  x Ws?\6ͯ F1D0*I\[l\R8"nRn͸ 8V#^+Sl\"l\*l\n(3>>60%p 8;(, ͙͂x?gi"I\nUf(:k\O !l\KI\̀>(s-~@(###z(0!;\˖7n(*_\R >?~Ͷ# (7######~*\˼"\!\V6 tW"\*[\R:A\(C!;\˞>KV( <0^(>C^#V#n͕7nr+s{ <8B=(-00!8,($: 7n 0V(" :j\2j\*S\T]̀͸~#~+###"]\ #~Ͷ"]\"  :( A( 7~@8o(?0#~0##N#F# ѧRDMx/Gy/Od*Y\+"]\!\"e\;-͢-8! ڊx `iV#^ ***}ɱ˼į.lnpHV?A+7wDY+C-Q:mB I\D]=g#= ,O_k ":'B #   #z"`, 6  ,  2G\=2:\Ϳ4  (z:(!vOyڊO!H N *t\~#"t\RO 0 ! N ߹ŠT8 ~ q*B\|(!"E\*a\+[Y\:D\3n:D\( CG~x(0%*U\>V#^SE\#^#V#"U\"]\W6 r (͋(0% (:(ÊK g {q*t\N#FͲ(6707 ̖)v 0%+!q\wCr\"M\V:;\$V@ $z*Ͳ(y< ͂, $v $v~M :t\!*\"\!\~檮w0%(M !\~wW! (: 0%80%( 84ڳ) ͂88*"h\+~ 8 U#8 *E\s#rV #rF8*E\"B\:G\DW*]\KU\͆CU\8 (>2D\~:(#~7F#NCB\#N#F DM͋7N.*M\~(#"h\8*h\^#V#fs678870%()"_\*W\~,( ͆0 wV"W\*_\6&x,(0% $,>GË͙`in+"W\͙x Kx\Cv\*n\V6 ͙`i|0,"B\r ͅyͅ-8(D͙-͢-8 gE͙x K\[K\*Y\+k *e\2R0*\R0"\6>+s=\f $3KE\s=\g*e\ 8 !P8r.UDMz>( ;s=\s͙v x( x< n(>>0%(>9͍,0$ ( <)( ͍,Ҋ$ U##6, ) = :;\$@Š0%>>0%M E ( N (N ()> y#> ͙͂>yx!p $v+-x ) :;(, 0%( >'E #7͔͂0%(>n 6 K\:k\8!GC\>2\ n N (( )Šò! 7vŠ ͍,ү!70%ʲ!Ϳ!q\˶~ :;\@ w6 y0>"+w"[\7~ ,*]\*=\!:!0f(s=\*a\ͧ6,͹!,6"! K\ !q\ˮ~˾ "=\"_\͹!*_\6&"]\*c\[a\7RDMͲ**N *a\"]\( :q\Y 0%*Q\####~K!,(;(Ê?͔͂Wz((Vz Oz0y!\8z88Oz 8!\8 ~(/$(xOyl">l"PG>w#xɟz @Oz(0y!\l"y͔0o 2H\>$G7gyǨoy#ͪ"G~(-#"M C}\ͪ"G>G~NWA Q /w #G#YQO-$,Š͂*=8~08868}$18~08"1184b͔o͔g"}\ $,(w$͂Ţ1008w$1***=8~08w$}$111 **8w$8:}\(-8:~\(-8(<1818:}\(-8:~\(-8ͷ$8:}\(-8:~\(-8ͷ$M 1(42*8-80>(-11118#y0iկ_hA`x88OO*}\xGy<8 ( =O"y( O!%y҄&N t ʊ" t"( y)Š~#*6\y_y@W`(< =O# > Hò*#yOoyXg~(-"(O.+VW檿ǩ$#% %(0%(~#" ~#"( !;\˶~IJ*'$)Š'ý'0%((Kv\+-474A218͢-Cv\~(w 0%(84&Z# '!;\˶~(͎ 0_3Ͳ*'"%5%%"%Ā%H"%"?͈,0VA0<0% #͛,U#6#*e\B"e\+w#~ #ʹ3"]\Ͳ(.̖):;\8#ʹ33 -('( ֯ڊ(ҊO0˱8˹$( v R*O!'0N!& Fz8:!;\{ v 0%( {?G;8 {@Š!;\{ ˶yv ?O 8($+-*/^=>< 0% 5͍,Ҋ$ ( )($, )Š!;\˶('G$O *S\+͆0ͫ(߸ ͫ($( +͋ק̫(S]\ͫ()(B#~@(+ͫ(##$@ +*e\B"e\+ͫ()( , ͫ()("]\* \" \$"]\" \'#~!8͍,ҊO((($(͈,0͈,0˱: \(0%Q)A0% yO7*K\~(- "?)80# ( ( ͈,0͸((  ͈,0p* \~)(~`G#~(+ͫ(#˨x(#####ͫ()(ͫ(i #[e\3"e\ѯ<ɯGy K~ <#N#F#Ͳ*I*###Fq( (( a$,( y(Rq ) <)(l 2+"]\^!y )(Q(**8 * y fq BK)(* ** #BKͱ*)(, R*((0%+)(Pկ(*PY( )Šbk)( *`i) +R8# *DM0%ȯͩ3*e\w#s#r#q#p#"e\ɯ͂0%(͙x7(Bz#^#V0%ͩ0*M\7N(^#~ (0 80 #͈,8$+y*Y\+U##*M\G(#~!8 >*M\ +8B@v(*M\Kr\7F 0xT]#6 +B 0DMx(x+++~+>*M\+ +"M\*Y\+U*M\#p+q+w*Y\+*e\+F+N+V+^+~"e\Ͳ(Š0% ˱͖)8͸!q .&* *$`i*,() yh&##)DM*Y\+U#w #q#px#wbk6q(6 p+q+= -?A?[a?{ 1 ?jڭ1BK+-.(;-. (-8" -ڊ88"-8 8E(e+(- -8;--ڭ11(DO-0:?-0O!:\_QHGͶ*88"-8t0/0*8>-81'8~ G-z ( SW8~~-W:\2\zO-1'8-2\=oA8ͺ/>./~q8 {͋/_z͋/W!\yNq w4q!\Nq A+~w( ?064rpq8K\!\x 88&R/G y(~# y>.>0APJ/>EJy/DO>->+o&]T)))YL}~6#~+ AO7+~/wyN#Fw#yN#N#FW^#V#^#V#^ɧ!0G-0ٯ.W] n4 &##^#V###~#N#F  w#s#r++++͓2͛/G͛/O0xAͺ//whaJ|o0>/4(#}#w+({D?_z/W{/_z/04ʭ1WٯU1|M!)8 084#+ "-A-xOͩ08 z O͎-͓2008Zͺ/xbb!0Zx =??F10h< 8z \wx0~>(٢/w8.#w+) z 5(0 0 4(#xw#q#r#s͓2080ͺ/`iah)j8RR0Z٧RR71(_QYPx=1~06> Q ###>++ >+ 6w#6+>30,/Ƒ#V#^++z( 8Z(G:͎-~֠D+G888(6+( G>'w͖2~-#w+wz B(SX)0 +s+r+p@0Iڢ@ 6<43001Q85$5;5;5;5;5;5;50-5;5;5;5;5;5;5554E6n4i65t677738C87766J84j44446553663z6546723O-2I44-44Ϳ5x2g\Se\~#3W`|oz0T] o2&^#V!e3Kf\:g\[e\3Se\ͩ3bkͩ3~O ~? #~P>#G3=OO *h\43bk!233*h\43Nq#G^31183b3584~( #x怶?w+-x/O͎-4#+O͎-͙x͙ (-͙!+-+ x #͍,8 ֐80<=0 K{\O0+- G~###x74>4#+>w#w#w#w#w474Ч4xW =0<4W 03++|x (?( 8 #+8545++ DMͲ*x(x(*e\-8 Ͳ* *]\x+S]\+6 $ @Š"]\$"]\"[\*Q\>-*[\RDMͲ*͔ҟ*Q\0 Ͳ*ÿ5+x((-++-!g\5 #^{W #1'816:81:08=48;)1'16Xefxe@`2!$/~X:~8- 80 80Dw8=178 8~6(-4814L78441r142  VڥY0\poaږ1\C6~^n#8=4"n1'111*178ɡ689*39111\ 8c# #]81 8͗2~8163111UX9[6ucB 66s]ca 811($18"810810%8610 78$$$~$$~$>(> >bd&F(*D:  >>> < >>>BB<DHpHDB@@@@@~BfZBBBBbRJFB>{2:\ |N( ~( *Y\~ʕ ҁ( ((*]\"\7n(|F(| 6 F  ~( ?*S\:F\0# :E\8#^#V#($~(#"  :( A( +"]\ 2 ~+#~ [\R0 B"\~ ׿M ʆʴ=1*/!ʔʞʨ-Y/*\*\"]\*O\I85!$*c\"e\!\"h\!\:U!:\>2\|!"\ !\"6#6|v͹0N(~wk  #² ͷ|<8!\\Nwy#,; (: {=\6!(>8>0!}6׌+ (y= -׍,0'2\ :ͱ² ׂיC\ y(! B8 C\S\ ׂה02\:\M-[\{( {( !Re:\[\{( !@Rͱ²/*\#} #Nͱ /:\TBNʏÅ * 4 ͱ /:\N | ():(%(B(V( ׂͷיC\ͷ2\*Y\[S\S\7R"\*K\R"\ ͷ!"\!@"\>2\ ( : |n ׂͱ( |n  ׂͷיC\יC\>2\|v( ײ(0!|f !6((#|n(~(#~2\#~2\#y2\>q(<2\ ) ͷS\|:\B(N ͏ͩͅ !\̀#*\|^( :\0K\y(̀ #È |^~ Z l |ï|ï|!\\:\N( B(̀ͅ%͏ͩ!\ |^( 0́ 0w#:\G:\ (8|v ]|~ʣ |v(*\[\|(R0 |f(*\~ *\|^( :\( | *\:\ *S\\ !:\ ͹K\06\ ~ ͩ |^(͹[\*\|  *\7R8 DM:\(G|(!~ *\ |^(+F+N+*Y\+K\:\U#w#s#r#\ È |[S\*Y\+K\*S\U#K\ "K\:\g |:\o"B\6 *S\[\+"W\#z~ ͩ|^( 0́ 0|~ w(#{ C\C\ C\|S!\\ ̀runK\! ^#V#|K0 B0##^#VS\2 n,Xn` 6% K*S\+ U͑!n  :\B!Z s#r#u s#r *O\+R!\:\O s#rT< o !{ ý ! ý ́ ˿!\~(6#~7>86:\[\! BK8>00 08 +| >`i++++| 0>x/7+} +}(80000bk<++++| 0!\6#x/wͩ 8֥ 8>? Z >   /O:\>/*\T]z >Ҵ (7T]z 9>A+} :H\8ͩ 6*=\^#V!R +{=\S=\ 8 (6 (ׅ |f(! ý *Q\~( ~(^=8 s~7~(:\0 ͩ 6:\w~ (ͩ *Q\G~x( ^ ͫ sw~ !\6͒:\=Ͳ wF:\!#w! #wa͓ ^{(  ͓ 4 4ͩ ~ { !\͒!\#:\( ݾ :\ݾ ~ *\^ VR(+|e5 05:\ľ:\(!_͒:\G:\#:\ľ:\w4 4͵J ͵*Q\*S\+U#͑"Q\! :\:\bk[Q\Nl *Q\~>ë _G8>08!0 ++| ~ (8>0 +| ~ (ͩ 6. -7! :\_8aT&(- >8C>#+#+>Үs#>!\w_~/7 #>!*O\~(7~M $:\ݾ nfK\*\ F( ^ V *S\+SU!:\wS͑K\x x( ~w## | *O\+ U ͑ut> w#! 7 ![O\R#nf~S[O\R#S_G*O\~(~M ~^ V  ͑*Q\!,ý F( ^ V nEfF7R8s r ~R7CN( s r 4 w~C\ͥ8(~Dݾ RF ͩA "CF ~CݶFG  >7!F  ^ V wRs r J~ d  ~wG#N qE~ wF~ wDCAFGus r 4 nf ~#7  >hx>xwF(C~2:\(ͣA (F(^D^)nfW{;;;G7Gx/wR^)K\ C\x ~ݾ ## x( ~ #{#(=_ x {w>!\"_\^#VR 0 B*_\s#r*_\##= 2_\ *O\~~M ^VR0 But^ V "S |U*O\U*O\R[\"\*\"Q\8( *\"Q\|*O\ͤ*O\R[\"\ͤ͹:\<( =*Q\"\:\M )"\CVN ͩ"\T(B( S\:\<:\M *\ͩN*\"Q\\!\Nq#:\ *\"\)F ͩ C~R!\ q ! K\ <$8{0*\K\x("~   R4 4 C :\=(2\C>w *\"\)F(CV R\ "\^SVT!<$|2\ nEfFRuEtF[[\l~D(=W*\R  ~wH:\=2\ -"\nf^q#Vq#*\"\nfr+s+*\NEFF:\  # x ~C\ͥ8( RF [\ͬS\[\ͬS\7R*e\R #?|'y*O\+ *O\7R"Q\####~^#VB(T |N (> Z !N |N M |Nʩ!\^#V+"_\ŧR0 B*_\s#r*_\##<86&|*O\~ >~  ^ V  **!+| ! +| D O z>g>g>{g>gz> :\>zC= >ͩ CJ ( > y= >>>6 x R DM!! _0 Z x Sz"_Zy(w#x(w#y(w#x(w{R~Uw# x 86#_!^#V!*\ Z )n K)$1 v׿n(:\>!\6>CN(64 wCV:\0  é 7é !"\~)ݾ ( CͩA F CV7!"\!"\7 AF~)ݾ (  >hx>xwRT]:\!\_)F( F CV(s#r~C\ͥ8 (~D RF(} CC~*2 >C\,! wG(CCR>w#w#!CAF(/q)(Ar7x?>~C\(CͩA F  >d u:\~C\S ~CݶF i~G(cR N y(6 ~ݾG ##(90 !`i DM+  ~Gw##~ fRF x(P8{?(-> f-> fnf ~#8  ~f#> fM ~ Rw>w C\(WS 1~CݶF "G  xwCN(~D(#>h7x>x/wR ~ #ɯwCwEwFCACͣACFnXn ͐ 80͇ͩ> ͩ*Q\>"Q\ ~͞#> ͩ  $ J \ t ( > T f ~ ":Rdx  8bv "4Vn2BZp "4H^p  "6H\r  2D Vh| <b6HZl~ 4Nj"Bd &BZz:Ph(B\v $<Rj4Pf,Jh " @ ^ | !!0!H!f!!!!"$"4"R"p""""##8#N#l####$$$*$H$f$$$%%H%^%|%%%%& &0&H$f$$$$%%"%D%\%|%%%%&&:&R&t&&&&''>'X'z''''( (D(^(|(((()).)F)f))))**$*<*`****++6+R+r++++,,0,H,`,x,,,,,---6-N-f-|-----. .$.:.R.l......//*/@/X/p//////00.0F0^0t0000011121J1d1z11111122(2>2T2j222222333.3B3X3p33333344424H4^4t4444445 5"585L5b5z55555566(6<6R6h6~66666777,7B7V7l77777788828F8\8r8888889 9 969L9`9v999999::$:<:P:f:|::::::;;*;@;V;j;;;;;;<<<. >B>f;;>>>>??.;;;?x???@;;;@@@t;@@;;;;@@A AD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AjAAA;;;;B.BfBB;;;;BCHC~C;;;;CDDD|D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BBBBBBBBBBBBBBBBBBBBBBBBBCBBBBBBBC.CFCGGHBBCCCJJ"JM(JJJJJPhR^MPJJJJJPRxMrJJJJJPRMJJJJJPRMJJJJJPRMJJJJJQRMJJJJJJJJJJJJNJJJJJJJJJJJJJJJJJJJJJN4JNLJNnJJJNJJJJJJJJJJJJJJJNJJJJJJPPPPPPQ`PPPPPPPQPPPPPPPQ PPPPPPPQ6PPPPPPPQPPPPPPPQPPPPPPPRPPPPPPPR,PPPPPPPRTPPPPPPPRlPPPPPPPRPPPPPPPRPPPPPPPRPPPPPPPRPPPPPPPRPPPPPPPRPPPPPPPSPPPPPPPS4PPPPPPPSVPPPPPPPSxPPPPPPPSPPPPPPPSPPPPPPPSPPPPPPPTPPPPPPPT"PPPPPPPTDPPPPPPPTfPPPPPPPTPPPPPPPTPPPPPPPTPPPPPPPTPPPPPPPUP^NNq^^^NNq2,|[d5gNK^NNqRl^ NNqR,YW[^NNqS,YW[^NNq^^ NNqU^ NNq, A ,A,A,lA,lA,l A ,!A!,l"A",#A#^pNNq2,TU^ NNq2,5^ NNqSl^ NNqR,YW[^ NNqS,YW[^ NNq^^ NNqU^ NNqS,gH^NNq^^^NNq2,|[d5gNK^NNqRl^ NNqR,YW[^NNqS,YW[^NNq^^ NNqDU^ NNqH^ NNq2,TU^NNq2,5^NNqSl^ NNqR,YW[^NNqS,YW[^NNq^^ NNqDU^ NNqJfH^ NNq^^! NNqNJ^^!NNqTN A[d",5gNKRA5gNK` ^"@NNqRT^#NNqRTNJ^# NNqRYW[^$NNqSYW[^%NNq^&NNqBB  dJ9>g d< d  e dJg9>Dd`P[WB9>^'fNNqJgH^(NNqU^) NNqTNu^*NNqTNuNJ^*NNqST^+NNqR,YW[^,NNqS,YW[^-NNq^^. NNqF^/NNqNJF^/ NNqJfH^0NNqTNG^1NNqTN|[d5gNK^2"NNqRK^3NNq2R5YW[ A[d5NK^4NNq2S5YW[ A[d5NK^5NNq2 A[d5gNK^6NNq~^7NNqJgH^8NNq" TU^9NNqTN5^:NNqSK^;NNqRYW[^<NNqSYW[^=NNq^>NNqF^?NNql^A NNql^B NNql^C NNqT^D NNql^E NNq2u^FNNqB^G NNql^H NNql^J NNql^K NNqT^L NNql^M NNq2u^NNNqB^O NNql^P NNql^Q NNql^S NNqT^T NNql^U NNq2u^VNNqB^W NNql^X NNql^Y NNql^Z NNqT^\ NNql^] NNq2u^^NNqB^_ NNq^` NNq^a NNq^b NNq^c NNq^e NNq2^f NNq^gNNql^h NNql^i NNql^j NNql^k NNqT^l NNq2u^nNNqB^o NNq2, A[d5gNK^pNNq2, A[d5gNK^qNNq2, A[d5gNK^rNNq2, A[d5gNK^sNNq2 A[d5gNK^tNNq2 A[d5gNK^uNNq29>y>g^vNNq2 A[d5gNK^wNNq,^x NNq,^y NNq,^z NNq,^{ NNq^|NNq,^} NNq25^~ NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq[WYU^NNq,[WYU^NNq25[WYU^NNq[WYU^NNq,[YUJW^NNq,[YUJW^NNq,[YUJW^NNq,[YUJW^NNq[WYUJW^NNq,[YUJW^NNq25[YUJW^NNqDV>[YUW^ NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq[WYU^NNq,[WYU^NNq25[WYU^NNqBQzQQ^NNq,[YUJW^NNq,[YUJW^NNq,[YUJW^NNq,[YUJW^NNq[YUJW^NNq,[YUJW^NNq25[YUJW^NNqW^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq[WQ^NNq,[WQ^NNq25[WQ^NNqJ[WQ^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq[WQ^NNq,[WQ^NNq25[WQ^NNqBQz|Q^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq,[WQ^NNq[WQ^NNq,[WQ^NNq25[WQ^NNqJ[WQ^NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq,[WYU^NNq[WYU^NNq,[WYU^NNq25[WYU^NNqQzQQ^NNqJf YYM^NNq[[^NNqTNJf .M^NNqM^NNqTNJf.0MX^$NNq,,^NNq[WYU^NNq0XM^NNqJg YYM^NNqYYM^NNqYY"NMNJ^NNqTNJg .M^NNqNNqTNJg.0MX^$NNqTN0MX^NNq[YUJW^NNq0XM^NNqJf YYM^NNq[[^NNqTNJf .M^NNq f @jg5@NHNGAܽg^.NNqN/TNJf.0MX^$NNq,,^NNq[WYU^NNq0XM^NNqJg YYM^NNq ()@0,9l9@^NNqTNJg .M^NNqJ fBAdg7(^ NNqN0,TNJg.0MX^$NNqTNNq[YUJW^NNq0XM^NNqJf YYM^NNq[^ NNqTNJf .M^NNq0SX@^NNqTNJf.0MX^$NNq,^ NNqNJ,^NNq[WQ^NNq0XM ^NNqJg YYM^NNq2M^ NNqTNJg .M^NNq0,9T8^NNqTNJg.0MX^$NNq2NNq[WQ^NNq0XM(^NNqJf YYM^NNqUUUUUUUU^2NNqTNJf .M^NNqBy>AfBy>^NNqTNJf.0MX^$NNqB@@,@,@,@@,@^2NNq[WQ^NNq0XM0^NNqJg YYM^NNq2G^ NNqTNJg .M^NNq3>Af3>^NNqTNJg.0MX^$NNqPNNq[WYU^NNq0XM8^NNq,[WUAޤNNq,[WUANNq,[WUANNq,[WUANNq[WU NNq,[WUA@NNq25[WUbNNq[WUzNNq,[WUAߚNNq,[WUAߺNNq,[WUANNq,[WUANNq[WUNNq,[WUA6NNq25[WUXNNq[WUpNNq,[WUANNq,[WUANNq,[WUANNq,[WUANNq[WUNNq,[WUA8NNq25[WU\NNq[WUvNNq,[WUANNq,[WUANNq,[WUANNq,[WUANNq[WUNNq,[WUA>NNq25[WUbNNq[WU|NNq,,[WUNNq,,[WUNNq,,[WUNNq,,[WUNNq[WUNNq,,[WU,NNq255[WULNNq[WUdNNq,[WUANNq,[WUANNq,[WUANNq,[WUANNq[WUNNq,[WUA NNq25[WUBNNq[WUZNNq, [UBA~NNq, [UBANNq, [UBANNq, [UBANNq [UB NNq, [UBA.NNq25[UBTNNq [UBpNNq, [WUANNq, [WUANNq, [WUANNq, [WUANNq [WU NNq, [WUA,NNq25[WUNNNq [WUfNNq,W~NNq,WNNq,WNNq,WNNqWNNq,WNNq25WNNqW$NNq,WNNqTNNqjNNq~NNqNNq2NNqNNqNNqNNqNNqNNq,NNqBNNq2ZNNqnNNqNNqNNqNNqNNqNNqNNq2NNqNNq2NNqHNNq^NNqtNNqNNqNNq2NNq NNqNNqNNq NNq"NNq6NNqLNNq2dNNq@xNNqNNqNNqNNqNNqNNqNNq2NNq&NNq6NNq2,w[WTNNq,, f@jg5@NHNGNNq8,2D[YUJAW8NNqTN A[d$,5gNK,RA5gNK` NNqD[WYUNNq3>0NNqB DNNq2,w[WbNNq, f@jg5@NHNGNNq8,2D[WYU8NNqTNuuNNqYY"NMNNqB NNq2,w[W.NNq,, f@jg5@NHNGdNNq8,2D[YUJAW8NNqTN A[d$,5gNK,RA5gNK` NNqBy>NNq, [W9> NNq2,w[W*NNq,, f@jg5@NHNG`NNq8,2D[WYU8NNqTNuuNNq3>NNq, [W9>NNq2,[WNNq, f@jg5@NHNG.NNqHVWVV8LNNqTN A[d",5gNKRA5gNK` NNq2Z5Z A[dNKBZ[WNNq2,w[WNNq,, f@jg5@NHNGNNq2A[WYU8NNq( 2D[WYU8bNNqTNAGNNq252, A[d5gNKRTRlSlVNNq25[WRTSlVNNq,,72RTS,W NNq,25 f@jg5@NHNGRTS,WLNNq252, A[d5gNKSTSlSlVNNq25[WSTSlVNNq,,72STS,WNNq,25 f@jg5@NHNGSTS,WNNq2A2,C<,TlSF A[d$gNKRAQBlBFVNNqQ`Q`20,S@AW[WgR@J@VƑ89@NNq,,72RTS,fzNNq,25 f@jg5@NHNGRTS,fz NNq2A2,C<,TlSF A[d&)gNKSAQBlBFRNNqQ` Q`20,S@RASA5W[WgR@J@VSA89@NNq,,72STS,fzNNq,25 f@jg5@NHNGSTS,fzNNqNNq2,lU2NNq2,lULNNq^^dNNqTN A[d$,5gNK,RA5gNK` NNqRlNNqUNNqTNuuNNqSlNNqHlR5YW[6NNqHlS5YW[XNNqHltNNq" lUNNqHluNNqHluNNqHluNNqHluNNqHl"NNqHlu@NNqHl^NNqHl|NNqHlNNqHlNNqHlNNqHlNNqHlNNqHl5*NNqHl5[WYUNNNqHl5[YUJWxNNqHl5[WYUNNqHl5[YUJWNNqHl5[WQNNqHl5[WQ NNqHl5[WQ.NNqHl5[WYURNNqHllNNq[[NNq0,kSX@NNq,,NNq2,MNNq2,GNNqR,YW[ NNqS,YW[$NNq^8NNqlNNNqldNNqlzNNqlNNqlNNqlNNqlNNqlNNqlNNqBNNql(NNq,NNqlU TNNqlU jNNqTN NNqTN9C A[d"5gNK,RA5gNK`  NNqRC NNqKU NNqTNu u6, NNqSC 0NNqHCR5YW[ PNNqHCS5YW[ pNNqHC NNq" AU NNqHCu NNqHCu NNqHCu NNqHCu NNqHC ,NNqHCu HNNqHC dNNqHC NNqHC NNqHC NNqHC NNqHC NNqHC NNqHC5 "NNqHC5[WYU FNNqHC5[YUJW nNNqHC5[WYU NNqHC5[YUJW NNqHC5[WQ NNqHC5[WQ NNqHC5[WQNNqHC5[WYUk(aly La`y L y LmByLRy>Ns AXd:HA@k2AAOl20 yLCA.@H23pPLNsL5NsL5NsH AXdXA@kAAOl40 yLC Al40r5 AM0v ANAK203p0PLNsAXAAl40E AOl|@B20 yLCrAM0v ANAp*H3p3pPp*H3p3pp*H3p@3pp*H3p3p0p*H3p3pp*H3p 3ppp*H3p3pp*H3p`3pLNs AXdHA@kAAOl20 yLCA.@H 0LNsH AXdXA@kPAAOl40 yLC Al40r5 AM0v ANAK 00LNsAXAAl40E AOl|@B20 yLCrAM0t ANAp*H 0p*H 0p*H 0@p*H 0p*H 0p*H 0 p*H 0p*H 0`LNsByLay L y LfNuHAL09L(p,p&pENCM,< JyLgxA.J9>fr1ApH89pNp+H9p9pp+H9p>9pp+H9p9p.p+H9p~9pp+H9p9pnp+H9p9pp+H9p^9pQLLNuxA.*HJ9>fr1At1 K(pvHK 0&58pv++HK 0&58pv++HK 0&58@Apv++HK 0&58pv++HK 0&58pv++HK 0&58 !pv++HK 0&58pv++HK 0&58`aIQLNu0<A"yL"QAOj bgfa*B9>0*NHan`JyLfC>0RQQ@01AA"yL2<p4HB4F""QA(Q`#rAvH$yOfN8gAvL yrNsCgg)Nu g) Nua g dt$yO^Oj bg Rg ag^ @gv?BJACBgp00 g,0 2*A`p00 g0 2*A`4 g)NuJ9>fF9>F9Ka a`J9>fF'By>By>AN`.y>3>A= <2fA(/?<NsJ9>fxP>` J9>ffF'AvL o"yOHmJ"yOLl@#/3/#/AN`.y>a J9>gHyJ`Hy.?<NsB9>AvL yrNsnE#Of`E#Ofa An@ f^B<ggggg yO^A`JfA gA fa(NsAfaNs N0 @f /| Ns @f /|!Ns @f /|!Ns @yf /|"VNs @sf /|"Ns @ f /|$Ns @ ]f/|$NNsJf< l$)O$.H09>kaBy>3>aa l$)O$.HAN l$)O$.HJy>kB9>g@azaRBy>aHyl/<?9>?<?a NAa B9lJkBy>>`~a" l$)O$.H @gM(NMN0l @Cg.,<Bt09>g l$)O$.Ha0aBa`$|~B`|~a`,<BBB`|Bt09>gx-\NH09> l$)O$.Haava-\H@8HNH`,<.<aR`,<BBB`29>j0<0 yL?<HyL\?<=a NAa zPJ@k3>NuX`p Ff.м Bg?9>/?<Ba LNAa : JkNuЇAlCNup0A Ff*Hh/?9>?<?a NAa Jk~`Q GfQNup0A Ff*Hh/?9>?<@aNAa Jk4`A QPl GfNu09>k??<>axNAafX3>NuBg?9>B?<BaTNAaB Jk.J9lg&Hyl/<?9>?<@a"NAa NuC>C fBNu l$)O$.HH@ /<NMXPQJ@g/<NMXPL` l$)O$.HH` yO^(gV/<NMXJ@gp/?/<NM\ yO^(g(/<NMXJ@gp/?/<NM\L`DaL l$)O$.HM NaaHANB@<<?:<?"yL 0| Q0|QJyLfzANBB?? g<<e(E(E(EQA02RfR f`|ANCKBBB EDg 1@1@1P1P><H<d8:TTUUL9L8<6<?4<??JGfr0R@0^@Q` r0T@Q0|Q0|Q0|(QAl0vt* \*H"[ CgD8<4E(<<20*@ @fM iNf۩M#NQQQNu/ BAa "_Hy'8<<<4E( B f 0H|5@20*@ @f iNf ۩M#NQRAQNu yO^0<"< Q yO^B(Nu/?<NN?<%NNONuHy(r?<&NN\NuA(#/!Nu!/ OC>Jg .Q/(?BNs"\O/(?A@C&0<2QNs0 _O/?NsaaA/aPA&aTadNGapa/9Ob?<INA\BgNAAApaB`AB"pa4`A)d`A)ZH`/?<&NN\LNu/Nu/8NuH` /<K?<?<NNP hBP LNuH` /<K?<?<NNPLNuF'AX#p/!p# /A,! #/A,!J9>f    A=#4/!4A,b#/!A>P#/!A9#/!A(#/!A 6#/!aA+#/!A9#/!A   #T/BxTA#/!3D/BxDNuF'Ar0<!Xf!/!/!/!/!/!/!/1/T!/1/D!/  !/4A   NuF' !/4NuF' A=!4NuHHy+` HHy+?<&NN\LNuAE~J9>g AE:JyLfH#/!NuJ9Kg?0Ns0#rAvH#/3/#/apAN`Hy.?<Ns#//` #//#ղAնH#/a,AN`Hy.?<NsAնL yղ/9/?<#NsHy-?<&NNa yO^N`AնL~ yղ/y/>>/BB/9/NuCAJfCAAJfaa AAAASa AS|Z|V|CJf-Jf|-Jf|-Jf|-A ><9C0a >A GfIQAA;"N0S@a A,y/Ɲ0a A09>1+J9>f-A mH@@f )a ` ?|?AA0<M&K&:, <4ABBA>"0<NB09&NuABwa @g @g"Hy,?<&NNaNIa`ABav @f? @gafa&AնL~ yղ.yO^/9/D/NuC#OfHy)?<&NN\NuHy+?<&NN\Nu l$)O$.HRlSl, g aa`Pa p0,A/ C90<  gQB"_aaf` l$)O$.H, g aa l$)O$.HJ99WANa+H @?f^+H+ @qfNp0,@9A g/ C90<  gQB"_aJ99fa``z yO^(gPpAKJgD9>R9>ΰfB9>/  yLACAL0< QA"_`t9ALHaaNAaX39NuJy9kVp0, @[dByL3NqXHu0,/?99?<?aNAa yNsXg 3NsXa2J[9NuJy9k,p0,Hu0,/?99?<@abNAaP J[9NuA@CL ) fB)NuB99B99 aA@0<? Q?</NAT*@BgHy?Q?<=NAP?<NAR@><@@HyL?<;NA>G/|@NA oP0<><\Jg < JgQAGKIL,yLA@g 99 C?^C0< Qa?<Hy??<NNAPJf`?<ONATJfACKfBgHyK?<=NAPJ@k??<>/ /<??<?NA ,NAX fB<d -B, I, fAB3(<grR3(4C(a80< Q`TaafBKP9 99K4MBBByKa` 3Kaaa\J@gk`aPaaNuA@<R  fJg.| `A@<R  f #lAA@ ajaaa"B<g<!m<zoHA<<Pg:<HfJyKgaSyK0<Nu4<-j B-a`0-|o0<S@yKga:RyK0<NuBB--m-ah`4?<?<NMXNuJfNup-yKIaN`A@BR  f< AA@`FJf A?`8p-yKIaapa`paTp-I~g-|o><SGaZQNuH$IBA4RASAg"0< Hm nQL` LC`JAgA PgS`LNuaa6< BDaZQa,Ha a,J99fga&` H,aaxINu?<?<NAXNuA?`09K<"?A?`A?H6<&HB@g g g???<NM\`LNu6<`6<`A?`A@`A?`A?`A?`A?`A?`aH@4Ja a0 9oNu6/ /<??<@NA4<(N$Kpg/@/LNA4Q NAXaNuBgHy?F?<=NAPJ@k??<>t?<?B?<BNAJk mBoNAO JkH/ /<?/ ?<?NA f*(N$Kpg/@/LNAf 4QBBO NAX0Nug J99g NsJ99fNsF'!F99NqNqNqNqNqNqNqNq!NsHJyLg|AKBH"0$0 yL0<6< !BLQAPQ0< !A!AH!AL!BP!BT!B!BAQ0<6< !BLQAPQLNsVHHAVHVHHBVH yL0<6< QQ0< !B!A!B !A!B!A!BAQ0<6< QQLNs yOZ"HA@0<29>B)Q`ߐ"yOZ< AfAX&2g yOP1yOTB9>NuC?A&$ "g @1``*OO*m - ЭЭм// ?<?<JNA Jf/< !?<HNA\Jkg#Ob#OZ"Ҽ@#Lм#O^м#Lм AO0#OH2< Q#OL?<NNT @g3LAX&| 3|2|%}A& 4Vxg,|u|v?aBgHyL?<GNA/|L\NAPALJf|\C?f?<HyL?<;NA>GNAPAL\JfS\:MD#LB(aA/PaNGaJaavaaaIF*yOZa LtBQ ,M&M$yO0.yO^BBBBBBBB5|NJ9>gRH o "yOHm<"yOLl2Ry> XNqf hfA3OT#OPF'0JP>LNs o0OTB9>AJy>k@gp0, <MM`M80By>X>A/HNs(&H& &&&&&&&&&&#*רH!r/jINHALT.INFXXXXXXXX.XXXProgramm Zahlen ArrayString ArrayCode PROGRAMM*.* -----Y pqfEpY,* Moment bitte... qpY,* Keine Eintrge ! qY,* Y! EfHwp A: Name Lnge Start Y8 RETURN:Laden F1:Lese .INF F2:Rescan (nach Pfadeinstellung) ESC:Abbruch Y! qY e | PC:0000 SP:0000 IM1+ 00| 00 SZVC HL:0000 DE:0000| BC:0000 IX:0000 IY:0000| HL'0000 DE'0000 BC'0000] [1][ * NICHT GENUG SPEICHER * | | Der Emulator bentigt ca. | 800 kB freien Speicher. ][DESKTOP][1][ Der Emulator luft in der | niedrigen oder der hohen | ST-Auflsung. ][DESKTOP][1][ *** EMULATIONSFEHLER *** [DESKTOP|DEBUGGER|ZX-RESET][1][ *** EMULATOR-INTERRUPT *** [DESKTOP|ZX-RESET|CONTINUE][1][ *** A C H T U N G ! *** | | ZX-ROM defekt auf/ab $0000 ][CONTINUE|ZX-RESET]UUUUUUUUUUUUUUUUUUUUUUUUUUUUpfpfWUWuwuw,v^* 2@V  "  """"""$"""""$   "$$$$ $&  "6&N4$$6&N6$$4J26 "4&&4$&8"*@8"*@FF,BHH,BN$""$*$*"$"$&$"""N( $("( " ""&$  **((((,(""""""""""""""""  B $  . "   4  &  D,N         \L (   @JL $( J.  \.V x|   6T6$lV   (   .     (   6           p6 > H<  "P    ,  (  (\ > D8 B` & ^ 4N 0 ,   ,>`5;>AON ~E. +@BEF +@FEKp A @g @g$m,0H$m RaTgJf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNu`HQ?< NA\Nu"_KLMMfIhO:HQ <-H*,`N,^pCR2Ad0A2r22a\"< 0<NBLNurt=@:=A@=B NuHz(` N Hz ?<&NN\Nu9gNuWNu|^|  R^,T:&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaaa O: n*NNuNuNuNuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNuHPHQ0(ika $I _aIUd4Id4Id$Id `$$$$Q _Jf,aId4Id4Id$Id `$$$$Q @NuSaIdIdId`Q @Nup `r/ aj$I> _a`G` VNuag`af`ae `ac` acpNuadpNu/ a&$I> _a4Ae4v` VfANuH HPhkJa $I _aIUd4Id4Id$Id `$$$$Q @JgSL`QNup `aAf` VNuag`af`ae `ac` acpNuadpNuaj4@m4v` Vf@NupM` pO`p`po`~*@-AH|`rAD-@f-H `r6 @`Bp'rtat n2rt6(SC0(S@apaB\papava0pa|p|8>|x>~POP____ ?*>TOPTW_}}W/~(|+'P|T}S/(< =@WQP}US<>~ʟ(y P=WQP<}UOTT;﯏8|(>P?_C@x}Q_@>*?>Ux??>ʀ?>* >Px~_\GP>?x?<>. ?|_|O}P>^~}<q>/ʟx__}P>|_PⰧ达* >(𯊇U@@UATU~P?PUOUP €**<(?*W@PP|P@UO@ *PU**@ ??0 0 0 0 008>?| p  >p|80000 0 0 0 ????000p08?8?llll??0000`00???   0 03?3|6`6`6`6`6`6`6`6`6`6`770 0 0 0 ??>>666666666770 0 0 0 7766666666688>?`7`1`00`0p0<83?8cfflllllllllnngws39<080`?>|>|6l6l6l6l6l6l6l6l6l6l6l6l6l6l6l6l6l770 0 0 0 ??003`3`6`6`6`6`6`6`6`6`6`770 0 0 0 ??? p80800?c7gaf`l`l ll ll ll ln ngwၘs18080 `8<<l>?7 1 08|80<>``0 08xx0p><017>80| 0?|?|3l1l0l0xl0<l7l7l7ǀl7l6l6xl6,Z~s؝_+˅???>???ꪯwwwwwwwwww7Wwwwwꊯܝ+***swwgwwwWwtwwpw3w*_ ]+wwwwwwwwwwwwwwwꪯ??PwP]**꪿PBwswpwwwww*ꀿPEݝ**ꪯPwwcwTwwAwwWwww0*ꊫ誫誯p pꊫꪫ誯?wwwwwwwww?ꪫxꁨWwWx] W }\wpwtwww+***w\ ݍݝ調**|gtgw@wwwW7swsgsww+肯*ꢫ }|?]? Wwwwwwww77wvwgwgz꪿*Wu] ]wwwwwwwwxW*}_wkw_ww}?U?wwv75www~_u] *꪿]pw'w4wwꪯ"ꪯwŝ]+꪿ꢪ *+]_www'wwWS7twwwꊫ* 7V_ݝ]݀_߿(誫 ꊠ*_wwwwwwtwwwtwwꪪꨯꮪȢ?wwwwvtcG`v?_wwwwwwꪪ__ꂪW} ?] Wu;}*wk ;W?w_;_?? ? n?n@)K ,0 ,0`,0$,0Jijk,  ;,$5, , - ,- ,-& , -4 , )  -B   - -^+ -z - - - -(.$ (c) 1990/91 by Christian GandlerPaletzgasse 17/3/14, 1160 WienF1=EDITF10=BREAKF6=Reset^F6=DesktopZX Spectrum EmulatorV1.2ZX Spectrum Betriebssystems.PUBLIC DOMAIN mit Ausnahme des<<<<????<==<==?=?=?=?===?=?=?=?=Edefnopz{ |   "$   , H B  d    "SPECCI.DAT[1][Der Emulator braucht die|monochrome oder niedrige|ST-Auflsung.][Abbruch]SPECCI.RSC[1][Resourcefile |nicht gefunden][Abbruch][1][Fehler bei rsrc_gaddr()][Abbruch][1][Datei nicht|gefunden!][Abbruch]  80  V@ *~ f((@4`6 N3Z??q??tcAC]A]?ou_w]}ww}t_]]wt?wAd5wC 5_þUAp?ouw]uwwW}u߾I]w?A]wwYwu]pCcCt݌?wcC7cAuuuwww?uw}_?ut?www?C0w~?C=uuٯw?Wuw_C]|?ل?Yuc?DEODEODDODDODDODEODDODDDDODDDDODDDDO`````a aa aa`DEODEODDODD ODDODEODDODD ODDDDODDDDO````aaa aa``````DEODEOdDD ODDOdDDOdDEODDOdDD ODDDDOdDDDDO  DDEODEODDODDDODDDODDEODDDODDD ODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO"   DDDCODDDnDODDDEODDDGODDDBODDDFODDDFODDDFODDDCODDDDDO, 1DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO]]toctCcc _5]|u]uu]twCT?C _v0]t?0] Pw_e_}w]wݝ]wcta0cYt0]ewcwccwA]c c77Mwuuu_~wWݏWw??t?wggww____u~wwcw]d?]d?c 0``DDDDO4DDDDODDDDODDDDODDDDOdDDDDOdDDDDODDDDODDDDODDDDO`0`````a1aa"a<>aa`0 ```` dFDDOFDDOADDOFDDOADDOODOdHDDOODDOdD@DOdDIDO` ``aa&a````DDDDOtDDDDODDDDOdDDDDODDDDODDDDOdDDDDODDDDOdDDDDODDDDO00a1DDDDODDDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOs">/">"/K$OO<"/*ODBODMDOdDGDODODOD@DODDDDDMUw `"`"```r!aa"!aaU```````~f~~dDDDDOdDDDDODDDDODDDDDOdDDDDOdDDDDOdDDDDOdDDDDODDDDO~f~~MUw``0`v`aa1`v`W|~|DDDDODDDDODDDDODDDDDODDDDODDDDODDDDODDDDDODDDDO|~|MWw`n``n`]`f`DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDO~f~MWw~f~z/s{>} """" "("  DJDODG>ODHDODO"DODI"$OIr/ODD"$ODDpODD< DODDDDDMw R""  ("  "#!!DDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDMwDDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOw*5_wjcca ]?DU]u]u_w A? 0Տw?w]ݿ__]wcfA݄?d]wݟEU]UEUWw UU5_w*]7AwݴaDU]wwsww7ͭWwjuw=W՜:Uw_vwwg٭]]_f7wa=wݴD]U```0DCDDODDDDOdDDDDODDDDOdDDDDODDDDOdDDDDO4DDDDODDDDDODDDDDDDDO`````pgfaaaaq|Qffg ``QADFfcDDOD@DODDDODCDOdDFDODGDOD@DOD@DOOE$ODGyDDO` `EQ TAaa1)W!}Qff```0Q DFff@dDDODDDDOdDDDDOdDDDDODDDDOdDDDDOdDDDDO4DDDDO~ ?g????g03?30DFaDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDOC9OD83330DDOa330>!yϼ??0>" ("Ȁ(" PQ>?00D@aDODH"DODHDH"ODHpDOO"/O9ODC0330DDOfa"*"(( P"(0330fa)Ϧ"{ϟ?03??g>13?DGgEDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDODDDDDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDODDDDDDDDOWw ?ݷ oÎA?tU]_}ͯ]uu]w]}u_ ?՟ 00ݐw] ?t05_w_}ٯ}wWwk}٭*ݷ|t7َwCDU]jw|?D]?Ul7GUWw MUU_w*]\"_\C*]\~}t[3*a\Þ*x\#"x\| 4@Ϳnu{=\*\| E*]\#"]\~! ?#8#7"]\ɿRNINKEYPFPOINSCREENATTATAVALCODVALESICOTAASACATLEXINSQSGABPEEIUSSTRCHRNOBIOAN<>/`:Ψҩ./x/(g}<0S_ -8z<({ZW͎!\~ #5+ 6}!\ !\(.!\('~ ~_w#6#: \w#NV3w2\#6#5: \w#~B{' x!~7{:8/ O(O!(!~!)@(Z( 0^ ƥ0  !Th(80 6!09(0(ƀh!0 "( >_>@}==/O! :H\8 ?DOg z( yMM 1'4l8!\~ ^#N#Fx T# Px<%l 0 !n4ʹ38w18͔ 0"4CU45q8͙͙PYzõ  `uA$Sʉ.68I>CjsOT\i$v$:;\+bk !?!(! +>G- %/> 7;oz( n|g>7%lyx0B> <#1>z<;:H\8>8 >!? O0!+| 00>Ƹ0$ 0x0yO& 0uyO~#.>˸|gz |>= >Щ (y/O7:t\2t\͌0%(<:t\(" > 6+! 0:t\ x(  # I:t\ʊͲ(0 !:t\=(Š0%(#~w #~w #q>q(6R~ݾ 0 ! ~< yO#  y > ~( :t\=ʶnf^ V |( R8&(~ | n f:t\7 >V^ V |  nf7R8 DM~(>|(+F+N+"_\*_\*Y\+N F ~U#w#s#r#7>*Y\+"_\N F U*_\#NF "K\f| n "B\6 7>N F 67>[S\~ # +0͸, ~O*K\~(%(͸ # 0><7,  "_\͸*_\͸"_\*S\8+U#U#SS\[_\> 2v^ V >Start tape, then press any key Program: Number array: Character array: Bytes: 8i0e! _^ NW)TSR7PO_^]\[ZTS >" N > ! :\6W> e 2\N!U   y==Z>?l 2\ m  2\*Q\s#r ̀ *\W}" )DJ>8 ON >ڟ ;  $ N F C\"\C\C\"\qE"\N K\*\FK\*\NE*\8=0&G8  \G!\> Ow# ֥0 K{\   K6\!;\ˆ &o))) y=>! ON(yU :\8O>N(078#= %N #> _|Xg[\~Wv(W 8Wf(o w&A 8 > F; ; 0H(z> <~#(= AN xF 18f(^-(Z>{?\5R E>2\*\:\> !;\ˮ (E(A n(;>2\"\ F1!͛|XgZN q#ɀscroll 81DG*\*\M x!k\Fx*Q\ s#r#?8!*!"}\0͔ >M D*Q\ s#r6R!![N xF(1G͛>!_ ͛xx ! =!GOx $ ͈!͛xOx T]6=G $ ͈bk:\F(:H\w !|=Pgah)))))DM>Woz@g!@$| } o?g ![>![uFGw#0! xWT8 > 0 ^#0z *=\!s=\^!͵!8018-8:W8 7~_*[\U#p#q *[\RS[\_!^*[\ fjPp~*I\7n—n͕zʗ#N#F! DM͗*Q\>+5U4*Y\####"[\7n !I\m61~ #"[\1"=\~7͕R#DMbk# # #B 87n*I\n͕!J\͕>7~(Á0f(6^!͵0͐+"[\6^n:\nn 0R0-0 GOx* !j\>w !A\w 6޿GO>X  ^!͵6[\"=\ "\6&*a\+[Y\7n[a\*c\~~# >[\K\[8\*{\G>>?Gbk6+ R#05(5(+C\S8\"{\("\>#"{\+@C8\"\!<"6\*\6>+++"=\V!:\!\"O\+"W\#"S\"K\6#"Y\6 #6#"a\"c\"e\>82\2\2H\!#" \55!\61k 8 61͕Ͱ>,~ 0f(@*Y\ͧ6*Y\"]\x] (0Fį n >O2\66 ͊v0N::\ x 6 KE\>:N ͗::\<( ( 4 p\!D\~( 6 ìONEXT without FOVariable not founSubscript wronOut of memorOut of screeNumber too biRETURN without GOSUEnd of filSTOP statemenInvalid argumenInteger out of rangNonsense in BASIBREAK - CONT repeatOut of DATInvalid file namNo room for linSTOP in INPUFOR without NEXInvalid I/O devicInvalid colouBREAK into prograRAMTOP no gooStatement losInvalid streaFN without DEParameter erroTape loading erro, 1982 Sinclair Research Lt>CI\*]\!U*a\7R`in ͸y=((+[S\U"S\*a\++*I\p+q+s+râ K SR P n (*Q\##0*Q\^#V,ɇo&\^#Vz *O\"Q\0####N!-^KSP0M d*e\!K\>^#VR0 r+s##= RDM~ V#^*c\+U##Ca\#*Y\6 "[\#6#"a\*a\"c\*c\"e\!\"h\[Y\#~ȹ# 78 N#Fq#p*O\ ###N!N KSP͔8!\O N#F+8x(*O\ ###~K(S(P ]s#r+x O!z0N KSP  x Ws?\6ͯ F1D0*I\[l\R8"nRn͸ 8V#^+Sl\"l\*l\n(3>>60%p 8;(, ͙͂x?gi"I\nUf(:k\O !l\KI\̀>(s-~@(###z(0!;\˖7n(*_\R >?~Ͷ# (7######~*\˼"\!\V6 tW"\*[\R:A\(C!;\˞>KV( <0^(>C^#V#n͕7nr+s{ <8B=(-00!8,($: 7n 0V(" :j\2j\*S\T]̀͸~#~+###"]\ #~Ͷ"]\"  :( A( 7~@8o(?0#~0##N#F# ѧRDMx/Gy/Od*Y\+"]\!\"e\;-͢-8! ڊx `iV#^ ***}ɱ˼į.lnpHV?A+7wDY+C-Q:mB I\D]=g#= ,O_k ":'B #   #z"`, 6  ,  2G\=2:\Ϳ4  (z:(!vOyڊO!H N *t\~#"t\RO 0 ! N ߹ŠT8 ~ q*B\|(!"E\*a\+[Y\:D\3n:D\( CG~x(0%*U\>V#^SE\#^#V#"U\"]\W6 r (͋(0% (:(ÊK g {q*t\N#FͲ(6707 ̖)v 0%+!q\wCr\"M\V:;\$V@ $z*Ͳ(y< ͂, $v $v~M :t\!*\"\!\~檮w0%(M !\~wW! (: 0%80%( 84ڳ) ͂88*"h\+~ 8 U#8 *E\s#rV #rF8*E\"B\:G\DW*]\KU\͆CU\8 (>2D\~:(#~7F#NCB\#N#F DM͋7N.*M\~(#"h\8*h\^#V#fs678870%()"_\*W\~,( ͆0 wV"W\*_\6&x,(0% $,>GË͙`in+"W\͙x Kx\Cv\*n\V6 ͙`i|0,"B\r ͅyͅ-8(D͙-͢-8 gE͙x K\[K\*Y\+k *e\2R0*\R0"\6>+s=\f $3KE\s=\g*e\ 8 !P8r.UDMz>( ;s=\s͙v x( x< n(>>0%(>9͍,0$ ( <)( ͍,Ҋ$ U##6, ) = :;\$@Š0%>>0%M E ( N (N ()> y#> ͙͂>yx!p $v+-x ) :;(, 0%( >'E #7͔͂0%(>n 6 K\:k\8!GC\>2\ n N (( )Šò! 7vŠ ͍,ү!70%ʲ!Ϳ!q\˶~ :;\@ w6 y0>"+w"[\7~ ,*]\*=\!:!0f(s=\*a\ͧ6,͹!,6"! K\ !q\ˮ~˾ "=\"_\͹!*_\6&"]\*c\[a\7RDMͲ**N *a\"]\( :q\Y 0%*Q\####~K!,(;(Ê?͔͂Wz((Vz Oz0y!\8z88Oz 8!\8 ~(/$(xOyl">l"PG>w#xɟz @Oz(0y!\l"y͔0o 2H\>$G7gyǨoy#ͪ"G~(-#"M C}\ͪ"G>G~NWA Q /w #G#YQO-$,Š͂*=8~08868}$18~08"1184b͔o͔g"}\ $,(w$͂Ţ1008w$1***=8~08w$}$111 **8w$8:}\(-8:~\(-8(<1818:}\(-8:~\(-8ͷ$8:}\(-8:~\(-8ͷ$M 1(42*8-80>(-11118#y0iկ_hA`x88OO*}\xGy<8 ( =O"y( O!%y҄&N t ʊ" t"( y)Š~#*6\y_y@W`(< =O# > Hò*#yOoyXg~(-"(O.+VW檿ǩ$#% %(0%(~#" ~#"( !;\˶~IJ*'$)Š'ý'0%((Kv\+-474A218͢-Cv\~(w 0%(84&Z# '!;\˶~(͎ 0_3Ͳ*'"%5%%"%Ā%H"%"?͈,0VA0<0% #͛,U#6#*e\B"e\+w#~ #ʹ3"]\Ͳ(.̖):;\8#ʹ33 -('( ֯ڊ(ҊO0˱8˹$( v R*O!'0N!& Fz8:!;\{ v 0%( {?G;8 {@Š!;\{ ˶yv ?O 8($+-*/^=>< 0% 5͍,Ҋ$ ( )($, )Š!;\˶('G$O *S\+͆0ͫ(߸ ͫ($( +͋ק̫(S]\ͫ()(B#~@(+ͫ(##$@ +*e\B"e\+ͫ()( , ͫ()("]\* \" \$"]\" \'#~!8͍,ҊO((($(͈,0͈,0˱: \(0%Q)A0% yO7*K\~(- "?)80# ( ( ͈,0͸((  ͈,0p* \~)(~`G#~(+ͫ(#˨x(#####ͫ()(ͫ(i #[e\3"e\ѯ<ɯGy K~ <#N#F#Ͳ*I*###Fq( (( a$,( y(Rq ) <)(l 2+"]\^!y )(Q(**8 * y fq BK)(* ** #BKͱ*)(, R*((0%+)(Pկ(*PY( )Šbk)( *`i) +R8# *DM0%ȯͩ3*e\w#s#r#q#p#"e\ɯ͂0%(͙x7(Bz#^#V0%ͩ0*M\7N(^#~ (0 80 #͈,8$+y*Y\+U##*M\G(#~!8 >*M\ +8B@v(*M\Kr\7F 0xT]#6 +B 0DMx(x+++~+>*M\+ +"M\*Y\+U*M\#p+q+w*Y\+*e\+F+N+V+^+~"e\Ͳ(Š0% ˱͖)8͸!q .&* *$`i*,() yh&##)DM*Y\+U#w #q#px#wbk6q(6 p+q+= -?A?[a?{ 1 ?jڭ1BK+-.(;-. (-8" -ڊ88"-8 8E(e+(- -8;--ڭ11(DO-0:?-0O!:\_QHGͶ*88"-8t0/0*8>-81'8~ G-z ( SW8~~-W:\2\zO-1'8-2\=oA8ͺ/>./~q8 {͋/_z͋/W!\yNq w4q!\Nq A+~w( ?064rpq8K\!\x 88&R/G y(~# y>.>0APJ/>EJy/DO>->+o&]T)))YL}~6#~+ AO7+~/wyN#Fw#yN#N#FW^#V#^#V#^ɧ!0G-0ٯ.W] n4 &##^#V###~#N#F  w#s#r++++͓2͛/G͛/O0xAͺ//whaJ|o0>/4(#}#w+({D?_z/W{/_z/04ʭ1WٯU1|M!)8 084#+ "-A-xOͩ08 z O͎-͓2008Zͺ/xbb!0Zx =??F10h< 8z \wx0~>(٢/w8.#w+) z 5(0 0 4(#xw#q#r#s͓2080ͺ/`iah)j8RR0Z٧RR71(_QYPx=1~06> Q ###>++ >+ 6w#6+>30,/Ƒ#V#^++z( 8Z(G:͎-~֠D+G888(6+( G>'w͖2~-#w+wz B(SX)0 +s+r+p@0Iڢ@ 6<43001Q85$5;5;5;5;5;5;50-5;5;5;5;5;5;5554E6n4i65t677738C87766J84j44446553663z6546723O-2I44-44Ϳ5x2g\Se\~#3W`|oz0T] o2&^#V!e3Kf\:g\[e\3Se\ͩ3bkͩ3~O ~? #~P>#G3=OO *h\43bk!233*h\43Nq#G^31183b3584~( #x怶?w+-x/O͎-4#+O͎-͙x͙ (-͙!+-+ x #͍,8 ֐80<=0 K{\O0+- G~###x74>4#+>w#w#w#w#w474Ч4xW =0<4W 03++|x (?( 8 #+8545++ DMͲ*x(x(*e\-8 Ͳ* *]\x+S]\+6 $ @Š"]\$"]\"[\*Q\>-*[\RDMͲ*͔ҟ*Q\0 Ͳ*ÿ5+x((-++-!g\5 #^{W #1'816:81:08=48;)1'16Xefxe@`2!$/~X:~8- 80 80Dw8=178 8~6(-4814L78441r142  VڥY0\poaږ1\C6~^n#8=4"n1'111*178ɡ689*39111\ 8c# #]81 8͗2~8163111UX9[6ucB 66s]ca 811($18"810810%8610 78$$$~$$~$>(> >bd&F(*D:  >>> < >>>BB<DHpHDB@@@@@~BfZBBBBbRJFB>{2:\ |N( ~( *Y\~ʕ ҁ( ((*]\"\7n(|F(| 6 F  ~( ?*S\:F\0# :E\8#^#V#($~(#"  :( A( +"]\ 2 ~+#~ [\R0 B"\~ ׿M ʆʴ=1*/!ʔʞʨ-Y/*\*\"]\*O\I85!$*c\"e\!\"h\!\:U!:\>2\|!"\ !\"6#6|v͹0N(~wk  #² ͷ|<8!\\Nwy#,; (: {=\6!(>8>0!}6׌+ (y= -׍,0'2\ :ͱ² ׂיC\ y(! B8 C\S\ ׂה02\:\M-[\{( {( !Re:\[\{( !@Rͱ²/*\#} #Nͱ /:\TBNʏÅ * 4 ͱ /:\N | ():(%(B(V( ׂͷיC\ͷ2\*Y\[S\S\7R"\*K\R"\ ͷ!"\!@"\>2\ ( : |n ׂͱ( |n  ׂͷיC\יC\>2\|v( ײ(0!|f !6((#|n(~(#~2\#~2\#y2\>q(<2\ ) ͷS\|:\B(N ͏ͩͅ !\̀#*\|^( :\0K\y(̀ #È |^~ Z l |ï|ï|!\\:\N( B(̀ͅ%͏ͩ!\ |^( 0́ 0w#:\G:\ (8|v ]|~ʣ |v(*\[\|(R0 |f(*\~ *\|^( :\( | *\:\ *S\\ !:\ ͹K\06\ ~ ͩ |^(͹[\*\|  *\7R8 DM:\(G|(!~ *\ |^(+F+N+*Y\+K\:\U#w#s#r#\ È |[S\*Y\+K\*S\U#K\ "K\:\g |:\o"B\6 *S\[\+"W\#z~ ͩ|^( 0́ 0|~ w(#{ C\C\ C\|S!\\ ̀runK\! ^#V#|K0 B0##^#VS\2 n,Xn` 6% K*S\+ U͑!n  :\B!Z s#r#u s#r *O\+R!\:\O s#rT< o !{ ý ! ý ́ ˿!\~(6#~7>86:\[\! BK8>00 08 +| >`i++++| 0>x/7+} +}(80000bk<++++| 0!\6#x/wͩ 8֥ 8>? Z >   /O:\>/*\T]z >Ҵ (7T]z 9>A+} :H\8ͩ 6*=\^#V!R +{=\S=\ 8 (6 (ׅ |f(! ý *Q\~( ~(^=8 s~7~(:\0 ͩ 6:\w~ (ͩ *Q\G~x( ^ ͫ sw~ !\6͒:\=Ͳ wF:\!#w! #wa͓ ^{(  ͓ 4 4ͩ ~ { !\͒!\#:\( ݾ :\ݾ ~ *\^ VR(+|e5 05:\ľ:\(!_͒:\G:\#:\ľ:\w4 4͵J ͵*Q\*S\+U#͑"Q\! :\:\bk[Q\Nl *Q\~>ë _G8>08!0 ++| ~ (8>0 +| ~ (ͩ 6. -7! :\_8aT&(- >8C>#+#+>Үs#>!\w_~/7 #>!*O\~(7~M $:\ݾ nfK\*\ F( ^ V *S\+SU!:\wS͑K\x x( ~w## | *O\+ U ͑ut> w#! 7 ![O\R#nf~S[O\R#S_G*O\~(~M ~^ V  ͑*Q\!,ý F( ^ V nEfF7R8s r ~R7CN( s r 4 w~C\ͥ8(~Dݾ RF ͩA "CF ~CݶFG  >7!F  ^ V wRs r J~ d  ~wG#N qE~ wF~ wDCAFGus r 4 nf ~#7  >hx>xwF(C~2:\(ͣA (F(^D^)nfW{;;;G7Gx/wR^)K\ C\x ~ݾ ## x( ~ #{#(=_ x {w>!\"_\^#VR 0 B*_\s#r*_\##= 2_\ *O\~~M ^VR0 But^ V "S |U*O\U*O\R[\"\*\"Q\8( *\"Q\|*O\ͤ*O\R[\"\ͤ͹:\<( =*Q\"\:\M )"\CVN ͩ"\T(B( S\:\<:\M *\ͩN*\"Q\\!\Nq#:\ *\"\)F ͩ C~R!\ q ! K\ <$8{0*\K\x("~   R4 4 C :\=(2\C>w *\"\)F(CV R\ "\^SVT!<$|2\ nEfFRuEtF[[\l~D(=W*\R  ~wH:\=2\ -"\nf^q#Vq#*\"\nfr+s+*\NEFF:\  # x ~C\ͥ8( RF [\ͬS\[\ͬS\7R*e\R #?|'y*O\+ *O\7R"Q\####~^#VB(T |N (> Z !N |N M |Nʩ!\^#V+"_\ŧR0 B*_\s#r*_\##<86&|*O\~ >~  ^ V  **!+| ! +| D O z>g>g>{g>gz> :\>zC= >ͩ CJ ( > y= >>>6 x R DM!! _0 Z x Sz"_Zy(w#x(w#y(w#x(w{R~Uw# x 86#_!^#V!*\ Z )n K)$1 v׿n(:\>!\6>CN(64 wCV:\0  é 7é !"\~)ݾ ( CͩA F CV7!"\!"\7 AF~)ݾ (  >hx>xwRT]:\!\_)F( F CV(s#r~C\ͥ8 (~D RF(} CC~*2 >C\,! wG(CCR>w#w#!CAF(/q)(Ar7x?>~C\(CͩA F  >d u:\~C\S ~CݶF i~G(cR N y(6 ~ݾG ##(90 !`i DM+  ~Gw##~ fRF x(P8{?(-> f-> fnf ~#8  ~f#> fM ~ Rw>w C\(WS 1~CݶF "G  xwCN(~D(#>h7x>x/wR ~ #ɯwCwEwFCACͣACFnXn ͐ 80͇ͩ> ͩ*Q\>"Q\ ~͞#> ͩ D T j  * > N d z &6HZnNl$4r0>b.< J\n  2BT fx *:JZj z &Jn6FVfv 4Nd8^v:Xv.DZn&>Xn4Ld|&<fz(Rv6`  8 d !! !>!h!!!!!" " "J"X"n""""##D#|#####$$D$R$h"""""# #(#F#Z#v#####$$0$N$l$$$$%%%4%R%p%%%%%&&0&J&d&z&&&&&''4'L'h'''''((6(V(x(((()))4)R)f)z))))))***,*@*T*f*z******+++.+@+T+h+|++++++,,,.,@,T,j,|,,,,,,---.-B-V-j-|------...".6.F.X.j.|......./ //,/>/R/b/t///////000&080H0Z0n0~00000001 1101B1T1d1v1111111222(2:2L2^2p2222222233 343D3V3h3z3333333444*4<4P4`4r4444444555$565F5X5l5|55555556 66.6@6R6b6t6666666775&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&525L5~5566 646D6^665&65&6677D7f5&5&77778&8F5&5&8f8z88885&5&5&9:9h9995&5&5&9:5&:*:L5&5&5&5&:n:::5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&:;,;J;p5&5&5&5&;;;<$5&5&5&5&<`<<= 5&5&5&5&=J===5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&<8<8<8<8<8<8<8<8<8=\<8<8=t<8<8<8<8<8<8<8<8<8<8@B=<8<8<8<8<8@B=<8<8<8<8<8@B=<8<8<8<8<8@B=<8AAA&A8<8AJ=A\BBCCAl<8> C$>$>>>X>r>><8><8<8<8<8A~C4><8<8<8<8<8ACD><8<8<8<8<8AC\?<8<8<8<8<8ACz?4<8<8<8<8<8AC?T<8<8<8<8<8AC?z<8<8<8<8<8BC?<8<8<8<8<8B*C?<8<8<8<8<8B@C?<8<8<8<8<8<8<8<8<8<8<8<8?<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8@ <8@ <8@B<8<8<8@V<8<8<8<8<8<8<8<8<8<8<8<8<8<8<8@j<8<8<8<8<8<8B B B B B B B B B BB B B B B B B B B B B B B B B B*B B B B B B B BGGGGGGGIRGGGGGGGIfGGGGGGGIxGGGGGGGIGGGGGGGIGGGGGGGIGGGGGGGIGGGGGGGJGGGGGGGJ,GGGGGGGJJGGGGGGGJhGGGGGGGJGGGGGGGJGGGGGGGJGGGGGGGJGGGGGGGJGGGGGGGKGGGGGGGK:G^ RNЯNq^^^ RNЯNq2,|[d5gNK^ RNЯNqRl^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNqU^ RNЯNq, A ,A,A,lA,lA,l A ,!A!,l"A",#A#^ RNЯNq2,TU^ RNЯNq2,5^ RNЯNqSl^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNqU^ RNЯNqS,gH^ RNЯNq^^^ RNЯNq2,|[d5gNK^ RNЯNqRl^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNqDU^ RNЯNqH^ RNЯNq2,TU^ RNЯNq2,5^ RNЯNqSl^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNqDU^ RNЯNqJfH^ RNЯNq^^ RNЯNqTN A[d",5gNKRA5gNK` ^ RNЯNqRT^ RNЯNqRTNJ^ RNЯNqRYW[^ RNЯNqSYW[^ RNЯNq^ RNЯNqBB  dJ96g d< d  e dJg96Dd`P[WB96^ RNЯNqJgH^ RNЯNqU^ RNЯNqTNu^ RNЯNqTNuNJ^ RNЯNqST^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNqF^ RNЯNqNJF^ RNЯNqJfH^ RNЯNqTNG^ RNЯNqTN|[d5gNK^ RNЯNqRK^ RNЯNq2R5YW[ A[d5NK^ RNЯNq2S5YW[ A[d5NK^ RNЯNq2 A[d5gNK^ RNЯNq~^ RNЯNqJgH^ RNЯNq" TU^ RNЯNqTN5^ RNЯNqSK^ RNЯNqRYW[^ RNЯNqSYW[^ RNЯNq^ RNЯNqF^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqT^ RNЯNql^ RNЯNq2u^ RNЯNqB^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqT^ RNЯNql^ RNЯNq2u^ RNЯNqB^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqT^ RNЯNql^ RNЯNq2u^ RNЯNqB^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqT^ RNЯNql^ RNЯNq2u^ RNЯNqB^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqT^ RNЯNq2u^ RNЯNqB^ RNЯNq2, A[d5gNK^ RNЯNq2, A[d5gNK^ RNЯNq2, A[d5gNK^ RNЯNq2, A[d5gNK^ RNЯNq2 A[d5gNK^ RNЯNq2 A[d5gNK^ RNЯNq296y6g^ RNЯNq2 A[d5gNK^ RNЯNq,^ RNЯNq,^ RNЯNq,^ RNЯNq,^ RNЯNq^ RNЯNq,^ RNЯNq25^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq[WYU^ RNЯNq,[WYU^ RNЯNq25[WYU^ RNЯNq[WYU^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq[WYUJW^ RNЯNq,[YUJW^ RNЯNq25[YUJW^ RNЯNqDV6[YUW^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq[WYU^ RNЯNq,[WYU^ RNЯNq25[WYU^ RNЯNqBQzQQ^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq,[YUJW^ RNЯNq[YUJW^ RNЯNq,[YUJW^ RNЯNq25[YUJW^ RNЯNqW^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq[WQ^ RNЯNq,[WQ^ RNЯNq25[WQ^ RNЯNqJ[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq[WQ^ RNЯNq,[WQ^ RNЯNq25[WQ^ RNЯNqBQz|Q^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq[WQ^ RNЯNq,[WQ^ RNЯNq25[WQ^ RNЯNqJ[WQ^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq,[WYU^ RNЯNq[WYU^ RNЯNq,[WYU^ RNЯNq25[WYU^ RNЯNqQzQQ^ RNЯNqJf YYM^ RNЯNq[[^ RNЯNqTNJf .M^ RNЯNqM^ RNЯNqTNJf.0MX^ RNЯNq,,^ RNЯNq[WYU^ RNЯNq0XM^ RNЯNqJg YYM^ RNЯNqYYM^ RNЯNqYY"NMNJ^ RNЯNqTNJg .M^ RNЯNq^ jNЯNqTNJg.0MX^ RNЯNqTN0MX^ RNЯNq[YUJW^ RNЯNq0XM^ RNЯNqJf YYM^ RNЯNq[[^ RNЯNqTNJf .M^ RNЯNq f @jg5@NHNGAܽg ^ RNЯNqN&TNJf.0MX^ RNЯNq,,^ RNЯNq" SA A[d,NKSA,NK`,,^ RNЯNq[WYU^ RNЯNq0XM^ RNЯNqJg YYM^ RNЯNq ()@0,9l9@^ RNЯNqTNJg .M^ RNЯNqJ fBAdg7(^ RNЯNqN' TNJg.0MX^ RNЯNq^ j NЯNq[YUJW^ RNЯNq0XM^ RNЯNqJf YYM^ RNЯNq[^ RNЯNqTNJf .M^ RNЯNq0SX@^ RNЯNqTNJf.0MX^ RNЯNq,^ RNЯNqNJ,^ RNЯNq[WQ^ RNЯNq0XM ^ RNЯNqJg YYM^ RNЯNq2M^ RNЯNqTNJg .M^ RNЯNq0,9T8^ RNЯNqTNJg.0MX^ RNЯNq^ jNЯNq[WQ^ RNЯNq0XM(^ RNЯNqJf YYM^ RNЯNqUUUUUUUU^ RNЯNqTNJf .M^ RNЯNqBl(AfBy6^ RNЯNqTNJf.0MX^ RNЯNqB@@,@,@,@@,@^ RNЯNq[WQ^ RNЯNq0XM0^ RNЯNqJg YYM^ RNЯNq2G^ RNЯNqTNJg .M^ RNЯNq9|(Af36^ RNЯNqTNJg.0MX^ RNЯNq^ jNЯNq[WYU^ RNЯNq0XM8^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq25[WU^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq25[WU^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq25[WU^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq25[WU^ RNЯNq[WU^ RNЯNq,,[WU^ RNЯNq,,[WU^ RNЯNq,,[WU^ RNЯNq,,[WU^ RNЯNq[WU^ RNЯNq,,[WU^ RNЯNq255[WU^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq,[WUA^ RNЯNq[WU^ RNЯNq,[WUA^ RNЯNq25[WU^ RNЯNq[WU^ RNЯNq, [UBA^ RNЯNq, [UBA^ RNЯNq, [UBA^ RNЯNq, [UBA^ RNЯNq [UB^ RNЯNq, [UBA^ RNЯNq25[UB^ RNЯNq [UB^ RNЯNq, [WUA^ RNЯNq, [WUA^ RNЯNq, [WUA^ RNЯNq, [WUA^ RNЯNq [WU^ RNЯNq, [WUA^ RNЯNq25[WU^ RNЯNq [WU^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNq,W^ RNЯNqW^ RNЯNq,W^ RNЯNq25W^ RNЯNqW^ RNЯNqJ,Z^ RNЯNqJ,Z^ RNЯNqJ,Z^ RNЯNqJ,Z^ RNЯNqJZ^ RNЯNqJ,Z^ RNЯNq2J5Z^ RNЯNqJZ^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq ^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq@^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq^ RNЯNq2^ RNЯNq^ RNЯNq^ RNЯNq2,w[W^ RNЯNq,, f@jg5@NHNG^ RNЯNq8,2D[YUJAW8^ RNЯNqTN A[d$,5gNK,RA5gNK` ^ RNЯNqD[WYU^ RNЯNqYY"NMl)(^ RNЯNq3^ RNЯNqB ^ RNЯNq2,w[W^ RNЯNq, f@jg5@NHNG^ RNЯNq8,2D[WYU8^ RNЯNqTNuu^ RNЯNqYY"NM^ RNЯNqB ^ RNЯNq2,w[W^ RNЯNq,, f@jg5@NHNG^ RNЯNq8,2D[YUJAW8^ RNЯNqTN A[d$,5gNK,RA5gNK` ^ RNЯNqBy^ RNЯNq, [W,)^ RNЯNq2,w[W^ RNЯNq,, f@jg5@NHNG^ RNЯNq8,2D[WYU8^ RNЯNqTNuu^ RNЯNq3^ RNЯNq, [W,)^ RNЯNq2,[W^ RNЯNq, f@jg5@NHNG^ RNЯNqHVWVV8^ RNЯNqTN A[d",5gNKRA5gNK` ^ RNЯNq2Z5Z A[dNKBZ[W^ RNЯNq2,w[W^ RNЯNq,, f@jg5@NHNG^ RNЯNq2A[WYU8^ RNЯNqTNu^ RNЯNq2Z5Z A[dNKBZJ[W^ RNЯNq^ RNЯNq( 2D[YUJAW8^ RNЯNqTNA X^ RNЯNq2,7[W^ RNЯNq, f@jg5@NHNG^ RNЯNq( 2D[WYU8^ RNЯNqTNAG^ RNЯNq252, A[d5gNKRTRlSlV^ RNЯNq25[WRTSlV^ RNЯNq,,72RTS,W^ RNЯNq,25 f@jg5@NHNGRTS,W^ RNЯNq252, A[d5gNKSTSlSlV^ RNЯNq25[WSTSlV^ RNЯNq,,72STS,W^ RNЯNq,25 f@jg5@NHNGSTS,W^ RNЯNq2A2,C<,TlSF A[d gNKRAQBlBF^ RNЯNqQ`Q`20,S@AW[WgR@J@VƑ89@^ RNЯNq,,72RTS,fz^ RNЯNq,25 f@jg5@NHNGRTS,fz^ RNЯNq2A2,C<,TlSF A[d")gNKSAQBlBF^ RNЯNqQ` Q`20,S@RASA5W[WgR@J@VSA89@^ RNЯNq,,72STS,fz^ RNЯNq,25 f@jg5@NHNGSTS,fz^ RNЯNq^ RNЯNq2,lU^ RNЯNq2,lU^ RNЯNq^^^ RNЯNqTN A[d$,5gNK,RA5gNK` ^ RNЯNqRl^ RNЯNqU^ RNЯNqTNuu^ RNЯNqSl^ RNЯNqHlR5YW[^ RNЯNqHlS5YW[^ RNЯNqHl^ RNЯNq" lU^ RNЯNqHlu^ RNЯNqHlu^ RNЯNqHlu^ RNЯNqHlu^ RNЯNqHl^ RNЯNqHlu^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl^ RNЯNqHl5^ RNЯNqHl5[WYU^ RNЯNqHl5[YUJW^ RNЯNqHl5[WYU^ RNЯNqHl5[YUJW^ RNЯNqHl5[WQ^ RNЯNqHl5[WQ^ RNЯNqHl5[WQ^ RNЯNqHl5[WYU^ RNЯNqHl^ jNЯNq[[^ RNЯNq0,kSX@^ RNЯNq,,^ RNЯNq2,M^ RNЯNq2,G^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqB^ RNЯNql^ RNЯNq,^ RNЯNq,[WYU^ RNЯNq,[WYUJW^ RNЯNq,[WYU^ RNЯNq,[YUJW^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WYU^ RNЯNqR,YW[^ RNЯNqS,YW[^ RNЯNq^^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNql^ RNЯNqB^ RNЯNq,^ RNЯNq,[WYU^ RNЯNq,[YUJW^ RNЯNq,[WYU^ RNЯNq,[YUJW^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WQ^ RNЯNq,[WYU^ RNЯNq^ RNЯNqlU^ RNЯNqlU^ RNЯNqTN^ RNЯNqTN9C A[d"5gNK,RA5gNK` ^ RNЯNqRC^ RNЯNqKU^ RNЯNqTNu u6,^ RNЯNqSC^ RNЯNqHCR5YW[^ RNЯNqHCS5YW[^ RNЯNqHC^ RNЯNq" AU^ RNЯNqHCu^ RNЯNqHCu^ RNЯNqHCu^ RNЯNqHCu^ RNЯNqHC^ RNЯNqHCu^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC^ RNЯNqHC5^ RNЯNqHC5[WYU^ RNЯNqHC5[YUJW^ RNЯNqHC5[WYU^ RNЯNqHC5[YUJW^ RNЯNqHC5[WQ^ RNЯNqHC5[WQ^ RNЯNqHC5[WQ^ RNЯNqHC5[WYU^ RNЯNqHC^ jNЯNqK^ RNЯNq0+KH@^ RNЯNq0X^ RNЯNq2M^ RNЯNq2G8^ RNЯNq[RYW[[^ RNЯNq[SYW[[^ RNЯNq[[^ RNЯNq[C[^ RNЯNq[C[^ RNЯNq[C[^ RNЯNq[C[^ RNЯNq[,[^ RNЯNq[,[^ RNЯNq[,[^ RNЯNq[,[^ RNЯNq9CC6,^ RNЯNq[[^ RNЯNq9CC 6,^ RNЯNq[[^ RNЯNq[[WYU[^ RNЯNq[[WYUJW[^ RNЯNq[[WYU[^ RNЯNq[[YUJW[^ RNЯNq[[WQ[^ RNЯNq[[WQ[^ RNЯNq[[WQ[^ RNЯNq[[WYU[^ RNЯNqRYW[^ RNЯNqSYW[^ RNЯNq^ RNЯNqC^ RNЯNqC^ RNЯNqC^ RNЯNqC^ RNЯNq,^ RNЯNq,^ RNЯNq,^ RNЯNq,^ RNЯNq^ RNЯNq^ RNЯNq[WYU^ RNЯNq[YUJW^ RNЯNq[WYU^ RNЯNq[YUJW^ RNЯNq[WQ^ RNЯNq[WQ^ RNЯNq[WQ^ RNЯNq[WYU^ RNЯNq^ RNЯNq5[WU A[dNK^ RNЯNq5[WU A[dNK^ RNЯNq5[WU A[dNK^ RNЯNq5[WU A[dNK^ RNЯNq55[WU A[dNK^ RNЯNq5[WU A[dNK^ RNЯNq5[UB A[dNK^ RNЯNq5[WU A[dNK^ RNЯNq5W^ RNЯNq5W^ RNЯNq5W^ RNЯNq5W^ RNЯNq5W^ RNЯNq5W^ RNЯNq5W^ RNЯNqJ5Z^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNq A[d5NK^ RNЯNqNsSy6k4F'Hay DaLy D y DmByDRy6Ns AXd:HA@k2AAG20 yDCA'$@H23pPLNsL5NsL5NsH AXdjA@kAAG40 yDC Aw40r5 jJ96g AF$0v AG$AKF'203p0PLNsAXAA40E AGڔ|@B20 yDCrjJ96g AF$0v AG$AF'p*H3p3pPp*H3p3pp*H3p@3pp*H3p3p0p*H3p3pp*H3p 3ppp*H3p3pp*H3p`3pLNs AXdnHA@kdAAG20 yDCA'$@H 0LNsH AXdjA@k,AAG40 yDC Aw40r5 jJ96g AF$0v AG$AK 00F'LNsAXAA40E AGڔ|@B20 yDCrjJ96g AF$0t AG$AF'p*H 0p*H 0p*H 0@p*H 0p*H 0p*H 0 p*H 0p*H 0`LNsByDay D y DfNuHAE09D(p,p&pEG$CF$,< JyDgxA'$J96fr1ApH89pNp+H9p9pp+H9p>9pp+H9p9p.p+H9p~9pp+H9p9pnp+H9p9pp+H9p^9pQLLNuxA'$*HJ96fr1At1 K(pv 0 &5=pv++ 0 &5=pv++ 0 &5=@Apv++ 0 &5=pv++ 0 &5=pv++ 0 &5= !pv++ 0 &5=pv++ 0 &5=`aIQLNu0<A"yD"QAG bg(faB96660*NHa`lJyDfC60RQQ@01AA"yD2<p4HB4F""QA(Q`z#AH$yGN8gAL yNsCgg)Nu g) Nua g dv$yGG bg" Rg< ag` @g?BJA;gp00 g,0 2*A`p00 g0 2*A`4 g)NuJ96fJ96gP6B96B96`P6F96g B96P6P6a a`J96fF'BApN`.y636Nz@N{ <2fBgHyR?<NsBgHy5*?<NsJ96f:P666P6` J96fF'AL o"yGmR"yGlH#&3&#&ApN`.y6a J96gBgHy?<NsBgHy%?<NsB96AL yNsEr#G`vEZ#GaA@ f^B<ggggg yGA`fA gA fa|NsAfaNNs N0 @f /|Ns @f /|tNs @f /|Ns @yf /|$Ns @sf /|Ns @ f /|Ns @ ]f/|,NsJf@ l$)O$.H096kaBy63aa l$)O$.H| RN l$)O$.HJy6kB96g@aa^By6a*Hy/<?96?<?a NAa B9JkBy6`za l$)O$.H @g M( yGNM yGN0l @Cg.,<Bt096g l$)O$.Ha0aBa`|~B`|~a`,<BBB`|Bt096gl-\NH096 l$)O$.Haava-\H@8HNH`,<.<aR`,<BBB`296j0<0 yE?<HyD?<=a |NAa jPJ@k36NuX`p Ff.м Bg?96/?<Ba ahNAaVX36NuBg?96B?<BaDNAa2 Jk.J9g&Hy/<?96?<@aNAa NuC6C fBNu l$)O$.HH yG(g/<NMXPQJ@g /<NMXPL` l$)O$.HH yG(gV/<NMXJ@gp/?/<NM\ yG(g(/<NMXJ@gp/?/<NM\L`$aL l$)O$.HM yGNaaBAG$B@<<?:<?"yD 0| Q0|QJyDfzAG$BB?? g<<e(E(E(EQA02RfR f`|AG$CCBB EDg 1@1@1P1P><H<d8:TTUUL9D8<6<?4<??JGfr0R@0^@Q` r0T@Q0|Q0|Q0|(QAw0<9C0a HA GfIQA9E"N0S@a $A,y&0a A091+J9f-A mH@@f )a ` ?|?A9 0<aMДKΔ:, <4A~BBA6"0<NB09ϔNuA:a @g @gHy#?<&NNaNIa`xA;ar @f?aNAaX30zNuJy0zkVp0, @[dByD3Nq ~Hu0,/?90z?<?aNAa| yNs ~g 3Ns ~aJ[0|NuJy0zk,p0,Hu0,/?90z?<@a<@8HyDp?<;NA>G/|8NA oP0<><\Jg < JgQAGD/ /<??<?NA ,NAX fB<d -B, I, fAB3(<grR3(4C(a80< Q`TaafBD@P0t 90vK4MBBByDDa` 3DDaaa\J@gk`aaaNuA8<R  fJg.| `A8<R  f #lAA8ajaaa"B<g<!m<zoHA<<Pg:<HfJyDDgaSyDD0<Nu4<-j B-a`0-|o0<S@yDDga:RyDD0<NuBB--m-ah`4?<?<NMXNuJfNup-yDDIaN`A8BR  f< A9@`FJf A7`8p-yDDIaapa`paTp-I~g-|o><SGaZQNuH$IBA4RASAg"0< Hm nQL` LC`JAgA PgS`LNuaa6< BDaZQa,Ha a,J90yfga&` H,aaxINu?<?<NAXNuA7`09DD<"7A7`A7H6<&HB@g g g???<NM\`LNu6<`6<`A7`A8`A7`A7`A7`A7`A7`aH@4Ja a0 9oNu6/ /<??<@NA4<(N$Kpg/@/LNA4Q NAXaZNuBgHy7B?<=NAPJ@k??<>t?<?B?<BNAJk mBoNAO JkH/ /<?/ ?<?NA f*(N$Kpg/@/LNAf 4QBBO NAX0Nug J90g NsJ90fNsF'!F90NqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNq!NsHJyDg|ACH"0$0 yD0<6< !BLQAPQ0< !A!AH!AL!BP!BT!B!BAQ0<6< !BLQAPQLNsVHHAVHVHHBVH yD0<6< QQ0< !B!A!B !A!B!A!BAQ0<6< QQLNs yG"HA@0<296BQ`"yG< A0fAX&2GNAPADJfS\:MD#EB(aA&PaNGaaaaaaIҴ*yGa: LtBQ ,M&MEG.yGBBBBBBBB5|^ RNЯNqJ9g`H o"yGmJ"yGl@Ry60 H@  "P    ,  (  (\ > D8 B` V ^ 8   V 2 0. @ t ZX-SPECTRUM Emulator V1.0 ========================= 1. Einleitung ------------- Wozu ein ZX-Spectrum Emulator? - Nun, wer diesen Computer hchstens dem Namen nach kennt, kann obige Frage berechtigt stellen. Der mindestens ebenso erfolgreiche Nachfolger des legendren ZX-81 ist ein 8-Bit Rechner mit 48 kB Hauptspeicher, 256 x 192 Pixel Grafikschirm in 16 Farben (max. 2 Farben pro Zeichenposition) und Pieps-Sound. Hoffnungslos veraltet also fr einen verwhnten ST-User. Wer aber, wie der Autor, seinerzeit seine ersten Programmierfrustrationen am ZX-81 erlebte, und dann hoffnungsvoll auf den ZX-SPECTRUM wechselte, wird dieses Gert fr immer wohlwollend im Gedchtnis behalten. Umfangreiches Basic, nahezu unerschpflicher Speicher (fr ZX-81 Verhltnisse), ppige Farbenpracht und sogar die Mglichkeit Tne zu erzeugen. Binnen krzester Zeit brach eine Softwareflut ber diesen Rechner herein, weil er uerst einfach und komfortabel zu programmieren war. Etliche der heute am ST-Sektor bekannten Software-Firmen haben sich damals am Spectrum erste Lorbeeren geholt. Kurzum: Er ist es schon wert, in Erinnerung behalten zu werden, der alte "Specci" und der Autor hofft durch die bertragung auf den Atari ST noch lange ab und zu einen Blick auf ihn werfen zu knnen. (Sollte ja schlielich auch am TT und vielleicht auch noch am SF - so mte der Nachfolger des TT logischerweise heien - noch funktionsfhig sein). Und mag sein, da es noch ein paar Leutchen gibt, die hnlich empfinden... Ihnen ist dieser Emulator gewidmet! Der Autor mchte an dieser Stelle ganz besonders Christoph Zwerschke, dem Verfasser des superben ZX-81-Emulators fr den ST, seinen Dank aussprechen. Erst angesichts dieser Demonstration der prinzipiellen Machbarkeit eines ZX-Emulators war meine Motivation wieder einmal gro genug, um die schon jahrelang angesammelten Plne endlich in die Tat umzusetzen. Gerne gebe ich auch zu, im Werke meines Vorbildes mich ein wenig belehrt zu haben. Nach einem halben Jahr zher Optimierungen und Ringen um jeden Taktzyklus, immer wieder unterbrochen von grausamen Abstrzen und wunderlichen Effekten am Bildschirm kann an der Eigenstndigkeit dieses Programmierepos nicht gezweifelt werden. Ein riesiges Danke auch an meine Frau (die nun endlich aufatmen kann) fr ihr Verstndnis und die seelische Untersttzung in dieser Zeit. 2. Leistung der Emulation ------------------------- Der ZX-SPECTRUM wird erstaunlich vollstndig emuliert. Der einzige wirklich erwhnenswerte Unterschied zum Original ist, da das Hardware-Blinken (FLASH), das der Spectrum als Video-Attribut zur Verfgung stellt, aus Geschwindigkeitsgrnden (vielleicht am TT dann) nicht untersttzt wird. Stattdessen werden Zeichen mit dem FLASH-Attribut invers dargestellt. Am deutlichsten zu merken beim Cursor im ZX-Basic, der am Original blinkt, beim Emulator aber blo invertiert ist. Damit lt sich leben. Ansonsten kann aber mit folgenden Features aufgewartet werden: - Die zugrundeliegende Emulation des Z80-Prozessors untersttzt smtliche Opcodes, auch die Operationen mit den Indexregister-Hlften und andere 'nichtoffizielle' Z80-Befehle, und die vollstndige Interruptlogik des Z80 (Interrupt-Mode 2 wird in vielen Programmen am Spectrum verwendet). - Die Video-Emulation stellt alle 16 Farben des Spectrum (8 Farbtne in jeweils zwei Intensitten) sowohl am Farbmonitor, als auch am monochromen Monitor (in Graustufen) dar. - Die I/O-Operationen fr Tastatur, Lautsprecher und BORDER-Farbe (Farbe des Bildschirmrandes) werden originalgetreu umgesetzt. Ein am Joystick-Port des ST angeschlossener Joystick wird als KEMPSTON- und IF2-kompatibler Joystick (zwei Standards am Spectrum) emuliert. - Das Kassetten-Handling des Spectrum wird vollstndig auf Disk umgelenkt. Bei Angabe eines Dateinamens beim Laden (LOAD "name"), und beim Speichern (SAVE "name") ist dieser Vorgang transparent. Das Laden des erstbesten Programmes vom Band via LOAD "", ist natrlich fr Disks sinnlos - es erscheint ein Fileselektor, aus welchem eines der vorhandenen Programme ausgewhlt werden kann. 3. Start des Emulators ---------------------- Es werden die Dateien SPECCI.PRG und SPECCI.DAT in einem beliebigen Verzeichnis auf Diskette oder Festplatte bentigt. Nach Starten von SPECCI.PRG erscheint ein Titelschirm whrend die Datei SPECCI.DAT nachgeladen wird und die Initialisierung des Emulators durchgefhrt wird. Dies dauert ein wenig, weil umfangreiche Tabellen im Speicher angelegt werden. Es sollten auch mindestens ca. 800 kB Speicher frei sein, also auf ST's mit 512 kB Ram oder 1040ern mit zuvielen installierten Accessories luft die Emulation nicht (es erscheint eine Alertbox). Geschrieben und getestet wurde der Emulator auf einem 1040 STF mit 1 Mb Speicher und TOS 1.0. Er sollte aber zumindest am ST unter jeder TOS-Version laufen und sich auch mit Festplatten vertragen. Solange blo genug Hauptspeicher vorhanden ist... Falls der Emulator am Farbmonitor verwendet wird, bitte zuerst in die niedrige Auflsung schalten (ansonsten erscheint eine Alertbox). In der monochromen Auflsung werden die Farben durch Graustufen ersetzt. Nach geglckter Initilisierung beginnt der normale Spectrum-Bootvorgang, gefolgt von der Einschaltmeldung: der ST ist jetzt ein nahezu originaler ZX-SPECTRUM. (Bis auf die Geschwindigkeit allerdings, I did my best... am TT sollte die Emulation ca. so schnell wie das Original sein - mal sehen). 4. Bedienung des Emulators -------------------------- Die Belegung der Spectrum-Tastatur wurde so getreu wie mglich auf den ST bertragen. Folgende Tabelle zeigt die Belegung der Spectrum-Tasten, die am ST entweder nicht als solche existieren oder anders belegt sind: ZX-SPECTRUM entspricht am ST Bemerkung ----------------------------------------------------------------------- Symbol-Shift Alternate oder Umschalt-Taste am Spectrum rechte Shift-Taste Caps-Shift Linke Shift-Taste temporre Umschaltung Gro/Klein Z Y Weil Spectrum englische Tastatur hat, Y Z wurde dies auch am ST beibehalten Zwecks Komfort wurden einige oft verwendeten ZX-Shift-Kombinationen auf eine der sonst unbenutzten ST-Tasten gelegt, wie aus nachstehender Tabelle hervorgeht: ST-Taste entspricht am ZX-SPECTRUM Bemerkung ----------------------------------------------------------------------- Control Caps-Shift+Symbol-Shift EXTENDED-MODE F1 Caps-Shift+1 EDIT F2,CapsLock Caps-Shift+2 CAPS LOCK F3,Tab Caps-Shift+3 TRUE VIDEO F4,Esc Caps-Shift+4 INVERSE VIDEO Cursor links Caps-Shift+5 Cursor nach links Cursor runter Caps-Shift+6 Cursor nach unten Cursor rauf Caps-Shift+7 Cursor nach oben Cursor rechts Caps-Shift+8 Cursor nach rechts F9 Caps-Shift+9 GRAPHICS-MODE Delete,BS Caps-Shift+0 DELETE F10 Caps-Shift+Space BREAK (Programmabbruch) < Symbol-Shift+O ; (Strichpunkt) ~ Symbol-Shift+P " (Hochkomma) Symbol-Shift+C ? (Fragezeichen) Symbol-Shift+L = (Ist gleich) Symbol-Shift+Z : (Doppelpunkt) Symbol-Shift+2 @ (Absatz) Emulator-Steuertasten: ST-Taste Wirkung Bemerkung ----------------------------------------------------------------------- F6 Reset Entspricht Reset-Knopf beim Spectrum 1) Help Tasten-Hilfe ZX-Tastaturschablone wird eingeblendet 2) Undo Farbschaltung Umschaltung farblos-Farbdarstellung 3) Insert Unterbrechung Erscheint Alert DESKTOP|RESET|CONTINUE Shift-F6 Desktop Emulator beenden (ohne Abfrage) 1) Eine Kopie des ZX-Roms wird in den Rom-Bereich des Emulators geschrieben der Z80-Emulator zurckgesetzt und beginnt wieder bei PC=0. 2) Am Farbmonitor wird nur ein Viertel der Schablone auf einmal eingeblendet, mehrmaliges Drcken von HELP zeigt die restlichen Viertel. Jede Taste auer HELP kehrt zur Emulation zurck, die Taste wird gleich bernommen. 3) Der Display-File des Spectrum besteht aus Pixeldaten und Attributdaten. Bei 'farbloser' Darstellung werden die Attributdaten nicht beachtet - die Emulation wird etwas schneller. 5) Laden und Speichern von Programmen ------------------------------------- Programme, Speicherbereiche, Strings und Arrays werden genauso wie am Original gespeichert: SAVE "name" [CODE, DATA, SCREEN$]. "name" sollte allerdings nur aus maximal acht Zeichen bestehen (am Spectrum sind 10 Zeichen mglich). Das Laden funktioniert analog, mit einer Ausnahme: Weist am Original der Befehl LOAD "" (Leerstring) an, das nchste am Band daherkommende Programm zu laden, so ist dies im Diskbetrieb nicht anwendbar. STATTDESSEN ERSCHEINT EINE AUSWAHL-MASKE. Je nachdem, ob der Ladebefehl fr Programme, CODE-Files oder Variablen war, erscheint nur die Liste der vorhandenen Dateien des jeweiligen Typs. Erluterungen zur Dateiauswahlmaske: Noramlerweise wird versucht die Datei INHALT.INF im aktuellen Ordner einzulesen, welche die Namen und Headerdaten aller Spectrum-Dateien in diesem Verzeichnis enthlt. Sollte das File INHALT.INF nicht vorhanden sein (wie gesagt, fr jedes Verzeichnis separat), so wird das Verzeichnis nach Spectrum-Dateien 'durchgescannt', was einige Zeit dauern kann. Am Schlu wird versucht, die Datei INHALT.INF zu schreiben, was eventuell zum System-Alert 'Disk schreibgeschtzt' fhren kann - also am besten Disketten nicht mit Schreibschutz einlegen. Angezeigt werden der Dateiname, die Lnge in Bytes und die Startadresse (bei Typen CODE,DATA) bzw. Auto-Start-Zeile (bei Basic-Programmen). Die Auswahl einer Datei erfolgt mit den Cursortasten 'Up' und 'Down' und 'Return' zum Abschlu. Am oberen Bildschirmrand ist der aktuelle Pfad angezeigt und kann editiert werden. Hat man einen neuen Pfad eingegeben (nicht mit 'Return' abschlieen!) so kann mit Lese.INF (F1) das Inhaltsverzeichnis eingelesen werden. Das Inhaltsverzeichnis wird beim Speichern von Programmen, nicht automatisch aktualisiert, sondern mu mittels Rescan (F2) neu erzeugt werden. Mit der Taste 'Escape' kann die Dateiauswahl verlassen werden, ohne etwas zu laden (Spectrum 'Tape Loading Error'). 6. Interna ---------- Der Spectrum-Emulator krempelt die Systemvektoren- und Werte ziemlich um. VBL-Routinen werden abgeschalten, Tastatur und Timer-Vektoren manipuliert und der Soundchip umprogrammiert. Bus- und Adressfehler werden abgefangen und der Illegal-Vektor fr die Interrupt-Simulation des Z80 verwendet. Daher ist es auch durchaus mglich, da das Programm sich mit anderen im Speicher liegenden Vektorverbiegern nicht vertrgt. 7. Verlassen des Emulators -------------------------- Durch Drcken von Shift-F6 wird ohne Abfrage sofort zum Desktop zurckgekehrt. Dabei werden smtliche Systemwerte, die verndert wurden (Vektoren, Farbpalette, Soundregistereinstellung etc.) auf die alten Werte zurckgesetzt. 8. Zum Abschlu einige Spectrum-Dokumentationen ----------------------------------------------- Speicheraufteilung (Adressbereich: 0-65535) -------------------------------------------------------------------------- 00000-16383 ROM 16384-22527 Display-File (Pixeldaten) 22528-23295 Attribut-File (Farben und Attribute, zeichenorienteiert) 23296-23551 Drucker-Buffer (beliebter temporrer Speicher) 23552-23733 System-Variablen 23734-23754 Systembereich fr I/O 23755- Basic-Programm-Speicher + Variablen Am oberen Speicherende jede Menge Systembereiche, Stacks und User-Grafik. Interessante Systemvariablen (Worte sind im Low-High-Format!): Adresse Lnge Name Beschreibung -------------------------------------------------------------------------- 23561 1 REPDEL Zeit in 1/50 Sekunden fr Tastatur-Repeat 23562 1 REPPER Verzgerung in 1/50 Sekunden zwischen Repeats 23606 2 CHARS Zeiger auf Zeichensatzadresse - 256 23609 1 PIP Lnge des Tastaturklicks (man versuche z.B. 10) 23627 2 VARS Zeiger auf Variablen-Bereich des Programms 23635 2 PROG Zeiger auf Programm-Bereich (normalerweise 23755) 23672 3 FRAMES 3 Byte Zhler (Low - High). Alle 20ms inkrementiert 23692 1 SCRCT Anzahl der Scrolls des Screens bevor die Frage "scroll?" erscheint. 23730 2 RAMTOP Adresse der letzten Speicherstelle fr Basic 23732 2 P-RAMT Adresse der physikalisch letzten Speicherstelle Interessante Systemaufrufe -------------------------------------------------------------------------- RANDOMIZE USR 3280 Scroll um eine Zeile nach oben PRINT 65536-USR 7962 Freier Speicher RANDOMIZE USR 0 Soft-Reset des Spectrum 9. Last but not least --------------------- Das war's. Allen jenen, die den Spectrum berhaupt nicht kennen, seinen die Programme "demo1" und "tutor" zum Aufruf empfohlen. Wrdigungen, Lob, sowie Anregungen und Kommentare bitte an folgende Adresse: Christian Gandler Paletzgasse 17/3/14 A-1160 Wien Viel Spa und Ciao! cg, 17.03.91 Version 1.1 vom 14/05/1991 -------------------------- Einige Mngel (und auch Fehler) wurden behoben, die Betriebssicherheit erhht. Auerdem untersttzt der Emulator nunmehr das berchtigte Interface I und die Microdrives. Im Detail sind es folgende nderungen gegenber der Version 1.0: - Trap 7 Vektor wurde beim Verlassen des Emulators nicht rckgesetzt. - Fileselektor liest INHALT.INF problemlos ein (In V1.0 war mitunter mehrmaliges Drcken von F1 notwendig). Weiters bleibt die Seite der Liste aktiv fr den nchsten Aufruf. Der Bildschirm-Modus wird nicht mehr umgeschalten, beim Verlassen des Selektors. - Beim Laden aus Anwendungen heraus, erschien in V1.0 automatisch der File- selektor. Numehr werden der Reihe nach alle Dateien des Typs 'Code' ange- boten, was in der Regel frher oder spter zum Erfolg fhrt. Durch Gedrckthalten von 'Control' oder 'Alternate' beim Aufruf der Ladeoperation erscheint der Fileselektor wie gewohnt. - Bei Unterbrechung via 'Insert' werden jetzt alle Z80-Register angezeigt. - Geringfgige Beschleunigung der Emulation - Interface 1 & Microdrives: -------------------------- Der Autor setzt voraus, da der Leser dieser Zeilen Bescheid wei, was mit Interface I' und 'Microdrive' gemeint ist, weil fr alle, die damit nichts anfangen knnen, ein mehrseitiger Exkurs notwendig wre. Darum nur fr alte Sinclair-Hasen folgende Erluterungen: Durch Gedrckthalten von 'Control' oder 'Alternate' whrend des Emulatorstarts vom Desktop (bis zum Ertnen eines Glockenschlags) wird der Spectrum mit dem Interface I ausgestattet. Es stehen dann also die fingerverstauchenden Kommandos wie LOAD *"m";1;"name" zur Verfgung. Damit ein Microdrive angesprochen werden kann, ist aber noch ein wenig Vorarbeit ntig. Zunchst mu auf irgendeine Weise - zum Beispiel mit einem kleinen Basic-Programm (ST) eine Datei namens :MD1 (statt der '1' auch 2...8, je nachdem unter welcher Nummer das Microdrive verwendet werden soll) erzeugt werden, die genau 132240 Bytes Lnge hat. Das ist der bentigte Platz fr 254 Sektoren zu 512 Bytes plus Verwaltungsbuffer von 8192 Bytes. In GFA-Basic z.B. knnte so ein Programm so ausschauen: OPEN #"o",#2,"\SPECTRUM\:MD1" x$=SPACE$(8192) PRINT #2;X$; X$=SPACE$(512) FOR i=1 TO 254 PRINT #2;x$; NEXT i CLOSE #2 Diese Datei mu wie angedeutet im selben Verzeichnis angelegt werden, in dem sich der Emulator (SPECCI.PRG) befindet. Vom Emulator aus mu das Microdrive wie am Original zunchst formatiert werden, bevor es verwendet werden kann. Dies geschieht wie gewohnt mit dem Kommando FORMAT "m";1;"name". Es stehen ab jetzt smtliche Microdrive-Kommandos zur Verfgung. Auerdem kann ein Drucker ber RS232-Kommandos betrieben werden (auch wenn er am Centronics-Port hngt). Beispiel: FORMAT "t",9600: LIST *t -> sendet ein Basic-Listing an den Drucker (oder was immer an der RS232 oder Centronics-Schnittstelle hngt). Version 1.2 vom 02/06/1991 -------------------------- Der Emulator ist jetzt wirklich getester Weise voll harddisk-fhig und luft am Mega STE 4 mit 16 MHz und eingeschaltenem Cache ohne Probleme (und rund doppelt so schnell wie am 1040). TT-Version vom 23/07/1991 ------------------------- Wie zu erwarten, konnte ich nicht eher ruhig schlafen, bevor nicht eine Version des Emulators fr den Atari TT programmiert war... Aufgrund der verschiedenen Prozessor-Architektur des 68030 waren etliche nderungen im Algorithmus notwendig, soda ich eine eigene Version fr den TT entwickelte, um den Sourcecode nicht allzu unbersichtlich werden zu lassen. Am TT mu die Datei SPECCITT.DAT in SPECCI.DAT unbenannt werden, um den Emulator einzurichten (Originale Datei SPECCI.DAT - die ST-Version - vorher lschen!). Der Emulator luft am TT in der niedrigen und hohen ST-Auflsung, wobei der Cache des 68030 eingeschaltet bleiben kann. Nebenbei habe ich nun auch die Flash-Attribute des Spectrum emuliert, weil der TT gengend Rechenleistung dafr hat. Die UNDO-Taste schaltet jetzt zwischen drei verschiedenen Bildschirmmodi um: 1) Flash wird emuliert (Nach Aufruf aktiv) 2) Flash-Attribute invers dargestellt 3) Attributlose Darstellung Leider ist der Sound am TT relativ leise, weil der Lautsprecher nicht mehr im Monitor integriert ist. Puncto Geschwindigkeit lt sich sagen, da sie im Durchschnitt der des Originals gleicht. Allerdings wirklich nur im Durchschnitt - manche Programme laufen mit 70%, andere dafr wieder mit 200% ab. Dies liegt daran, da die verschiedenen Z80-Befehle unterschiedlich beschleunigt werden - ein generelles Problem der Prozessor-Emulation. Noch konnte ich den Emulator mangels TT-Ram noch nicht in diesem schnellen Ram ablaufen lassen, aber vermutlich drfte die Geschwindigkeits-Steigerung dann fast schon zu hoch sein. Somit lege ich nun endlich die Entwicklung des ZX-Spectrum-Emulators (bis auf Widerruf) zu den Programmier-Akten (=Backups) und Ihnen das fertige Ding unter Ihre Sammlung. Falls Sie ein Spectrum-Freak waren (sind?), schreiben Sie mir doch, ob Ihnen die Emulation gefllt - wrde mich freuen! Tsch! . aE/.. `E/INHALT INF jE/<POOL F TPOOL_MC F TUTOR F TUTOR_S F TEST jlE/pool Ctutor pool_mc ytutor_s @pool C* !|}>2 z2z!@"z_&o"z͙_*z͠b*z~/w,"z@d2 z!}6>6>2z2zCz͙_~ ݶ ݦ ( 2z5 ]:zK zc:z= : z 5: zg($:}= 6>6K z.A}o% 2 z>>0#]2 z2 z(GO.}oA>>0#]]bV^fntuFNfn utJCz͠b0^Kz6q6p6 ͠bF N = .. x( p q yX(0> &zo~w x> >ݦ( >ݦ ~ (ݾ ~ ݾ 6 >2zKzx( A͙_ͦ_=`:z=2z 66ݾ 6 2zw 6 5a~ 8\͌_~0!y^h8;!y~(>oͦ_Ҋ^ `݆ƀwf n T]**Rt u 5a>ݖw@5a~yڊ^͌_~0!ys_t81|0!ys_ڊ^0!ys_8Ҋ^!y~^^ݖw_5a> @@C z2 z!| "zͰ_R^,V,"z^VR"zkR| Tax"z*z^,V^VR"z.R| Tax[z?~`ր`Da*zaa*zaR))))pa~ *zݾ 0&![zR"z![zRSz"zs`>@C z2 z:z= ~ 6 ` 3~ƀwƀN F 6 6 *zwq p 6 5a5aG*z}o~Owy@x ƀwx`D@8Dƀan f a*zT]**+R#u t 6 5aaa#t u ~a#j&0%ݾ ()ut~a#j&0%ݾ ()tu|( ŔaD>@a8(R0ÅaÅaRDM8=aR x=@8o&{V,^a!Rɯ2ba>2bDMxz(!Rx(!BDM>!))00 0=b)BS]-b!R6 6 F :z=2z: z=2 z:z> >2 z>2nc2cc~_~ WcfnFNT}_ w, B 7ɯ2nc2cc!~/b_/b~/bW֤/b.}  } >o&))>o|Xg~ tuqpT}_~ ~ w, B >DO>g>8o>@g{???oxG /x# ( !RWcWc%-Wctb> tbOD&S*z>2nc2ccWc͙_*z ~(]b͠b66!}6 ~ E: z<2 z6<6P6 >2z͠b86 o^ F(]b:z(D2zP2}>2 z>2z>2nc2cc6ld>*z8+z0v~l B6 >>>> >>>:z<8>2zG>!A" } [zqbm( u( >2 }@d>2 z`d#"z[zqb*zB0 ]!~HB0 !~}W5B0 !~}D_#B0}DW!~ !!"zSzb: z0 !NeF`d2 zOWA `dÐ  ; !y>:\2=\!y>7V d9k,t,k,r,k,t*t,t,v,k,t*t,t,v,k,t*t,v/t,v,k,v,k,v+t,k,v+r x-k,16,k,v,k,v+t,t,16,k,v-k,t,v+t 8k,16,k,v,k,v+t,t,16,k,v-k,t,14,v/t,v "": "": C"POOL"170:I=1500:I:26002e:160 32767:"pool_mc" m=1000:v=12 :r=3:t=2:k=1:j=0:c$="":23675{\,k:23676|\,126~:j:j:j:q=256:u=8:h$="0":hi=j:w=23659k\ :m Ie=11 -p-p-p:n=j:s$="0":t$=s$:o$=s$:l=j:g=k:sc=l:os=l:ts=l 0z=18:j:j:4:j::b=r:bb=b:s=b D::" ___________ ___________" ܏4,j;"":17,31;"":i=416:i,31;"":i:4,31;t;"":17,j;t;"" Ak+z,t;" " 7:j:k Ma$="  " a$:j,j;a$ Hhw,j:22,j;13 ;" PRESS ANY KEY TO PLAY":w,t $pk,e-s$;s$;(26-h$);h$ /pk,u-o$;o$;(28-t$);t$;k,e-s$;s$ 'pj,j;" SCORE HIGH" Apj,t;"PLAYER 1 HI ";h$;22;"PLAYER 2";j,e-r-r;k;c$ 421,4;"FRAME ";g;z;" " l=r285 )20,u+(l-r)*t;:i=jr-l:" ";:i 120,u;"SHOTS 3 SPEED   " j:177,87W:32 ,19:j,-38&:-32 ,19:177,88X:32 ,19:k,j:j,-40(:-k,j:-32 ,19 "ll=23762\ $6100d:i=k24:a,c:a/6,c:""hm 'i )502:u:k:177,87W:32 ,19:j,-38&:-32 ,19:177,88X:32 ,19:k,j:j,-40(:-k,j:-32 ,19:j:7:j *s=r:p=g750 ,120,14;s:(bbb)g=g+k:201 -hll=25668Dd .:x=32001}-31248z:y=32003}-31249z /#llx=x-4.5:y=y+7.5p 0%ll=kx=x-1/t:y=y+10.5( 1%ll=tx=x-4.5:y=y+14.5h 2%ll=rx=x-7.5p:y=y+10.5( 3;hi=32032 }32200}32 :(i+13 )=ji 4Yhx=32001}-(i+k)+r/t:y=32003}-(i+r)-:32010 },t:502:""m 6o=(y/x)+*(x>0) 832008},o*q/(t*) 90vx=(o*q*t+1/t):vy=(o*q*t+1/t) :(32010 }=jvx=(vx/t):vy=(vy/t) scsc=os:s$=o$ Y>sc>hihhi=sc:h$=s$:k-p,26-10 *p-(p)*s$;hi bu+k,11 ;"GAME OVER" lk:q:""h200 vm a$="PLAYER 2" j,e-6;k;c$ ?e=28:n=k:os=sc:o$=os:sc=ts:s$=ts:s=r:770 j,e-r-r;k;c$ a$="PLAYER 1" -e=u:n=j:ts=sc:t$=ts:sc=os:s$=os:s=r 7v-t,v;k;8;8;a$;j,e-r-r;k;""  i=jv*r*t:i:j:j +v-t,v;k;8;8;a$:300, 7u-k:k:1020:k:k::j,12 ;"P  L": @" Aim the cue ball by moving the pointer around the cushions." J" Use S to move clockwise, A to move anti-clockwise." '" Control the speed using L." H" Press ENTER to shoot when the direction and speed are set." $c" A foul or running out of shots loses a ball. When all the ballsare lost,THE GAME IS OVER." .M"  Mike Lamb 1983",13 +" PRESS 1 OR 2 TO PLAY" Li=-k5:a$ V:a$:k,t*i:i `*h=j:p=j:k:m/t+r*r*:="1"200 j"2"h=k:200 tp=k:200 [ [Zxpool_mc y0 k,e-s$;s0 d):s$=sc:k,e-s$;s$ KEY TO PLAY":w,t :h$="0":hi=j: ":23675{\,k:23676|\,126~:j:j:j:q=256:u=8:h$="0":hi=j:w=23659 t t쀔I}@@@-% oKB}-R:1 ;2Z>;""  ??<~~<@@@@@~BfZBBBBbRJFB>'>>^X '??X"'>>`Z '`X tutor (0:0:0:58999w 6#0;9 ;" LOADING - PLEASE WAIT (5 min) " !23659k\,2:"tutor_s" (18,0:"hello" 2 '"tutor"10 tutor_s @????????????????x??<<<<< B$P$ $<?<x<<><< B$0$`$$$$<?|<x<<><< B"$$"$ $$$$B$$0$`$$$$<><?~?|><B$&2& $$$$B"$$$ $$$$|<y><??<B%R& $$ #<><<?<?<B$% $<8?<<<<?? B$% #??<<?<<x<?rB$"P$ $0?80088`p8800880`8??{`8|@| 88000`??q`B8<8h@88BD888(8D8800 00 ``B DD TxDD|DD@0DD D!dw#>2dB!d5:do:dGgoc"d~ DwDM_W:d( `i#f%8ç( `i+f%8:d ( ! f%8˧( ! f%8!dszʸA0:dʸAA:d_|*d8%8C(4!d4*d)$:S(+5!d5*d,)$(8K(44!d4*d),[( 55!d5*d$),* @#B!p@B:do:dGgocf%0!d4@*2@M|("DM>!)00= |怰B0#R"2@"dA,B|2dA ,B|2dc R#:B+)<* @6+66+6* @6#66#6* @* @6+6 6+6* @6#6"6#6* @6+* @6#* @6+* @6#* @!6* @!6!!B*B2d*d[2d[4d~2ed~2hd~2kd~2nd*d[6d[4d~2fd~2id~2ld~2od*d~2gd~2jd~2md~2pd* @! #6# :ed >D@BurBD͸BuͤB:ed :hd :gd(eB:fd >aYB͋BaBͮB:fd :id :gd(B:gd E:hd >@B7rB͸B7ͤB:hd :kd :jd( B:id >YBL͋BBLͮB:id :ld :jd( B:jd (F:kd >@BrB͸BͤB:kd :nd :md(B:ld >YB͋BBͮB:ld :od :md(B:md ZF:nd >@BrB͸BͤB:od >YB͋BBͮB:pd ÌFþFEBvͮB:ed eB:fd B>GB8ͮB:hd  B:id  B+G B ͮB:kd B:ld BGBͮB:nd 7B:od <BG* @86#6#6#66#6#6#66#6#6#66#6#6#6:nd(7B:od(<BG:md * @6#6:jd * @ 6#6:gd * @b6#6G*d~((6y(yDO!BH*B}(++######"B*B}(##++++++"B:%@ :&@͕G͕GG, :&@ |G͕GG *d[4d~("dTGBH2  *d[d~v( +v( R!00 }(R hGXx(Yy( R8* @6#64~& 6+4#tG:fd( ͕GtGTG:gd(*d[4d"dtGTG:ed |GtGTG|G* @`m!`m[ @v)1&'>7.39-v'>-89&22$$v,*3*7&9*"!~v8&;*8(7$"~v14&)8(7$" !~v):7&9.43$ v51&>$ ~v 841;*$!"~v ~Hvvv :,*3*7&9*v"=~~@!~pv">~~@~ v4== ~`= ~` ~`= ~`v4>>~ >~0~ >~0v>= >= v :8&;*8(7v5$~Z>~=v(!"~H55!"~!"~v !"~H5!"~v#5$~Z>~=v$(!"~H55!"~!"~v%!"~H5!"~v(,# ~ ~j~@ ~v2v3v4= 9-*2&?*.8<&.9.3,>4:  9>5*551&>8841;* v56 v6 751&>6  5 841;*6  8 v77!~Tv<5~~ v=" $~D~v>V~0~ v?" $~D~v@:7vA*751&>~%~ vB77841;*~~@ vCA "#~vDA "$~vFvG 8-4<2&?* vH6 vI 6 6  > vJ6 ~ 3 $~ vK :14&)8(7vL>= >= vMA ##~vNA #$~vPvQ  2&?* vR6 vS 6 6  > vT6 ~ 3 !~vZ !~pvdvevnvo (%$'>-89&22  97>+.3)9-*-.))*3,41)  &8&(1:*9-*).89&3(*9-*(-*89.8).851&>*):8*9-*0*>8  .<&1043  /9:731*+9  09:737.,-9  29:7374:3)  (7*&9*&1&'>7.39- vp6 vq 6 6  > v6 ~ 3 vv '>*'>* vvvvvvvvvvvvvvvvvvvvvvvvvvIIMMNHNN]@7H (!v &3.2&18vv>574,7&29-&91*&738&'4:9;&7.4:8&3.2&18+7429-*:8*7v v . ~v / ~v &3.2&11*&73.3,,&2* v(# -&;*>4:*;*751&>*)'*+47* v*. v,. 3 ~Hv2 .3897:(9.438 v4Q >4:<.119-.304+&3&3.2&1.<.1197>,:*88<-&9&3.2&1>4:&7*9-.30.3,4+ v6] .<.11)49-.8'>&80.3,>4:&8*7.*84+6:*89.438&'4:9>4:7&3.2&1<-.(->4:7*8543) v8X *.9-*7>*834.)4,:*88<-&9>4:7&3.2&1.8.<.11&80>4:&+*<6:*89.4389-&9 v:* 9.2*.<.11034<<-&9>4:7&3.2&1.8 v5*32*+47,*9<-&9.-&;*1*&73*):534<3443*-&89&:,-92*&3>9-.3,>*9 v>. v@. 3 ~HvF0+  )4*8.91.;*.39-*<&9*7+74,2448* vP (39~vR1&89~vdvf (:7~vn 3:2(:7vp "~vr 3 + ./vx3 ~ ~Hv79597+ /~v<73,597+ /v+ ./~  v/ v/ > / 3  ~v 57*;(:7v/  > (:779597v/  3 (:7<73,597v ~\v &  &*.4: v& .89-*&3.2&1>4:7*9-.30.3,4+& v;~!~ v& ;+ .~ 3 v;v + .~/  v. v. > . 3 ~Tv.  > ~Hv< &117.,-9.,.;*:5<-&9&3.2&1<-*7*>4:9-.30.3,4+ v& vS 51*&8*9>5*&6:*89.439-&9  <4:1)).89.3,:.8-'*9<**3& &  & 3 ~v6 v"6 6   6 6 6 ~v; <-&9<4:1)9-*(477*(9&38<*7& &  '*>*834 v. v. > . 3  ~rv(39(39~v1&891&89~v1&89! ~~~Hv 3:257*;v "~v 41)7+ /~v 41)<+ /v//  > + /~/1&89~41) 6 6 1&89(:7v$.  3 6 6 (:71&89v,+ + 6  &  v6! .034<34< (39 &3.2&18 v@ !~zvv0~~@v .,49.97.,-9 v0v 8-&11.8&;*9-*2 v. v.  3 !~v 89&799&5*7*(47)*7 v ~Hvv &3.2&1 v ~pv <&3951&>&,&.3 v. v.  > ~HvvX .~vb3~3:2vl ..~vv+ . "~v3v /.~v+ / #~/v //~v ""~%v ..~v //~vvvvvvvvvvvvvvvvvvvvvvvvvvv>33 &8::@n(@coX95973,597*@@ 1)1)S+.8-F&24*'&V.8.9;*7>82&11K)4*8.91.;*.39-*<&9*7+74,2448*.8.9,7**3+.8-.8.91&7,*(&9)4*8.9-&;*+4:71*,8 '.7).8.9&3.(*2*&1+47(&98 24:8*':9)4*89-**&71>'.7)(&9(-.9 <472)4*8.9'&70)4,)4*8.91.0*2:)5.,.8.9;*7>82&11&24*'&IILMLMMM]@7I~ i7!@v &79.11*7.*v%$'>(-?<*78(-0*vv')"%"~!"~"%#~v !~zv v6~ ~ == v-~ @~v.-~~v 1~.v)~ -. ~`.~1 v1v.v8@!~v(;8!~ @~v2~!~p  v<#;8~~!~p  v>#;8~~!~p  v@#;8~~"~  vB$;8~~"~  v88v ~(~ 0&343.*7 v8~& v8~' v  v~( ~@ <.30*1 v5-.v%5-.~5-.%~4!~Mv?B5-.$~4v~( ~@ ,*8(-< v;v#;~ ;~~\v6~(~ v;8;8;8@v,;=;?8;8~v1 ;>;?v6 9~v@8~=$~;=9vB8~=!!~\;=9vD!=~="~|!~vF> ~9;>9vH> ~#~9vJ> ~, ~,vLG)~ ~,>~=~~"~4vT=>vV=>vX99!~v^ ~ vh> ~,>~vm #!~;vr >%~vw==~vz!= ~=#~X ~Hv|.~!~ v} >= = v~ >= v >= v.v !~v~ = v.~!~ v$~=~ v%~=~ v$~=~ v%~=~ v.v~%~ 34(-2&1 v+ v+ ~ / "~v ~ v& ~@v' ~@v$~ &79.11*7.* v$~ v`   <.3)89.11*    1*.(-9*7<.3)  3&(-7*(-98    89&70*7<.3)  3&(-1.308 vP ).*<.3)89&*70*&*3)*798.(-  <&*-7*3)*.3*885.*18.3).*8*3'*7*.(-*3 v3 <*7.890&343.*7+:*7;47)*7':0:).89&3 v & v :3)+:*7-.39*7':0:).89&3 v' vvX>~~(vb/>~ vl>vq !~Hvv>~~(v/>~ v>v>~~(v(>~ '>*'>*'>*'>*'>*'>* v>v !~HvvvvvvvvvvvvvvvvvvvvvvvvvvvAADDDDD]@7A !@v&88*2'1*7)*24v 47,!v )+.1* (v'*,.3v(1)-1)+.1*.3(-1v21)(?*.1*3v< 1445vF1)'85&19*3vP 1445vZ1)-1 & vd .3(-1vn)/3?1445vx .3(-1v)*((v/73?1445v7*9v*3)vvvvvvvvvvvvvvvvvvvvvvvvvvAA2D3D>D?D?D]@7A !@v &88*2'1*7)*24v'.1).3;*79.*7*3v j47,!'*,.31)-1"%".3(-11)(1)'71-1((+77-1.3(-1)/3?$.3(-1)*((/73? 7*9vvvvvvvvvvvvvvvvvvvvvvvvvvoKpKNNNKNN]@7Kn܍ k!@v 4$'>(-?<*78(-0*v5 *@"!}@u _w(z( Lw >+ +"Lw(z >u<# [R++s#r*"@* * @ "*@"!6*@""6~v:( *#""6~Lw(qz( ((cͦ|h|y()z(!D}"!6!""ͦ{( :s B|{x2͏|:O* "*Aw#"!5 v*"@* * @#w>u<*[RDM!}@u _w(z( Lw "*":wrx(`i""" :w Fwrx CLw(z ͕y*~"#*#*u ~#("( ~2@#~2@###~(y# #":w"((ǹ(&T]#~8&8"R}+V#^#!(8= DM8 = ޯџFww"Yw "CɯGK~G#~ЀO#*"x(!6:w( 2Fw[ͧx(:w (͏ww:(!BDM:w H Fw!x:w ((DM*~ #~ (O#~#" ~*+#~(8@0((  "#N#FFw(] GO:=x[ͧxx`iKBM @ ͎x(*"rx(!7A x!!qC *D *:= x"rx!CEm{Fy{Gb{H{I/{J<{KA{Lz[ͧx [y*"rx(q#p#6~"*~#u  :[ͧx [y*s#r#6~"*~&8#~((( 8@8>~#":wz":w] 'K[#>u<(/~ (CS#"x *q#"*#"*# y *#  ~8 @0 #("x=͞z<2*~#":wzx(#:w (Fwx!!q:w#"{͞z(z>!w{~2͞z(:Oz!y(>k͞zx>yx>ǡy*~#"2˿G*:wx@y#"*"ͅ{!~ (*~#"0G:w(]!4!: > >w#: 8 R86#6#:O(:w#:w:w#:O( :w#:W(:w_[s#r:O!| F:2Ow#yw#*[zU|{U|[#u w* :GU|#>8*"@ :;@0:%@< * @T]! @ (08 (08  "*2: '/7?@v@ABJCKDEMFV^GWgoO_'.9E71(77(717781&87&81.&8717*8E8*9E&))&&)(&8:'8:'&8'(&&3)=4747(57*95457**=/5L1)85/5G/54:9@.3&@*=85*=)*-)*(&11G5:8-(&11&))&&)(&8:'8:'&8'(&&3)=4747(578934*=&+&+)/3?)/3?/7/7/73?/7?/73(/7(1)J&))L1)'(1)&'(1))*1)&)*1)C1)LC1)C1)&C.3()*(.3()*(1)I71(77(7177)&(58(((1)I-&1.3I(4:9I(8'(-1&)(-11)C1)JC3*7*97*9.2.2.21).1)&77711)(5.34:91)(5.34:91).(5..3.49.1))(5).3)49)1)71)&255*54(3(?3?&&1-*)('8585)*'(&+&+)*'(-1.=.> d')*+47,'*,*3)&88*2'1>(4251*9*34*77478v!u"@@4 v &88*2'1* v/ ?=$&88*2'1*7,*1&)*3  9&89*)7:*(0*3 vA "~@v%$#~vvvvvvvvvvvvvvvvvvvvvvvvvv~HHKLK@KK]@7@ !@v '.47->9-2: v?  v .~@v  ,*':7989&, v !~zv+,+v( )&9:2)*89&,*8 v2 !~zv< )9++,vA)9~ ~ vFvH? vP '.47->9-2:8 vR +:*7 vZ<++#~`#~`v_~H~2IN C N6T] x Æ@* @K "$N6! 6 "7A";A#"/A"@AK @v '7.(04: v(-?<*78(-0*%$vv 1.991*'7.(04:9 v + :8*0*>8"#(439741'&924;*2*39 v" >4:-&;*!'&118 v$! 9>5*.3;*78.43>4:<&3951&> v& '&1143*9.2*'4:3(.3, v' '&110**58'4:3(.3, v(8v*+"#"~ ~@ ~8~v,*"##~!~ #~X8~v2 *39*71*;*1% v4A !~Pv6A ! ~Xv8A  A % !~Pv:1Av<*"#~~ 1~@~v>vF$ vH7~~ vJ! ~`  vL7vN$  vP)"# !~vR" $~D~vTG~0~ 1*;*1 1~0 '&11 ~( '7.(08 vV" $~D~vd'~!~ vf)# ~9'$~`vn,8)~~ @~~vp("!"~8!"~8!"~vr"!#~ 8!"~vx~@~vz~B~v|7@!~v~$~D~%~>7v~F!!~7v(&11"!!~v'vD$~~@ <&39 ~@ 51&>&,&.3 ~0~@vA > !~HvA 3 !~vvvvvvvvvvvvvvvvvvvvvvvvvvvCCFFFFFF]@7C M!@v@* @!  #6#6 #6 # * @/ "du "d# "d!"d>@2 dx2d*d~< 6+w! dN*d | "d* @ T] s*d++~ # ~ ͎AE *d+"d6######6*d6#"d#####6*d:dGW #_ +~(##~(++++>@2 d"d6.: d(=!dN <<2 dG x @*2@M|("DM>!)00= |怰B0#R"2@vꨦ(-?<*78(-0*vv -  v$ v6~(~ v(" $~D~v*$ v,$ (281 v21"!!~v<'8!" ~H!"~!"!~H v>2. 8~@8~8~8v@. - - . vF3~ ~ - vP %%%~yvZ ~pvvvvvvvvvvvvvvvvvvvvvvvvvvaRbRzUU{UHN{U{U]@7INb ;\+!@v O/4-3<44)<*)3*8':7><*892.)1&3)8v -.~v 1*~ v 1~v8(47*~v'&118#~`v %~ vv ~zv v &#~`v 3%~ ~(v -+~~ 3"~!~pv3~ +v+v3v+~#~v3!~T"~|v3+v3v+v3~%~v 3~v3vv?@~@!~Hv :%~vv(v3+~"~|v4 +~v5+v63~~v78+~~0~ 3~B~pv83"~+v9+v:3v; :$~v<?@!~ ~8v=~~@v>v?vFvGvHj!~ ~  ~(~ vI+~ ~ vJ3~@#~`vK-3!~ + ~(3~p+ vL3vM+vN :$~vO?@"~@~(vPvQvdvevf6~(~ vg+~ ~ ~vh*3~(@~ !~ ~vi 3+ vj3vk+vli$~~@ %~ ~`  ~  ~` ~( ~` vm :$~vn ?#~XvovpvvvX~ ~  ~(~ v+~0~(v+~0 v+v :"~@v?@!~ ~ vvvv1*v~~ 8(47*(&891*'&118 ~~ 8(47*8(47*~$~1~!~H #~`'&118'&118#~`v_:?    :~?~  :~?~  :~@?~  vH%~~ ~ ~  ~(~ v*~~ &3,1*4+*1*;&9.43 v*v s~ ~  * !~4  * !~4%~~  * !~4 * !~4v #*$~ *~ ~v*~~ 85**)4+(&3343'&11 v8v$5~~ v)-~~ *1*;&9.43 * 85**) 8v. ~~ 57*88+ v8A + $~vB+~ ~~vL/+~ v+v=8B*$~4v>8B*$~4v+~>"~v 4~z# =>+"~++v=+!#~2  ~/v 4"~@ ~ ~%v#~z# ==+"~@4~v*("%$~!"~"%%~v(~ ~/v#~z# ==+"~@4~v(+vx'&118'&118~vz=+!#~2  ~0@v}74"~@ ~ ~z# ==+"~@4~v%($~(%~1*1*~pv($~(%~:?   :~?  :~? :? :~? :~? :~@?   v"($~(%~11~v,($~(%~8(47*8(47*!!~v1*"~ ~;v'&118~~zv!($~(%~~|v+~!~Hv+vv ~zv8(47*-.-.8(47*vA~~ 34(&3343'&1181*+97*51&>  -.8(47* -.vA ~{@vA 7 ~@vv (&891* vv v +~~(v + <*11)43* v +v c~~   ~~   ~~  ~@~   v c$~~  %~~  ~ ~ ~(~  v R~0~ 8(47* 8(47* -. v 8(47*-.-.8(47*v -.v $ v  ~{@v#(v#-v#2~~ 9-*(&891*84+(&72&.3  :8.3,>4:797:89>(&3343>4:2:89)*8974>&119-*(&891*88:774:3).3,9-*(.9>4+(&72&.3+.789*39*79-*&3,1*4+9-*(&33439-*85**)4+9-*'&11&19-4:,-9-*(&891*8&55*&7.381.,-91>).++*7*39548.9.438*&(-,&2*.9<.11&1<&>8'*5488.'1*-.99-*29-*&3,1*4+*1*;&9.432:89'*,7*&9*79-&3*=(**).3,$)*,7**8.9.85488.'1*8-449&'&114++9-*8(7**3&-.,-&3,1*-.9&(&891*439-*'&118)*8(*39 v#<)~(#~` 57*883*<1.3* v#FA$~l%~ v#Pv#Zvvvvvvvvvvvvvvvvvvvvvvvvvv+E,EDHDEHDEHEH]@7DB} !@v 6*2@M|("DM>!)00= |怰B0#R"2@M* @A ##6z 4 {>W* Nx((++~v6#6" N#6#6 6+6##~v6+6" N+6+6 6#6:)N(N:(N(#* @>+6##~v(+6# >2)N* @ >#6++~v(#6+ >2)N>2)N:(N/2(N* @ >#[*NRA6!wR>2'Nv!*4NQB"4N*6NQB"6N*8NQB"8N:2=N T]~(8͂@>8#(+#('+++(!+(+(+(###( #( !=N5bk:2'N( 66&:@* @#",N6#6#6#~vB6 6#6#6#6*,N#",N*,Nw#w#w!-Nw*.N|@= !&N> xدw* NBB4*"N~. 6:&N ""N~ 6.6 6!&N6(((B*$N+!.N5*$N>&46+v;!"C"C* ! N6#* @" N!"$N!"*N!":N>2&N> 2/NC #w -.8(47*8(47** N6+6##6 6:/N(==2/N* @ 6#####   ͹@!"(N> 2.N>20N@BB!0N5 !.N~C!'N~ *AͼA͐B> 20N͎D!0N5 *$N+++C #(0*$NC~+x x(rC* @# ~?w# v .3;&)*7 v%$'>(-2?<*78(-0*v 8(-<.*7.,0*.9% v=v"#~$~~ =v #!#~vvvvvvvvvvvvvvvvvvvvvvvvvvGGJKJ~GJJ]@7G !!@v"'()*-1&'()*&+853??3((545*520>7G 0P7Y0b7j#0r*7z$$$$$$$$((((((((,1IOy,6Iy,1ISy,9I\y,1Idy,2* @"*+"*#">2*#"~2:8H8d~!  :0 :  :! yz(=ր!y{3`( *#"~2:! z@|:G(ʖx!z|O ~ʖo&"*|v}v* ":9*F2x#"A~T~h~ʞ~~~~ ".͋> ͋*#"~v}*##~v"+~v}*#"~#OG |v}v}:!1-o(!=.g(!>.|͋}͋́~}>͋́~>. *:0+#">͋~v>͋}:ʤ~!yO ~͋}::Gͭ!yO ~͋#~͋}:͋}:!y:8v}* "*#KBE*~v͋#*! "*#"!5+}W͋z͋*w#"!"}:3)+89&9*2*3ʞ~v! y!@ }!D!y"@v ).8&88*2'1* v(-?<*78(-0*%$v 57*88&3>0*> vA #~`v$!~vvvvvvvvvvvvvvvvvvvvvvvvvvN:QQ-UqUNqUqU]@7N 2v!@v7'>(-?<*78(-0*/:3$v* @ "d"d"d"d"d"d"d* @1"d7" df"d"d " d! " d!"d"d"d:(d!($%"d>('2)d!F""d* @"$ds"&d[B?DC( DtEDE>E[BnD?DC( DDE͈E*d"d*dR "d!*d"d*dR "d>E[BnD?DC( DDE͝E>E[BnD?DC( * @+"d>2 dDtE͝E͈EE[BnD?DC8+F :(d>2('2d>2 d*d"d[BnDͳDCD͈EEF,&1&(9.(&vEx8;*d~ 3:d= >w+"d>2d*d##~(ͤC6 6   !*d|(~6 "d>>2d*d[d~ x( *&dR(! *$dR(!*dww#w#w+w+w*d "d*d!66#6#6+6+6mF*d| xO #*dD"d>w2d~( 2dͤC:dw*dN:d:dG >mF> > 6+"dx<2dvTT]~. >* d,D>* d+,Dk >* d+,D*d#~ S6"dJ= >* d++,D: >* d+,D>* d++,D!((ʗF >(:dF0w w+>111* @##~+w. >06~6.(6!## *d: dO: dG!~(4 #>(: d(EE !~6w +* @>+6+~v(6##*d!R~w# ~Rw#vEU:d*dw 6Kd*dB( *dB( B !! ! w"d>=>ɒ8sEU:dKd*dB( *dB( J !! w! "dE:)d*d66.E:dͫE~(+6E:dͫE64: dO}G0*d!+*2@M|("DM>!)00= |怰B0#R"2@2d*d6*dKdwB( !*dKdwB* @+K"d! (wC"d* d~(6#66#6* @# ~?w#   *dr#r r#r#r+ r#rYFYF> *dN* d" d* dr#  YFYF> >* d+++,Dvv  '&991*89&7,&1&(9.(& vb >4:(&324;*>4:78-.5<.9-0*>8"#8-449.3,.8)43*'>'42'8&7*)7455*)<.9-% v 8(47*9&'1* v( 74(0*9!598  . v* *3*7,>!598  v, '&8*598  = v. (>143!598   v0 2*9*47  4 v2 (*397&174'49   v4  v6 598   v8   v<#~@~  1*;*1 v>1 Av@1  1  "~xvB1  "~pvF!" ~HP1   vH&  ~x1 vP8 #~`"~@vR3~#~`vT8 3 vV3vX18"%"~!"~"%#~#!~;vZ" $~D~vd~~& vn~@~@8 #~`vp3~"~@vrD!~p3~@3~@#~`~03~@8 3vt3vxA ~pv1"!#~zv~8%~v1#~ v 1#~ v&1!"~ v3~"~@v8 #~`383v3v$8 "~@8 #~`#~*v3~"~@v8 #~`8 33v1"~@3~~v8 18 1~v1v8 38 #~`vA #~*vA #~,v ~Hv!!~  v3~ ~v83$~"~@v ~8  v 8 v 8  v 8  v3v'?   v~ ~? vK~@~ -4<+&7(&3>4:.3;&)*9-* $~ (>143*25.7* v"~~? v#$~!~  57*88&0*> v" ,&1&(9.( v,A ~v6v@ !~ vvvvvvvvvvvvvv-4<+&7(&3>4:.3;&)*9-*vv(>143*25.7*vvvv57*88&0*>94(439vvvvvvK P ki9.H@ F !" Q_ BBE'FE F F F]@7Bq Xء!@v 갮v"! * @ #6##66 #  #6* @d>4 +}|ZA>> y >!d"d*d^#V#~#"d!d6(O!@2d NyGbk ~(!d5=A4( ZA>64[d:d+r+s*2@M|("DM>!)00= |怰B0#R"2@v,*8(-<.3).,0*.9""#v( &942* 4 v2'*<*,:3,"! %v<(-?<*78(-0*$$vd.~~ vf 444 vh.vj vl~$~ vn""#~~@v1"! %~Jv.~~Hv 4 v.vA ~^v""#~~v ~vvvvvvvvvvvvvvvvvvvvvvvvvv DDHDHHHH]@7Dq 7!@v>*2@M|("DM>!)00= |怰B0#R"2@H>~ *d6+>( >.6"dE#>} *d6#>(>.+* @ >. #6!>>(6.ͪA*dt| }DM* @^+4> 6Cd @̓@}O* @% 6.v'?  v 4,-489)7.;*7%$'>-89&22vv" &3+&3,8,*8(-<.3).,0*.9 v;v '*8(-1*:3.,:3, v&v!"~H~v$!"~H~ ~0;v"#!~&~ v""# ~!"~&~ vv.~~(v ? v!%..~(.~@ v".v$$~ ~` v&~  ~` v(A8~ ~#~`"%"~!"~"%#~v*~ "~@"~v," ~ ~` v.# ~` ~`  v2(!"~H88!"~!"~v4!"~H8!"~v<1""~vF/!"~H!"~!"~H# ~.vK !~zvP ~8vvvvvvvvvvvvvvvvvvvvvvvvvvDEEE]HH^HiHjHjH]@7DEx !@v b*2@M|("DM>!)00= |怰B0#R"2@HI *d6+>6"dY *d6#>6"dʹA3dKd "dQ *d"dA *d"d *d#"d* @ > #6!> 6>̓@}_*d>v( (6 6"d*d Kd @* @+4>6v ,7&3)57.=vv 8(-<.*7.,0*.9 v " v!" ~H~v?!"!~H ~vP1""~vU8~!~HvV8vY<?vZ %~vvvvvvvvvvvvvvvvvvvvvvvvvvWWZ[Z@ZZ]@7@iҍ u!@v -&22:7&' vv '?  v'0! ~ v0'$$~{h},{v(&-  #~O4֠v2-& #~$0v<&)$#$~.(vF1 $~ vd~~@ v'~@#~` (7*&9.;*(425:9.3, v#!~  2477.894<33*</*78*> vF~ :*'*797&,*3.3?=$$'&8.( #~` ;43+7&307*-*7 v4 v 2~0~ .3).*8*285.*1.89*8)*.3* vRE &:+,&'*/&-7*1&3,&18 ~ 04*3.,-&22:7&'.)&8&39.0* v! 8:2*7.8(-*7*.(-?:7*,.*7*3 v#%"~@ 97&:89):).7)&8?: vG?   v ~;vA / %%%~v )~v 5~v ?~v 5%!~>v8$~/v-~;v*-8vL >~@vM&->!~vN .!~ vO 6~v4 )~vfvg" -&22:7&'.1&88).7'*7.(-9*3 vh ??~vp# .2/&-7* ? )*.3*77*,.*7:3, vz# 89&7'*3 ) 2*38(-*3-:3,*78 v!. 2*38(-*3<:7)*33*:.3).* v 89&)9&:+,*3422*3 v55.v6~~`v55~v *.3*+:7(-9'&7*8*:(-*).* v" -&*1+9*&11*7*.3<4-3*789&7' v # <.7-&'*3/*9?9 5 *.3<4-3*7 v  ).*89&)9'*8.9?93:3 &-&v . -&1&3)<.7-&'*3574-& v I&)> 0,0473,**739*97&99*3 ~ -&'*3 '0* 0,,*+7*88*3 v (8 ):-&89)&-*7 '08 0, ~ ?:7;*7+:*,:3, v ?~0$"~`v (~ @v >(#~v 0= 1&3)<.7)2.9 &)> 0,574-& ~ ,*-&3)*19 v 1? v ,#~~1 1 #~~v <.*;.*1-&<.1189):0&:+*3 v 6v 2*76v 6-&6v 6~$!~v >68~N@v #~]v ~Hv 6~%%~Tpv &&6v 88>6v (~v ~zv G,#~~1 1 #~~v H :3)<.*;.*1-&;*70&:+*3 v R6v S2*76v T6-&6v U6~$!~v \6&!~Zv f #~av p  ~Tv &&6v 88>6v (~v,#~~1 1 #~~v3 <.*;.*10,<.1189):)*.3*2;410?:*88*3,*'*3 v6v2*76v60'6v6~$!~vh68 ~`vr #~]v| ~ v886v (~v/,#~~1 1 #~~v0! <.*;.*1-&<.1189):*.38&**3 v:)v;2*7)v<)-&)v=)~!~vD)~$!~vb)& !~ vl #~avv ~ v)~8 !!~0v #~]v ~ v)~ 5!~`v#~~1 1 #~~2*7 -&&'*7):-&893:7 5~ 2*38(-*3+:*7).*+*1)&7'*.9 ~ &184 v\ ~ v88)~v $~zv>(v-)>v *~vZ $~zvd$(~(~!~%v *8(v 88*-v $~zv+.(~ &85~H~v(6~ v,$6~ ~@~v|5(~@v)5(v) !~ffff5!"~/v%5?~5)~H5?v5(v )))v !~`vv` ~~ )~@ v v0 %%~v#~~1 1 #~~2*7 &'*7'*)*30*)4(- ~ -&22:7&'.):-&893:7 '08~ 0,,*97*.)*&184 vv #~~1 1 #~~2*7 -&&'*7'*)*30*)4(- ~ -&22:7&'.).7,*-4*7*33:7 ~&-& -&1&3)&184 v4v@(@!~ ~vJv!4v!>D  v!?v!\5 -&22:7&'..(-0&333.(-99:3<&8):;*71&3,89 v!f$ 3.22).7*.3*3&3)*7*3;*7<&19*7 v!gv!z %%~v!v! v! v! v! v! v! $~Hv!v!C .3)*.3*77*,.*7:3,8?*.9;43/&-7*389&7'*3):7(-8(-3.991.(- v!8~H5~H 574?*39)*7'*;4*100*7:3, v!5 -:3,*78)-.38,*8&29 )~ 2*38(-*3 v!1&5v!@ ?:'*,.33)*.3*77*,.*7:3,0&2*3&:+/*)*32*38(-*3  #-& v" /*9?98.3)*8 v"&-1  #~$ 34(- v" &-1 -& v"$ 5745*7843 v"V $~Hv"_v"`5~!"!~0v"1#~`!"!~0v"5~ % ~v"1%~% ~v"5~@%"~v#1~ %"~v#(]?  *.3*5-&39&89.8(-*&298+:*-7:3,0&71)*7,7488*-&*99**83.(-9'*88*72&(-*304*33*3 v#)##~`!~  v#*!~   v#+!~   v#,!~   v#-!~   v# %%~v$ )*.3*8(-<*7+&*11.,*&298+:*-7:3,7.*(-93&(-3*74:3).<&3)*28(-7*(01.(-*3).*7*89'*;4*10*7:3,?.99*79;47)*.3*3*398(-1:*88*3 v$*#~`!~  v$"!~  v$"!~  v$"!~  v$"!~  v$"!~  v$"!~  v%X %%~v% )*.3*&298+:*-7:3,-&*99**9<&8'*88*78*.304*33*3<&7&'*784389,&3?*797&*,1.(- @$~L5~ 2*38(-*3<:*38(-*3)*.3*394) v&v&$ v&v& ;*78:(-89):*834(-2&1 v& ~;v'A / %!~mv'v'- ;43).7-&'*.(-3.(-98&3)*7*8*7<&79*9 v'? v' %%%~ vvvvvvvvvvvvvvvvvvvvvvvvvvmGnGJNN@NN]@7@ "~!@v -&3,2& v$ vA ~0vA  ~@vv(v28   v48 v6.~#~v8  %~h  v:.v<8 v> ~~@ v@= < @~H~vB.~%~vD#~`~.  vF= .~ #"~vH.vJ#~`~@  vL1.vN = = 1vP? 1vR +~vT 3~vZ!~ ~@ ;*78:(- vd 33~vn~ ~03vx> vz>  & >  ? ~\v|> ~~v 7~v .~1v> = .!~v 7~v#~`.~> v ? .> v.v7 ~Hv.!~p~@>  <&73.(-98 v!~p%~h  v ++~v~ +%~>v~@"~  v!~p  v ~Hv. ~~0v.#~  v.v ~Hv ~#~  v ~Hv ~$~ v!~ #~  v ~Hv% ~!~H  !~H  v ~Hv"~@!~H 4 v ~Hv%#~`!~H  !~H  v ~Hv#~`"~P v ~Hv%~!~H vA~0~( 8477> ~( 8.* ~( -&*3,*3 v" !~zv,> = #~*v6#~`~@= v@? = v.!~p~@>  <&77.(-9., v!~p%~h  v? = ~Hv2~0~( '7&;4 ~( ,*7*99*9 v)#~~@ 34(-*.385.*1(-*3 vA !~vA !~vA / ~ v A 3 !~vvvvvvvvvvvvvvvvvvvvvvvvvvvd (425:9*78.3(1&.7423.':86:&)7&96:*7:1&39857&>)48*8(-:7<411*9473&)42.0748045).&2&39).&548.9.;(&88*99*'&3&3*'&19-&8&72.3:9*'&3,040-&3).0&504-1*35499-&8*3+:88&721*:(-9*-.*7&7(-.*-.30*'*.37.3);.*-+.8(-*78.2:19&38.3+43.*9*55.(-0:-89&11)425+&++,&1455)412*98(-89*&7.31&(0&++*'&8.(5&8(&15.3,:.3'&(04'89'&)*<&33*+7:*-1.3,&78*3&1-485.9&1?>&30&1.&5+*12:8?>57*88*&&1*58.143+:309.435&72*8&397.(-.3*24340*19*1*;.8.4324-.0&3*7<.33*94:&2*.8*3'*11*;:*89*55)*(0*,&:3*797.42*7(*)*8*774707&;&99*0&;.&7&:94'&-32&7,&7.3*&5+*18.3*41.;*34*11&>4:91&;*3)*1+*1.=3&8+:*-7*33&;.,&9.43+1.5+14589&:)&2289.(-574'*89*34,7&5-<.*)*-45+<*,,*3488*<&992*9*75*7.80452&33*6:.3,&7)*74'*&5489745-&3,*1-&0*3&)2.7&11&+439&.3*1&)*3).*'2&72*1&)*9400&9&9.55+*-1*79.39*3+&889*1*+439.504-17&'.).;.)*3)*8(-2&773.25479*:7*=5148.43*1*+&398*,*1>&(-9.25*7+*098*2.04143459.2&1e 0 j7Fkw  X]RRUDUIBUU]@7JBF̍ q' !@v* @!  #6###6#6# #6>!dw#>2d B!d5:do:dGgoc"d~ DwDM_W:d( `i#f%8ç( `i+f%8:d ( ! f%8˧( ! f%8!dszʰA0:dʰAA:d_|*d8%8C(4!d4*d)$:S(+5!d5*d,)$(8K(44!d4*d),[( 55!d5*d$),* @#B!pü@ B:do:dGgocf%0!d4ü@*2@M|("DM>!)00= |怰B0#R"2@"dA$B|2dA $B|2dc R#2B+)2'41.8.*79:3)04*3*38.(-2.9)*39&89*3./0:3)2'*<*,*3&'*7;478.(-9<*33)*7)7&(-*?:89&70,*7*.?9<.7)0&33*7:*'*7*.3*<&3))*8.77,&79*38857.3,*3 vP'%~~ 84118148,*-*3 vU-2  2.=!2.=!!2.= vZ& v\& ~ / %~0vdvn .77,&79*3)*8)7&(-*38 vx8~zv2!~v9!~v.77,&79*3"! ~vL.~!~vV6!"!~H .v` 2.6!"~6#~~vj.v-~~ )*7.77,&79*3.89+*79., v0~~ v,0~ v0v =~v>@~ ~v"~>~=~  v-=~=~v->~>~v<>@~ ~v~<>~p  v 8=!~pv8><>v6=~8=~v6>~8>~v& Av&  !~;v #~Zv8==8>>$~zv&  0 ~zv&  / !~@v&  . ~;v&  2 !~Zv !~;v )=~v )>~v.==!~p>~v2 ~zv+=~=~v+>~>~v.~~v +=+=)=v +>+>)>v->~-= v+>~+=  v -=+=v->+>v.v==)=v>>)>v =!~p><>"~;vH !~;v )=~v )>~v #.==!~p>~~v 2 ~ v ~|v )=~v )>~v .==!~p>~v )2.=~!~ ~@v ~|v )=~v )>~v .==!~p>~v )2.=~!~ ~`v ~|v'0~>~~>~v0~= v0v 88~v !~;v'0~>~~>~v0~=~ v0v 88~v" !~;vh0~=~~=vj~>~0 vl0vr 88~v !~;v0~=~~=v~>~0 v0v 88~v !~;vp3~~ 8.*-&'*3,*<433*35:309* 8v %~ vX=8=#!~ZvY>8>#!~\PvZ=8=#~]v[>8>#!~_pv]8=!~p#!~\Pv^198=!~p8>~%~#~[v_.=8=!~p8>~v`2 #!~\Pvb )=~vd )>~vl7=~8=~vn7>~8>~vo.~~vp 7=7=)=vq 7>7>)>vr6>~6= vv7>~7= v}6=7=v~6>7>v.v 8=8=)=v 8>8>)>vA98=!~p8>~98=!~p8>~~vv8>~ #~]v198=!~p8>~%~#"~\v?28=!~p8>~~!~#~]v )=~v )>~v #~[`v8=~#!~_pv198=!~p8>~%~#~^0v%.=8=!~p8>~~v2 #!~_pv )=~v )>~v #~[`v8>~#!~Zv198=!~p8>~%~#"~_vH28=!~p8>~!~p~!~#!~Zv )=~v )>~v #~[`v@4~~ )*7)7&(-*-&98.*,*+7*88*3 v#(!$~$~ v#)"~ $~ v#*#%~#~` 3*:*885.*1 v#2& v#4& ~ / %~0v#<& ~ / %~0v#F5~~ &19*81&'>7.39- v#P& v#R~<>~p v#Z& ~ / ~v#d ~Hv#v# 9-&98&11+4108 vvvvvvvvvvvvvvvvvvvvvvvvvvOO S(G S:E S S]@7;ET <Ȩ!@v/:25v -~ v /~ v -~ v 5~v ?~v =~ vv $ v v $ v v $ v +~v&~#~vv ~x v&vv$ vv$ v16"%"~!"~"%#~ ~v(//?v-66?~v./-?~v2A ? 66~v3A  66~v4?~"~pv5!/~ / ~`"~pv7,6# ~@~ v8),$~l,$~,,~ v9 ,#~Xv< +~v=6$~~zv>6!~~Hv?6!~!~v@$6#~X?~~zvA 6"~vB+6vF ~ vd 55~vf -~vi5=~Hvn ?~vx "~|v ?~v --~v " ~v==~ v2~~ v4~ ~ v -~ v ?~v ~ v /:2 v% ~ /:25-89&22 vv? /:25.89*.385.*1'*.)*28.*,*,*3)*3(425:9*785.*1*3 v v Q 8.*04*33*3.-7*35:309)*78.(-&:942&9.8(-;434'*33&(-:39*3'*<*,9 v8 2.9?3&(-1.308:3)2.93&(-7*(-9889*:*73 vvD 84'&1)8.*.7,*3)<.*)*37&3)'*7:*-7*3.89)&885.*1'**3)*9 vvZ )*7(425:9*7'*,.339)&333&(-)*7-.,-8(47*1.89*;43&11*.3*2.9*.3*23*:*385.*1 v!)~(~ 3*<1.3*)7:*(0*3 v"4 v#v&~  /:25 v+v0~ :2.-3*3)&81*'*38(-<*7?:2&(-*3*7?*:,9)*7(425:9*7.3)*72.99*)*8'.1)8(-.72*8?:+&*11.,3*:*5:09* v5v:k <*338.*;434'*3:*'*7).*8*5:309*+&-7*3<*7)*3).*8*,*14*8(-9:3).-3*35&88.*793.(-98 v<v?d 84119*38.*).*8*&'*7;43:39*34)*7)*78*.9*0422*3)'*7:*-7*3.89)&885.*1'**3)*9 v@vA vD)~(~ 3*<1.3*)7:*(0*3 vE4 vFvI~  /:25 vKvN{ +:*7/*)*35:309)*38.*):7(-:*'*7+&-7*314*8(-*3*7-&19*38.**.3*35:3092*-7&:+.-7*25:309*04394 vOvP| ;42'4)*304*33*38.*3:7<.*)*7&:+89*.,*3<*338.*&:+1&3)*3).*8*789*.3<.7)&38(-1.*88*3),*14*8(-9 vQvRs <*338.*&11*5:09*&',*-419-&'*3<.7)).*5:09*:3)).*'4)*37*.-**73*:*79 vSvTQ vU)~(~ 3*<1.3*)7:*(0*3 vV4 vWvX~  /:25 v]vb ;*78:(-*38.*3:324*,1.(-89;.*1*5:309*?:*77*.(-*35:309*,:9#5:309*'.8-*7.,*8-4*(-89*7,*'3.8 vgvl/ ?:289&79*3)*885.*1*89&89*)7:*(0*3 vv6 ~`~ vw$ ;.*1*5:309*;.*1,1:*(0 vx$ v ~zv ~vv&~~0vv$ v&vv $ 8.*-&'*3 5 5:309**77*.(-9 v&~~ vv$ v$&v*~ ~~v 5-**v*~ ~@v,~ *~~v-,-,~v,v-*~5v4&~!~ v9v>$  vH&vMvR$ -.,-8(47* v\vf$  v,~%~vv6  ,  -,~   v,vv9  -~ ~   v&~!~ vv$  v&v ~@vvvvvvvvvvvvvvvvvvvvvvvvvv]]`'X`@``]@7@z N-!v 0&2* v54" #~jv ~  v!~  (7*&9.;*(425:9.3, v~@ 2477.894<3/*78*> vd&"~@!~  7*,*13,*+&*11., vn ~j`vx54!!~vA 3 ~ vv~@~ ,:9*3247,*31*.)*72:88.(-).72.99*.1*3)&88):).(-.32.99*3)*7<:*89*,4'.'*+.3)*89):-&89&'*73:734(-02<*,;47).7 v^~ ~ :3&3,*3*-2*7<*.8*.89*.389&22-*.88-:3,7.,*75>,2&**3-.39*7).7-*7 v #~/v54!!~vv3 +41,*3)*0422&3)4889*-*3).7  ?:7;*7+:*,:3, v ~Hv54!!~v ~;vH *.3,&'*;43?*.,9).7).*24*,1.(-*30422&3)4834(-*.32&1 v $~Hv54!!~vv> ):0&3389"2&1&:8)*.3*2<&88*7;477&997.30*3)&33 v"8 84119*89):/*)4(-8(-1*:3.,89*.3*4&8*&:+8:(-*3 v,J <*33):-.1+*+.3)*89"  )&33'*042289):,1&*8*7  <&88*7)&?: v6O 84119*89):3&(-).*8*20422&3)4&11*7).3,80*.3*-.1+*'*0422*3)&33 v@<~ ~ ;.*1,1:*(0):<.789*834*9.,-&'*3 vD $~HvE54!!~vFvGvJ# ):'.892.99*3.3)*7<:*89*&3 vKvL *.3*74&8* vO ~zvT(%%~G~@vY 4&~v^ ??~v_?~"~4v`va# <&73:3, vbvcvd" 2*7089):*.,*391.(-,&73.(-9 vevf )&8):):789-&892*38(- vgvh 97.30*3)1.(-<&8 vi?~"~Kvr 55~v|=$~@!~ v6~% ~kv5 ~ #~kv ((=v(( "~fvv$~~ ).*5>,2&**3-&'*3).(-,*+&3,*3  ~`~ :*'7.,*38.-71.*'1.3,8*88*3.89 #~~@ 2*38(-*38:55* vF$~~P 2.9 %~ ~ 0&2*1*.31&,* v !"~Cvv! ).*5>,2&**38.3) (( 02 vv -.39*7).7 vvv ):'.89.38,*8&29 ( 02 vv ;47<&*798,*0422*3 vvvv# )*.30422&3)4.3+472&9.43 v ~j`v54!!~v>Avv$ v>~!~zv ~;v #~kv>~$~Ov>~"~v>~@"$~*v> ~#"~>v>!~ #%~Ev&9~ @v09~~v:v;-$~~ /*2&3)-&9).7,*-41+*3 v<8 <&*-7*3)):'*<:89148<&789  ,1&8<&88*72*-7 v=_$~~ <.7)&30*3)*2*)1*385*3)*7*8-&*99*7:-.,*9<&82*-78*.304*33*3 vD 8$~vN ? ~vX  ~*vb ++~vl+$~%~vu 545~vv $$~\vw 545545v=~ @v((=vvv)4& )*.30&2*11.*'9).*8*38(-7.99 v  ~*v ++~@v+#~`%~v 545~v $$~\v 545545v=~~ @v((=vvv4& ~*v$ )*.30&2*13&*-*798.(-)*7*.3 vv# +&(-*38(-&11,*8(-<.3).,0*.9*8 vv$ +*-1*33:734(-*9<&!28*( vv  ~*vvv )*.30&2*1)&309).7 v +~v !~/vv3!~ ~ )*.30&2*1-&934(-07&+9+:*7 v,#~`+ 9&,*):-&8934(- 8 ,1&8 v  <&88*7.3)*.3*2;477&9): v%$ 0&338934(- ? 0422&3)484-3* v* <&88*79&*9.,*3 v4 $~pv> 88~vH8~ ~0@vJvKvL%~ vM8~@$"~WvRvSvT! 8.*-2&11.*'*7?:4'):*.3* vUvV 4&8*+.3)*89 v\ ? ~vf $~pvp&~H@vz&!~ ~ vvD *.3.28&3);*789*(09*7<.1)*7'*7'*789&22-&9).(-,*+&3,*3 vi~ ~ ,1:*(01.(-*7<*.8*<.11)*7?:89&*3).,*8(-*.(-.-7*14*8*,*1)+47)*7:3,'*?&-1*3 v6~ ~ &'*7-:*9*).(-;47)*35>,2&**3 v ~Hv54!!~vv, ):-&893:3?<*.:39*70422&3)48?:7<&-1 v&~ ~ #+1:(-9;*78:(- v 6~v $<&79*3&:+).*?&-1:3, v%~ ~ <&8<&*-189): v ~j`v54!!~vA $ "~v=@~ v=!~  ~vv@!~p~ -*7?1.(-*3,1:*(0<:38(-):'.89*390422*3 v545 ~*v 6~vvvV!~p~ ):'.89'*.)*.3*2+1:(-9;*78:(-1*.)*794*)1.(-;*7<:3)*9<47)*3 v  ~0@v$=~H@v.=~~ vBvCvDL~ ~ )*78(-*.(--&9)*.314*8*,*1)'*?&-19):'.89+7*. vG545 ~*vH 6~vIvLvO )*7?:89&*3).,*8(-*.(-8&22*19,*7&)*+:*7).(-  ):2:889).(-34(-*.3<*3.,  ,*):1)*3  -4++*391.(-).*5>,2&**3&:(- vV  ~*v`&!~H@vj&~ ~vtvuvv$ ):-&89*.3*4&8**77*.(-9-:77& vwvxvy$ )*.30&2*1+:*119)*.3*3;477&9 vzv{! &:+:3)+7.889,*2:*91.(-*.3 v|v} 5&&7+*.,*3 v~ 4&~v ? ~v 8"~@vvvv ):&19*70&794++*10455 vvv$ ):-&89)*.3&72*80&2*1?:94)* vv ,*7.99*3 v  ~0@vvQ!~ ~ ):-&89,*<433*3).7?:*-7*38411*.3+*89,*,*'*3<*7)*3 vk!~p~ <.*&:8,:9:39*77.(-9*9*3  07*.8*3;*71&:9*9<411*3).*  5>,2&**3&:(-*78(-*.3*3 v !"~Cv=~H@v=!~ !~(vvv ):'.89.3*.3*38&3)89:72 vv ,*7&9*3;.*1,1:*(0 v=!~ @v="~ @v ="=!~%v((=!v ~&@v(((=!v2v4$ )*.3*3*:*548.9.43.89 ( 02 v5v6 ;42&:8,&3,85:309*39+*739 v<vF=~H@vP=!~ vZ((~vdvevf# )*.30&2*1-&98.(-)*3-4*(0*7 vgvh" ;*71*9?9?:2,1:*(0<&7*3).* vivj 5>,2&**3,*7&)*+:8807&30 vxv:~ @vvv$ ):'.89.3)*7<:*89*,*8947'*3 vvv:~ "~6v" ).*3&9.43&1*0&2*1;*7*.3.,:3, vv <4-39)*.3*2'*,7&*'3.8 vv 3.(-9'*. v !"~Cv:~@ %~:@v! )*.304*75*7<:7)*;43,*.*73 vv" :3).25479.*79*357&*7.*-:3)*3 vv ,*+7*88*3 v !"~Cv:!~ !~>v# )*7?:89&*3).,*8(-*.(-'*3:9?9 vv" )*.3*-&:93:3&18,*1)'4*78* v !"~Cv:#~`!!~Av 2*38(-*32.93.*)7.,*2 vv! .39*11.,*3?6:49.*39*384119*3 vv$ 8.(-&:8)*7<:*89*-*7&:8-&19*3 v !"~Cv 97:9-&*-3*84119*3+1.*,*3 vv 3.(-9&:+0&2*1*37*.9*3 vv"v, 3*:*885.*13*:*80&2*1 v6 ~j`v754!!~v9A 3 "!~N@v@vT ~ v^v_v`" ):&72*7.77*7):-&89/&)&8 vavb 97.30*3;*7,*88*3 vh  ~0@vrvt)~ ~  vw'~@~ 2:99*784*-3(-*3 vy) ~`~  v|v ? ~v 8"~@v (~v (~v 6~v +~v 5~vv v ~ $~ 0422&3)48 v (~@~ .(-<.1197.30*3 v  -&1'*07&+9;47&:8 v  ;411*07&+9;47&:8 v  3&(-97:-* v  !1&,*57:*+*3 v "-.1+* v vvvvvvvvvvvvvvvvvvvvvvvvvvWW[[[[[[]@7Wn܍ !!@v@7$'>(-7.8945-?<*78(-0*v  4                                                                                                       v6666666444444444v,ꩩv!t>!V^(4^5V{8 z0* @ " @*t "t!@8c>v>2t ~  >#F  > > ># >v:t=2tf 9  !i"t##>wwT* @"t>2t!q" @ x v:t!D ~> >w#wtͲE:t!t2t( ~DwEDͲEE(w# Et~# !d:t#= vq cdd eeg hh xhpiij jjkkllsmQn UnBn?okobphp Vpnqqq }qVrbrerBshsttv:t:t*t"tgĸD*ttF*tFF= FF*t ~  "tFF= FF*G>w#ɗw#w#6#w#(w# t*t~# !E~v#^#V#*ttFF:t !C = T]*tFv *u "u*u+>u< ### +++~pG#~qO#V6 fEr+q+p6*t> (# "u!t ~( ('(2#|G:4@GdbjDMIGGQG|GIG!QG|G2IG!QGdIGQGv F !"()/01789@AHNOUV\]^defmnu{|}~v I*t"t!t?:tGĸD!t~(5:&@2t_!t~_I>0V 0(HN(DG2tx v f(˖! v(˖:t8x(͸D!t6ÊI:t :t ;K 7> 2t͸D> G!tF( >`2tx=2t!t6 @:tg !͸D:t_( !t5 ˟2t!t6_(6:t_wC( :t (;{w:t82:t !t  ˮ*t ~v( ##~++v("t:to(!t>w!Gv q:u2u!b"u2u*u^{#V#ʵJG~(x >4õJ#~(JKu _! ~(8 :u B˻ <!OG {~q0 >2u ~B(v !!~R ,>2 u ~R: u( = 2 u<2 uB< : uI++~## R~ :4@I ~( ( >DMtR*u8:u=2u6#6#q#p#w>###"u!u5ŸI:t=:t:!u2!u!u:u4!b~#(####+#dq#p#6#6#6>v N51&>51&>*7*t K FH!"u!t?tEJ͓I͓I*u+|  w#vt:t:t2t!t6fE!*t"t͸D!G!t4͜K:tg(:t!t:t_:t(!tk ##~ 6*tA ~ ! ~#### ~  ~( ((8 #>0!ts:t_V )!t~#  ~(8 #>0*t:t!( ~#    >0!t*~#6(4( !t~sW(9S 5*t:t_:t!( k(#+~ 6 > "uG:t_(2t×Gv!t ~( 4(( 6#!"u~(5*ty~(4(((R (N# "u:t !"u~6:t4_ !tG[u!b~# ~(####+w#w*u6!tG:#u=(:5@!#u6!t"$u:t=(*$u >w# "$u*$u6#6 #fE+6+6 v!tZw#!"tDG!bPw#!"u* @} "t!%@~< K!"4@!&u>02'u:#u=mFFHtEJ͓I͜KL:'uGfE͓ImMLZK:'uGfE:tOjN_UN>qN!t6*t"t!GqNqN!%@~<  fE~<(*t" @v"~@ vR >4:-&;*,497*1*&8*>4:7  ,.71+7.*3)2.885.,,>(7&?>  043,-&874''*) v(= .347)*7)49-.8>4:2:89  (1.2'&':.1).3,!!2-.,- v2X :3+479:3&9*1>>4:-&;*431>  2.3:9*89.2*:39.19-*<-41*  ':.1).3,':738)4<3 v<$ 9&0*(&7*4+9-*7411.3,'&77*18 vFO >4:<.11,*9&'43:84+598*&(-8*(43)8>4:'7*&09-*9.2*1.2.9 vP 8(47*9&'1* vZ6   !598   !598    598 598 v\3 '7.),*  !598  '&77*1  598 v^ ~zvdvn"~@ vx :8*9-*+4114<.3,0*>8 va "  (1.2')4<3  #  &8(*3)  $  ,4'&(0<&7)8  %  24;*+47<&7)    /:25 v: >4:-&;*+.,:7*8&3*=97&>4:&(-.*;*598 v -4<2&3>51&>*78 v51v"51~51"~@"~ v -8~v851v+51v5~51v+5~@v5v751vv,"~@ v6 +.,:7*8 v@~@~ 8(47*8 vJ%~~ -.8(47* vT 5~v%%%~jL75~v%~(5$~`v0%%~~vI9!"~!"~" "~h!"~" #~j!~Hv'8%%# ~j,!"~%%#!~j.v07575~v)'~H~}L$!~49v'~'~v0+5+5~v 8485v08585'v 85858v084* ~@85* ~@+5+5~v+~ ~v/"~@ ~+v9++5~@/ 6 /  / /~  v&9++5~@/ / / /~ v0+v:$~~ 51&>*7 5vDH$~%~ ,49 8 598 %~ 9.2*<&8 9 8*( vN%~ vX*0~ %~ '43:8 ' 598 vb!~05%~5  85vl85-8"!~"vv5-5v -885v%~%~-8v.~51v+.#~/v.v $~Hv 55~v5515~v+5~#~/v.~~v A .v ~Hv v%51~%~av* <.33*7.851&>*7 5-v4 -*,49 -8 598 v>vH 9-*49-*78,49 vMvR5~51v\55-5  85 598 vf5vpv#51~ >4:,49 -8 598 v 9-&98&11+4108 vvvvvvvvvvvvvvvvvvvvvvvvvv K K"N"N#NB#N#N]@7Bn܍ S!@v  A~  #AS@* @J̈́@̈́@̈́@̈́@#̈́@̈́@̈́@̈́@y  (7~[@S@* @Z{ z AS@* @3~< 6+w* @l[@>(7>w#S@* @|{ z HA !AA  # y2A !A+H!!!!!v ~ vv 1.+ v.~"~v܇%~#~`.  #~`.!!~.~."~@#~,.#~`   ~@  ~#~`.  v.vo~"~@   ~@  %~"~@   ~@  ~ "~@  ~@ v ~~0 ,*3*7&9.43 v ~ ~` v 2~v (~v E)  $%%%&%'%(%(&('$)%)&)')()$,%,&,',(,$-$.&-$0%0&0'0(0$1$2&1&2(1(2 v".~) ~v$5) .$~`) .~$~`$~4v&.v(G!~p%~ <.*)*7-41:3, #~%~ 24):8<*(-8*1 v* #~(v4)  vf2 ~v 8~vA~ v ?$~v 0$~v ?0  v(Av("~ v(!~T ~ v?0$~4v 8~v#) ) ?$~`0$~`v "~ v($~l!~@v?0 8v("%~ ~(v8?$!~"~?(~(!~ v@0!~<"~0(~@(~@#!~pv ?0  v 8~v "~ v `v b".~~p@!~Hv e?~@@"~v j0$~@"~v o?0$~4v t#) ) ?$~`0$~`v y.v A!~@v "! ~v (Av (("#%!~6!~v 2."#%!~6v 3.#~(v 4/~~xv 6("#%"~8/!!~"~#v 8/v :#~(~  &:8,*8947'*3 v < #~(v >/~~@v @./"~$`v BI~(~  89&'.1 /~/ *75*7.4)* /~v D #~(v F/v )Av ()#~(v .~@$~v .$~ v .v >~ ~` ~($~ v (!~H##~)v ("~p#~*v (~@v )!~H#%~)v 2~2v ~@v )"~p~@v .~) ~v 5) .$~`) .~$~`$~4v .v !~@vvvvvvvvvvvvvvvvvvvvvvvvvvKKN9ONNNN]@,7Kn܍ &!@v 1:3&v -8(~vv2'=  v4'>  v6'?   v<0)+"%"~~!"~"%#~vv= v7~!~ v> v7v7~!~pv? v7v= v-@%~v8~~pv--@%~-v7"~@"~@-v 78 v7v8v"3~~ 1:3&77*8(:* v$3~~ v&1~@~@ -8(v(9~ ~  ~` $~` v,8~~p~v.-~~v0H ~@!~ -"~@8-!~P%#~B@!~v2-v48v6" $~D~v89~0~=  vv )~v 8(~v 7(~v%%~~ %~h v 78~v 88!~pv&  v 7888& v7878~v78 ~A ! ~vA ? 8888~vA  8888~v& )+~7888v!&   &  !$~v&.~~ v( 7888  v* 7888 v,.v- ))~v. 7888& v0 !~@vD 7888 2 vN078%~88~P88#~!~vX 7888& vZ 88!~pv\ 7888 2 vb7(~"~vl.~7( ~`vn-.~@.~Pvp%~-.  vr%~-.& vt.vu " ~ vv!.#~X7("~~vx-.#~.$~`vz%~-.  v|%~-.& v~.v7(7(~v%~!~p < v.~~pv~ !~p  v~ !~p v.v~ !~p v 7888& v7878~vA ? 8888~vA  8888~v)78$~A ? A  7878~v& )+~7888v#&  & & 2 !!~ v 7888 2 vA ' #$~Cv-78"~@~v' )+~-88v'  4 '  #!~;v -88 . v -88' v-v #$~Cv.~!~ v -88 = v -88 v.v-~ -88  v-~ -88 v8(8(~'  v~@%~8(v #78~88!~p#~/v8(8(!~ v~@%~8(v7(~@ !~av)~"~;v8(-8(-8(8(v*)~#~~@ ,&2*4;*7 v ~Hv#~~@  v 8(~v !~vv ~ vp.~~@vz1%~@"~@~p@~ v1%~@"~@~p@~ 4 v.v !~zvvvvvvvvvvvvvvvvvvvvvvvvvv^^aba@aa]@7@2d t!@v@ 2.11.43&.7 v %~ v!~  (7*&9.;*(425:9.3, v~@ 2477.894<3/*78*> v(# ~~ 3&2*51*&8* v2vd 4~vp ? ~vr2 "~vt 8%~vv 6"~vx.~ ~v8.!~v.v& v & ~ & & ~ v&  &  2734'4)> v& vv 40 &   v 9-.8.8>4:73*<1.+* vv+2  /&3+*'2&7&572&>/:3/:1&:,8*54(934;)*( v@!~~\v 43&'.,+&72 v ~fv .3&82&1194<3 v9@~@~vL 43 2 ~@9~~@9 @$~`~ %$ v&  .8'473 v >4:75&7*398&7*;*7> v@!~~v 7.(- v"2@!~@~@v, ~%v6 5447 v@2@@~~zvJ9@~@~vT>%%$~y@~ v^J 43 2 ~@9~~@9 9~  > >4:1*&;* vh -42*<.9- 2  vr>>@~@~v| "$~*v/~~Pv-/~@/~@*~"$~*v ~zvv)$~`@~v$2~@@~~@v2 2~2 )  >vv->%$~w#~ @!~!~zvvN >4:&7*)*&)(4:1)399*11  (4:1)>4:&99-*&,*4+ >%$~w  v ~ v2~! ~v.#~}\(>%2v22.v; 9-*.39*7*8943>4:714&3  .8 . >4:-&;* 2  vv6~P@~v&66~! ~v066~v:$~H~H6vDvN >4:34<-&;* 2  vX4~!~;vb/~" ~ vl22*(>%vv0 >4:7*&73.3,8*=5*38*81*&;*>4:<.9- 2  v>%@"~@!~ v>>>%v/v #~kv /4'8:'vv >4:,49&3*</4'&8& v!#~1~p@!~ v 9*&(-*7 v*@ ~z#~v $!~Tv 1&<>*7 v *@ ~@$~@v $!~Tv (425:9*7574,7&22*7 v *@!~@~@v $!~Tv  ':8  )7.;*7 v**@~z"~zv4 $!~Tv> +449'&1151&>*7 vH"*@~CP~CPvR%(*~@@@!~@v\ >4:*&73 * &>*&7 vf0 >4:&)/:89>4:7*=5*38*8  94 ( &>*&7 vpv: >4:,4941&8;*,&894,&2'1*-4<2:(-)4>4:'*9 v8v8*!~CP%$~ev >4:,499-*0.(0 v !$~v 8v8~%%~wvv@#~3333%#~rv 8@8v -&-&>4:1489 8v %$!~v@v8@@8v >4:<43 8v228v !$~vB >4:&7*4++*7*)&(4.3574'&'1><479- )4>4:':>.9 v? vv;#@*!~CP~v? > !~@v22~CP;#v! 9-*;&1:*4+9-*(4.3.8 ;#v$ !$~vL9 >4:&7*8*7.4:81>8.(0  (4:1)399*11(4:1)>4: vV >4:-&;* v`"~ @~ ~@@vj7 9-*&8.4).85*58.&  7*,.43&1>->5349.(+1:4- vt $~v~ (425:9*7.9.8 v $~v8 .3+*(9.4:8+&9&1>7*  4((:7.3,(-743.('&)'7*&9- v:@~z!~zv22:v! -*&19-*=5*38*8(4898>4: :v !$~v+@~CPv ($+~+~@v@ >4:7,7&3)+&9-*7,74;*78/:89  ).*)-*1*+9>4: + ':9 v +:3*7&1*=5*38*8&7* ($v 22($+v !$~v*~%~av 3*<8+742>4:7'488 vv"~#~p@~@v1@~;~v#**1v(% >4:,49& 1 )*(7*&8*.35&> v2 %~-v< >4:7*+.7*)-& vA *~vF(( ~vP !$~vZ7"@!~@~v_**7"vd >4:,49&7&.8*4+ 7"  vn >4:34<*&73 *  vs !$~vx5 9-*)4(9478&>8>4:3**)&  ;&(&9.43)4>4:,4 v? vv;@~z~zv?  3  #~7v ,44)9-*;&(&9.43(4898 ;v  $~9v7 >4:/:89-&)&3*7;4:8'7*&0)4<32*).(&1(4898 ;v22;v !$~v4~!~;v ~zvv.~ ~v98.@~H~H~8.~@v.v?  v'=   v$ 894(03&2*57.(*8-&7*8 v= v/ .'2.3(7*).'1* %~? !~H? v; '&)2&(-.3*8 8~!~H? 8!~ v= v! :88:8*1*88څ !~H? v; 89.30>89**1 8~!~H? 8"~@v= v, 3(734(&8- %~? !~H? v<  %~? 8~@!~H? 8#~`v= v% 9<&949&1<7*(0 !~H? vD &.71.3*8 %~? 8 ~!~H? 8$~v$  v 8%~~~v3%~~ ':>8*11 +**349 v? v? ' ? 8 !$~Ev7%~~ 894(034 v8v#8~8 ~! ~@v %~%~ 6:&39.9> v ?  8 !"~Cv 8v 8 ~88 ~88v 4~v22888~Hv !~?@v88v8!v8!8 ~8!"~C@v@$~L"~Kv" 8 ~88 ~88!v$22888!~Hv& !~?@v,088!~ 8"~@8#~`8$~v.v18~"~v6 4~v; "~v@ 3*<8+1&8- vJ* &9473&)4-&8/:89-.99-*-42*4+ & vT " ~Mv^vc; &3&.751&3*-&8/:89(7&8-*)  .3949-*-42*4+ &   vh)$@!~CP~vr22)$v|' )&2&,*8-&;*'**3*89.2&9*)  )$v !$~v 4->4:/:89,49 v#>%$~w!!~\#!~Zv@ ~L# ~Yv (&3(*7 v #"~\v &-*&79&99&(0 v #"~\v 1*:0*2.& v2@!~@~zv222v 2*).(&1'.118&7* 2v@!~ #~kv !$~v >4:/:89-&)&(&7&((.)*39 v2@~;~zv6#@!~@~Hv& 2*).(&1(4898&7* 2v+ 7*5&.78(4898 6#v0 2226#v: !$~vl*~~zvv *~@@!~@v5 >4:&7*4++*7*)&349-*7/4'  +47 * &>*&7 v <4:1)>4:1.0*24431.,-9 v? vv?  3 !$~v"%!~s~ @~@v **~v !$~v +7424;*7<470>4:,*9 v # ~Yv  ~'v 7@~@!~@v227v3 >4:7-42*-&8'**374''*)4+  ,44)8<479- 7v !$~v44~ ~/v>@#~3333 ~/vH' @ ~vR9 894(02&70*9(7&8-  *&(-4+>4:7 8 8-&7*84+ v\$ 894(0.8<479- '  >4:2:89 vf- 8*11&114+9-*2+47&949&1  4+ 8' vp 228' vz 4~v !$~vv >4:-&) 2  v4~~v8%~~v !~;v]228~8!~ 8~8"~@8~@8#~`8 ~8$~v # <.9-894(0;&1:*>4:-&;*  2v 2~#~ v 2!*!~t$ ~v $2*"~t$ ~@v . &  <43 v 3 >4:&7*&2.11.43&.7* v 8  ~v B >4:14:8> v G# 34<>4:75447+&2.1>-&8945&> v L 4++>4:7)*'98 v V  ~v ` '&) &   v j  ~v t (148* &   v y 2&>'*1.+* v ~v 9-&30851&>.3,2.11.43&.7* v &   vvvvvvvvvvvvvvvvvvvvvvvvvvNNQQQQQQ]@7N&L ˹.?!@v!e"e"e"e>2e* @B "e "e "eͻ\@T@d@l@A+~v5A#5AA#~v5A+5AA!B[eR@ 5AA! [eR AB5A"e*e~(6:ew5A! [eR4AB"e~2e6*e*%@L B* @>+6#*eKe (Ce͕A*eKe (Ce͕A*eKe (Ce͕A(b(>(]r"BB(r#r#B(r B(r##B(r B(r#r#Br6+B(6 B6 ##B(6 66~v>:i4B=2i*ee~(*ee~( *ee~(*e}|!e|}PB2lk*xi[zi{OzG(2}i2iy(2|i2~iy(D_x(DW8 2~i{ZW2iK9:wiGyO8 O:|io:}ig :~io:igDM>(8>)0*@ ~_00G!eF /8w:{i >{(>>!kwi"i+++++~4IBCC*i:k(&:k( :k(:k(:i:k(!k 6#͏C>!)00= |怰B0#R"2@!eˆ*iBwiIB5 !e!i4*i#"i*i++~?($( ((I(((* @ 6#6#6 ~6 6#6#6#6#~6 6C:iC 2iC!e?>8>* @ w!i6>`2i>:i2ͨ@BA[A:i?G= >>Cͨ@CfDͨ@D[A:i?G= >* @ :i2i :i2iD66#v82.88.1*(422&3)'>2&79.3?<*78(-0*$v v $~zv%~%~ %~ ~( %~ %~ ~( %~ vA ~|vvR8"~Kbv\!&   v.~& v 88~v 8& .v.v 8~v&"~K v'"~K"v"~KL&v "~KN'v $""~KT&v 8"#~KV'v L"~K\&v `"~K^'v 1"! ~v 1#!~v ~~v .~$~v $ v .v 8#~S,~@#~S,#~S,~@v ,5:309*# ~S !"~#!~S"v ~0!~p5:309*v ()+"%"~!"~"%#~v 89&*)9*~v '  v .)+"%~-@)+#%~Fv .$~l' ' .v *.v 4 . ~v 6 *~zv 8 .$~v : *~zv < .~@v > *~zv @ .~0v B *~zv D ."~Pv F *~zv H .~pv J *~zv \."!~%"~@v f' . !~@v k "~av p.v z !~@v~8."!~ v5:309*5:309*~v$~0!~p5:309*v.v ' . v9~(.~@ ~0.~@  v5:309*5:309*~ v89&*)9*89&*)9*~v.~ ~`v.v~0!~p5:309*vv &'+~v89&*)9*~~zv~(~' v!#!~S"5:309*!"~v+# ~S 5:309*!"~#!~S"v~0!~p5:309*v %~ v@&3+&3,vD" $~D~vEvJ# ~S ~vK#!~S"~vU 897&-1*3 ! vV897vW# ~S4897!~ vX ,*8(-<.3).,0*.9 vY,vZ",~,~ $ ~zv["#~S,~L~ ,v^v#' %%%$~8v#(.#"~W#"!~Wv#- .~v#<.v#F"~K8~v#K" $~D~v#O&'+~zv#P6~(~  v#R6~0~  v#T$ v#V6~ ~  v' ~zv' &'+~v' %~ v$~zvvvvvvvvvvvvvvvvvvvvvvvvvv%D&D>GD?GC?G?G]@7Cq օ!@v _               * ʹB* @# ˾##  + @< }  *6dhs!hes!e[6ds>?y>(8>)0*4d ~00G/8w!d/> w#:%@W  o  !d.#~+w#O:0dw:1d=21d.B>. - ,:2dg"0d*2@M|("DM>!)00= |怰B0#R"2@!sg"4d:3d2:d&d_ oV&@'ƂoN#~2;dz28dz29d:8dO::dG8ͧA::dG:9dOͧA*:d,}2:d&ȼ * @# ~?w# * @6# "4d!?~_8>@O>?O.gܧA - yO#>?0!@d4>+~d>2Ad8AA BA͎A`B͚A,CFC!3d5~ 6v 3.,-9)7.;* v(-?<*78(-0*%$vv#%!~vvvvvvvvvvvvvvvvvvvvvvvvvvN+Q+Q+Q>QM>Q>Q]@ 7Mn܍ !@v|F S -5 ?  VZlyY5M{bgkrt{  $TV^`uw!(,9@BIy}* @# 6## * @$6# w#^#V#F* @w##^* @6#!@>YA >YA > YA>YA >YA >4YA!@jAjAjA#A6A* @###NAuAͫAvaͻM >E >} d >\ >:B !R ! +#[B* @[ @R} ..BMB.B2B~( (VB$MB:B.B2B~( (VB>2BMBMB6~2B64[ @R"B:B2Bv[B* @2B :B" :B :B  :B~ VB :B>2B\C:BB.BB:BB.BBxB.BBB:Bw~2B:Bw[ @R"B:B2Bv8C zCCDD       :C= *C~2C#~#"C2C>:4@0 <2C>!C5 67D!DC!R| }!0!gh*B_D"D*C_D"D:C( :DG:D8>>:DG:D8>>2C>!CC:CD7DyDKD!CB\E!BC!Cv!C~( (RC#  ((w + 5CE  #2Kd ȋ:B!cE(###~G* @~< >w+w2* @#~ƀw##   = A>E* @NA>E+6va!BC# (   + >2E9FCCCDC!C64MG!C6#6 !{TG!CB5C!BC[C!{R| }(   !C6#6#6##/F:CG6!C!xE~w>́E2C* @[C.B~>2C!{_D"D*C_D"D!D:D8>F>F!D:D8>F>F[Cz { >2C >/GF/G|Dv* @F~## !C~>2aG!C#~+ ~ ͽG G##~ 6~#6##~ * @F~ 6## * @####~!G~6+4F* @+6:4@!$HF0((F!eE##~* @bw>v ad!VH~(5>́H#~(5>́H#~ 62+6 !CwE:B( :H YH!H6#6d>́H>H> 2xE!H5~G:H>́H>H>2H!CwjBJE͗G:B~E:B * @:$HG+:BƀwG%HbG:aG+J:EJ* @{~ 6  ͐H  ͻeHv {CCCDb!fIC8BEaGHEdddddPddPKKF2222 ( (:I2$H!eEG##G~2IVH!I####>H~!BIw!NIwv ͨE!I~(4AIͥIHA>2I!G6#6IͥIH* @ * @ 8(#* @A!C^#V####~* @w* @{6 6#64!B^#V* @6ͥIE:E;D>E!G5(F* @++6IE͆JH* @^NA,&2*4;*7\J>ECJv %~v vL 5-.1.5-&7<44)<.9-&)*7.;&9.43  4+9-*,&2*<*&11034<&3)14;* vU$~  $~  $~  v~0~  ~  ~  ~  ~  ~  ~  ~  v.~ "~P$~vj~0. . . . . . . .  v.v" $~D~v~ ~ &?32 #~` 57*881.3* v 5&(2& vA$~l~xv A$~l~v!vv5-.1.5-&7<44)<.9-&)*7.;&9.43vv4+9-*,&2*<*&11034<&3)14;*vvvvvvvvvvvvvvvvvvv&?32vv57*88 3*<1.3* vPcJdJ|MI}MC}M}M]@e7Cjԍ G!@vx*d[d6O̾AWA*d[d~ :dw 0C͑B_ 7*d[d66"d~ :dw 0C͑Bg *d| *d[d"dSdx*d[d6gA_B*d[d~ :dw 0CrBW 8*d[d66"d~ :dw 0CrBO * d| *d[d" dSd  êB[d:d(>>2d6BSd[d:d(>>2dTBSd[d:d(>>2d6BSd[d:d(>>2dTBSd{ !  !{ !!  * @4~& 6+* @4~& 6+*d|(/[d~ 6~( !"d(rB6"d3[d~ 6~( !" d(͑B6" dÂ@* d| (v65&3?*78(-1&(-9%$;43-89&22v 5&3?*78(-1&(- vv $ v ?~~ v  ~x v ?v" $~D~v?~~@v$ v?v-~0"~@  ~(  v'6"%"~!"~"%#~v/56 ~~@ ~`~@v 7~v056~p~@ ~`~@v 7~v 8~v 8~v 5:~v 5:~v ?~0v ?~0v '8~v! '8~v" 8~v###$~l8v$#$~8v%"$~V~ v&"$~X~ v(*!"~H55!"~!"~v)!"~H5!"~v**!" ~H77!"~!"~v+'!"!~H 7!"~!"~v,*!"~H55!"~!"~v-!"~H5!"~v.*!""~H 77!"~!"~v/!"#~H7!"~v0?!"$~H!"~Hv1 ?~v2?v3*!" ~H??!"~!"~v4!"!~H?!"~v5*!""~H ??!"~!"~v6!"#~H"?!"~v7?!"$~H$!"~H*v8 ?~v9?v<5!#~v= 57?vA5!$~vB 57?vF?~~@vG&~@?#~` !~H vH'"~@?~@ ~  vI("~?~@ ~  vJ'%~?#~` !~H vK?vP*"! ~vQ$*!"~#~~%~4vS"~ !~  85.*1*7 vU %!~>v\"~ !~  85.*1*7 v_ -&9;*7147*3 vdA ~HveA ~Jvf !~ vvvvvvvvvvvvvvvvvvvvvvvvvv,I-IEL MFLaLbLbL]@ 7,I \!@v6:&)7&9.8(-*,1*.(-:3,v,,9 ~zv576!~@vL ?~@vV 3~@vv 76~v +:309.43>&='=( v" '.99*04*++.?.*39*3*.3,*'*3 v ?&*-1*73*33*7 v.~~@v#~.  v6 v 86 ~0v86 6 ~v6  !~ v1~6 v 6 1   ~v*!6 1  6 1 % !~ v41v>? 6 vH3   vR ~ v\? 6 1~vf6 6 1~vp1~6 vz!6 1  6 1 % !~ v1v3 6 v3  3   v?? v 8??v33 v+?~.~3~!~ v,,9v?.?v3.3v576vv.vv e73~3~@?~?~3~3~@ ~?~?~@v 77!~v 7~ ~Pv 7~$~Mv <7v ! ).*'*.)*314*8:3,*38.3) v %76<<!~7*~_[v 76"~Ev ?3~?~v !3~?~3~v ,,9v 576v &,3~?~3~3~@v 0  7  3v N !~Q`v X&?3~3~@?~v b-3~?~3~3~@v v??,,9v H =8 v R576v \y? ~3~3~3~?~?~@3~3~3~@?~?~v fB3 ~3~3~3~@?~?~v p,,9v z  >8 v 576v & v ~zv??v33v 6?3v5?63!~v5 ~ v?3v35v ~{@v??3v333vv 76 = v?v3~  3v76vv !~@vvvvvvvvvvvvvvvvvvvvvvvvvvSAURER 81 @ SIMPLEX 81 C@ TENNIS 81 F( TRAP 81 I UMZINGEL81 M VERSTAER81 PWILDWEST81 TZX81 DOC X ZX81 PRG \ZX81README bZX_GT 81 $ FFIXBIBII]@7BB| 9!@v*dHA(I(#@Kd6+> A  Cd͠A#6"dKd6#> A( Cd+6"d* @ > %#6!> 6>>(6 oÃ@*2@M|("DM>!)00= |怰B0#R"2@]˻˳˫* @" { # +66# C* @ 4>& 6+4>& 6+4!d~=(w#~+wA*d d< > * d  * d*d"dv  8&:7*77*,* v -89&22%$v vv 8(-<.*7.,0*.9% v!"~H5!"~v?!"~H~v@!"~H~vA!" ~H~vB!"!~H ~vF!"$~H~vG!"%~H~vH<6!~ ~!~ vI(!""~H <<!"~!"~vJ!"#~H<!"~vK(!"~H<<!"~!"~vL!"~H<!"~vM<<~ vN(!"~H<<!"~!"~vO!"~H<!"~vP <<%~vQ(!" ~H<<!"~!"~vR!"!~H<!"~vZ1"!!~v\'~ $~ v]$~ 34(-*.385.*1 v^$~ v_: v`: 3 ~ vcvvvvvvvvvvvvvvvvvvvvvvvvvv/H0HHKnLIKSKTKTK]@b7/Hs A!@v@ #2&=.2.*7:3,88>89*2.33472&1+472vv!~~  8.251*= vd+-*789*11*3*.3*8'*7*(-3:3,88(-*2&8vn)~@~ ,*'*38.*'.99**.3 vx &3?&-1)*7;&7.&'1*3 v&;v &3?&-1)*7'*).3,:3,*3 v&'v ,&;&'v&,&'~v'&'~v(&'~v6&'~v2~&'v&&;22~v2v0*.397&,*3)*704*++.?.*39*3:3))*704389&39*3v2~&'vv ~@~2 9*?*.1* vv3~&;v & 3  v&32v&32v3vv ( v (2v(2v2vv" ?.*1,1*.(-:3, v'v,3~&;v6 & 3  v;&3&'~v@&3&'~vJ3vOvT '.99*<&79*3.(-7*(-3* vV !~vXvZv^ 1~,vh$&1&'~~ ~Hvr1v ~zv&:8<&-1*.3*785&19*v02&1&'~v81v11~,v&1&'~02 !~av02&1&'~v81v1v').;.8.43)*704389&39*3:3)*.397&,*3v ?~v2~&'v&82~!%~v62(2&82v&&:8<&-1)*7?*.1*v0?~6262!%~v: 6262vD?2vN2vX62~"!~"vbvl *39&79:3,8+&11 vvv+.=.*7:3,)*804*++.?.*39*3v 0+&8?v;).;.8.43&11*704*++.?.*39*3:3)04389&39*3:3)*.397&,*3v 1~,v&1?&1?0+v1v(?(?0+v '&*6:.;&1*3?:2+472:3,:3)3472.*7:3,v*2~&'~v42?$$~\v> 0&82vH 1~,vR&12&12&1?0v\1vf(2(2(?0vp2v+&'&*3)*7:3,)*785&19*)*7'&8.8;&7.&'1*3v8&;'?8v !~/v&'1*8*3)*7<*79*vv )*72&=.2&1*?.*1<*79.89 vv~P(&'~vv *7<.7)*77*.(-9+:*7 v v3~&;v1~&'v$'13 = 3  (1v.1v83vvvvvvvvvvvvvvvvvvvvvvvvvvHH0KRK1K:K;K;K]@7Hx |ڒ!@vrIx2(NO *$N ~ 6"$N! 6!(NF *$N! ~ 6*$N6 "$N!(N^ *&N ~ 6"&N! 6!(Nf *&N! ~ 6*&N6 "&NbkK N K"N ~ !C"N C"N IC N:(NO K"Ny! C"NC"N:(NG K"Ny C"N!C"N IC N:(N_ K"Ny! C"NC"N:(Ng K"Ny C"N!C"NbkK N K"N ~v >6>T] x Æ@v v(45>7.,-9(-?<*78(-0*v v 8(-<.*7.,0*.9% vA ~0v. Av.  ~8v.   .  % ~0v$"$#~~ . ~vv $ v"6~(~  v$v(')"%"~!"~"%#~v28)~%v4( ~H8!"~8!"~v6!~J8!"~v8 8~v:8~~v<88~xv>("~L8!"~8!"~v@#~N8!"~vB 8!~ vD8~!~ vF 5~vP)# ~9$~`vR)# ~9 ~`vT)# ~:$~`vZ<@!~v_ "~ vd<~@~vf#5<~5<~~vh!5<~%~~pvn-)# ~: ~<$~`5<~vs "~ vx!)# ~:!~ <!#~vz!)# !~:@!~ <!"~v"%~$~ 3*:*885.*1 v ~HvA  ~vA 3 ~Hv,~0 ~ ,1*.(-*8(-<.*7.,0*.9 vA  ~vA  ~vA 3 ~pv~P!~ vv~@~<~v~B<~v8@!~v"~D~%~>8v~F8v88)~~ @~~x%~h~~(vp ~>vq~ ~,>vr "~|>vs"~| ~,>vt>vx=~ ~ vz2~ @~~p@~  v|=v=~~ v2~ @~~p@~ v=v =~v >~0v')"%"~!"~"%#~v 5~v=("~x@~v>( ~(@~v=>v=(=>(>!~zv,A . ~ v.> ~( ~Hv0=>v2 >>~v4 $~>v@A 0  ~*vB="~x ~HvD=>vF ==~vH $~>vTA 2 "~4vV>~ ~HvX=>vZ >>~v\ $~>vhA / ~Hvj=~ ~Hvl=>vn ==~v|O)~ ~,>~=~~$~"~v~Q)~ ~,>~=~~!~%~Cv 55~v~!~p5v=>v=(>(v=(=(==(v>(>(>>(vQ)~ ~,>(~=(~~$~#~/v=(>(v ~Hv.~%~v=>v=>v=>v.v5~~ 8(-3&55).(-;*7147*334(-2&1 v!? v0 #!~;vX> ~,>~v]==~vb.~%~vd >= ve >= vf >=  vg >=  vl.v5~~ +&11,7:'*;*7147*334(-2&1 v? v #!~;v>( ~,>(~v=(=(~v.~%~v >(=( v >(=( = v >(=( v.v $~4v~(~? v~($~ 0&*8* 5v A $~Hv%A $!~I@v*A / !~Hv4v>>~~0v@? vB>vH$~ $~ vR !~zv\vvvvvvvvvvvvvvvvvvvvvvvvvvFFIBIAII]@7A B~ Fc!@vE:2?.3,*1:3,-89&22%$2&8(-.3*3(4)*74:9.3*H>o*d[dÂAQ("d6"d*d[dI(" d6"d8 @> >  >޻ >߻ > >" >! "!> > >޻ >߻ > ">" !>!  v  :2?.3,*1:3 v *~v +~vv 8(-<.*7.,0*.9% v>v"""$~T$~~ >vv$ v&~~ v ~x v&v$ v&@~ "~@v'@~ !~ v (@~ "~@v!)"~P@~ v#&'"~v$ () v(/6~"%"~!"~"%#~v)56&~'v*<6(~)v-(!"~H55!"~!"~v.!"~H5!"~v/(!""~H <<!"~!"~v0!"#~H<!"~v2!"~H!!~v3!"~H!!~v4!" ~H~v5!"!~H ~v7!"$~H~v8!"%~H~v9!"~H~v:!"~H~v<1""~vAvF7!" ~H!"~!"!~H ~$~ vG7!"~H!"~!"~H~#~vH %~4vI# )*785.*1*72.9.898.*,*7 vJvK ++~vL *889*-9 *  +vM&~~pvN&vO $~vP# )*785.*1*72.9.898.*,*7 vQvR **~vS #"~vZ *3)89&3) *  +v_ ~0vvvvvvvvvvvvvvvvvvvvvvvvvvKKNNNNNN]@7K !@v ꗀvvv" 97&38.8947;*789&*70*789:+* v(%"~@#~ :' v)B#~  #~ 77( #~  v*!~P .34:9 v+#~  v,~P ( v-!~p  !~p ( #~  #~ 7 #~  #~ 7*(* #~  v. ~P  v2$ v4 9 #~`v69 v< & ~vA $~HvF%~( ~ vH& vP7~$~ 97&38.8947  ~$~9 vZ&&  3 353 "~@%~h  v\&&  5 535 "~@%~h  vd3472"~vn,~( ~ vp;:vr~~ ; ;:vx-~( ~ vz'v|~@~ ' 'v.~( ~ v:'v ~~ :' :' ; v.~( ~ v.(v !~ ~ .( .( 2& v.(.(*~wnv/~( ~ v+:v "~@~ +: +: -? v/~( ~ v:'*v!#~`~ :'* :'* ; v/~( ~ v7(;:%~.(v7*$~ffff.(v .'.('v%7:':'*$~ffff~0.'v"7:'*$~ffff~ .'v7~%~.'v!7.3777777777v(<~~B+:v ((<7.3v" ((<7(v,(*'~H7v6:.3:'"~ffff;:v@%~~vJ=7vL3472vN 7 3*~wn 04-2 vT=7vV3472vX 7 3*~wn 04-2 v^=7(v`3472vb 7( 3 4-2 vh=7*vj3472vl 7* 3 4-2 vr=(*"~t$vt3472vv ( 3 :+ v|=(*"~t$v~3472v ( 3 :+ v=(**"~t$v3472v (* 3 :+ vv 7.3 7.3 4-2 v 74:9 7( 4-2 v :.3 v:.3*~z 2; v+~( ~ v& v&~(~ v &  / v * ~@vvX 3472<*79*vb *~vl)=*vv)~ ""~%v**~ v "~v/~~@v ).*/)v).~#~/v/v 3*/*vv 7*.-**v* *~Pv4*~~v5*~~v6*~@!~@v7* ~$~ffffv8*!~ ~ v9*"~@#~,v:*#~`~S333v;*$~%~yv<*%~ #~fffv=*~ !"~3333v>*~0"$~Yv?*~@$~333v@*~P~ vHvvvvvvvvvvvvvvvvvvvvvvvvvvJJ N:N N C N N]@7 Cn܍ !@v yͻ"d*d|(DdKd6G 1 "d~  !d5(*d6(( :M<&2M!d6*d|(DdK d6O 1 "d~  !d5(*d6(( :M<&2M!d6*dU 2\ .:d((:d ">2d*d6"d:d=2d*dO 6!dˆ*dm 2\ .:d((:d ">2d*d6"d:d=2d*dO 6!dˎ!d~# !"d*d6 #*d6 #*dM L "T Cdu l  d C d*dM lL 1*dc ~ ] "d 6+6! 6#6 6 6 6+6*dT 0*d ~ %! "da 6#6 6 6 6+6 6#6*du ll 1*dc ~ ] "d 6+6! 6#6 +6 6 6#6*dd 0*d ~ %! "de 6+6 6 6 6#6 6+6:d :d x Ã@v <.1)<*8 v(-?<*78(-0*%$v ()+"%"~!"~"%#~v8)+#~9v(!"~H8!"~8!"~v!"~H8!"~v88#~v (!"~H8!"~8!"~v"!"~H8!"~v(!"!~H ~v*!"#~H~v28)+# ~9v4("!$~8!"~8!"~v5"!$%~"!$~v6"!$~8!"~v7"!%~"!$~v< 88!~ v>(""!#~"8!"~8!"~v?""" ~0""!#~"v@""!$~$8!"~vA"""!~2""!$~$vF88!~pvH(!""~H 8!"~8!"~vJ!"#~H"8!"~vP88~ vR(!"$~H$8!"~8!"~vT!"%~H&8!"~vZ!"~H("~@v\!"~H*"~@v^!" ~H~vd'?  vn? vp.~~ vr( ~@  ~x vt.vv? vx" $~D~vz5~0~   v|6~8~ v~" $~D~vA~ !~   !~  !~  !~   vE~ !~H !~H  "~P  !~H  v8"!!~v88!"~8!"~v*<8~8 ~8 ~`v8!"~H~v7~@8 v)+# ~9!"~v)+#%~8!#~vx!~p~ 7~ ~~ < ,&2* #~~ 7~ ~@~ < /4* vA ~Hv= Av=  ~Jvv= 3 ~ vvvvvvvvvvvvvvvvvvvvvvvvvv N E U E D I M E N S I O N E N A U F I H R E M A T A R I ST ------------> DER SINCLAIR ZX81-EMULATOR <------------ SO URTEILT DIE FACHPRESSE: SPITZE. SUPER. VOLLE POWER. ECHT TOLL. OLL. Das im ZX81-Emulator enthaltene ZX81-ROM unterliegt einem Copyright. Ansonsten ist das Emulator-Programm Public Domain. Tastaturbelegung: Shift ZX81 Shift-Tastaturbelegung Alternate Atari ST Shift-Tastaturbelegung Help Hilfsbildschirm ZX81-Tastatur Undo Emulator-Kontrolle Die Demo-Programme werden mit LOAD "" oder LOAD "name" geladen. Anleitung Demo-Programme: ZX GT ===== Ist ein schneller BASIC-Compiler, der allerdings auf Integer-Arithmetik beschrnkt ist. Er wird mit LET L=USR 17389 aufgerufen, wenn der Code in REM-Zeile 2 geschrieben werden soll, sonst LET L=USR 17381. Ausgefhrt wird das compilierte Programm dann mit LET L=USR 18823. Disassembler DISASSEM ===================== Vor Laden Reset ausfhren. Der Disassembler befindet sich dann oberhalb RAMTOP und ist vor NEW geschtzt. Er wird mit LET L=USR 32032 aufgerufen, die Startadresse wird in 32704/32705 gePOKEd. Assembler ASSEMBLE ================== Der Assembler befindet sich in den oberen 2,6 kByte des 16K-Speichers und ist vor NEW geschtzt. Er versteht die Standard Zilog Mnemonics. Sie werden wie ein BASIC-Programm in REM-Zeilen eingegeben. Innerhalb einer Zeile knnen mehrere Assemblerbefehle stehen, wenn sie durch ein Semikolon ge- trennt sind. Der Assembler unterscheidet zwischen Konstanten und Labels. Sie bestehen aus Buchstaben und Ziffern (Leerzeichen ignoriert), das erste Zeichen mu ein Buchstabe sein, die Lnge ist beliebig. Labels werden durch einen Doppelpunkt hinter dem Label gekennzeichnet. Als Operatoren sind "", $, +, -, >, und < erlaubt. > und < stehen hinter einem numerischen Wert und bilden das hherwertige bzw. niederwertige Byte. Pseudo-Befehle: ORG adr1,adr2 Das Programm wird ab der Adresse adr1 in den Speicher ge- schrieben. Es wird dabei so assembliert, als ob es bei der Adresse adr2 stnde. Fehlt adr2, wird adr2=adr1 angenommen. BEGIN Zeigt den Beginn des Assembler-Programms an. END Zeigt das Ende des Assembler-Programms an. DEF Bindet die folgende durch Leerzeichen getrennte Liste von Ausdrcken in das Assembler-Programm ein. = Weist einer Konstanmten einen 16bit-Wert zu. * Die folgenden Zeichen werden als Kommentar aufgefat. Fehlermeldungen: 1 Kein Programm oder kein BEGIN 2 Syntax Error oder Bereichsberschreitung 3 relativer Sprung zu weit 4 Konstante zweimal definiert 5 Label zweimal definiert 6 Fehler in einer DEF-Anweisung Der Assembler wird mit dem Befehl PRINT USR 30195 gestartet. Mit PRINT USR 30113 kann zum Lschen des Quellprogramms die momentane Zeile bis zu der Zeile mit dem END-Befehl verlngert werden. `j` 04.10.1988*OO*m - ЭЭ// ??<JNAO ?<NNTO3 @g @g <ka`3 By3Ba 009R@gByv0<aa|KjM???<NN\O<w?GBg?<NN\O|?<%NNTOQJGjad|M???<NN\OQ0<a<3By3BarBgNAAkFfNuFa$Hy_h?<&NN\OB@a0<aN J@fB@30<aN\NiJyghAvp0(@ X0 vgBy`HBh@@p0(@X>Y@X1@@Bh@B(@Bh@ B@B(@%Bh@&B(@)B@*|@@;`arQvhPviA`$Jygv"A_NN]Jyg0<o29YUA`B@BAN ?<NNTO @B yfp2<` AB2< QNu@#.yv?NAXOJ@kB@a <ka @fp0<aBgHy?<NAXOJ@k`?9?<>NAXO y 0<a`B@`Z#09vkAvp09vACBCpJg f<_`4 &e @d@&A` e0g 0` JCf <.X@J[JCf .81B 9.g`a&0<aB93ZBy33By##a/90<aTa  yJ9gJ@f  pNuH@J@f pNu0<a0<aAC$If !\gfSIRIAfB@Nu?<NATOJ@kDAA:Bg/?<GNAPOJ@k$AJfSH\*.81BNuB9Nu?<NNTO @C`?<NNTO"@A0<""""QNu34333By3 @ (1f3#a`09Nu @fJyvfT3v` @fJyvg>Byv3N333By3"< 0<NBNuAm4B@JjfAk he2?<NNTO @d$Akp 2(Ih2(IhAQ36By33By#kN 3*333By###kBy3N 323333#kByN 09]@NuIvKv LtBQ MOC bE%GTjz*<Nbv (6J^l$4Bf~,DRfz$6HXj~  . @ P b v    , > N b r   ( 8 H V f x  . F f  ( D ^ x 0Pp6Nf|,D^z :PjBT 2Fr 0Bn $JpDVt6F\t&4Ld4rHZr@21N^^@21N2,@21NRl@21NR,YW[@21NS,YW[@21N^@21NU@21N, A ,A,A,lA,lA,l A ,!A!,l"A",#A#@21N2,TU@21N2,5@21NSl@21NR,YW[@21NS,YW[@21N^@21NU@21NS,gH@21NRN@21N^^@21N2, A e@21NRl@21NR,YW[@21NS,YW[@21N^@21NDU@21NH@21N2,TU@21N2,5@21NSl@21NR,YW[@21NS,YW[@21N^@21NDU@21NJgRN@21NH@21N^@21NTN@21NRT@21NRYW[@21NSYW[@21N@21N e eJ[W@21NJfRN@21NH@21NU@21NTNu@21NST@21NR,YW[@21NS,YW[@21N^@21NF@21NJgRN@21NH@21NTNO@21NTN@21NRO@21N2R5YW[@21N2S5YW[@21N2@21N~@21NJfRN@21NH@21N"TU@21NTN5@21NSO@21NRYW[@21NSYW[@21N@21NF@21Nl@21Nl@21Nl@21NT@21Nl@21N2u@21NB@21Nl@21Nl@21Nl@21NT@21Nl@21N2u@21NB@21Nl@21Nl@21Nl@21NT@21Nl@21N2u@21NB@21Nl@21Nl@21Nl@21NT@21Nl@21N2u@21NB@21N@21N@21N@21N@21N@21N2@21N@21Nl@21Nl@21Nl@21Nl@21NT@21N2u@21NB@21N2@21N2@21N2@21N2@21N2@21N2@21NB@@21N2@21N,@21N,@21N,@21N,@21N@21N,@21N25@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N[WYUB@@21N,[WYUB@@21N25[WYUB@@21N[WYUB@@21N,[YUJWB@@21N,[YUJWB@@21N,[YUJWB@@21N,[YUJWB@@21N[WYUJWB@@21N,[YUJWB@@21N25[YUJWB@@21N[YUJWB@@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N[WYUB@@21N,[WYUB@@21N25[WYUB@@21NBQzQB@@21N,[YUJWB@@21N,[YUJWB@@21N,[YUJWB@@21N,[YUJWB@@21N[YUJWB@@21N,[YUJWB@@21N25[YUJWB@@21NWB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N[WQB@@21N,[WQB@@21N25[WQB@@21NJ[WQB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N[WQB@@21N,[WQB@@21N25[WQB@@21NBQz|QB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N,[WQB@@21N[WQB@@21N,[WQB@@21N25[WQB@@21NJ[WQB@@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N,[WYUB@@21N[WYUB@@21N,[WYUB@@21N25[WYUB@@21NQzQQB@@21NJgB@@21N2MB@@21N9_B@@21NJgTNB@@21NMB@@21NMB@@21NJgTNB@@21NTN0M?B@@21N?,B@@21N[WYUB@@21N0?MB@@21NJfB@@21N2MB@@21N2MB@@21NJfTNB@@21NMB@@21NB@@22NJfTNB@@21NTN0M?B@@21NTN0M?B@@21N[YUJWB@@21N0?MB@@21NJgB@@21N2MB@@21N9_B@@21NJgTNB@@21NMB@@21NfPvh` fQvh`faB@@21NJgTNB@@21NTN0M?B@@21N?B@@21N[WQB@@21N0?M B@@21NJfB@@21N2MB@@21N2MB@@21NJfTNB@@21NMB@@21N0,9T8B@@21NJfTNB@@21NTN0M?B@@21NB@@23N[WQB@@21N0?M(B@@21NJgB@@21N2MB@@21N04JUUUUUUUUB@@21NJgTNB@@21NMB@@21NB@@21NJgTNB@@21NTN0M?B@@21NB@@,@,@,@@,@HX?B@@21N[WQB@@21N0?M0B@@21NJfB@@21N2MB@@21N2OB@@21NJfTNB@@21NMB@@21NB@@21NJfTNB@@21NTN0M?B@@21NA,B@@20N[WYUB@@21N0?M8B@@21N8Tp*F^z$>\| $Bbx,@\x%%%%%%%%2Nj(<Nbx  ( < P d x   ( < R d x   * > R d x   , > P b t   . B X j ~ 0DXj~2DXl 2DXn 2FZn 2HZn  4HZn "4H\p"4H^p"6J^p,[WUA@21N,[WUA@21N,[WUA@21N,[WUA@21N[WU@21N,[WUA@21N25[WU@21N[WU@21N,[WUA@21N,[WUA@21N,[WUA@21N,[WUA@21N[WU@21N,[WUA@21N25[WU@21N[WU@21N,[WUA@21N,[WUA@21N,[WUA@21N,[WUA@21N[WU@21N,[WUA@21N25[WU@21N[WU@21N,[WUA@21N,[WUA@21N,[WUA@21N,[WUA@21N[WU@21N,[WUA@21N25[WU@21N[WU@21N,,[WU@21N,,[WU@21N,,[WU@21N,,[WU@21N[WU@21N,,[WU@21N255[WU@21N[WU@21N,[WUA@21N,[WUA@21N,[WUA@21N,[WUA@21N[WU@21N,[WUA@21N25[WU@21N[WU@21N, [WUA@21N, [WUA@21N, [WUA@21N, [WUA@21N [WU@21N, [WUA@21N25[WU@21N [WU@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21N,W@21N,W@21N,W@21N,W@21NW@21N,W@21N25W@21NW@21NJ,Z@21NJ,Z@21NJ,Z@21NJ,Z@21NJZ@21NJ,Z@21N2J5Z@21NJZ@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21N B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21N@B@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N2B@@21NB@@21N~D$DT8Xdz<\|Pj&j    0 P  $ L l  @ b ,,g fTa`NQviAv@<e(e(e(e(e(e(e(e@[WB@@21N,,fPvh` fQvh`fa0`PviB@@21N8,2D[YUJAW8@21NTN@21ND[WYU@21NB O.l$H?N_L.HrB@@21N,,g fTa`NQviAv@<e(e(e(e(e(e(e(e@[WB@@21N,fPvh` fQvh`fa`PviB@@21N8,2D[WYU8@21NTNuu@21NB @21N,,g fTap`NQviAv@<e(e(e(e(e(e(e(e@[WB@@21N,,fPvh` fQvh`fa`PviB@@21N8,2D[YUJAW8@21NTN@21N@21N, [WQ@21N,,g fTaJ`NQviAv@<e(e(e(e(e(e(e(e@[WB@@21N,,fPvh` fQvh`fa`PviB@@21N8,2D[WYU8@21NTNuu@21Nan, B@@21N,,g fTa2`NQviAv@<e(e(e(e(e(e(e(e[WB@@21N,fPvh` fQvh`fa`PviB@@21NHVWVV8@21NTN@21N2Z5ZBZ@21N,,g fTa`NQviAv@<e(e(e(e(e(e(e(e@[WB@@21N,,fPvh` fQvh`fa`PviB@@21N2A[WYU8@21NTNu@21N2Z5ZBZ@21N(2D[YUJAW8@21NTNA"Y@21N,,g fTa`NQviAv@<e(e(e(e(e(e(e(e[WB@@21N,fPvh` fQvh`fa,`PviB@@21N(2D[WYU8@21NTNAO@21Np02,RTRlSlVB@@21N25[WRTSlVB@@21N,,g fTat`NQviAv@<e(e(e(e(e(e(e(e2RTS,WB@@21N,25fPvh` fQvh`fa`PviRTS,WB@@21Np02,STSlSlVB@@21N25[WSTSlVB@@21N,,g fTaX`NQviAv@<e(e(e(e(e(e(e(e2STS,WB@@21N,25fPvh` fQvh`fa`PviSTS,WB@@21Np02, A e.<,SFR@RAQ89ABlBFB@@21N<,SFR@RAQ89ABlBFB@@21N20,S@SARA5W[WgR@J@VRA89@B@@21N,,g fTa`NQviAv@<e(e(e(e(e(e(e(e2RTS,fzB@@21N,25fPvh` fQvh`faJ`PviRTS,fzB@@21Np02,<,SFS@SAQ89ABlBFB@@21N20,S@RASA5W[WgR@J@VSA89@B@@21N,,g fTa`NQviAv@<e(e(e(e(e(e(e(e2STS,fzB@@21N,25fPvh` fQvh`fa`PviSTS,fzB@@21N Ur`,@`p6Pj6Ph4Vv2,lU@21N2,lU@21N^^@21NTN@21NRl@21NU@21NTNuu@21NSl@21NHlR5YW[@21NHlS5YW[@21NHl@21N"lU@21NHlu@21NHlu@21NHlu@21NHlu@21NHl@21NHlu@21NHl@21NHl@21NHl@21NHl@21NHl@21NHl@21NHl@21NHl5@21NHl5[WYUB@@21NHl5[YUJWB@@21NHl5[WYUB@@21NHl5[YUJWB@@21NHl5[WQB@@21NHl5[WQB@@21NHl5[WQB@@21NHl5[WYUB@@21NHlAJB@@00N9_B@@21N0,9W>B@@21N?,B@@21N2,MB@@21N2,OB@@21N   $8\ jz    & > V n   * @ X z     $ B b z     lU@21NlU@21NTN@21NTN9C @21NRC@21NKU@21NTNu u6,@21NSC@21NHCR5YW[@21NHCS5YW[@21NHC@21N"AU@21NHCu@21NHCu@21NHCu@21NHCu@21NHC@21NHCu@21NHC@21NHC@21NHC@21NHC@21NHC@21NHC@21NHC@21NHC5B@@21NHC5[WYUB@@21NHC5[YUJWB@@21NHC5[WYUB@@21NHC5[YUJWB@@21NHC5[WQB@@21NHC5[WQB@@21NHC5[WQB@@21NHC5[WYUB@@21NHCAhB@@00N6B@@21N06>B@@21N?B@@21NM8B@@21NO8B@@21N<\|,BXn"6J^r5[WUB@@21N5[WUB@@21N5[WUB@@21N5[WUB@@21N55[WUB@@21N5[WUB@@21N5[WUB@@21N5WB@@21N5WB@@21N5WB@@21N5WB@@21N5WB@@21N5WB@@21N5WB@@21NJ5ZB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21NB@@21N Ur` Yr O.l$N.HrB@@21N O.l$NB.HrNu O.l$H?Hy\?<&NN\OL.HrNu8#@ NuAv$HCv@0< QCv@0< Q J|| !|ݾ!| )||!|Å!|˼[!| @" !|@!!|>!| !|S @!||>o!|Gp!|V!t!|@x!|ͨ8!|vr0CJYgTIJQfUHQf"0NiNaPO#/|LtNsLtFrNv`j|J9vdg"Nj?8@1w@J9vdf1߂@Nj yvg|J9vigJ9pfPpQq1w@`$J9qfQpPq ygBx@H瀀09l yfJ9qg09nAL``HJypgA09jByp1w@v$xNKyjBBvvAvp0(@ XACvjp ygXEf&J8gr`jf`f$f(f,f0f4f8fDI@L5D5E5F>5GL5D~5E5F5G^QEQ,`(5B5B5B>5B5B~5B5B5B^Q`EQ`J)`XJJVJAk(B5B5B5B>5B5B~5B5B5B^QEQ`Ef&J8gr`hf^f$f&f*f.f2f6f:EQ`lrPJ`2rE`*rE`"rE `r E(`rE0` rE8`rYHYITJVJAkdBD(gDg^DI@L5D5DN5E5E5F>5F5G5G.L5D~5D5E5En5F5F5G^5GQEQ`5B5BN5B5B5B>5B5B5B.5B~5B5B5Bn5B5B5B^5BQB`EQ`bJ)`TJJVJAkHB5B5BN5B5B5B>5B5B5B.5B~5B5B5Bn5B5B5B^5BQEQ^J9vhgAv0(@4XS@X1@@4QviCv@tgg g g g g gg(@&A(@%B@&ZB@%@; UeRAAfJ(@'f @;J(@;j(@'@@'PvivLJ9vegfB9ve#/|"NsHCgg H @a$L g)8gLNsAv@p !@)(@ eB( f(EvXg*BpJ g*BpJ g*BpJ g*BpJ g*BpJ ` dCrfd bf$$I4 8WWWvevfF9vd` J9vdg *g 6g 8gB9vd afB9veNuJWf`$ afveNuWg rB!QNuB!ECrg" *g 6f E` 8fE`QCrB@g2gjBpJ QNuA, he&?<NNTO @dA,pAQA,hhhh36By33By#,N 3*333By###,By3N 323333#,3N 09Q@NuA,pJhjgp Jhgp@SAvXACvXEtB@ `e TH f<p`0e +eB`2QNuHa" @CN0< yg0<@ AtCdaB2< yg p QA Q`0p0TIQAQaLNur p yg@S@ Qp yg@QNuHaA"@NLNuB8H8Nuw[3][| Z80 Error at $0000 ][Ignore|Break|Reset][3][| ZX Printer not present][Ignore|Break|Reset][3][| Odd Z80 Stack Pointer][Recover|Break|Reset][2][| Overwrite ?][Cancel| OK ][2][| Quit Emulator ?][Cancel| OK ][1][| Use high or medium resolution][ OK ] `im@`Vmn @Emh@mmPHmH mx` mh mp mm4m{m}GNote: The Emulator software is free except the included ZX81 ROM part.Z X 8 1 E M U L A T O RGO ZX81PANICDedicated to Sinci byCh. ZwerschkeAm Steinfeld 4D-4714 Cappenbergn Vr tE?0x 8À!0 @p088qG'?#~    @@??p?p<x9898989~89?<rrrrrrr;88888?{88{8<f0fxf0fp~y~p|y|`l`fGq880 @p0!Àx 80?88888?8?8?8?p8q8p8q8p8q8p8q88q88q?8q?8q?8q?8q888q888q888q888q?8q?8q?8q?0??|pxx>>3{P70`0/p+!@ @ @ @Àq??*@"@F*@~IÝ*@È EO*@#"@~nu{@üv10/-23'urwtspq  y x@xxxxxxxxxxxxxBA wxx &9&(4);&1*8.(49&&8&(&91*=.3868,&'5**:8897(-7344&39-*989*157.311.8894814+&83*8(741(43).7*+4,49,48:.35:14&1.81*5&:83*=54057.35147:8&;7&3.(1:3514(1*&7*9:7(4573.30*>5#*@7R!;@~>0˶*4@+>| F7g"4@ͻK%@"%@xB:'@X !;@ˆ ~7!'@?F{w* @͒_>͵+͒)N(;~( yD<>͵+O>!xW/o|gx82(@;~v;ͨ8F0.z ~#(! @^7ȟO#F0r ͨ L>0I8(bkLzy  #04! @PLq{{8 V0?0z( U:@ bk K@ `i>?6+ B #05(5("@*@+6>+++"@>GV!@6;@!}@" @6v#"@͚ͭ* * @[#@R0"#@ (>5 7* @ *@7R!#@0 ~#! @^#V# ͻ-n r+sͭ*@~~ ` v# 7 *@6f~ $:"@0<2"@G T]~+ #:@M] !"@!;@~)F(K%@Kͽ0:@= 2@{'8_!~v(/@8! ~V 0~-_7{&r͛ >x_!N#F*@-n ~#ʹ(&8(` Tv ͓~6# #~v(6+w͓\+[@* @ ͻ! @d{2@~ V#^ !o-n*@"@!!"9@* @ ͻz+ͥ #N#F#[@>! rͦ !r-n *@~(* !ͺ 7\s x C@6"[ @v(K0@ [)@6"v6")@M >wͣ-~("*)@ V#^S@#^#V#F8!@~(6 8~q! :@K@<( C+@  >͘ ͭC @*@!*@R*  ` y=+͞ *@+* @p+q+s+rͧx?gi" @ EK @ (s~@ͥ #z##"@K@*@B >*@~#ʹ"@((v(]w(K :@ :@~#####(&.78 H-. !}_7{ <8B=((N QWK9@y!(>v(0*@z #"@!C9@x"( .X͛ w#"@59! v(O:8@\o&@qq,u8* @#!<@_F8 0zWNy#v($'&oOzg0|0z[( >!\@6v +6}28@>8 "5ڭON(>]28@C9@*@Q>"O>v+ #+"@7͞ Abk6+#"@u 0F  ? 0x(8د!(?C0G~#(w ?DM ͭ *@! @> ^#VR0 r+s##= RDM!}@T] ~#~+~@8o( ?0#~0##N#F# ѧRDMF", ! :@M8:*9@}~  T]+H*@ x/Gy/Oͭ *@M-n!]@"@H͊8! ښ üx `iV#^}ͦ ~vʄ (i ͒ š ͒ N 4 = 3͒ N  ­ON( 8 [@x S@w((K  >v ƯK9@yN(>]80 C6@>+ڭG>(0>)0~00G :0@ /8 G YQOڭF"! ͛ ~4:* @#T]] -Iu_@B+7REm+D-Z;LE RZMj   .  j 0l@|*    2+#i ,6s ͼ!@6!-@n(~o ͦ vOy8;O!) N *0@~#"0@ O 0 !  N ߹ %Skvͦ ~vrv͜  *0@N#F6-0- ̧v ͦ !-@wC.@"@:@U!V@ z y< Uv ͦ 4~ͦ (4 ͒   44!"@+~ 8!͞ #4 *@s#rZ~F.˰*)@~  ###L ")@-NK *@~(#"@4Z*@^#V.23447ͧx K4@C2@*+@ͧ`i|0" ")@8(Dͧ~͊8 ́Ú*@#s@́*@ 8!$r.X|>(s@~ 2ͣ!-@˶:@@ w6vy8> +w+6*9@"0@r;;ͧ`i-65>;>2'@@ /ͦ ((K2@ 070A.-4͊C2@~(w B ͦ (44ÃA ͻDMQĽzBO;8nG (] IU .I" (II ѧRDM!@˶~Èv Ú 8(0O0˱8˹Y&8K ̧:@8N#[@"@@ͦ #͞ #6~#*@B"@+L~ #[@S@"@ v *c80 8 8 0 O!L Fz8,ͦ ( {?G74 {@š !@{ ˶yv ?O 8(Y Қ O˩( ( 0 ˱Aͦ yO4*@~(* 8-#(( 0 (  0pɯGy K~ <#N#F#Z###Fq( ( a$( y(Rq  <(l 2+"@^!y (Q(8  y fq BK(  #BK( c(ͦ (Pկ(PY( š bk( `i +R8#1DMͦ ȯ*@w#s#r#q#p#"@ɯ͒ ͦ (ͧx7(Bz#^#Vͦ |M!)80*@-N(D#~(8 *@yG>@(#~(>*@4B@v(*@K.@-F 0xT]#6B 0DMx(x+++~` >`*@  p+q+w*@"@+6*@+F+N+V+^+~"@š ͦ ˱ͧ 8 ` !q .&@1$`i( yh&##)DM*@+͞ #w #q#p#wbk6p+q+= *@+͞ ##C@#*@6#"@*@"@"@*@6#6v#6"!]@"@*@[@] &?@H 48 4*6]( 4]H84&?O!@46x wAN65!08#p#q++44-2'-2"-03@-2 0H///4 GO1CYJ֑?x8$'4>4~0x0 $048$4!k@6 #.4w#+~(B~k#~'w(6+4(D_+~({(HG@C>*xDG>>x 0 Ox(yDG>> >54>54~+~6#~+ AO7+~/wyN#Fw#yN#N#FW^#V#^#V#^ɧ!0G-Aٯ.W] GO0xAwhaJ|o0>4(#}#w+({D?_z/W{/_z/04ʀWٯl754#+ɯͼͼ8Zxbb!0Zx =??0h< 8z \wx0~>(٢8w8.#w+) z 5(0 A 4(#xw#q#r#sͼ8ͼ`iah)j8RR0Z٧RR7(_QYPx~06> ֠D+G888(6+( G>'w10Iڢ4 /rLUbI>nv[F7#+ZQcEͅx2@S@~#W`roz0T] o#&^#V!K@:@bk~O ~? #~P>#G=OO *@<bk!-*@<Nq#G͠--4ͤ14~#~w+#˾+#~+547#+ͧ ͧ! ~>~D?#+6#67xW =0rW L3|x (?( 8 #+4 DMx(x(*@8  *@S@+6v͒ " "@U"@6v*9@."9@*@S@*@RDM"@"9@x( !@5 #^{(/W #-$4-264-6,408;)-$-6Xefxe@`2!$/~X:~4 80 80Dw4-34 4~608-0L34401r-02  VڥY0\poaږ1\C6~^n#40"n-$---'-34ɡ245'/5---\ 8c# #]4-4~8-2/---UX9[6ucB 66s]ca 4--%!-44-,4-,"4[-, 34UUUUUUUU$$"x ~>(> >>>>>  <>BB<DHpHDB@@@@@~BfZBBBBbRJFB0??,89_>>89W01234DCBA@ !"#$TSRQP`dcbatsrqpфCBA34D012@q`фCBA34D123@q024 !"#$SRQP`dcbaTtsrqpфCBA34D012@q`@01234DCBAt"dRcbarsQP #$S!T)P$ X@0(@( p(& P04 0 H p@ @ !0@ p@`\x "Emulator Interruption78096_____nnnnn 1k16k48kContBreakResetQuitB_owwzQEUG{Uf{UE{u{{{@{Q@{Q{р{Q@{]@{{<uU E] GIFHIE`u```gh>~>p;??????????}|"'>8ewA>' D?? ??B)#y"#ʏD??1@`??[)#A" D?? ??K**)#}8????2*l#?? ????1@`???? >????P ??<<00?? <<??~~0000????~~??ff00pp00????ff??ff00pp00CC??@@##ff>>??~~pp00``CC??@@##<<>>??>>00``CC66??@@##<<>>??0000CC66??@@##ff>>??0000@#@#????`` ff>>??0000@#@# ????`` ff>>??00@#@# ??``ff>>??<<@#@#??~~>>??88<<????????????kkFF 77]]FF]]AAbb??iiZZuuMMkkkkZ_Z_kkww]]nnjjFF 5577UUႫFF??wwݜݜ??vvkk^^]]wwYY˿˿[[VV{{wwݭݭvv^3^3dd]]hhZZ]|]|ww??????????@(3> (( "?? I?? (/#~??0H??@ (*"`?? >??@ <#??00 ??@`??I??@~??3>??@?? ????``~~??00||??````~~@??``00~~??````??``00ff??``````??``0|0|##ff??````|#|#``??``0|0|##ff??``|#|#``??||##~~??``|#|#``??||##||??``|#|#``??ll>>??``CC``??ff>>??``CC``??ppff>>??``CC~~??00cc>>??``CC~~??cc``????????????77nnnn88Ѕ11oo}}WW_~_~jj88||}}}}~~nn..ݐօCC11 11ww00cc11  xx ww''}}߻{{``wwWWee.. ߼{{xx{{??wwwwﺿuu߿{{ nnww==11{{;;??????|??=????Gs"@A{ $~n_JIĀ"8AD_sQ$"Ap<DB1ǀxAD_B] $~t_`` ``??33 0033 }}00܀??33 AA GG88UÙ**33 yPyP ̀5Q5Q??UU AA GGUÙ**?? }}̀5Q5Q33UU ``GG̀ T T??Ǫ33`` ̀ ??GG33UU00AAȾȾ GG??܀ T T??Ǫ3300@@ >> ??GG33UUxx@@ ????33??@@??????yyȾȾ??ccEE??8877 a a݄߱??{{ZZoouu߮||}}##||__FF77??ߠ _ _݌??mmVVڷڷwwnn}}ň[[ ??ll ??117A7Abb99AAttmmww~~ֻֻ__{{ZZww~~66CC--00ww~~^^__VV117w7wووAAww??????????``??! ??00 ????!?? 0 ??????0??????  ??`??  ??0??`?? ?? ??]??00@||??0000??$I??00@~~??0000??I??00 ff??00pp???? ff??pp??$I00?? ~~????$I00?? ||????]``?? ff??Ǽqq``?? ff??pp00""???? ff??pp00 <<????00 ff??0000 ????00~~??0000  ??00||??0000 ??????????????????]]XXccwwUU]]ss]]]]..]]ѰѰcc4 &4  T    @     6$ (2>$  "  0  r :$  &&lz6j~llhlhv~vxx &<      6F &"          P. f  N @L 0000$n ZX81 Emulator That's right, kids! Journey back to the halcyon days of home computing with this fantastic fun emulator. A point, a click, and you'll be running what was ostensibly the world's first home computer (at least the first affordable home computer...) Although the documentation accompanying the program is in German (yah, boo!), it is, in fact, jolly easy to use, and full instructions appear on our disk pages. Recreate 1K computing on your ST with the ZX81 emulator... IILLLLLL]@7Iq !@vIRNI J꿽vvô@#AWAOAÅA×AëA!BÜBB9CzCWCøCόկ!B|(>!BA'A0A0dA0 A0@ A Ad A A A!BR>R8<!B|/g}/o#* @! #!B "@>!29@>2:@ͻ| ͻ$ ͻ}(Bʲ@B(D$Mͽ~"4@*4@|OA(J{!90)>+BG>(0>)0A~00G :0@A/86>ByOůhg))HG G K @ #"@>2:@>!29@::@(:v(*@0r*@w#"@:9@=29@~v J::@=2:@#"@>!29@8*@~v(#* @ 6OA(((?() !'+} #A* ix!B C8 ˷5B?!G!0!B~#(~ !B#?!B-Bϊ{()C|8KB#))yx0|g}o(yxByOxGxAD|A|G|A[2@c.zRR_PR0#"2@˼!Iͣ #>vq#6#q#p#6#w#w#!WA !Bv()))O!By8O 8>!BA*{@w#"{@OA) >v!Bʹ@&oʹ@>uI!DHxIIDYI D D>{I"p@[@!r@ E*p@6#6h#"y@h"{@!}@D###"@DED̖HH(I+E@EGGI̶GH]HlH̒HF̟GʖGUE(̤G D DEv I6D>hIYIϛMG!_IéGV#^"#@" @ESIE E[{@ E[r@R8"r@s#r#^#V#*@#EB*r@R#>DE*HEEëG>v( ~(hIDEv(w ((L(tPG!SIͩGO>{I*{@{I*@#~hI ({I"@q#>ͫG>ͫG!kIͩG7GG!CMͮG!ͩGDE((!EͩG*@+"@MG>}{I!hIͩG>vhI@D&Ky@&o DEEd *I>{I&DED=FE| !ͮG! EéG>"ëGMG>{IDE(Pv(LMG( #gx !DMͮG~F>!i`ͫG(DF!bIͩGF!nI>{I(F!ͮG!RͮGF>{I>{I MG!~oͮG!&îG MG!FéGF`iGDEAD!\IͩG>&!oëG@G!rIéG MG!|ͮG>!zGëGDMGMGDE>{IMG>{IDEDE(@0 &ԂG܏GuGF=F!zG/|/g}/o#Ed?I>*ëG*H>! DK{@!* !VI>{I}{I|{I7GG!sDDEEDE7G>#{I!SͮGͮG>"##ͫG[{@ EDEE>*ͫG!#"ͮGͮG##>{I>[ͫG>!RͫG>EͫG!DE~( bI&DDO *@"@!uIͩGDEE8F>7GG!KEͮG>>{I{I>2!0@ͫG!eIéG>>*!4@ͫG>"!2@êG((0R7R7R7?7Gg.>ͮG!HͩG* @#EE>ͫGDED!HéG!;@˶!IéG!;@N#F #: @: @DE?DMGMG!KͮG!@ͮG!) îG*I>{I!EͩG!îGÈ@Ë@Î@Ñ@Ô@×@Ú@Ý@à@ã@æ@é@ì@ï@@vvvvvvvvvvvvvvvvvvvvvvvvvTEST pH  t=1 20  a$="Spectrum Emulator."  a$ (t  ASpectrum Emulator.E-Mail #111327 05-NOV-91 16:46 From: Zorbas To: Sysope (private message) Re: feedback (N)ext, (P)revious, or (R)ead this message? Hallo Sysop Egbert, ik heb hier wat feedback voor Jan Rouvroye, die in het laatste ST blad een artikeltje over va_arg etc. in C heeft geschreven. Kun jij zorgen dat hij het krijgt? ---------------------- Hallo Jan, Ik heb je artikeltje in ST gelezen, en ik moet zeggen dat ik het als optimalisering een beetje overdreven vind. Je algoritme wint als je het tienduizend keer uitvoert op een typische pad-naam-extensie combinatie als hieronder, ongeveer 1 seconde, 30% sneller dan de 'straightforward way'. Hoe vaak genereer jij een pad in je C programma's? Als illustratie van de va_arg techniek heeft het een zekere waarde, maar je notering en met name het commentaar door de routine heen maken de sourcetekst slecht leesbaar. Het is beter het commentaar er naast te zetten ipv ertussen. Verder is het tellen van argumenten niet mijn favoriete bezigheid: ik prefereer het aangeven van een laatste element door NULL. zie algoritme C, dat ik wat eleganter vind. Onderstaand voorbeeld is in TC/ST 2.0 #include #include #include #include char * alga(char * dest, char * drive, char * path, char * name,char * ext); char * algb(int count, char * dest, ...); char * algc(char * dest , ...); int main(void) { time_t t ; long i ; char dest[100] ; char * drive = "a:\\"; char * path = "dir\\dir\\directory\\directory\\" ; char * name = "filenaam" ; char * ext = ".ext" ; t = clock(); for(i=0;i<10000;i++) { alga(dest,drive,path,name,ext); } printf("\nalgorithm a: %ld ticks",clock()-t); t = clock(); for(i=0;i<10000;i++) {algb(4,dest,drive,path,name,ext); } printf("\nalgorithm b: %ld ticks",clock()-t); t = clock(); for(i=0;i<10000;i++) {algc(dest,drive,path,name,ext,NULL); } printf("\nalgorithm c: %ld ticks",clock()-t); return 0 ; } char * alga(char * dest, char * drive, char * path, char * name,char * ext) { strcpy(dest, drive); strcat(dest,path); strcat(dest,name); return strcat(dest,ext); } char * algb(int count,char * dest,...) { va_list argp ; char * from, * to = dest ; va_start(argp,dest); while(--count >=0) { from = va_arg(argp, char *); while(*from) *to++ = *from++ ; } *to++ = 0 ; va_end(argp) ; return dest ; } char * algc(char * dest,...) { va_list argp ; char * from, * to = dest ; va_start(argp,dest); while((from = va_arg (argp, char *))!= NULL) { while(*from) *to++ = *from++ ; } *to++ = 0 ; va_end(argp) ; return dest ; } Hartelijke groeten, * Bart * Bart van herk, van Houtenstraat 4d, 3039PC Rotterdam. --------------------- Hartelijke groeten, * Bart * ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 EC Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (winter 1992) al meer dan zevenhonderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlot over de software kunt beschikken. De november/december uitgave bevat een compleet overzicht van de Public Domain bibliotheek op dat moment. De Stichting ST geeft ook een speciale PD catalogus disk uit. Deze public domain disk is geproduceerd en gedistribueerd door: ************** Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productiefouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productienummer. ************************************************************************