Q&KOBOLD.p   O`! #@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmo/s@u`wy{} @ @ ` @ ` @ Q!SAUaWY[]_a!cAeagikmoq!sAuawy{}!A!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!AaAa " B b  !"!B!b!!!!!"!""#B"%b"'***+"+B+b+++++,",B,  O`! #@%`')+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmo/s@u`wy{} @ @ ` @ ` @ Q!SAUaWY[]_a!cAeagikmoq!sAuawy{}!A!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!AaAa " B b  !"!B!b!!!!!"!""#B"%b"'***+"+B+b+++++,",B,AHDI_  vIAUTO  `IN_17P2S `LSCSI0_0 DAT u`OINFO_C DAT `PINFO_D DAT `INFO_E DAT `INFO_F DAT `c .  ..  AHDICONF  }IUTO  IHDX  IHINSTALL  IMUNGED  ICACHE090PRG !COLDBOOTPRG #DESCRIPTTXT $.  ..  AHDICONFDOC VxKVAHDICONFPRG 'qK qAHDICONFRSC KpK. b>*I * * * PINNBALL Ver 1.76 * * * * Bolltrff version * * * * Updated 940327 Time 19.56 * * * *I * * * C R E W * * * * (Game Design) * * Michael Brunnstrm * * Peter Zetterberg * * * * (Additional Design) * * Johan Nilsson * * Magnus Zetterberg * * * * (Software Programmers) * * Michael Brunnstrm - Main Code * * Tord Jansson - Replay Routine * * Kalle Lundqvist - Ball Programming * * Hans Hrrd - No Border Routine * * * * (Falcon Programming) * * Tord Jansson * * * * (Graphics) * * Peter Zetterberg * * * * (Music and Noice) * * Per Almred * * * * (Quality Assuranc.  ..  HDX PRG !;HHDX RSC "qQWINCAP  "` b.  ..  HINSTALLPRG "HHINSTALLRSC " SHDRIVERRAW #+b.  ..  SHDRIVERSYS #+Dokumentation zu: AHDICONF.PRG \ AHDICONF.RSC >- (c) 1990 Thomas Schallar AHDICONF.DOC / Wien, den 11. Feber 1990 Mit AHDICONF kann man die Parameter des Atari Hard Disk Treibers ab Version 3.00 einstellen. Mit dem Menpunk "Treiber laden..." kann man folgende Files anwhlen und einstellen: SHDRIVER.SYS (installierter autobootfhiger Treiber auf der Boot- Partition; meist also auf C:) AHDI.PRG (normaler Treiber fr Disketten-Boot) SHDRIVER.RAW (Prototyp fr HINSTALL.PRG; wird als SHDRIVER.SYS installiert) Der Menpunkt "Einstellen..." ermglicht es nun, die patchbaren Parameter frei einzustellen. Dazu zhlen: * Zahl der Ordner, die bei Betriebssystem-Versionen vor TOS 1.4 zum System-Pool dazugegeben werden sollen (also wie bei FOLDRxxx.PRG). * Mindestgre der Sektor-Buffer. Die Sektor-Gre liegt bei Partitions kleiner 16MB bei 512KB, bis 32MB bei 1KB, bis 64MB bei 2KB und so weiter. Damit man _jede_ beliebig partitionierte Wechselplatte ohne Reboot verarbeiten kann, mu man mit einer 44MB groen Partition rechnen. Deswegen sollte dieser Wert auf 2KB (also 2048 Bytes) eingestellt werden. * Zahl der mindestens anzulegenden Partitionen fr jede Unit. blicherweise kann man hier die Partitionen 0 bis 7 einstellen. Dieser Wert wird verwendet, wenn unter der jeweiligen Unit ein _wechselbares_ Speichermedium vorgefunden wird. Stellen Sie hier also 4 ein, wenn Sie bis zu 4 Partitions pro Wechselplatte haben (ein durchaus blicher und brauchbarer Wert). Mit "Treiber speichern" knnen Sie die hier getroffenen Einstellungen in der bei "Treiber laden..." angegebenen Datei speichern. Ich empfehle, immer die Datei SHDRIVER.SYS auf der C:- Partition zu patchen. m.f.G. Thomas Schallar `&p``>>> TURBO-C < for ATARI-ST Version 1.1 (C)88/89 Borland International G#J$VH3 k # Ј<.@#<"@(I$k,"Jf"JfB// ?<?<JNAO N8A6<HCBB`6 !jBJ)gHiRC` "fSI "WJAkHiRCBSQJ)gHiRCHy`$O0 J"LN? 9g @N 9(g @N 9g @NNb?<LNAH>ON dB@N ~A0N J@frpN\A=pN p`A,BAB@N A(rB@N K$ MrB@N p o,N o("hl" o("h"B@CA,NvEJGHIFMDA4N o 4f0/<_@|b2@0;N&&&&&&&&R&&HoDHoJHoP"J o4N O ????BgBgBBBAB@N O ????BgBgBBBApN O ???4rB@ o.N 4\OB@ o(N L o(p `VHyC"A,NXOJ@flJCo0NpAN6m?|'`6 o'd~Ro`&0/gpSo`0/gbod0/lBo?/C U h PNZTO???4BAp UN\O`" o d` oc?/C U hD PN TO???4BAp UN\O`po2/0@gRo0` 0/0gSo0?/0C U h4 PNTO???4BAp UNH\O`$0/0 7 dvR7 `0/07 gdS7 0/0BA7 ?C U h PN`TO???4BAp UN\O`( o2fAC""""2p2 Up ????BgBgBBBApNO ????BgBgBBBApNO r0/: o,Nt`OPL|NuJfSJ@kffNuD@S@gQBNuS@QNupRJfNuH8UO&H$I(oHWNDXO0fBp`f $\fRLfB@TOLNu??O68J@l prN DCJDl rpN DDA2pNHo"oA D @NXOA0N:O86NuH>O&H*IEF lD&@$R(K`V<%fLBD:<0m<9nHr A|08RE`>B@HtAXWfL2( N%CDLSTUXYcdlstuxyLzZzZBp`JEfH`BW<Dg<dgz<Lgr<lf`hp`JEfx*TJ`2SDJAn`h<JDfJEn\J@g&,K`rFt4A0(N2SDJAn`22gJFl -4DB<SDJEf0MB&r2 HA<0t4 <JBb`f`<Df,,K`r2 HA<0t4 <2SDJAn`,K`0r2 HA<0t4 <JBf`< 2SDJAn`2SDJAn`v.JDfJEnjJ@g",K`pA00SDJ@n`D0gJl -"D.SDJEf.MB& r N.<0 r N.Jb`f`<Lf*,K` r N<0 r N.0SDJ@n`,K`. r N<0 r Np.Jf`< 0SDJ@n`0SDJ@n`,ZJDfJEnJEf `f`r<Sf"`g0SDJ@n` 0SDJ@n`JBF`RFRNfFd<p0F` 0SDJ@n`0SFJ@b`<pFN2|?A4J||?BH… H… HB<0:/Hŋ HE<0/H <0>/HǏ HG<0/4H… <0:Hŋ HE<0`<pF@?@N2|??A0H|tDgv.`v: DrDgd?@ t0DgJ@f?| ` o oo 2/ H ?A JAft@Dg r0/ ` 2/ H HA<0tDgrDgB4/H… ?B JBf:<Dg r0/ ` 2/H HA<0tDgrDg:4/H… ?B JBf:<Dg r0/ ` 2/H HA<0rDgX4B|SBg SBgSBg2`B | orP`rAM`* | orp`ram`| orp`ra`fB OL|Nup `Jp`D#p`8#A000000p*`#3p2`#A0000000 0 0p3`/ #p6a"_2"o2"o2"o 2Nu#3p4`#pn`po`/A00ppav"_"Nu#3p`Z#A00p `D#A00p!`.#3pN`##pZa "o2Nu3@@A CB@22220<"<zNBA0Nu   5"!/ G g/ &S?<INA\O`G g/ &S?<INA\O`&_Nu$HBJBf($HBJBf H@B@H@NuB@H@HB0@0H@0H@Nu AH@r2B@tЀӁd҈рӁQF@Nu$HBJBf"$HBJBfB@H@NuB@H@HB0B@H@Nu A"B@H@HABAtҁрdЈӁрQNu/ Hzf?<?<NMPO/Hz?<&NN\O?<?<NMPO$_Nu OJx@331B x@f1J x@fp!PNu.H3 3Nu//??<?NAO Nu??<>NAXONu//??<@NAO Nu?/?<=NAPONu??/?<BNAO Nu/ ???<NM\O$_Nu SHDRIVER.SYSAHDICONF.RSC[3][ |Kann Resource-Datei |"AHDICONF.RSC" nicht|laden!][ Abbruch ]Compiliert mit Turbo C -Version 2.0eVersion 1.0 Feb 11 1990 um 14:09:06C:\*.SYS%d.%2D%4D%1D0123456789ABCDEF f8d J NRZ  ,$   .$ "8  .  Datei ber AHDI-Config -123456 Treiber laden... Treiber speichern- Einstellen...- ProgrammendeSOFT(c) 1990 Thomas SchallarFIDO 2:310/12.12CVDIESE PROGRAMM-VERSION GILT ALS PUBLIC DOMAINTreiber-Version _automatisch0zustzliche OrdnerSektorgre mindestens0Bytesmindestens00Partitions auf Unit0In OrdnungVerwerfen[3][ |Fehler beim Laden des|Treibers!| |Daten nicht geladen... ][ Abbruch ][3][ |Fehler beim Speichern des|Treibers!| |Datern nicht gespeichert... ][ Abbruch ][1][ |Dies ist keine gltige|AHDI-Version!| |Daten nicht geladen... ][ Abbruch ]@@ ?   ?ߞ@ Qa Q@ R R R R Q@ Q` P Pa P@ P P PP PP PP PP PP Q Qa P@ Pa p @@pppppppppppppp?ppppppppppp? 0    @A.BZ[hmn 0((' P P   $ ( P/ D [ ] _ acegz & 0.& &&  &<40  0\ @+ @P@ @-o 0  @l@# & 0 @ @@(*@-  %$ `*b `H```\.*e! $o *`!P#`! AHDI : Dec 03 1991 v5.00 Atari Corp. 1985, 1986, 1987, 1988, 1989, 1990, 1991 NAHDIE@- 0/BA yC|`$0/2/ yC`0/BA yC hU@kNg4ypm>|k:yrm0|k,29ҒypyrAl`|lEJ2k INUo2/At3CJ1fH@?aPTLJ@gpa <#/?9TWBg?</9?< a _J@g/2/a _ g`t493 fRy`2< y hUfaH` 3arJ@gj`,A0/B0At`/?/a\JjpNuH@Q alJgV f&P ##avJg2k gSyjP3 g3`J9 fLQpNuJ g(g g g gp` "(YHAYNu fNu/ 9*d NuP>a"|@ra`P>?a"|a 3|a23|a(a @ er`&6 Ae Agr`rSAHAJAfHA`HARAAHraha`J@fLQp` pC`6`6P>a:"|at3|a3|aat@"<a`<3A<EJ@kUBHAHA"abkQ3A<HAHA"<axNu/   XNu b2` /2"NuJ8J8J8J8Nu <и8g bp`p9ffpNua o 2/ SAJ9 gpa9 aJ@kg aQpNuaV o 2/ SAJ9 gpaZ9099gaa "|"| aCSBabJ@kQpNuad8gb`D B@2/ 88NqNqa8fbp`B@NuababNuҹ@8f*c 8g bap`,08g?a0`p81Nua8aJ@gX`adak8a$J@k Nuҹ@8fbp`pNu88gbp`p8Nu?akaTNu |"9<ҐNu |"98ҐNu |"9,ҐNu# |)aJyfB?< NA\#/</<_MCHa0POQ x!"n"ONzP !.IQ""x!"$O9P"Q AH??< NA\?NA/9:>Nu/<0?< NA?<0<LNA o2/0/ HSoQBNu o0/JfBNuf SNu"/0<NBNu#:LNN/9:LNu#:LNM/9:LNu#:LNA/9:LNu x0(H@0("d><Nu$Header$ o /"/ HA4HA@`VVW|Nu@ g0// *ONo?N$d.M*_NuN$dB?< NA/8NuNV.P?<BgNXJ@g.P?<BgNXJ@gl.P?<?<NXJ@gP.P?<BgNXJ@g6.P?<$BgNXJ@g.P,?<BgNXJ@f 0<`.P?<BgNXJ@g.PB?<BgNXJ@g.Tx?<!BgNXJ@g.]?<BgNXJ@gj.]?<BgNXJ@gP.P?<#BgNXJ@g6.P?<BgNXJ@g.P?<BgNXJ@f 0<`.QL?< BgNXJ@g.W?< BgNXJ@g.^?< BgNXJ@gj.Q?< BgNXJ@gP.QH?< BgNXJ@g6.O?<BgNXJ@g.PT?<BgNXJ@f 0<`.R8?<BgNXJ@gR.QT?<BgNXJ@g8.Q?<?<NXJ@g.R(?<BgNXJ@f 0<`.Q0?< BgNXJ@g.QD?<BgNXJ@g.P?<BgNXJ@g.QP?<BgNXJ@g.Q,?<BgNXJ@gn.Q(?<?<NXJ@gR.P?<?<NXJ@g6.Qr?<BgNXJ@g.P?<BgNXJ@f 0<`.P?<?<NXJ@g.SP?<$?<NXJ@f 0<`.P?<?<NXJ@g.SbBg?<NXJ@g.P(?<?<NXJ@gl.P?< ?<NXJ@gP.RB?<?<NXJ@g4.]BgBgNXJ@g.^?<BgNXJ@f 0<`B@`N^NuNVB/?.NT\=@g">NYJ@f p`&`p` gB` .`N^NuNV n!| n!y^N^NuNVJ f-|`(/</. N\Pмr -@ .>N-@b.Q@ND`Jn f B`T/<BgN T/NP-@B` n"yU .mJUc.UN%#U-n` yUB .m/</.N\P#^. /9UNXN"B@`N^NuNV./9U 9^??.NP=@g0>NYJ@gJyQ6f.P0ND0<` N`N^NuNV.UN-@Jnf .` 9^r -@/</.NPB/</.NP-@` .l 9UЮ.NJf nf .`< nf .Ю`&/</.N\P`N^NuNV yUBhN"./9U 9^??.NnP=@g&>NYJ@g.R$ND0<`B@`N^NuNVJg g=|-|/</.NP-@`JngBn-n` 9UЮ.N-@ 9UЮ.N-@ .o>. 9UЮ/NX. 9UЮ/NX=| .ot`RN^NuNV-| . м-@`/< .Ю/N\P-@/</.NPйU.N-@ .f0<`H`. .l .-@` .м-@ .lB@``hN^NuNVH 9^r -@BB` n"yU0H .mؾ<g 0<`B@`JLN^NuNVH 9^r -@<B` n"yU0H .mH? yU(_@JLN^NuNVBn0. @>N-@b.Q@ND0<`bJn fBWN -@B`>N -@>N -@.N BnJgdBn`N.0n"|U/0NXJ@f$0n2nU nn0.n m` n f.>N J=@g nf.QND` =n0.H".oDJn f(0.HЮ.?<?.N XJ@f`.P$ND .=@ n f.>N J=@g nf.QND`/</.NPйU-@Bn`. n2n.0.Ю/NXn0.nmN" n f0.H".f =|`=nJc .N%0.`N^NuNVBn>N׮-@ .Ю-@>N-@>N -@.N /</.NP-@-|` 9UЮ.N-@nv .mV0nU n nf4>/.?./. ?.N J@l 0<`VBn .mpJng0>/.?./. ?.N J@l 0<`B@`N^NuNVB>N׮-@>N-@>N -@.N Bn/</.NP-@=|`L 9U2.HЁ.N-@ .谮m .谮n`=|nJnf0.H".찁m .`N^NuNVB@0. H"nB@0. "n@N^NuNV=|=| nHn0.H=@ n(HnB@0.nB@0.`N^NuNV . r"n . "n@ . "n@N^NuNV-|-| nHHr .-@ n(HH .-@ .-| n(HH . .`N^NuNV-|-| nHHr .-@ n(HHr .-@ .-| n(HH .-@ .-| n(HH . .`N^NuNV.?<HNT#Ln.Q@NDH`>/</9LN\Po #L.L?<HNT-@b.Q@NDH`BWN -@./.NX"yP"iA".1 yP h/NX yPBh.PNvB`N././. ?.N -@l gB@`0<` .ѮnJnfN.?<INTJl .` .`N^NuNVB` n  . mN^NuNVBn-n BBnB/</9LN\P#L`* .Lo-yL`-n. .r //.NlP./. .??.NnP=@g>NYJ@f =|`-n-n`./.?<?.NnP=@g>NYJ@f =|`r l.PND=@`R0nU n nf>>Bg?.NX=@l =|` 0.HѮ.N$BnJf2Jng:>Bg?.NX=@l =|`0.HѮ.N$Bn./. .??.NP=@g\>NYJ@f =|`\-n-n`"./.?<?.NP=@gX>NYJ@f =|` l.PND=@`0nU n`V././.NPJ@f: l.PND=@`0nU n nf>>Bg?.NX=@l =|`T0.HѮ.N$BnJfBn`=|Jng>>Bg?.NX=@l =|`0.HѮ.N$`VJngN. .?/./.?.Nz =@l=|``0.HѮ.N$ .Ѯ ./9P/. . / yP0(H/NP/N\P _1@>RJ?9ShBgBg?<?</9PNJfJnl0.H`` .`N^NuNV./.NX"yP"iA">RJ?9ShBgBg?<?</9PNN^NuNVB@=@=@0.Hr ././.NPJ@gB@`Bn`././.NPJ@f"0.HЮ 2nU"n nf0>Bg?.NX=@l 0.`Z0.nBnn0.nmtJng,>Bg?.NX=@l 0.`0.n0.`N^NuNVBy]3T~By>rBy>pByR"B/.?. NT\=@g&>NYJ@g.Q$ND0<`ByP> N #^f.]ND`h`.J^l$ ^f.Q$ND0<`8.?. NfT=@|f0<``Jng.QjND` n#Q`.:P/.?. Nt\|f&J:Pc.:P?<INT0<` yUg>/9:PNBX>T|NXL|f 0<`p3>l3R"3T|Q"N*`0N?`j n :PB@`2J:Pc.:P?<INTJPPc.PPN%0<`3R"By]3T~``|g|g|g``By>pBy]3T~3R"3U09T||3]N"z`J:Pc(>Q"/9:PNX.:P?<INTJPPc.PPN%0<`63>nJ:Pc(>Q"/9:PNX.:P?<INT>UNQ|f nf09T|n|=@.^?.?.N(Xn`.^?.?.N(X` yT|fF no"=|.^?.?.N(X`.^?.?.N(X`h yT|fF no"=|.^?.?.N(X`.^?.?.N(X`.^?.?.N(Xn nm y^1| y^Bh y^Bh* y^BhB y^BhZ y^Bhr>T|W?<N&TBBgNZT.^Nvy:j`l>/9^NX=@`8Bn`JBn=|`T|W?<N&T`3U09T||3]>T|W?<N&T`3U3T|]>T|?<N&T`3U09T||3]>T|W?<N&T`p3U3T|]>T|?<N&T`H3U3T|]>T|?<N&T` `| |b@0@2 PNJnfJngNB?<NZT0.`N^NuNV yT|o0<29T|n A=@ Bn`0n"|2P00й^ @Bh 0.nm00.n l$0n"|2P00й^ @h Jy:jg8>RJ?9ShBgBg?<0n"|2P?0/9^Nn nmXy:jN^NuNV0n "|2.?. ?.N/X n2n 2z2 p 2n 2 Jy:jg6>RJ?9ShBgBg?<0n "|2z?0/.NN^NuNV n f0n"|2P00Ю @!|4i 0n"|2P00Ю @Bh 0n"|2P00Ю @1|@ n 2n2&2 p 4p`> NO-@BW0n"|24/0 n/(NRJ?9ShBgBg?<0n"|2P?0/. N>RJ?9ShBgBg?<0n"|2&?0/. NN^NuNV=|Jy>pg 0<`B@3:j y]Bh y]Bh y]Bhb y]Bhz09>ry>rJ@f^-yPPBn`B ng& n hf 9^м"nѩ n-hn0.yT|m=|`.]?.BN6\n nmJyR"g y]Bh:ByR"Jy>pfBBgNZT.]Nvy:j`By>p yT|o y]Bh y]1|@` y]1| y]Bh>RJ?9ShBgBg?<?</9]N>/9]NX=@`3>nJ:Pc(>Q"/9:PNX.:P?<INT3U09T||3]>UNQ|f 0<`Bn`Bn` yT|oBn`` =|`>N0|f 0<`Bn`j>N0|f 0<`~Bn`H>N0|f 0<`\Bn`&.]N3|f 0<`8Bn`Bn`By]3T~>Q"NXL|f 0<`=|`.]?.BN6\n nm3Q"T| y]Bh:>RJ?9ShBgBg?<?</9]N`b.]BgN4T=@`J.]Bg/<N6\`0.]Bg/<N6\`.]?<N4T=@`.]?</<N6\`.]?</<N6\`.]?<N4T=@`.]?</<N6\`.]?</<N6\`r.]?<N4T=@`X.]?</<N6\`<.]?</<N6\` `| |b@0@2 PNJnfLJy>pfNB?<NZT0.`N^NuNVBnBn n f n r n o n m n   n # 0.H H@|0"n  n   n t n o n   n # 0. H H@|0"N4n@n0. H =@ n nf=|` n n "N4n JnnJng n   n BN^NuNV3>p y]=h& y]=h>.///N .O/?</9]NL ./?</9]NL 09Onnl nf0.nyOnnm y]f0.n"y]3@:`0."y]i:0<y]|l 0<` 09]|3]09]|yT~o yT~09T~yT|o>NP|f 0<`` y]f B@``0.nyOn@nm y]f0.n"y]3@:`0.H"y]i:y]09]|yT~o yT~09T~yT|o>NP|f 0<``0.yOl nfN09Onnm y]n y]Bh:By]`0."y]i:y]`V09On@nm y]f y]Bh:`0.H"y]i:Jy]g y]>RJ?9ShBgBg?<?</9]NN^NuNV3>p n0(&"n2)>A=@>?<?</.NP=@0.H3]09]yT~l09]|yT~oL09]|3T~09T~yT|o,09T~yT|=@>NP|f 0<`B0.]H"n3@:>RJ?9ShBgBg?<?</.NN^NuNV0.y]=@>NO-@>WNO-@>WNO-@ nff nJgZJgR ngF>R?./. N\|f 0<`t n. ?.BN6\`R?./. N\|f 0<`. ?./<N6\`. ?.BN6\`Jy]f,Jnf$ nf. ?.BN6\`tJy]f,Jnf$ ng. ?.BN6\`@0<"n ng* nf0<"n. ?.BN6\. ? NO-@> WNO-@-yQ`Jm .Юo .-@Jo .-@ .o-n n (Юo ."n")-@ n (Юo.RB?<N:TB@` ."nѩ n`Jlz .D-@ n (o8 ."n n l ng n!n`* n (n nf n!| n l n!| nJf n09]n nf0n "|100Ю @!|4v 0n "|100Ю @Bh 0n "|100Ю @1|@0n "|100Ю @1| 0n "|100Ю @Bh0n "|100Ю @1| 0n "|100Ю @Bh` BW0n "|1/0 n/(NRJ?9ShBgBg?<0n "|1?0/.N>RJ?9ShBgBg?<0n "|1?0/.N>RJ?9ShBgBg?<0n "|1?0/.N>RJ?9ShBgBg?<0n "|1?0/.N#Q`:V-yPPByR`" n (:VyR n-h ng nJn3RT|>/92/9:VN

RJ?9ShBgBg?<?</.N>RJ?9ShBgBg?<?</.NN^NuNVBn/</.N\P-@ .".t 塐-@/</.N\PJg/</.N\P-@`BJl .D-@Jl B-@-@ o/. /</.N\Pм0 _ n/</</.N\P/NPJg l, n 0 n 0 n`$ dl n 0 n co/. /<d/.N\Pм0 _ n/<d/<d/.N\P/NPJg l n 0 n oV/. /< /.N\Pм0 _ /< /< /.N\P/NPn .м0"n  nJg0 n . .м0"n  n n M n b nJng$` n   n nm n BN^NuNVJy>ll3>l.:l/9Q`NǮXBn-|:l`0n"|3:00йW @1|0n"|3:00йW @!n 0n"|3:00йW @Bh 0n"|3:00йW @1|` nHJfn n l nJfJ`0n"|3:00йW @1|0n"|3:00йW @!| 0n"|3:00йW @1| 0n"|3:00йW @Bhn n mj yWBhR yWBhj yWBh.WN*=@|g@ ng6By>nBn`.0n"|3:00йW @( fn n m n m 0.`0n"|3:00йW @-h 3T|3UJPPc.PPN%/< 0yT|/NP.?<HNT#:Pb2.Q@NDJ:Pc.:P?<INT0<`<>T|/9:PNXByT|.Q`/./9:PN4P0.`N^NuNVBnBn n # n0.H H@|0"N4n@n0.H =@n`&n n "N4n nJnn` n   n nm n BN^NuNV>N -@.N -y^Bn`.Jnf .м-@`V nf09U Ю @-h`2 n 2.ؒ| 02.ؒ| Ү "A")Ё-@0. Ю @g0.ذyUf0. Ю @!n`~ no n 2. 0-@`0. Ю @-h. .䐼r /NObX#U./9UNObX>NOHr #U/</9UN\P#Sl/9Sl/.N\P-@/9U/</.N\Pм/N\Pм=@ Pl-|`/<P/.N\P-@/< /9UN\PF//< /9UN\PЮ-@/9U ./N\Pм=@ no8/9SlB@0.HnH@B@H@/NPйSlм=@`,/9SlB@0.Hn|H@B@H@/NP=@BnB`Bn`(.0.HЮ/NX|gn0.԰ne0.԰nd"0.|HѮ0.|HѮ`P>/.?.NK\=@l 0<`\Jng>N -@.N `=|JngHJg Slo .葮.NI-@ .ѮJno\ n 2.ؒ| 0Ю谹Q`o 0.ؐ| Ю @!yQ`` .2.ؒ| Ү "Aѩ .2. Ү "A0. Ю @!n ng09T||ng n 2. 0m0. Ю @-h no< n 2. .NJr/0. Ю @!_`, n 2. .NJr/0. Ю @!_ .2. Ү "A")-@Jg6 .2.| Ү "Aѩ .2.| Ү "An0.ذyT|m yUg n (f: n ($f,=yT| .м29U Ү "A`=|0.̐|=@`>0. Ю @g" .м2. Ү "A`nJnl 9^oBn`x n 2. 0".ҼfR 9^м2. Ү "A#@0. Ю @Jo 9^2. Ү "An nmB@`N^NuNV Slof/9Sl/.NPJg/9Sl/.N\Pм`/9Sl/.N\P-@/9Sl/.NP`` .`N^NuNV Slo,/9Sl/9Sl/.N\P/NP`` .`N^NuNV/</.N\P=@.?.NxT./. NXN^NuNVB/?.NT\=@g&>NYJ@g.Q$ND0<`l#Q`BBn`J0. Ю @g0. Ю @ (Ѯ .Q`o 0<`n nmB@`N^NuNV=|B0.r -@.?<HNT-@b.Q@ND=|`N4-@././.NlP=n-n Bn./.?.?.NnP=@gN>NYJ@f =|`Bn`.B?<?.NnP=@g>NYJ@f =|`h l.PND=@`H0nU n nfP yQ6f Bn`=|>?.?.NX=@l.PND=@`BnnJnf$JngF yQ6f Bn`=|>?.?.NX=@l =|`zBn=n-n Bn./.?.?.NP=@gF>NYJ@f =|`,Bn`./.?<?.NP=@g>NYJ@f =|` l.PND=@`0nU n nfF yQ6f Bn`=|>?.?.NX=@l =|`hBnnJnf,JngF yQ6f Bn`=|>?.?.NX=@l =|`BnJc.?<INTJnl 0.`0Jnf">N J@g 0<`0<`B@`N^NuNV/. /.NPJg/. /.N\Pм`/. /.N\P`N^NuNV=|B@0.nb B@0.``N^NuNVJnl 91`LJnf 9PP`: yPP-h=|` n-hn0.nm .`N^NuNVJPPf 9PP`*-yPP` n-h nJf .`N^NuNV 9PP1fd> N#PPb,.Q@NDJPPc.PPN%0<` yPP!y1 yPP!| yPPBNP>-@Bn`r> N/ n!_b,.Q@NDJPPc.PPN%0<`: n-h n!y1 n!| nBn0.nmN^NuNV yT|o409T|y]=@0<nyT|09T|n3]`3T|=|3U/< 0yT|/NP.?<HNT#:Pb>.Q@NDJ:Pc.:P?<INT.PPN%0<`>T|/9:PNX-yPPBn`. nfHJ:Vo: n (:Vo0. й:P @!y:V n (:V`0. й:P @"n!i0. й:P @0.nf`0. й:P @|X0. й:P @|G0. й:P @|M0. й:P @!|`> nfD ng nf00. й:P @B0. й:P @!|` nf: nf00. й:P @B0. й:P @!|` n (lR0. й:P @|G0. й:P @|E0. й:P @|M n-h`N0. й:P @|B0. й:P @|G0. й:P @|M n-hn0.yT|m.PPN% ng >NTB@`N^NuNV=|`00. й:P @2. ҹ:P"A (ѩn0.y]m nf B@` `=y]0.yT|lx0.| й:P @2. ҹ:P"A!i0.| й:P @ y:P2.| 0lT0.| й:P @|G0.| й:P @|E0.| й:P @|M`P0.| й:P @|B0.| й:P @|G0.| й:P @|M0. й:P @B0. й:P @!|0. й:P @|00. й:P @|00. й:P @|0yT|0.yT|@nDlx0.| й:P @2. ҹ:P"A!i0.| й:P @ y:P2.| 0lT0.| й:P @|G0.| й:P @|E0.| й:P @|M`P0.| й:P @|B0.| й:P @|G0.| й:P @|M0. й:P @B0. й:P @!|0. й:P @|00. й:P @|00. й:P @|0yT|N^NuNV#1PP>NP|f 0<`f-yPPBn`L0. й:P @g$ n2. ҹ:P"A!i n n-hn0.nmN^NuNVt=|| no 0<`B?< NT#]0.|2.`y6 =@z0.|2.`y6"=@xJnzf Jnxg".?<?.NX=@~`.?<?.NX=@~N.]?< NTJn~g.4~ND`:Jnzf Jnxg.H=@~`..H=@~B@0.~`N^NuNVB@0.`>.P8ND`B.SPND`2.R0ND`"0<` `|gް|'gȰ|(g`B@`N^NuNV-|4 no n` non0.|0"n yP h yPBh".PN*0<`N^NuNV n!n N^NuNVH*n n : n h n ;h n ;h n h n h n h n h n ( HH/ n (HH/ n B@0H@B@H@/NP/NP/ n!_JL N^NuNV n PbF n Pde: n (n, n (m n (n n ( o 0<`B@`N^NuNV n04 ny4 n1y4 n1y4 ny4 ny4 ny4 ny4 N^NuNVA-H=|` nB0.nJ@f||| n >/N]X n h n >/N]X n >/N]X n h n h .?<?.NX`N^NuNVA -H n"n n"niN^NuNVj=|zBnt0.z2.`y6 =@v0.z2.`y6"=@x.N[ n JPgJnvfJnxf no nBP0.t`.n/p/r?.Na8 =@t n0r nnp n1nr n1nr nnn `D./|NX./.NX|f0 yTxBh:"yTx"iA|".TxN*0<`JnvfJnxf no nBP nB( nB( ./<4NXJ@f ."n2./<4NXJ@f .H"n@./<4NXJ@f ."n3@./<4NXJ@f ."n3@./<4NXJ@f .H"n@./<4NXJ@f .H"n@ ./<4NXJ@f .H"n@ ./<4NXJ@f .H"n@ ./<4NXJ@f ."n2JnvfJnxf no2 nJPg nJ(g nJ( f n 0 nBP0.t`N^NuNV.?<?.NfX .QgB@`0< .UgBA`2<A .AgBA`2<A .NgBA`2<AgB@`Z n 0<@"n  n | n B( n | n | n B(. ?<?.NX`N^NuNV-| -| -| B?< NT#]NBn` N2nB(n nm.?<BgBg?.NP=@N.]?< NTJng 0<`Bn` N2nJ(fn nm nf.PND0<`A-H n( H=@0.@=@ n(Hn n 0 nh n|.HH/0n/.HH/NP/NP-@Bn`0.HЮ./?<?.NP=@fB?< NT#]N nHH-@?r .-@ nHH-@ .-@ . nHH-@ .N.]?< NT м䰮f*`>NYJ@f`n nm nl n` nB@`N^NuNVH =| nfBy4B`Jy4fByPBG*|>t09PH`j  g  fP  f 0|y4l - f|B*|>t09PH|yPƟy4 `|y4mJnfJy4gBy4BB` y4m20yP4>tB(By4 <>t29PHЁ`JyPg2*|>t09PH(|>tBG`|y4mByP <>t29PHЁ294HЁ./<?.?<?NP=@lB` 0.y4Jy4fB``JL0N^NuNV-n `6` n"n nJf n (\f>Nc-@f nB . f Jg 0<`B@`N^NuNVH*n>. <. np`>Ni4J@fNkB`>NjVJ@fNkB`v>NjJ@fNkB`\>NohJ@fNkp`B>?/ Np\J@gNkp`3BtByBv yP8(|`:|`T>NohGfB>>?/ Np\J@gNkp`yBtJyBvf3Bv||d:|`X>NohGfF>>?/ Np\J@gNkp`ZyBtJyBvf3Bv` |DcDb`23Bx.Bt?Bg?Nk\Nk <Bt`JL N^NuNVH>.>Ni4J@fNkB`6>NjVJ@fNkp`>NjJ@fNkp` yP:( yP0:BF`, yL 0`"yL"1`gNkp`|Ee yP:(|<<`0FL |EcBBgBg?Nk\ByC~<<`X0FL oNkp`N yLJ0`f(>NohJ@gyC~0yC~C~0|EcNk <C~`JLN^NuNV>?<NT#PfB@` yP0H/ yP0(H/NP.?<HNT#LfB@` yP0H/ yP0(H/NP.?<HNT#LfB@`| yP0H/ yP0(H/NP.?<HNT#QffB@`< yP0H/ yP0(H/NP.?<HNT#P`N^NuNV> yP?( yP0(W yP?(/9LBg?<N JgB@`F> yP?( yP?(/9LBg?<N JgB@`0<`N^NuNV> yP?( yP0(W yP?(/9QfBg?<N JgB@`0<`N^NuNV> 0.|"yP? yP0( W yP?(/9PBg?<N JgB@`0<`N^NuNV.Qf?<INT.L?<INT.L?<INT.P?<INTN^NuNVH? >.<. :. *nJFgZ yL0`H2FL>?NkBTJ@f gB- B@`~(yP yP8(Hĉ |`< g M=IB( (yQf yP8( yP08Hĉ |BC`JgZH||gJ .gBJlg:./ Nq"XnfJFg"0|"yP"yP2) A`. yP0( "yP2)A2H$yP4H… A;@0@H"yPH@;@. / NpDX0<`V , f| g. / NpDX=@.??.?Nk\J@g 0<` g M2nB( JFg$>?NkBTJ@f gB- B@``JEf >NnJFgDf>Noh=@Jng ng0n"yLJ0g&0n"yL0H"yL4n`\<. yL0`H2FL>?NkBTJ@f gB- B@`$(yPBC` |DoB@`JL0N^NuNVH>. yL0pH2GL>Noh<`P yLJ0`g yL0`H2FL`2> yL0pH2GL>Noh<JFg|fJLN^NuNVH>. yP(gJ.0@HйL/Nq"X ne nb 0<`B@0.=@`f.02HAHйL/Nq"Xg 0.H=@n ne nb 0<`B@0.=@B@0.`JLN^NuNVH *n(n BG` |Jf\BF`(Jg  g|f.|| mB0`JL0N^NuNVH?>. <.BE6|`D8CHĉ0DPl 6|`"0DPo :|` 0<` CoB@`JLN^NuNVH *n(n JL0N^NuNVByUN .P@/<P/<O/<PN| 3P~.RJ/<Sh/<Sr/<Sj?<BgNXN>RJ?9Sh?9Sr?9SjBgNP3PByW3QN HrN 3R<.5jN2J@f .5/<5x/<5rN~P`|NBJ@g .5/<5/<5N~P`R3P BBgNZT>/9PNX3Qd`NrJyQdfBW/9PNXJy4g(.Q?<N:T|f N4``>PN>WNNN^NuNV.U/<PF/<U/<U/<PN/<PJBgBg/<PXBgBgBgBgBgBgBgBgBgBg?9Q?<?<?<N8=@.g>N09PX`>Pf?9Pd?9Pb?9P`ND\`B?<NZT09P^`09P``TJyP gBWBgNjT|f`J3Q6ByP Nv4ByQ6`,JyP gBWBgNjT|f` ByP BB?BgNjT|f`ByP N`JyUg.P(ND`2JyP g>BgNjT|f`dByP Nn`TJyP gBWBgNjT|f`2ByP Nx`"``||b@0@4 PN`09P``ByQd``` |g``\ yP`f0.5 yP/(lNX yPBhR.PN*``|g|g|g `>?9P^/9PN\BBgNZT`NBWBgBgBg?< ?9PN `,ByQd`"``H |42<W hNBWNN^NuNV-|56-|52-|5.=|Bn=|BnByPBy]Bn` <5"N4n@"n nm yPBh" yPBhj.PN*|g 0<`0Nv=@l 0<`.5/.2NXBn.2/"N,XJ."f3]`NBnA"-H`0n"|500йPB @1|0n"|500йPB @!n 0n"|500йPB @Bh 0n"|500йPB @1|` nHJfn nl nJfJ=n0n"|500йPB @1|0n"|500йPB @!|5 0n"|500йPB @Bh 0n"|500йPB @1|n`0n"|500йPB @1|0n"|500йPB @!| 0n"|500йPB @1| 0n"|500йPB @Bhn nmj yPBBhR yPBBhj.PBN*|g 0<` Bn`.0n"|500йPB @( fn nm nm0<` f`0.nf3]`Jnf nl.5 yPB2n52/0 NX|fJ yTx2n52ҹPB"A!i yTxBhBW/9TxN*X0<` .5NB-@g./.2NX=|`=|.2 yPB2n52/0 /"//<]?.N]@J@g 0<` 6./<5NXJ@gN4-@`-nr .-@ . no0.|=@` no0.|`0.=@ n6A no -n.6` no n6S0.|0"n6@ y] h 6 y]Bh y]Bh.]N*|g 0<` >.]NvBU>N #^o 9^2< `>N#Ub.Q@ND=@`>N J=@g&BBg?.N XJ@g =|``,BWN .?<?.N XJ@g =|`~`HJ^g ^f&BBg?.N XJ@g =|`B` =|`4B?< NT#]N no>N=@gLN.]?< NT>NX=@>NYJ@g >NZT=|`B nf09WSfT-@#Q`N.]?< NT`p0.2.`y6 =@0.2.`y6"=@Jnf Jng 0<`0<=@Jy]fJnf JngB.?< Bg?<?.NP=@N.?.N``T`"Jng."?.N\PT=@.-HH/.$HH/B0."/NP/NP-@` nl8Bn` N2nB(n n mJnf Jng.?.BgBg?.NPJ@f:.N-@g$N.?.N``TBn`VBn` N2nB(n n m.?< Bg?.?.NP=@Bn` N2nJ(fn n m n f nf=|`z`. n f$=|oN.]?< NT`* nfN.N-@f =|.?.N``T` .?.N``T`H.N-@f,Jf$=|oN.]?< NT```R.-HH/.$HH/B0."/NP/NP-@N."?.N\PT=@`.BBg?.N P=@f(.NR-@gBn`fNBn` N2nB(n n m.?.BgBg?.NP=@f .N-@g Bn`Bn` N2nB(n n mN.?< Bg?<?.NP=@f .N-@g Bn`Bn` N2nB(n n mN.?< Bg?<?.NP=@f .N-@g Bn`$=|oN.]?< NT`#Q`NJnf.,H>?.NT=@N.]?< NTJng4>NX=@>NYJ@g >NZT=|`Bn34N nof.PND=@Jnl JUc.UN%0<`.?</.?.NP-@l.UN%0<`>N J@g.UN%0<`l.UN%B/</NlP.N Jng."/NZX`.Q`/NZXA-H-| <-@` n"nf>?NYJ@g.SXND0<`PJy]f&.5NB-@./:NX.Q`/:?.N\B@`N^NuNVBn-|5-|5=|Jnl yQLBh" yQLBhj.QLN*|g 0<`fByQ6Nv=@l 0<`JBn`.?./N\J@g"Jc.?<INT0<`.?.NKT=@g>Jnl.QT|/.NXByT|./. /.NP.QHNvBU>N #^oj 9^2< `>N#Ub.Q@ND=@`>N J=@g" nf.QND=|`v`TJ^f.]ND=@`T`2 ^f.Q$ND=@`.` =|` .?.NCBTJ@g =|`>N J@g =|`.NlB/?.NT\=@g(>NYJ@g.Q$ND=|`.?./N\=@g`t=yT|=yUBW?<NjTJ@g =|`F3T|3U.?.NTTJ@g =|`Bn343UJUc.UN%>T|/.NXJc.?<INTN0.`N^NuNV=|4.Bg/./.N, .N >?UNYJ@g.SXND0<` yUfB@`09U Ю @#L=|`0. Ю @fB@`.?././.N, n2. ./.?. Nx\3Ug(>UNYJ@g.SXND0<`n0.yT|mbB@`N^NuNVH*n JngB/</.NlP .м-@ nlBn`gP nBn` n2n"M4nin nm n!m n!m`D nBBn` n2nB(n nm n!| n!| n nmL` n"M4. Bn`* n2n"M4. 4nin nm n!|0. 5"n#@ 0.|yT|g M2.| g| n n|X n|G n|M n"M4.| !i nf -8`0. 5"n"Ё"n#@ n"n JL N^NuNVH-|5*n >N #^l$ ^f.Q$ND0<`X yUgBW/ NBXBn`$fB@`* -Q`o<0.|0"n yO h yOBhR.ON*0<`. -r /NObX#U./9UNObX>NOHr #U/</9UN\P#Sl/9Sl/-N\P-@ 9Slr -@.?<HNT-@b..Q@NDJc.?<INT0<`B/9U/.NlP-n 9U>/. N|X n| >/.N|X n| Pl-|`/<P/.N\P-@ 9UH|H@B@H@Ю"9UI|FAHABAHA-@ .>/.N|X .>/.N|X n|/9U"n) HH//.N\Pм/N\Pм=@>/.N|X>?NYJ@g.R ND0<`T/9Sl/9U ./N\PBA2.IHABAHAЁ/NP> -йSl/?.N@\=@g&>NYJ@g.QND0<` -йSl./. 9Sl??.NP=@g&>NYJ@g.PND0<` n0 n1| -йSl./. 9Sl??.NnP=@fD/9SlB0./NPЭйSl./. 9Sl??.NnP=@g&>NYJ@g.QnND0<`J^o>?.N֮T=@|f>N`/9U ./N\PBA2.IHABAHAЁм-@>/9Sl/.NP//9SlB0./NP?/9Sl?.N" Jc.?<INTn 0.yT|mB@`JL N^NuNV-|5 yR8Bhj yR8Bh".R8N*|g 0<`2JyQ4g.PhNDN=@l 0<`>NDJ@g yR4Bh.R4N*0<`0."n yQT h .6 yQT h/NX yQTBh yQTBh.QTN*|g 0<`v.R(Nv>NJ@fTJy4fJBn`>WNJ@gn n m n f34.Q8NDNN^NuNV yQ0Bhj yQ0Bh".Q0N*|f 0<`JyQ4g.PhNDN=@l 0<`>NDJ@g yR4Bh.R4N*0<`z.QDNv>NJ@g N`TJy4fJBn`>WNJ@gn n m n f34.Q8NDN^NuNVBnBn=| yPBh" yPBh: yPBhJ9^fJyXg=|=|`J9^fJy^ f`Jy^ fJyXg =|`J9^f yP1|"`2Jy^ f yP1|`JyXg yP1|:.PN*=@°|f =|` nf=|=| yPN6n nm yPBhj.PN*N^NuNVBn=| yPBh" yPBh: yPBhJ9^fJyXg=|=|`J9^fJy^ f`Jy^ fJyXg =|`J9^f yP1|"`2Jy^ f yP1|`JyXg yP1|:.PN*=@|f =|` nf=|=| yPBh yPBh yQ6f"=|095>йP @Bh `Bn0.n=@=n`*0n"|5>00йP @1| n nm=nBn`D0n"|PJpg$0n"|5>00йP @1| nn0.nm.PN*| g 0<`Bn`l0n"|5>00йP @( g@0n"|PJpg0.n`4`.Sb?<N:T`n0.nm0<`N^NuNV yP,Bh yP,BhBn`N0. мX @JPl =|`Bn0n"|5N00йP, @1n n nm.P,N*|g 0<`RBn`:0n"|5N00йP, @( g0.|C`n nm0<`N^NuNVBn`0nQ0n n m3Q3P~W.Q/<W/<QN>PN^NuNVN=n=n =n =n>?9WNTBW?9WNT.///?< ?9PNX`./NfXJ@gh>?.?.?.N\=yU=yU09UyU|=@09UyT|=@.?9WNT.///?< ?9PNXJng Jnf8NN^NuNVJyWfB?<NZT3WN^NuNVJyWgB?<NZTByWN^NuNV=n=n 0.n =@0. n=@.?<?9WNXN^NuNVBBgNZT.NvBW/.NX=@NB?<NZT0.`N^NuNV.S`/<T/<PL/<PH/.N>S`?9T?9PL?9PHBgBgBgBg?<N\>RJ?9ShBgBg?<Bg/.NN^NuNV>S`?9T?9PL?9PHBgBgBgBg?<N\N^NuNV>N-@r .-@>N .`N^NuNVBn`0.yUg0. Ю @fB@` no n2. 0-@`0. Ю @-h .lB0. Ю @|G0. Ю @|E0. Ю @|M`>0. Ю @|B0. Ю @|G0. Ю @|Mn0.yT|mN^NuNVB=n./NXBU>N #^ot 9^2< `>N#Ub.Q@ND`0>N JH-@g..UN% f.QND0<``.J^l$ ^f.Q$ND0<`B/?<?.NP=@g2.UN%>NYJ@g.PND0<`nA-H.Sp/.N2X./.N2X./.N2X./.N2X./. N2X/<B0./N\P#Sl/9SlB0./NP=@ n( H3^/9SlB0./NP-@B0.Ю-@B0.Ю#RF/<B@09SpHH@B@H@/N\P3PB09PйRF-@/9SlB0./NP-@ .萮-@./.?././.?.N.=@l JUc.UN%0<`Jng0J^g&>N J@g.UN%0<`JUc.UN%.?.NxT.?.NxT"yP"iA""yP"iA" yPBh:N.PN*B@`N^NuNVp`N^NuNVBnBnBB=n./NX>N׮-@ nBPB .Ю -@-nJ^g././.NP-@e.?<HNT#Ln.Q@ND=@`/</9LN\Po #L.L?<HNT-@b.Q@ND=@`NBn/</9LN\P#L`\ .Lo-yL`-n./. .??.NP=@g >NYJ@f =|`-n`./.?<?.NP=@g>NYJ@f =|` nJPg(. n?/.Nn\J@fn`n0nU n nf8Jc.?<INTBJ^gjJnfb>?<?.NX=@l$ nf =|` =|``$Jno>N J@g =|`>/. ?./.?.N =@l`zBn.?<HNT#Ln.Q@ND=@`F.L?<HNT-@b.Q@ND=@`/</9LN\P#LJf"` .Ѯ .䑮JnJc.?<INTBJngJ^gjJnfb>?<?.NX=@l$ nf =|` =|`Z`$Jno>N J@g =|`4>/. ?./.?.N =@l`=nJc.?<INTJc.?<INT0.`N^NuNVBB@=@"n2>N -@.N .Ю -@ 9Uм-@B`P.N-@m `@`" .mJnf-nn .mJngB@0.H>N-@b.Q@ND-|`` n0-n`B.N-@l$ .m n nJnf-n .`N^NuNVBnB0.r .?<HNT-@b.Q@ND`>N׮-@ 9Sl=@0.H/0.| @"|X 0/N\P-@B0.Ю -@. /.?.?.NP=@g(>NYJ@g.PND=|`dBnBn`F0n"|U 0-@ .搮H=@H@B@H@l.B@0.HH@B@H@Ю/N2XJngN nc ne:>?./.?./.?.N^=@m0.n`"B@0.HH@B@H@Ю @1|n. /.?.?.NnP=@f"./.?.?.NnP=@g(>NYJ@g.QnND=|`n0.nm=n.?<INT0.`N^NuNVBn>WNg-@bz .`Z.PND=@`.P ND=@`.Q@ND=@`.UND=@```|gް|g|gJ@g`.Pr/.NX>W?.W/.Ne\#STf yQ,Bhj yQ,Bh yQ, h Pr.P?.WNxT yQ, h P.Q,N*|f&B@0.HH@B@H@Ю @1|=|`Bn`` JSTf.Q@ND=@` ySTJ( f.PlNDBn`0.RL:RMB9RN.ST /<RLNXBWBg/<RL?<CNP=@|g8=|.ST NB|P"yQP2)\A=@`2Bn.ST NB|P"yP2)\A=@Jnn.RL/<WNX`X0.W:WB9W.6/<WNX0.HPHйST./<WNX nf">?./. ?.NP=@`&>?.?./. ?.N =@0.`N^NuNVBn.WNBP? yQP1_\ yQP0("yQP2)\A@"yQP3@X yQP!|WT yQP h Pr.P?.WNxT yQP h P yQPBhj yQPBh yQPBh.QPN*=@`Bn` BBgNZT.Q(?<N:T|fB?<NZTBn``bBBgNZT.P?<N:T|fB?<NZTBn``"``|gr|gb|g`B?<NZT/9Sl yST0(H/NP./?<?.NP=@g&>NYJ@g.PlNDBn` "yST2)HЁм-@ n/9Sl yST0(H/NP./?<?.NnP=@g&>NYJ@g.QNDBn`./.N2X`B.B@0.HH@B@H@Ю /N2XB@0.HH@B@H@Ю @BP=n neB@0.HH@B@H@Ю @1|.Sl/. ?.?.NnP=@f,B0.йSl./. ?.?.NnP=@g(>NYJ@g.QnND=|`>N-@d=|`~`Jf =|`h nf..?./. ?.NPJ@g =|`6`, nf"./. N.XJ@g =|`=|Jc.?<INT0.`N^NuNV>WNg-@b .`b.PNDH-@`.P NDH-@`.Q@NDH-@`.UNDH-@```|gܰ|g|gJ@g`B nJPcz nB@0|HH@B@H@.?<HNT-@b.Q@NDH-@`:Bn`0n2n0n nB@0nd-n .`N^NuNVBB@09P2< h>N-@b.Q@ND=@`b.RF/.?9P?.NP=@g(>NYJ@g.P ND=|`BB0.r .?<HNT-@b.Q@ND=@`BB0.r //.NlPBn=|`. nBA2.IHABAHAB@00HH@B@H@Ю /N2X ne nc ne< nb2 nBA2.IHABAHAB@00HH@B@H@Ю @0nn nB@0nd^=|BnByPBn`=n`nB@0.HH@B@H@Ю @JPgB@0.|=@Jng B@0.HH@B@H@Ю @BPn`>/.NX=@|f@=|.QrN*|f`B@0.HH@B@H@Ю @BPn`HB@0.|=@>W?./<6Ne\-@b =|` BnBn n0(=@=@`B@0.HH@B@H@Ю @=PB@0.HH@B@H@Ю @BPJnf$=|B@0.HH@B@H@Ю @0`8 ne nbn=|`=n=nnJnglB@0.HH@B@H@Ю-@.6 /.NX>/ n0(H/NP./.NX.6 /.NX nB( >,N=@>/.N|X>*N=@>/.N|X n>/.N|XB@0.^./.NXB@0.nJnbV.RF/.?9P?.NnP=@g(>NYJ@g.QND=|`BnJc.?<INTJc .N%0.`N^NuNV yPf(B@0. ySpdB@0. `t` 0<`h=n `J0.@HЮ @ f 0.`@ n2.AHJ0f3P0.`n0.ySpe0<`N^NuNV=|`~. n 2nB@00HH@B@H@Ю/N2X ne nc ne, nb" n 2nB@00HH@B@H@Ю @BPn n B@0ndvB@`N^NuNV.WNBP? yP1_\ yP0("yP2)\A@"yP3@X yP!|WT yP h Pr.P?.WNxT yP h P yPBhj yPBh yPBh.PN*=@0.`.RL?<ANTJg.PND=@.Sl/. ?.?.NP=@g(>NYJ@g.PND=|`zB@0.HH@B@H@Ю @1|=|`V>?.?./. ?.N =@`.Bn`&=|``|g(|g|g`0.`N^NuNVBn/9Sl yST0(H/NP./?<?.NP=@g&>NYJ@g.PlNDBn` "yST2)HЁм-@ yST0|f nev.RL?<ANTJg.PND=@.Sl/. ?.?.NP=@g(>NYJ@g.PND=|`:`>/.N|X`"> yST0(@HЮ /N|X./.NXJgXB09^//.NP-@g ndB09^` ../.NX/9Sl yST0(H/NP./?<?.NnP=@g&>NYJ@g.QNDBn`"B@0.HH@B@H@Ю @1|=|0.`N^NuNV-n . "n . "n@ . r"n@ . r"n@N^NuNV-n-n n"n n"ni n"ni n"nQ n `N^NuNV-nB`, n @Df 0<`B0. nB@`N^Nu0/3C|<A6B?< NA\O/?< #rC~#~C#vC!br!~!v?</<6?<=NAPOJk ??<>NAXO~ brf~!C~r!C~!CvNA\O Nu09C|of!C~r!C~!Cv yC~N09C|ofpNu yCN09C|ofpNu yCNNV-|6=n no0.|=@` no0.|=@0.|0"n yPT hl yPTBh".PTN*0<`N^NuNV-|60.|0"n@ np./.NXJ@fyT|/</.N\P/ n !_ n  n (l$ n |G n |E n |M` n |B n |G n |MN^NuNV3T|Jy]f& n Jg./. /.N4PB@`/</.N\P-@/< .".偐/N\P-@Bn` nf0/< .Ю/NP/ ./ n!_` .Ю"n#@ n n (l$ n|G n|E n|M` n|B n|G n|Mn  nmHN^NuNV3T|=|>//. NŔP>//. NŔP|fBBB=|`^>//. NŔP|fBB=|`,>//. NŔP|f B=|0.H/ .".ҮҮҮ/N\P-@ nf -n`~ nf .Ѯ .-@`\ nf& .Ѯ .Ѯ .-@`. .Ѯ .Ѯ .Ѯ .-@Bn`0.`> n!n`J n!n`< n!n`. n!n` `J@g|gȰ|gа|g` nJg\ n n (l$ n|G n|E n|M` n|B n|G n|Mn  nm&N^NuNVBn-nBn` <6"N4n@n n m nf@`  n -g nJf nJf 0<`` nf^`  n -f`  n -g nJf nJf 0<`@` nfx`  n -f`  n -f`  n -g nJf nJf 0<`Bn` N2n"nQn n -g nJfBn`&B@0. 2n6HA|=@n N2n (0m N2n (9oB0.r "n "Jnf0.|`B@`N^NuNV=|/</.N\P=@Bn` n 2nBn nm/< /.N\P=@0.2.AAH=@BW?.0.W/. N"\>?.0.W/. N"\ n/o0.H=@/< /.N\P2.H=@0.@n=@Bn`|Jnf0.2.AAHnBW?./. N"\>?./. N"\ nfnBn`0.n0.nJnmn nm~N^NuNVBn nJgV`  nJfJng nJ(g  nJg`Jng n-0. H H@|0"N4n@n0. H =@ n=n` n n"N4nJnn n-` n n"N4nJnn nBN^NuNVHBFBG` n0@||mB@0. F"n2JLN^NuNV-nB@0. |"nB@0. H|"n@N^NuNV-n . >/.N|X . r>/.N|XN^NuNV-n-n n"n n"ni n"ni n"nQN^NuNV-n-n n"n n"nQ n B@0`N^NuNVBn|3XB?< NT#]N ^NN v3^ gN 8J@g B9Q`N Q.?<N T=@f2N./<T/<W/<SfNh `HN.]?< NT>NX=@>NYJ@g 0<`0<`NN.]?< NTJyP gJ9^g.PNvBn`0. мX @0n ndmBn`0nPBPn nmByPByQ4Jy^ g=|=|`&J9^g=|=|` =|Bn` nf Jy^ f nfRJyS\gHB/?.NT\=@g&>NYJ@g.Q$ND0<``Bn` N2nB(n nmB?< NT#]N.?<?.NfX=@N.]?< NT=|.g`Jnf8J.g `z`(.H.HAg`0.2.`y6"B/?.NT\=@lJn g >N<``JnoJng >NYJ@fN0<`fB/?.NT\=@gJno,Jng$>NYJ@fN0<``>Jno6Jnf.Jnf&.H.HAg.R>NDNJn g >N<`HJnf$.H.HAg0.2.`y6 nlByX0nP03P./?.Nt\|fN0<`@ yUgBW/.NBXBn`j0. Ю @gN0. Ю @Jg80. Ю @ (Gf20. Ю @ (Ef0. Ю @ (MgJ0. Ю @ (Bf0. Ю @ (Gf0. Ю @ (Mf ydPo`09P мX @009P мX @1n09P мX @2. Ү"A!i09P мX @2. Ү"A!iyP yPf 3Q4n0.yT|m>T|/.NXJc.?<INTn0.nmr no J9^g=|=|`J`8 no J9^gJ9^g no=|Bn`NB@`N^NuNV yUfB@`Bn`n N2. B( N2. !| N2. !|Bn` N2. 2n|0n nmn nm09U|=@Bn`0. Ю @g N2. | N2. 2. Ү"A!i N2. 2. Ү"A!iBn`6 N2. 2n2. Ү4.H҂"Ain nmnn nm@=|=yU`0. Ю @g0. Ю @Jn g n2. 0` n2. 0м2. Ү"A#@Jn g n2. 0` n2. 02. Ү"A#@Bn`:0. Ю2.HЁ @2. Ү4.H҂"Ain nm`nnn0.yT|mBn` N2. (g0. Ю @0. Ю @"N4. !i0. Ю @"N4. !iBn`60. Ю2.HЁ @"N4. 4nin nm`nnn nm6=n`v0. Ю @B0. Ю @!|0. Ю @!|Bn`$0. Ю2.HЁ @|0n nmn0.yT|mN^NuNVB?< NT#]-xBn`00n"n0H|nfNyPn nm.]?< NTN^NuNVBn`L0. @"|X00nf*0. @"|X00n f0.|C`n ndm0<`N^NuNV n=PJnm nnB@`p>Nz=@ nCmP nnFnC n2. ҼX"A00. @"|X 0"n "Ё"n "B@` 0<`N^NuNV>Nz=@ nCm* nn nC0. @"|X 0`p`N^NuNV>Nz=@ nCmF nn<nC0. @"|X 02. ҼX"A")Ё`p`N^NuNV=|=|-| -| -| n -hBn nfP09TH/0ySf/0yW/NP/NP-@ .氮g=|0.`R` noB?< NT#]N.BBg?.N P=@f<.NR-@g&N.]?< NT`Bn` N2nB(n n m.?< Bg?<?.NP=@f4.N-@gN.]?< NT`4Bn` N2nB(n n m.?<BgBg?.NP=@f4.N-@gN.]?< NT`Bn` N2nB(n n m.?< Bg?<?.NP=@f4.N-@gN.]?< NT`B-nN.]?< NT`B?< NT#]0.2.`y6 =@0.2.`y6"=@Jnf Jng 0<`0<=@Jnf Jng~Bn` N2nB(n n m.?.BgBg?.NP.N-@gN.]?< NT`DBn` N2nB(n n m.?< Bg?.?.NP=@Bn` N2nJ(fn n m n f nf=|`z`. n f$-nN.]?< NT`.N-@f nf=|` `-nN.]?< NT`<`.?<BgBg?.NP=@N.]?< NT.N-@fA-H n( HH-@ .-@ n(HH n(H=@/</.0n/NP/NP-@Bn`0.HЮ./?<?.NP=@fB?< NT#]N nHH-@?r .-@ nHH-@ .-@ . nHH-@ .N.]?< NT мްf*`>NYJ@f`n nm n(f 0.` nl,/</.0n/NP/NP-@`8Jng0>NX=@>NYJ@g 0<`,0<`$ .氮g =|`Bn0.`N^NuNVB/?<?.NP=@g(>NYJ@g.PND=|`A-H./. N2X./.N2X./.N2X/<B0./NPJf ng =|` n ( g =|`Bn0.`N^NuNVB/?<?.NP=@g(>NYJ@g.PND=|`A-H./. N2X./.N2X./.N2X nf ng =|`LB0.m n ( f B0.l n ( g =|`Bn0.`N^NuNV./. ?<?.NP`N^NuNV./. ?<?.NnP`N^NuNV./NXJ@l 0<`B?< NT#] nf2>/. ?. /.?9T?9WN =@`">/. ?. /.N =@N.]?< NTJno>NX=@0.`N^NuNV./NXJ@l 0<`B?< NT#] nf2>/. ?. /.?9T?9WN 0=@`">/. ?. /.N0 =@N.]?< NTJno>NX=@0.`N^NuNV>@N-@b.Q@ND`. /NXJ@l.N%0<`B/<@/.NlP`P n c =| `=n. /.?.?.NnP=@fB0.Ѯ B@0.nJnf.N%0.`N^NuB?< NA\O/?< aJNA\OBgNAJNVHB?< NA\O/?< r(Ҹl>.Oa,VHNA\OL8N^Nu~ar(Ҹl< fNuIKP>8<H@0<aHf:| <a8f*Q* 2<xa2f80rҸl8Q>Nu*rҸlr(Ҹ8g lrNuNVH*|.޼`nJL N^NuNVBBgNZT.?<N:TB?<NZT0<`N^NuNV./<MNX. /<MNX./<MNX.MND`N^NuNVH *n(n -M`Jf`f .`JL0N^NuNVH *n(n -M`f .`JL0N^NuNVH*n. .-M`f`Jf .`JL N^NuNV .a m .z n. . H`N^NuNV . g . g . f 0<`B@`N^NuNVH *n(n `Jg"H>Nz?H?NzT_gHfB@`0<`JL0N^NuNVHBG`| nHJf0`JLN^NuNVH*n BGJnf 0`d=n`:B0. H@=@n0B@0."N4G@|B0. =@Jnf<|`0F|JFlB`JL N^NuNVH*n BGJf 0`r-n`H/< /.NP-@0 ."N4G@|/< /.N\P-@Jf<|`0F|JFlB`JL N^NuNVJng 0<`0<=@Bn` n 2n0n0.nm n 2nB=nJg-|Bn`h .-@ .-@ m&n .мH|A2n `n .H|02n n0.nm`N^NuNVNJ@l 0<``NJ f -|6> `4. NB-@Jg./.NXJ@fB@`NnJ@g0<`N^NuNVBW?9GB?<BNP>NcN^NuNVJ f -|6A NJ@l 0<`vN`H. NB-@g6` n"n nJf nBNnJ@g nB nBB@`N^NuNV.N-@g n #@Dg 0<`. /.NnX`N^NuNV.N-@f 0<`B@`N^NuNV.N-@g n =@DgB` .`N^NuNVBn-|C.NB-@`Bn0n"nJ0f6 n2n =g n2n #f .2.HЁ`T0n"n0H"n4nHAg`nn`.NB-@ nJfnB`N^NuNV`  nJf .`N^NuNV` 9#CgtJ9Cgj-|C`B nH` `" nB```|:g|\g` nJf nBB@`$.C?9GNeTJ@fj0<`N^NuNVJy6$f6BW/<6D?<=N\3GlByQd.PND`36$B@`N^NuNV=| B n $f=|`L n 0f. n(H>Nz|Xf=|` n 0f=|`Bn`& nH"|6&4nHAgn0n"|6&J0f0n"|6&J0g` nf nmn0.nm 0<`/.0n/NP2.HЁ-@ nJfV nH>Nz`2r .-@`4r .-@`$` 0<`&`J@g|Kgư|Mg` n B@`N^NuNVBB/?<?.NP=@g&>NYJ@g.PND0<`A-H./.N2X./.N2X./. N2X/<B0./N\P#Sl 9Slr -@.?<HNT-@b..Q@NDJc.?<INT0<`ZB@0.HBA2.IHABAHAA|H@B@H@//9SlNP>B?.N@\=@g&>NYJ@g.QND0<`B/. 9Sl??.NP=@g&>NYJ@g.PND0<`=|Bn` n2n"N4nn0.ܰnm n!nB/. 9Sl??.NnP=@g&>NYJ@g.R ND0<`.Sl/. 9Sl??.NP=@g 0<` n0 n1|.Sl/. 9Sl??.NnP=@fD/9SlB@0.|H@B@H@/NP./. 9Sl??.NnP=@g&>NYJ@g.QnND0<`R=n./NX>N #^o 9^2< `>N#Ub.Q@ND`>N JH-@g..UN%-|g.QND0<`-ySlB0.BA2.IHABAHAHABAHAЁм-@>/9Sl/.NP/ 9Sl?/.?.N" J@g.UN%0<`,.UN%Jc.?<INTB@`N^NuNV-| -| -| B?< NT#].?<BgBg?.NP=@N.]?< NTJng 0<`.N-@fA-H n( H3G09G@3G n(HyG nh#U/9U0yG/.HH/NP/NP-@/9U.HH/NP#TBn`0.HЮ./?<?.NP=@fB?< NT#] nHH-@?r .-@ nHH-@ .-@ . nHH-@ .N.]?< NT м氮f*`>NYJ@f`n nm n(f.QjND` nlX#U/9U0yG/.HH/NP/NP-@/9U.HH/NP#TJyPf JyUf|#U/9U.HH/NP//.N\P3G yGo, 9Ur //.N\PмH@/9U.HH/NP#T#Q`N^NuNV=|-| -| -| B?< NT#]0.2.`y6 =@0.2.`y6"=@Jnf Jng(.?<Bg?<?.NP=@`".?<BgBg?.NP=@N.]?< NTJng 0<`.N-@fA-H n( H=@0.@=@ n(Hn nh|.HH/0n/.HH/NP/NP-@Bn`0.HЮ./?<?.NP=@fB?< NT#] nHH-@?r .-@ nHH-@ .-@ . nHH-@ .N.]?< NT мްf*`>NYJ@f`n nm n(f.QjND`@ nl./<0n/.HH/NP/NP-@ .`N^NuNVH>N3T||f 0<`P/< 0yT|/NP.?<HNT/ n b..Q@NDJc.?<INT0<` n-P>T|/.NX*n Bn`20. Ю @0. Ю @!m0. Ю @!mg0.yUfB0. Ю @|X0. Ю @|G0. Ю @|M` n2. 0lB0. Ю @|G0. Ю @|E0. Ю @|M`>0. Ю @|B0. Ю @|G0. Ю @|Mn nm yUg|09U Ю @-h./. ?.NT\=@g&>NYJ@g.Q$ND0<`,*n 0. Ю @0. Ю @!n -м2. Ү"A#@ n2. 0lB0. Ю @|G0. Ю @|E0. Ю @|M`>0. Ю @|B0. Ю @|G0. Ю @|M n n29U 0Э-@ -Xf -Gf -MgB@`JL N^NuNV n f< n o2.P?<N:T=@ nf 0<`0<`N^NuNVBnBn0.H H@|0"N4n@n0.H =@n`&n n "N4n nJnn` n   n nm n BN^NuNVJyPfLB/?.NT\=@g&>NYJ@g.Q$ND0<`V#Q`BBn`40. Ю @ (Ѯ .Q`o 0<`n nmB@`N^NuNVBn`z0. Ю @!|0. Ю @B0. Ю @!|0. Ю @B(0. Ю @B(0. Ю @B(n0.n m~N^NuNVB/?.NT\=@g&>NYJ@g.Q$ND0<`TA-H n( g8 n (X f* n (Gf n (Mf0<` `B@`N^NuNVB/?.NT\=@g&>NYJ@g.Q$ND0<`,A-H3UBn`X ng> n (Xf0 n (Gf" n (Mf3U n-hn nm=| yUg-n./?.NT\=@g&>NYJ@g.Q$ND0<`ZA-Hn n (Ю-@ n (Xf n (Gf n (Mgn0.`N^Nu <` <X`p*`pJ9)g/pиl иe 8fpNupNua`ak(J9rg@|Nz@N{F108|#$T$Nu1Bx>Nu/ 9$d NuP>a"|@ra`P>?a"|a 3|a3|aa @ er`&6 Ae Agr`rSAHAJAfHA`HARAAHraha`J@fLQp` pC`6`6P>a:"|at3|a\3|aRat@"<a`<3A<EJ@kUBHAHA"a\kQ3A<HAHA"<axNu/   XNu b2` /2"NuP>a"|@r<3A<EHUBHAHA"agNuQ3A<HAHA"<8fa`P>a "|@r<3A<EHUBHAHA"ajgNuQ3A<HAHA"<a`J8J8J8J8Nu.*e!@ajNu`@?a4J@k811an Bgaa|J@fNaJ@fF/@|Nz@N{F8@g$"|I"@A A"8S@Q Nu@?aH4J@jNu811a BgaaJ@fa,NuH`?aLTLJ@k> "|"| aCSBabJ@kQpNuad8gb`D B@2/ 88NqNqa8fbp`B@NuababNuҹ8f*c 8g bap`,08g?a0`p81Nua8aJ@gX`adak8a$J@k Nuҹ8fbp`pNu88gbp`p8Nu?akaTNu |"9ҐNu |"9ҐNu |"9ҐNu@ajNu88g`2fa`aNufa`aNufa(`arNufa`aNufaNu aA0/taNuaAorod2/0/t oanNuaAoo0/talNuA B0/r2/ҁt o aNuA  B0/r2/ҁt o aNuaBAo0/r2/t oaNuaAo0/r2/t oaNua0/H/A@o 0/r2/ t o aPNuaAo0/tafNuA%B BBB0/rt o aNuA(B B B0/r2/ҁt o aNuA*B B B0/r2/ҁt o aNuABBBPNu#K/<?< NA\OJ@fB?< NA\O#KByK x! "O83K!.IJKg/9K?< NA\O09KNu#K/<?< NA\OJ@fB?< NA\O#KByK x! "O283K`#K/<?< NA\OJ@fB?< NA\O#KByK x! "O93K`>?0-W?0,WN.T:>0-W?,0,WN.T8>?NJT>>?,NJT<89F0G9@0F9@GoFnB@`pJL0N^NuNV3]>kNN^NuNV3]3 ]3 ]3]3]3]>iNN^NuNV3]3 ]>hN n 0Qx n0Qz n0Q| n0Q~B@09QvN^NuNV3]>gNN^NuNV3]3 ]3 ]3]3]>dNN^NuNV3]3 ]>pN n P4B@09QvN^NuNV#O>nNN^NuNV#O3 ]>,N n0Qx n0QzB@09QvN^NuNV#O3 ]3]3]3]3]3]>*NN^NuNV#O3 ]3]>!NN^NuNV#O3 ]>NN^NuNV>ON n0Qx n 0Qz n0Q| n0Q~N^NuNV3]# O>NNN^NuNV>MN n0Qx n 0Qz n0Q| n0Q~B@09QvN^NuNV#O3 ]3]3]>LNN^NuNV#O>6N n 0Qx n0Qz n0Q| n0Q~B@09QvN^NuNV3]# O>4NN^NuNV3]3 ]3 ]3]3]3]3]3]3]>3NN^NuNV#O3 ]>2NN^NuNV3]3 ]3 ]3]3]3]3]3]3]3]3]3]3 ]3"]#$O3(]3*]>N n,0Qx n00Qz n40Q| n80Q~ n<0Q n@0QB@09QvN^NuNV3QX0.|Hм0X-@=|` nH2nQX2RRn nm.]N~B@09QvN^NuNV#QXU#WU#]U#QvU#OU#P4U#U]> aF3QvOpN^NuNV>a*pN^Nu#KNA/9KNuNV n=h.0n/0n/NP/?.?<?NPN^NuNV n=h.0n/0n/NP/?.?<@NPN^Nu _B0Z"y:FCCbN.C NNVH *n(n `$H>a0H>a&op`lp` JfJfB@JL0N^NuNVH>.|am |zn|0JLN^NuNVN^NuNVH*n 0.8м^-@~.a&M`RJg :fJgc .Am .On*K`K0.`BW/ ?<o n1GBG`BW/ ?<NN\JgB@`0<>`d>ONJgB@`0<>`J.?<=NT>o n1GBG`,.?<ANT>``||b@0@8 PN0JL8N^NuNV n am n zn n nHRJfN^NuNVH*nH=@ M2n$BG-M`H M2G $f: n $g.?< NT.$?<NT 2HЁR-@RGnm 2HЁg.?< NT0.JL N^NuNVH*nH|=G`H>Bg?<aX0SGJ@n0.JL N^NuNV#UNM/9UNuN^NuNV=|Bn n(g -|` n(g-| n(g .м-@ n0(| =@Bn=n`=|` n  f.=|Jng 0.R@|l N2n| Rn`\ n  fRJngLp2.|A=@0.n|l^0.n` N2n| Rn0.SnJ@fR ` N2n"n QR RnSnRn nlJnf>0.S@@/ nNXJnfB@0.N^NuNVH*n>?./. /-/ N=@Jnf383:J8p` B0.ѭ -o+mB@0.JL N^NuNVH *n(n >.B@=@=@``Rnnc L2n  fB@0.ncf>?.B@0.W B2.Ё//-/ N=@B0.ѭJnf383:J8p`^=n`8Rn>?</<8/-/ N=@B0.ѭnb4 -o+mB@0.JL0N^NuNVH|BG` 8f 80`RG|m383:J8pJLN^NuNVp2.`F@H8B@N^NuNVHBG`>aRG|mJLN^NuNVH 0.8*@^0.@BUB-+| BB> Bg/ ND\> ?< / ND\JL0N^NuNVH>.|e3 83:J8B`0B@08*@^-f3 83:J8B` JL N^NuNVH>N"*@ fp`vJnfB@`j-g3 83:J8p`L0|g>/. / NP`0-g>/. / N P``>/. / N lPJL{ N^NuNVH >.HμgR*y:F(G:F.N|f3 83:J8p`>Bg/ ND\ JL0N^NuNVN^NuNVN^NuNVH>.^GORG>a*@ fB` >/ aXJL N^NuNVH (y8*T`ZB@0-BA2-@F@J@g>N$\B`:B@0-ne `*8f>a*@ f>N$\B`(M*U`JL0N^NuNVH n*PB@0. X@me n `F(MB@0. HH@B@H@B@0-n 9@B@0,F@9@( n ;n B@0-F@;@#8 PJL0N^NuNVH >.|?GG0@>N#*@fB`* R*@(M9GB@0,F@9@.Pa 98JL0N^NuNVH *nQB@0-BA2-@F@J@g>N$\p`(y8eeecd(T`e2 BA2-IHABAHAЁ" BB4,JHBBBHB҂b #8B@`n BA2-IHABAHAЁf T0(mB@0-F@;@ T*`* BA2,IHABAHAЁfB@0-lB@0,F@9@(`(#8B@JL0N^NuNVH *n.a>. ^GORG>a-@fB`J n(PPg2d`Sn Jn f`B0. B0. `%Sn Jn f>/.aXJL0N^NuNVH>N"*@ f3 83:J8p`$>?-/. ?<BNP+@U -JL N^NuNV>B?.a\N^NuNVHN!>|fp`>N"~08*@^Jn fUJnfU.03/.NJXJ@fU;n 0``.08/.NJXJ@fU0`d>/.?N\J@g>N"@383:J8p`0U>B-H?N'p\BWB-H?N'p\0JL N^NuNVBW?. /.a\N^NuNVBW?. /.a\N^NuNV>?. /.a\N^NuNVH*n0-| |f, -<o >/-?N#N\>Gg mp`J-gJg-g;| `;| `>0- D@H/?N'p\Bm +mB@JL N^NuNVN^NuNVH>.>N"*@ f3 83:J8p`NBF0|f>?<>NT<l|>N"~>N"@JFf0``383:J8pJL N^NuNVH*n0-|g*.N)&-g .N%B@H+@+@Bm m>N)JL N^NuNVHBG`0м9.N*PRG|mJLN^NuNVN*>NN^NuNVHN!>|fp`>N"~08*@^JnfU.03/.NJXJ@f U0`R`.08/.NJXJ@fU0`2>/.?N\J@g3#83:J8p`U0JL N^NuNVBW?. /.a:\N^NuNVBW?. /.a"\N^NuNV>?. /.a\N^NuNVH BWN##K#KByK.0+a*n`N`RJgHHм8L @fJg2 "g 'fFH>/ RNbX(@ f.9/ aVX H> M2GBRG.Ra`BG`RG M2GJg5pHHм8L @gJ5pg M2GBRGH`BWN)BW/ RN(XJ@g.R/<9aX`l>N) ->f@>/ TN(X|f>B?<N'p\|f.R/<:a|X`$BW/ RN+X|g.R/<:aVX`>?/ NbXJf>*/ NbXJg-|d.8?<NT>/ ?<N\<f.:/ aX`^.H?/.aZ\.NB>RWN(@./ NX.a>/ ?<N\<f`.a`|g`JfBaSyK.KN|f.:9/<:*a*XB/9K?9KNqB\>N*JL0N^NuNV|./NX. /NX.::/NX.?< NT>N*N^NuNVH*n yK XKRyKJL N^NuNVH*n. (nGVfJL8N^NuNVHN"\BW/<03N(X>/<03N(X>/<03N(X n2n B*n`&HHм8L @g H| `HRJf> /.N+XJL N^NuStack Overflow runtimeCON:LST:Cannot initialize stack     -0!""! ,"" "   3N3X3b3l3v3333333333333333444 444-4<4K4Z%N&z%%%& &4&z&z&z&z&z&z&z&z%@%2%*--.*.|--.-.`.D..,,b,,,,+,8,@  1000.0Mb01000.0Mb01000.0Mb01000.0Mb01000.0Mb0 999 partition(s)#999#999#999#9991000.0Mb01000.0Mb01000.0Mb01000.0Mb01000.0Mb01000.0Mb01000.0Mb0#999#999#999#999#999#999#999from #2 to #99from #2 to #99from #2 to #99from #3 to #99from #3 to #99from #4 to #99Unused Unused[1][Fatal error][OK]ddd Xcyhdrwwplzrtinspmdstt@tut ss~uuuv  HDX.RSC[2][|HDX.RSC][ EXIT ][2][|HDX.RSC][ EXIT ]Version 5.00ACSI unit 0XIDE unit 0mnOTHERmnbrdpptACSI unit 0IDE unit 0XX:\...TMP X:\XXXX 0123456789abcdefABCDEFmnmnWINCAP !!!!" ~Dd" 88           : unmatched quoteCannot open Cannot append Cannot create : No matchStack Overflow $XD\p                                         2N4" (    , <"   H&  `pL**& ">4<0< &.N02    Br $6"$(4(6""$(B((0 F2* *H0    (    &        D              6       *   $$"    ,(        ($""&            ,   $        ,  6*J& ( (B$ 0   &  "      &   "(R0 0 P*  J 8     4dt   40X$$2Z`4| &p64<   $  * BJ(,"$2$>."$>$.$2H @ 0   4      :0.$" &  ,  , V*  T  8:  ^",PTP F $""$$$$2<  Hv 0n ` ,      dZ       "            , 4 (    *, R  *2,  8  *H^                      *    L $D    "    ,   *0  ( `Hd   0  <88      L   2~       $    .  @$  4d " $     4 *       $    &        &    &      2  <$$` 0       2  00$$ , "$J" , , >   &,      $ 4    H &   $0.&* >*&  J>*.,f(l "* $T

    "$$       :    (F H.. X^  $ DrL     $^Ht        HT    " $ *     L ,v  .62:82*R     (2 :  T" $ <.      $( " b. "`02. .b  : D B D  p Dd , $  ^ 0n L X *` *$$ $ * $ 6.H  J(0& B06(@ T h   TF F0x (8   R   *   $   8 4   *n *   20$  f 0n ** $ ^ " \  , v F.  <*~dR0"6:*4.,66"   "  " (" "$`LX<&,^:L f ^  b>                     &*R"4Z&`"R"@2&"&.`".86 Jp<  N4*"   n ,D( 0 <    >   ,$  /  .T)(&(&'$ Ph%0&P Edit partition scheme of the unit Total # of Partition(s): _XMemory Left: _2345_X2345_X2345_X2345_X9.9MB9.9MB9.9MB9.9MB MENUUNDOOKCANCELEXPERT 9.9MB9.9MB9.9MB9.9MB9.9MB9.9MB9.9MB_Part.# 2  # 99Part.# 2  # Part.# 2  # Part.# 3  # Part.# 3  # Part.# 4  # ______Extended Partition RangePartitionOKCANCEL EDIT Select the extended partition scheme  Desk File Disk About HDX... - Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Quit  Format  Partition Zero  Markbad - Ship Atari Advanced Hard Disk Utility Copyright 1986, 87, 88, 89, 90, 91OKVersion 3.5by Atari CorporationCANCELFormatting a physical unit willdestroy all information on it.OKThe system will reboot whenyou quit HDX. Format a Physical Unit WARNING!Select the unit type:OKCANCEL Format a Physical Unit LAST CHANCE TO QUIT!on it!will erase everythingOKCANCELACSI unit 0Formatting _ a 9 Format a Physical Unit Formatting... Format a Physical Unit Physical Unit MarkbadNumber of newly-Number of previously-@2345marked bad sectors: _N@2345marked bad sectors: _NCANCELPartitioning a physical unit willdestroy all information on it.OKWARNING!The system will reboot whenyou quit HDX. Partition a Physical Unit Choose a partition scheme:OKCANCELEdit   Partition a Physical Unit LAST CHANCE TO QUIT!on it!will erase everythingOKCANCELACSI unit 0Partitioning _ a 9 Partition a Physical Unit Partitioning...CANCELMarking bad sectors maydestroy existing files!OK Logical Drive Markbad WARNING! Logical Drive Markbad Marking bad sectors... Logical Drive Markbad Bad sector found is part ofa lost cluster.Mark bad sectorIgnore bad sector@234Bad sector: _9@234Cluster: _9 Logical Drive Markbad File_(Delete fileSkip over bad sectorIgnore bad sector@234Bad sector: _9@234Cluster: _9 Logical Drive Markbad Subdirectory_(Delete directory onlyIgnore bad sectorDelete directory and files@234Bad sector: _9@234Cluster: _9Cannot save any more filesin the root directory!Deleting the remaining lostclusters of the subdirectorywill free up disk space.OKCANCEL Logical Drive Markbad OKNumber of newly-  Number of previously-@23456found bad sectors: _9@23456found bad sectors: _9CANCELZeroing a logical drive will destroy all information on it.OK Zero a Logical Drive WARNING! Zero a Logical Drive  LAST CHANCE TO QUIT!on it!will erase everythingOKCANCEL@2Zeroing drive __FF Zero a Logical Drive Zeroing... Ship Physical Unit(s) Shipping a physical unitis to park all its heads.You will have to switchoff its power right afterthe operation is finished.OKCANCELWARNING!UNIT 0UNIT 1UNIT 2UNIT 3UNIT 4UNIT 5UNIT 6UNIT 7OKCANCELSelect the physical unit(s) Ship Physical Unit(s)  Ship Physical Unit(s) Shipping all physical unitsselected will require you toOKCANCELLAST CHANCE TO QUIT!switch them off right afterthe operation is finished! Ship Physical Unit(s) Turn off all physical unitsthat have been shipped NOW!OKC:D:Select the logical driveE:F:G:H:I:J:K:L:M:N:O:P:OKCANCELUNIT 0UNIT 1UNIT 2UNIT 3UNIT 4UNIT 5UNIT 6UNIT 7OKCANCEL Select The Physical Unit is too large!Repartition the disk. OK Partition __OKTry checking all theconnections and reformatting it.@Cannot format unit _9OKTry reformatting it.@Cannot partition unit _9Cannot find partitionOK@2345678901scheme _ X Cannot find formatOKparameters for disk@2345678901type _ N Either this logical drive'sboot sector is corrupted,to partition this disk.Unrecognized boot sector!or another utility was usedOK Scan Connected Units Scanning...SCSIACSI Select The Type Of Physical UnitIDE-AT[1][The physical unit you have |selected does not exist.|Click on OK to reselect.][ OK ][3][The system has to be rebooted|before you can run zero or|markbad.][ OK ][1][GEMDOS can only recognize a|total of 14 partitions on all|physical drives. Click on OK |to continue.][ OK |CANCEL][1][Maximum partition size |can't go over 256Mb.][ OK ][1][You will lose the directory|structure of the deleted|subdirectory. The files in|it will become TMPn files|in the root directory.][ OK | CANCEL ][1][Deleting the subdirectory|will erase all files in|it.][ OK | CANCEL ][3][Not enough system memory!|Cannot continue.][ OK ][3][WINCAP file not found!|Cannot continue.][ OK ][3][Cannot write header to|the logical drive!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot read File Allocation|Table from the logical|drive!|Try backing up the disk and|reformatting it.][ OK ][3][This hard disk is not|supported by the Atari |computer. You may ask|Atari Corp. for a new|Wincap file and try again.][ OK ][3][Cannot write File Allocation|Table to the logical drive!|Try backing up the disk and|reformatting it.][ OK ][3][File Allocation Table is|corrupted!|Try backing up the logical|drive and zeroing it.][ OK ][3][Cannot read Root Sector|from the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Root Sector|to the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot read Boot Sector|from the logical drive!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Boot Sector|to the logical drive!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Root Directory|entries to the logical|drive!|Try backing up the disk and|reformatting it.][ OK ][3][Cannot read Root Directory|entries from the logical|drive!|Try backing up the disk|and reformatting it.][ OK ][3][Reserved sectors are bad!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot read Bad Sector|List from the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Bad Sector|List to the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot read from directory!|Try re-running Markbad on|this logical drive when the|current Markbad is completed.][ OK ][3][Cannot write to directory!|Try re-running Markbad on|this logical drive when|the current Markbad is|completed.][ OK ][3][Bad Sector List is corrupted!|Try backing up the disk and|reformatting it.][ OK ][1][GEMDOS can only recognize a|total of 14 partitions on all |physical drives. You can only|run zero or markbad on C: |through P:.][ OK ][1][The system will reboot.|This is normal.][ OK |CANCEL][3][The selected drive is not |responding, please check |the disk drive, or insert |a disk.][ OK ][3][One of disk drives is not|responding, please check |the disk drive, or insert |a disk.][ OK ][1][Too many bad sectors to|record. Try backing up|the disk and reformatting|it.][ OK ][1][Selected partition scheme|is for a bigger capacity|unit!|Please select another one.][ OK ][3][No menu items available|for this disk's capacity.][ OK ][3][This disk was formatted by|a previous version of HDX.|Please reformat the disk.][ OK ][3][Your system will have to|reboot when you quit HDX,|for new disk information|to take effect.][ OK ][3][Format parameters in the|root sector are corrupted!|Please reformat the disk.][ OK ][3][Cannot delete the file.|Try backing up the logical|drive and zeroing it.][ OK ][3][The disk cartridge is|write-protected!|Please remove the write-|protection, and restart|the operation.][ OK ][3][The disk cartridge has |been changed!|Please restart the|operation.][ OK ]` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `` 7o 2e2e2e22 2}2}}}o7 `_9pLE nE2UR;yGHo ; ! C 0!" 0"# 0#$ 0$%F 0%& 0&'. 0$%M(NOnpq:;@ARSWhij{|}<'W`a  @IJ -9R   F K \ a f t   & + 0 > + 2 L S Z t     G J [ . 7 8  +GSf   ()')0)L )h)) ) @ @ @ @@@@@@@@@@!@!@@!ADEGa (  ( 1 ) Q) T# Q* Q*,Q*HQ*d Q* **** +  +( E A +D' =  PP  ? F M  P T i ~        & 4 B  P  ( W&~"   %    * 8 +`  (b x y|                    +| " +   +   ?  &Ml  + +  !% !=  , K g  u! %A        1 # !,$ # &  ,@#^!  "    ,\ ! $(Fb r A ,x  ,  ((    A 4 ,  , ( y   (  A   ,  - % (& D _ v    %  #        -  -< &  {       -X    -t  ' =  @  -  ^  {   #          $  ' - '  9 @  G N U \  c  j  q   t   {  #      + G ! b' %           E '  %  $+ 2 9 @  C  J$i  w (H -  !  (j -# ( .$ -C( . r ( .8&     (/ 'K  N k   & w|  %.T1$364679|:<:;\<4=>\>?L?@TA,BBCD\E4E|FlGH|HJKLTLMtMN|O<OHI6JLLM>MN.NO~OEFGHI<JL LMDMN4NOOO  .0356r7J9*9:2; ;=>>?r?@zARB*CCDEZEFHIbIKLM:MNZNObP"PjOOPPއ# Hard disk format and partition configuration file. # 2-Apr-1986 lmd, Atari Corp. # 12-Jan-1988 ml, Atari Corp. # 24-Jan-1989 ml, Atari Corp. # 26-June-1989 jye, Atari Corp. # # Global parameters: # ms#count Maximum partition size in sectors (***DON'T CHANGE***) # :@@=Parameters:ms#32760: # # Format parameters: # 'mn' entries (default values in [brackets]): # mn=name appears in menu, name of format parms # hd#count number of heads [4] # cy#count number of cylinders [612] # lz#n landing zone [10] # rt#n seek rate code [2] # in#n interleave factor [1] # rw#cylno reduced-write current cylinder [cy + 1] # wp#cylno write precomp cylinder [cy + 1] # pt=name name of default partition to use [4-6-10] # sp#count number of sectors/track [17] # dp#data data pattern used to test disk. # br=id next id to search for if there is more than 1 # option for "mn" # md#n flag for mode select [1] (1: need it; 0: don't) # # Bad Sector List parameters: # sl#count number of sectors for vendor bad sector list [1] # #48 Mb :mn=SEA157N:md#0:pt=12-12-12-12:dp#0xc623d5ab: #40Mb:mn=MSB8051S:md#0:hd#4:cy#739:rw#739:wp#739:pt=10-10-10-10:sp#28:dp#0x6333: #58Mb :mn=SEA177N:md#0:hd#5:cy#921:rw#921:wp#921:pt=14-14-14-14:sp#26:dp#0x6333: #60 Mb :mn=MEGAFILE 60:br=m6: #44 Mb :mn=MEGAFILE 44:md#0:pt=11-11-11-11:dp#0x6333: #100 Mb :mn=MEGAFILE 100:md#0:pt=25-25-25-25:dp#0x6333: #150 Mb :mn=MEGAFILE 150:md#0:pt=37-37-37-37:dp#0x6333: #30 Mb :mn=MEGAFILE 30:cy#615:rw#615:wp#615:pt=10-10-10:sp#26:dp#0x6333: #20 Mb :mn=MEGAFILE 20:dp#0x6cdb: #20 Mb :mn=SH205:dp#0x6cdb: #20 Mb :mn=SH204:dp#0x6cdb: #10 Mb :mn=SH104:hd#2:pt=10:dp#0x6cdb: # # Format parameters for different drives used in MEGAFILE 60 # #:m6=MCS5068:hd#5:cy#1024:rw#1024:wp#1024:sp#26:pt=16-16-16-16:dp#0x6333: #:m6=MSB5064:hd#6:cy#809:rw#809:wp#809:sp#26:pt=15-15-15-15:dp#0x6333: #:m6=SEA5065:hd#6:cy#820:rw#820:wp#820:sp#26:pt=15-15-15-15:dp#0x6333: #:m6=NO LABEL:hd#6:cy#809:rw#809:wp#809:sp#26:pt=15-15-15-15:dp#0x6333: # # Partition selections # '?0' entries (? is a digit)('N' is '0', '1', '2', or '3'): # pr=name name of partition # pN#size size of partition N in bytes [0] # fN#number flag byte for partition N [0 if no pN, 1 otherwise] # iN=ccc id bytes for partition N [GEM] # # Numbers are in bytes; may be followed by 'k' (x1024) or 'm' (megabytes). `5S n "O o#: (Ш#:"<'kҀ`Ҩ.A"Ҽb.A$(e .BeJ"¼.A//Bg?<JNA y:EH?/ N5?NJ?<LNA.IHy6?< NA\?BgBgNXJ@gj.@P?<BgNXJ@gP.B?<BgNXJ@g6.?t?<BgNXJ@g.@B?<BgNXJ@f 0<`B.?pBg?<NXJ@g.?z?<?<NXJ@g.?H?<?<NXJ@g.?l?<?<NXJ@g.@L?<?<NXJ@g.?D?<?<NXJ@g.@*?<?<NXJ@gr.@F?<?<NXJ@gV.?R?<?<NXJ@g:.??< ?<NXJ@g.?N?< ?<NXJ@f 0<`B@`N^NuNV3?N @.?&/<?L/<?/<?N 3?B.@J/<@T/<@X/<@V?<BgNlND>@J?9@T?9@X?9@VBgNP3? ByB3?.7NFJ@f .8/<8/<8 NP` BBgNTN|f .85/<8(/<8#NP`B?< N5T#B#Bd.B?< N5TJBdg yBdJPf.?zN^` 9BdмR-@ n AHDIf n (g Bj` .м#j>/9?>NX`NpJy?fBW/9?>NX>? N>BNN BW?<LN5TN^NuNV.Bb/<?(/<Bb/<Bb/<?,/<?*BgBg/<?.BgBgBgBgBgBgBgBgBgBg?9??<?<?<N8=@.gT09?.`2>??9?4/9?>N\BBgNT``H |72<W hNN^NuNVNH=@l 0<`0.|C@"y?t"ilA" y?tBh: y?tBhR.?tN|g 0<`Jjf =|` yj=h0n.?<HN5T-@f.?pN^0<`t0n?=Pnn.8B/N"X>/?<NN5\Jf.?<AN5T.H>N J@g 0<`.?.NTJ@g.?lN^`-n-| <=@` n"n0.nJ@f>/.N bXJ@g.?HN^`..?.NTJ@g.@LN^`.?.NTJ@g.?DN^`-|\-n n"n n"n <萼\м=@` n"n0.nJ@f>????<>N5T>?<>N5TJng.?<AN5T0.`N^NuNVBn`0n?V0n n m3?j3?BB.?/<B/<?VNRPN^NuNV>NN=n=n =n =n>?9BNTBW?9BNT.///?< ?9? Nl`./NzXJ@gh>?.?.?.NP\=yB^=yB`09B^yB\|=@09B`yAZ|=@.?9BNT.///?< ?9? NlJng Jnf8N*BWNN^NuNVJyBfB?<NT3BN^NuNVJyBgB?<NTByBN^NuNV=n=n 0.n =@0. n=@.?<?9BN XN^NuNV n=h n=h09@TH=@09@JH=@09@TnH=@09@JnH=@ n1n n1nBBgNT>?.?.?.BgBg?.?.BgN|>?.?.?.BgBg?.?.?<N|>@J?9@TBgBg?<Bg/.N`BW/.NX=@>?.?.?.BgBg?.?.?<N|>W?.W?.W?.WBgBg?.?.?<N|B?<NT0.`N^NuNV.7~N^By?0<`N^NuNVBn`*0n"|700йB @1| n nm 9Bdм-@=|Bn`\ nHng. nH=@0n"|700йB @Bh 0n?0n nl n f yBBh yBBh.BN|g 0<`NBn`60n"|700йB @( g 0.`n nm0<`N^NuNVn>Bg?</. ?<?<N5 `N^NuNVn>Bg?</. ?< ?<N5 `N^NuNVn>Bg?</. Bg?<N5 `N^NuNVn>Bg?</. ?<?<N5 `N^NuNVBBgNT.?<NZTB?<NT0<`N^NuNV./<= N"X. /<= NX./<= NX.= N^`N^NuNVH *n(n -M`Jf`f .`JL0N^NuNVH *n(n -M`f .`JL0N^NuNVH*n. .-M`f`Jf .`JL N^NuNV .a m .z n. . H`N^NuNV . g . g . f 0<`B@`N^NuNVH *n(n `Jg"H>N?H?NT_gHfB@`0<`JL0N^Nu`OEMxxxp vHp/?NA*/@>NA\OJg\(@:Y:IIt:Z:6:[ֆ<:^܆܃Ԇ"BHzHDNL"J@g܅e?<INANSHDRIVERSYS Lrp 0;g Q`Q*(]HE] b$L 4(Zvz:!<UF܉LH dNL&J@fLڅ<Hܯgz&H dNL&J@fXBB44 Zj$o J X`f<Nu,(zIta&J@f L2<pXQ|4fG KL(NJDk?/ ?/?<*NN`P> 8Td<| HooMtooo E PO<|:|<<:<p<H@0<aDA2t a:Q* "<a,<0|gp<Q>Nu*r Ҹ8g޲dXO`#j:"<:psNBNuNV3 @Z3jByj3j3jN09; N^NuNV3 @Z3jByj3j3jN09; N^NuNV# :3 @Z3j3j3j3jN#A\:N^NuNV#:#: .мZ#:3djByj3 j n 3jN n 0j#@Z:#; :#< :#A\:N^NuNV3ejByjByj3jNN^NuNV# :3 j3jByj3j3jN#A\:N^NuNV0.n l0.`0. N^NuNV0.n o0.`0. N^NuNVH *n(n >0-W?0,WNBT:>0-W?,0,WNBT8>?N^T>>?,N^T<89F0G9@0F9@GoFnB@`pJL0N^NuNV3B>kNN^NuNV3B3 B3 B3B3B3B>iNN^NuNV3B3 B>hN n 0? n0? n0? n0?B@09?N^NuNV3B>gNN^NuNV3B3 B3 B3B3B>dNN^NuNV3B3 B>pN n ?"B@09?N^NuNV#?>nNN^NuNV#?3 B3B3B3B3B3B>*NN^NuNV#?3 B3B>!NN^NuNV#?3 B>NN^NuNV3B# ?>NNN^NuNV>MN n0? n 0? n0? n0?B@09?N^NuNV3B# ?>4NN^NuNV3B3 B3 B3B3B3B3B3B3B>3NN^NuNV#?3 B>2NN^NuNV3B3 B3 B3B3B3B3B3B3B3B3B3B3 B3"B#$?3(B3*B>N n,0? n00? n40? n80? n<0? n@0?B@09?N^NuNV3?~0.|Hм6"-@=|` nH2n?~2RRn nm.BNB@09?N^NuNV#?~Bl#BBp#BBt#?Bx#?B|#?"B#BlB> aF3??pN^NuNV>a*pN^NuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^Nu#:NA/9:NuNV n=h.0n/0n/N P/?.?<?N!PN^NuNV n=h.0n/0n/N P/?.?<@N!PN^Nu _B0Z"y:CCbN8C NNVH *n(n `$H>a0H>a&op`lp` JfJfB@JL0N^NuNVH>.|am |zn|0JLN^NuNVN^NuNVH *n(M`RJf HJL0N^NuNVH*n 0.8мj-@~.a&M`RJg :fJgc .Am .On*K`K0.`BW/ ?<o n1GBG`BW/ ?<NN!\JgB@`0<>`d>ON!JgB@`0<>`J.?<=N!T>o n1GBG`,.?<AN!T>``||b@0@9 PN0JL8N^NuNV n am n zn n nHRJfN^NuNVH*nH=@ M2n$BG-M`H M2G $f: n $g.?< NT.$?<NT 2HЁR-@RGnm 2HЁg.?< NT0.JL N^NuNVH*nH|=G`H>Bg?<aX0SGJ@n0.JL N^NuNV#BhNM/9BhNuN^NuNV=|Bn n(g -|#` n(g-|$D n(g .м-@ n0(| =@Bn=n`=|` n  f.=|Jng 0.R@|l N2n| Rn`\ n  fRJngLp2.|A=@0.n|l^0.n` N2n| Rn0.SnJ@fR ` N2n"n QR RnSnRn nlJnf>0.S@@/ nNXJnfB@0.N^NuNVH*n>?./. /-/ N!T=@Jnf393:9p` B0.ѭ -o+mB@0.JL N^NuNVH *n(n >.B@=@=@``Rnnc L2n  fB@0.ncf>?.B@0.W B2.Ё//-/ N!T=@B0.ѭJnf393:9p`^=n`8Rn>?</<9>/-/ N!T=@B0.ѭnb4 -o+mB@0.JL0N^NuNVH|BG` 9@f 9@0`RG|m393:9pJLN^NuNVp2.`F@H9@B@N^NuNVHBG`>aRG|mJLN^NuNVH 0.8*@j0.@BUB-+| BB> Bg/ NN\> ?< / NN\JL0N^NuNVH>.|e3 93:9B`0B@08*@j-f3 93:9B` JL N^NuNVH>N(*@ fp`vJnfB@`j-g3 93:9p`L0|g>/. / N$P`0-g>/. / N&P``>/. / N&PJL N^NuNVH >.HμgR*y:(G:.N|f3 93:9p`>Bg/ NN\ JL0N^NuNVN^NuNVN^NuNVH>.^GORG>a*@ fB` >/ aXJL N^NuNVH (y9L*T`ZB@0-BA2-@F@J@g>N)B`:B@0-ne `*9Lf>a*@ f>N)B`(M*U`JL0N^NuNVH n*PB@0. X@me n `F(MB@0. HH@B@H@B@0-n 9@B@0,F@9@( n ;n B@0-F@;@#9L PJL0N^NuNVH >.|?GG0@>N)*@fB`* R*@(M9GB@0,F@9@.Pa 99LJL0N^NuNVH *nQB@0-BA2-@F@J@g>N)p`(y9Leeecd(T`e2 BA2-IHABAHAЁ" BB4,JHBBBHB҂b #9LB@`n BA2-IHABAHAЁf T0(mB@0-F@;@ T*`* BA2,IHABAHAЁfB@0-lB@0,F@9@(`(#9LB@JL0N^NuNVH *n.a>. ^GORG>a-@fB`J n(PPg2d`Sn Jn f`B0. B0. `%Sn Jn f>/.aXJL0N^NuNVH>N(*@ f3 93:9p`$>?-/. ?<BN!P+@U -JL N^NuNV>B?.a\N^NuNVHN'>|fp`>N(08*@jJn fUJnfU.5/.N!XJ@fU;n 0``.6/.N!XJ@fU0`d>/.?N"^\J@g>N'393:9p`0U>B-H?N- \BWB-H?N- \0JL N^NuNVBW?. /.a\N^NuNVBW?. /.a\N^NuNV>?. /.a\N^NuNVH*n0-| |f, -<o >/-?N(\>Gg mp`J-gJg-g;| `;| `>0- D@H/?N- \Bm +mB@JL N^NuNVN^NuNVH>.>N(*@ f3 93:9p`NBF0|f>?<>N!T<l|>N(>N'JFf0``393:9pJL N^NuNVH*n0-|g*.N.-g .N+B@H+@+@Bm m>N/bJL N^NuNVHBG`0м9P.N/RG|mJLN^NuNVN0B>NN^NuNVHN'>|fp`>N(08*@jJnfU.5/.N!XJ@f U0`R`.6/.N!XJ@fU0`2>/.?N"^\J@g3#93:9p`U0JL N^NuNVBW?. /.a:\N^NuNVBW?. /.a"\N^NuNV>?. /.a\N^NuNVH BWN)#:#;By:.5a*n`N`RJgHHм8 @fJg2 "g 'fFH>/ RNlX(@ f.:0/ aVX H> M2GBRG.Ra`BG`RG M2GJg5pHHм8 @gJ5pg M2GBRGH`BWN/bBW/ RN.XJ@g.R/<:BaX`l>N/b ->f@>/ TN.X|f>B?<N- \|f.R/<:Oa|X`$BW/ RN1ZX|g.R/<:^aVX`>?/ NlXJf>*/ NlXJg-|q.8?<NT>/ ?<N"^\<f.:m/ aX`^.H?/.aZ\.N"8>RWN!(@./ N"X.a>/ ?<N"^\<f`.a`|g`JfBaSy:.;N|f.:/<:xa*XB/9:?9:Nd\>N0tJL0N^NuNV|./N"X. /NX.:/NX.?< NT>N0tN^NuNVH*n y; X;Ry:JL N^NuNVH*n. (nGVfJL8N^NuNVHN'BW/<5N.vX>/<5N.vX>/<5N.vX n2n B*n`&HHм8 @g H| `HRJf> /.N1XJL N^Nu#;NN/9;Nu#;NM/9;Nu#;NA/9;NuStack Overflow runtimeCON:LST:Cannot initialize stack     -7 <24 [3][Fatal Error!|Corrupt Resource File][EXIT]HINSTALL.RSC[2][HINSTALL.RSC][ OK ][2][HINSTALL.RSC][ OK ]5.00:\SH204DVR.SYS:\SHDRIVER.SYS:\SHDRIVER.SYS:\SH204DVR.SYSSHDRIVER.RAW:\SHDRIVER.SYS !!!!" ##b""#6#b#b" 9D9D           : unmatched quoteCannot open Cannot append Cannot create : No matchStack Overflow $_intout; _hold< _ptsout< _sbuf= _wold? _xold?_yold?_gl_hcha?_gl_apid?_addr_in?_gl_wcha?_wi_hand? _addr_ou?"_gl_hbox?&_keycode?(_mx?*_my?,_msgbuff?._menubar?>_phys_ha?B_bootrea?D_cantins?H_gl_wbox?L_nodrive?N_crdvrer?R_work_in?V_rootrea?l_nomemor?p_instfnl?t_top_win?x_noavdrv?z_control?~_running?_int_out?_opdvrer?_physdev?_butdown?_work_ou?_bootwri@*_pxyarra@._unstfnl@B_wrdvrer@F_hdesk@J_rootwri@L_about@P_wdesk@T_xdesk@V_ydesk@X_intin@Z_hworkAZ_ptsinA\_wworkB\_xworkB^_yworkB`_retBb_punBd_xyzzxBh_cBl_hiddenB_handleB_globalB_int_inB_logdevB_ostackB_ad_cB_dvrbufB_contrlj__fdsj_vernumj__start__exit_brk__break:___cpmrv:__base:__sovf8_crystal_ctrl_cn6"___BDOS_blkfillN_indexl_strchrl___pname5___tname5___lname6___xeof6_getalla_maind_domultip_install8_gemroot b_uninsta _copydvr _open_vwD_do_redr_hide_mo_show_mo*_set_cliP_execfor_corrupt&_logxlat7_glogdevH_getroot_putroot_getboot_putboot*_err^_errs_strcat_strcpy"_strrepP_toupper_isspace_strcmp_bootsta\_bootend_rootsta_rootend_gsx1_gsx2_iioff:_iooff:_pioff:_pooff:_vdi_vsf_int_vsf_col_vs_clip _v_opnvwR_v_clsvw_v_bar_minB_max^_rc_intez_wind_up_wind_se*_wind_gel_wind_de_wind_cr_rsrc_ga_rsrc_loF_objc_dr`_menu_tn_menu_ba_graf_mo_graf_ha_form_alZ_form_di|_form_do_evnt_mu_crys_if_appl_in @_appl_ex lmul _trap!__pc_rea!__pc_wri!T__salloc!__strcmp!___atab8_atab"0_strlen"8_errno9__errcpm9___open"^_ucase#n__ttyout#__lstout$D_j30june$__wrtchr$__wrtbin&__wrtasc&__chvec9@__allocc'__freec'__chinit'___chini(__chkc(_write(_sbrk)_malloc_)__errmal)__afreeb9D__aflist9L_malloc)_free+_realloc,_lseek- _tell-f__open-|_open.v_opena._openb._fflush.__iob9P___fdecl/Z_close/b_fclose/__cleanu0B_exit0t__creat0_creat1B_creata1Z_creatb1r___main1__main5_gemdos5_bios5_xbios5bD`      &      0          B " > RRf:"  &" , , >$,&, ,<$@, $T424  JX  b>                 r&*R"4Z&`"R"@2&"&.`".86 Jp<  N4*"   n ,D( 0 <    >   ,r $ \8 p Desk File About HINSTALL ... - Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Quit  Install - Remove Atari Hard Disk Installation Copyright 1986 - 1991OKby Atari Corporation3.0aVersion _XAbout to install a bootableOKCANCEL@driver in logical drive _:9 Install Hard Disk Driver About to remove the bootableOKCANCEL@driver in logical drive _:9 Remove Hard Disk Driver C:D:Select the logical driveE:F:G:H:I:J:K:L:M:N:O:P:OKCANCEL[3][Not enough system memory!|Cannot continue.][ OK ][1][No available logical drive |for installation of driver.][ OK ][1][Cannot install driver!][ OK ][3][Cannot read Root Sector|from the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Root Sector|to the disk!|Try backing up the disk|and reformatting it.][ OK ][3][Can not read Boot Sector|from the logical drive!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write Boot Sector|to the logical drive!|Try backing up the disk|and reformatting it.][ OK ][3][Cannot write driver|file to destination!][ OK ][3][Cannot create driver|file at destination!][ OK ][3][Cannot open driver|source file!][ OK ][3][Driver file does not|exist!][ OK ]4eAp^cp  PP   $ + P2 I ^ s        (  $0 F I   % u   &     % @C F_beh  k n q t  wz}  G %    &  0          E ' ^> ~ `*b `H```\.*e! $o *`!P#`! AHDI : Dec 03 1991 v5.00 Atari Corp. 1985, 1986, 1987, 1988, 1989, 1990, 1991 NAHDIE@ 0/BA yC|`$0/2/ yC`0/BA yC hU@kNg4ypm>|k:yrm0|k,29ҒypyrAl`|lEJ2k INUo2/At3CJ1fH@?aPTLJ@gpa <#/?9TWBg?</9?< a _J@g/2/a _ g`t493 fRy`2< y hUfaH` 3arJ@gj`,A0/B0At`/?/a\JjpNuH@Q alJgV f&P ##avJg2k gSyjP3 g3`J9 fLQpNuJ g(g g g gp` "(YHAYNu fNu/ 9*d NuP>a"|@ra`P>?a"|a 3|a23|a(a @ er`&6 Ae Agr`rSAHAJAfHA`HARAAHraha`J@fLQp` pC`6`6P>a:"|at3|a3|aat@"<a`<3A<EJ@kUBHAHA"abkQ3A<HAHA"<axNu/   XNu b2` /2"NuJ8J8J8J8Nu <и8g bp`p9ffpNua o 2/ SAJ9 gpa9 aJ@kg aQpNuaV o 2/ SAJ9 gpaZ9099gaa "|"| aCSBabJ@kQpNuad8gb`D B@2/ 88NqNqa8fbp`B@NuababNuҹ@8f*c 8g bap`,08g?a0`p81Nua8aJ@gX`adak8a$J@k Nuҹ@8fbp`pNu88gbp`p8Nu?akaTNu |"9<ҐNu |"98ҐNu |"9,ҐNu# |)aJyfB?< NA\#/</<_MCHa0POQ x!"n"ONzP !.IQ""x!"$O9P"Q AH?|k:yrm0|k,29ҒypyrAl`|lEJ2k INUo2/At3CJ1fH@?aPTLJ@gpa <#/?9TWBg?</9?< a _J@g/2/a _ g`t493 fRy`2< y hUfaH` 3arJ@gj`,A0/B0At`/?/a\JjpNuH@Q alJgV f&P ##avJg2k gSyjP3 g3`J9 fLQpNuJ g(g g g gp` "(YHAYNu fNu/ 9*d NuP>a"|@ra`P>?a"|a 3|a23|a(a @ er`&6 Ae Agr`rSAHAJAfHA`HARAAHraha`J@fLQp` pC`6`6P>a:"|at3|a3|aat@"<a`<3A<EJ@kUBHAHA"abkQ3A<HAHA"<axNu/   XNu b2` /2"NuJ8J8J8J8Nu <и8g bp`p9ffpNua o 2/ SAJ9 gpa9 aJ@kg aQpNuaV o 2/ SAJ9 gpaZ9099gaa "|"| aCSBabJ@kQpNuad8gb`D B@2/ 88NqNqa8fbp`B@NuababNuҹ@8f*c 8g bap`,08g?a0`p81Nua8aJ@gX`adak8a$J@k Nuҹ@8fbp`pNu88gbp`p8Nu?akaTNu |"9<ҐNu |"98ҐNu |"9,ҐNu# |)aJyfB?< NA\#/</<_MCHa0POQ x!"n"ONzP !.IQ""x!"$O9P"Q AH?< xCR AHDIf f>(\|<E NnhܼHzG?< NA\ aHz9?< NA\ a~Hz8?< NA\ r ajHz@?< NA\Hzr?< NA\ACp"QNHz?< NA\ r a*Hz?< NA\zHz?< NA\a6NA\??<LNAJA% H@<0B@H@fHP?< NA\Nu0vZ?<$NNTQNuGv0"S&=|A-HS@g Ap,,H`,0QNA\?</?<1NAP Couldn't find CACHE*.* or X:\AUTO\CACHE*.* FAT/root, data/dir cache buffers in K. Not enough memory for K... No cache buffers added. pCACHEnnnq Copyright 1989, Atari Corp. Usage: cache [D]nnn [Fnnn] (nnn = 1 to 999) D=Data/Dir buffers F=FAT/Root Dir buffers no letter=nnn of each `cache d10 F 20' adds 10 D, 20 F buffers. Or, rename to CACHEnnn.PRG and run (equivalent to `cache nnn').  `^ T B?< NAF'A0< "|"QNA0!A.p"$&(*,."@$@&@(@*@,@H~8` xNrloopcstart$cloopLberrVcend\clen:The latest official Atari Hard Drive Utilities. (v5.00, Dec. 3, 1991) Included are: HDX v5.00 - More compatible command set, should be able to format just about any drive you throw at it, including drives such as the Quantum "PULSE" drives. (WINCAP is now only required for ST506/412 drives or SCSI drives connected through ACSI that HDX cannot determine through the "mode sense" commands, such as a Quantum 210s, due to the fact that the "Inquire Capacity" command uses all 8 bits of the command byte) AHDI/SHDRIVER v5.00 - Support for SCSI, ACSI, and IDE all rolled into one; also has the ability to scan all devices instead of continuing boot after no response from a unit (allows for non-contiguous devices numbers); displays drive information during boot-up. A version of the driver with the configuration bits set for non-contiguous devices and any-size Syquest cartridges is in the folder "munged" (which allows you to boot with no cart in the drive and be able to insert a 1 to 4 partition cart at anytime and read it, although the system will always reserve four drive letters for the removeable drives). The bug that caused long boot delays when booting from ACSI connected drives has been fixed. .  `.. AHDI PRG !+UIS_III PRG cte) * * Mikael Emtinger * * Lars-Yngve Hallgren * * Robert Wenner * * Magnus Zetterberg * * * * (Manual Text) * * Michael Brunnstrm * * Peter Zetterberg * * * *I * * * Special Thanks To ITS * * Mikael Emtinger * *  * * * * * * G R E E T I N G S * * * * * Anatomica * * Dead Hackers Society * * New Core * * Unit 17 * * Zeal * * * * * * R I P * * * * Yougurth * * * *I * * * * * We assure you that no animals was injured * * under the production of Obssession * * except for Peters cat who suffers from * * an Amiga Virus * * * * And with the increasing destruction of * * nature in mind, this program was written * * with 100% recyclable electrons * * * * We have mathematical formulas in the * * program code wich make sure that the * * speed of the ball never exceeds * * lightspeed to prevent the potential * * destruction of universe * * * * * * * *   * *  * *   * *  * *   * * * * (C) 1994 by Unique * * * * * *I * * * ErrList * * * * DoList * * * Ta bort screen 3 tar fr mycket plats * * * Skriv en egen debugger... * * dvs erstt vektorerna med egna rutiner * * * rts copy protection * * * *I *I * * * Initiera Program och spara alla register * *CBL * *I section text ***define constants ***kalle equ's xmin equ 0 xmax equ 336-16 ymin equ 0 ymax equ 600-16 g equ 210 | 256 = 1 PIXEL/UPPDATERING FLACKADD equ 2*02 | vinkel att lgga p extra vid felkorrigering STORBUMPER equ 300 | hastigheten bollen fr vid en stark bumper LILLBUMPER equ 270 | hastigheten bollen fr vid en svag bumper vmax equ 511 | max hastighet fr kulan ppvbl equ 8 | pixels*2 / vbl UNDERLAG equ 12 | antal uppdateringar mellan friktion ***Tords equ's FQ EQU 50066 DATLEN EQU 40 | Avstnd mellan VOICE1 och VOICE2 FREQUENCY_SEED EQU 4685596 TONES EQU 3 | mellansteg minst 1 ***tosinit start move.l sp,a5 addq #4,sp move.l 4(a5),a5 | get basepage move.l $c(a5),d0 | get legth of text segment add.l $14(a5),d0 | add length of data segment add.l $1c(a5),d0 | add length of uninit BSS add.l #$100,d0 | add length of basepage move.l d0,-(sp) | push length to reserve move.l a5,-(sp) | start address to modify move.w #0,-(sp) | zero move.w #$4a,-(sp) | shrink memory trap #1 lea $c(sp),sp ***supervisor mode jsr super | supervisormode ***mouse, key klick, key rept => off move.b $484.w,old484 | save key stats move.b #$12,$fc02.w | mouse off bclr #0,$484 | no keyclick bclr #1,$484 | no repeat key ***save all registers jsr save_regs | spara alla register ***set 50 hz move.b #2,$f820a.w | 50HZ ***stt lgupplsning jsr vsync | sync? move.w #0,-(sp) | _SETSCREEN move.l #-1,-(sp) | Low=0, Mid=1, High=2 move.l #-1,-(sp) | #-1=No Change move.w #5,-(sp) trap #14 lea 12(sp),sp ***usermode jsr user | Usermode *I * * * Init Pinnball * *CBL * *I *+-F+ *| Set start registers for Pinnball | *+-F+ move.l #bana,bana1 move.l #bana+100800,bana2 *+-F+ *| Initiate ball routine | *+-F+ jsr init_boll *+-F+ *| Initiate module player | *+-F+ jsr super jsr MAKE_FREQLIST_VALUELIST lea SPLBANK,a0 jsr manipulate_samples lea SNGFIL,a0 ; pekare p lten lea SPLBANK+4,a1 ; pekare p Samplingsbanken+4 jsr init_player lea BUFFERT,a0 ; pekare p bufferten jsr init_driver move.w #$37,Jump_pos ; STARTPOSITION (0=default) jsr user *+- -;+ *| Get pointers for blitdatafields | *+-F+ move.l #BD_LLF1d,BD_LLF1p | left lower flipper data move.l #BD_LLF2d,BD_LLF2p | move.l #BD_LHF1d,BD_LHF1p | left higher flipper data move.l #BD_LHF2d,BD_LHF2p | move.l #BD_RLF1d,BD_RLF1p | right lower flipper data move.l #BD_RLF2d,BD_RLF2p | move.l #BD_RHF1d,BD_RHF1p | right higher flipper data move.l #BD_RHF2d,BD_RHF2p | move.l #BD_RBB1d,BD_RBB1p | repair background data move.l #BD_RBB2d,BD_RBB2p | move.l #BD_PBB1d,BD_PBB1p | protect background data move.l #BD_PBB2d,BD_PBB2p | move.l #BD_BBM1d,BD_BBM1p | blit ball mask data move.l #BD_BBM2d,BD_BBM2p | move.l #BD_BBS1d,BD_BBS1p | blit ball sprite data move.l #BD_BBS2d,BD_BBS2p | *+-F+ *| Initiate poangscroller | *+-F+ bsr Init_scroller | init scroller *+-F+ *| First Initiate BD_PBB and BD_RBB blit data list | *+-F+ move.l BD_RBB1p,a1 move.l BD_RBB2p,a2 move.l #sapb1,BD_src(a1) move.l #sapb2,BD_src(a2) move.l BD_PBB1p,a1 move.l BD_PBB2p,a2 move.l #sapb1,BD_dst(a1) move.l #sapb2,BD_dst(a2) *+-F+ *| Initiate ballcalc | *+-F+ jsr prekalle | initierar jsr show_ball | visa kula jsr init_rep | background repair jsr FlipShow | flipprar *+-F+ *| copy datafield (2) to (1) because only (2) is created!!! | *+-F+ *| LOCAL: D0 D1 D2 D3 D4 D5 D6 D7 - DESTROYED | *+-F+ movem.l BD_LLF2d,d0-d7 | left lower flipper movem.l d0-d7,BD_LLF1d movem.l BD_LHF2d,d0-d7 | left higher flipper movem.l d0-d7,BD_LHF1d movem.l BD_RLF2d,d0-d7 | right lower flipper movem.l d0-d7,BD_RLF1d movem.l BD_RHF2d,d0-d7 | right higher flipper movem.l d0-d7,BD_RHF1d movem.l BD_PBB2d,d0-d7 | protect background movem.l d0-d7,BD_PBB1d movem.l BD_RBB2d,d0-d7 | repair background movem.l d0-d7,BD_RBB1d movem.l BD_BBM2d,d0-d7 | blit ball mask movem.l d0-d7,BD_BBM1d movem.l BD_BBS2d,d0-d7 | blit ball sprite movem.l d0-d7,BD_BBS1d *+-F+ *| Second Initiate BD_PBB and BD_RBB blit data list | *| because the routine above destroys the values | *+-F+ move.l BD_RBB1p,a1 move.l BD_RBB2p,a2 move.l #sapb1,BD_src(a1) move.l #sapb2,BD_src(a2) move.l BD_PBB1p,a1 move.l BD_PBB2p,a2 move.l #sapb1,BD_dst(a1) move.l #sapb2,BD_dst(a2) *+-F+ *| FADE COLORS TO BLACK!!! | *+-F+ jsr super | GOTO SUPERVISORMODE move.l #$ff8240,fadefrom | DO THE FADE move.l #black,fadeto jsr fade jsr user | GOTO USERMODE *+-F+ *| Get Physbase | *+-F+ *| LOCAL: D0 D1 D2 - A0 A1 A2 - DESTROYED | *+-F+ move.w #2,-(sp) | _Physbase trap #14 | return d0 addq.l #2,sp | logo uses d0 move.l d0,Physbase *+-F+ *| Load graphics | *+-F+ *| LOCAL: D0 - A1 A2 A3 - DESTROYED | *+-F+ ldgraphic move.l #pi1_spr1,pi1_fil move.l #pal,pi1_pal move.l #Sprite1,pi1_adr jsr read_pi1 | ls sprite screen1 move.l #pin,pi1_fil move.l #pal,pi1_pal move.l #bana,pi1_adr jsr read_pws | read bana picture *** copy bana1 to bana2 move.l bana1,a1 move.l bana2,a2 move.w #25200-1,d0 .loop move.l |(a1)+,(a2)+ dbf d0,.loop *** Supervisor mode jsr super *+-F+ *| Install VBI routine! | *+-F+ move.l $118,old118 jsr S_ADD jsr SET_INT *I * * * Demo Scroller = Intro * *CBL * *I *+-F+ *| Visa Demo avbryt med space! | *+-F+ *| LOCAL: D0 D2 D7 - A0 - ERASED | *+-F+ move.l bana1,a0 | stt bildminnes adressen jsr set_bma *** fade up gamecolors * move.l #black,fadefrom * move.l #gamepal,fadeto * jsr fade_spec *** time for scrolling move.w #0,line again move.w #185-1,d7 | visa hela banan runshow1 cmp.b #0,vbi_flag | check for vsync beq.s runshow1 move.b #0,vbi_flag | zero vbi flag add.w #2,line move.w line,d6 mulu #168,d6 | line * 168 = adress move.l d6,Boffset jsr FlipShow | visa flipprar jsr show_ball | visa kula *** anropa modulspelaren movem.l d0-d7/a0-a6,-(sp) jsr player jsr MUSIKRUTINEN movem.l (sp)+,d0-d7/a0-a6 *** update pointers jsr Bcalc tst.b key_matrix+57 bne no_demo dbf d7,runshow1 move.w #185-1,d7 | visa hela banan runshow2 cmp.b #0,vbi_flag | check for vsync beq.s runshow2 move.b #0,vbi_flag | zero vbi flag sub.w #2,line move.w line,d6 mulu #168,d6 | line * 168 = adress move.l d6,Boffset jsr FlipShow | visa flipprar jsr show_ball | visa kula *** anropa modulspelaren movem.l d0-a6,-(sp) jsr player jsr MUSIKRUTINEN movem.l (sp)+,d0-a6 *** update pointers jsr Bcalc tst.b key_matrix+57 bne.s no_demo dbf d7,runshow2 bra again | another scroll up/down no_demo move.w #$3c,Jump_pos startgame cmp.b #0,vbi_flag | check for vsync beq.s startgame move.b #0,vbi_flag | zero vbi flag cmp.w #370,line beq .break add.w #2,line move.w line,d2 mulu #168,d2 | line * 168 = adress move.l d2,Boffset *** anropa modulspelaren movem.l d0-a6,-(sp) jsr player jsr MUSIKRUTINEN movem.l (sp)+,d0-a6 *** update pointers jsr Bcalc bra startgame .break move.w line,d2 | rkna ut Boffset muls #168,d2 move.l d2,Boffset *I * * * Pinnball main loop * *CBL * *I *+-F+ *| Start game! | *+-F+ main TangentLoop cmp.b #0,vbi_flag | check for vsync beq.s TangentLoop move.b #0,vbi_flag | zero vbi flag tst.b key_matrix+42 beq .release_l jsr lshift bra .cont1 .release_l jsr lrelease .cont1 tst.b key_matrix+54 beq .release_r jsr rshift bra .cont2 .release_r jsr rrelease .cont2 tst.b key_matrix+57 | space beq .cont3 jsr space .cont3 tst.b key_matrix+28 | return beq .cont4 jsr return .cont4 tst.b key_matrix+1 | esc avbryter beq .cont5 bra escape .cont5 tst.b key_matrix+72 | up beq .cont6 jsr minus .cont6 tst.b key_matrix+80 | down beq .cont9 jsr plus .cont9 cmp.w #0,start_boll | return flagga satt beq .cont11 jsr kalle | berkna boll (Return) .cont11 cmp.b #1,LFflag | left shift driver on? bne .cont12 jsr AnimLF .cont12 cmp.b #1,RFflag | right shift driver on? bne .cont13 jsr AnimRF .cont13 *+-F+ *| Ball calc routines | *+-F+ jsr FlipShow | visa flipprar jsr show_ball | visa kula *+-F+ *| BIG PAUSE - MUSIC HERE | *+-F+ movem.l d0-a6,-(sp) jsr player jsr MUSIKRUTINEN movem.l (sp)+,d0-a6 *+-F+ *| Scrolling routine | *+-F+ *| LOCAL: D0 fD1 D2 D3 - A0 - DESTROYED | *+-F+ scrolltrack ***scroll on? cmp.w #0,scroll | scroll som fljer boll (space) beq .void1 ***First center ball move.w y,d0 | get y-pos sub.w #90,d0 | ball centered ***check against bounds first y<0 tst.w d0 bpl .void2 clr.w d0 .void2 ***check against bounds next y>370 cmp #370,d0 blt .void3 move.w #370,d0 .void3 ***get value for line move.w rotline,line ***rotate list move.l #rotline,a0 movem.l 2(a0),d1-d3 movem.l d1-d3,(a0) ***set new value in list move.w d0,rotline+12 ***calc Ban offset move.w line,d0 muls #168,d0 | d0=y corr move.l d0,Boffset | Boffset anvnds av VBI RUTIN SOM * | stter Bild Minnses Adressen move.w #$f00,$ff8240 .void1 tst.w red_flag bne .void1 move.w #1,red_flag jsr Bcalc move.w #$fff,$FF8240 bra TangentLoop | nsta varv *I * * * Routines activated by keystrokes * *CBL * *I *+-F+ *| Left shift dvs. Left flipper - Push | *+-F+ lshift cmp.b #1,LFdir | direction down? bne Lsend | no -> Lsend move.b #1,LFflag | yes -> start driver move.b #0,LFdir | direction up move.w #-vmax,yhast | TA BORT Lsend rts *+-F+ *| Left shift - Release | *+-F+ lrelease cmp.b #0,LFdir | direction up? bne Lrend | no -> Lrend move.b #1,LFflag | yes -> start driver move.b #1,LFdir | direction down Lrend rts *+-F+ *| Right shift dvs. Right flipper - Push | *+-F+ rshift cmp.b #1,RFdir | direction down? bne Rsend | no -> Rsend move.b #1,RFflag | yes -> start driver move.b #0,RFdir | direction up move.w #-vmax/2,yhast | TA BORT Rsend rts *+-F+ *| Right shift - Release | *+-F+ rrelease cmp.b #0,RFdir | direction up? bne Rrend | no -> Rrend move.b #1,RFflag | yes -> start driver move.b #1,RFdir | direction down Rrend rts *+-F+ *| SPACE - TILTS THE GAMEBOARD | *+-F+ space move.w #1,scroll rts *+-F+ *| Return - Fire is going away. | *+-F+ return move.w #1,start_boll rts *+-F+ *| MINUS | *+-F+ *| LOCAL: D0 - DESTROYED | *+-F+ minus cmp.w #0,line | rad 0? bmi .end sub.w #8,line | 8 lines tst.w line bpl .cont move.w #0,line .cont move.w line,d0 muls #168,d0 | d0=y corr move.l d0,Boffset | Set Boffset .end rts *+-F+ *| PLUS | *+-F+ *| LOCAL: D0 | *+-F+ plus move.l d0,-(sp) | P-REG cmp.w #370,line | rad 360? bge .end add.w #8,line | 8 lines cmp.w #370,line blt .cont move.w #370,line .cont move.w line,d0 muls #168,d0 | d0=y corr move.l d0,Boffset | Set Boffset .end move.l (sp)+,d0 | R-REG rts *+-F+ *| End of Pinnball - Quit Game | *+-F+ *** end of game escape *I * * * End Program * *CBL * *G** fastend *** avsluta modulspelaren jsr MUSIKRUTINEN+8 jsr S_SUB move.l old118,$118 not_all_end jsr rest_regs | restore system registers move.b #$8,$fc02.w | mouse on move.b old484,$484.w | restore key stats jsr user | usermode move.w #0,-(a7) | ptermo trap #1 *I * * * Screen scrolling driver routines * *CBL * *I Bcalc *** preset bma move.l bana1,a0 | BMA till a0 bana2 blir bana1 add.l Boffset,a0 | add offset move.l a0,-(sp) | stt bildminnes adressen move.b 1(sp),$ff8201 | (vbasehi) set registers move.b 2(sp),$ff8203 | (vbasemd) move.b 3(sp),$ff820d | (vbaselo) addq.l #4,sp *swap screenadress move.l #bana1,a0 | eg. bana1 <-> bana2 movem.l (a0),d0/d1 | flytta bgge banadresserna exg d0,d1 | swap adresses movem.l d0/d1,(a0) | flytta tillbaka banadresserna *swap Blitdata pointers move.l #BD_LLF1p,a0 movem.l (a0),d0/d1 | left lower flipper exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_LHF1p,a0 movem.l (a0),d0/d1 | left higher flipper exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_RLF1p,a0 movem.l (a0),d0/d1 | right lower flipper exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_RHF1p,a0 movem.l (a0),d0/d1 | right higher flipper exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_PBB1p,a0 movem.l (a0),d0/d1 | protect background exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_RBB1p,a0 movem.l (a0),d0/d1 | repair background exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_BBM1p,a0 movem.l (a0),d0/d1 | blit ball mask exg d0,d1 | swap pointers movem.l d0/d1,(a0) | move.l #BD_BBS1p,a0 movem.l (a0),d0/d1 | blit ball sprite exg d0,d1 | swap pointers movem.l d0/d1,(a0) | rts *I * * * Animation Driver routines * *CBL * *I *+-F+ *| Left Flip - Animation Driver Subroutine | *+-F+ AnimLF cmp.b #0,LFdir | direction = up? bne ALFdwn | no! jump to down ALFup addq.w #1,LFpos cmp.w #4,LFpos beq .void1 rts | tillbaks till Main Loop .void1 move.b #0,LFflag | max value Zero flag rts | tillbaks till Main Loop ALFdwn subq.w #1,LFpos cmp.w #0,LFpos beq .void1 rts | tillbaks till Main Loop .void1 move.b #0,LFflag | min value Zero flag rts | tillbaks till Main Loop *+-F+ *| Right Flip - Animation Driver Subroutine | *+-F+ AnimRF cmp.b #0,RFdir | direction = up? bne ARFdwn | no! jump to down ARFup addq.w #1,RFpos cmp.w #4,RFpos beq .void1 rts | tillbaks till Main Loop .void1 move.b #0,RFflag | max value Zero flag rts | tillbaks till Main Loop ARFdwn subq.w #1,RFpos cmp.w #0,RFpos beq .void1 rts | tillbaks till Main Loop .void1 move.b #0,RFflag | min value Zero flag rts | tillbaks till Main Loop *+-F+ *| FlipShow - Subroutines for flipper animation | *+-F+ *| LOCAL: D0 - A0 A1 A2 | *+-F+ FlipShow *** protect reg movem.l d0/a0-a2,-(sp) *** left lower flipper routine *** setup data for lower flipper move.w LFpos,d0 muls #6,d0 | 6 bytes between data blocks move.l #LLFdata,a0 add.w d0,a0 *** get left lower flipper animation data move.l BD_LLF2p,a2 | get pointer (a2) Left Lower Flipper move.l #LLF_IMG,a1 | source adress add.w (a0),a1 | add x+y offset move.l a1,BD_src(a2) | set source datafield move.l bana2,a1 | destination adress add.l 2(a0),a1 | add offset move.l a1,BD_dst(a2) | set destination datafield *** left higher flipper routine *** setup data for higher flipper move.w LFpos,d0 muls #6,d0 | 6 bytes between data blocks move.l #LHFdata,a0 add.w d0,a0 *** get left higher flipper animation data move.l BD_LHF2p,a2 | get pointer (a2) Left Lower Flipper move.l #LHF_IMG,a1 | source adress add.w (a0),a1 | add x+y offset move.l a1,BD_src(a2) | set source datafield move.l bana2,a1 | destination adress add.l 2(a0),a1 | add offset move.l a1,BD_dst(a2) | set destination datafield *** right lower flipper routine *** setup data move.w RFpos,d0 muls #6,d0 | 6 bytes between data blocks move.l #RLFdata,a0 add.w d0,a0 *** get right lower flipper animation data move.l BD_RLF2p,a2 | get pointer (a2) Right Lower Flipper move.l #RLF_IMG,a1 | source adress add.w (a0),a1 | add x+y offset move.l a1,BD_src(a2) | set source datafield move.l bana2,a1 | destination adress add.l 2(a0),a1 | add offset move.l a1,BD_dst(a2) | set destination datafield *** right higher flipper routine *** setup data move.w RFpos,d0 muls #6,d0 | 6 bytes between data blocks move.l #RHFdata,a0 add.w d0,a0 *** get right higher flipper animation data move.l BD_RHF2p,a2 | get pointer (a2) Right Lower Flipper move.l #RHF_IMG,a1 | source adress add.w (a0),a1 | add x+y offset move.l a1,BD_src(a2) | set source datafield move.l bana2,a1 | destination adress add.l 2(a0),a1 | add offset move.l a1,BD_dst(a2) | set destination datafield *** restore reg movem.l (sp)+,d0/a0-a2 *** end of flipper routines rts *I * * * System routines * *CBL * *I *+-F+ *| DEBUG ROUTINE | *+-F+ * this code is for debugging, as the debug display * is messed up if hscroll and linewid are non-zero. * when the debugger is invoked, save the PC to a register, * set PC to debug, single step 2 instructions then restore * PC. This has to be done 'blind', so type carefully! debug move.b #0,$ff8265 move.b #0,$ff820f *+-F+ *| Save all registers which the program changes | *+-F+ *| LOCAL: D0 D1 D2 - A0 A1 A2 A6 | *+-F+ save_regs movem.l d0-d2/a0-a2/a6,-(sp) | P-REG move.b $f820a.w,oldsync | save sync mode jsr vsync | synchronise move.l #old_pal,a6 jsr save_pal | save old palette move.l $44e,oldbase move.b $ff8265,oldhscr move.b $ff820f,oldline move.w #4,-(sp) | _Getrez trap #14 | return d0 addq.l #2,sp move.l d0,oldmode movem.l (sp)+,d0-d2/a0-a2/a6 | R-REG rts *we are here *+-F+ *| Restore all registers which the program changes | *+-F+ rest_regs move.b oldsync,$f820a.w | restore sync mode jsr vsync | synchronise move.b oldline,$ff820f move.b #0,$ff8265 move.l #old_pal,a6 jsr rest_pal | restore old palette move.l oldbase,a0 jsr set_bma move.l oldmode,d0 move.w d0,-(sp) | _SETSCREEN move.l #-1,-(sp) | Low=0, Mid=1, High=2 move.l #-1,-(sp) | #-1=No Change move.w #5,-(sp) trap #14 lea 12(sp),sp rts *+-F+ *| Save pallette routine | *+-F+ * Subroutine to save pallette to address in A6 save_pal movem.l d0-d7/a0,-(sp) move.l #$ff8240,a0 | colour register address movem.l (a0),d0-d7 | all 16 colours movem.l d0-d7,(a6) | copy them movem.l (sp)+,d0-d7/a0 rts *+-F+ *| Restore pallette routine | *+-F+ * restore pallette at address in a6 rest_pal movem.l d0-d7/a0,-(sp) move.l #$ff8240,a0 | colour register address movem.l (a6),d0-d7 | all 16 colours movem.l d0-d7,(a0) | copy them movem.l (sp)+,d0-d7/a0 rts *+-F+ *| Sync routine | *+-F+ * wait for Vblank & return * sync (with the electron beam * to do this we check the fr clock register ($466.w) * which is incremented every 50th second and wait * for a different value vsync move.l d0,-(sp) move.l $466.w,d0 ;fr clock .loop cmp.l $466.w,d0 ;check value beq.s .loop ;is it the same? move.l (sp)+,d0 rts *+-F+ *| wait key routine | *+-F+ wait move.w #7,-(sp) trap #1 addq.l #2,sp rts *+-F+ *| Routine to set screen base address, which will take effect | *| next vblank - takes a0 as parameter | *+-F+ set_bma move.l a0,-(sp) | stt bildminnes adressen move.b 1(sp),$ff8201 | (vbasehi) set registers move.b 2(sp),$ff8203 | (vbasemd) move.b 3(sp),$ff820d | (vbaselo) addq.l #4,sp rts *+-F+ *| Supervisormode <=> Usermode | *+-F+ *** goto super routine super clr.l -(sp) move.w #$20,-(sp) trap #1 addq.l #6,sp move.l d0,sv_sup | save old supervisor pointer rts *** goto user routine user move.l sv_sup,-(a7) | to user mode move.w #$20,-(a7) trap #1 addq.l #6,sp rts *+-F+ *| System routines - data and bss area | *+-F+ section bss oldbase ds.l 1 oldmode ds.l 1 sv_sup ds.l 1 old_pal ds.w 16 oldsync ds.b 1 oldhscr ds.b 1 oldline ds.b 1 section text *I * * * * * File reading routines * * * *CBL * *I *+-F+ *| Read PWS Files ROUTINE | *+-F+ * hitta dta read_pws move.w #47,-(sp) | fgetdta trap #1 addq.l #2,sp move.l d0,a6 move.l #fm_pws,a5 move.w #0,-(sp) | ffirst move.l pi1_fil,-(sp) move.w #78,-(sp) trap #1 addq.l #8,sp tst.l d0 bmi fil_fel move.l 26(a6),d7 | file lenght move.w #0,-(sp) | 0=ls 1=skriv 3=0+1 move.l pi1_fil,-(sp) | Fil Namn att ppna move.l #fm_op,a5 move.w #61,-(sp) trap #1 addq.l #8,sp move.l d0,d4 tst.l d0 | fel? bmi fil_fel move.l pi1_adr,-(sp) | adress att lsa till move.l d7,-(sp) | Hur mnga bytes? move.w d4,-(sp) | Vilket filnummer? move.w #63,-(sp) | Ls fil trap #1 | lea 12(sp),sp | Korrigera stacken tst.l d0 | fel? bmi fil_fel move.l #fm_cl,a5 move.w d4,-(sp) | close move.w #62,-(sp) trap #1 addq.l #4,sp tst.l d0 | fel? bmi fil_fel *no packing please! * move.l pi1_adr,a0 | adress to the packed file! * jsr ice2 | packa upp fil rts *+-F+ *| Read degas ROUTINE | *+-F+ read_pi1 move.w #0,-(sp) | 0=ls 1=skriv 3=0+1 move.l pi1_fil,-(sp) | Fil Namn att ppna move.l #fm_op,a5 move.w #61,-(sp) trap #1 addq.l #8,sp move.l d0,d4 tst.l d0 | fel? bmi fil_fel move.l #fm_rd,a5 move.l pi1_adr,-(sp) | adress att lsa till move.l #2,-(sp) | Hur mnga bytes? move.w d4,-(sp) | Vilket filnummer? move.w #63,-(sp) | Ls fil trap #1 | lea 12(sp),sp | Korrigera stacken tst.l d0 | fel? bmi fil_fel move.l pi1_pal,-(sp) | adress att lsa till move.l #32,-(sp) | Hur mnga bytes? move.w d4,-(sp) | Vilket filnummer? move.w #63,-(sp) | Ls fil trap #1 | lea 12(sp),sp | Korrigera stacken tst.l d0 | fel? bmi fil_fel move.l pi1_adr,-(sp) | adress att lsa till move.l #32000,-(sp) | Hur mnga bytes? move.w d4,-(sp) | Vilket filnummer? move.w #63,-(sp) | Ls fil trap #1 | lea 12(sp),sp | Korrigera stacken tst.l d0 | fel? bmi fil_fel move.l #fm_cl,a5 move.w d4,-(sp) | close move.w #62,-(sp) trap #1 addq.l #4,sp tst.l d0 | fel? bmi fil_fel rts *+-#-#+ *| File error handler | *+-F+ fil_fel jsr super jsr rest_regs jsr user move.l a5,-(sp) | skriv ut fel meddelande move.w #9,-(sp) trap #1 addq.l #6,sp move.l pi1_fil,-(sp) | skriv ut fil namn move.w #9,-(sp) trap #1 addq.l #6,sp move.l newline,-(sp) | skriv ut ny rad move.w #9,-(sp) trap #1 addq.l #6,sp jsr wait | vnta knapp p tryckning addq.l #4,sp | remove jsr anrop till read_pi1 jsr super | must be in super bra not_all_end | avsluta snyggt *+-F+ *| File loading - data and bss area | *+-F+ section data even newline dc.b 13,10,0 even fm_op dc.b 'Kan ej ppna fil!',13,10,0 even fm_rd dc.b 'Kan ej lsa fil!',13,10,0 even fm_cl dc.b 'Kan ej stnga fil!',13,10,0 even fm_pws dc.b 'Ffirst kan ej hitta fil!',13,10,0 even section text *I * * * * * Text and Point table routines * * * *CBL * *I *+-F+ *| Init routine for scroller | *+-F+ Init_scroller move.l a0,-(sp) | P-Reg *init screen scroller move.l #BD_SL,a0 | blit data move.l #poangtavla+168*3,BD_src(a0) | source move.l #poangtavla+168*3-8,BD_dst(a0) | destination *init text blitter move.l #text1,TextAdr | Starta med text1 move.w #0,TextLP | Nolla text pekaren move.b #0,TextSk | Nolla text skew move.l #BD_TW,a0 | hmta pekare move.l #poangtavla+168*4-8,BD_dst(a0) | skriv dest adr alltid samma move.l (sp)+,a0 | R-Reg rts *+-F+ *| Scroller | *+-F+ scroll_left movem.l d0-a0,-(sp) | Preg *** reset ycount move.l #BD_SL,a0 | blit data move.w #15,BD_ycnt(a0) *** do the blit movem.l (a0),d0-d7 | Get data movem.l d0-d7,$FF8A20 | Set and Start Blit ***all done movem.l (sp)+,d0-a0 | Rreg rts *+-F+ *| New Letter | *+-F+ scroll_new movem.l d0-a3,-(sp) | P-Reg move.b TextSk,d6 | get text skew value tst.b d6 | Ny bokstav? beq .new_letter | Yes! *** Cont. on old letter .no_cont sub.b #2,TextSk | decrease skew move.l #BD_TW,a0 | blit text data move.b RealSk,d1 sub.b #2,RealSk | decrease skew ext.w d1 move.w #$f,d0 | set Mask lsr.w d1,d0 | Shift right move.w d0,BD_m1(a0) | endmsk1 Left end mask move.w #$f,BD_m2(a0) | endmsk2 Mid mask move.w #$0,BD_m3(a0) | endmsk3 Right end mask move.w #15,BD_ycnt(a0) move.b d1,BD_skew(a0) *blit move.l #$FF8a00,a1 REPT 16 move.w #$0003,(a1)+ ENDR movem.l (a0),d0-d7 | Get data movem.l d0-d7,$FF8A20 | Set and Start Blit movem.l (sp)+,d0-a3 | R-Reg rts *** Calc new letter .new_letter add.w #1,TextLP | ka textpekaren move.w TextLP,d7 | get text pointer moveq.l #0,d0 | nolla rknaren move.l #l_index,a0 | peka p index move.l TextAdr,a2 | Get text pointer * get letter in text move.b 0(a2,d7.w),d1 | Get letter from text cmp.b #0,d1 | end of textstring? bne .cont1 *yes -> zero registers move.l #text1,TextAdr | Starta om text1 move.w #0,TextLP | Nolla text pekaren bra .new_letter | try again *no -> continue .cont1 move.b 0(a0,d0.w),d2 | get index letter cmp.b #0,d2 | end of indexlist? beq .new_letter | try again *no .cont2 cmp.b d1,d2 | search in indexlist beq .letter_hit | on hit jump addq.w #1,d0 | else add indexpointer bra .cont1 | next loop *gotcha! .letter_hit move.w d0,d2 | d2=index move.l #l_spacing,a3 | pointer to spacing move.b 1(a3,d2.w),TextSk | get space value ext.l d0 divu #20,d0 | d0=index move.w d0,d1 | d1=y pos swap d0 mulu #16*160,d1 | d1=y*16*168 bytes mulu #8,d0 | d0=x pos add.l d1,d0 | d0 offset move.l #BD_TW,a0 | blit text data move.l #alpha+34,a1 add.l d0,a1 move.l a1,BD_src(a0) | source move.b #15,RealSk | reset skew movem.l (sp)+,d0-a3 | R-Reg rts *I * * * * * Color Fader routines * * * *CBL * *I *+-F+ *| Adaption of Empa's Fader routine | *+-F+ fade move.l fadefrom,a0 movem.l (a0),d0-d7 movem.l d0-d7,fadetrash move.w #32-1,d7 .fadeloop move.w d7,-(sp) move.l fadeto,a1 lea fadetrash,a0 move.w #16-1,d0 jsr empafade movem.l fadetrash,d0-d7 movem.l d0-d7,$f8240.w jsr vsync move.w (sp)+,d7 dbf d7,.fadeloop rts *+-F+ *| Adaption of Empa's Fader routine vbi | *+-F+ fade_spec move.l fadefrom,a0 movem.l (a0),d0-d7 movem.l d0-d7,fadetrash move.w #32-1,d7 .fadeloop move.w d7,-(sp) move.l fadeto,a1 lea fadetrash,a0 move.w #16-1,d0 jsr empafade movem.l fadetrash,d0-d7 movem.l d0-d7,$f8240.w .loop1 cmp.b #0,vbi_flag | check for vsync beq.s .loop1 * move.b #0,vbi_flag | zero vbi flag *.loop2 cmp.b #0,vbi_flag | check for vsync * beq.s .loop2 * move.b #0,vbi_flag | zero vbi flag *.loop3 cmp.b #0,vbi_flag | check for vsync * beq.s .loop3 move.b #0,vbi_flag | zero vbi flag move.w (sp)+,d7 dbf d7,.fadeloop rts *+-F+ *| Adaption of Empa's Fader routine vbi - data and bss area | *+-F+ section bss fadefrom ds.l 1 fadeto ds.l 1 fadetrash ds.w 16 section text *+-F+ *| Empa's Fader routine | *+-F+ * a0=adr till start pal * a1=adr till slut pal * d0=antal frger minus 1 * * Av Empa... * empafade lea trans_lista,a2 ; transfer list lea col_list,a3 .fade_lp move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$f00,d1 ; just r and.w #$f00,d2 ror.w #8,d1 ; to lower nibble ror.w #8,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal1 cmp.w d3,d4 blt.s .nert1 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg bra.s .green .nert1 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #8,d3 move.w d3,d7 bra.s .green .equal1 move.w 0(a3,d3.w),d3 ; new color rol.w #8,d3 move.w d3,d7 ; total color data reg .green move.w (a0),d1 ; color from move.w (a1),d2 ; color to and.w #$0f0,d1 ; just g and.w #$0f0,d2 ror.w #4,d1 ; to lower nibble ror.w #4,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal2 cmp.w d3,d4 blt.s .nert2 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg bra.s .blue .nert2 sub.w #2,d3 move.w 0(a3,d3.w),d3 rol.w #4,d3 or.w d3,d7 bra.s .blue .equal2 move.w 0(a3,d3.w),d3 ; new color rol.w #4,d3 or.w d3,d7 ; total color data reg .blue move.w (a0),d1 ; color from move.w (a1)+,d2 ; color to and.w #$00f,d1 ; just b and.w #$00f,d2 add.w d1,d1 add.w d2,d2 move.w 0(a2,d1.w),d3 move.w 0(a2,d2.w),d4 cmp.w d3,d4 ; if eq goto green beq.s .equal3 cmp.w d3,d4 blt.s .nert3 add.w #2,d3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg bra.s .save_col .nert3 sub.w #2,d3 move.w 0(a3,d3.w),d3 or.w d3,d7 bra.s .save_col .equal3 move.w 0(a3,d3.w),d3 ; new color or.w d3,d7 ; total color data reg .save_col move.w d7,(a0)+ ; save color dbf d0,.fade_lp rts *+-F+ *| Empa's Fader routine data and bss area | *+-F+ section data trans_lista dc.w 1*2,3*2,5*2,7*2,9*2,11*2,13*2,15*2,2*2,4*2,6*2,8*2,10*2,12*2,14*2,16*2 col_list dc.w $0,$0,$8,$1,$9,$2,$a,$3,$b,$4,$c,$5,$d,$6,$e,$7,$f section text *I * * * * * Kalle's Routines for calculation of ball * * * * * *I prekalle lea perif_grad,a1 move.w #80,d0 | BRJA P 0,8 GRADER FR ; | ATT MOTVERKA ATT BOLLEN KAN ; | BALANSERA VID 270 GRADER, ; | S HR: ; | () ; | /\ ; | / \ move.w #32-1,d1 .sina moveq #0,d2 move.w d0,d2 divu #100,d2 add.w d2,d2 cmp.w #2*360,d2 blt.s .no_flo sub.w #2*360,d2 .no_flo move.w d2,(a1)+ add.w #1125,d0 | LGG P 11,25 GRADER dbf d1,.sina * big_to_small * UTNYTTJA LITE "DTT" UTRYMME I SLUTET AV SINUSLISTAN TILL ATT * FRVARA EN MINDRE SINUSLISTA (ANVNDS I SLUTET AV BOLLRUTTEN * FR ATT SLIPPA MUL:A MED 10) lea sinlist,a0 lea sinlist+2*4500,a1 move.w #450-1,d1 .small move.w (a0),(a1)+ lea 2*10(a0),a0 dbf d1,.small * * DENNA RUTT SKAPAR EN LISTA MED RTTER FR TAL UPP TILL UNG. 8500 fixarot lea rotlist,a0 move.b #0,(a0)+ moveq #1,d0 moveq #2-1,d2 .fixa move.w d2,d1 .rot move.b d0,(a0)+ dbf d1,.rot add.w #2,d2 addq.w #1,d0 cmp.w #93,d0 bne.s .fixa * fixaflack * DENNA RUTIN FYLLER I DE RTTA NEG:ADE VRDENA * SAMT LGGER P VINKLAR I FLACKLISTAN EFTER BEHAG lea flacklist-2*90,a0 lea flacklist+2*90,a1 move.w #90-1,d1 .fix0 move.w (a0)+,d0 neg.w d0 move.w d0,-(a1) dbf d1,.fix0 lea flacklist-2*180,a0 move.w #90-1,d1 .fix1 add.w #FLACKADD,(a0)+ dbf d1,.fix1 lea flacklist+2*90,a0 move.w #90-1,d1 .fix2 sub.w #FLACKADD,(a0)+ dbf d1,.fix2 rts * _F *| Kolla periferipunkt | *|_F| kalle * VARSAD OCH VARSAD+4 PEKAR P VARIABELLISTOR. BYTER PLATS VARJE VBL * (IFALL MAN SKULLE VILJA SPARA NGOT OCH BEHLLA DET "VER NSTA VBL") * (ANVNDS INTE N S LNGE) movem.l varsad,d0-d1 exg d0,d1 movem.l d0-d1,varsad * RELLIST R EN LISTA SOM "GR RUNT" VAR TREDJE VBL I VILKEN VRDEN * FR RELATIV X- OCH Y-NDRING * P BOLLEN SAMT TRFF ELLER INTE LGGS IN FR VARJE UPPDATERING. * ANVNDS SENARE FR ATT KOLLA OM BOLLEN HAR FASTNAT (NDRINGEN FR * LITEN ELLER ANTALET TRFF VER TRE VBL FR STORT). * LISTCOUNT R OFFSET TILL RELLIST. lea rellist,a5 add.w listcount,a5 add.w #2*ppvbl,listcount | PPVBL R ANTAL UPDATES/VBL cmp.w #3*2*ppvbl,listcount blt.s .no_res_listcount clr.w listcount .no_res_listcount moveq #ppvbl-1,d7 * next_update tst.w pathflag beq no_path move.w pathtemp,d2 move.w hast,d0 tst.w snedflag | R FRFLYTTNINGEN 45 GRADER? beq.s .no_div_hast lsl.w #5,d0 ext.l d0 divu #45,d0 | 32/45 R UNG. 1/SQRT(2) .no_div_hast add.w d0,d2 move.w d2,pathtemp cmp.w #256,d2 blt .no_inc and.w #$ff00,d2 sub.w d2,pathtemp lsr.w #8,d2 subq.w #1,d2 | FR ATT HA SOM DBF-RKNARE move.l pathad,a0 .fler moveq #0,d0 moveq #0,d1 move.b (a0)+,d0 cmp.b #7,d0 bne.s .no_end clr.w pathflag clr.w pathtemp move.w hast,yhast clr.w xhast move.l x,korr dbf d7,next_update rts .no_end move.b d0,d1 lsr.b #4,d0 | X I D0, Y I D1 and.b #$0f,d1 cmp.b #$f,d0 bne.s .no_minus_d0 move.w #-1,d0 .no_minus_d0 cmp.b #$f,d1 bne.s .no_minus_d1 move.w #-1,d1 .no_minus_d1 add.w d0,x add.w d1,y move.w #0,snedflag | ANVNDS TILL ATT MINSKA HASTIGHETEN ; | MED ROTEN UR 2 OM BOLLEN GR 45 GRADER tst.w d0 beq.s .no_sned tst.w d1 beq.s .no_sned move.w #1,snedflag .no_sned move.w #0,uppflag tst.w d1 bpl.s .no_uppt move.w #1,uppflag .no_uppt dbf d2,.fler move.l a0,pathad tst.w d1 beq.s .bara_friktion | INGEN G OM Y INTE FLYTTAR SIG add.w #g,gtemp cmp.w #256,gtemp blt.s .no_inc move.w gtemp,d0 lsr.w #8,d0 tst.w uppflag beq.s .no_upp sub.w d0,hast bpl.s .ok move.w #0,hast bra.s .ok .no_upp add.w d0,hast .ok lsl.w #8,d0 sub.w d0,gtemp .bara_friktion add.w #1,under cmp.w #UNDERLAG,under blt.s .no_frikt clr.w under moveq #0,d0 move.w hast,d0 divu #14,d0 sub.w d0,hast .no_frikt .no_inc cmp.w #vmax,hast ble.s .no_flo_hast move.w #vmax,hast .no_flo_hast dbf d7,next_update rts no_path * HR LGGS G P OCH FRIKTION DRAS AV * hast_change add.w #g,gtemp | G ADDERAS TILL ; | Y-HASTIGHETEN. cmp.w #-100,yhast | MINSKA G LITE OM MAN ; | JUST SKJUTIT IVG KULAN bge.s .no_fusk move.w yhast,d0 neg.w d0 sub.w #100,d0 cmp.w #3*g/4,d0 blt.s .no_restrict move.w #3*g/4,d0 .no_restrict sub.w d0,gtemp .no_fusk cmp.w #256,gtemp blt.s .no_inc move.w gtemp,d0 lsr.w #8,d0 add.w d0,yhast lsl.w #8,d0 sub.w d0,gtemp .no_inc friktion add.w #1,under cmp.w #UNDERLAG,under blt.s .no_frikt clr.w under move.w xhast,d0 ext.l d0 divs #38,d0 sub.w d0,xhast move.w yhast,d0 ext.l d0 divs #30,d0 sub.w d0,yhast .no_frikt * TRFFKOLL * kolla_trff move.w x,fixvars | FR ATT SEDAN KUNNA RKNA UT move.w y,fixvars+2 | RELATIVA FRFLYTTNINGEN lea matris,a0 | ADRESS TILL MATRISEN move.w x,d0 lsr.w d0 | DEN NYA FINA NOGGRANNHETEN ; | (2*2 SKRMPIXELS/MATRISELEMENT) add.w d0,a0 | LGG P X move.w y,d0 lsr.w d0 | DEN NYA FINA NOGGRANNHETEN ; | GR SIG PMIND IGEN mulu #168,d0 add.l d0,a0 | LGG P Y moveq #0,d3 | HLLER REDA P ANTAL POS. UTSLAG moveq #0,d5 | TALET HR TALAR OM VILKEN PUNKT ; | SOM TRFFATS lea periferi,a1 | OFFS.LISTAN FR PERIFERIPUNKTERNA lea trfflista,a2 | S HR LIGGER DET TILL: FRUT ; | RKNADE VI FRAM PUNKTEN SOM ; | BETECKNADE ETT GENOMSNITT AV ; | ALLA TRFFADE PUNKTER. NU MSTE ; | PUNKTEN VI ANVNDER DESSUTOM VARA ; | EN "TRFFPUNKT", EFTERSOM VI SKA ; | KOLLA AV PUNKTENS EGENSKAPER MOT ; | MATRISEN! DENNA LISTA R ALLTS ; | TILL FR ATT LAGRA DE TRFFADE ; | PUNKTERNAS OFFSET move.w #20-1,d2 | ANTAL PUNKTER I PERIFERIN more_dots move.w (a1,d5.w),d1 | d5 = rknare cmp.b #32,(a0,d1.w) | MINDRE N 32 = MATERIAL 0 blo.s no_mat_dot move.w d5,(a2)+ | ORDNINGSTAL IN I LISTAN addq.w #1,d3 | RKNARE FR ANTAL MAT_DOT no_mat_dot addq.w #2,d5 | 0 FRSTA, 2 ANDRA OSV. dbf d2,more_dots tst.w d3 beq no_hit | R TRFFRKNAREN NOLL SKA ; | FRSTS NO_HIT UTFRAS lea trfflista,a2 bclr #0,d3 | D3 INNEHLLER ANTAL TRFFADE ; | PUNKTER. ANVNDER VI DET TALET ; | SOM WORDOFFSET FR VI ALLTS ; | PUNKTEN I MITTEN AV ALLA PUNKTER. move.w (a2,d3.w),d5 | HR FR VI UT OFFSETEN TILL ; | PERIFERILISTAN SOM INNEHLLER ; | MATRISOFFSETER.. move.w (a1,d5.w),d1 | HR FR VI D UT MATRISOFFSETEN ; | UR PERIFERILISTAN... moveq #0,d4 moveq #0,d5 move.b (a0,d1.w),d4 | OCH HR FR VI NTLIGEN UT VRDET ; | P PUNKTEN. LTT SOM EN PLTT! moveq #0,d0 move.b d4,d0 and.b #%0001,d4 | VINKELN I D4 and.b #%1110,d0 lsr.b #5,d0 move.w d0,mater | MATERIALET I MATER cmp.w #2,d0 beq mater_2 cmp.w #5,d0 beq mater_5 cmp.w #6,d0 beq mater_6 cmp.w #7,d0 beq mater_7 bra hit ** mater_2 * BERKNA BOLLENS RRELSEVINKEL moveq #0,d3 | KVADRANTKOLLARE (X- OCH Y- move.w xhast,d5 | HASTIGHETERNA MSTE GRAS move.w yhast,d6 | POSITIVA INNAN VI BRJAR tst.w d5 bpl.s .no_neg_x or.w #2,d3 neg.w d5 .no_neg_x cmp.w #4,d5 bge.s .no_zero_x moveq #4,d5 | FR JU INTE DELA MED NOLL! .no_zero_x tst.w d6 bpl.s .no_neg_y or.w #4,d3 neg.w d6 .no_neg_y cmp.w #4,d6 bge.s .no_zero_y moveq #4,d6 | FR JU INTE DELA MED NOLL! .no_zero_y move.w d5,d0 | NU SKA VI VARA RDDA OM DE FINA move.w d6,d1 | POSITIVA VRDEN VI FTT FRAM lea kvadrantoffs,a0 move.w (a0,d3.w),d2 | GRADER ATT LGGA P BEROENDE P KVADRANT cmp.w #4,d3 | FRSTA KVADRANTEN? bne.s .no_kvad1 exg d0,d1 | D SKA DET VARA TAN(Y/X) I STLLET! bra.s .no_kvad3 .no_kvad1 cmp.w #2,d3 | TREDJE KVADRANTEN? bne.s .no_kvad3 exg d0,d1 .no_kvad3 lea atanlist,a0 | LISTA MED ARCTANGENSVRDEN ext.l d0 | FR ATT TA REDA P VINKELN lsl.l #8,d0 divu d1,d0 | TANGENS=MOTSTENDE/NRLIGGANDE cmp.w #256*50,d0 | FR STORT VRDE? (VI LIGGER D blt.s .no_flo | ND P UNG. 89 GRADER) move.w #256*50-1,d0 .no_flo move.b (a0,d0.w),d0 | VINKELN (JA, BYTE!) ext.w d0 add.w d0,d0 | PGA WORD-OFFSET add.w d2,d0 | KVADRANTJUSTERING move.w d0,d3 * HR BERKNAS BOLLENS FART move.w d5,d1 move.w d6,d2 mulu d1,d1 mulu d2,d2 add.l d1,d2 lsr.l #6,d2 | DELA MED 64, ROTLISTAN R JU BEGRNSAD. lea rotlist,a0 | HOPPAS ATT NOGGRANNHETEN RCKER... move.b (a0,d2.w),d1 ext.w d1 lsl.w #3,d1 | GGR 8 (DET RIKTIG(A VRDET TILLBAKA ; | FRN NEDSHIFTNINGEN FRUT) move.w d1,hast cmp.w #70,hast | BOLLEN MSTE HA EN VISS HASTIGHET ; | FR ATT KLARA SIG RUNT I SKENAN blt no_hit * HR KOLLAS OM INFALLSVINKELN STMMER S PASS ATT BOLLEN * SKA G IN I TRDSTYRNINGEN lea pathvinks,a0 move.w d4,d0 | VINKELDELEN AV MATRISPUNKTEN (0-31) add.w d0,d0 | LONG-OFFSET add.w d0,d0 cmp.w (a0,d0.w),d3 | BOLLENS VINKEL FR LITEN? blt no_hit cmp.w 2(a0,d0.w),d3 | FR STOR? bgt no_hit lea pathadlist,a0 move.l (a0,d0.w),a0 addq.l #2,a0 | HOPPA VER FRSTA WORDET (LISTANS LNGD) move.w #1,pathflag | SGER TILL ATT BOLLEN NU ; | SKA TRDSTYRAS move.w (a0)+,d0 subq.w #8,d0 move.w d0,x move.w (a0)+,d0 subq.w #8,d0 move.w d0,y cmp.w #vmax,hast ble.s .no_flo_hast move.w #vmax,hast .no_flo_hast moveq #0,d0 move.w hast,d0 add.w d0,d0 add.w d0,d0 divu #5,d0 | Fr att minska ner hastigheten ; | vid ingng i rnnor move.w d0,hast move.l a0,pathad | ADRESS TILL TRDLISTAN rts ** mater_5 asr.w xhast asr.w yhast bra hit ** mater_6 bra no_hit ** mater_7 bra hit * no_hit move.w #0,6*2*ppvbl(a5) | INGEN TRFF move.w x,korr | korr is back and kicking! move.w y,korr+2 add.w #1,nohitcount | ANVNDS SENARE I STUCKTEST, ; | FR ATT KOLLA OM BOLLEN ; | SITTER FAST (NOLLAS VID TRFF) bra check_hast_flow | x + y berkningar * _G *| OM TRFF SKETT SKA BOLLEN INTE FLYTTAS | *| (FR INTE SMLTA SAMMAN MED MATERIALET) | *| LGG TILLBAKA GAMLA KOORDINATER | *|_F| * * hit move.w #1,6*2*ppvbl(a5) | TRFF clr.w nohitcount * _G *| LTOM OSS NU RKNA UT VINKELN FR DET EMOTSTTTA MATERIALETS NORMAL! | *| | *| IN: D4.w Vinkel 0-31 | *| | *| UT: D4.w Normalen | *| A6.w Normalen spara fr studsberkning | *|_F| * normal_calc add.w d4,d4 | PGA WORD lea perif_grad,a0 move.w (a0,d4.w),d4 | TA-DAAA! move.w d4,a6 | spara fr studsberkning move.w d4,normal * _G *| BERKNINGAR FR BOLLENS RRELSEVINKEL (INFALLSVINKEL): | *|_F| * infall_calc moveq #0,d3 | KVADRANTKOLLARE (X- OCH Y- move.w xhast,d5 | HASTIGHETERNA MSTE GRAS move.w yhast,d6 | POSITIVA INNAN VI BRJAR ; | RKNA VINKLAR). D3 KOMMER ; | ATT INNEHLLA OFFSETEN TILL ; | EN LISTA (KVADRANTOFFS) SOM ; | ANGER HUR MNGA GRADER SOM ; | SKA LGGAS P BEROENDE P ; | VILKEN KVADRANT VINKELN ; | LIGGER I. tst.w d5 bpl.s .no_neg_x or.w #2,d3 neg.w d5 .no_neg_x cmp.w #4,d5 bge.s .no_zero_x moveq #4,d5 | FR JU INTE DELA MED NOLL! .no_zero_x tst.w d6 bpl.s .no_neg_y or.w #4,d3 neg.w d6 .no_neg_y cmp.w #4,d6 bge.s .no_zero_y moveq #4,d6 | FR JU INTE DELA MED NOLL! .no_zero_y move.w d5,d0 | NU SKA VI VARA RDDA OM DE FINA move.w d6,d1 | POSITIVA VRDEN VI FTT FRAM lea kvadrantoffs,a0 move.w (a0,d3.w),d2 | GRADER ATT LGGA P BEROENDE P KVADRANT cmp.w #4,d3 | FRSTA KVADRANTEN? bne.s .no_kvad1 exg d0,d1 | D SKA DET VARA TAN(Y/X) I STLLET! bra.s .no_kvad3 .no_kvad1 cmp.w #2,d3 | TREDJE KVADRANTEN? bne.s .no_kvad3 exg d0,d1 .no_kvad3 lea atanlist,a0 | LISTA MED ARCTANGENSVRDEN ext.l d0 | FR ATT TA REDA P VINKELN lsl.l #8,d0 divu d1,d0 | TANGENS=MOTSTENDE/NRLIGGANDE cmp.w #256*50,d0 | FR STORT VRDE? (VI LIGGER D blt.s .no_flo | ND P UNG. 89 GRADER) move.w #256*50-1,d0 .no_flo move.b (a0,d0.w),d0 | VINKELN (JA, BYTE!) ext.w d0 add.w d0,d0 | PGA WORD-OFFSET add.w d2,d0 | KVADRANTJUSTERING * OM SKILLNADEN MELLAN INFALLSVINKELN OCH NORMALEN R *MINDRE* N * 90 GRADER R STUDSEN ONORMAL (!) OCH SKA IGNORERAS move.w d0,d1 sub.w normal,d1 bpl.s .plus1 add.w #2*360,d1 .plus1 cmp.w #2*90,d1 bge.s .no_error1 * move.w #$0f0,$ff8240 bra check_hast_flow .no_error1 cmp.w #2*270,d1 ble.s .no_error2 * move.w #$f00,$ff8240 bra check_hast_flow .no_error2 move.w normal,c_normal | FRST NU KAN VI VARA SKRA ; | P ATT NORMALEN R KORREKT * HR FLYTTAR VI UT BOLLEN EFTER NORMALEN move.w d4,d1 ext.l d1 divu #90,d1 lsl.w #2,d1 lea frflytt,a0 move.w (a0,d1.w),d2 add.w d2,x move.w 2(a0,d1.w),d2 add.w d2,y * DET KANSKE BR NMNAS ATT ALLA VINKLAR REDAN R UPPSHIFTADE ETT * STEG I ALLA BERKNINGAR, D DE OFTA ANVNDS SOM OFFSETER TILL * LISTOR BESTENDE AV VRDEN I WORD-STORLEK. * _G *| NU RKNAR VI UT RESULTANTVEKTORNS STORLEK (HASTIGHETEN). | *| MED HJLP AV PYTTHAN FRSTS. | *| | *| IN: D5.w ABS(xhast) | *| D6.w ABS(yhast) | *| | *| UT: D1.w storleken p hastigheten | *|_F| * hast_calc move.w d5,d1 | ABSOLUTVRDET AV XHAST move.w d6,d2 | ABSOLUTVRDET AV YHAST mulu d1,d1 mulu d2,d2 add.l d1,d2 lsr.l #6,d2 | DELA MED 64, ROTLISTAN R JU BEGRNSAD. lea rotlist,a0 | HOPPAS ATT NOGGRANNHETEN RCKER... move.b (a0,d2.w),d1 ext.w d1 * move.w a6,d3 * sub.w d4,d3 | normalen-reflekt * tst.w d3 | neg? * bpl .naneg * neg.w d3 | ABS(diff) *.naneg cmp.w #50*2,d3 | >50 = >50gr diff n<->r * ble .no_elast lsl.w #3,d1 | GGR 8 (DET RIKTIGA VRDET TILLBAKA ; | FRN NEDSHIFTNINGEN FRUT) *.no_elast * tst.w d1 * bpl.s .no_minus * moveq #0,d1 *.no_minus move.w d1,hast | HASTIGHETEN SPARAS FR ; | EVENTUELL OMRKNING ; | (OM BOLLEN HAR FASTNAT) * _G *| NU HAR VI INFALLSVINKELN FR BOLLEN OCH NORMALVINKELN FR MATERIALET.| *| ENLIGT FORMELN 2*N-i-180 (ALLDELES HEMMASNICKRAD!) RKNAR VI UT | *| VILKEN VINKEL BOLLEN KOMMER ATT HA EFTER REFLEKTION. | *| | *| IN: D0.w Infallsvinkel | *| D4.w Normalen | *| | *| UT: D4.w Reflektionsvinkel | *|_F| * vink_calc add.w d4,d4 | 2*N sub.w d0,d4 | -i sub.w #2*180,d4 | -180 * FLJANDE RADER KORRIGERAR VINKELN S ATT DEN LIGGER * MELLAN 0 OCH 359 GRADER. tst.w d4 bpl.s .nxt add.w #2*360,d4 .nxt tst.w d4 bpl.s .no_minus add.w #2*360,d4 .no_minus cmp.w #2*360,d4 blt.s .no_flo sub.w #2*360,d4 .no_flo move.w d4,reflekt move.w d4,d0 sub.w normal,d0 tst.w d0 bpl.s .no_minus2 add.w #2*360,d0 .no_minus2 cmp.w #2*180,d0 blt.s .no_sub sub.w #2*360,d0 .no_sub move.w d0,diff * D0 STRCKER SIG NU FRN -2*180 TILL 2*179 lea flacklist,a0 add.w (a0,d0.w),d0 | FLACKA UT SKILLNADEN .cont * DET BLIR EN HIMLA MASSA KOLLAR OM VINKELN LIGGER UTANFR GRNSERNA * 0 OCH 2*360 GRADER, MEN DET MSTE BLI S... screw_u lea sinlist+2*(4500+360),a0 | LILLA SINUSLISTAN move.w hast,d2 | HASTIGHETEN GNGER muls (a0,d0.w),d2 | SINUS FR VINKELN asr.l #7,d2 | BLIR SKRUVEN asr.l #7,d2 move.w d2,d3 sub.w skruv,d3 | SKILLNAD MOT GAMLA SKRUVEN bpl.s .plus2 neg.w d3 .plus2 * D3 R NU MAX CA 400 add.w #930,d3 mulu #900,d1 divu d3,d1 | FR NOLL SKRUVSKILLNAD ; | KOMMER HASTIGHETEN INTE ; | ATT MINSKAS S MYCKET * HR FLJER VINKELOMRKNINGAR BEROENDE P SKRUV * D0 INNEHLLER VINKELSKILLNAD MELLAN NORMAL OCH REFLEKTION add.w #1100,d3 tst.w d0 bmi.s .minus4 neg.w d0 | VINKELN "VNDS", T.EX OM DEN R add.w #2*90,d0 | 87 GRADER BLIR RESULTATET 3 GRADER mulu #2000,d0 divu d3,d0 neg.w d0 add.w #2*90,d0 bra.s .hupp .minus4 neg.w d0 sub.w #2*90,d0 muls #2000,d0 divs d3,d0 neg.w d0 sub.w #2*90,d0 .hupp * NU HAR VI SKRUVAT SKILLNADEN (D0) add.w normal,d0 | LGG P NORMALEN IGEN tst.w d0 bpl.s .no_minus add.w #2*360,d0 bra.s .no_flo .no_minus cmp.w #2*360,d0 blt.s .no_flo sub.w #2*360,d0 .no_flo bclr #0,d0 | NU HAR VI SKERLIGEN ; | SUMPAT JMNHETEN move.w d0,d4 * HR NDRAS HASTIGHETEN OM NGON BUMPER R TRFFAD materkoll_3 cmp.w #3,mater | BUMPER? bne.s .no_3 movem.w d0-d1,-(sp) | ORKAR INTE LETA EFTER ; | FLER LEDIGA REGISTER move.l #STORBUMPER*32,d0 addq.w #1,d1 | FR INTE DELA MED 0! divu d1,d0 | D1 R HASTIGHETEN subq.w #1,d1 add.w #24,d0 | JU MER HR, DESTO MER AV ; | VINKELN BEROR P BUMPERN ; | (MSTE BLI MINST 32) move.w diff,d1 lsl.w #5,d1 ext.l d1 divs d0,d1 add.w nTormal,d1 move.w d1,d4 bpl.s .no_minus add.w #2*360,d4 bra.s .no_flo .no_minus cmp.w #2*360,d4 blt.s .no_flo sub.w #2*360,d4 .no_flo bclr #0,d4 move.w d4,reflekt movem.w (sp)+,d0-d1 cmp.w #STORBUMPER,d1 bge.s .no_3 move.w #STORBUMPER,d1 .no_3 materkoll_4 cmp.w #4,mater | SVAG BUMPER? bne.s .no_4 movem.w d0-d1,-(sp) | ORKAR INTE LETA EFTER ; | FLER LEDIGA REGISTER move.l #LILLBUMPER*32,d0 addq.w #1,d1 | FR INTE DELA MED 0! divu d1,d0 | D1 R HASTIGHETEN subq.w #1,d1 add.w #24,d0 | JU MER HR, DESTO MER AV ; | VINKELN BEROR P BUMPERN ; | (MSTE BLI MINST 32) move.w diff,d1 lsl.w #5,d1 ext.l d1 divs d0,d1 add.w normal,d1 move.w d1,d4 bpl.s .no_minus add.w #2*360,d4 bra.s .no_flo .no_minus cmp.w #2*360,d4 blt.s .no_flo sub.w #2*360,d4 .no_flo bclr #0,d4 move.w d4,reflekt movem.w (sp)+,d0-d1 cmp.w #LILLBUMPER,d1 bge.s .no_4 move.w #LILLBUMPER,d1 .no_4 move.w d1,hast *ECODE * (MICKES RUTIN FR ATT F EN GUL PRICK P BOLLEN BEROENDE P VINKELN) ecode1 move.l d4,-(sp) ext.l d4 lsl.l #8,d4 divu #(720*256)/84,d4 move.w d4,medel lsr.w medel move.l (sp)+,d4 * _G *| NU RKNAR VI UT KOMPOSANTVEKTORERNAS STORLEK (X- OCH Y-HAST.) | *| MED HJLP AV STORLEKEN OCH EN SINUSLISTA. | *| | *| IN: d1.w storleken p hastigheten | *| d4.w Reflektionsvinkeln | *|_F| * comp_calc lea sinlist+2*4500,a0 | DEN "LILLA" SINUSLISTAN lea 2*90(a0),a1 | COSINUS move.w (a1,d4.w),d2 move.w (a0,d4.w),d3 neg.w d3 | y vxer nedt! muls d1,d2 muls d1,d3 asr.l #7,d2 | SINUSVRDENA R FRN asr.l #7,d2 | BRJAN UPPMULTIPLICERADE asr.l #7,d3 | MED 16384 (2 UPPHJT asr.l #7,d3 | TILL 14). move.w d2,xhast move.w d3,yhast clr.w xtemp | DESSA R DET NOG BST ATT SKITA I clr.w ytemp | (INNEHLLER HASTIGHETERNA I ; | "FLYTTALSFORM", DVS UPPMULADE ; | MED 32 * HASTIGHET VERSKRIDEN? * HASTIGHETEN P X ELLER Y FR INTE VERSKRIDA 511, DVS BOLLEN FR INTE * FLYTTA SIG MER N 2 PIXELS/UPPDATERING P VARDERA DIMENSIONEN. KUNDE * DEN DET KUNDE DEN JU I PRINCIP G IN HUR LNGT SOM HELST I MATERIALET. * check_hast_flow cmp.w #vmax,xhast blt.s .no_res_xh1 move.w #vmax-1,xhast .no_res_xh1 cmp.w #-vmax,xhast bgt.s .no_res_xh2 move.w #-vmax+1,xhast .no_res_xh2 cmp.w #vmax,yhast blt.s .no_res_yh1 move.w #vmax-1,yhast .no_res_yh1 cmp.w #-vmax,yhast bgt.s .no_res_yh2 move.w #-vmax+1,yhast .no_res_yh2 * NU HLLER VI TUMMARNA FR ATT DET FUNKAR :-) * I X_BER OCH Y_BER NDRAS X- OCH Y-KOORDINATERNA FR BOLLEN BEROENDE * P HASTIGHETEN. * X-BERKNINGAR x_ber move.w xhast,d0 add.w d0,xtemp move.w xtemp,d0 cmp.w #256,d0 bge.s change_x_plus cmp.w #-256,d0 ble.s change_x_minus bra.s no_change_x change_x_plus move.w d0,d1 lsr.w #8,d0 | DELA MED 256 and.w #$00ff,d1 | REST move.w d1,xtemp | RESTEN KVARSTR I xtemp add.w d0,x | RESULTATET NDRAR x bra.s no_change_x change_x_minus ext.l d0 | MSTE DIV:A PGA DEN ELNDIGA ; | TVKOMPLEMENTERINGEN divs #256,d0 add.w d0,x | RESULTATET NDRAR x swap d0 | REST... move.w d0,xtemp | KVARSTR I xtemp... no_change_x * Y-BERKNINGAR y_ber move.w yhast,d0 add.w d0,ytemp move.w ytemp,d0 cmp.w #256,d0 bge.s change_y_plus cmp.w #-256,d0 ble.s change_y_minus bra.s no_change_y change_y_plus move.w d0,d1 lsr.w #8,d0 | DELA MED 256 and.w #$00ff,d1 | REST move.w d1,ytemp | RESTEN KVARSTR I ytemp add.w d0,y | RESULTATET NDRAR y bra.s no_change_y change_y_minus ext.l d0 | MSTE DIV:A PGA DEN ELNDIGA ; | TVKOMPLEMENTERINGEN divs #256,d0 add.w d0,y | RESULTATET NDRAR y swap d0 | REST... move.w d0,ytemp | KVARSTR I ytemp... * OM BOLLEN GR UTANFR DE TILLTNA GRNSERNA LGGER MAN TILLBAKA DEN * (NATURLIGTVIS KOMMER DETTA INTE ATT F HNDA I DEN FRDIGA RUTINEN, * MEN NU MSTE DEN FINNAS S ATT INTE SKITEN BUGGAR UR. R X ELLER Y * NEGATIVT BLIR INTE RESULTATET AV EN MULU SRSKILT TILLFREDSSTLLANDE) no_change_y cmp.w #xmin,x bge.s .no_min_x move.w #xmin,x .no_min_x cmp.w #xmax,x blt.s .no_max_x move.w #xmax,x .no_max_x cmp.w #ymin,y bge.s .no_min_y move.w #ymin,y .no_min_y cmp.w #ymax,y blt.s .no_max_y move.w #ymax,y .no_max_y tst.w stuckflag | S ATT RUTINEN HOPPAS UR beq.s .not_tested | OM DEN HAR ANVNTS FR clr.w stuckflag | NDRING VID "STUCK"-TESTEN rts .not_tested move.w x,d0 move.w y,d1 sub.w fixvars,d0 | DRA IFRN GAMLA FR ATT sub.w fixvars+2,d1 | F RELATIVA FRFLYTTNINGEN move.w d1,3*2*ppvbl(a5) | KLM IN NDRINGEN move.w d0,(a5)+ | I LISTAN dbf d7,next_update * OM DET HAR GTT MER N 12 UPPDATERINGAR SEDAN SENASTE TRFFEN * KAN BOLLEN INTE RIMLIGTVIS SITTA FAST cmp.w #12,nohitcount ble.s .cont1 rts .cont1 * NU KOLLAR VI AV RELLIST FR ATT KOLLA OM BOLLEN HAR FASTNAT * move.w #$005,$f8240.w lea rellist,a0 moveq #0,d2 move.w #2-1,d1 | X- OCH Y-FRFLYTTNING stucktest moveq #0,d0 rept 3*ppvbl add.w (a0)+,d0 endr tst.w d0 bpl.s .no_minus_d0 neg.w d0 .no_minus_d0 add.w d0,d2 * cmp.w #1,d0 * bgt.s .no_stuck1 * lsl.w $f8240.w * lsl.w $f8240.w * lsl.w $f8240.w * lsl.w $f8240.w .no_stuck1 dbf d1,stucktest cmp.w #2,d2 blt.s .stuck moveq #0,d0 rept 3*ppvbl add.w (a0)+,d0 endr cmp.w #2,d0 | ANTAL TRFF blt.s .no_stuck2 * or.w #$222,$f8240.w bra.s .stuck .no_stuck2 rts * DETTA UTFRS OM BOLLEN SITTER FAST .stuck cmp.w #5,mater | Dmpning beq.s .hupp move.b $f8209.w,d0 | Strlrknare fr fuskslump btst #1,d0 beq.s .no_korr | Ibland lgger vi tillbaka korr-vrdena move.l korr,x | Bde x och y .no_korr btst #2,d0 beq.s .hupp | Ibland flyttar vi bollen ut frn normalen * move.w c_normal,d0 | DEN SENASTE KORREKTA NORMALEN move.w normal,d0 | DEN SENASTE KORREKTA NORMALEN ext.l d0 divu #90,d0 lsl.w #2,d0 lea frflytt,a0 move.w (a0,d0.w),d1 * beq.s .hej1 * move.w #$f0f,$ff8240 *.hej1 add.w d1,x move.w 2(a0,d0.w),d1 * beq.s .hej2 * or.w #$ff0,$ff8240 *.hej2 add.w d1,y .hupp lea rellist,a0 add.w listcount,a0 moveq #0,d0 rept ppvbl move.w d0,6*2*ppvbl(a0) | INGEN TRFF move.w d0,3*2*ppvbl(a0) move.w d0,(a0)+ endr sub.l #2*ppvbl,a0 move.l #$00010001,(a0) | TILLRCKLIG FRFLYTTNING move.l #$00010001,3*2*ppvbl(a0) * move.w hast,d0 * move.w d0,d1 * lsr.w #5,d1 * sub.w d1,d0 | MINSKA HASTIGHETEN MED HAST/32 * bpl.s .plus18 * clr.w d0 *.plus18 * move.w d0,hast move.w #1,stuckflag move.w hast,d1 move.w reflekt,d4 bra ecode1 *I * * * * * Init subroutines * *CBL * *I *+-F+ *| Calc offset for boll blittering | *+-F+ *** berkna offset y*160 + int(x/16)*8 *** skew = x-int(x/16)*8 * first y d2*160 init_boll move.w y,d2 | y -> d2 ext.l d2 | .w till .l muls #168,d2 move.l d2,a3 | add screenbase,d2*128 * sedan x move.w x,d1 | x -> d1 ext.l d1 | .w till .l move.l d1,d2 | copy d1 destroyed lsr.w #4,d1 | x/16 lsl.w #3,d1 | d1 = x offset (x/16*8) add.l d1,a3 | a3=a3 + x_offset dvs. d1 lsl.w #1,d1 | x=x/16*16 sub.w d1,d2 | d2 = pixpos move.w d2,d6 | copy of d2 skew rts *I * * * Set datafield's for blitterchip * *CBL * *I *+-F+ *| Blitta boll till skrm | *+-F+ *** berkna offset y*160 + int(x/16)*8 *** skew = x-int(x/16)*8 * first y d2*160 show_ball movem.l d0-d2/a1-a6,-(sp) | P-Reg move.w y,d2 | y -> d2 muls #168,d2 move.l d2,a3 | a3 = offset * sedan x move.w x,d1 | x -> d1 ext.l d1 | .w till .l move.l d1,d2 | copy d1 destroyed lsr.w #4,d1 | x/16 lsl.w #3,d1 | d1 = x offset (x/16*8) add.l d1,a3 | a3=a3 + x_offset dvs. d1 lsl.w #1,d1 | x=x/16*16 sub.w d1,d2 | d2 = pixpos *get pointers move.l BD_PBB2p,a4 | get pointer (a4) protect ground move.l BD_RBB2p,a5 | get pointer (a5) repair *copy adress eg. get adress before owerwritten move.l BD_src(a4),BD_dst(a5) *get pointers move.l BD_BBM2p,a5 | get pointer (a5) mask move.l BD_BBS2p,a6 | get pointer (a6) sprite *** protect background from boll sprite + mask move.l bana2,a2 | destination adress add.l a3,a2 | add offset move.l a2,BD_src(a4) | a2 = destination *get pointers move.b d2,BD_skew(a5) | d2 = skew move.b d2,BD_skew(a6) | d2 = skew * calc blitter skewmask move.w #$f,d0 lsr.w d2,d0 | Shift right move.w d0,BD_m1(a5) | endmsk1 Left end mask mask move.w d0,BD_m1(a6) | endmsk1 Left end mask sprite move.w #$f,BD_m2(a5) | endmsk2 Mid mask mask move.w #$f,BD_m2(a6) | endmsk2 Mid mask sprite not.w d0 | Invert d0 move.w d0,BD_m3(a5) | endmsk3 Right end mask mask move.w d0,BD_m3(a6) | endmsk3 Right end mask sprite *** blit boll mask move.l #Sprite1,a1 | source adress lea 48*160(a1),a1 | add x+y offset move.l a1,BD_src(a5) | a1 = source move.l bana2,a2 | destination adress add.l a3,a2 | add offset move.l a2,BD_dst(a5) | a2 = destination *** blit boll move.l #Sprite1,a1 | source adress lea 0*160(a1),a1 | add x+y offset move.l a1,BD_src(a6) | a1 = source move.l bana2,a2 | destination adress add.l a3,a2 | add offset move.l a2,BD_dst(a6) | a2 = destination *** end of routine movem.l (sp)+,d0-d2/a1-a6 | R-Reg rts | end of sprite *+-F+ *| Set datafield to repair background for ball | *+-F+ *** init repair background init_rep *** Blit Restore of background jsr super | have to be in super to blit move.l BD_PBB2p,a0 | BD_PBB2p = Pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit jsr user | back to user *** set up BD_RBB move.l BD_PBB2p,a0 | BD_PBB2p = Pointer move.l BD_RBB2p,a1 move.l BD_src(a0),BD_dst(a1) | src to dst *** copy save area move.l #sapb2,a1 | copy save area 2 to 1 move.l #sapb1,a2 | 4 longwords per line move.w #16-1,d0 .loop1 move.l (a1)+,(a2)+ move.l (a1)+,(a2)+ move.l (a1)+,(a2)+ move.l (a1)+,(a2)+ dbra d0,.loop1 *** end of routine rts | end of repair *I * * * * * VBL - HBL - And other interupts * * * *CBL * *I *+-F+ *| Patch $118 - eg. IKBD_VEC | *+-F+ key1 move.b $fc02.w,key_data move.l #key2,$118.w bclr #6,$fa11.w rte key2 move.b $fc02.w,key_data+1 move.l #key3,$118.w bclr #6,$fa11.w rte key3 move.b $fc02.w,key_data+2 move.l #key4,$118.w bclr #6,$fa11.w rte key4 move.b $fc02.w,key_data+3 move.l #key5,$118.w bclr #6,$fa11.w rte key5 move.b $fc02.w,key_data+4 move.l #key6,$118.w bclr #6,$fa11.w rte key6 move.b $fc02.w,key_data+5 move.l #key7,$118.w bclr #6,$fa11.w rte key7 move.b $fc02.w,key_data+6 move.l #key8,$118.w bclr #6,$fa11.w rte key8 move.b $fc02.w,key_data+7 move.l #key9,$118.w bclr #6,$fa11.w rte key9 move.b $fc02.w,key_data+8 move.l #key10,$118.w bclr #6,$fa11.w rte key10 move.b $fc02.w,key_data+9 move.l #key11,$118.w bclr #6,$fa11.w rte key11 move.b $fc02.w,key_data+10 bclr #6,$fa11.w | clear interupt active rte *+-F+ *| Border Init - Register Save and Restore Routines | *+-F+ SET_INT MOVE.W #$2700,SR MOVE.L #HBL_UPPER,$68.W MOVE.L #VBL,$70.W MOVE.L #LO_BORDER,$120.W MOVE.B #0,$FA1B.W MOVE.B #1,$FA07.W MOVE.B #64,$FA09.W MOVE.B #64,$FA15.W BSET #0,$FA13.W MOVE.W #$2300,SR RTS S_ADD LEA S_BUFFER(PC),A0 MOVE.L $120.W,(A0)+ MOVE.L $70.W,(A0)+ MOVE.L $68.W,(A0)+ MOVE.W SR,(A0)+ MOVE.B $FA07.W,(A0)+ MOVE.B $FA09.W,(A0)+ MOVE.B $FA13.W,(A0)+ MOVE.B $FA15.W,(A0)+ MOVE.B $FA17.W,(A0)+ RTS S_SUB move.w #$2700,sr LEA S_BUFFER(PC),A0 MOVE.L (A0)+,$120.W MOVE.L (A0)+,$70.W MOVE.L (A0)+,$68.W MOVE.W (A0)+,SR MOVE.B (A0)+,$FA07.W MOVE.B (A0)+,$FA09.W MOVE.B (A0)+,$FA13.W MOVE.B (A0)+,$FA15.W MOVE.B (A0)+,$FFFFFA17.W move.w #$2300,sr RTS *+-F+ *| Vertical blank routine | *+-F+ VBL MOVE.W #$2700,SR MOVE.W #2,TOP_COUNT MOVE.B #0,$FA1B.W MOVE.L #SOON_UPPER,$120.W | frginterupt! MOVE.B #99,$FA21.W | tics MOVE.B #4,$FA1B.W MOVE.W #$2300,SR *VRIGA RUTINER P VBI:N LGGS HR *** update key matrix jsr get_key_data | update key_matrix move.l #key1,$118.w jsr set_color_interupts | calc rasters move.b #1,vbi_flag | stt vbi flagga move.w #1,$F8264.w | this two lines are move.b #0,$F8264.w | the only thing you need rte *I * * * * * IKBD - Keyboard routines * * * *CBL * *I * Get pressed keys out of key_matrix. * * * * Ex. 1 * * To check if key 1 (esc) is pressed * * simply check if byte (key_matrix+1) is * * set (1). * * Ex. 2 * * To check space test byte (key_matrix+57). * *1 get_key_data movem.l d0/a0-a1,-(sp) moveq.l #0,d0 move.l #key_data,a0 move.l #key_matrix,a1 bset #7,$fffa11 .loop move.b (a0),d0 cmp.b #-1,d0 beq.s .end bmi.s .release move.b #-1,(a0)+ rensa cell i key_data move.b #1,(a1,d0) stt cell i key_matrix bra.s .loop .release move.b #-1,(a0)+ clr.b -128(a1,d0) bra.s .loop .end bset #7,$fffa11 movem.l (sp)+,d0/a0-a1 rts * varje cell r satt till -1 om ingen data finns i den key_data dcb.b 16,-1 * om en cell r 1 r tangenten nedtryckt key_matrix dcb.b 128,0 *+-F+ *| Raster calculations | *+-F+ set_color_interupts movem.l d0-d3/a0-a4,-(sp) moveq.l #1,d2 move.w line,d0 move.l #color_tab,a0 move.l #pal_1,a1 move.l #int_1,a3 move.l #tim_b_1,a4 move.l #interupt_tab,a2 move.l 2(a0),(a1)+ .loop move.w (a0)+,d1 sub.w d0,d1 ble.s .no_color_yet cmp.w #230,d1 bpl .end cmp.w #1,d1 beq .row_1 cmp.w #228,d1 beq .row_228 bpl .row_229 move.l (a2)+,(a3)+ interupt rout move.w d1,d3 sub.w d2,d1 sub last value move.w d3,d2 move.b d1,(a4)+ timer b data move.l (a0)+,(a1)+ palette bra .loop .no_color_yet move.l (a0)+,-4(a1) first palette bra .loop .row_1 move.l #HBL_UPPER_RASTER_ON_1,$68.w move.l (a0)+,pal_row1 bra .loop .row_228 move.l (a0),pal_228 move.w #230,d1 sub.w d2,d1 sub last value sub.w #2,d1 move.b d1,(a4) move.l #RASTER_ON_ROW_228,(a3) movem.l (sp)+,d0-d3/a0-a4 rts .row_229 move.l (a0),pal_229 move.w #230,d1 sub.w d2,d1 sub last value sub.w #2,d1 move.b d1,(a4) move.l #SOON_RASTER_ON_229,(a3) movem.l (sp)+,d0-d3/a0-a4 rts .end move.w #230,d1 sub.w d2,d1 sub last value sub.w #1,d1 move.b d1,(a4) move.l #SOON_LO_BORDER,(a3) movem.l (sp)+,d0-d3/a0-a4 rts *specialfall * *rad 1 *raden innan nedre bordrutinen *raden med nedre bordrutinen *I * * * color_tab kan ha hur mnga element som helst * * versta raden r rad noll * * * * line r den versta raden som visas * * sista elementet i color_tab mste vara strre n antalet visade rader * * * * fr tillfllet s kan paletten bytas 9 ggr/skrm (inklusive start * * frg) och det r inget bekymmer att ka antalet paletter * * * * minsta avstnd mellan tv paletter r 3 scans * *CBL * *I * PALDATA * * stt in blitt-rutiner efter col_interupt_1 (den ligger alltid verst) * *I line dc.w 0 | start_line color_tab dc.w 0 | start rad fr palett dc.l color_1 | address till frgpalett .1 dc.w 50 | nsta rad mste ha hgre nummer n fregende dc.l color_2 .2 dc.w 100 dc.l color_3 .3 dc.w 150 dc.l color_4 .4 dc.w 200 dc.l color_5 .5 dc.w 250 dc.l color_6 .6 dc.w 300 dc.l color_7 .7 dc.w 350 dc.l color_8 .8 dc.w 400 dc.l color_9 .9 dc.w 450 dc.l color_10 .10 dc.w 500 dc.l color_11 .11 dc.w 550 dc.l color_12 .192 dc.w 1000 | mste vara strre n antalet rader dc.l color_1 * bild 1 dvs. pin3 color_1 dc.w $0,$0700,$0770,$0060,$0304,$0203,$0202,$0101 dc.w $0001,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_2 dc.w $0,$0700,$0770,$0060,$0304,$0203,$0202,$0101 dc.w $0001,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_3 dc.w $0,$0700,$0770,$0060,$0304,$0203,$0202,$0101 dc.w $0001,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_4 dc.w $0,$0700,$0770,$0060,$0304,$0203,$0202,$0101 dc.w $0001,$0,$0222,$0333,$0444,$0555,$0666,$0777 * bild 2 dvs. pin 2 color_5 dc.w $0,$0700,$0543,$0765,$0604,$0504,$0404,$0304 dc.w $0770,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_6 dc.w $0,$0700,$0543,$0765,$0CE2,$0504,$0404,$0304 dc.w $0770,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_7 dc.w $0,$0700,$0543,$0765,$0604,$0504,$0404,$0304 dc.w $0770,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_8 dc.w $0,$0700,$0044,$0065,$0604,$0504,$0404,$0304 dc.w $0770,$0,$0222,$0333,$0444,$0555,$0666,$0777 *bild 3 dvs. pin 1 color_9 dc.w $0,$0700,$0601,$0502,$004F,$00BF,$003F,$00AF dc.w $0304,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_10 dc.w $0,$0700,$0601,$0502,$004F,$00BF,$003F,$00AF dc.w $0304,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_11 dc.w $0,$0700,$0760,$0770,$0470,$0370,$0360,$0350 dc.w $0F90,$0,$0222,$0333,$0444,$0555,$0666,$0777 color_12 dc.w $0,$0700,$0760,$0770,$0470,$0370,$0360,$0350 dc.w $0F90,$0,$0222,$0333,$0444,$0555,$0666,$0777 interupt_tab dc.l col_interupt_1 dc.l col_interupt_2 dc.l col_interupt_3 dc.l col_interupt_4 dc.l col_interupt_5 dc.l col_interupt_6 dc.l col_interupt_7 dc.l col_interupt_8 tim_b_1 ds.b 1 tim_b_2 ds.b 1 tim_b_3 ds.b 1 tim_b_4 ds.b 1 tim_b_5 ds.b 1 tim_b_6 ds.b 1 tim_b_7 ds.b 1 tim_b_8 ds.b 1 tim_b_9 ds.b 1 tim_b_10 ds.b 1 int_1 ds.l 1 int_2 ds.l 1 int_3 ds.l 1 int_4 ds.l 1 int_5 ds.l 1 int_6 ds.l 1 int_7 ds.l 1 int_8 ds.l 1 int_9 ds.l 1 pal_1 ds.l 1 pal_2 ds.l 1 pal_3 ds.l 1 pal_4 ds.l 1 pal_5 ds.l 1 pal_6 ds.l 1 pal_7 ds.l 1 pal_8 ds.l 1 pal_9 ds.l 1 pal_228 ds.l 1 pal_229 ds.l 1 pal_row1 ds.l 1 *+-F+ *| Color interupt routines | *+-F+ col_interupt_1 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_2,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 = 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_2,$120.w move.b tim_b_2,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3 = 19 bclr #0,$fa0f | avsluta timer b move.w #$2300,sr *! * blitt-rutiner hr (1) * *! *cwp *** Blit Restore of background move.l BD_RBB1p,a0 | BD_RBB1p = Pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit .void1 *** test if Lower flippers is seen *** if true then blit lower else blit higher move.l Boffset,d0 cmp.l #168*280,d0 bls .higher move.w #$f00,$ff8240 |ERRCODE *** Blit Left Lower Flipper .lower move.l BD_LLF1p,a0 | BD_LLFp = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit *** Blit Right Lower Flipper move.l BD_RLF1p,a0 | BD_RLFp = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit bra .skip1 | skip higher blit .higher move.w #$0f0,$ff8240 |ERRCODE *** Blit Left Higher Flipper move.l BD_LHF1p,a0 | BD_LLFp = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit *** Blit Right Higher Flipper move.l BD_RHF1p,a0 | BD_RLFp = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit .skip1 *** restore registers move.w #$000,$ff8240 |ERRCODE movem.l (sp)+,d0-a1 | 2*8+3 = 19 rte col_interupt_2 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_3,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 = 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_3,$120.w move.b tim_b_3,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3 = 19 bclr #0,$fa0f | avsluta timer b move.w #$2300,sr  *! * blitt-rutiner hr (2) * *! move.w #$00d,$ff8240 *+-F+ *| Play routine for scroller | *+-F+ bsr scroll_new bsr scroll_left movem.l (sp)+,d0-a1 | 2*8+3 = 19 rte col_interupt_3 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_4,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 = 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_4,$120.w move.b tim_b_4,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3 = 19 bclr #0,$fa0f | avsluta timer b move.w #$2300,sr *! * blitt-rutiner hr (3) * *! *cwp *** Blit Protect of background move.l BD_PBB1p,a0 | BD_PBB1p = Pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit *** Test if ball is activated cmp.w #0,start_boll beq .void2 *** Blit Ball Mask move.l BD_BBM1p,a0 | BD_BBMp = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit plane 0 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #2,$ff8a24 addq.l #2,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 1 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #4,$ff8a24 addq.l #4,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 2 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #6,$ff8a24 addq.l #6,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 3 *** Blit Ball Sprite move.l BD_BBS1p,a0 | BD_BBS1p = pointer movem.l (a0),d0-d7 | 32 bytes movem.l d0-d7,$FF8A20 | Set and Start Blit plane 0 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #2,$ff8a24 addq.l #2,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 1 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #4,$ff8a24 addq.l #4,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 2 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #6,$ff8a24 addq.l #6,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 3 .void2 *** restore registers movem.l (sp)+,d0-a1 | 2*8+3 = 19 move.w #0,red_flag rte col_interupt_4 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_5,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_5,$120.w move.b tim_b_5,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_5 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_6,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_6,$120.w move.b tim_b_6,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_6 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_7,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_7,$120.w move.b tim_b_7,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_7 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_8,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_8,$120.w move.b tim_b_8,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2Y*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_8 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_9,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_9,$120.w move.b tim_b_9,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte *+-F+ *| Horisontal blank routines | *+-F+ SOON_UPPER move.w #$2100,sr | INIT REMOVAL OF UPPER BORDER dcb.w 200,$4e71 | RR EJ rte | KOMMER ALDRIG HIT HBL_UPPER SUBQ.W #1,TOP_COUNT BEQ.S .CONT RTE .CONT clr.b $fa1b.w move.l int_1,$120.w move.b tim_b_1,$fa21.w move.b #8,$fa1b.w dcb.w 92-16-5-6*8-2-2-3-3,$4E71 | KAN ANVNDAS move.l a0,-(sp) | 3 move.l pal_1,a0 | 5 move.l (a0)+,$f8240.w | 6 move.l (a0)+,$f8244.w move.l (a0)+,$f8248.w move.l (a0)+,$f824c.w move.l (a0)+,$f8250.w move.l (a0)+,$f8254.w move.l (a0)+,$f8258.w move.l (a0)+,$f825c.w move.l (sp)+,a0 | 3 MOVE.B #0,$F820A.W ADDQ.L #6,SP MOVE.B #2,$F820A.W bclr #0,$fa0f | avsluta timer b RTE HBL_UPPER_RASTER_ON_1 SUBQ.W #1,TOP_COUNT BEQ.S .CONT RTE .CONT clr.b $fa1b.w move.l int_1,$120.w move.b tim_b_1,$fa21.w move.b #8,$fa1b.w dcb.w 92-16-5-6*8-2-2-3-3,$4E71 | KAN ANVNDAS move.l a0,-(sp) | 3 nops move.l pal_1,a0 | 5 move.l (a0)+,$f8240.w | 6 move.l (a0)+,$f8244.w move.l (a0)+,$f8248.w move.l (a0)+,$f824c.w move.l (a0)+,$f8250.w move.l (a0)+,$f8254.w move.l (a0)+,$f8258.w move.l (a0)+,$f825c.w move.l (sp)+,a0 | 3 move.b #0,$F820A.W addq.l #6,sp move.b #2,$F820A.W bclr #0,$fa0f | avsluta timer b movem.l d0-a1,-(sp) | 2*10+2 22 move.l pal_row1,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 19 move.w #$8209,a0 | 3 move.l #HBL_UPPER,$68.w .loop2 move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop2 | 3 check for border .border movem.l d1-d7/a1,$f8240.w | 2*8+3 19 bclr #0,$fa0f | avsluta timer b movem.l (sp)+,d0-a1 | 2*8+3 19 rte RASTER_ON_ROW_228 ;(soon lower) movem.l d0-a1,-(sp) | 2*10+2=22 move.l pal_228,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3=19 move.w #$8209,a0 | 3 .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3=19 movem.l (sp)+,d0-a1 | 2*8+3=19 move.b #0,$FA1B.W move.l #LO_BORDER,$120.W move.b #1,$FA21.W move.b #8,$FA1B.W bset #7,$fa11.w bclr #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER move.w #$2300,SR dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT SOON_RASTER_ON_229 ;(soon lower) move.b #0,$FA1B.W move.l #RASTER_ON_229,$120.W move.b #1,$FA21.W move.b #8,$FA1B.W bset #7,$fa11.w bclr #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER move.w #$2300,sr dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT RASTER_ON_229 move.b #0,$FA1B.W | 4 bclr #7,$fa11.w dcb.w 61-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) | 9*2+2=20 move.l pal_229,a0 | 5 movem.l (a0),d0-d7 |8*2+3=19 movem.l d0-d7,$ff8240 |8*2+3=19 * 128 NOP:AR move.b #0,$F820A.W | REmove LOWER BORDER move.b #0,$FA1B.W move.b #2,$F820A.W movem.l (sp)+,d0-d7/a0 | 9*2+3 21 addq.l #6,sp move.l #Blackout,$120.W move.b #40,$FA21.W move.b #8,$FA1B.W dcb.w 68-21-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) move.l #poangtavla,-(sp) | stt bildminnes adressen move.b 1(sp),$f8205 | Video address pointer (High byte) move.b 2(sp),$f8207 | Video address pointer (Mid byte) move.b 3(sp),$f8209 | Video address pointer (Low byte) addq.l #4,sp movem.l poangpal,d0-d7 movem.l d0-d7,$ff8240 movem.l (sp)+,d0-d7/a0 bclr #0,$fa0f | 5 avsluta timer b rte SOON_LO_BORDER move.b #0,$FA1B.W move.l #LO_BORDER,$120.W move.b #1,$FA21.W move.b #8,$FA1B.W bset #7,$fa11.w bclr #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER move.w #$2300,sr dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT LO_BORDER move.b #0,$F820A.W | REmove LOWER BORDER move.b #0,$FA1B.W move.b #2,$F820A.W addq.l #6,sp move.l #Blackout,$120.W move.b #35,$FA21.W move.b #8,$FA1B.W bclr #7,$fa11.w dcb.w 68-5-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) move.l #poangtavla,-(sp) | stt bildminnes adressen move.b 1(sp),$f8205 | Video address pointer (High byte) move.b 2(sp),$f8207 | Video address pointer (Mid byte) move.b 3(sp),$f8209 | Video address pointer (Low byte) addq.l #4,sp movem.l poangpal,d0-d7 movem.l d0-d7,$ff8240 movem.l (sp)+,d0-d7/a0 bclr #0,$fa0f avsluta timer b rte Blackout move.b #0,$FA1B.W clr.l $f8240.w clr.l $f8244.w clr.l $f8248.w clr.l $f824c.w clr.l $f8250.w clr.l $f8254.w clr.l $f8258.w clr.l $f825c.w bclr #0,$fa0f avsluta timer b rte *+-F+ *| Border data and bss area | *+-F+ section data S_BUFFER DS.B 52 SAVED REGISTERS TOP_COUNT DC.W 34 section text *I * * * * * Modulspelarrutiner * * * CBL * *I section text *DATLEN EQU 40 ; Avstnd mellan VOICE1 och VOICE2 *FREQUENCY_SEED EQU 4685596 *TONES EQU 3 | mellansteg minst 1 ; Minne = TONES*36*256+22000 ; Manipulate samples r modifierad hr, clearar sista biten istllet ; fr shiftande. * Frequency_seeds * - * 4685596 > 16 kHz basfrekvens * 5602486 > 20 kHz basfrekvens * 7012352 > 25 kHz basfrekvens * Kommandon som supportras * - * 0 - Arpeggio/Normal Play * 1 - Slide up * 2 - Slide down * 3 - Tone Portamento * 4 - Vibrato * 5 - Tone Portamento + volume slide * 6 - Vibrato + volume slide * 9 - Set sample offset * A - Volume slide * B - Position jump * C - Set volume * D - Pattern break * EA - Fine volume slide up * EB - Fine volume slide down * EC - Notecut * F - Set speed *FQ EQU 50066 SECTION TEXT * INIT * jsr MAKE_FREQLIST_VALUELIST * * lea SPLBANK,a0 * jsr manipulate_samples * * lea SNGFIL,a0 ; pekare p lten * lea SPLBANK+4,a1 ; pekare p Samplingsbanken+4 * jsr init_player * * lea BUFFERT,a0 ; pekare p bufferten * jsr init_driver * move.w #$37,Jump_pos ; STARTPOSITION (0=default) * EN GNG PER VBL * jsr player * jsr MUSIKRUTINEN * AVSLUTNING * jsr MUSIKRUTINEN+8 section data MUSIKRUTINEN: incbin 'MORTICA.UMP' even SNGFIL incbin 'OBS_6.SNG' even SPLBANK incbin 'OBS_6.SBK' Section bss BUFFERT ds.b TONES*36*256+22000+2000 DS.B 10 * JINGLAR * - * Jingelposition lggs i "Jingelpos". Jingelpos r -1 nr ingen jingel * spelas. * NDRING AV SPELNINGSPOSITION * - * Positionen lggs i "Jump_pos". Jump_pos blir -1 nr positionen r * ndrad (kan bli frdrjd pga Jingel). * MATNING AV LJUDEFFEKT * - * Startpositionen lgges i MUSIKRUTINEN+92 och STOPPOSITIONEN lgges i * MUSIKRUTINEN+156. * Samplingen ska vara en 8-bitars stereosampling (1 byte data fr vnster * kanal och en byte data fr hger) i 12.5 kHz. Amplituden fr max vara * -42 till +42. * Efter en sampling ska det finnas en tom area p 500 bytes. * BRJAN AV DATAN * Section text manipulate_samples move.l 4(a0),d0 ; startpos spl1 move.l -12(a0,d0.w),d1 ; endpos splX, rcker med .w hr. adda.l d0,a0 ; pekar p brjan sub.l d0,d1 add.l #1000-1,d1 ; antal bytes moveq #8,d0 lea MUSIKRUTINEN,a1 sub.w 350(a1),d0 ; antal steg som ska skiftas. .loop bclr.b #0,(a0)+ subq.l #1,d1 bpl .loop rts init_driver lea FREQLIST,a1 moveq #0,d0 ; 3 extraareor moveq #0,d1 jsr (MUSIKRUTINEN+4) rts init_player move.l a1,SPL_BEG lea VIB_PEK,a2 lea sin,a1 moveq #7,d0 .a move.l a1,(a2)+ dbf d0,.a move.l a0,SNGFILSPEK move.b 5(a0),d0 ; kollar om det r byte/word. move.w #1,B_W cmp.b #"B",d0 beq .byte move.w #2,B_W .byte move.b 6(a0),d0 ; kollar antal stmmor move.w #4,V_AM cmp.b #"4",d0 beq .fyra move.w #8,V_AM .fyra lea 8(a0),a1 move.l a1,POS_PAT ; stller in POS_PAT pekaren. moveq #0,d0 ; stller in restartpekaren. move.b 7(a0),d0 cmpi.b #127,d0 bne .data_ok moveq #0,d0 .data_ok move.w V_AM,d1 mulu.w d1,d0 lea 8(a0,d0.w),a1 move.l a1,RES_POS ; Rknar ut restart adressen lea 8(a0),a0 .loop1 cmp.w #-8888,(a0)+ bne.s .loop1 move.l a0,PAT_BEG .loop2 cmp.w #-9999,(a0)+ bne.s .loop2 move.l a0,POL_BEG move.w #5,TEMPO move.w #0,T_DBF rts SONG_JUMP tst.w Its_saved beq .out lea MUSIKRUTINEN+12+16*4*4,a0 ; Snk volymen (tones off) moveq.l #0,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ clr.w P_DBF clr.w T_DBF move.l SNGFILSPEK,d2 add.l #8,d2 moveq.l #0,d0 move.w Jump_pos,d0 move.w V_AM,d1 mulu.w d1,d0 add.l d0,d2 move.l d2,POS_PAT move.w #-1,Jump_pos .out rts RE_INIT_SONG Retrieve_old_var lea P_DBF,a0 ; spara RKNARE & PATTERNPEKARE lea Saved_stuff,a1 move.w (a1)+,(a0)+ moveq #43-1,d0 .loop1 move.l (a1)+,(a0)+ dbf d0,.loop1 lea EFCT_J,a0 ; spara EFCT_J + VIB_PEK moveq #16-1,d0 .loop2 move.l (a1)+,(a0)+ dbf d0,.loop2 lea MUSIKRUTINEN+12,a0 ; spara FREKVENS move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4,a0 ; spara KOMM_PEK move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*2,a0 ; spara KOMM_END move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*3,a0 ; spara KOMM_SUB move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*4,a0 ; spara KOMM_VOL move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,POS_PAT move.w #-1,Its_saved ; tala om att vi har sparat, s att vi ; inte sparar igen utan att ha hmtat frst. move.w #-1,Jingle_end rts INIT_JINGLE tst.w Its_saved beq Set_new_var Save_old_var lea P_DBF,a0 ; spara RKNARE & PATTERNPEKARE lea Saved_stuff,a1 move.w (a0)+,(a1)+ moveq #43-1,d0 .loop1 move.l (a0)+,(a1)+ dbf d0,.loop1 lea EFCT_J,a0 ; spara EFCT_J + VIB_PEK moveq #16-1,d0 .loop2 move.l (a0)+,(a1)+ dbf d0,.loop2 lea MUSIKRUTINEN+12,a0 ; spara FREKVENS move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4,a0 ; spara KOMM_PEK move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*2,a0 ; spara KOMM_END move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*3,a0 ; spara KOMM_SUB move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*4,a0 ; spara KOMM_VOL move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l POS_PAT,(a1)+ clr.w Its_saved ; tala om att vi har sparat, s att vi ; inte sparar igen utan att ha hmtat frst. Set_new_var lea MUSIKRUTINEN+12+16*4*4,a0 ; Snk volymen (tones off) moveq.l #0,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ clr.w P_DBF clr.w T_DBF move.l SNGFILSPEK,d2 add.l #8,d2 moveq.l #0,d0 move.w Jinglepos,d0 move.w V_AM,d1 mulu.w d1,d0 add.l d0,d2 move.l d2,POS_PAT move.w #-1,Jinglepos .out rts SECTION DATA Saved_stuff ds.b 1000 ; fr mycket Its_saved dc.w -1 ; -1, nope 0=yes Jingle_end dc.w -1 ; -1 initiera inte sng ; 0 initiera sng Jinglepos dc.w -1 ; Position dr en jingel ligger som man ; vill trigga. ; Triggas nr denna stts (<>-1) Jump_pos dc.w -1 ; Position dit man vill hoppa i sngen ; direkt eller s fort gingeln r klar. SECTION TEXT player tst.w Jingle_end bmi .no_songinit jsr RE_INIT_SONG .no_songinit tst.w Jinglepos bmi .no_jingel_trig jsr INIT_JINGLE .no_jingel_trig tst.w Jump_pos bmi .no_songjump jsr SONG_JUMP .no_songjump move.w T_DBF,d0 dbf d0,cont move.w P_DBF,d0 dbf d0,.update move.l POS_PAT,a0 cmp.w #-8888,(a0) bne .no_restart move.l RES_POS,a0 ; move.w #$70,$ff8240 .no_restart move.w V_AM,d2 subq #1,d2 ; rknare move.w B_W,d1 ; hur mnga gnger extra man ska skifta. lea PAT_PEK,a1 move.l PAT_BEG,d4 .loop1 moveq #0,d3 move.b (a0)+,d3 rol.w #5,d3 rol.w d1,d3 add.l d4,d3 move.l d3,(a1)+ dbf d2,.loop1 move.l a0,POS_PAT moveq #63,d0 .update move.w d0,P_DBF ; Alla patterns r nu rttstllda. Det r bara att skta sjlva spelningen. move.w V_AM,d0 subq #1,d0 lea PAT_PEK,a0 ; r kad lea EFCT_J,a1 ; r kad ? lea VOICE1,a2 move.l POL_BEG,a3 move.l SPL_BEG,a4 lea MUSIKRUTINEN+12,a5 X .loop move.l (a0),a6 moveq #0,d1 cmpi.w #1,B_W beq .byte .word move.w (a6)+,d1 bra .vidare .byte move.b (a6)+,d1 .vidare move.l a6,(a0)+ add.l d1,d1 add.l d1,d1 moveq #0,d2 move.b 2(a3,d1.w),d2 move.l (a3,d1.w),d1 lea COMMAND_TAB,a6 move.l (a6,d2.w),a6 jsr (a6) addq #4,a5 lea DATLEN(a2),a2 dbf d0,.loop move.w TEMPO,T_DBF moveq #-1,d7 ; fr att meddela PUT_FREQ bra PUT_FREQ ; vi ska ej slidea m m. cont move.w d0,T_DBF ** UTFRA KOMMANDONA DO_COMMANDS move.w V_AM,d0 subq #1,d0 lea EFCT_J,a0 lea VOICE1,a2 lea MUSIKRUTINEN+12,a3 .loop move.l (a0)+,a1 jsr (a1) lea DATLEN(a2),a2 addq #4,a3 dbf d0,.loop moveq #0,d7 ** RKNA OM CLOCKCYKLER TILL FREKVENS PUT_FREQ lea VOICE1+4,a0 lea MUSIKRUTINEN+12+2,a1 lea VALUELIST,a2 lea EFCT_J,a3 move.l #Arpeggio,d6 move.w V_AM,d1 subq #1,d1 .loop cmp.l (a3)+,d6 beq .arpeggio .ingen_arp move.w (a0),d0 add.w d0,d0 move.w (a2,d0.w),(a1) addq #4,a1 lea DATLEN(a0),a0 dbf d1,.loop rts .arpeggio tst.w d7 bmi .ingen_arp move.w 32-4(a0),d0 ; hmta arpeggiofrekvensen add.w d0,d0 move.w (a2,d0.w),(a1) addq #4,a1 lea DATLEN(a0),a0 dbf d1,.loop rts .reset_arp ; lea 22-4(a0),a6 ; move.l a6,26-4(a0) ; brja om p nst frsta, nsta VBL bra .ingen_arp * EFFECT_INSTALLS * D1: Innehller patterndatan * A2: Pekar p VOICE-datan * A5: Pekar p kommunikationsvariablerna (UCDM) I_ARP move.w d1,d3 beq .nothing jsr INSTR_TONE move.l #Arpeggio,(a1)+ lea 22(a2),a6 move.l a6,26(a2) ; pekaren p frsta "icke-orginal" ; (orginalet spelas 1VBL innan Arp-rutinen ; kommer till) moveq #0,d3 move.l (a2),a6 ; instrumentheader move.b 17(a6),d3 mulu.w #72,d3 lea FINETUNE_TAB-2,a6 add.w d3,a6 cmp.b #16,d1 blt .org_last ; eller blo move.b d1,d3 and.b #$f,d3 beq .second_org .all_three add.w 30(a2),a6 move.w (a6),20(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f0,d3 ror.w #3,d3 move.w (a6,d3.w),22(a2) ; frekvens 2 move.b d1,d3 and.w #$f,d3 add.w d3,d3 move.w (a6,d3.w),24(a2) ; frekvens 3 rts .org_last add.w 30(a2),a6 move.w (a6),20(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f,d3 add.w d3,d3 move.w (a6,d3.w),22(a2) ; frekvens 3 move.w #-1,24(a2) rts .second_org add.w 30(a2),a6 move.w (a6),22(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f0,d3 ror.w #3,d3 move.w (a6,d3.w),20(a2) ; frekvens 2 move.w #-1,24(a2) rts .nothing move.l #Nothing,(a1)+ bra INSTR_TONE I_UPSL ; done? moveq #0,d3 move.b d1,d3 move.w d3,6(a2) move.l #Slide_Up,(a1)+ bra INSTR_TONE I_DWNSL ; done? moveq #0,d3 move.b d1,d3 move.w d3,6(a2) move.l #Slide_Down,(a1)+ bra INSTR_TONE I_TPORT move.l d1,d3 rol.l #8,d3 and.w #$ff,d3 tst.w d3 beq .dont_change_dest lea FINETUNE_TAB-2,a6 ; ingen finetune? move.w (a6,d3.w),16(a2) ; destination .dont_change_dest ; moveq #0,d3 ; redan gjort move.b d1,d3 beq .dont_change_speed move.w d3,18(a2) ; speed .dont_change_speed move.l d1,d3 swap d3 and.w #$ff,d3 tst.w d3 beq .out move.l SPL_BEG,a6 subq.w #1,d3 rol.w #4,d3 move.b 12(a6,d3.w),4*16*4+2(a5) ; volym .out move.l #Tone_Portamento,(a1)+ rts I_VIB jsr INSTR_TONE move.w 4(a2),38(a2) ; orginalfrekvens move.l #Vibrato,(a1)+ tst.b d1 beq.s .maybe_retrigg move.w d1,d3 lsr.w #4,d3 and.w #$f,d3 move.b d3,35(a2) ; speed move.w d1,d3 and.w #$f,d3 move.w d3,36(a2) ; depth .maybe_retrigg move.l d1,d3 and.l #$ff0,d3 tst.l d3 beq.s .out move.b #0,34(a2) ; restart .out rts I_TPORTVOLSL move.l #Tone_Portamento_w_Volume_slide,(a1)+ bra inhopp I_VIBVOLSL move.l #Vibrato_w_Volume_Slide,(a1)+ bra inhopp I_TREM move.l #Nothing,(a1)+ bra INSTR_TONE I_NOTUSED move.l #Nothing,(a1)+ bra INSTR_TONE I_SPLOFFSET ; done ? jsr INSTR_TONE moveq #0,d3 move.b d1,d3 rol.w #8,d3 add.l d3,16*4(a5) move.l #Nothing,(a1)+ rts I_VOLSLIDE ; done ? move.l #VolumeSlide,(a1)+ inhopp move.b d1,d3 and.w #$f,d3 move.w d3,12(a2) ; sub move.b d1,d3 and.w #$f0,d3 lsr.w #4,d3 move.w d3,14(a2) ; add bra INSTR_TONE I_POS_JMP ; done ? clr.w P_DBF moveq #0,d3 move.b d1,d3 mulu.w V_AM,d3 addq #8,d3 add.l SNGFILSPEK,d3 move.l d3,POS_PAT move.l #Nothing,(a1)+ bra INSTR_TONE I_SETVOL ; done jsr INSTR_TONE move.b d1,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_PBREAK clr.w P_DBF ; done move.l #Nothing,(a1)+ bra INSTR_TONE I_ECOM lea E_COM_TAB,a6 move.l d1,d3 and.w #$f0,d3 ror.w #2,d3 move.l (a6,d3.w),a6 jmp (a6) I_TEMPO ; done subq #1,d1 move.b d1,TEMPO+1 move.b d1,T_DBF+1 move.l #Nothing,(a1)+ bra INSTR_TONE I_STOP_JINGLE clr.w Jingle_end bra INSTR_TONE * E-commands * I_SET_FILTER I_FINESLIDE_UP I_FINESLIDE_DOWN I_GLISSANDO_CONTR I_VIB_WAVEFORM I_SET_FINETUNE I_LOOP I_TREM_WAVEFORM I_NOT_USED I_RETRIG_NOTE move.l #Nothing,(a1)+ bra INSTR_TONE I_FINE_VOL_UP jsr INSTR_TONE move.b d1,d3 and.b #$f,d3 add.b 4*16*4+2(a5),d3 cmp.b #64,d3 ble .ok move.b #64,d3 .ok move.b d3,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_FINE_VOL_DOWN jsr INSTR_TONE move.b d1,d3 and.w #$f,d3 neg.w d3 add.b 4*16*4+2(a5),d3 tst.b d3 bpl .ok move.b #0,d3 .ok move.b d3,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_NOTECUT jsr INSTR_TONE move.b d1,d3 and.w #$f,d3 beq .now move.w d3,12(a2) ; rknare move.l #Notecut,(a1)+ rts .now clr.b 4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_NOTEDELAY I_P_DELAY I_INV_LOOP move.l #Nothing,(a1)+ bra INSTR_TONE * TA INSTR/TONE INSTR_TONE ; move.w #$700,$ff8240 move.l d1,d2 swap d2 lsr.w #8,d2 and.l #$ff,d2 ; tonnummer beq .vidare move.w d2,30(a2) ; spara undan tonnummer fr arpeggio .vidare move.l d1,d3 swap d3 and.l #$ff,d3 ; instrumentnr tst.w d3 beq .no_new_instr subq #1,d3 ; nr > offset rol.w #4,d3 ; offset lea (a4,d3.w),a6 move.l a6,(a2) ; spara pekare p instrumentheadern lea -4(a4),a6 ; F med headern ** STARTPOSITIONEN STTS LNGRE NER move.l (a4,d3.w),d5 add.l a6,d5 move.l d5,16*4*1(a5) ; Retrigg move.l 4(a4,d3.w),d5 add.l a6,d5 move.l d5,16*4*2(a5) ; Stopp move.l 8(a4,d3.w),d5 move.l d5,16*4*3(a5) ; Loop move.b 12(a4,d3.w),16*4*4+2(a5) ; Volym .no_new_instr tst.w d2 beq .no_new_tone move.l (a2),a6 move.l (a6),d5 add.l SPL_BEG,d5 subq #4,d5 move.l d5,16*4(a5) ; retrigg moveq #0,d4 move.b 13(a6),d4 ; finetune .finetune lea FINETUNE_TAB-2,a6 ; -2 pga att freq startar p 1. mulu.w #72,d4 ; rtt tabell add.w d2,d4 ; rtt tal move.w (a6,d4.w),d4 ; Frekvenscykler move.w d4,4(a2) ; ton i amigaklockcykler .no_new_tone rts * EFFECT_JUMPS * A2 pekar p DATAN * A3 pekar p KOMMUNIKATIONSVEKTORERNA (UCDM) Nothing rts Arpeggio lea 26(a2),a5 move.l (a5),a4 ; hmta pekare cmp.l a4,a5 bne.s .loopa_ej lea 20(a2),a4 ; peka p brjan .loopa_ej cmp.w #-1,(a4) bne.s .loopa_ej2 lea 20(a2),a4 .loopa_ej2 move.w (a4)+,32(a2) ; ut med frekvensen... move.l a4,(a5) ; spara pekare rts Slide_Up move.w 4(a2),d1 sub.w 6(a2),d1 ; lgre tal ger hgre frekvens cmpi.w #108,d1 bge.s .ej_verslag move.w #108,d1 .ej_verslag move.w d1,4(a2) rts Slide_Down move.w 4(a2),d1 add.w 6(a2),d1 ; hgre tal ger lgre frekvens cmpi.w #907,d1 ble.s .ej_verslag move.w #907,d1 .ej_verslag move.w d1,4(a2) rts Tone_Portamento move.w 16(a2),d1 ; ny frekvens move.w 4(a2),d2 ; gammal frekvens cmp.w d1,d2 blt .slide_down (mao slide_up talet) .slide_up sub.w 18(a2),d2 ; speed cmp.w d1,d2 blt.s .last .out move.w d2,4(a2) rts .slide_down add.w 18(a2),d2 cmp.w d1,d2 blt.s .out .last move.w d1,4(a2) rts Vibrato move.l 4*8-4(a0),a4 ; vib-pekare moveq #0,d1 move.b 34(a2),d1 ; pekare i vib-tab and.w #$1f,d1 moveq #0,d2 move.b (a4,d1.w),d2 ; vib_tab vrde mulu.w 36(a2),d2 lsr.l #7,d2 move.w 38(a2),d3 ; orginalfrekvens move.b 34(a2),d1 cmp.b #$1f,d1 bge.s .minus .plus add.w d2,d3 bra.s .more .minus sub.w d2,d3 .more cmp.w #907,d3 ble.s .ok1 move.w #907,d3 .ok1 cmp.w #108,d3 bge.s .ok2 move.w #108,d3 .ok2 move.w d3,4(a2) ; ny frekvens add.b 35(a2),d1 and.b #$7f,d1 move.b d1,34(a2) ; ny pekare i vib-tab rts Tone_Portamento_w_Volume_slide bsr.s Tone_Portamento bra.s VolumeSlide Vibrato_w_Volume_Slide bsr.s Vibrato bra.s VolumeSlide Tremolo rts VolumeSlide moveq #0,d1 move.b 16*4*4+2(a3),d1 add.w 14(a2),d1 ; upp sub.w 12(a2),d1 ; ner cmpi.w #64,d1 ble.s .ej_verslag moveq #64,d1 .ej_verslag tst.w d1 bpl.s .ej_underslag moveq #0,d1 .ej_underslag move.b d1,16*4*4+2(a3) rts Notecut subi.w #1,12(a2) bne.s .no_cut clr.b 16*4*4+2(a3) .no_cut rts SECTION BSS SNGFILSPEK ds.l 1 ; Pekar p sngfilen. B_W ds.w 1 ; 1=byte, 2=word V_AM ds.w 1 ; Antal stmmor POS_PAT ds.l 1 ; Pekar p POS_PAT TABELLEN RES_POS ds.l 1 ; Var POS_PAT ska hamna vid restart. PAT_BEG ds.l 1 ; Pekar p brjan av patternsen. POL_BEG ds.l 1 ; Pekar p brjan av datapoolen. SPL_BEG ds.l 1 ; Pekar p brjan av samplingsbanken+4 !!! *** SPARA UNDAN SKITEN HRIFRN OCH NER VID JINGLAR *** 174 BYTES VID FYRA STMMOR *** VEN SPARA UNDAN UCDM-VARIABLERNA OCH 64 EFTER EFCT_J *** VI BEHVER INTE SPELA VBL:EN VI NDRAR, BARA RENSA. P_DBF ds.w 1 ; DBF fr patternlngd TEMPO ds.w 1 ; Tempo-1 T_DBF ds.w 1 ; Tempo DBF, arbetsregistret. PAT_PEK ds.l 8 ; Pekar i patternsen fr de olika stmmorna. VOICE1 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE2 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE3 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE4 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE5 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE6 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE7 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE8 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre.  ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth ds.w 1 ; 4: Orginalfrekvens EFCT_J ds.l 8 ; Effect_Jump. VIB_PEK ds.l 8 ; Pekar p rtt vgform fr vibrato SECTION DATA COMMAND_TAB dc.l I_ARP dc.l I_UPSL dc.l I_DWNSL dc.l I_TPORT dc.l I_VIB dc.l I_TPORTVOLSL dc.l I_VIBVOLSL dc.l I_TREM dc.l I_STOP_JINGLE dc.l I_SPLOFFSET dc.l I_VOLSLIDE dc.l I_POS_JMP dc.l I_SETVOL dc.l I_PBREAK dc.l I_ECOM dc.l I_TEMPO E_COM_TAB dc.l I_SET_FILTER dc.l I_FINESLIDE_UP dc.l I_FINESLIDE_DOWN dc.l I_GLISSANDO_CONTR dc.l I_VIB_WAVEFORM dc.l I_SET_FINETUNE dc.l I_LOOP dc.l I_TREM_WAVEFORM dc.l I_NOT_USED dc.l I_RETRIG_NOTE dc.l I_FINE_VOL_UP dc.l I_FINE_VOL_DOWN dc.l I_NOTECUT dc.l I_NOTEDELAY dc.l I_P_DELAY dc.l I_INV_LOOP FINETUNE_TAB: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 dc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,457,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 894,844,796,752,709,670,632,597,563,532,502,474 dc.w 447,422,398,376,355,335,316,298,282,266,251,237 dc.w 223,211,199,188,177,167,158,149,141,133,125,118 ; Tuning -5 dc.w 887,838,791,746,704,665,628,592,559,528,498,470 dc.w 444,419,395,373,352,332,314,296,280,264,249,235 dc.w 222,209,198,187,176,166,157,148,140,132,125,118 ; Tuning -4 dc.w 881,832,785,741,699,660,623,588,555,524,494,467 dc.w 441,416,392,370,350,330,312,294,278,262,247,233 dc.w 220,208,196,185,175,165,156,147,139,131,123,117 ; Tuning -3 dc.w 875,826,779,736,694,655,619,584,551,520,491,463 dc.w 437,413,390,368,347,328,309,292,276,260,245,232 dc.w 219,206,195,184,174,164,155,146,138,130,123,116 ; Tuning -2 dc.w 868,820,774,730,689,651,614,580,547,516,487,460 dc.w 434,410,387,365,345,325,307,290,274,258,244,230 dc.w 217,205,193,183,172,163,154,145,137,129,122,115 ; Tuning -1 dc.w 862,814,768,725,684,646,610,575,543,513,484,457 dc.w 431,407,384,363,342,323,305,288,272,256,242,228 dc.w 216,203,192,181,171,161,152,144,136,128,121,114 sin DC.B $00,$18,$31,$4A,$61,$78,$8D,$A1,$B4,$C5,$D4,$E0,$EB,$F4,$FA,$FD DC.B $FF,$FD,$FA,$F4,$EB,$E0,$D4,$C5,$B4,$A1,$8D,$78,$61,$4A,$31,$18 EVEN FREQTAB dc.w 108,113,120,127,135,143,151,160,170,180,190,202,214 dc.w 226,240,254,269,285,302,320,339,360,381,404,428 dc.w 453,480,508,538,570,604,640,678,720,762,808,856 dc.w 907 FREQLIST ds.l 800 ; att skicka en gng i brjan VALUELIST dcb.w 109,0 BEGIN_VALUELIST Xz set 0 rept 907-108 dc.w Xz Xz set Xz+4 endr DS.L 1000 section text MAKE_FREQLIST_VALUELIST lea FREQTAB,a0 lea FREQLIST,a1 move.l #FREQUENCY_SEED,d0 ; fr move.w #36,d4 .ta_en_ton move.l #TONES,d1 ; antal steg till nsta ton (mellansteg+1) moveq #0,d2 move.w 2(a0),d2 moveq.l #0,d3 move.w (a0),d3 swap d3 ; utgngsfrekvens vid kningen sub.w (a0)+,d2 ; antal klockticks till nsta ton rol.w #8,d2 ; vi vill ha decimaler divu.w Ed1,d2 ; inkrement * 256 and.l #$f,d2 rol.l #8,d2 ; s att vi kan swappa cmp.l #$10,d2 bge .cont move.l #$10,d2 move.w (a0),d1 sub.w -2(a0),d1 .cont subq.w #1,d1 bmi.s .nsta swap d3 move.l d0,d5 clr.w d5 swap d5 divu.w d3,d5 move.w d5,(a1)+ ; versta wordet i frekvensen move.w d0,d5 divu.w d3,d5 move.w d5,(a1)+ ; lgsta wordet i frekvensen swap d3 add.l d2,d3 bra.s .cont .nsta dbf d4,.ta_en_ton move.l #-1,(a1)+ MAKE_VALUELIST lea BEGIN_VALUELIST,a1 move.w #798,d1 .loop1 move.l a1,d2 sub.l #VALUELIST,d2 ror.l #1,d2 ; offset i longwords frn VALUELIST move.l d0,d5 clr.w d5 swap d5 divu.w d2,d5 move.w d5,d3 move.w d0,d5 divu.w d2,d5 swap d3 move.w d5,d3 ; frekvensen fr offseten i d3 lea FREQLIST+4,a2 .igen cmp.l (a2)+,d3 ; hitta "skarven" ble .igen move.l -(a2),d2 ; =< d3 move.l -(a2),d4 ; > d3 move.l d3,d5 sub.l d2,d3 sub.l d5,d4 cmp.l d3,d4 blt .ta_det_frsta addq.l #4,a2 .ta_det_frsta suba.l #FREQLIST,a2 ; offset frn FREQLIST fr det aktuella. move.w a2,(a1)+ ; spara VALUELIST dbf d1,.loop1 rts * ()()() *I * * * * * DATA + BSS * * * *CBL * *I *+-F+ *| System data and bss area | *+-F+ * section data section bss old_vbi ds.l 1 | old vbi pointer new_pal ds.w 16 | new palette pal ds.w 16 | program palette old484 ds.b 1 | old key stats old118 ds.l 1 | old ikbd_vec *+-F+ *| Program data and bss area | *+-F+ section data start_boll dc.w 0 | 0 = off 1=starta demo scroll dc.w 0 | 0 = off 1=starta demo Boffset dc.l 0 | offset till Banstart section bss * program registers pi1_fil ds.l 1 | filnamn fr degasladdaren att lsa pi1_adr ds.l 1 | adress att lsa bilden till pi1_pal ds.l 1 | adress att lsa paletten till Physbase ds.l 1 | Adress till Physbase bana1 ds.l 1 | adress till bana 1 bana2 ds.l 1 | adress till bana 2 bana ds.b 100800*2 | pinnball 3 screens Sprite1 ds.b 32000 | Sprite screen 1 Tcode ds.b 1 | Tangentbords kod cwp even sapb1 ds.b 16*16 | Save area for protection of background sapb2 ds.b 16*16 | Save area for protection of background even vbi_flag ds.b 1 | Vbi flagga *+-F+ *| Files data and bss area | *+-F+ section data pin dc.b 'PIN.BWS',13,0 even pi1_spr1 dc.b 'SPRITE1.PI1',0 *+-F+ *| Blitter object data and bss area | *+-F+ section data *** Blit data for left lower flipper 6 bytes between data blocks even LLFdata dc.w 0 | source offset POS 0 dc.l 519*168+40 | dest. offset dc.w 32 | source offset POS 1 dc.l 519*168+40 | dest. offset dc.w 64 | source offset POS 2 dc.l 519*168+40 | dest. offset dc.w 96 | source offset POS 3 dc.l 519*168+40 | dest. offset dc.w 128 | source offset POS 4 dc.l 519*168+40 | dest. offset *** Blit data for left higher flipper 6 bytes between data blocks even LHFdata dc.w 0 | source offset POS 0 dc.l 170*168+32 | dest. offset dc.w 32 | source offset POS 1 dc.l 170*168+32 | dest. offset dc.w 64 | source offset POS 2 dc.l 170*168+32 | dest. offset dc.w 64 | source offset POS 3 dc.l 170*168+32 | dest. offset dc.w 64 | source offset POS 4 dc.l 170*168+32 | dest. offset *** Blit data for right lower flipper 6 bytes between data blocks RLFdata dc.w 0 | source offset POS 0 dc.l 519*168+80 | dest. offset dc.w 32 | source offset POS 1 dc.l 519*168+80 | dest. offset dc.w 64 | source offset POS 2 dc.l 519*168+80 | dest. offset dc.w 96 | source offset POS 3 dc.l 519*168+80 | dest. offset dc.w 128 | source offset POS 4 dc.l 519*168+80 | dest. offset *** Blit data for right higher flipper 6 bytes between data blocks RHFdata dc.w 0 | | source offset POS 0 dc.l 170*168+88 | dest. offset dc.w 32 | source offset POS 1 dc.l 170*168+88 | dest. offset dc.w 64 | source offset POS 2 dc.l 170*168+88 | dest. offset dc.w 64 | source offset POS 3 dc.l 170*168+88 | dest. offset dc.w 64 | source offset POS 4 dc.l 170*168+88 | dest. offset *** pos on flippers LFpos dc.w 0 RFpos dc.w 0 *** direction for Flipper animation LFdir dc.b 1 | 0 = up RFdir dc.b 1 | 1 = down *** flag for flippers LFflag dc.b 0 | start driver flag RFflag dc.b 0 | start driver flag *** flipper objects LLF_IMG incbin 'LLF.IMG' | Flippers LHF_IMG incbin 'LHF.IMG' | Flippers RLF_IMG incbin 'RLF.IMG' | Flippers RHF_IMG incbin 'RHF.IMG' | Flippers *+-F+ *| Blitter Chip data and bss area | *+-F+ section data *** RS Table for Blit data rsreset BD_start rs.w 1 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) rs.w 1 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) BD_src rs.l 1 | $FF8A24 adress to source BD_m1 rs.w 1 | $FF8A28 endmsk1 Left end mask BD_m2 rs.w 1 | $FF8A2A endmsk2 Mid mask BD_m3 rs.w 1 | $FF8A2C endmsk3 Right end mask rs.w 1 | $FF8A2E dstxinc rs.w 1 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) BD_dst rs.l 1 | $FF8A32 dstaddr rs.w 1 | $FF8A36 xcount (words)*4 BD_ycnt rs.w 1 | $FF8A38 ycount y lines rs.b 1 | $FF8A3A hop use source only BD_op rs.b 1 | $FF8A3B op Source rs.b 1 | $FF8A3C linenum BD_skew rs.b 1 | $FF8A3D Skew value rs.w 1 | $FF8A3E Dummy value *** Blit data (1) for Left Lower Flipper BD_LLF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Left Lower Flipper BD_LLF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) for Left Higher Flipper BD_LHF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Left Higher Flipper BD_LHF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) for Right Lower Flipper BD_RLF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Right Lower Flipper BD_RLF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) for Right Higher Flipper BD_RHF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Right Higher Flipper BD_RHF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) Protect Background from Ball blitter (PBB) BD_PBB1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 154 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 2 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) Protect Background from Ball blitter (PBB) BD_PBB2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 154 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 2 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) Restore Background for Ball blitter (RBB) BD_RBB1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 2 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 154 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) Restore Background for Ball blitter (RBB) BD_RBB2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 2 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 154 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) to Blit BallMask (BBM) BD_BBM1d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 1 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) to Blit BallMask (BBM) BD_BBM2d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 1 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) to Blit BallSprite (BBS) BD_BBS1d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-xcount*srcxinc+srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 7 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) to Blit BallSprite (BBS) BD_BBS2d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 7 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value section bss *** Blit data pointers for blitter BD_LLF1p ds.l 1 | left lower flipper BD_LLF2p ds.l 1 | BD_LHF1p ds.l 1 | left higher flipper BD_LHF2p ds.l 1 | BD_RLF1p ds.l 1 | right lower flipper BD_RLF2p ds.l 1 | BD_RHF1p ds.l 1 | right higher flipper BD_RHF2p ds.l 1 | BD_PBB1p ds.l 1 | protect background BD_PBB2p ds.l 1 | BD_RBB1p ds.l 1 | repair background BD_RBB2p ds.l 1 | BD_BBM1p ds.l 1 | blit ball mask BD_BBM2p ds.l 1 | BD_BBS1p ds.l 1 | blit ball sprite BD_BBS2p ds.l 1 | *+-F+ *| Screen data and bss area | *+-F+ section data *** pallette for black screen black dc.l 0,0,0,0,0,0,0,0 *** palette for game screen gamepal dc.w $0,$0700,$0730,$0750,$0770,$0570,$0057,$0240 dc.w $0627,$0,$0222,$0333,$0444,$0555,$0666,$0777 *** palette for poang screen poangpal dc.w $0,$0247,$0222,$0444,$0777,$0666,$0705,$09B9 dc.w $0,$0,$0713,$0999,$0444,$0555,$0999,$0FF2 even *** rotate line data field rotline dc.w 350 | in dc.w 350 | | dc.w 350 | | dc.w 350 | | dc.w 350 | | dc.w 350 | \|/ dc.w 350 | out * _G *| | *| Kalle's ballroutine data and bss area | *|_F| section data fixvars dcb.l 10,0 vars dcb.l 20,0 | TILL FR ATT KUNNA SPARA UNDAN SAKER UTAN ; | ATT BEHVA HITTA P NYA NAMN HELA TIDEN varsad dc.l vars,vars+4*10 rellist dcb.w 3*ppvbl,1 | RELATIVA X-FRFLYTTNINGAR dcb.w 3*ppvbl,1 | RELATIVA Y-FRFLYTTNINGAR dcb.w 3*ppvbl,0 | TRFF / INTE TRFF ds.l 1 | SKERHET VID RENSNING (MSTE VARA DR) listcount dc.w 0 periferi rept 2 | FR ATT KUNNA HA OFFSET (VID SKARVTRFF) dc.w 7+3*168,7+2*168,6+1*168,5+0*168 dc.w 4+0*168,3+0*168,2+0*168,1+1*168 dc.w 0+2*168,0+3*168,0+4*168,0+5*168 dc.w 1+6*168,2+7*168,3+7*168,4+7*168 dc.w 5+7*168,6+6*168,7+5*168,7+4*168 endr trfflista dcb.w 20,0 sinlist incbin 'sico5400.sin' atanlist incbin 'atan.bin' korr dc.w 150,570 x dc.w 150 y dc.w 570 xhast dc.w 40 yhast dc.w 40 xtemp dc.w 0 ytemp dc.w 0 gtemp dc.w 0 kvadrantoffs dc.w 2*270,2*180,2*0,2*90 old_d0 dc.l 100 old_what dc.l 100 medel dc.w 0 mater dc.w 0 under dc.w 0 hast dc.w 0 normal dc.w 0 c_normal dc.w 0 reflekt dc.w 0 stuckflag dc.w 0 skruv dc.w 0 frflytt dc.w 1,0,1,-1,0,-1,-1,-1,-1,0,-1,1,0,1,1,1 nohitcount dc.w 0 * DETTA R LISTAN FR UTFLACKNING OCH KORREKTION AV REFLEKTIONSVINKELN * GRAD 0 1 2 3 4 5 6 7 8 9 dc.w +2*90,+2*89,+2*88,+2*87,+2*86,+2*85,+2*84,+2*83,+2*82,+2*81 dc.w +2*80,+2*79,+2*78,+2*77,+2*76,+2*75,+2*74,+2*73,+2*72,+2*71 dc.w +2*70,+2*69,+2*68,+2*67,+2*66,+2*65,+2*64,+2*63,+2*62,+2*61 dc.w +2*60,+2*59,+2*58,+2*57,+2*56,+2*55,+2*54,+2*53,+2*52,+2*51 dc.w +2*50,+2*49,+2*48,+2*47,+2*46,+2*45,+2*44,+2*43,+2*42,+2*41 dc.w +2*40,+2*39,+2*38,+2*37,+2*36,+2*35,+2*34,+2*33,+2*32,+2*31 dc.w +2*30,+2*29,+2*28,+2*27,+2*26,+2*25,+2*24,+2*23,+2*22,+2*21 dc.w +2*20,+2*19,+2*18,+2*17,+2*16,+2*15,+2*14,+2*13,+2*12,+2*11 dc.w +2*10,+2*09,+2*08,+2*07,+2*06,+2*05,+2*04,+2*03,+2*02,+2*01 dc.w -2*00,-2*00,-2*01,-2*02,-2*02,-2*03,-2*04,-2*04,-2*05,-2*06 dc.w -2*06,-2*07,-2*08,-2*08,-2*09,-2*10,-2*10,-2*11,-2*12,-2*12 dc.w -2*13,-2*14,-2*14,-2*15,-2*16,-2*16,-2*17,-2*18,-2*18,-2*19 dc.w -2*20,-2*20,-2*21,-2*21,-2*21,-2*22,-2*22,-2*22,-2*22,-2*22 dc.w -2*21,-2*21,-2*21,-2*20,-2*20,-2*20,-2*20,-2*19,-2*19,-2*19 dc.w -2*19,-2*18,-2*18,-2*18,-2*18,-2*17,-2*17,-2*17,-2*17,-2*16 dc.w -2*16,-2*16,-2*15,-2*15,-2*15,-2*14,-2*14,-2*14,-2*13,-2*13 dc.w -2*13,-2*12,-2*12,-2*11,-2*11,-2*10,-2*10,-2*09,-2*09,-2*08 dc.w -2*08,-2*07,-2*07,-2*06,-2*06,-2*05,-2*05,-2*04,-2*04,-2*03 flacklist ds.w 90 | DETTA UTRYMME FYLLS MED DE FRRA 90 ; | VRDENA, FAST NEG:ADE dc.w -2*00,-2*01,-2*02,-2*03,-2*04,-2*05,-2*06,-2*07,-2*08,-2*09 dc.w -2*10,-2*11,-2*12,-2*13,-2*14,-2*15,-2*16,-2*17,-2*18,-2*19 dc.w -2*20,-2*21,-2*22,-2*23,-2*24,-2*25,-2*26,-2*27,-2*28,-2*29 dc.w -2*30,-2*31,-2*32,-2*33,-2*34,-2*35,-2*36,-2*37,-2*38,-2*39 dc.w -2*40,-2*41,-2*42,-2*43,-2*44,-2*45,-2*46,-2*47,-2*48,-2*49 dc.w -2*50,-2*51,-2*52,-2*53,-2*54,-2*55,-2*56,-2*57,-2*58,-2*59 dc.w -2*60,-2*61,-2*62,-2*63,-2*64,-2*65,-2*66,-2*67,-2*68,-2*69 dc.w -2*70,-2*71,-2*72,-2*73,-2*74,-2*75,-2*76,-2*77,-2*78,-2*79 dc.w -2*80,-2*81,-2*82,-2*83,-2*84,-2*85,-2*86,-2*87,-2*88,-2*89 matris incbin d:\editxile\old_mats\mat3.pqm incbin d:\editxile\old_mats\mat2.pqm incbin d:\editxile\mat1new2.pqm paths path0 incbin d:\obs2\path0.pqt EVEN path1 incbin d:\obs2\path1.pqt EVEN path2 incbin d:\obs2\path2.pqt EVEN pathadlist dc.l path0,path1,path2 pathflag dc.w 0 pathcount dc.w 0 pathtemp dc.w 0 snedflag dc.w 0 uppflag dc.w 0 pathvinks dc.w 2*000,2*090,2*090,2*180,2*000,2*090 flipupp1 dc.b 03,03,03,03,03,01,01,00,00,00,01,01,02,02,03,04,04 dc.b 05,06,06,07,08,08,09,10,10,11,11,12,12,12,12,12 flipupp2 dc.b 03,03,03,03,03,01,01,00,00,00,00,01,01,01,01,02,02,02 dc.b 02,02,03,03,03,03,04,04,04,04,04,05,05,05,05,05,05 flipupp3 dc.b 04,04,04,04,04,02,02,01,01,01,01,01,01,01,01,01,01,00 dc.b 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 flipupp4 dc.b 08,08,08,08,08,06,06,05,05,05,04,04,04,04,03,03,03,03 dc.b 02,02,02,02,01,01,01,01,00,00,00,00,01,01,01,01,01 flipner1 dc.b 05,05,05,05,05,06,07,07,08,08,09,09,10,10,11,11,12 dc.b 12,13,13,13,14,14,15,15,16,16,16,15,15,15,15,15 flipner2 dc.b 05,05,05,05,05,06,07,07,07,07,08,08,08,08,08,08,08,08 dc.b 08,08,08,08,08,08,09,09,09,09,09,09,08,08,08,08,08 flipner3 dc.b 06,06,06,06,06,07,08,08,08,08,08,08,08,07,07,07,07,06 dc.b 06,06,06,06,05,05,05,05,05,04,04,04,03,03,03,03,03 flipner4 dc.b 10,10,10,10,10,11,12,12,12,12,12,11,11,11,10,10,09,09 dc.b 09,08,08,07,07,07,06,06,05,05,05,04,03,03,03,03,03 flippers incbin d:\editxile\flippers.pqm section bss pathad ds.l 1 diff ds.w 1 perif_grad ds.w 32 rotlist ds.b 8600 *+-F+ *| Score and Infotable data and bss area | *+-F+ section data even alpha incbin 'Alpha.pi1' even poangtavla incbin 'POANG.BWS' *+-F+ *| Data for Alphabet | *+-F+ even l_index dc.b 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789()@!-*.:;',0 * OBS! Endast jmna tal i spacing listan!!! * 16 r standard = 1 tom LED mellan bokstverna even l_spacing dc.b 16 | A dc.b 16 | B dc.b 16 | C dc.b 16 | D dc.b 16 | E dc.b 16 | F dc.b 16 | F dc.b 16 | G dc.b 16 | H dc.b 8 | I dc.b 16 | J dc.b 16 | K dc.b 16 | L dc.b 16 | M dc.b 16 | N dc.b 16 | O dc.b 16 | P dc.b 16 | Q dc.b 16 | R dc.b 16 | S dc.b 16 | T dc.b 16 | U dc.b 16 | V dc.b 16 | W dc.b 16 | X dc.b 16 | Y dc.b 16 | Z dc.b 16 | dc.b 16 | dc.b 16 | dc.b 16 | a dc.b 16 | b dc.b 16 | c dc.b 16 | d dc.b 16 | e dc.b 12 | f dc.b 16 | g dc.b 16 | h dc.b 4 | i dc.b 6 | j dc.b 16 | k dc.b 4 | l dc.b 16 | m dc.b 16 | n dc.b 16 | o dc.b 16 | p dc.b 16 | q dc.b 10 | r dc.b 16 | s dc.b 12 | t dc.b 16 | u dc.b 16 | v dc.b 16 | w dc.b 16 | x dc.b 16 | y dc.b 16 | z dc.b 16 | dc.b 16 | dc.b 16 | dc.b 16 | = SPACE dc.b 16 | 0 dc.b 10 | 1 dc.b 16 | 2 dc.b 16 | 3 dc.b 16 | 4 dc.b 16 | 5 dc.b 16 | 6 dc.b 16 | 7 dc.b 16 | 8 dc.b 16 | 9 dc.b 10 | ( dc.b 10 | ) dc.b 16 | @ = (C) dc.b 12 | ! dc.b 14 | - dc.b 16 | * dc.b 4 | . dc.b 4 | : dc.b 4 | ; *+-F+ *| Text strings | *+-F+ even * Frsta tecknet i varje text mste vara space eftersom algoritmen * medfr att det frsta tecknet gr frlorat text1 dc.b ' Unique is proud to present a exellent game for the' dc.b ' suberb all killer machine Atari Ste. ;-) ' dc.b ' *** Obsession *** Obsession *** Obsession *** ' dc.b ' This is a demo version of Obsession, just wait to' dc.b ' see the real version wich will include 4 more courses. ' dc.b ' Totaly 5 amazing courses. In this demo you have only 1' dc.b ' course to play! Namely X-ile Zone. ' dc.b ' Main Code: Michael Brunnstrm Ball Code: Kalle Lundqvist' dc.b ' Moduleplayer Code: Tord Jansson Specialroutines Code: Hans Hrrd' dc.b ' Graphics: Peter Zetterberg Music and Noice: Per Almered' dc.b ' Game Construction: Peter Zetterberg and Michael Brunnstrm' dc.b ' (C) 1994 by Unique Development Sweden ' dc.b ' Buy Obsession --WRAP-- ',0 *+-F+ *| Blit Data | *+-F+ even *** Blit data for scroll left BD_SL dc.w 8 | $FF8A20 srcxinc source x inc (2=word align >ed) (8=not word aligned) dc.w -8+168 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $fffc | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w -8+168 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 22+1 | $FF8A36 xcount words+1 dc.w 0 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 14 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data for textwindow BD_TW dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160+168 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount words+1 dc.w 0 | $FF8A38 ycount y lines dc.b 3 | $FF8A3A hop use source and mask dc.b 7 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value section bss *+-F+ *| Text parmeters | *+-F+ section bss TextAdr ds.l 1 | points to Text buffer TextLP ds.w 1 | text left pointer TextSk ds.b 1 | letter skew value RealSk ds.b 1 | real skew even red_flag ds.w 1 end !C@@??(Q`0@@?PQ0G?@@? 19XvC@@?3̆! 1@X~@@??:OoN``1FH?<Nu,(zIta&J@f L2<pXQ|4fG KL(NJDk?/ ?/?<*NN`P> 8Td<| HooMtooo E PO<|:|<<:<p<H@0<aDA2t a:Q* "<a,<0|gp<Q>Nu*r Ҹ8g޲dXO`+BGMBBGMDDBGMZBBGMB@?r!C(h@J ?@?w dvCCPJ?@?dtNeou@J?|@?PPO o 0`& VvHp/?NA*/@>NA\OJg\(@:Y:IIt:Z:6:[ֆ<:^܆܃Ԇ"BHzHDNL"J@g܅e?<INANSHDRIVERSYS Lrp 0;g Q`Q*(]HE] b$L 4(Zvz:!<UF܉LH dNL&J@fLڅ<Hܯgz&H dNL&J@fXBB44 Zj$o J X`f?@ABCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&')*+,/134BDEFGHILMOPQRSTUVWXYZ[\]_`abcdefghijklmyz{|}~      !"#$%&'()*+,-./0123456789:;<>?@ACEFGHIJKMNOPQRTVXZ\^_`abcdefghijklnopqrstuvwxyz{|       !"#$%&')*+,-./01245689;<>CEFGJKLMNOPQRSTUVXYZ[\]^_`abcdeghijkmpqrstuvwxy{}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-/0123456789:;<=?@ABEFGHIKLMNOPQSTUVWXZ[\]^_`abcefghijklmnopuwx{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqstuvwxyz{|}~      !"#$%&'()*+,-1234578<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     F"$&()+-.034689:;=>@ACEFGHJKMPQSUVXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~                      ! " $ % & ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ? @ A B D E F G H I J K L M N O P Q R T U V W X Y Z [ \ ] ^ _ ` a b d e f g h i j k l m n o p q r t u v w x y z { | } ~                          ! " # % & ' ) * + - . / 0 1 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~         !"#$%&'()*+,-./012345789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:>?ABCDEFGHILOQRUVWXYZ[\]^_`abcefghijklmn<     #'()*+,-./012345789:;<=>?@ABCDEHIJKLMOPQRSTUVWXYZ[]^_`anopqrstuvwxy{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}     !"#$%&'()*+,-./123456789:;<=>?ABCDEFGHIJKLMNOQRSTUVWXYZ[\]^_abcdefghijklmnoqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXJ 4B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ |      !"#$%&')*+,/134BDEFGHILMOPQRSTUVWXYZ[\]_`abcdefghijklmyz{|}~   !"#$%&'()*+,-./0123456789:;>?@BCDFGHIJLPQRSTUVWXYZ\]^_`abcdefgijklmnopqrstuvwxyz{|}~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLPQRSTUVWXYZ\]^_`abcdefhijklmnopqrsuvxy}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-/0123456789:;<=?@ABEFGHIKLMNOPQSTUVWXZ[\]^_`abcefghijklmnopuwx{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqstuvwxyz{|}~      !"#$%&'()*+,-1234578<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     F"$&()+-.034689:;=>@ACEFGHJKMPQSUVXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~                      ! " $ % & ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ? @ A B D E F G H I J K L M N O P Q R T U V W X Y Z [ \ ] ^ _ ` a b d e f g h i j k l m n o p q r t u v w x y z { | } ~                          ! " # % & ' ) * + - . / 0 1 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~         !"#$%&'()*+,-./012345789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:>?ABCDEFGHILOQRUVWXYZ[\]^_`abcefghijklmn<     #'()*+,-./012345789:;<=>?@ABCDEHIJKLMOPQRSTUVWXYZ[]^_`anopqrstuvwxy{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}     !"#$%&'()*+,-./123456789:;<=>?ABCDEFGHIJKLMNOQRSTUVWXYZ[\]^_abcdefghijklmnoqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXJ4 BSHDRIVERSYS 8`+DESKTOP INF `AUTO  ` AVK_5_0  K`AHDI_  +`KOBOL25EACX ZONRAW_PICS  !`SPX  `.CRACKART  ITGE  (` GE_HDI  |~_UIS_III PRG c tVIDI_ST  ` REPLAY_8  `RAYSTART  `PHOTO_CR  `MCOPY  `DEGAS_ELITE `PICCIES  `STFORMAT  `qPFBACKUP  `pSOUNDLAB  `KNIFE_ST  d`KAFKALAS  !SFUSK  `mXeFUSK2  `zPdFUSK3  `8VTOMPIC  `PRICE  m`cPRICE2  ]*`hFSPOCK  `(6SPOCK2  `@f6COPY KBJ `YKOBOLD_2INF `Zv* V  !"#$%&'()*+,-./123456789:;<=>?@ABDEFGHIJKLMNOPQRTVXYZ[\]^`abcdgjklmnorstuvwxyz{|}~ m      !"#$%&'()*+,-./0123456789;=>?@ABCDEFGHIJKMNOPQRSTUVWXYZ[]^_`abcdefghijkmnpqrstuvwxyz{|}~]UY      !"#$%&'()*+,-./0123456789:;<>?@ACEFGHIJKMNOPQRTVXZ\^_`abcdefghijklnopqrstuvwxyz{|      o !"#$%&')*+,-./01245689;<>CEFGJKLMNOPQRSTUVXYZ[\]^_`abcdeghijkmpqrstuvwxy{}   W !"C$%&'()*+,-./012456789:;<=>?@ABDEFGHIJKLMNOPSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|}~b     J !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvxyz{|}~      !]#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUXZ ^_`abcdefghijklmnopqrstuvwxyz{|~       " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@ 8U      !"#$%&'()*+,-./012345679:;<=?@ABCEFGHIJKLMNOPQRSwWXYZ\]^_`abcdefghijlprstxz{|}~c                     " # $ & ' ( ) + , - . 1 2 3 5 6 7 8 9 : ; < = > A B C D E F G H I J K L M N O P Q R T U X Z [ \ ] ^ _ ` a b c d f g h i j k l m n o q r s t u v w x y z | } ~                          ! " ' $ % ' ( + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Z \ ] ^ _ ` a b d e f g h i j 1 l m n o p q r s t u v w x y z | } ~  "                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                          ! # $ % & ' ( ) * + , - . / 0 1 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ _ ` a c d e f g h i j k l m n o p q s t u v w x y z { | } ~                          ! # & 8 ( ) * + , - / 0 2 3 4 5 6 : ; < = > ? @ A B C D E F G H J K L } N O P Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i j k l n o p q r s t u v w x y z { | ~  3   f    !"#$'()*+,-[/1456789:;<=>?@ABCDEFGHIJKLMNOPQRSTV[Z\]^e`bdfghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~`      !#$%&'()*+,-./013456789:;<=>?@ACDEFGHIJKLMNOPQSTUY\]^mbefghklvorsx{|   !"#$%&'()*+,-./123456789:;<=>?ABCDEFGHIJKLMNORSTUVWXYZ[\]^_`cdefghiklmnopqrtuvwxyz{/w      !"#$%&'()*1f56789:;<=>?@ABCEdGHIJKLMNOPQRcTUVWXYZ[\]^_`abnefghijklmnpqrstuvwxyz{|}~     !"#$%&'()*+,-./012356789:;<=>?@ABCDEFGHKMNORTUX\]_`abcdefglmnqrstuvwxyz{}~      !"#$%&'()*+,-/012356789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdehijklmnopqrstuvxyz{|}~5      !"#$%&'()*+,-./012345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmoqrstuvwxyz{|}~ 90   !"#$%&'()*+,./3456789:;<=>ACEGIJLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmprsuwxz|$7'     &!"#%()*,-./123456789:;<=>?BCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~      "$&()*,-./0123457:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !#$%&'()*./0234689:$<=>?@ABCDEFGHIJLMNOPQRSTUVWXYZ\_`abcdeilnpqrstuvxyz{|}~      !"#$%&()*+,-.012345689:;<=>@ABCDEFHIJKLMNPQRSTUVXYZ[\]^`abcdefhijklmnpqrstuvxyz{|}~  C !"#$%&'()*,-./0123456789:<=>?@ABDEFGHIJLMNOPQRSTUVWXYZ]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#!%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#%&'(),-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPRSTVWXY[\]_`abcfghijklmnopqrstwxyz{|}~ !$                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~     $ ! !!!!!!!!! ! ! ! !!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!+!,!-!.!/!0!1!2!3!5!6!7!8!9!;!!?!@!A!B!C! I!J!K!N!O!P![!\!]!a! h!i!j!l!m!n!o!q!s! y! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!""""""""" " " " """"""""""""""" $ "!"""#"%"&"'"0"3"q"7"8"9":"<"=">"?"@"B"C"D"E"G"H"I"J"K"M"N"O"P"Q"R"T"U"V"W"Y"Z"["\"]"_"`"a"b"d"e"f"g"h"j"k"l"m"n"p"r"s"t"u"Y#w"x"y"z"{"}"~"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""######## # # # ############### #!#"###$#&#'#(#)#*#+#-#.#/#0#1#3#4#5#6#7#9#:#;#<#=#>#@#A#B#C#D#E#G#H#I#J#K#M#N#O#P#R#S#T#V#W#X#Z#[#\#]#^#_#b#c#d#e#f#g#h#i#j#k#m#n#o#p#q#r#s#t#v#w#x#y#z#{#|#}#~##############################################################################################################################$X$$$$$$$ $ $$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$)$*$+$,$-$.$/$0$2$3$4$5$6$7$8$9$;$<$=$>$?$@$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_$`$a$b$c$q$e$f$g$h$i$j$k$l$m$n$o$p$s$t$u$v$w$x$y$z${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$$$$$%%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%6%7%8%9%:%;%<%=%>%?%@%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%[%\%^%_%`%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%q%r%s%t%u%v%w%x%y%z%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   !"#$%&'()*+,-./123456789:;<=>?@ABDEFGHIJKLMNOPQRTVXYZ[\]^`abcdgjklmnorstuvwxyz{|}~ m      !"#$%&'()*+,-./0123456789;=>?@ABCDEFGHIJKMNOPQRSTUVWXYZ[]^_`abcdefghijkmnpqrstuvwxyz{|}~]UY      !"#$%&'()*+,-./0123456789:;<>?@ACEFGHIJKMNOPQRTVXZ\^_`abcdefghijklnopqrstuvwxyz{|      o !"#$%&')*+,-./01245689;<>CEFGJKLMNOPQRSTUVXYZ[\]^_`abcdeghijkmpqrstuvwxy{}   W !"C$%&'()*+,-./012456789:;<=>?@ABDEFGHIJKLMNOPSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|}~b     J !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvxyz{|}~      !]#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUXZ ^_`abcdefghijklmnopqrstuvwxyz{|~       " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~@ 8U      !"#$%&'()*+,-./012345679:;<=?@ABCEFGHIJKLMNOPQRSwWXYZ\]^_`abcdefghijlprstxz{|}~c                     " # $ & ' ( ) + , - . 1 2 3 5 6 7 8 9 : ; < = > A B C D E F G H I J K L M N O P Q R T U X Z [ \ ] ^ _ ` a b c d f g h i j k l m n o q r s t u v w x y z | } ~                           ! " ' $ % ' ( + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Z \ ] ^ _ ` a b d e f g h i j 1 l m n o p q r s t u v w x y z | } ~  "                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                          ! # $ % & ' ( ) * + , - . / 0 1 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ _ ` a c d e f g h i j k l m n o p q s t u v w x y z { | } ~                          ! # & 8 ( ) * + , - / 0 2 3 4 5 6 : ; < = > ? @ A B C D E F G H J K L } N O P Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i j k l n o p q r s t u v w x y z { | ~  3   f    !"#$'()*+,-[/1456789:;<=>?@ABCDEFGHIJKLMNOPQRSTV[Z\]^e`bdfghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~`      !#$%&'()*+,-./013456789:;<=>?@ACDEFGHIJKLMNOPQSTUY\]^mbefghklvorsx{|   !"#$%&'()*+,-./123456789:;<=>?ABCDEFGHIJKLMNORSTUVWXYZ[\]^_`cdefghiklmnopqrtuvwxyz{/w      !"#$%&'()*1f56789:;<=>?@ABCEdGHIJKLMNOPQRcTUVWXYZ[\]^_`abnefghijklmnpqrstuvwxyz{|}~     !"#$%&'()*+,-./012356789:;<=>?@ABCDEFGHKMNORTUX\]_`abcdefglmnqrstuvwxyz{}~      !"#$%&'()*+,-/012356789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdehijklmnopqrstuvxyz{|}~5      !"#$%&'()*+,-./012345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmoqrstuvwxyz{|}~ 90   !"#$%&'()*+,./3456789:;<=>ACEGIJLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmprsuwxz|$7'     &!"#%()*,-./123456789:;<=>?BCDEFGHIKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~      "$&()*,-./0123457:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !#$%&'()*./0234689:$<=>?@ABCDEFGHIJLMNOPQRSTUVWXYZ\_`abcdeilnpqrstuvxyz{|}~      !"#$%&()*+,-.012345689:;<=>@ABCDEFHIJKLMNPQRSTUVXYZ[\]^`abcdefhijklmnpqrstuvxyz{|}~  C !"#$%&'()*,-./0123456789:<=>?@ABDEFGHIJLMNOPQRSTUVWXYZ]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#!%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#%&'(),-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPRSTVWXY[\]_`abcfghijklmnopqrstwxyz{|}~ !$                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~     $ ! !!!!!!!!! ! ! ! !!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!+!,!-!.!/!0!1!2!3!5!6!7!8!9!;!!?!@!A!B!C! I!J!K!N!O!P![!\!]!a! h!i!j!l!m!n!o!q!s! y! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!""""""""" " " " """"""""""""""" $ "!"""#"%"&"'"0"3"q"7"8"9":"<"=">"?"@"B"C"D"E"G"H"I"J"K"M"N"O"P"Q"R"T"U"V"W"Y"Z"["\"]"_"`"a"b"d"e"f"g"h"j"k"l"m"n"p"r"s"t"u"Y#w"x"y"z"{"}"~"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""######## # # # ############### #!#"###$#&#'#(#)#*#+#-#.#/#0#1#3#4#5#6#7#9#:#;#<#=#>#@#A#B#C#D#E#G#H#I#J#K#M#N#O#P#R#S#T#V#W#X#Z#[#\#]#^#_#b#c#d#e#f#g#h#i#j#k#m#n#o#p#q#r#s#t#v#w#x#y#z#{#|#}#~##############################################################################################################################$$$$$$$$ $ $$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$)$*$+$,$-$.$/$0$2$3$4$5$6$7$8$9$;$<$=$>$?$@$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_$`$a$b$c$q$e$f$g$h$i$j$k$l$m$n$o$p$s$t$u$v$w$x$y$z${$|$}$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$$$$$%v%%%%%%% % % % % %%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%6%7%8%9%:%;%<%=%>%?%@%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%[%\%^%_%`%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%q%r%s%t%u%v%w%x%y%z%{%|%}%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEVPAC2  *`OBS2  `EDITXILE  `NEO  "`SUGSPRAK2_6 `MATEDIT  &bAN_GENST  `HSPASCAL  /` OBS  2bHISOFT_C  `DEVPAC31  -`XILEDEMO  `XILE_FX  `UDS_PICS  `RAMP_FNT  $`MASKER  %`KALLE  t`?FLIPMATX  D`AQUA_ADV  `@FLIP_V_2  `MATRIX_2  `FLIPS_V3  #`AL PI1 #`"}MOODY PRG `9XILERULEDOC %`FLIPRAW PI1 5t |"}UNIQLOGS  `UNIQLOGOEPS %U8cNEW_XILE  5`:HATE_MIF  ` X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ++     %%%X8;X +++     %%% X +   OSTCLUSDAT P`Af VP  !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'(*+,-./012345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCD IJLOQSUWY\]`acdeghijlopqsuy{}B    "#$&()*,-./12345789;<=ADEFGHIJKLMNOPQRSUVWXYZ[\]^_`abcdefghjklmnorstuvwxyz{|}~   w #$%&()*+,./01234678:;<=>@ABCDFGHIJLMNOPRSTUVXYZ[\^_`acdefhijklnopr ,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiklmrtuvwxyz{|}     !"#$%&'()*+,./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v x y z { | } ~                            ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; i= > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~       !"#$&'(+,-.0134679:<=>@BDFGHIKLNOPQRSTUVWXZ[\]^_`abcdfhijklnopqstuwyz{}      !"#$%&'()*+-./012345678:;<>?@ABCDEGHIJLMNOQSTUVXYZ[]^_`abcefghijlmnopqrstuvwxyz{|}~      !"#$%&()*+,-./123456789:<=>?@ABCDEGHIJKLMNPQRSTUX[]^_`abcdefgijklmnopqrsuvwxyz|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~K      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012345 ;>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abdefhklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     #"   !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'(*+,-./012345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCD IJLOQSUWY\]`acdeghijlopqsuy{}B    "#$&()*,-./12345789;<=ADEFGHIJKLMNOPQRSUVWXYZ[\]^_`abcdefghjklmnorstuvwxyz{|}~   w #$%&()*+,./01234678:;<=>@ABCDFGHIJLMNOPRSTUVXYZ[\^_`acdefhijklnopr ,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiklmrtuvwxyz{|}     !"#$%&'()*+,./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v x y z { | } ~                            ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; i= > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~       !"#$&'(+,-.0134679:<=>@BDFGHIKLNOPQRSTUVWXZ[\]^_`abcdfhijklnopqstuwyz{}      !"#$%&'()*+-./012345678:;<>?@ABCDEGHIJLMNOQSTUVXYZ[]^_`abcefghijlmnopqrstuvwxyz{|}~      !"#$%&()*+,-./123456789:<=>?@ABCDEGHIJKLMNPQRSTUX[]^_`abcdefgijklmnopqrsuvwxyz|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxyz{|}~H      !"#$%&'()*+,-./012345 ;>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abdefhklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     #" TRACKERS  `MODULES  `DESKTOP INF g`>TEXT  l`ESAMPLES 1  o` SAMPLES 2  |` SAMPLES OWN `$5 VFj  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*q./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#%&'(*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~{      !"#$%&(*+,0123456789;<=@ABCEFGHIJKLMNOPQRSTUVWXYZ[\]_`abcdefghrstuvwxyz{|}~       !"#$%&'()*+,-./23458;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX[\]^_bceghijklmnopqrstuvw}z~B oB       !"#$%&'()*+,-./0123456789:;<=>?@ACEFGHIKLNOQRTUVWXYZ[\]^_`abcefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a6 efhijklmnopqrstuvwxyz{|~                         ! " $ % & ' ( ) * , - . / 1 2 3 5 6 7 8 9 : < > ? @ A B C D E F G H I J K L M O P Q R S T U V X Y Z [ \ ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z | }                             ! " $ % & ' ( ) * + , - . / 0 1 2 3 5 7 8 9 : ; < = > ? @ A B C D E F G H I K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d f g h i j k l n o p q r s t u v w x z { | } ~                           ! # % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ B C D E F G H I J K L N O P Q R S T V W X Y Z [ \ ] ^ _ ` b c d e f g h i j k l m n p q r t u v w x y z { | } ~                            " # $ % & ' ( * + , - . 0 1 2 3 4 5 6 8 9 : ; < = > @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . {0 1 2 3 4 5 7 8 : ; < = > @ A H D E F G I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   i       "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]^_`abcfghijklmnopqrstuvwxz{|}~     !"#$%&()*+,-./0123456789:;<=>?@ABCEFGHIJKLMNOPQRSTUVXYZ[\]^_Qbdefghjklmnopqrstuvwxyz{|}~     !"#$%&()*+,-./013456789:;<=>?@ABDFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012346789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~4v<=>?@ABCDEFGHIKLMNOPTUVWXYZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~     !"$%&'()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklpqrstuvwxyz{|}~     < !"#$%&'()*+,-./03569;<=?@ABCDEFGHIJKMNOPQRUVWXYZ[\]_`cdefgh?npstuvwxz}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn'pqrsuvwxy|}~      !"#$%&}()*+,-./01234567A9:;<=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`adcefghijklmnopqrstuvwxyz|~@      !"#$%&'()*+,-./012345689:;<=>EBCDIFGHJ      !"#$%&'()*+,-./023478:<Fcdeghijklmoprstvwyz{|}   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*q./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#%&'(*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~{      !"#$%&(*+,0123456789;<=@ABCEFGHIJKLMNOPQRSTUVWXYZ[\]_`abcdefghrstuvwxyz{|}~       !"#$%&'()*+,-./23458;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX[\]^_bceghijklmnopqrstuvw}z~B oB       !"#$%&'()*+,-./0123456789:;<=>?@ACEFGHIKLNOQRTUVWXYZ[\]^_`abcefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a6 efhijklmnopqrstuvwxyz{|~                         ! " $ % & ' ( ) * , - . / 1 2 3 5 6 7 8 9 : < > ? @ A B C D E F G H I J K L M O P Q R S T U V X Y Z [ \ ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z | }     o                        ! " $ % & ' ( ) * + , - . / 0 1 2 3 5 7 8 9 : ; < = > ? @ A B C D E F G H I K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d f g h i j k l n o p q r s t u v w x z { | } ~                           ! # % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ B C D E F G H I J K L N O P Q R S T V W X Y Z [ \ ] ^ _ ` b c d e f g h i j k l m n p q r t u v w x y z { | } ~                            " # $ % & ' ( * + , - . 0 1 2 3 4 5 6 8 9 : ; < = > @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                             ! " # $ % & ' ( ) * + , - . {0 1 2 3 4 5 7 8 : ; < = > @ A H D E F G I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   i       "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMOPQRSTUVWXYZ[\]^_`abcfghijklmnopqrstuvwxz{|}~     !"#$%&()*+,-./0123456789:;<=>?@ABCEFGHIJKLMNOPQRSTUVXYZ[\]^_Qbdefghjklmnopqrstuvwxyz{|}~     !"#$%&()*+,-./013456789:;<=>?@ABDFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012346789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~<=>?@ABCDEFGHIKLMNOPTUVWXYZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~r     !"$%&'()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklpqrstuvwxyz{|}~     < !"#$%&'()*+,-./03569;<=?@ABCDEFGHIJKMNOPQRUVWXYZ[\]_`cdefgh?npstuvwxz}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn'pqrsuvwxy|}~      !"#$%&}()*+,-./01234567A9:;<=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`adcefghijklmnopqrstuvwxyz|~@      !"#$%&'()*+,-./012345689:;<=>EBCDIFGHJ      !"#$%&'()*+,-./023478:<Fcdeghijklmoprstvwyz{|} PACKERS2  `FDT  )`UPLOAD  N`mDOWNLOAD  Q`nLAME  `oGE_UTIL  <`0H_D_U  @`9PARTY TXT (`d LHARC  `DEMOS  #`PACKERS1  l`TEST  4`zUDSFILESTXT W`|EDGE  ``ASKER  `OSTCLUSDAT <`OSTCLU0DAT U`DITOR OBS /`OSTCLU1DAT a'8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #4,$ff8a24 addq.l #4,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 2 move.w BD_ycnt(a0),$ff8a38 | restore ycount move.l BD_src(a0),$ff8a24 | restore source move.l BD_dst(a0),$ff8a32 | restore destination addq.l #6,$ff8a24 addq.l #6,$ff8a32 move.b #$c0,$ff8a3c | linenum blit plane 3 .void2 *** restore registers movem.l (sp)+,d0-a1 | 2*8+3 = 19 rte col_interupt_2 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_3,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 = 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_3,$120.w move.b tim_b_3,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3 = 19 bclr #0,$fa0f | avsluta timer b move.w #$2300,sr *! * blitt-rutiner hr (2) * *! *** restor[e registers movem.l (sp)+,d0-a1 | 2*8+3 = 19 rte col_interupt_3 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_4,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 = 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_4,$120.w move.b tim_b_4,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w | 2*8+3 = 19 bclr #0,$fa0f | avsluta timer b movem.l (sp)+,d0-a1 | 2*8+3 = 19 rte col_interupt_4 movem.l d0-a1,-(sp) | 2*10+2 = 22 move.l pal_5,a0 | 5 movem.l (a0),d1-d7/a1 | 2*8+3 19 move.w #$8209,a0 | 3 clr.b $fa1b.w move.l int_5,$120.w move.b tim_b_5,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 | 2 sub.b (a0),d0 | 2 bne.s .loop | 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_5 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_6,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_6,$120.w move.b tim_b_6,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_6 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_7,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_7,$120.w move.b tim_b_7,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_7 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_8,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_8,$120.w move.b tim_b_8,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte col_interupt_8 movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_9,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 clr.b $fa1b.w move.l int_9,$120.w move.b tim_b_9,$fa21.w move.b #8,$fa1b.w .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte *+-F+ *| Horisontal blank routines | *+-F+ SOON_UPPER move.w #$2100,sr | INIT REMOVAL OF UPPER BORDER dcb.w 200,$4e71 | RR EJ rte | KOMMER ALDRIG HIT HBL_UPPER SUBQ.W #1,TOP_COUNT BEQ.S .CONT RTE .CONT clr.b $fa1b.w move.l int_1,$120.w move.b tim_b_1,$fa21.w move.b #8,$fa1b.w dcb.w 92-16-5-6*8-2-2-3-3,$4E71 | KAN ANVNDAS move.l a0,-(sp) 3 move.l pal_1,a0 5 move.l (a0)+,$f8240.w 6 move.l (a0)+,$f8244.w move.l (a0)+,$f8248.w move.l (a0)+,$f824c.w move.l (a0)+,$f8250.w move.l (a0)+,$f8254.w move.l (a0)+,$f8258.w move.l (a0)+,$f825c.w move.l (sp)+,a0 3 MOVE.B #0,$F820A.W ADDQ.L #6,SP MOVE.B #2,$F820A.W bclr #0,$fa0f avsluta timer b RTE HBL_UPPER_RASTER_ON_1 SUBQ.W #1,TOP_COUNT BEQ.S .CONT RTE .CONT clr.b $fa1b.w move.l int_1,$120.w move.b tim_b_1,$fa21.w move.b #8,$fa1b.w dcb.w 92-16-5-6*8-2-2-3-3,$4E71 | KAN ANVNDAS move.l a0,-(sp) | 3 nops move.l pal_1,a0 | 5 move.l (a0)+,$f8240.w | 6 move.l (a0)+,$f8244.w move.l (a0)+,$f8248.w move.l (a0)+,$f824c.w move.l (a0)+,$f8250.w move.l (a0)+,$f8254.w move.l (a0)+,$f8258.w move.l (a0)+,$f825c.w move.l (sp)+,a0 | 3 MOVE.B #0,$F820A.W ADDQ.L #6,SP MOVE.B #2,$F820A.W bclr #0,$fa0f avsluta timer b movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_row1,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 move.l #HBL_UPPER,$68.w .loop2 move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop2 3 check for border .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 bclr #0,$fa0f avsluta timer b movem.l (sp)+,d0-a1 2*8+3 19 rte RASTER_ON_ROW_228 ;(soon lower) movem.l d0-a1,-(sp) 2*10+2 22 move.l pal_228,a0 5 movem.l (a0),d1-d7/a1 2*8+3 19 move.w #$8209,a0 3 .loop move.b (a0),d0 2 sub.b (a0),d0 2 bne.s .loop 3 .border movem.l d1-d7/a1,$f8240.w 2*8+3 19 movem.l (sp)+,d0-a1 2*8+3 19 MOVE.B #0,$FA1B.W MOVE.L #LO_BORDER,$120.W MOVE.B #1,$FA21.W MOVE.B #8,$FA1B.W bset #7,$fa11.w BCLR #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER MOVE.W #$2300,SR dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT SOON_RASTER_ON_229 ;(soon lower) MOVE.B #0,$FA1B.W MOVE.L #RASTER_ON_229,$120.W MOVE.B #1,$FA21.W MOVE.B #8,$FA1B.W bset #7,$fa11.w BCLR #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER MOVE.W #$2300,SR dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT RASTER_ON_229 MOVE.B #0,$FA1B.W 4 bclr #7,$fa11.w dcb.w 61-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) 9*2+2 20 move.l pal_229,a0 5 movem.l (a0),d0-d7 8*2+3 19 movem.l d0-d7,$ff8240 8*2+3 19 19 * 128 NOP:AR MOVE.B #0,$F820A.W | REMOVE LOWER BORDER MOVE.B #0,$FA1B.W MOVE.B #2,$F820A.W movem.l (sp)+,d0-d7/a0 9*2+3 21 addq.l #6,sp MOVE.L #Blackout,$120.W MOVE.B #40,$FA21.W MOVE.B #8,$FA1B.W dcb.w 68-21-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) move.l #poangtavla,-(sp) | stt bildminnes adressen move.b 1(sp),$f8205 | Video address pointer (High byte) move.b 2(sp),$f8207 | Video address pointer (Mid byte) move.b 3(sp),$f8209 | Video address pointer (Low byte) addq.l #4,sp movem.l poangpal,d0-d7 movem.l d0-d7,$ff8240 movem.l (sp)+,d0-d7/a0 bclr #0,$fa0f 5 avsluta timer b rte SOON_LO_BORDER MOVE.B #0,$FA1B.W MOVE.L #LO_BORDER,$120.W MOVE.B #1,$FA21.W MOVE.B #8,$FA1B.W bset #7,$fa11.w BCLR #0,$FA0F.W | INIT REMOVAL OF LOWER BORDER MOVE.W #$2300,SR dcb.w 128,$4E71 | RR EJ rte | KOMMER ALDRIG HIT LO_BORDER MOVE.B #0,$F820A.W | REMOVE LOWER BORDER MOVE.B #0,$FA1B.W MOVE.B #2,$F820A.W addq.l #6,sp MOVE.L #Blackout,$120.W MOVE.B #40,$FA21.W MOVE.B #8,$FA1B.W bclr #7,$fa11.w dcb.w 68-5-5,$4E71 | Free time movem.l d0-d7/a0,-(sp) move.l #poangtavla,-(sp) | stt bildminnes adressen move.b 1(sp),$f8205 | Video address pointer (High byte) move.b 2(sp),$f8207 | Video address pointer (Mid byte) move.b 3(sp),$f8209 | Video address pointer (Low byte) addq.l #4,sp movem.l poangpal,d0-d7 movem.l d0-d7,$ff8240 movem.l (sp)+,d0-d7/a0 bclr #0,$fa0f avsluta timer b rte Blackout MOVE.B #0,$FA1B.W clr.l $f8240.w clr.l $f8244.w clr.l $f8248.w clr.l $f824c.w clr.l $f8250.w clr.l $f8254.w clr.l $f8258.w clr.l $f825c.w bclr #0,$fa0f avsluta timer b rte *+-F+ *| Border data and bss area | *+-F+ section data S_BUFFER DS.B 52 SAVED REGISTERS TOP_COUNT DC.W 34 section text *I * * * * * Modulspelarrutiner * * * * * *I section text *DATLEN EQU 40 ; Avstnd mellan VOICE1 och VOICE2 *FREQUENCY_SEED EQU 4685596 *TONES EQU 3 | mellansteg minst 1 ; Minne = TONES*36*256+22000 ; Manipulate samples r modifierad hr, clearar sista biten istllet ; fr shiftande. * Frequency_seeds * - * 4685596 > 16 kHz basfrekvens * 5602486 > 20 kHz basfrekvens * 7012352 > 25 kHz basfrekvens * Kommandon som supportras * - * 0 - Arpeggio/Normal Play * 1 - Slide up * 2 - Slide down * 3 - Tone Portamento * 4 - Vibrato * 5 - Tone Portamento + volume slide * 6 - Vibrato + volume slide * 9 - Set sample offset * A - Volume slide * B - Position jump * C - Set volume * D - Pattern break * EA - Fine volume slide up * EB - Fine volume slide down * EC - Notecut * F - Set speed *FQ EQU 50066 SECTION TEXT *CWP * INIT * jsr MAKE_FREQLIST_VALUELIST * * lea SPLBANK,a0 * jsr manipulate_samples * * lea SNGFIL,a0 ; pekare p lten * lea SPLBANK+4,a1 ; pekare p Samplingsbanken+4 * jsr init_player * * lea BUFFERT,a0 ; pekare p bufferten *  jsr init_driver * move.w #$37,Jump_pos ; STARTPOSITION (0=default) * EN GNG PER VBL * jsr player * jsr MUSIKRUTINEN * AVSLUTNING * jsr MUSIKRUTINEN+8 section data MUSIKRUTINEN: incbin 'MORTICA.UMP' even SNGFIL incbin 'OBS_6.SNG' even SPLBANK incbin 'OBS_6.SBK' Section bss BUFFERT ds.b TONES*36*256+22000+2000 DS.B 10 * JINGLAR * - * Jingelposition lggs i "Jingelpos". Jingelpos r -1 nr ingen jingel * spelas. * NDRING AV SPELNINGSPOSITION * - * Positionen lggs i "Jump_pos". Jump_pos blir -1 nr positionen r * ndrad (kan bli frdrjd pga Jingel). * MATNING AV LJUDEFFEKT * - * Startpositionen lgges i MUSIKRUTINEN+92 och STOPPOSITIONEN lgges i * MUSIKRUTINEN+156. * Samplingen ska vara en 8-bitars stereosampling (1 byte data fr vnster * kanal och en byte data fr hger) i 12.5 kHz. Amplituden fr max vara * -42 till +42. * Efter en sampling ska det finnas en tom area p 500 bytes. * BRJAN AV DATAN * Section text manipulate_samples move.l 4(a0),d0 ; startpos spl1 move.l -12(a0,d0.w),d1 ; endpos splX, rcker med .w hr. adda.l d0,a0 ; pekar p brjan sub.l d0,d1 add.l #1000-1,d1 ; antal bytes moveq #8,d0 lea MUSIKRUTINEN,a1 sub.w 350(a1),d0 ; antal steg som ska skiftas. .loop bclr.b #0,(a0)+ subq.l #1,d1 bpl .loop rts init_driver lea FREQLIST,a1 moveq #0,d0 ; 3 extraareor moveq #0,d1 jsr (MUSIKRUTINEN+4) rts init_player move.l a1,SPL_BEG lea VIB_PEK,a2 lea sin,a1 moveq #7,d0 .a move.l a1,(a2)+ dbf d0,.a move.l a0,SNGFILSPEK move.b 5(a0),d0 ; kollar om det r byte/word. move.w #1,B_W cmp.b #"B",d0 beq .byte move.w #2,B_W .byte move.b 6(a0),d0 ; kollar antal stmmor move.w #4,V_AM cmp.b #"4",d0 beq .fyra move.w #8,V_AM .fyra lea 8(a0),a1 move.l a1,POS_PAT ; stller in POS_PAT pekaren. moveq #0,d0 ; stller in restartpekaren. move.b 7(a0),d0 cmpi.b #127,d0 bne .data_ok moveq #0,d0 .data_ok move.w V_AM,d1 mulu.w d1,d0 lea 8(a0,d0.w),a1 move.l a1,RES_POS ; Rknar ut restart adressen lea 8(a0),a0 .loop1 cmp.w #-8,(a0)+ bne.s .loop1 move.l a0,PAT_BEG .loop2 cmp.w #-9,(a0)+ bne.s .loop2 move.l a0,POL_BEG move.w #5,TEMPO move.w #0,T_DBF rts SONG_JUMP tst.w Its_saved beq .out lea MUSIKRUTINEN+12+16*4*4,a0 ; Snk volymen (tones off) moveq.l #0,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ clr.w P_DBF clr.w T_DBF move.l SNGFILSPEK,d2 add.l #8,d2 moveq.l #0,d0 move.w Jump_pos,d0 move.w V_AM,d1 mulu.w d1,d0 add.l d0,d2 move.l d2,POS_PAT move.w #-1,Jump_pos .out rts RE_INIT_SONG Retrieve_old_var lea P_DBF,a0 ; spara RKNARE & PATTERNPEKARE lea Saved_stuff,a1 move.w (a1)+,(a0)+ moveq #43-1,d0 .loop1 move.l (a1)+,(a0)+ dbf d0,.loop1 lea EFCT_J,a0 ; spara EFCT_J + VIB_PEK moveq #16-1,d0 .loop2 move.l (a1)+,(a0)+ dbf d0,.loop2 lea MUSIKRUTINEN+12,a0 ; spara FREKVENS move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4,a0 ; spara KOMM_PEK move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*2,a0 ; spara KOMM_END move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*3,a0 ; spara KOMM_SUB move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ lea MUSIKRUTINEN+12+16*4*4,a0 ; spara KOMM_VOL move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,POS_PAT move.w #-1,Its_saved ; tala om att vi har sparat, s att vi ; inte sparar igen utan att ha hmtat frst. move.w #-1,Jingle_end rts INIT_JINGLE tst.w Its_saved beq Set_new_var Save_old_var lea P_DBF,a0 ; spara RKNARE & PATTERNPEKARE lea Saved_stuff,a1 move.w (a0)+,(a1)+ moveq #43-1,d0 .loop1 move.l (a0)+,(a1)+ dbf d0,.loop1 lea EFCT_J,a0 ; spara EFCT_J + VIB_PEK moveq #16-1,d0 .loop2 move.l (a0)+,(a1)+ dbf d0,.loop2 lea MUSIKRUTINEN+12,a0 ; spara FREKVENS move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4,a0 ; spara KOMM_PEK move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*2,a0 ; spara KOMM_END move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*3,a0 ; spara KOMM_SUB move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ lea MUSIKRUTINEN+12+16*4*4,a0 ; spara KOMM_VOL move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l POS_PAT,(a1)+ clr.w Its_saved ; tala om att vi har sparat, s att vi ; inte sparar igen utan att ha hmtat frst. Set_new_var lea MUSIKRUTINEN+12+16*4*4,a0 ; Snk volymen (tones off) moveq.l #0,d0 move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ move.l d0,(a0)+ clr.w P_DBF clr.w T_DBF move.l SNGFILSPEK,d2 add.l #8,d2 moveq.l #0,d0 move.w Jinglepos,d0 move.w V_AM,d1 mulu.w d1,d0 add.l d0,d2 move.l d2,POS_PAT move.w #-1,Jinglepos .out rts SECTION DATA Saved_stuff ds.b 1000 ; fr mycket Its_saved dc.w -1 ; -1, nope 0=yes Jingle_end dc.w -1 ; -1 initiera inte sng ; 0 initiera sng Jinglepos dc.w -1 ; Position dr en jingel ligger som man ; vill trigga. ; Triggas nr denna stts (<>-1) Jump_pos dc.w -1 ; Position dit man vill hoppa i sngen ; direkt eller s fort gingeln r klar. SECTION TEXT player tst.w Jingle_end bmi .no_songinit jsr RE_INIT_SONG .no_songinit tst.w Jinglepos bmi .no_jingel_trig jsr INIT_JINGLE .no_jingel_trig tst.w Jump_pos bmi .no_songjump jsr SONG_JUMP .no_songjump move.w T_DBF,d0 dbf d0,cont move.w P_DBF,d0 dbf d0,.update move.l POS_PAT,a0 cmp.w #-8,(a0) bne .no_restart move.l RES_POS,a0 ; move.w #$70,$ff8240 .no_restart move.w V_AM,d2 subq #1,d2 ; rknare move.w B_W,d1 ; hur mnga gnger extra man ska skifta. lea PAT_PEK,a1 move.l PAT_BEG,d4 .loop1 moveq #0,d3 move.b (a0)+,d3 rol.w #5,d3 rol.w d1,d3 add.l d4,d3 move.l d3,(a1)+ dbf d2,.loop1 move.l a0,POS_PAT moveq #63,d0 .update move.w d0,P_DBF ; Alla patterns r nu rttstllda. Det r bara att skta sjlva spelningen. move.w V_AM,d0 subq #1,d0 lea PAT_PEK,a0 ; r kad lea EFCT_J,a1 ; r kad ? lea VOICE1,a2 move.l POL_BEG,a3 move.l SPL_BEG,a4 lea MUSIKRUTINEN+12,a5 X .loop move.l (a0),a6 moveq #0,d1 cmpi.w #1,B_W beq .byte .word move.w (a6)+,d1 bra .vidare .byte move.b (a6)+,d1 .vidare move.l a6,(a0)+ add.l d1,d1 add.l d1,d1 moveq #0,d2 move.b 2(a3,d1.w),d2 move.l (a3,d1.w),d1 lea COMMAND_TAB,a6 move.l (a6,d2.w),a6 jsr (a6) addq #4,a5 lea DATLEN(a2),a2 dbf d0,.loop move.w TEMPO,T_DBF moveq #-1,d7 ; fr att meddela PUT_FREQ bra PUT_FREQ ; vi ska ej slidea m m. cont move.w d0,T_DBF ** UTFRA KOMMANDONA DO_COMMANDS move.w V_AM,d0 subq #1,d0 lea EFCT_J,a0 lea VOICE1,a2 lea MUSIKRUTINEN+12,a3 .loop move.l (a0)+,a1 jsr (a1) lea DATLEN(a2),a2 addq #4,a3 dbf d0,.loop moveq #0,d7 ** RKNA OM CLOCKCYKLER TILL FREKVENS PUT_FREQ lea VOICE1+4,a0 lea MUSIKRUTINEN+12+2,a1 lea VALUELIST,a2 lea EFCT_J,a3 move.l #Arpeggio,d6 move.w V_AM,d1 subq #1,d1 .loop cmp.l (a3)+,d6 beq .arpeggio .ingen_arp move.w (a0),d0 add.w d0,d0 move.w (a2,d0.w),(a1) addq #4,a1 lea DATLEN(a0),a0 dbf d1,.loop rts .arpeggio tst.w d7 bmi .ingen_arp move.w 32-4(a0),d0 ; hmta arpeggiofrekvensen add.w d0,d0 move.w (a2,d0.w),(a1) addq #4,a1 lea DATLEN(a0),a0 dbf d1,.loop rts .reset_arp ; lea 22-4(a0),a6 ; move.l a6,26-4(a0) ; brja om p nst frsta, nsta VBL bra .ingen_arp * EFFECT_INSTALLS * D1: Innehller patterndatan * A2: Pekar p VOICE-datan * A5: Pekar p kommunikationsvariablerna (UCDM) I_ARP move.w d1,d3 beq .nothing jsr INSTR_TONE move.l #Arpeggio,(a1)+ lea 22(a2),a6 move.l a6,26(a2) ; pekaren p frsta "icke-orginal" ; (orginalet spelas 1VBL innan Arp-rutinen ; kommer till) moveq #0,d3 move.l (a2),a6 ; instrumentheader move.b 17(a6),d3 mulu.w #72,d3 lea FINETUNE_TAB-2,a6 add.w d3,a6 cmp.b #16,d1 blt .org_last ; eller blo move.b d1,d3 and.b #$f,d3 beq .second_org .all_three add.w 30(a2),a6 move.w (a6),20(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f0,d3 ror.w #3,d3 move.w (a6,d3.w),22(a2) ; frekvens 2 move.b d1,d3 and.w #$f,d3 add.w d3,d3 move.w (a6,d3.w),24(a2) ; frekvens 3 rts .org_last add.w 30(a2),a6 move.w (a6),20(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f,d3 add.w d3,d3 move.w (a6,d3.w),22(a2) ; frekvens 3 move.w #-1,24(a2) rts .second_org add.w 30(a2),a6 move.w (a6),22(a2) ; orginalfrekvensen move.b d1,d3 and.w #$f0,d3 ror.w #3,d3 move.w (a6,d3.w),20(a2) ; frekvens 2 move.w #-1,24(a2) rts .nothing move.l #Nothing,(a1)+ bra INSTR_TONE I_UPSL ; done? moveq #0,d3 move.b d1,d3 move.w d3,6(a2) move.l #Slide_Up,(a1)+ bra INSTR_TONE I_DWNSL ; done? moveq #0,d3 move.b d1,d3 move.w d3,6(a2) move.l #Slide_Down,(a1)+ bra INSTR_TONE I_TPORT move.l d1,d3 rol.l #8,d3 and.w #$ff,d3 tst.w d3 beq .dont_change_dest lea FINETUNE_TAB-2,a6 ; ingen finetune? move.w (a6,d3.w),16(a2) ; destination .dont_change_dest ; moveq #0,d3 ; redan gjort move.b d1,d3 beq .dont_change_speed move.w d3,18(a2) ; speed .dont_change_speed move.l d1,d3 swap d3 and.w #$ff,d3 tst.w d3 beq .out move.l SPL_BEG,a6 subq.w #1,d3 rol.w #4,d3 move.b 12(a6,d3.w),4*16*4+2(a5) ; volym .out move.l #Tone_Portamento,(a1)+ rts I_VIB jsr INSTR_TONE move.w 4(a2),38(a2) ; orginalfrekvens move.l #Vibrato,(a1)+ tst.b d1 beq.s .maybe_retrigg move.w d1,d3 lsr.w #4,d3 and.w #$f,d3 move.b d3,35(a2) ; speed move.w d1,d3 and.w #$f,d3 move.w d3,36(a2) ; depth .maybe_retrigg move.l d1,d3 and.l #$ff0,d3 tst.l d3 beq.s .out move.b #0,34(a2) ; restart .out rts I_TPORTVOLSL move.l #Tone_Portamento_w_Volume_slide,(a1)+ bra inhopp I_VIBVOLSL move.l #Vibrato_w_Volume_Slide,(a1)+ bra inhopp I_TREM move.l #Nothing,(a1)+ bra INSTR_TONE I_NOTUSED move.l #Nothing,(a1)+ bra INSTR_TONE I_SPLOFFSET ; done ? jsr INSTR_TONE moveq #0,d3 move.b d1,d3 rol.w #8,d3 add.l d3,16*4(a5) move.l #Nothing,(a1)+ rts I_VOLSLIDE ; done ? move.l #VolumeSlide,(a1)+ inhopp move.b d1,d3 and.w #$f,d3 move.w d3,12(a2) ; sub move.b d1,d3 and.w #$f0,d3 lsr.w #4,d3 move.w d3,14(a2) ; add bra INSTR_TONE I_POS_JMP ; done ? clr.w P_DBF moveq #0,d3 move.b d1,d3 mulu.w V_AM,d3 addq #8,d3 add.l SNGFILSPEK,d3 move.l d3,POS_PAT move.l #Nothing,(a1)+ bra INSTR_TONE I_SETVOL ; done jsr INSTR_TONE move.b d1,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_PBREAK clr.w P_DBF ; done move.l #Nothing,(a1)+ bra INSTR_TONE I_ECOM lea E_COM_TAB,a6 move.l d1,d3 and.w #$f0,d3 ror.w #2,d3 move.l (a6,d3.w),a6 jmp (a6) I_TEMPO ; done subq #1,d1 move.b d1,TEMPO+1 move.b d1,T_DBF+1 move.l #Nothing,(a1)+ bra INSTR_TONE I_STOP_JINGLE clr.w Jingle_end bra INSTR_TONE * E-commands * I_SET_FILTER I_FINESLIDE_UP I_FINESLIDE_DOWN I_GLISSANDO_CONTR I_VIB_WAVEFORM I_SET_FINETUNE I_LOOP I_TREM_WAVEFORM I_NOT_USED I_RETRIG_NOTE move.l #Nothing,(a1)+ bra INSTR_TONE I_FINE_VOL_UP jsr INSTR_TONE move.b d1,d3 and.b #$f,d3 add.b 4*16*4+2(a5),d3 cmp.b #64,d3 ble .ok move.b #64,d3 .ok move.b d3,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_FINE_VOL_DOWN jsr INSTR_TONE move.b d1,d3 and.w #$f,d3 neg.w d3 add.b 4*16*4+2(a5),d3 tst.b d3 bpl .ok move.b #0,d3 .ok move.b d3,4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_NOTECUT jsr INSTR_TONE move.b d1,d3 and.w #$f,d3 beq .now move.w d3,12(a2) ; rknare move.l #Notecut,(a1)+ rts .now clr.b 4*16*4+2(a5) move.l #Nothing,(a1)+ rts I_NOTEDELAY I_P_DELAY I_INV_LOOP move.l #Nothing,(a1)+ bra INSTR_TONE * TA INSTR/TONE INSTR_TONE ; move.w #$700,$ff8240 move.l d1,d2 swap d2 lsr.w #8,d2 and.l #$ff,d2 ; tonnummer beq .vidare move.w d2,30(a2) ; spara undan tonnummer fr arpeggio .vidare move.l d1,d3 swap d3 and.l #$ff,d3 ; instrumentnr tst.w d3 beq .no_new_instr subq #1,d3 ; nr > offset rol.w #4,d3 ; offset lea (a4,d3.w),a6 move.l a6,(a2) ; spara pekare p instrumentheadern lea -4(a4),a6 ; F med headern ** STARTPOSITIONEN STTS LNGRE NER move.l (a4,d3.w),d5 add.l a6,d5 move.l d5,16*4*1(a5) ; Retrigg move.l 4(a4,d3.w),d5 add.l a6,d5 move.l d5,16*4*2(a5) ; Stopp move.l 8(a4,d3.w),d5 move.l d5,16*4*3(a5) ; Loop move.b 12(a4,d3.w),16*4*4+2(a5) ; Volym .no_new_instr tst.w d2 beq .no_new_tone move.l (a2),a6 move.l (a6),d5 add.l SPL_BEG,d5 subq #4,d5 move.l d5,16*4(a5) ; retrigg moveq #0,d4 move.b 13(a6),d4 ; finetune .finetune lea FINETUNE_TAB-2,a6 ; -2 pga att freq startar p 1. mulu.w #72,d4 ; rtt tabell add.w d2,d4 ; rtt tal move.w (a6,d4.w),d4 ; Frekvenscykler move.w d4,4(a2) ; ton i amigaklockcykler .no_new_tone rts * EFFECT_JUMPS * A2 pekar p DATAN * A3 pekar p KOMMUNIKATIONSVEKTORERNA (UCDM) Nothing rts Arpeggio lea 26(a2),a5 move.l (a5),a4 ; hmta pekare cmp.l a4,a5 bne.s .loopa_ej lea 20(a2),a4 ; peka p brjan .loopa_ej cmp.w #-1,(a4) bne.s .loopa_ej2 lea 20(a2),a4 .loopa_ej2 move.w (a4)+,32(a2) ; ut med frekvensen... move.l a4,(a5) ; spara pekare rts Slide_Up move.w 4(a2),d1 sub.w 6(a2),d1 ; lgre tal ger hgre frekvens cmpi.w #108,d1 bge.s .ej_verslag move.w #108,d1 .ej_verslag move.w d1,4(a2) rts Slide_Down move.w 4(a2),d1 add.w 6(a2),d1 ; hgre tal ger lgre frekvens cmpi.w #907,d1 ble.s .ej_verslag move.w #907,d1 .ej_verslag move.w d1,4(a2) rts Tone_Portamento move.w 16(a2),d1 ; ny frekvens move.w 4(a2),d2 ; gammal frekvens cmp.w d1,d2 blt .slide_down (mao slide_up talet) .slide_up sub.w 18(a2),d2 ; speed cmp.w d1,d2 blt.s .last .out move.w d2,4(a2) rts .slide_down add.w 18(a2),d2 cmp.w d1,d2 blt.s .out .last move.w d1,4(a2) rts Vibrato move.l 4*8-4(a0),a4 ; vib-pekare moveq #0,d1 move.b 34(a2),d1 ; pekare i vib-tab and.w #$1f,d1 moveq #0,d2 move.b (a4,d1.w),d2 ; vib_tab vrde mulu.w 36(a2),d2 lsr.l #7,d2 move.w 38(a2),d3 ; orginalfrekvens move.b 34(a2),d1 cmp.b #$1f,d1 bge.s .minus .plus add.w d2,d3 bra.s .more .minus sub.w d2,d3 .more cmp.w #907,d3 ble.s .ok1 move.w #907,d3 .ok1 cmp.w #108,d3 bge.s .ok2 move.w #108,d3 .ok2 move.w d3,4(a2) ; ny frekvens add.b 35(a2),d1 and.b #$7f,d1 move.b d1,34(a2) ; ny pekare i vib-tab rts Tone_Portamento_w_Volume_slide bsr.s Tone_Portamento bra.s VolumeSlide Vibrato_w_Volume_Slide bsr.s Vibrato bra.s VolumeSlide Tremolo rts VolumeSlide moveq #0,d1 move.b 16*4*4+2(a3),d1 add.w 14(a2),d1 ; upp sub.w 12(a2),d1 ; ner cmpi.w #64,d1 ble.s .ej_verslag moveq #64,d1 .ej_verslag tst.w d1 bpl.s .ej_underslag moveq #0,d1 .ej_underslag move.b d1,16*4*4+2(a3) rts Notecut subi.w #1,12(a2) bne.s .no_cut clr.b 16*4*4+2(a3) .no_cut rts SECTION BSS SNGFILSPEK ds.l 1 ; Pekar p sngfilen. B_W ds.w 1 ; 1=byte, 2=word V_AM ds.w 1 ; Antal stmmor POS_PAT ds.l 1 ; Pekar p POS_PAT TABELLEN RES_POS ds.l 1 ; Var POS_PAT ska hamna vid restart. PAT_BEG ds.l 1 ; Pekar p brjan av patternsen. POL_BEG ds.l 1 ; Pekar p brjan av datapoolen. SPL_BEG ds.l 1 ; Pekar p brjan av samplingsbanken+4 !!! *** SPARA UNDAN SKITEN HRIFRN OCH NER VID JINGLAR *** 174 BYTES VID FYRA STMMOR *** VEN SPARA UNDAN UCDM-VARIABLERNA OCH 64 EFTER EFCT_J *** VI BEHVER INTE SPELA VBL:EN VI NDRAR, BARA RENSA. P_DBF ds.w 1 ; DBF fr patternlngd TEMPO ds.w 1 ; Tempo-1 T_DBF ds.w 1 ; Tempo DBF, arbetsregistret. PAT_PEK ds.l 8 ; Pekar i patternsen fr de olika stmmorna. VOICE1 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE2 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE3 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE4 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE5 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE6 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE7 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth VOICE8 ds.l 1 ; Adressen till instrumentets header ds.w 1 ; Frekvens i Amiga klockcykler ds.b 10 ; Effect_Data ds.w 1 ; 3: Destinationsfrekvens i Amigaklockcykler ds.w 1 ; 3: Slidespeed ds.w 3 ; 0: 3 Arpeggiofrekvenser ds.l 1 ; 0: Pekare p ny Arpeggiofrekvens fr nsta frame. ds.w 1 ; 0: Last frequency-hit, for Arpeggiostart ds.w 1 ; 0: Arpeggiofrekvens, s sparar vi inte ver den andre. ds.w 1 ; 4: Pekare & Speed ds.w 1 ; 4: Depth ds.w 1 ; 4: Orginalfrekvens EFCT_J ds.l 8 ; Effect_Jump. VIB_PEK ds.l 8 ; Pekar p rtt vgform fr vibrato SECTION DATA COMMAND_TAB dc.l I_ARP dc.l I_UPSL dc.l I_DWNSL dc.l I_TPORT dc.l I_VIB dc.l I_TPORTVOLSL dc.l I_VIBVOLSL dc.l I_TREM dc.l I_STOP_JINGLE dc.l I_SPLOFFSET dc.l I_VOLSLIDE dc.l I_POS_JMP dc.l I_SETVOL dc.l I_PBREAK dc.l I_ECOM dc.l I_TEMPO E_COM_TAB dc.l I_SET_FILTER dc.l I_FINESLIDE_UP dc.l I_FINESLIDE_DOWN dc.l I_GLISSANDO_CONTR dc.l I_VIB_WAVEFORM dc.l I_SET_FINETUNE dc.l I_LOOP dc.l I_TREM_WAVEFORM dc.l I_NOT_USED dc.l I_RETRIG_NOTE dc.l I_FINE_VOL_UP dc.l I_FINE_VOL_DOWN dc.l I_NOTECUT dc.l I_NOTEDELAY dc.l I_P_DELAY dc.l I_INV_LOOP FINETUNE_TAB: ; Tuning 0, Normal dc.w 856,808,762,720,678,640,604,570,538,508,480,453 dc.w 428,404,381,360,339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143,135,127,120,113 ; Tuning 1 dc.w 850,802,757,715,674,637,601,567,535,505,477,450 dc.w 425,401,379,357,337,318,300,284,268,253,239,225 dc.w 213,201,189,179,169,159,150,142,134,126,119,113 ; Tuning 2 dc.w 844,796,752,709,670,632,597,563,532,502,474,447 dc.w 422,398,376,355,335,316,298,282,266,251,237,224 dc.w 211,199,188,177,167,158,149,141,133,125,118,112 ; Tuning 3 dc.w 838,791,746,704,665,628,592,559,528,498,470,444 dc.w 419,395,373,352,332,314,296,280,264,249,235,222 dc.w 209,198,187,176,166,157,148,140,132,125,118,111 ; Tuning 4 dc.w 832,785,741,699,660,623,588,555,524,495,467,441 dc.w 416,392,370,350,330,312,294,278,262,247,233,220 dc.w 208,196,185,175,165,156,147,139,131,124,117,110 ; Tuning 5 dc.w 826,779,736,694,655,619,584,551,520,491,463,437 dc.w 413,390,368,347,328,309,292,276,260,245,232,219 dc.w 206,195,184,174,164,155,146,138,130,123,116,109 ; Tuning 6 dc.w 820,774,730,689,651,614,580,547,516,487,460,434 dc.w 410,387,365,345,325,307,290,274,258,244,230,217 dc.w 205,193,183,172,163,154,145,137,129,122,115,109 ; Tuning 7 dc.w 814,768,725,684,646,610,575,543,513,484,457,431 dc.w 407,384,363,342,323,305,288,272,256,242,228,216 dc.w 204,192,181,171,161,152,144,136,128,121,114,108 ; Tuning -8 dc.w 907,856,808,762,720,678,640,604,570,538,508,480 dc.w 453,428,404,381,360,339,320,302,285,269,254,240 dc.w 226,214,202,190,180,170,160,151,143,135,127,120 ; Tuning -7 dc.w 900,850,802,757,715,675,636,601,567,535,505,477 dc.w 450,425,401,379,357,337,318,300,284,268,253,238 dc.w 225M,212,200,189,179,169,159,150,142,134,126,119 ; Tuning -6 dc.w 894,844,796,752,709,670,632,597,563,532,502,474 dc.w 447,422,398,376,355,335,316,298,282,266,251,237 dc.w 223,211,199,188,177,167,158,149,141,133,125,118 ; Tuning -5 dc.w 887,838,791,746,704,665,628,592,559,528,498,470 dc.w 444,419,395,373,352,332,314,296,280,264,249,235 dc.w 222,209,198,187,176,166,157,148,140,132,125,118 ; Tuning -4 dc.w 881,832,785,741,699,660,623,588,555,524,494,467 dc.w 441,416,392,370,350,330,312,294,278,262,247,233 dc.w 220,208,196,185,175,165,156,147,139,131,123,117 ; Tuning -3 dc.w 875,826,779,736,694,655,619,584,551,520,491,463 dc.w 437,413,390,368,347,328,309,292,276,260,245,232 dc.w 219,206,195,184,174,164,155,146,138,130,123,116 ; Tuning -2 dc.w 868,820,774,730,689,651,614,580,547,516,487,460 dc.w 434,410,387,365,345,325,307,290,274,258,244,230 dc.w 217,205,193,183,172,163,154,145,137,129,122,115 ; Tuning -1 dc.w 862,814,768,725,684,646,610,575,543,513,484,457 dc.w 431,407,384,363,342,323,305,288,272,256,242,228 dc.w 216,203,192,181,171,161,152,144,136,128,121,114 sin DC.B $00,$18,$31,$4A,$61,$78,$8D,$A1,$B4,$C5,$D4,$E0,$EB,$F4,$FA,$FD DC.B $FF,$FD,$FA,$F4,$EB,$E0,$D4,$C5,$B4,$A1,$8D,$78,$61,$4A,$31,$18 EVEN FREQTAB dc.w 108,113,120,127,135,143,151,160,170,180,190,202,214 dc.w 226,240,254,269,285,302,320,339,360,381,404,428 dc.w 453,480,508,538,570,604,640,678,720,762,808,856 dc.w 907 FREQLIST ds.l 800 ; att skicka en gng i brjan VALUELIST dcb.w 109,0 BEGIN_VALUELIST Xz set 0 rept 907-108 dc.w Xz Xz set Xz+4 endr DS.L 1000 section text MAKE_FREQLIST_VALUELIST lea FREQTAB,a0 lea FREQLIST,a1 move.l #FREQUENCY_SEED,d0 ; fr move.w #36,d4 .ta_en_ton move.l #TONES,d1 ; antal steg till nsta ton (mellansteg+1) moveq #0,d2 move.w 2(a0),d2 moveq.l #0,d3 move.w (a0),d3 swap d3 ; utgngsfrekvens vid kningen sub.w (a0)+,d2 ; antal klockticks till nsta ton rol.w #8,d2 ; vi vill ha decimaler divu.w d1,d2 ; inkrement * 256 and.l #$f,d2 rol.l #8,d2 ; s att vi kan swappa cmp.l #$10,d2 bge .cont move.l #$10,d2 move.w (a0),d1 sub.w -2(a0),d1 .cont subq.w #1,d1 bmi.s .nsta swap d3 move.l d0,d5 clr.w d5 swap d5 divu.w d3,d5 move.w d5,(a1)+ ; versta wordet i frekvensen move.w d0,d5 divu.w d3,d5 move.w d5,(a1)+ ; lgsta wordet i frekvensen swap d3 add.l d2,d3 bra.s .cont .nsta dbf d4,.ta_en_ton move.l #-1,(a1)+ MAKE_VALUELIST lea BEGIN_VALUELIST,a1 move.w #798,d1 .loop1 move.l a1,d2 sub.l #VALUELIST,d2 ror.l #1,d2 ; offset i longwords frn VALUELIST move.l d0,d5 clr.w d5 swap d5 divu.w d2,d5 move.w d5,d3 move.w d0,d5 divu.w d2,d5 swap d3 move.w d5,d3 ; frekvensen fr offseten i d3 lea FREQLIST+4,a2 .igen cmp.l (a2)+,d3 ; hitta "skarven" ble .igen move.l -(a2),d2 ; =< d3 move.l -(a2),d4 ; > d3 move.l d3,d5 sub.l d2,d3 sub.l d5,d4 cmp.l d3,d4 blt .ta_det_frsta addq.l #4,a2 .ta_det_frsta suba.l #FREQLIST,a2 ; offset frn FREQLIST fr det aktuella. move.w a2,(a1)+ ; spara VALUELIST dbf d1,.loop1 rts * ()()() *I * * * * * DATA + BSS * * * * * *I *+-F+ *| System data and bss area | *+-F+ section data section bss old_vbi ds.l 1 | old vbi pointer new_pal ds.w 16 | new palette pal ds.w 16 | program palette old484 ds.b 1 | old key stats old118 ds.l 1 | old ikbd_vec *+-F+ *| Program data and bss area | *+-F+ section data start_boll dc.w 0 | 0 = off 1=starta demo scroll dc.w 0 | 0 = off 1=starta demo old1_offset dc.l 0 | old offset 1 old2_offset dc.l 0 | old offset 2 old3_offset dc.l 0 | old offset 3 old4_offset dc.l 0 | old offset 4 section bss * program registers pi1_fil ds.l 1 | filnamn fr degasladdaren att lsa pi1_adr ds.l 1 | adress att lsa bilden till pi1_pal ds.l 1 | adress att lsa paletten till Physbase ds.l 1 | Adress till Physbase bana1 ds.l 1 | adress till bana 1 bana2 ds.l 1 | atdress till bana 2 bana3 ds.l 1 | adress till bana 3 Boffset ds.l 1 | offset till Banstart bana ds.b 100800*3 | pinnball 3 screens Sprite1 ds.b 32000 | Sprite screen 1 Tcode ds.b 1 | Tangentbords kod vbi_flag ds.b 1 | Vbi flagga *+-F+ *| Files data and bss area | *+-F+ section data pin dc.b 'PIN.BWS',13,0 even pi1_spr1 dc.b 'SPRITE1.PI1',0 *+-F+ *| Blitter object data and bss area | *+-F+ section data *** Blit data for left lower flipper 6 bytes between data blocks even LLFdata dc.w 0 | source offset POS 0 dc.l 519*168+40 | dest. offset dc.w 32 | source offset POS 1 dc.l 519*168+40 | dest. offset dc.w 64 | source offset POS 2 dc.l 519*168+40 | dest. offset dc.w 96 | source offset POS 3 dc.l 519*168+40 | dest. offset dc.w 128 | source offset POS 4 dc.l 519*168+40 | dest. offset *** Blit data for left higher flipper 6 bytes between data blocks even LHFdata dc.w 0 | source offset POS 0 dc.l 519*168+40 | dest. offset dc.w 32 | source offset POS 1 dc.l 519*168+40 | dest. offset dc.w 64 | source offset POS 2 dc.l 519*168+40 | dest. offset dc.w 96 | source offset POS 3 dc.l 519*168+40 | dest. offset dc.w 128 | source offset POS 4 dc.l 519*168+40 | dest. offset *** Blit data for right lower flipper 6 bytes between data blocks RLFdata dc.w 0 | source offset POS 0 dc.l 519*168+80 | dest. offset dc.w 32 | source offset POS 1 dc.l 519*168+80 | dest. offset dc.w 64 | source offset POS 2 dc.l 519*168+80 | dest. offset dc.w 96 | source offset POS 3 dc.l 519*168+80 | dest. offset dc.w 128 | source offset POS 4 dc.l 519*168+80 | dest. offset *** pos on flippers LFpos dc.w 0 RFpos dc.w 0 *** direction for Flipper animation LFdir dc.b 1 | 0 = up RFdir dc.b 1 | 1 = down *** flag for flippers LFflag dc.b 0 | start driver flag RFflag dc.b 0 | start driver flag *** flipper objects LLF_IMG incbin 'LLF.IMG' | Flippers LHF_IMG incbin 'LHF.IMG' | Flippers RLF_IMG incbin 'RLF.IMG' | Flippers RHF_IMG incbin 'RLF.IMG' | Flippers *+-F+ *| Blitter Chip data and bss area | *+-F+ section data *cwp *** RS Table for Blit data rsreset BD_start rs.w 1 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) rs.w 1 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) BD_src rs.l 1 | $FF8A24 adress to source BD_m1 rs.w 1 | $FF8A28 endmsk1 Left end mask BD_m2 rs.w 1 | $FF8A2A endmsk2 Mid mask BD_m3 rs.w 1 | $FF8A2C endmsk3 Right end mask rs.w 1 | $FF8A2E dstxinc rs.w 1 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) BD_dst rs.l 1 | $FF8A32 dstaddr rs.w 1 | $FF8A36 xcount (words)*4 BD_ycnt rs.w 1 | $FF8A38 ycount y lines rs.b 1 | $FF8A3A hop use source only BD_op rs.b 1 | $FF8A3B op Source rs.b 1 | $FF8A3C linenum BD_skew rs.b 1 | $FF8A3D Skew value rs.w 1 | $FF8A3E Dummy value *** Blit data (1) for Left Lower Flipper BD_LLF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Left Lower Flipper BD_LLF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $f | $FF8A28 endmsk1 Left end mask dc.w $f | $FF8A2A endmsk2 Mid mask dc.w $f | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr  dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) for Left Higher Flipper BD_LHF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Left Higher Flipper BD_LHF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) for Right Lower Flipper BD_RLF1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) for Right Lower Flipper BD_RLF2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 130 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 138 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 16 | $FF8A36 xcount (words)*4 dc.w 55 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) to Repair Background for Ball blitter (RBB) BD_RBB1d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 154 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 154 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) to Repair Background for Ball blitter (RBB) BD_RBB2d dc.w 2 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 154 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w $ffff | $FF8A28 endmsk1 Left end mask dc.w $ffff | $FF8A2A endmsk2 Mid mask dc.w $ffff | $FF8A2C endmsk3 Right end mask dc.w 2 | $FF8A2E dstxinc dc.w 154 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 8 | $FF8A36 xcount (words)*4 dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 3 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) to Blit BallMask (BBM) BD_BBM1d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 1 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) to Blit BallMask (BBM) BD_BBM2d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 1 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (1) to Blit BallSprite (BBS) BD_BBS1d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 7 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value *** Blit data (2) to Blit BallSprite (BBS) BD_BBS2d dc.w 8 | $FF8A20 srcxinc source x inc (2=word aligned) (8=not word aligned) dc.w 152 | $FF8A22 srcyinc na scr_witdh.b-(xcount*2*4-srcxinc) dc.l 0 | $FF8A24 adress to source dc.w 0 | $FF8A28 endmsk1 Left end mask dc.w 0 | $FF8A2A endmsk2 Mid mask dc.w 0 | $FF8A2C endmsk3 Right end mask dc.w 8 | $FF8A2E dstxinc dc.w 160 | $FF8A30 dstyinc a scr_witdh.b-(xcount*2w-srcxinc) dc.l 0 | $FF8A32 dstaddr dc.w 2 | $FF8A36 xcount (words+1) dc.w 16 | $FF8A38 ycount y lines dc.b 2 | $FF8A3A hop use source only dc.b 7 | $FF8A3B op Source dc.b $c0 | $FF8A3C linenum dc.b 0 | $FF8A3D Skew value dc.w 0 | $FF8A3E Dummy value section bss *cwp *** Blit data pointers for blitter BD_LLF1p ds.l 1 | left lower flipper BD_LLF2p ds.l 1 | BD_LHF1p ds.l 1 | left higher flipper BD_LHF2p ds.l 1 | BD_RLF1p ds.l 1 | right lower flipper BD_RLF2p ds.l 1 | BD_RBB1p ds.l 1 | repair background BD_RBB2p ds.l 1 | BD_BBM1p ds.l 1 | blit ball mask BD_BBM2p ds.l 1 | BD_BBS1p ds.l 1 | blit ball sprite BD_BBS2p ds.l 1 | *+-F+ *| Screen data and bss area | *+-F+ section data *** pallette for black screen black dc.l 0,0,0,0,0,0,0,0 *** palette for game screen gamepal dc.w $0,$0700,$0730,$0750,$0770,$0570,$0057,$0240 dc.w $0627,$0,$0222,$0333,$0444,$0555,$0666,$0777 *** palette for game screen poangpal dc.w $0,$0772,$0661,$0037,$0441,$0222,$0500,$0333 dc.w $0330,$0200,$0,$0122,$0444,$0555,$0666,$0777 even *** rotate line data field rotline dc.w 350 | in dc.w 350 | | dc.w 350 | | dc.w 350 | | dc.w 350 | | dc.w 350 | \|/ dc.w 350 | out * _G *| | *| Kalle's ballroutine data and bss area | *|_F| section data fixvars dcb.l 10,0 vars dcb.l 20,0 | TILL FR ATT KUNNA SPARA UNDAN SAKER UTAN ; | ATT BEHVA HITTA P NYA NAMN HELA TIDEN varsad dc.l vars,vars+4*10 rellist dcb.w 3*ppvbl,1 | RELATIVA X-FRFLYTTNINGAR dcb.w 3*ppvbl,1 | RELATIVA Y-FRFLYTTNINGAR dcb.w 3*ppvbl,0 | TRFF / INTE TRFF ds.l 1 | SKERHET VID RENSNING (MSTE VARA{ DR) listcount dc.w 0 periferi rept 2 | FR ATT KUNNA HA OFFSET (VID SKARVTRFF) dc.w 7+3*168,7+2*168,6+1*168,5+0*168 dc.w 4+0*168,3+0*168,2+0*168,1+1*168 dc.w 0+2*168,0+3*168,0+4*168,0+5*168 dc.w 1+6*168,2+7*168,3+7*168,4+7*168 dc.w 5+7*168,6+6*168,7+5*168,7+4*168 endr trfflista dcb.w 20,0 sinlist incbin 'sico5400.sin' atanlist incbin 'atan.bin' x dc.w 150 y dc.w 570 xhast dc.w 40 yhast dc.w 40 xtemp dc.w 0 ytemp dc.w 0 gtemp dc.w 0 korr dc.w 150,570 kvadrantoffs dc.w 2*270,2*180,2*0,2*90 old_d0 dc.l 100 old_what dc.l 100 medel dc.w 0 hits dc.w 0 mater dc.w 0 under dc.w 0 hast dc.w 0 normal dc.w 0 reflekt dc.w 0 stuckflag dc.w 0 skruv dc.w 0 frflytt dc.w 1,0,1,-1,0,-1,-1,-1,-1,0,-1,1,0,1,1,1 nohitcount dc.w 0 * DETTA R LISTAN FR UTFLACKNING OCH KORREKTION AV REFLEKTIONSVINKELN * GRAD 0 1 2 3 4 5 6 7 8 9 dc.w +2*90,+2*89,+2*88,+2*87,+2*86,+2*85,+2*84,+2*83,+2*82,+2*81 dc.w +2*80,+2*79,+2*78,+2*77,+2*76,+2*75,+2*74,+2*73,+2*72,+2*71 dc.w +2*70,+2*69,+2*68,+2*67,+2*66,+2*65,+2*64,+2*63,+2*62,+2*61 dc.w +2*60,+2*59,+2*58,+2*57,+2*56,+2*55,+2*54,+2*53,+2*52,+2*51 dc.w +2*50,+2*49,+2*48,+2*47,+2*46,+2*45,+2*44,+2*43,+2*42,+2*41 dc.w +2*40,+2*39,+2*38,+2*37,+2*36,+2*35,+2*34,+2*33,+2*32,+2*31 dc.w +2*30,+2*29,+2*28,+2*27,+2*26,+2*25,+2*24,+2*23,+2*22,+2*21 dc.w +2*20,+2*19,+2*18,+2*17,+2*16,+2*15,+2*14,+2*13,+2*12,+2*11 dc.w +2*10,+2*09,+2*08,+2*07,+2*06,+2*05,+2*04,+2*03,+2*02,+2*01 dc.w -2*00,-2*00,-2*00,-2*00,-2*01,-2*01,-2*02,-2*02,-2*03,-2*03 dc.w -2*04,-2*04,-2*05,-2*05,-2*05,-2*05,-2*05,-2*05,-2*05,-2*05 dc.w -2*04,-2*04,-2*03,-2*03,-2*02,-2*02,-2*01,-2*01,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 dc.w -2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00,-2*00 flacklist dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00,+2*00 dc.w +2*00,+2*00,+2*01,+2*01,+2*02,+2*02,+2*03,+2*03,+2*04,+2*04 dc.w +2*05,+2*05,+2*05,+2*05,+2*05,+2*05,+2*05,+2*05,+2*04,+2*04 dc.w +2*03,+2*03,+2*02,+2*02,+2*01,+2*01,+2*00,+2*00,+2*00,+2*00 dc.w -2*00,-2*01,-2*02,-2*03,-2*04,-2*05,-2*06,-2*07,-2*08,-2*09 dc.w -2*10,-2*11,-2*12,-2*13,-2*14,-2*15,-2*16,-2*17,-2*18,-2*19 dc.w -2*20,-2*21,-2*22,-2*23,-2*24,-2*25,-2*26,-2*27,-2*28,-2*29 dc.w -2*30,-2*31,-2*32,-2*33,-2*34,-2*35,-2*36,-2*37,-2*38,-2*39 dc.w -2*40,-2*41,-2*42,-2*43,-2*44,-2*45,-2*46,-2*47,-2*48,-2*49 dc.w -2*50,-2*51,-2*52,-2*53,-2*54,-2*55,-2*56,-2*57,-2*58,-2*59 dc.w -2*60,-2*61,-2*62,-2*63,-2*64,-2*65,-2*66,-2*67,-2*68,-2*69 dc.w -2*70,-2*71,-2*72,-2*73,-2*74,-2*75,-2*76,-2*77,-2*78,-2*79 dc.w -2*80,-2*81,-2*82,-2*83,-2*84,-2*85,-2*86,-2*87,-2*88,-2*89 matris incbin d:\editxile\mat3.pqm incbin d:\editxile\mat2.pqm incbin d:\editxile\mat1.pqm section bss diff ds.w 1 perif_grad ds.w 32 rotlist ds.b 8600 *+-F+ *| Score and Infotable data and bss area | *+-F+ section data poangtavla incbin 'POANG.BWS' end   "$%')+.02479;>@CFHKNPSVY\_bfilosvz} "',28=CHNTZ`fkqx~ &.5=DLS[cjrz‚Š’š¢ª³»!*3 ?@t`qM> ?@4@Q] > ?@ p` Q  Y> ?@ pp0Q"> ?@ Q ?`0Q ?@``0Q ?@@À`Q   ? A `Q   ?C ` Q3   ?B ` Q#   ?@@À `Qk4?@  ?@ `QH7?@  ?` `ŀ;P|  ?@ `Pd  ?@ `@I  ?@ `@@I,  ?@ `` 6 JwЈ  ?@ ` I`П  ?@ ``I  ?@ ``I  ?@ `0I   ?@ `0I   <@ ``I   9~@ `I   0|@ ` I0   #x@ ` I'   +p@ `Io0?@  'p@ `IO0?@  'p@ `B`  ϟ'p@ `B`  ϻ'p@ `|>@A  'p@ `?@@A?  ϻ'p@ `` A  Ϲ'p@ ` A  Ϲ'p@ ``A   'p@ `x`A`  'p@ `~0A   }'p@ `p0A ?  u'p@ `<A @  1'p@ `A P  1'p@ ` A7   ϱ'p@ ` A$   ϱ'p@ ` 3A`??@$  ϑ'p@ `->A@???@Z<  Ϙ'p@ `? @|%~  'p@ `5?8 2`$~  ϐ'p@ `-@9|Z<  ϐ'p@ `` @@9/|%  ϰ'p@ `@ ?@9wÂ<Ќ  !'p@ `7w@@9w!v@  !'p@ `>` 9~ ?  #'p@ `" / 9l"`?  #'p@ `  9?  #'p@ `"=w,w@ 9"w?P  'p@ ``9?   'p@ `f"`'9"0   &p@ `^ 9?@   &p@ `C?h 9" w`?   &p@ `09 | |?@  'p@ ` q}09& ÀG  &p@ ` w` ?9 <   &p@ ` `9 |8   'p@ `  9 H|0p   &p@ ` 9 xp0   'p@ `  x9H{@   0'p@ ` p x9H{   0%p@ ` w`97 x  8%p@ ` ? 9' H80  %p@ ` 9/ p  %p@ ` ?9' p0  %p@ ` 9c0?@@  %p@ `0?9I0?@  9%p@ `3 9L ?@f  9$p@ `99N ?@8  9%p@ ` y 2`8`  9!p@ `82a`   9!p8@ `2C@  = p@ `9?2N~  = p@ `; 2\|  Ͻ Bp@ `9|00L  ϟ `p@ `900  ϟ `p8@ `q  ϟ `p8@ @0q  ϟ `p@ P0xq.> p@ D8|q < px@ ">qD8| p8@ q p p8@ i@ p@ 0i p@ @i@ p8@ V ij p8@ ~i~ p8@ V?aj pX )?`a  pX a h pX ,a4? pX aX? pX `Y@ pX C@<Y€< pD0Y  pL0Ph?Y  pL0(?Y(? pD8 Y?( pIB8 QP?P pV8`Q O S<Q a@  I>s Q7b? `H?QXe?D ?P?I BP?(?@I4 O@,?I h4?@ ? hI PP?@? I(?@?  iI?@@?@? xA`@?P`A @?,P?A  4?@?( ? A0?X?@?A_?( @?@ 9?P ?@?@9< @?X@9 @ @?4@?X9x ,?@? 49,??P?@? Q?9Q?@?@ (?`9?@? @9(@?X 9P @?4 =,?s@? ~A@~?s@? ~<AB< `@?@~A8~L@?T<|A*<> @?h,<A48< @? A08 (?@?  A 0 ?@?a`@?`a@?a @?(a@?ah@? a|`D@?Y@?~@`@?((4I,?@A~J=x I?@~J=9A`B~T;;<|x0};@/ c@T;q?$<`~` {A @A0T;J?]оЊ}{hA!T;DO@ }A(?"T;p' } A?$4T8;8}}{9`$LT;;Ǒ;| {@9" {J7q$ã|8ǔ{79  J7ND_9h9E;@@((9h B=(P 9@A@>1@?E@?@`1B@O? 1 "@0?(1@@?1hp@?3f 1@?3g)@?@?@ `)8@?`?88 ?@?3g?,D8|4?@?`2e?|X?7C@@???0|%7BC_@? |@?U]Tw@? D8|"UBC4T7w@?P 88 =UTWTw@?,!4? 8YY(8@?!X?<x$Cep7"3DUfw ( `08) (0`)(`r)(# `?q)(G`<f(r(G`=o(s((3y @3g((1{ @c7( 2K @p!g N 93(i 0 ?@! c l 1((X10'?!;!7 ?(P10KOH! !4 ?(`$"V!` !@?r ",!D 0!s",p! x!>ߌ("|0!<!  `#`}`?@P"" ?x`!L  F1 "$ ?@!I)'c?@"I<@!OQ`1OH{"S9"gb1d),s"M3@iD?cg )f"|&@{1(2)> ? [>c((d) `#}?2{p(0)0F1c@( # Zc{~(p )PA={1|!)Z<g1c}!À=0p/ T?Gc1{x"18?(/1{cz">10cW^ p"1 {t1?p=x`F0;hchXz?`)?`z` 0`c:`{}`L7X/`w1Ȟ`Q?c`+?{`1` c`1{`cw`X/{``S ?`.1?`zc` {``o`p`_?`p/` ?`q0?hjIri   |i i`>.i0> b0|a?<|?@@`@a_Y=`@`0a_R;}n Pa.%>10 00a<+ `@a8/c a8 a0.h h d|hrI0hH8`  H@?Dc PX H <@+  Pt(Ad.%>10 0P|GA _R;|c P `?@r_Y=`@`P  (@: ?1=<~ @ 4 3(4@h'0@ 0Ϩԇ@ O???@ C?+@ @8``? @  +9 @п  @ 4 3(9 s 8 8 @ 0(2'À ??@C?(@2  @ <?@  -@2  Xx?? @ ,@9# pp {??m@ /(@9/O? ` z??-@D$_(5@9h<'#8 z??-@@*@9:x ? P z??-@D$_*@9  `P z??-@#/(@9`gP z??-@(@9G?` P z??-@  (W@:v0P z??-@@?(U@9&|?,P z??-@ 0(@9c;# z??-@ 4 3*@97'C? 0 z??-@  *@9wP z??-@ @?(@9 cCSP z??-@ 0+@9~h\P z??-P 4 3+`:?!܀C?pP z??-P  @A1?vPb z??-P h?: P P z??-PG@:!pP? z??-pH'@A3G?P z??-`hU'@A P z??-hh'@AcP z??-tH'@A~qP z??-y)?@B?1؀G?P z??-p~@*?@B1?sP z??-\(?@B dP z??-(?@Bp`P z??- (?@Iq0qPG? z??-p@ ,?@I0 p0P z??-\ (?@I#xD z??- (?@I~`@ z??-(5?@J?1 z??-`@(U?@J1? z??-0(5?@J b z??-(`?J| z??-((?X> z??-,?Q2 > z??-0)5?@Q  z??-`@(`?@bz??-* ?@bz??-` (?@bz??-\ (U?@bz??-p@ .5?@bz??- (?@bz??-,?@bz??-\,?@7+z??-p~@,?@bz??-y(?@bz??-tH'@bz??-hh'@bz??-pj'@bz??-PV3@bz??-P{@bz??-P bz??-P  iz??-@ 30bz??-@ ?@bz??-@ ?@bz??-@  @bz??-@ 30@bz??-@ ?@bz??-@?@bz??-@  @bz??-@@bz??-@/ @bz??-@_?@@bz??-@?@@bz??-@_?@@bz??-@/ @bz??-@@bz??-@  @bz??-@?@b{??m@ ? bx?? @ 30i<?@   K??@ ? i@ ?@@i P 30iP  zP :zP8zP88zPPPhr| . `@0P 0`@ 0? h'.O? |rh#z@?" section text hej move.w #2,-(sp) trap #14 addq.l #2,sp move.l d0,a3 lea matris,a0 move.w #100-1,d2 .back2 move.w #40-1,d1 .back move.b (a0)+,d0 ext.w d0 ext.l d0 move.l d0,(a3)+ addq.l #8,a0 dbf d1,.back lea -24(a0),a0 dbf d2,.back2 move.w #7,-(sp) trap #1 addq.l #2,sp clr.w -(sp) trap #1 section data matris incbin f:\obs\matris.wsm l`s|`mBnBnHAJ-Hh?<1NA ClNhgAJ)f #xP f6"8b,e "(J)fAF A&!3|NeC!! 8Jk!Ns|f A P PZg P[gN4Vx0 _Hz?Ns/H~MlJ ABnL"PPfPL` fPM"h-Y-Y-Q-Q$P R[gL je0pE.-J-J&YgQ`| &Q`gQB`CcK-I"n<"i$-I"hAkp0QAk M 0":k>0<NB=zj>=PJ0(԰|Oc0<O=@NR@*nH;@;@,KA Ak, h 0Aj00":j0<NBAj0CP""0.TnHgx=@H n$"n Ah0":h0<sNB4.G$Pa*Bn=GG|fJn j Fn a,v`@0|3bA:tPc hPd0XQS@H00jH瀀a,>LJnfD@NX@^tF&rF : " jafaLBnBn=|~na+~ na+~na+~.a+~na+~B@.a+RGB@.a+a*=|BBG,`a>aa"al`G=G`G =G`G=G`G.GJ.fJgJf`JgR.`G=G`0@A 00a*` .gJ.Nu?.Bn=|a=|=|=_Al B(0 "n$"ipQ"n("iD"Qf?<Hz4?<=NAP<kl?<?/<F?<BNAO Hz@ /<??<@NAO ?<?/<p?<BNAO Hnl/<*??<@NAO ??<>NAX~a)`6Ee6a)S@gt`/pag .epn=@ Jng0. =|"`=n"p =@ =@ NuAe G 0Ae,0P0R0L0NCP ":ef0<NBAe&0:< n$( g|dznLEnNJEfJFgxa&K~IL* ,Д+@G$$SjjTlPXQJga&\a'a-`(IL+T ,Д+@ aza&ala'.`Jnk8a+" nf|g| g Ka'a)`AC f`Jnf~| g|g=G~ K a'K t\a*kKt.a*j2SAKB->.Bna'aE45D%|a#`Jnft `JnjaؚCMn n*HpR@Jf@dKPt\a*.kI \fg`a *nNuat.`*C|@d&ak6JAfQ*`&I*a`aj2g Ka)`aa)a'az`b0<`0<` p`p`pAcj N 0Ab0Ac C ":c0<NB0:bNuBna=|~na&~na&~na&~na&~~na&t nd~a&f~a&dBnK B~a&a%=|tG(a#̾|c&|c*| c.| c2|c6|fBa&` G=G`G=G`G=G`GE=G` neG=G`|faBn aLaAl0.0]XBXtr0RA@cQ~|?</ NNOJ@j EYa%`H .a fBn E`da%|g,a*RFngp0R@aBRGne\<UFxz~aJ@k nh0<BQ8.:.|~aQ:.|a|Q<.TF*nh.<?<?/HU?<NNO0.X;@XJngH@H@*nP|;|U0<ruU@j|4f(Pm`"p`p ?????.B/.h?NNONu+|+m xz|~aaz.A~a l>.aa~a#apaN`$a+AX`radEXG`$&pra4J@fpa$p` 2-YA|e;A,p`#~2<*n(KA!A9Nua0.|Rg=@Nu n( hD PpJg 0`J@g |b `KW=|R~ `"a)A!nM:0P*nhKPJ- k~ `# NuPal``:.k HF<naHF:nκnd=Fa- f Jnf/ aB*_~ Jnf a H@@fffX- fJnjJnf`(nf`#p/ a#*an(_*Kg -\g\f|\I `J- j-Ma=n|I 80nΰndxA!nH00*nhKJ- ja(aB88Rn n# gHRFne`>aTJnf8~a Jnkxg"a!-Ma=GK :::p*n$KL`a2Bn >.|fa!Jngx n e| ngtJ. ajag\Bnd>.|!g6| g|g x|g ,|gKU~a a! n$hhBn nf NuBnan`V>.=GBna J. `fJ. akK a >.ʾ|gj`=|J- k - Rn` - JngSn~ n a a`*nh:.g$SExJ-j-f -aKQ$g!a(J(IaK `"I BG` I ^Bn0Bn.|g| f`BBn`:Jng(Bn a>.|g¾|gľ|gf`T~a=|aa./.?<NA\ahI@J.LfJ.MgF()T A[ 3 0AZj0C C ":Z0<NB0:ZlaXa*&na2a W h 00L~NuJnj nBnHP?<INA\NuAZ }1|1n> C!I":ZF0<sNB-zZ~NuY/MZ=@/n,_Nu*n~(MaK peQ|.  f *Lf`Jf ,.fB,Nu(M \gJ,fNuRG`=Gaj~*na -:gK ?<HU?<GNAPa| e ESa`aKP~aa`aa K d(nڷg`g -\g\a.K dpR@Jf=@ ^aK ^=|dBna4Jnja ajKP~ ng8HAY*  0AX ":X0<NBEtaL a8atB.PaBndBna >.gaR=|^fa2Bna`l n$hh=|KO~`baXaK ^I 0-lgBn-nX`agafJ. ajJnj4.k0f@aBn-n`X=|a%hag akJ. ak`n ngEV[a`a#AUZraEUaذ|g>`g< gQNu QNuBnaLg(a>=|J. `fa%afkJnkJ. ak`a|ka`a(I >p 5*gR@RG`:8B4p*LaNk&a%JnkakfJnga=|d`NuaaatagX`ra$R`K dJ-g$0-I lbS@ fQEPBapNupNuaBnadgakakJnkJ. ak`BnK ^J-fa$`d`Ha""(iNuaap4.XIPa4.ZIPaEPaR|gaa#ag a kJ. ak`=|K ^J-fa$z`a$rak"f0. ^@ cB6Hn d?<:NA\2a#0BndJ@Nu=Ga|aa nJgt~a29|0KJ@g -\fa`RTaa=|BnK d0. ^B5aK d0. ^*a#Jnkfa>k fESaX`BnK d0. ^Ka^*nt\ajt:aKI d0,Gf*nf`aJ. akrJ. `g0.nHA!n00*nhKa|KLS`Na$KL:~a2aA ^J(g ne0B0Bnd-|X`aa!=|K ^I (8fK ^J-f a"aH`a* nCR@f: neHn Hn dBg?<VNAO `a@k=|aa`aBn=|~aRG| eK ^0KI raK ~aRaa v n fFBA n4ApIJgRAAQ=Ag*aa!=|=| |\ a.SG(n0A( g$"MfH vanXnZۮ\ٮ`L0QNuJ. `gB-v` |~J. afva=FX=GZ-E\-D`J. `gRnXNuI ^J,jX=n 0.8K>.Rnng< nApB,( g|fJ,g|\ 8]TaBpNu?<Hm?<NNAPJ@g Hm?<9NA\J@kfaz0\Nua/ ?..G|g:| g|aTg*p n$CpdDpd|g|gh`B`H|0.no <.*n$K:-mg Ec<;FprJnf NuH =@NuAL L 0AKr000AK $":K0<NB<:Kp0.n S@noƀ`*n$K02.nc$H$H IHAeR@Bd0;@`AKz O 0":K20<NBAJ0:<020.NuaH@HG>HGadAK8 , 0AJ0AJC ":J0<NB0:J6:J8:JNu~ aCD8|Bga4hehe&(֨Cd HCCdRW`RFneJ_Nua< a.A01DT"n$ )4И a . Al 1W00 1o aLagxCfDg Ha .`0.24."Hn @c. A@e0.nndn Ha"aaF`NJngn Haa`=| ar`$ajaJ2. Ad@n S@And&4JA!n40 *nhJ5 k 5 RnRAQa a`FB@2.I6n Ann `4.UBn"Acn QnNu*nB~a RJnk ~ a =|Nu`@axJ. `f . afEGa ?a0|gS@@gag?<Hn d?<=NAP>k?<?/<?<BNAO ,o~?<?/<?<BNAO *nhBn :.f|c:<b*HU/??<?NAO Jk(MgahJ@g$a4g SfJf`=| J.o J.gp a@??<>NAXav`L0. Bn <g<g<ag<.f a<NuJ.nH kF?a|K2BU nHBh*BmBmBmB- .PЮTfHz?`?< NA\`P0K2G 2-< g` - g0< gN< g,< d< nNbRm@L0pNu?a`0`nNb RARm4Bf`a`a:`̲nNb  RA`B3Bm| J-f HS?< NA\Nupr` - gaRm Ub nH0.h*RU Uf8. fFz`.JEg*G KC>RfJ-f aG>Ia`ralK2z.f@p.fAI;kI;Ta.I;|\?<HT?<NNAPI;IJ@fIaaI;>a -:g4I;TB,a \g"Il0@@?HT?<GNAPaI;4a(Maaa|agndRIl0HA!n00&nhGJngJ+j(HFRFHFaIl , f)|aRaLRF`aDaHF4Ha(Ia6I:a0$a(Ia&I:a aI:J.ga`a ~a`>I:qg\aJ@kX`J.gB.?a8a6a4a2a00@< g&< f J.gP`< g< g< dp ??<NAXNuaRG?Hn ?<6NAPA :( Nu>.gBn nf$0. nhC!n`20gPFiQ*nh(M&M<.SFzxv-j*rHAfڭ -anrցAp QSGgKQ0.G=@0 2<@I-LS@Q=AfBn-E\-D`-CXa ngarpNuH@J@gH@؀Nuaraaza `زaRJnfa JaPBn=|aXK8AB-~a|\*n nfK dBnI &Lfg ,\g ,:gS`SB*Kt\akKHz8~=|`(Hz8^=|?<Hz8B?<NNAPKJ@jBnBI raK ~aL*_~aD| ~a8va,*x$~ a$~axa(a$Ԯ~azx$~ ap*n,KxmJnfmax$~ aHa"Jnf=|:7~af=|`aB=Ga=|G$=|pr`6a *Ip 5 f_QK@`na aܮaHBBa$`K :\aBI#Jg"a?<Hn ?<NAXNuK taK`|~zx(nhBgpJCkap?Hn ?<NNAP`?<ONATJ@f.RW .gڮ .atR` ..gRKf`0JCk J. gH H@J@gH@؀J$j $gK t\aRB5`NuJ$nRK t\a:K&Lf`DA> 2 0A>V0A>C ":>0<NB>:>^Nux`xJfPLNua4a $"*&ҀւJDgBCKHG&0*HJnfT@7@H66TB[6JBB[0Ga`GlIlBJ@gLA>4 m1|1n> C!IC!IA=0A=C ":=0<sNBNuBE`zaTEA= k 0A=F0":=0<NB0:=VNua0n@d=@@0*nBd=@B0*RnDc=@D0*jnFc=@FNuaJgB n`J.Lfa>*OJnfTGOJcaa Fb a >Jg-@-GNupra@A= * 0A.f=GJnf >.A!n0<]r0AQJng<Ng:FxHE:I!n0HI02I24"nhAC()gfg RDHEEg`0.|g(S@gTS@gfJ (eRg>` H@"HA`EG .gJ*fS .gJ+fS beJ*fPP b eJ(f`02I89Fj,`l0.gnkGc 0n S@`B@a=|Jng&0. nhC!n`2j FA3A0QBna`a,=nNu:.<.кFg6aVn Fg6n n Fg&a|<.SFHFaRFHFQaӰ=nNu|` <.n HFBFK:.M~ aPCE:;C;D;D ><aQCn"E;C;C ;D;D:."u`u`<. aHaz`xaIl0.FndHA!n00&nhGp+f p+fp  a4B@+jg n@ Kla6g n bB-+a p `2.g8 f|g,p A QpSAgpSAgp#CApQB-`p*_Q8 |. | )|_ _)l | (`j n h 1| rJng1| r nB( Bh1n"1|0ajg$ n b+`H $HBPB1B1A"2.IA1@NuKE raSg `$+aRp+g| Q  6+2IAab-2AaV-2YAAPaD  62YAxa| expA JAfr a:2IA?a mBNupT L`BA)B/"'6'a("a$<0 c1p"H 0f QNupH HA0HAQNu*n$K`(M&M?< NMT<tr| Bl | IHdRBQ0|cJdRB8zvANdJDfK8C |Q KSDRCQJDg qJngQkBnְ|bPkP~$aRG|3ca&=G<FA~$*n$K`- gKRG``?<NAT>*n -:f$A<bH?< NMT2ghd>NuA?>< aT>Nu ng.H?.=|a*JkK*b~a&aZ=_L8Nu ngP ngHJndkBHO<=|Bnaa=|aLNuC.Hg .gRW`GPE@fa0 .a fBn E/a|g0.gk6|g~ ng"|g aPJAkHT?<ANA\J@kv`g> n!f A.Cr aE-a|g"?<?<HU?<CNAO HU?<ANA\J@k`&n.. c?<HU?<=NAP=@kHS/. ?.?<?NAO JkakHS/. ?.?<@NAO JkⰮ e؞  cHS/. ?.?<?NAO Jk`HS/?.?<?NAO Jk?.?<>NAX=|HS/?.?<@NAO Jkrel?.?<>NAX=|a"`?<,NAT=@?<*NAT=@I d`Jnf.?<HT?<=NAP>?<?Hn?<WNAO ??<>NAXNup>Jnk ?.?<>NAXJnk*?.?<>NAX?<?<HT?<CNAO HT?<ANA\-| `?<HU?<=NAP=@kpHS/?.?<?NAO Jk?.?<>NAX=|ak@`?<HT?<=NAPrJ@k??<>NAXHK@pA&a`/ n01@1@=|BnI raK ~aKI raK ~ap*_~ah=|JnNAX=|`V0.@gS@F@0.@ g H@F@??<HU?<CNAO J@k.gaI ` nC@ *fT .g J)f|.f )*fCAP .g J)fB)`fag?<?<HU?<CNAO HTHUBg?<VNAO J@kg??<HT?<CNAO J@k`dCP nafTCPA(zr aE(pa聆|g|g.=|`aA  ѐA+ 1|1n> A*0A+$C ":+D0<sNBNuA+h 1|1n> A*0":+0<sNB6<`aaKlSEUFB:B]::B]:BaߞH`K 0]]QA+ + 0A*b0000A*C$ ":*0<NB>:*\ngf?a@>JGk\|eV| c$|g|g|g|g |e2|!b,=Ga`">.gaBnNuaaNq?<%NNTNuaLagCfDgHCDa\`$aVvA** 1|1n> A)0BP":)0<sNBA* q1|1n> A)`0":)0<sNBNua\K 8Ilv ќQA) Bh1n> A)PClp Q":)l0<sNBIlv QQ`><|:<@x*n`>< |:<xp*n&n$Il l p"Xi%$JGjB)$Qh hk|kT7E,'M$k4kkGp$ kekGQALPhNu<. <;dVp<g R@<1gR@< gR@<gR@<f*2.@g"=@A n(=G0-I0-S@r9A29Ar9A29A lg" lg lf:&l 2+j0DA7A` , j"DA HJlg JlglIllIQ&n$I`Rl*TlBVlZXlrZl\l^lTlVlXlZl2\lJ^lbPlzpIRlIQRkxUk|TkDI`p2IlIQkRk2Sk60HIll l p"XB)$Q1|% 1|%A8-HhCl h 1|&n(GUkTk(Rk*TkB&nA=|AbBPA 4 0A(0AfC ":l0<NB0:,J@gN|fBgNAT=|I*-LHT?<"?<NMPA, TRG?HU?<GNAPJfSAcf` Hz?< NA\Hz6?<&NN\Hz^?<-?<NMPA /</<!NMP-@Nu xC.# # # NuA:\AUTO\UIS_III.PRG[0][|Universal Item Selector III |version 3.0 Copyright 1989|Application & Design Software|][Install|Cancel] *# * Universal Item Selector III * * version 3.0 Copyright 1989 * * Application & Design Software * * Grants Pass, OR (503) 476-0071 * *# !* *# Lionpoulos= ,:NUM I8()NUM,(IM4Vx)(NUM 2I><{ a:\acos.bin,()()NUMs"n^̞&ILx, JAjɷAA,kzDbREf] f"X֒S@1@61FC޷N k`q9SA7ԏ!Kʻ"etrH?2. t &hf-1O,"VhI3&yNnjx !7B]64ҝKRC8.DD;C Ctl67C/0Q A 0*sAP2ް4kgrRAffAHL=AjRB=B_pjlq epc~ bV3x'cd>h?.fֵy&z93֠{0pO2e*6Ĺ3 O;Ep4$$a@ga?"p1Br!P%T UBP*T =@pcQc'B𴙎0z ;n:.g8Ht>"g>04eOQOB%XOtR@f_PNM\ΓR '`?@H- t4;źH0/n$QʊNp0T#L`bp0,Vp@py&>r0Sہ6b`2*h1;@gJ:!Fgk9 r LCTO`q3 UB?Ğ ?rAp mOe 0-{N]س"xpvgpp d^pIĞLp62g:p^(p3ʐ䝡p627p ‘DP$Pp̶me4x09$HrAe'0 #xN(ph˫̂b,2H@?`Q74Nu!<~i,sGenST (C) HiSoft 1985-90 In[{bS FNp?"md!bBXQND+S zXFf~C9bBnv%!B.?`; 6B~ Gi1O/%E:lQ2 @6V*pؐxF邶B0eA|X.>d"n".' $ \g6/g.g`٭"BwS`Ajpw.9Zrf&FƪvUyZ!&4-VZ!Z#T9J\jgphnnXF(AQhHYp g n՗fq uc^gYlf XBP3PZd0eo`YꖅJkM♇gl>wHb5ؚNyu@!v2 wl) y9U smRv%LRpv".ֿDp,v}pnT! gO$pPgp S2̅wpn5r+^In&l7KrfX/xof pyW@Pc\qcqFjH-GR*WfnPƨHPJ(LQHX\!"$P' )A(:!,./UH~H:Z#%T*Fe :ZUb=(d80Dp-@H!=k8zt*$ UB5lB y&DJcABP^m^HH8p0goaWdzds@\}|L J.6W&9άCna,ahamw[fHZh RRz@S + p$YnaJ &k&/PRa{BJ޲/ $ma$_42>TZV_S 0?bdb Z ^RL`$ܬgaw"y`z$K jG Q&`pD\Jinclude_longmacjkNmеFAZHZfEo`O*f4RHJf((VZl L-f MaS-HV}"nK (NL@ 58`0wt -L^$LWF Yk(|,7p :gbgSVB3 P$<g&F@S"LUQLe֢`!J",!`E{ YZp:Hl=KuB+ b TOg/ Nׯq"_B-iX#0 m&ķ ohu@S`EkZC.nrrzAHL}f:7vLw4g `,{P|fmͼ%fDQX.Hk.Њv0`~-O>*6^r-Mn7؟Wz$B.7 -W[8Οk4PUV]f]γnܞPlZX$*Peg*qebG(M ebSf  [Aog"@`XI(<) ¥.Tĸ*2i":A)o-HyD|Yf,g.\/Qf8iJgŸy +l(2[Xַh3!rHzn` EJţh"jsVn۾d@qV D}s@""=0$%DC 5 .L1C%@8( P؜ RH^V,H-p[ /SgRN nNѮ?3hW1VV BP3HZiR2>J\T`cx4NRfJQOz]2 3jpX+-*/()~= & ! ^ |$%@'"F_Rn@4Ptx|hl ap3D9(6!_ rf̃ x_&3+dSƐ¶VR$gFDgDg hQ,`6$ZNPV o9nfDu+K=L3d~`~+#II=>IRII UVIcII^_Icz{2>? gs  = H I  J O m r w  '! !3!4)!5!U!V !W!c!d !h!v!w!!! !!"""""""""""""####2#O#P#Q#U#l#p#u##################$$$ $!$"$$$L($w$$$$$ $$$ %W%~%'%%%!%%%!%%%!& &-&.!&/&P&Q!&R&s&t!&u&&!&&&!&&&!&&'!''"'#!'$'E'F!''' '''((()(.(3(D(I(e(f(g(()&)2)3 )4)9)O)W)\)f )k)p)))) ))) ))))))*H*p*q(+ +++'+,+?+D+F+T,6,;,U,Z,_,m,|,,,,,,,-36  Z Z $ $ ) 0  7 > E G P  N cxz|~ %$ 5 F  ^ !g "p #$/&.  '()*+,-".1%B=0< 1P2f3}456789: ; < /' G>F ?;@GAPBbCqDEF= HUIJKLM N!O<POQhR SuQ,))QV)*Q ) Q ),? -K? .H> /HC 0HH 1A  B2AA -3A4B5C6D7E 8F 9G:H;I<J=K>L?M!@N$AO'1P*CA D> EC FG  KL%O V K% A; 0K  9 L  2   7 O  Y   _   d"  m-  .  v    "  9  L( 2 0 ,  4  9  D" . H _  e"  l  % r' <A=0LD  A  A  A         A   @     @ A  L` L|  6   @  F  O  T ; 7! ]"A e# k$A v %A  &  '  (A 3)2*+@ ,- ./ 01 2(@ 4A  5L 6L 7  8: 9  :  7  <   % $' (0LL GM U ]M$ M@!    M\ Mx!  M M!   M M!   N N !  #  N<NX! H% K # 0Nt bNN NN  % H! =0O '":4      1  @ O x O8 @&1, @@&OTOp"xOO( O  :v%DF /E F CH  %2    0PP0Pl0P$ P  @%C " 0P0PhP Q     Q0   %  0QL0QhQQ! %$  !0QQOW^ Q  z  R     % 2 0R, 0#   RH    Rd* %& LA I0R HF 14 7: =$ D- J6 Q?  R R"RR   8 #x)S S(%SD,S`3?; H#"' !  " $$- %--&G +'' $&(*#)O *[ 'f,k71-0.{/0S|,S625345S1S77;8:9:S7T<>=>T$;T@K@GHA B'% GCF D2E7F:B??HJ& IF JQGT La %d) 20T\@Tx@ }# TTT T #  U U   U< UX Ut U U U U #  V@V`  #0V8& , 2  8  9     ? Y'n  && 0VT 0Vp   QQQ  Q Q  e X X @ @ @! @1 @A @Q @a  @q @ A:   @@@@ @@%$  @!@"@#@ $@@,&+@ '@(@)@*@ +@%@3-2@  .@/@0@1@ 2@,@:49@ 5@6@7@8@ 9@3@;@@  <@=@>@?@ @@:@FBE C@D# E XA%IGH H@F; JE SKR L@M@N@O@ P@Q@R@J@TM UR% %Z3 +0A aX              + < JY ` s |    ,M0X LAY6 LAY,6  L AEYH6 L A Yd6LAY6LA8Y6 LAY6 LAY6 L?Y6  LAZ 6#!"L" Z(6&$%L%AW#ZD6)'( L(A&Z`6,*+L+)Z|6'`"AB0Z @|)/8!       #  8 5$"'.%+8   0Z @ AB M Z  Z   '   0Z 0[