2IMGCdrP@@@ 8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LSONIX ' @&PRODOS }< ! ,BASIC.SYSTEM(( ! (SONIX.GS=  ! +NOTE.ENGINE@ ! *LONGLOADERE ! 'STARTUPI ! SYSTEMM ! SCREENN ! TEXTO ! PTEXTP ! WAVEQ ! MEM1RW ! (BASIC.EXTS ! ,NOTENGINE.EXY ^ ! &CONFIG~ ! CONFIG.T; !TEXT.READERMODpҰ%$D0 $L !Cb" %n"o" (#M8( % ) L'"p"q" (\4, )7(P0  ( @p 8  x"!b"i"0 ~&i"0 %r"s" (,) &Սt"u" ( %L'")0I0hx H( + %Щ ߩx"L! )L! 8'  )ɀ)4,- U JNT) x"Lv"w" ( !` a"M)Fi/ e"3 k"  !"#$%&l"m" h" iL X%;"L8"ΠΠҠ`y""""""*$ Fk%YeQP!/RB}QBiBB}\ ĉFEL/#> ț6 . ) ɘ"    L=#=#&ŠϠĠԠŠ ԩ m# m# J Qڨ)̰m] нȱ ̀𩠙 i F > S ɘL   V7 L ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`%YYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / X& & +&&7&P^&0`ŠӠֱҭԠŠҬî̠ӠĮʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 ')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp< @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hrȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` `* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <.<ʆ>,=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@Yvȱ@Hȱ@Ah@y@cYe J) LL LJiB LJ) >xhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJlB O-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ ߐ  0 HϭߍLпllllhh8` Qx")T'P) ɺiL; )?     ~ `l@Hȱ@IױHXATȱH ɯȩ׍̒5H)/@a)_ .0 :A[8@`,뎒׮Б` L` @>S)I38Mdeם`K8`@Nȱ@O@ rIiNȽבN)/ȩ/N`@[ WHJjjjhA ,'KI؍0JHi 뎅`C8` @ r3N@) G莱 ⭮i`0 Y; 뮅ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNά0NN` G8`F@ 0 > LK8`: ;I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶:; <܅I m=IHHyHȘI Lܝ` @c@ k@Ю׍S)mיSʈ@qȱ@cȱ@mopfNxOyS)5SI0ܢܽ iP'E* 7deFG (GH Lv܅IR mEIH` tq qM0PQ ESHNFOG 밳NO 밨G%܈D" T)Ii)܍R*܍E'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` EHS` #Q'܅IHHSSЍS@`8 ` ͍% ΍Q8`܅I `P܍QR d8D`F` ]lH)HFȍNHGO $%܍&܍!ܢ8* J8` L ܝ>)I 'ܝ:`F8iRFPGQ`F܅IH3H ( )ȱHά`Ύ8EeHI |SB:0M ٙKٙIFNGʈ d献`8m0`,0H hi PȽάhٍ0GF8yאFG  $0 G01 E8`1ݾ00 Y 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ά` W xG 0A)H ܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍐz{ vNمFمG < ΐ0 FGL鮅0 ٭{٭zٽ8`H8`  ,z { 8` z{ `ٽJJJJ`H͐hn)NjNjNjN. CH͐ v;٭ *Nۙ۰ڙک `Z8` C# (`{ .{ .{ .{8۰*Jz۩ ٰz{`JJJJ;i v묅͚ vٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C ް(`(8`ؑ@`M8`8@ؐʈI묆)z8zz Ly LةC8`؍)@ i)z8zyJ ^ ؅F Lo) +%J(a *FإGؐ.` *JHIH IL/FHGI ҭJjHIHB>IؙJJ W: ELyHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J zJ͟ $0 ΎJFJL8`JGBJ P FإG`BH PFإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` vL'J  6"L vH  6 9ؙ` @ P8`K8`B8` L؈SJJJJحq) ) )Ю ЪGdF $ ᭔ع+ؠ 2H  :h8` 䮅ٽ ٬ؠ@` ( L )8`)i п` H h)N$% LL L r L 2 "pJ덣 )@፦NJOK 2iKK΢΢ IJΣ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L2쬆8NNO 8 ؍JL`R΢ʱLN1MOMEKP/MEK΢L7L-M O,p莡eNNO(`JNKOL 2/ "P L8 y WؑJ`L@ȱ@ `@Nȱ@O`؝}zIzؐ` f~ؽ؝z f % f؝~z؈` ` H  Ph)N@ 1; L  2$ )bJ Y ) H 4hL )  )حJjI{HIzH؊ PLE΢ʱNLMOMEKP%MEK΢L$ O, PeNNO 2(` C  7 2JzHI{HI؊ }LE  *` A Hz ع H{ ؙ؊ؠIhHIhH } iع `  عiعi` )؍0CGHFHBFG ުhFhG`@4͔ L @Ai ׭2` . :#ع؍0 Y讅)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝L0NO 방 PQNOFG 嬆؍f؍g؝h ؝c zS) zS )حM͚ v`H@h`h``N8`  ) 1⬆Ȣ؝~@~ݞ@ʈL2 KIJHȢݞ)Jn 8 θ ؍ ؍ DH8 ع)ꭵJJJJ Ȣ؝I؈ 2h(8H ( h(8Hh(`ؑ@`@ȱ@ ` B@8ZS d鮅ٍٍٍsHٍr8fhgSJJJJS)S@` %I -q) 0@S)N8` @LL =@ ȹP8` i` %ם0 B %)( ȹ`8m8m@8` G8`F Pq)@N8`S)@J טyרםSS)׍Sde 밑 LȹL@ȅH@IL,0` G וֹ= YH.q)N 0 >deS)@LP8` D᮴ ֩SGHG v L䬅yٙ٭yٙ٩`K CEdFeG 6%&N    ܮ `J HH hh` 0 @ L/L Z`̸Yܝ ݝ0̸ȩFG   0` ܅F݅G ` c Zͬ 밽܅F݅G ` c* Z% L`L뮴HH hFhG܍ݍ 8 `FHGH  hGhF`ݹܙ݊`@Bɼ>K@J5 c9X(K cXXK تKo`V8`no` , on cI9XX`)HJJJh`OeNeO࿰ c9XАO`@ȭ@` ON INJKO`HхhꭋILhH),Nx8 (8` ԍ`@ABe 2U,,CnZ1IJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠĠԠҠ(c)1983-1987 AppleLKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LNP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ ֽ ְ& .Vӈ  JJJJH 8h Ei 8EX`'8`jӍWӥC)p> pӥCYӍY 轊( ( ӈBV ( ӭp0 \BkJ ՠ@iӦ> Ӑi'j:ZH i@ioZZH h ѐȭnWǥBJ Ӱ8XӦ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``  / XʩXύX X %   % ɍRH hɛɘɉɈ $ Ld :Ldې)ɮ۰ɺ' Ld  : X ( % ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  ġLL ̹L)'L ȳL O'F ʻ ̹(((L $ʩ $$ $L `ީ % K@D EFby LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKELG ASTARTUP$#   / XXύX?klmnÍoL) "6L'?"(0`6708" = ***)<JJH !h穖tp% ;"Z/݀>">"' 1" 7"5).莀/ ;" " 6" >" 1"6"$ "g"" !"""""IzL')*+,-./0123456789:;YL 8!9 詍` "  à4"/pŠϠŠà͠ӠàԠŬH06172839h` v97L75v^a ?/( va?LLLɍ$?`?a ɍɥAH93827160hH46576879h`,C bL ɍ b w,S0 @ lLޭBDEF޾ p ޾ p($ذ v (0 ( L?ԦʚLeةީa s  lL b,FLg,DL,C0$3 >@ Ɉ 3ɾꩈL(3ɾ;Ƀ B94 l% bʽ  ՚,S` H E$݅3`(l8L3LX>(Ƀ,`3,G0]ɾ g` H`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O puȾ ɾ-O ]c־Jjjj `O>0O l POپھ p H־Ǿh۰8L־Jjjjɾ)Ⱦ8 ѱ OLӜ ĤLLX>(F`־ؾپھ׾` bɄ KDEF vLl v lL bKɍKL?` w  vLl@3 @LtJ)s@J b  l`a?sa?,E30ɍФ3 E3HD F3 Ʉ%h3 bM E  lLthɍLL3`3,A0s0% Ipn DpnI:L ؅303L8933LΞAAJL ةޘг uv $ 8LƞaЌ>?@`>?@`B8` K  춼LK ҟ ҟ ( KK`HJJJJ8`HK)` #hhLJپھ pHJh` D!hgt}~p `~t}p8n~ni}tpi~~tso8pinii>j?k̈́>~|p|Ii||̈́ l - `>i>?Ek?!>Q>>>̀ `` \> ̀ `e>>?́?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`|;}=:<~:<=;`||m};>:8o>oȑ>ppȑ>> :op`G DKpnG @p;G=po:i>?Ek?>Q>> L> \/ e>>?́?ޱ>ȥj>>m>` _m8injkiljo풼S 鸍긍$I2 U)VJ зT)`l8`a HbIJhjǾȾɾ p٭b=aIe f`8` P־ǾҾ,G0C f=W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) 5W) =)W)@! pZ}ȾȾ󰹩 p` ־ǾҾ,G 8`׾ؾ f p vۥs׾tؾE`  ( 8о(־Ǿ,G 8`_`W)H־Jjjjh p̭ fLᶢǾ ת..8 ۭ (8mȾȾmɾɾʾiʾ` Lpl8l:/,s̝sƬƀ#(ZZV4G_0=( A P FjL\5p-e9ABSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND6D(!쫂8ֵ#ح#׮2}q :IC@@ -!S    !C- !ABELSDFRV@@ !$(19@EüϠž(+@ABCDEFGHIKLMNPSV     T[fouu~ՠٯ* PWN*]ĿNTz @n6VC/+A>@I5gN Oz @n[Dz @nd0,~z @`$仫@v$⩔,C[B?I>孓`仫6VtCicQĿUKqtVt Nʮq$6,⨁ K6, VtI=v!gNVt Vt  lg~TLLwLLL) `8` ԠŬLLL 0Q TP"T H٘ `՘Lט08`L?L LhLLLLLLL !#$–!ߖ iޖ *+(H)hJJJ'& @<>=Ȍ>&-  #$ #.6$/7 , iry)(+*- h8`< @ >=` @-<>  $#闯ᗍꗢ(* *L  ՘L?0 d H  \ ]! I d | 0`#$ y  ` y  ` - y  `   .#.$.%`   ..`   .-`ɩLL 0^ 6T @T%)0+8`"   /"08`"ꂰ ꂈk 2k/ K///0Ͻ//ޠ// /0i /<0=K/0///0덞//0J 00H<0h=/ >= >:=K///G / /y<0/ @>/=]m/Km?ABC/9"<0/ @>==m/=) //H3222 K: 42/ /ʈꫩ #k#<0 <>=kK32220/ /p2/ 00 /42///42  Hi h ʽ KȌ/H///hɁ$/ / K/Z/z K///0R80kK(KKNNQQT а`) iC)<)/8/,! ) /j /HJJJi Hh0) `k0K/ ///0///0ܮ/42 K/ /0%Z/Ȍ//z/K m//ɀ 8/ [ ЀR 8JJJJ B 62 :&"  JJJJ h7KK0k"l"0\0]"0``0 00`0K K0/0/0N // ]0K/ ?0//0  ?0/0// 0K//00 k HH0hH i00  hi %keh- i#@ \@!]""?08e`` HH%h- i# ke"?08e`kMH@ A ĝkL v/zϘ=]J0`jdfhLLИL"08`08 l0kT HkHH0@ T0h <% E0@ T HkdSǢdT0H8` 0H0iK kLDSAXF'` ` ` `      $   $ ,󈘍0` +` F` y80 e y80 ed ` a`\] y  `_` y DFG `b y  `0: AG8``   .\.].^`   ._.`.a`   .b.c`\fbmjo ȍl^" e-qmlʍ fnhp" eL'z r  rmbmrb rbmrb  ̍l" e+č " l`L08"`\fmjo0ȍl^" eF45lÍodpp m "0LL ˍqml fn8bh,bhp0  hm0" e' bp 0"0̍l"`L \_b ^a0"`0H "h"\uu SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: STARTUP (4);"PR#3":BL38912:BK38989:DI38412:PT38444:MO38442:SE38403:OS38445:AO38409:VO38441:49204,6:49186,246 (788)111R "-MEM1":"-SYSTEM/S4.OBJ":"-LONGLOADER":"-SONIX.GS":"-NOTE.ENGINE"k :3:2000:21:2000 23:"(C)1988 So What Software 10221 Slater Ave. Suite 103 Fountain Valley, CA 92708"; 11:28:"SONIX for the APPLE IIgs":" ":31:"V1.1 HJKL 01-MAY-88":1:" "q Y2042:49186,Y:Z1100:Z:Y:Y05:49204,Y:Z1100:Z:Y:49204,2:(788)120 1000:SG$"/SONIX/SCREEN/SCREEN5":BL:O22:1050 SG$"/SONIX/SCREEN/SCREEN0":BK,6:BL:O18:1050 SG$"/SONIX/SCREEN/SCREEN1":BK,5:BL:BK,2:O15:1050; (4);"BLOAD SYSTEM/INPUT,A$2B0" :2:" ":2:"Configure? (Y/N) ";:K$::K$"Y"K$"y"ĺ"RUN CONFIG" :2:" ":2:"Introduction? (Y/N) ";:K$:  *** Ring bell ***  O27:1050  5 K$"y"K$"Y"30i 788,0:49204,6:49186,246:"RUN SYSTEM/MENU1"  *** Introduction *** :49204,6:49186,246:(4);"OPEN TEXT/INTRO" (4);"READ TEXT/INTRO" A$ !A$"ENDFILE"35 "688:A$:32 #(4);"CLOSE":o $23:" ____________________________________________________________________________" %2::27);"PRESS ANY KEY FOR MENU";26);:K$::::25$ *** SONIX BASIC INTERFACE USAGE *** iSG$"LS,/SONIX/WAVE/PING.SWF,A$102000,S$102000,R$8000,O$01,":DISG$"LS,/SONIX/WAVE/MOMENT.SWF,A$042000,S$042000,R$0000,O$00,":DI *** Print then SAY "One moment please..." *** "One moment please... ";:PT,51:MO,2:SE<PT,0:OS,1:AO:MO,3:SE:VO,50:b *** Ascending ping player *** X019:MO,3:SE:MO,2:PT,XO:SE:Y050:::1:X079:"_";::SYSTEMuHUSTON! ' ''WAVEDITb2 ! M)MUSICEDIT|3 ! M*BASICINFAC  ! M)NOTENGINE  ! M*LONGLOADER< ! M&PREAMPG ! M&MANUAL ! MINPUTP ! M&S1.OBJ !@ M&S2.OBJ !p M&S3.OBJ !w M&S4.OBJ ! MSCREENuHUSTON! '  ''SCREEN0A ! N'SCREEN1$A ! N'SCREEN2eA ! N'SCREEN3A ! N'SCREEN4A ! N'SCREEN5(A ! NTEXTuHUSTON! '  '%PRE.0i  ! O%BAS.0r ! O%BAS.1uG ! O%BAS.2x ! O%BAS.3| ! O%BAS.4j ! O%BAS.5 ! O%BAS.6 ! O%BAS.7 ! OBAS.8 ! O%BAS.9 ! O&BAS.10c ! OPTEXTuHUSTON! '  '(CONTENTSN ! P(OVERVIEW ! P,WFE.INSTRUCTZ ! P+ME.INSTRUCT&N ! P+NE.INSTRUCTt.RX ! P+BI.INSTRUCT8l ! P+LL.INSTRUCT= ! P*APPENDICES4 ! PWAVEuHUSTON! '  '(PING.SWFB ! Q*MOMENT.SWFIB ! Q 0" """hh::"""H"H  "hh8"""08 `hh0    ! : 8L X ,! ` :! ` *** RORRE YROMEM *** 1# resu eb tsuM yromem deganam lla etacolla-eDz SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: BASIC EXAMPLE n  ================================= DI= Disk access call AO= Automated oscillator call SE= Semi-automated osc. call PT= Pitch data byte MO= Oscillator mode VO= Volume OS= Oscillator number =================================   *** Variables declarations ***  (4);"PR#3":A$(12):DI38412:PT38444:MO38442:SE38403:OS38445:AO38409:VO3844SUVW1:900; *** Setup screen and install waveforms *** :B189:800:"BASIC INTERFACE EXAMPLE PROGRAM SONIX for the Apple IIgs";:800 "Loading waveforms... Please standby"::1000:4:1:B160:800. 21:1:B189:800:29);"Enter EXIT for listing";29):800:3: "Enter any of the following notes... C C# D Eb E F F# G G# A Bb B or press RETURN"::"ENTER -> ";N$:MO,3:SE (N$""1020 -N$"EXIT"N$"exit"200 2X011 7A$(X)N$1050y <:::1052:"*** ERROR *** Invalid keypress... Try again.":X05000::10:" ":25 :: X079:(B);:: C,C#,D,Eb,E,F,F#,G,G#,A,Bb,B X011:A$(X)::  *** SONIX BASIC INTERFACE USEAGE *** %  *** Load SONIX waveforms *** j SG$"LS,/SONIX/WAVE/PING.SWF,A$102000,S$102000,R$8000,O$01,":DI SG$"LS,/SONIX/WAVE/MOMENT.SWF,A$042000,S$042000,R$0000,O$00,":DI   *** SAY "One moment please..." *** PT,52:OS,0:VO,50:AO:25) *** PLAY the note selected *** QMO,2:OS,1:VO,50:PT,30X:AO:25 SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: NOTE ENGINE EXAMPLE 49205,0: FIX A 'BUG' CAUSED BY THE IIGS' VIDEO ROM CHIP (4);"-NOTE.ENGINE": GOTTA HAVE THIS AVAILABLE *** DECLARE VARIABLES FOR CONTROLLING THE SUPER HI-RES SCREEN *** BL38912:DSBL3:STDS12:SOST12:SFSO3:SCSF3:BKSC44:TTBK2:LLTT1:CLLL6  XZ[\]^_` *** DECLARE VARIABLES FOR USING THE NOTE ENGINE ROUTINES *** NL38144:NCNL8:NSNC4:NPNS4:NRNP4:VONP231:SUVO8:C19722:C2C11  *** WRITE THE TITLE, LOAD AND 'CONVERT' A SUPER HI-RES SCREEN, AND MAKE SCREEN COLOR CHOICE *** (:2000:"NOTE ENGINE EXAMPLE PROGRAM";29);"SONIX for the Apple IIgs";:2000 2SG$"/SONIX/SCREEN/SCREEN5":BK,2:BL:NCZ <6:6:"Select a color for the Super Hi-Res screen...."h F::1000 dL$:L(L$):L3LL1 nC17(L3)1 w *** SELECT SONG *** r x:6:6:"Select a song to be played by the Note Engine...." ::20:"(1) Rhapsody in Blue (Gershwin)" ::20:"(2) Fur Elise (Beethoven)" K$':6:"____________________________________________________________________"6::" MAKE SURE THE '/WAVE.LIB/' DISK IS IN DRIVE 2 , THEN PRESS ANY KEY "::M$:K$"1"500600+ *** LOAD SONG, ENABLE SUPER HI-RES SCREEN, AND PRINT TITLE *** iSG$"/WAVE.LIB/MUSIC/RHAPSODY.SMF,":NL:SO:DS:CL,C:SC&SG$"Playing Gershwin's 'Rhapsody In Blue'":TT,40:LL,10:CL,17:ST:700XSG$"/WAVE.LIB/MUSIC/FUR.ELISE.SMF,":NL:SO:DS:CL,C:SC9SG$"Playing Beethoven's 'Fur Elise'":TT,40:LL,10:CL,17:ST *** PRINT KEYBOARD 'COMMAND' OPTIONS *** SG$"* Press ESCAPE to stop.":TT,70:LL,15:ST:SG$"* Press SPACE to pause.":TT,82:LL,15:SToSG$"* Press SPACE to resume.":TT,94:LL,15:STSG$"* Press UP ARROW to raise volume.":TT,106:LL,15:STSG$"* Press DOWN ARROW to lower volume.":TT,118:LL,15:ST *** PLAY THE CHOSEN SONG *** NS  *** CHECK FOR KEYBOARD 'COMMAND' *** K$T*(K$)32(K$)160ČNP:K$:(K$)32(K$)160ČNR:3000:8004(K$)10(K$)138VL(VO)1:VL0VL0:850>(K$)11(K$)139VL(VO)1:VL15VL15:850H(K$)27(K$)155ČNP:SF:::RVO,VL:3000:800 *** DATA AND SCREEN COLOR SELECTION PLOTTING ROUTINE *** RED,GREEN,BLUE,PURPLE,ORANGE,YELLOW,AQUA,PINK,GRAY,LILACX092:C$(X):24:"(";X;") ";C$(X);44:C$(X1):"(";X1;") ";C$(X1):: *** PLOT TITLE BOX ROUTINE *** X079:(61);::L *** SHORT TIME DELAY *** \ X150::u SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: WAVEDIT  *** COLDSTART ENTRY *** SG$"":N38193:CP1 X(26):Y(26):W(26):H(26):SY(8):NN(12):XX(12):WW(12):HH(12):KY(7):50100* F032203:V0127:SZ7:SW32768:R132o "OPEN CONFIG.T":"READ CONFIG.T":FT$:FT$:FT$:F$:"CLOSE" BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3 CBLI3= MH38acdefghijklmnopqrstuvwxyz976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1 M127648:M2M154:M3M25:M4M328:M5M45:M6M528:M7M65:M8M720:M9M826:O1M916:O2O110:O3O212:O4O371:O5O427:O6O55:O7O632i S127866:S2S112:S3S27:S4S37:S5S47:S6S57:S7S62:S8S710:S9S82 VI38999:HIVI1:WIHI2:HTWI1:N08193:N226624 LG38960:IK,2:ZB,64:39326,96:39331,64 BK,5:SO:DS:49204,6:BK,2:767,1:I1:6055* (4);"BLOAD SYSTEM/S1.OBJ,A$6C00":O7j !"open config.t":"read config.t":I7:28347,I7:"close" "O11,160:O22,0:O2,112:O21,109:O3,0:O31,1:M9:O11,0:O22,4 # *** WARMSTART ENTRY *** (43 )I1240 *120 +MS:CO 2MS 3(MV)18051000' 4CI:CO: 5(MB)25550T <I0:XR(MH):YR(MV)m FYRY(I)YRH(I)100w PII1 UI25ı _70 dXRX(I)XRW(I)ı n80 o *** MAIN LOOP DISTRIBUTOR *** xI1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000+ *** LOAD *** 749200]CF:48000:BK,5:DS:BK,2:48000|SF::(4);"CATALOG ";FT$:"LOAD PATHNAME: ";FT$;:"/";F$F$""60049000:M8SG$"LD,"FT$"/"F$",A$042000":LG!LF1:CP0&N1N0:N3N1:46000!0SO:48000:M1J5:X152:A::X013:A:768X,A:Z:45000:FZ0p?SI0:580:SO:40C *** PRINT SLIDE BAR *** DVI,188:HI,1:WI,158:HT,11:CL,0:CB:CL,187:WI,5ESI0SI0FHI,SI1:CB:XSOZCP0620\48100:40"l580:M1:604,2050440L *** PREFIX *** [CF:48000SF::"CURRENT PREFIX: ";FT$::"NEW PREFIX: /";N$:N$"/"N$N$"/"2050FT$N$SO:48000:49204,6:40 *** CATALOG ***  CF:48000% SF::(4);"CATALOG ";FT$::@ "Click to continue.."H MSa MS:(MB)2553035k 2050 *** EXIT *** CF:48000::30:"/SONIX/SYSTEM/MENU1":(4);"RUN SYSTEM/MENU1" *** EDIT *** F70:HL,157:VL,187:CF:48000:LF146000:45000$MS:52000DMS:52000:(MB)2555700](MV)127Ĺ(MV),127wYR(MV)2:XR(MH)2YRYR10YR2YR0MS:52000:(MB)2555597(MV)127Ĺ(MV),127YN(MV)21:XN(MH)21:HXNXRYNYN10YN0YN0#H050083X(YNYR)HACP0:F71VYXRXN:YRYRXeYR0YR0xYR255YR255Y266231,YR::26623Y,YN:M1:XRXN:5020DA,8:CI VI,16:HI,0:WI,160:HT,130:CL,51:CB:VI,17:HI,1:WI,158:HT,128:CL,0:CB1HL,156:MH,10:VL,189:580t28329,N3(N3256)256:28330,(N3256):28321:48000:M1:40DF715597E5008p *** CAPTURE *** uCP1zFZ044000CF:BK,5:DS48100:FZ0:I6:LAN3:M3,N3(N3256)256:M31,(N3256):M25HA(M3)(M31)256:LAHALAGLA25649500O2,N3(N3256)256:O21,(N3256):O3,LA(LA256)256:O31,(LA256):M9VI,170:HI,92:WI,67:HT,11:CL,0:CB:LL,98:TT,172:SG$"LENGTH= "(LA):CL,170:ST 48100:6055:6060 BOX BLANKER eVI,Y(I)1:HI,X(I)1:WI,W(I)X(I)2:HT,H(I)Y(I)2:CL,0:CB:z CAPTURE LOOP 6061:6063TT,Y(I)3:LL,X(I)10:CL,153:SG$"BACKOUT":STI05:6055::I12:6055:I7:6055:I10:6055:I11:6055:LX32768:LM7!LALX60685LXLX2:LMLM1FLX2566068P6064kLMLM8:FO1:FT1:FM06195:I21:OS6:FO1:FM0:NO30:F06225:V0127:629143I66400I1I46700I13YRY(I)YRH(I)6170II1I2360706130,XRX(I)XRW(I)62006.61403TT,21:LL,45:DA,1:IC:I13:PI:48100:I16:48100:TT,64:LL,77:DA,2:IC:PI:TT,81:DA,3:IC:PI4TT,98:DA,4:IC:PI:TT,3:LL,63:CL,153:SG$"REF ON":ST:LL,98:SG$"REF OFF":ST5I3:48100:Y8I0,0,0,0,0,0,0,0,0,0,0,0,6220,6220,6240,6240,6260,6270,6600,6280,6290,6300vK ONE SHOT / FREE RUN LCF:I13:48100:I14:48100:FMFM1:COQFM2FM0S6500:6070_ ON / OFF `CF:I15:48100:I16:48100:FOFO1:CO bFO2FO0d6500:60702s COARSE PITCH =tTT,64ivCF:DA,2:LI:CI:LL,(MH):IC:PI:COwF1((MH)48)1092.26xF0F1FFzS2,F0(F0256)256:S3,(F0256):6500:6070} FINE PITCH ~TT,81 CF:DA,3:LI:CI:LL,(MH):IC:PI:CO+FF((MH)48)18.20:62647 OSC ?CFKNONO1[NO31NO1gNZNO2oO7S22,225:S2,NZ:S33,96:S1:S22,0:S2,0:S33,1696293 RES CFOSOS1OS8OS0IZIQI21:VI,Y(I)1:HI,X(I)1:WI,12:HT,11:CL,255:CB:TT,(VI)2:LL,(HI)4:CL,85:SG$(OS):STI20:VI,Y(I)1:HI,X(I)1:WI,12:HT,11:CL,255:CB:TT,(VI)2:LL,(HI)2:CL,85:SG$(NO):STIIZ:6500:6070 *** ACCEPT *** 1VL,180:HL,150:6402:BK,5:DS:I6:6055:6061:S9,0:S8,1:S1:S9,1:S1RCL,255:HT,70:WI,20:VI,22pX06:HI,(X21)7:CB:CL,85:LL,15:TT,75 DA,195:CH:LL,36:DA,196:CH:LL,57:DA,197:CH:DA,198:LL,78:CH:DA,199:LL,99:CH:DA,193:LL,120:CH:DA,194:LL,141:CH,CL,0:HT,30:WI,11:VI,22iHI,22:CB:HI,43:CB:HI,85:CB:HI,106:CB:HI,127:CBCL,170:TT,40:LL,24:DQ8SG$"C#":ST:LL,45:SG$"Eb":ST:LL,87:SG$"F#":ST:LL,108:SG$"G#":ST:LL,129:SG$"Bb":ST3:TT,120:LL,12:SG$"Creating semitone table...standby":CL,153:STPFE((F1FF)DQ).9438742cFE655356390AV28672:X19002:AVX,FE(FE256)256:AVX1,(FE256):FEFE.9438742:VI,119:WI,140:HT,13:HI,10:CL,0:CB TT,3:LL,63:SG$"OCT= 0":KX0:KCKY(KX):CL,153:ST6 :LL,34:SG$"SAVE":STE MS:53000e MS:53000:(MB)2556351{ YR(MV):XR(MH) I011 YR22YR22HH(I)6360 :6370 XRXX(I)XRXX(I)WW(I)6377  I0:60 I66393 I26800 !I16850!6351+!SP2:FM1SP0Z!S4,V0:S5,0:S6,LM:S7,OS:S8,3:S9,0:S1!S2,((NN(I)2)AVKC):S3,((NN(I)2)1AVKC):S8,SP:S1!FM06350!I101500::S8,1:S1:6350!DQDQ2!6342!DA,9:CI:CO" BACKOUT "SI0:6402:6405X"CF:DA,2:LI:CI:DA,3:LI:CI:DA,4:LI:CI:DA,1:LI:CI:l"HL,156:VL,189" CP0:49204,6:FM0:FO1:V0127:F032203:6500:SO:BK,5:DS:580:M1:45000:FR0:I1:6055:11020"c DOC INTERFACE "dX0#xFO1FM1X1#FO0FM0X2)#FO1FM0X3{#S2,F0(F0256)256:S3,(F0256):S4,V0:S5,0:S6,LM:S7,OS:S8,X:S9,0:S1#FM1ı#FO1ı#CF:I15:48100:I16:48100:CO:FOFO1#FO2FO0## VOLUME #TT,98$CF:DA,4:LI:CI:LL,(MH):IC:PI:COD$V0((MH)48)4.40:S5,V0:6500:6070W$+ REF ON/OFF $,CF:I2:48100:I3:48100:FRFR1:CO$1FQ2548$6FR2FR0$@FR16740$JS8,1:S9,1:S1:6070%TS2,FQ(FQ256)256:S3,(FQ256):S4,90:S5,160:S6,0:S7,0:S8,0:S9,1:S1!%^6070-%KXKX1<%KX7KX0J%KCKY(KX)%DA,9:CI:I2:6055:TT,3:LL,63:SG$"OCT= "(KX):CL,153:ST%6350% *** SAVE *** %MR1:FM0MR3%HL,156:VL,189 &DR28667:DR,LM:DR1,V0:DR2,MR:DR3,OS:DR4,08&28289,N3(N3256)256:28290,(N3256)f&:28295,LX(LX256)256:28296,(LX256)&DRLX256:28307,DR(DR256)256:28308,(DR256)&DQDR4096:28301,DQ(DQ256)256:28302,(DQ256) 'DQDQ4096:28304,DQ(DQ256)256:28305,(DQ256)8'28272:DA,9:CI:48000:DS:SF:15000O'X *** SAMPLE *** X'ZCP1f']CF:6055'bTT,Y(I)3:LL,X(I)10:CL,153:SG$"BACKOUT":ST'gI06:6055::I12:6055:I10:6055:I11:6055'hVI,188:HI,1:WI,158:HT,11:CL,0:CB(lDA,5:TT,50:LL,55:IC:PI:COg(mTT,190:LL,50:SG$"Pre-amp slot: "(((28347)128)16):CL,255:STt(oRX$".1"(pR1100RX$".12"(qI25:SG$(SW):7340:I24:SG$(R1)RX$:7340(v43(I77090(I237100(I247200(I257300 )70300)CF:SI0:DA,5:LI:CI:N3N0:6410?) SAMPLE M)M8:N1N0u)CF:48100:O4:48100:DA,5:LI:CI)46000:BK,5:DS:BK,2:F$"NONAME.SWF")M1:FZ1:LF1:CO:I12:48100:I6:N3N0:6000)  RATE )*RTRT1)4RT22RT0*>R0RT410:R110RT32#*BRX$".1"7*CRT7RX$".12"\*HO6,R0:SG$(R1)RX$:7340:7030i* SIZE u*SZSZ1*SZ8SZ0*SWSY(SZ):O5,SW(SW256)256:O51,(SW256)*SG$(SW):7340:7030,+CF:VI,Y(I)1:HI,X(I)1:WI,23:HT,11:CL,255:CB:CL,85:TT,Y(I)3:LL,X(I)3:ST::+@DA,7:CIG+ACP140j+JN3(((MH)1)320)8268:10005t+(#1000+' *** DOWN *** +'LF044000+'FZ112200+'CF:M1:N1N375+'N1N0N1N0+$'N3N1:46000:M1:45000+.'11020 ,* *** UP *** ,*LF044000),*FZ112100V,+CF:M1:N1N380:N3N1:46000:M1:45000v, +SI((N18193)320):580:40,. *** ZIP *** ,.LF044000,.CF:48100:FZFZ1,.FZ1FZ0,.40,C/ ZIP UP -D/CF:M1:M3,N3(N3256)256:M31,(N3256):M2+-X/N3(M3)(M31)256:N1N3H-b/46000:M1:45000:11020Y-/ ZIP DOWN -/CF:M1:M5,N3(N3256)256:M51,(N3256):M4-/N3(M5)(M51)256:N1N3-/12130-: *** SAVER *** -:N18193:46000:M1:N38193.:SE$FT$"/"F$.:(SE$,4)".SWF"15020..:SE$SE$".SWF"n.::"Save as: ";:SE$::"O.K. (Y/N)? ";:K$::K$"Y"15050.::"NEW PATHNAME: ";SE$:SE$""6410.:15015.:49600.:N1LX256:SG$"SA,06,"SE$",A$042000,L$":47000:SG$SG$","/:L(SE$):XL11/:(SE$,X,1)"/"15080%/:F/:FT$(SE$,X1):F$(SE$,LX)]/:LG:49204,6:6410/૲ *** SEQUENCE ERROR *** /꫹DA,0:TT,68:LL,45:IC:1052:1052/MS/MS:(MB)25544050/DA,0:CF:CI:40/ǯ0ȯ *** PRINT RANGE *** y0үVI,170:HI,92:WI,67:HT,11:CL,0:CB:LL,98:TT,172:SG$(N38192)" TO "(N33198192):CL,153:ST:ZQ(0):0 *** FETCH WAVEFORM SEGMENT *** 0M7,N1(N1256)256:M71,(N1256):M6:0 *** DECIMAL/HEX CONVERTER *** 1I140961X1I1:H101NN1X1+1N047060C1ʷH1H11:N1N:47030^1ԷN1N:N1N1X1:I1I116n1޷I11471001跭H19H1H171SG$SG$(H148):470201H19H1H171SG$SG$(H148):1 *** BOX BLINKER *** 1X06:48100:48020::2Y050::G2仹VI,Y(I):HI,X(I):WI,W(I)X(I):HT,H(I)Y(I):IB:_2h *** VERIFY *** r2mSE$FT$"/"F$2n49010:490402rFV$SE$:L(FV$):704,L2|X1L:704X,((FV$,X,1)):2768:E(778)::2E0ı21052#3E64ĺ"** ERROR ** Pathname has invalid syntax"W3E69ĺ"** ERROR ** Volume directory not found"3E70ĺ"** ERROR ** File not found in specified directory"3E39ĺ"** ERROR ** I/O error.. check drive"33¿:"Click to continue.."3̿MS 4ѿMS:(MB)25549105(4ֿSO:48100:49204,6:40640 v4D1052::23:"** ERROR ** Prefix ";FT$;" not found":490904\DA,6:TT,68:LL,45:IC:10524fMS:CO4pMS:CO:(MB)255495204zCF:CI:64104490104E70ı410525E049700;5E64ĺ"** ERROR ** Pathname has invalid syntax"o5E69ĺ"** ERROR ** Volume directory not found"5E39ĺ"** ERROR ** I/O Error.. check drive"5¡5º:"Click to continue..":MS5 ŒMS:(MB)255496755«1501086$º"** CAUTION ** File already exists.. O.K. to overwrite? (Y/N) ";:K$:F6.­K$"Y"ıQ68«49665v6Pò *** SCREEN LOCATION DATA *** 6ZÃ0,0,24,13,0,30,54,13,0,60,90,13,0,95,128,13,0,133,160,136dÃ151,0,48,164,151,56,104,164,151,112,160,164,185,0,155,199,0,0,0,0 *7nÃ169,0,24,182,169,30,54,182,169,60,86,182Y7xÃ32,0,191,196,11,3,141,10,3,96,0,10,192,2 7Ã24,47,79,37,24,81,113,37,39,47,79,52,39,81,113,52,64,47,107,70,81,47,107,87,98,47,107,104,110,65,79,123,110,99,118,123,125,47,113,138 8Ã53,58,103,66,68,78,103,80,83,78,103,95 H8Ã256,512,1024,2048,4096,8192,16384,327688à 1,22,10,29,3,43,10,29,6,85,10,29,8,106,10,29,10,127,10,29 8Ã0,6,20,69,2,27,20,69,4,48,20,69,5,69,20,69,7,90,20,69,9,111 ,20,69,11,132,20,69 9Ã0,24,48,72,96,120,144,168:9ÁI012:Y(I):X(I):W(I):H(I):T9ÁX013:A:768X,A:{9ÁI1325:Y(I):X(I):W(I):H(I):9ÁX07:SY(X):9ÁI011:NN(I):XX(I):WW(I):HH(I):9ÁI07:KY(I):9ñ97Dz *** SLIDE BAR ICON PLOTTER *** :8ǭLFw SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: MUSICEDIT  REV 1.1 24-APR-88  *** PROGRAM INITIALIZATION ***  A$(15):H(15):V(15):N$(12):PN$(32):PX$(32):PI(32):LA(32):LR(32):10050:10000:49204,2:l "OPEN CONFIG.T":"READ CONFIG.T":FT$:FT$:FT$:FT$:FT$:F$:"CLOSE"} (4);"PR#3" BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3 CB{}~LI3K MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1 VI38999:HIVI1:WIHI2:HTWI1:N08192:N226624/ S116605:S2S112:S3S27:S4S37:S5S47:S6S57:S7S67:S8S76:C2255:L50:V50:E40:D40_ LG38960:IK,2:BK,2:HL,90:VL,50:XO1:X1j 30918q  (RF28672:DN28884:UP28979:OC26624:FI26636:FE0:38152:SO:DS:CL,85:SC:SF 2 *** MAIN PROGRAM LOOP *** PDN:22000 ZMS:49204,2 dMS:(MB)2553004 nV1(MV):H1(MH)C xV125900R }H(H110)_ H1H1 H400,450,500,550,600,650,700,750,800 ,X2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000 6100 X1 23000:100 X2:410 X3:410* &X4:4107 XX5:410D X6:410Q X7:410^ X8:410k X9:410z H(H110) H1H1 H6H6 H1000,1100,1200,1300,1400,1500 X10:410 LX11:410 X12:410 X13:410 xX14:410 X15:410 *** UP *** 8UP:BI(FI):BIBI1KBI127BI127TXX1FI,BI:DN:22000:XXX:21000:X0:100 *** UX10 ***  UP:BI(FI):BIBI10 BI127BI127 XX2:2020 *** TOP ***  UP:BI127:XX3:2020 *** SET DOC ***  309731 :30464:35509 MSQ MS:(MB)2553560d (MH)803536x 3540:X1:3520 3550:X0:3520 22:51::" EDIT ";::"| EXIT ": 22:51:" EDIT |";::" EXIT ":: X3600 D4080  40000=V3:H2:VO3:HO2:25010EMSf49168,0:MS:(MB)2553700$V((MV)3.3)3:HM(MH)&V183740'H2)HM45H41*N(V3)2+H41NN1.25000:3610tV183750uHH11:V:H:"";P$:N(N16)29743 vP$""3501)wD41:xP$"-"3730FyL(P$)U~L153995jX116:NX,0:uX1LNW((P$,X,1)):NW323501NW96NWNW32NX,NW128::FE1:3995X116:NX,0::FE1:N0:3995V20:H14:363020:17:"";PR$N296950PR$""3501BPR$"-"3780OL(PR$)^L483785(PR$,1)"/"(PR$,1)"/"3790X1LNW((PR$,X,1)):NW323501NW96NWNW32NX,NW128::3785X148:NX,0:V3:H13:VO2:HO13:FE1:N0::3995224:1052:1052:"PREFIX MUST BEGIN AND END WITH SLASHES... Example : /ROOT.DIRECTORY/";:K$:350130464:3540:HH11:25010:3630 *** LOAD *** 55000:X5:24000E41İ53000 (4);"CATALOG ";FT$F:"LOAD PATHNAME: ";FT$;:"/";F$TF$""80v(F$,4)".SMF"F$F$".SMF"SE$FT$"/"F$:L51::10050:49006:L50SG$SE$","29078:30918:38144:38176:E40:80 *** SAVE *** :X6:24000::"Packing music file...":38172::"Packing done."IT(26624)\SE$FT$"/"F$v(SE$,4)".SMF"4520SE$SE$".SMF":"Save as: ";:SE$::"O.K. (Y/N)?";:K$::K$"Y"K$"y"4545:"NEW PATHNAME: ";SE$:SE$""804515V51::10050:49006:V50lN1(38388)(38389)256:SG$"SA,06,"SE$",A$043000,L$":4610:SG$SG$","tLGL(SE$):XL11(SE$,X,1)"/"4580FT$(SE$,X1):F$(SE$,LX)26624,T:E40:80 *** HEX/DECIMAL CONVERTER *** H$""( N10SG$SG$H$:XI1(N116):F1(N116I1)16:N1I1:F1F148k F157F1F17*H$(F1)H$:4620 *** PREFIX *** 49204,6:UP::"CURRENT PREFIX: ";FT$::"NEW PREFIX: /";N$:N$"/"N$N$"/"5050 FT$N$:XO6622000:XO6:X7:23000:X0:49204,2:100M{ *** CATALOG *** u|49204,6::(4);"CATALOG ";FT$::"Click to continue.."MSMS:(MB)255553022000:XO6:X8:23000:X0:49204,2:100o *** EXIT *** p49204,6:zE41İ53000EZ38981,154:38983,189:(4);"RUN SYSTEM/MENU1"Yc *** DOWN *** rdUP:BI(FI):BIBI1nBI0BI0xXX10:2020W *** DX10 *** XUP:BI(FI):BIBI10bBI0BI0lXX11:2020K *** BOTTOM *** LUP:BI0:XX12:2020$? *** SET DIS *** ?@UP:X13:24000:32,24xA:33,35:9:1:"**********************************"B1:"* *"C1:"* *"D1:"* *",E1:"**********************************">F33,33:Y05J11:3:"POSITION ";Y1;" OSCILLATOR = ":11:28:"";OS$KOS$""8025L(OS$)318001T26624Y,(OS$)Y^:32,0:33,80:hDN:22000:XO1:23000:X0:100 3! *** EDIT *** 54!X14:24000:22010:VO7:HO17:V7:H17C9!MS:8550[>!MS:(MB)2558560hC!49168,0H!H((MH)1.42):HH17R!V((MV)7.1)3:VV4W!V4V7\!V22V22^!I17808:HOI8750`! f!VO:HO:" ";:V:H::"^";::VOV:HOH:8510p!"u!V2:H:K$5v!K$(13)8920Hw!(K$)328565Vx!K$;:E41oz!K$"-"OZ255:8700|!K$"Z"K$"z"OZ128:8700!K$"X"K$"x"OZ254:8700!K$"V"K$"v"OZ224:8930!K$"M"K$"m"OZ208:8930!K$"T"K$"t"OZ192:8930/!K$"N"K$"n"OZ240:8990>!F918610Q!K$(13)8690l!X011:N$(X)K$8630}!:F91:8560!F90!V1:H:K$:K$;!(K$)48(K$)558640! *** WRITE NOTE VALUE *** !A1HO17:A2(VO7)3:AA1(A264)24576:A,((K$)12)X#!I178082!HOI87708!S!V:HO:" ";:UP:8505r! *** -,X,Z COMMANDS *** !A1HO17:A2(VO7)3:AA1(A264)24576:A,OZ:8770."VO:HO:"|";:V:H::"^";::VOV:HOH:8510B"VO:HO:"|";:UP:8510 "49168,0:UP:800 " *** V,M,T,<,> COMMANDS *** @ "V1:H:K$Q "K$"<"8970b "K$">"8980n "K(K$) " HEX RECTIFIER "K48K708930 "K64K71KK7 " "K$; #A1HO17:A2(VO7)3:AA1(A264)24576:A,OZK48:8505! #K$! #OZ224OZ252:87004! #OZ208OZ250:8700M!#OZ192OZ248:8700W!#8930_!#K$x!#OZ224OZ253:8700!#OZ208OZ251:8700!#OZ192OZ249:8700!#8930!# *** N COMMAND *** !#V1:H:K$! #K(K$)!"#K48K558990"$#K$;"⌀%"'# *** PLAY *** "(#SO:49204,6:CL,85:SC:X0:Y0:W160:H13:C10:C2255:50000:TT,3:LL,56:CL,0:SG$"PLAY OPTIONS":ST")#I210:DA,I2:TT,20:LL,72:IC:PI"*#DA,12:TT,37:LL,95:IC:PI:J60:J51-#+#:TT,42:LL,35:CL,255:SG$"BAR: ":ST:C60:BR0:LL,56:SG$(BR):ST#-#Y187:50000:TT,190:LL,14:SG$"Press key indicated for selection":CL,0:ST#.#56000#2#X55:W50:Y80:I05:50000:YY12:#7#CL,0#<#TT,83:LL,58:SG$"(P)= PLAY":ST $=#TT,95:LL,58:SG$"(R)= RESUME":ST4$>#TT,107:LL,58:SG$"(S)= STOP":ST[$?#TT,119:LL,58:SG$"(X)= STEP":ST$@#TT,131:LL,58:SG$"(Z)= ZIP":ST$A#TT,143:LL,58:SG$"(E)= EDIT":ST$P#38172$U#49168,0$Z#K(16384)$[#K1279900%\#SG(((38394)(38395)256)16)%]#9070%^#SXSG9050;%d#9599:9700:SXSG:9050M%n#(38392)0ıy%o#J6900(38392):J6(J610)10:J6J5ı%x#VI,42:HI,106:WI,22:HT,13:CL,85:CB%#SG$(J6):TT,42:LL,106:CL,255:ST:J5J6:%#38160:9045%#38164:9045&T$C63:BR1:38156:9045.&$38393,1:38168:90454&%n&%38160:49168,0:SF:22000:49204,2:BIBR:XX15:2020&N%TT,54:LL,35:CL,255:SG$"BAR= ":ST:38160&O%SG$""&P%9560&Q%K$:K(K$)&R%K127K89558&S%K139565&T%K48K579553'U%X(0):SG$SG$K$:95521'V%L(SG$)1:L09551H'W%SG$(SG$,L):9552'X%VI,54:HI,56:WI,15:HT,10:CL,85:CB:TT,54:LL,56:CL,255:ST:DA,223:CH:']%38392,1:38156:SZ(SG$)'^%SG(((38394)(38395)256)16):9700'_%(38399)09570(`%(SG4)SZ9570!(a%38392,1:9566[(b%VI,54:HI,35:WI,33:HT,10:CL,85:CB:38392,8:9100a(%{(%TT,20:LL,72:I2I21(%I212I210(%DA,I2:IC:PI(%(%BR(SG4):BRC6ı)%C6BR:SG$(BR):VI,42:HI,56:WI,15:HT,10:CL,85:CB:TT,42:LL,56:CL,255:ST:*)&K211K2439100@)&K210K2429200V)&K208K2409300l)&K216K2489400)&K197K2299500)&K218K2509550)&9045)' *** INITIAL AND SCREEN DATA *** )'32,0,191,196,11,3,141,10,3,96,0,10,192,2 .*'0,1,2,3,4,5,30,31,10,11,12,13,0,0,96,0 *' UP ,UX10,TOP,SET DOC,LOAD,SAVE,PREFIX,CATALOG,EXIT,DOWN,DX10,BOT,SET DIS,EDIT,PLAY*'1,7,13,21,33,43,53,65,77,1,7,13,21,33,43*'23,23,23,23,23,23,23,23,23,24,24,24,24,24,24+'C,c,D,e,E,F,f,G,g,A,b,B8+ '32,0,191,196,11,3,141,10,3,96,0,10,192,2 T+$'X015:A:26624X,A:i+.'X115:A$(X):}+/'X115:H(X):+0'X115:V(X):+2'X011:N$(X):+8'+B'X013:A1:768X,A1::+N *** NORMAL SELECTOR PRINTER *** , NV(X):H(X):A$(X);:3::8,R *** INVERSE SELECTOR PRINTER *** I,R:20000::g,U *** SCREEN REFRESH *** ,URF:X1X:X115:20000::XX1:22010:22015,U1:71::" BAR # ";(FI);::,UV7:4::4:I019:"====";:-VH17808:V:H:"|";::VV3-VV2222050-V22020'-"V3::F-Y *** SELECTOR UPDATE *** R-YXXOız-YXTX:XXO:20000:XXT:21000:XOX:-] *** TOP LINE PRINTER *** .]1:1::" ";:1:2:A$(X)::+.a *** CURSOR UPDATE *** 7.aVVOıL.aVTV:VVO:26000\.aV2028000x.aVVT:27000:VOV:HOH:.eV:HO:" ";:3::.xi:V:H:"-->";:3:::.`m20:15:":":25012.? *** DOC UPDATER *** C/@E41:D40:PT29744:X029:PN$(X)""::AM1:PX0:X(0):X029:LA(X)0::X029:LR(X)0:x/E24:" Processing changes.... please standby..";/I READ FILENAME /JN$"":XPTPT15/T(X)040040/^N$N$((X)):/g CREATE DUPLICATE AND UNIQUE TABLES 0hX(0):PX$(PX)N$:PXPX1:AP1.0rN$PN$(AP)40080?0|AMAP40110V0PN$(AP)N$:AMAM1c0PTPT16x0PT30224401200400100APAP1:400500 CREATE PRIORITY TABLE 0X(0):A10X0290PX$(X)""401400œPN$(A)PX$(X)PI(X)A 1̜:AA11֜AAM40121.1ߜ GET PREFIX N1PZ29696:NZ$"":XPZPZ47`1ꜭ(X)040190v1NZ$NZ$((X)):1 PREVIEW FILES 1A1:LA0:LM655361PN$(A)""402501 :10050:490001 SG$"LD,"NZ$PN$(A)",A$044000,":38960230964:L(30972)2LN256,2L48LN16384>2L40LN8192P2L32LN4096b2 L24LN2048t2!L16LN10242"L8LN5122#L56LN327682$LR(A)(LA256):LA(A)L:AA12&LALALN:LALM510002:AAM402002D30918 3k STUFF SEMITABS/RAM/DOC 3lA1*3vPN$(A)""40410W3wSG$"LD,"NZ$PN$(A)",A$044000,":38960338437,4:38432,0:38433,64:38434,4:38430,0:AA03X0293PX$(X)""404003PN$(A)PX$(X)40400338445,X:38431,LR(A) 438435,AA4096((AA4096)256)256.4Ɲ38436,((AA4096)256):3840094˝38409I4НAAAA256:_4ڝAA1:AAM40310~4' FILL IN RAM ADDRESSES 4(FZ29759:X029:PPI(X):FZ,LR(P):FZFZ16:4 FILL IN LENGTHS 4FZ30224:X029:PPI(X):FZX,LA(P):5LA65536LA0<5LBLMLA:30254,LA(LA256)256:30255,(LA256)O5LB65536LB0|5T30256,LB(LB256)256:30257,(LB256)5:30464:24:"Processing complete.";:X15000:5f309395gFE0:805h *** VERIFY *** 5mSE$NZ$PN$(A):23 6n49010:49040&6rFV$SE$:L(FV$):704,LH6|X1L:704X,((FV$,X,1)):^6768:E(778)::m6E049100~6E70V51ı61052:24:6E64ĺ" ** ERROR *** Pathname has invalid syntax ";L7E69ĺ" ** ERROR ** Volume directory not found ";7E70ĺ" ** ERROR ** File not found in specified directory ";8E39ĺ" ** ERROR ** I/O error.. check drive ";8V5149086(8L5149087:8K$:::3501Q8V50:K$:::4530h8L50:K$:::4020t8̿V50ı8ֿ:"*** File already exists... O.K. to overwrite? (Y/N)";:K$:K$8࿭K$"Y"K$"y"ı8꿡:808Oò *** BOX PLOTTER *** J9PùVI,Y:HI,X:WI,W:HT,H:CL,C1:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB:o97Dz *** MISC. ERROR MESSAGES *** 98Ǣ24::" *** ERROR *** OUT OF MEMORY Too many different waveforms... please re-edit ";::1052:1052:K$:3501-:Ϻ:"Music file has been altered... Save changes? (Y/N) ";:K$:K$F:ϭK$"y"K$"Y"53020L:ϱX:ϡ:4500:֌1052::"** ERROR ** Prefix ";FT$;" not found":ֺ:"Press any key for editor ";:K$::80;ڗ:1052::"** ERROR ** Music data corrupted! re-load waveforms or music file.":55010} SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: BASIC INTERFACE A$"":Y(15):50000:P$"TEXT/BAS."49205,0 *** Utility equates *** N BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3Z CBLI3 MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1t VI38999:HIVI1:WIHI2:HTWI1:DI38412:PT38444:MO38442:SE38403:OS38445:AO38409:VO38441:RA38430:LA38432:SA38435:RM38400 LA,0:LA1,32:LA2,16:SA,0:SA1,32:SA2,16:OS,1:RA,0:RA1,128:RM (4);"BLOAD SYSTEM/INPUT"  *** draw screen ***  49204,2:BK,2:SO:DS# w30000N xX0:Y0:W160:H200:C10:C2153:10000 SG$"SONIX BASIC INTERFACE":TT,3:LL,37:CL,51:ST SG$"Return to selector menu":TT,190:LL,33:CL,51:ST C10:C2255:X2:Y12:W156:H176:10000 T26:L8:XX16:11000:XX76:11000^ TT,T:LL,L:CL,85:SG$"$9600 38400 RAM Call entry point":ST:500 TT,T:LL,L:CL,85:SG$"$9603 38403 SEMI Call entry point":ST:500 TT,T:LL,L:CL,85:SG$"$9606 38406 ROOT Call entry point":ST:500< TT,T:LL,L:CL,85:SG$"$9609 38409 AUTO Call entry point":ST:500 TT,T:LL,L:CL,85:SG$"$960C 38412 DISK Call entry point":ST:500 TT10 TT,T:LL,L:CL,85:SG$"$961E 38430 Sound RAM address":ST:500TT,T:LL,L:CL,85:SG$"$9620 38432 Source address":ST:500eTT,T:LL,L:CL,85:SG$"$9623 38435 Semitone table address":ST:500TT,T:LL,L:CL,85:SG$"$9626 38438 Waveform length":ST:500"TT,T:LL,L:CL,85:SG$"$9628 38440 Length number":ST:500&,TT,T:LL,L:CL,85:SG$"$9629 38441 Volume":ST:500j6TT,T:LL,L:CL,85:SG$"$962A 38442 Oscillator mode":ST:500@TT,T:LL,L:CL,85:SG$"$962B 38443 Resolution":ST:500JTT,T:LL,L:CL,85:SG$"$962C 38444 Pitch number":ST:5000TTT,T:LL,L:CL,85:SG$"$962D 38445 Oscillator number":ST:500_^CL,34:TT,16:SG$"SONIX CALLS":LL,58:SThCL,34:TT,76:SG$"SONIX DATA":LL,60:ST90013000:II1:TT10: *** main program loop *** I0:12000MS:CO49204,2MS:CO:(MB)255970!V(MV)-I014GVY(I)VY(I)12950MaNWI:NWOL910CF:IOL:12000:INW:12000:OLNW:CO:910I15990(4);"BLOADSYSTEM/INPUT,A$2B0"F$P$(I):20000CF:49204,6:(4);"RUN SYSTEM/MENU1"' *** box plotter *** r'CL,C1:VI,Y:HI,X:WI,W:HT,H:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB:* *** divider plotter *** *SG$"------------ ------------":CL,136:TT,XX:LL,8:ST:. *** inverse bar plotter *** /.13000:VI,Y(I):HI,3:WI,154:HT,11:IB:L2 *** sound player *** |2MO,3:OS,1:SE:VO,40:MO,2:PT,30I:SE: N *** PRINTER INTERFACE *** !N:CF:SF:49204,6:49186,246*N(4);"OPEN ";F$4N(4);"READ ";F$>NA$:A$"ENDLINE"20040)CN688:(A$,1,79):X(0):20030:HN(4);"PR#0"LRN(4);"CLOSE"SN22:"______________________________________________________________________________"TN:24);"END OF FILE....click for menu";25);::UNMSVNMS:(MB)25520054WN49204,2:SO:902I0u49204,0:X0:Y0:W160:H200:C1153:C285:10000s1uX1:Y1:W158:H198:C185:C20:100002uX34:W90:Y0:H13:C1153:C285:100005uSG$"SONIX BASIC INTERFACE":TT,3:LL,37:CL,170:ST :uTT,24:LL,4:SG$"The SONIX BASIC INTERFACE is a binary":CL,153:SThDuSG$"file named SONIX.GS in the root direc-":TT,(TT)12:LL,4:STNuSG$"tory of this disk. The DISK call in":TT,(TT)12:LL,4:STXuSG$"SONIX is dependent on LONGLOADER,":TT,(TT)12:LL,4:ST5buSG$"another file in the root directory.":TT,(TT)12:LL,4:STvuSG$"Brun LONGLOADER followed by SONIX.GS":TT,(TT)22:LL,4:CL,136:STuSG$"in your Startup program to install":TT,(TT)12:LL,4:ST uSG$"the complete SONIX BASIC INTERFACE.":TT,(TT)12:LL,4:STYuSG$"If this interface is used along with":TT,(TT)18:LL,4:CL,51:STuSG$"ICONIX.GS, then Brun ICONIX.GS first,":TT,(TT)12:LL,4:STuSG$"followed by LONGLOADER and SONIX.GS.":TT,(TT)12:LL,4:ST6uSG$"Click for CALL and DATA descriptions..":TT,(TT)18:LL,4:CL,170:STCu:MS:COauMS:CO:(MB)25530150wuCF:49204,2:120Nò *** vertical tabs *** PÃ24,34,44,54,64,84,94,104,114,124,134,144,154,164,174,188ZÁX015:Y(X):: } SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: NOTE ENGINE A$"":50000:P$"TEXT/NE."49205,0:(4);"BLOADSYSTEM/INPUT,A$2B0"F BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3 CBLI3:MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1h VI38999:HIVI1:WIHI2:HTWI1:DI38412:PT38444:MO38442:SE38403:OS38445:AO38409:VO38441:RA38430:LA38432:SA38435:RM38400 LA,0:LA1,32:LA2,16:SA,0:SA1,32:SA2,16:OS,1:RA,0:RA1,128:RM  *** draw screen *** 49204,2:BK,2:SO:DS:30000! xX0:Y0:W160:H200:C1017:C2170:10000L }Y1:X44:W72:H11:C185:C2238:10000 SG$"SONIX NOTE ENGINE":TT,3:LL,46:CL,017:ST SG$"Return to selector menu":TT,190:LL,33:CL,102:ST C10:C2255:X2:Y12:W156:H176:10000 T34:L05:XX20:11000:XX130:11000^ TT,T:LL,L:CL,102:SG$"38144 $9500 LOAD Call entry point":ST:500 TT,T:LL,L:CL,102:SG$"38152 $9508 CONVERT Call entry point":ST:500 TT,T:LL,L:CL,102:SG$"38156 $950C START Call entry point":ST:500C TT,T:LL,L:CL,102:SG$"38160 $9510 STOP Call entry point":ST:500 TT,T:LL,L:CL,102:SG$"38164 $9514 RESUME Call entry point":ST:500 TT,T:LL,L:CL,102:SG$"38168 $9518 STEP Call entry point":ST:500 TT12^CL,051:TT,20:SG$"NOTE ENGINE CALLS":LL,46:STRhCL,051:TT,130:SG$"NOTE ENGINE DATA":LL,48:STTT,T:LL,L:CL,102:SG$"$95FF 38399 Status address":ST:500TT,T:LL,L:CL,102:SG$"$25FA,FB 9722,23 Song Count address":ST:5000TT,T:LL,L:CL,102:SG$"$95F7 38391 Master Volume address":ST:5009900S13000:II1:TT16:u *** main program loop *** I0:12000MS:CO49204,2MS:CO:(MB)255970V(MV)I08VY(I)VY(I)17950NWI:NWOL9102CF:IOL:12000:INW:12000:OLNW:CO:910?I9990UF$P$(I):20000CF:49204,6:(4);"RUN SYSTEM/MENU1"' *** box plotter *** 'CL,C1:VI,Y:HI,X:WI,W:HT,H:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB:* *** divider plotter *** Y*SG$"--------- ---------":CL,034:TT,XX:LL,8:ST:}. *** inverse bar plotter *** .13000:VI,Y(I):HI,3:WI,154:HT,11:IB:2 *** sound player *** 2MO,3:OS,1:SE:VO,40:MO,2:PT,30I:SE: N *** PRINTER INTERFACE *** ?!N:CF:SF:49204,6:49186,246:c%N(4);"BLOADSYSTEM/INPUT,A$2B0"*N(4);"OPEN ";F$:(4);"READ ";F$>NA$:A$"ENDLINE"20040CN688:" "(A$,1,78):X(0):20030HN(4);"PR#0"RN(4);"CLOSE";F$MSN4:23:"___________________________________________________________________________"TN:4:23);"END OF FILE....Click for menu";23);:UNMSVNMS:(MB)25520054WN49204,2:SO:9020u49204,5:X0:Y0:W160:H200:C1051:C2238:100001uX1:Y1:W158:H198:C1000:C2238:10000K2uX43:W75:Y0:H13:C1017:C2238:100005uSG$"SONIX NOTE ENGINE":TT,3:LL,47:CL,051:ST:uTT,24:LL,4:SG$"SONIX's NOTE ENGINE is the binary file":CL,102:STDuSG$"program that plays back music files":TT,(TT)12:LL,4:STMNuSG$"written by the MUSIC EDITOR.":TT,(TT)12:LL,4:STXuSG$"Your program should BRUN the SONIX ":CL,136:TT,(TT)18:LL,4:STbuSG$"interfaces in this order:":TT,(TT)12:LL,4:STfluSG$"(1) LONGLOADER":TT,(TT)18:LL,40:CL,34:ST:SG$"(2) SONIX.GS":TT,(TT)12:LL,40:ST:SG$"(3) NOTE.ENGINE":TT,(TT)12:LL,40:STvuSG$"If you also want to use the ICONIX.GS":TT,(TT)21:LL,4:CL,51:STuSG$"interface, BRUN it first.":TT,(TT)12:LL,4:STuHI,80:VI,161:WI,20:HT,1:CBcuSG$"Click for CALL and DATA descriptions..":TT,(TT)32:LL,4:CL,102:STpu:MS:COuMS:CO:(MB)25530150uCF:49204,2:120Nò *** vertical tabs *** PÃ32,48,64,80,96,112,140,156,172,188 ZÁX09:Y(X):: ~ SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: LONGLOADER INST. 49205,052000 *** Initialize SHGR Variables *** = BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3I CBLI3T 53000 MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1 VI38999:HIVI1:WIHIȪ2:HTWI1C  *** Re-activate and Re-draw the SHGR screen *** u BK,2:SO:DS:32781,1:32768:IK,2:49204,10 CL,102:SC:HI,0:VI,0:WI,160:HT,15:CL,221:CB:V0:H45:W70:T13:C1102:C2255:44000  *** TITLE PAGE *** ! TT,3:LL,50:CL,51:SG$"Longloader V1.0":STB (VI,15:40000:VI,183:40000 2TT,21:LL,5:CL,153:SG$"Load or Save files anywhere in memory.":ST <TT,41:LL,3:CL,170:SG$"Copy the file LONGLOADER to your disk":ST FTT,51:LL,3:CL,170:SG$"and BRUN it once from your STARTUP":STG PTT,61:LL,3:CL,170:SG$"program.":ST ZV83:H12:W135:T50:C151:C2255:44000:V84:H12:W135:T48:C151:C2255:44000 d41000 nTT,89:LL,15:CL,51:SG$"NOTE:":ST xTT,100:LL,17:SG$"BRUN this program after BRUN-ing":ST3 }VI,108:HI,89:WI,19:HT,1:CBn TT,110:LL,17:SG$"ICONIX.GS on disks using both":ST TT,120:LL,17:SG$"utilities.":ST TT,149:LL,3:CL,170:SG$"This is all you need to do. LONGLOADER":ST"TT,159:LL,3:SG$"will now be available until re-boot.":ST*MSCMS:(MB)2552010d *** LOAD SYNTAX PAGE *** r 49204,10 CL,102:SC:HI,0:VI,0:HT,15:WI,160:CL,221:CB V0:H50:W54:T13:C1102:C2255:44000:TT,3:LL,55:CL,51:SG$"LOAD SYNTAX":STS TT,30:LL,5:CL,170:SG$"10 SG$=":ST:CL,51:DA,162:CH:SG$"LD,":CL,68:ST SG$"/FULL/PATHNAME":CL,136:ST:CL,187:SG$",A$123ABC":ST:CL,51:DA,172 CH:DA,162:CH:TT,42:LL,5:CL,170:SG$"20 CALL 38960":STO CL,68:TT,75:LL,5:SG$"LD - LOAD command token (loads any":ST:TT,85:LL,9:SG$" filetype)":ST CL,136:TT,110:LL,5:SG$"Full pathname....slashes and all":ST CL,187:TT,140:LL,5:SG$"ADDRESS - anywhere between 00/0000":ST:TT,150:LL,29:SG$" and FF/FFFF in hexadecimal":ST 41000M VI,15:40000:VI,183:40000:VI,63:40000| :WI,1:HT,48:HI,0:VI,15:CB:HI,159:CB MS MS:(MB)2553090 *** SAVE SYNTAX PAGE *** CL,102:SC:HI,0:VI,0:HT,15:WI,160:CL,221:CB$VI,15:40000:VI,183:40000:VI,70:40000RWI,1:HT,55:VI,15:HI,0:CB:HI,159:CBV0:H50:W54:T13:C1102:C2255:44000:TT,3:LL,55:CL,51:SG$"SAVE SYNTAX":ST41000TT,28:LL,5:CL,170:SG$"10 SG$=":ST:CL,51:DA,162:CH:SG$"SA,":CL,68:ST:CL,204:SG$"06,":STBCL,136:SG$"/FULL/PATHNAME":STbCL,187:SG$",A$123ABC":STTT,40:LL,21:CL,221:SG$",L$12AB":ST:CL,51:DA,172:CH:DA,162:CHTT,52:LL,5:CL,170:SG$"20 CALL 38960":STICL,68:TT,80:LL,5:SG$"SA - SAVE command token (saves any":ST:TT,90:LL,9:SG$" filetype)":STCL,204:TT,115:LL,5:SG$"FILETYPE - any type from $00 to $FF":STCL,221:TT,140:LL,5:SG$"LENGTH - anywhere between $0000 and":ST TT,152:LL,41:SG$"$FFFF in hexadecimal":ST$MS,.MS:(MB)2554910Q/ *** TRANSFER SYNTAX PAGE *** CL,102:SC:HI,0:VI,0:HT,15:WI,160:CL,221:CB:VI,15:40000:VI,175:40000:41000V0:H46:W66:T13:C1102:C2255:44000:TT,3:LL,49:CL,51:SG$"TRANSFER SYNTAX":STuTT,28:LL,12:CL,170:SG$"10 SG$=":ST:CL,51:DA,162:CH:SG$"XF,":CL,68:ST:CL,187:SG$"123ABC,":STSG$">,456DEF,":CL,204:STCL,119:SG$"L,12AB":ST:DA,172:CL,51:CH:DA,162:CHTT,40:LL,12:CL,170:SG$"20 CALL 38960":ST@VI,60:40000:HI,0:WI,1:HT,45:VI,15:CB:HI,159:CB~CL,68:TT,70:LL,5:SG$"XF - TRANSFER command token":STTT,092:LL,5:SG$"SOURCE address - $0 to $FFFFFF":CL,187:ST TT,114:LL,5:CL,204:SG$"DESTINATION address - $0 to $FFFFFF":STBTT,136:LL,5:CL,119:SG$"LENGTH - $0 to $FFFF":STUVI,155:40000TT,162:LL,5:CL,153:SG$"NOTE - NO '$' IN ADDRESSES OR LENGTHS":STfMSkMS:(MB)2555995? *** RETURNED VALUES PAGE *** @@CL,102:SC:HI,0:VI,0:HT,15:WI,160:CL,221:CB:VI,15:40000:VI,175:40000:41000SEVI,144:40000JV0:H47:W60:T13:C1102:C2255:44000:TT,3:LL,51:CL,51:SG$"RETURNED DATA":STTTT,28:LL,8:CL,187:SG$"$00/0303 771 Access bits":ST ^TT,40:LL,8:SG$"$00/0304 772 Filetype":ST_hTT,52:LL,8:SG$"$00/0305 773 Auxiliary filetype":STrTT,64:LL,8:SG$"$00/0307 775 Storage type":ST|TT,76:LL,8:SG$"$00/0308 776 Blocks used":ST TT,88:LL,8:SG$"$00/030A 778 Last mod. date":STGTT,100:LL,8:SG$"$00/030C 780 Last mod. time":STTT,112:LL,8:SG$"$00/030E 782 Creation date":STTT,124:LL,8:SG$"$00/0310 784 Creation time":STCL,153 TT,156:LL,6:SG$"These data produced by LOADING only.":STMS+MS:(MB)2558140I' *** SELECTOR MENU *** 'CL,85:SC:49204,2:V0:H0:W160:T160:C1255:C2170:44000:VI,1:HI,0:WI,160:HT,1:CL,255:CB:VI,158:CB'V55:H6:W148:T17:C10:C2221:44000U'V57:H8:W144:T13:C10:C2255:44000:TT,60:LL,11:SG$"Position cursor and click to select":CL,51:ST'VI,160:HI,0:WI,160:HT,40:CL,85:CB'TT,85:LL,42:V82:H40:W80:T13:C10:44000:V94:44000'CL,0:LL,51'SG$"Return to MENU":ST:TT,97$'SG$"Repeat INSTRUCTIONS":LL,42:ST03'MH,79:MV,112<8'MS:COZB'MS:CO:(MB)25510050rL'V(MV):H(MH):CFV'H44H12410040`'V83V9550000j'V94V10626n'10040? *** SUBROUTINES *** @CL,51:HI,0:WI,160:HT,1:CB:8(TT,189:LL,39:CL,255:SG$"Click to continue...":ST:yCL,51:HI,0:WI,160:HT,1:CB:VI,(VI)1:CL,0:HT,3:CB:X183VI,X:42000:XX3X14ı 43005 ૹVI,V:HI,H:WI,W:HT,T:CL,C1:CB:VI,V1:HI,H1:WI,W2:HT,T2:CL,C2:CB:: ȯTT,190:LL,50:CL,153:SG$"Click to EXIT":ST:H Nù49204,X9 PùVI,83:HI,41:WI,78:HT,11:IB:(4);"RUN SYSTEM/MENU1" ˃162,200,173,13,128,159,255,156,1,202,208,249,96 *ˁWW113:WQ:32767WW,WQ::!σ169,0,9,0,162,0,159,0,157,1,232,224,200,208,247,96:!lρXX015:XY:904XX,XY:: t SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: PREAMP  *** PROGRAM EQUATES ***  A$""o BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3{ CBLI3 MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1C VI38999:HIVI1:WIHI2:HTWI1:N08192:N226624 S116605:S2S112:S3S27:S4S37:S5S47:S6S57:S7S67:S8S76:C2255 LG38960:ZB,64:39326,96:39331,64 11000 m *** CREATE SCREEN *** n49204,255 xX0:Y0:W160:H200:C10:C234:10000V SG$"SYNTHESIZER PRE-AMP PLANS":TT,3:LL,3:CL,153:STd F91170 VI,2:HI,122:WI,35:HT,9:CL,255:CB TT,3:LL,126:SG$"PICTURE":CL,0:ST SG$"Click to continue":TT,190:LL,44:CL,153:ST C2255:X2:Y12:W156:H176:100001 *** MAIN LOOP *** < 20000H MS:COd MS:CO:(MB)255210 (MH)122(MV)9890 C2255:X2:Y12:W156:H176:CF:10000 CL,0:TT,6:20015 MS:CO MS:CO:(MB)255250 (MH)122(MV)9892/ C2255:X2:Y12:W156:H176:CF:10000F CL,0:TT,6:20015R MS:COn "MS:CO:(MB)255290 ,(MH)122(MV)9894 1C2255:X2:Y12:W156:H176:CF:10000 6CL,0:TT,6:20015 @MS:CO JMS:CO:(MB)255330T(MH)122(MV)98969^C2255:X2:Y12:W156:H176:CF:10000PhCL,0:TT,6:20015\rMS:COx|MS:CO:(MB)255380(MH)122(MV)9898CF:(4);"RUN SYSTEM/MENU1" *** PREAMP SCREENS PLOTTER ***  49204,15:SG$"XF,072000,>,E12000,L$8000":LG:MS)4MS:(MB)255820U>SG$"XF,092000,>,E12000,L$8000":LG:MSmRMS:(MB)255850\SG$"XF,082000,>,E12000,L$8000":LG:MSfMS:(MB)255870pSG$"XF,012000,>,E12000,L$8000":LG:z800:205|800:240~800:280800:320!800:370=' *** BOX PLOTTER *** 'VI,Y:HI,X:WI,W:HT,H:CL,C1:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB:* *** PREAMP INSTRUCTIONS *** *49204,1:CF:SO:BK,2:IK,2:DS:C251:C134:X0:Y0:W160:H200:10000*(784)3ıO*CL,255:SG$"LOADING PREAMP SCREEN ->":LL,22:TT,96:ST*C234:C1255:X125:Y92:W8:H15:10000:TT,Y4:LL,X2:CL,255:DA,179:CH+BK,7:SG$"/SONIX/SCREEN/SCREEN2":BL+10000:CL,255:DA,178:LL,X2:CH +BK,8:SG$"/SONIX/SCREEN/SCREEN3":BLA+10000:CL,255:DA,177:LL,X2:CHk+BK,9:SG$"/SONIX/SCREEN/SCREEN4":BLx +784,3: N *** TEXT FILE READER *** !NCL,0:TT,6"N(4);"-SYSTEM/INPUT"%N(4);"OPEN /SONIX/TEXT/PRE.0" *N(4);"READ /SONIX/TEXT/PRE.0"G/NA$:688:SG$(A$,2,38):CL,((A$,3)):TT,(TT)10:LL,4d1N(A$,7)"ENDLINE"22000}2N(A$,7)"NEWLINE"ı4NX(0):ST:SG$9N20015U *** CLOSE handler *** U(4);"CLOSE"UVI,189:HI,2:WI,156:HT,9:CL,34:CB?USG$"END OF FILE..Click for SONIX MENU":TT,190:LL,14:CL,255:STEU 49205,0-S$(5):C$(8):A$"":50000s"OPEN CONFIG.T":"READ CONFIG.T":FT$:N9$:"CLOSE":N9(N9$) *** ICONIX GS EQUATES ***  BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3 CBLI3c MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1 VI38999:HIVI1:WIHI2:HTWI1 49204,6 BK,2:SO:DS:SF  *** MAIN PROGRAM LOOP *** $ SF:7 (SO:CL,85:SCn *Y0:X0:W160:H13:C10:C2255:10000:Y187:10000 -Y57:X30:W100 2X101:YY12:10000: <TT,3:LL,36:SG$"MANUAL PRINTER OPTIONS":CL,0:ST FSG$S$(1):TT,72:LL,32:ST PSG$S$(2):TT,84:LL,32:STV nSG$"Position mouse and click to select":TT,190:LL,11:ST pTT,132:LL,50:SG$"Printer slot: "N9$:CL,255:ST xMS:CO MS:CO:(MB)255130 X1(MH):Y1(MV) X130X1130180 130 Y170Y1821000 Y182Y1944000 130A  *** Print EVERYTHING *** ^ CF:X31:Y70:W98:5000| CF:CL,255:SC:49204,15 T0:CL,85:X07:SG$C$(X):TT,T:LL,0:ST:TT11: A10:A27:21000  *** EXIT without printing *** 1 CF:HI,31:VI,82:WI,98:HT,11:IB:(4);"RUN SYSTEM/MENU1"V  *** PRINTER SETUP SCREEN *** 20000:L(S$(I)):M(40L)2:LL,M4:TT,3:CL,153:SG$S$(I):ST pY180:X30:W100:H13:C10:C2255:10000:SG$S$(2):TT,183:LL,37:CL,0:ST 9000&XHI,X:VI,Y:WI,W:HT,11:IB:X11000::IB2(#MS:COO2#MS:CO:(MB)2559010e<#X1(MH):Y1(MV)}F#Y1180Y11929040K#P#X130X11309060Z#d#:CF:40' *** BOX PLOTTER *** 'VI,Y:HI,X:WI,W:HT,H:CL,C1:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB:?N *** DRAW MESSAGE BOX *** \ NCF:CL,102:49204,6:SC*NX10:Y70:W140:H60:C1017:C2238:10000/NCL,0514NSG$"1. Position your printer paper at":TT,75:LL,13:ST>NSG$" its line 1 position.":TT,86:LL,13:ST?HNSG$"2. Switch your printer ON.":TT,99:LL,13:STyRNSG$"3. Click the mouse to print.":TT,113:LL,13:STNR *** EVERYTHING PRINTER *** R"PR#";N9:T0 RCL,0:SG$"PRINTER QUEUE":TT,190:LL,54:STRPF$"PTEXT/":XA1A2KRTT,T:LL,62:CL,17:SG$"PRINTING ":ST:CL,51:SG$C$(X):ST:TT11gR(4);"OPEN ";PF$C$(X)&R(4);"READ ";PF$C$(X)0RA$:RA$"ENDFILE"22000DR688NRA$XR21040U(4);"CLOSE"::(4);"PR#0":49204,6:40/u *** TEXT FILE READER *** DPÃPrint EVERYTHING (48 pg),EXIT Without Printing UÃCONTENTS,OVERVIEW,WFE.INSTRUCT,ME.INSTRUCT,NE.INSTRUCT,BI.INSTRUCT,LL.INSTRUCT,APPENDICES ZÁX12:S$(X):dÁX07:C$(X):: iA`ȱiɀȱiȱiȱi&%~L`,L: ZX[hJiW XXɞ08` ;l8` \l8`0 h@T0H8`0 08` @<>=Ȍ>8` < m m@ m m m >=` n   i 08`<>=`~tkaWNE=4-&  !$&(*-/13579;=?ADFHKNPSVY\_behknpsvy|~¼~vnf^VNGA;50,(%#! !#%(+.148;?CFJNQTX[^adgiloqtwy|0oTT D0H8`0h @T0H8`=` Xr B r fhڍ\p qnpqop Pp f8` q q E8 i Hrq @٢r riɺ @`irʩrXrZ h q 8hiHh$qh qmqqqqZ?T0zJШ8` h |q 8hiHhqh qm|q|qqyqZ?T0HzJФ8`hqq8``@```a@aaa @`ࠠϠ ߠӠϠ¬ǬƬŬĬúΠŠӠȠڠΠ͠ƭԠԠƭ͠͠ƭ֠ɠ0.1V TIDECISUM/]^_`ab а'.ɀ@8rND8rV98ЙrM.8rT#% "_x ? w xwqx t 0 xwx (xx 0xx xw`P `www0t wwwmwmwww`x w 8x Nxwx w 8x Nx` Nx w  Nx  Nx Ȣ Nx`/v 1v wvJJJWx ` ` @ COD TES РӠՠҠӠՠҠӠŠŠ228`0t02T0H8`@x` 00t2T08` 0@T@T_i`LLLLLLLLLLLLLLLLƘL˘LИL՘LژLߘL S )`)`LL昩L昩L昩L昩L昩L昩L昩 L昩LxL| L昩 L昩L昩L昩L昩L昩L昩L昩L昩"08`M0HiK k H h8 Ț' ʠ  ̨L Lq̨``@    i  08`HH0@ T0h <% 0@ T Hk fJ L & a  '$ $0I 8 @ m 8 8  8 @ m 8 8 ` $ 0 T`L]   > X > i> 0 m| 0  Y= = Y X | i| ͩ& ' ( `8] `_ ) ] _ L& ]' ( `0 `i`em I i `0  H) hJJJJ8 0 m  0  m  H- hI7  ii i`  `0i k H 0H H  L `0m    ȝ  ȝ A ` H_ h0 m_   H0L   i  i Ӭ] H)] h) ] ] -]   i    i  Иꍭ h `0` ꍪ J H L `0 0 ꭻ 0L `0 0  0ꍭ `0) )}0H i h` Hm8ǐ h`h`1cT0H85`MMUSBOOT ! M%MENU1  ! M-26632,10:26633,11:26634,12:26635,13T(4);"BLOAD SYSTEM/S2.OBJ,A$7000"{(4);"BLOAD SYSTEM/S3.OBJ,A$7700"29078(4);"RUN SYSTEM/MUSICEDIT"s SONIX for the Apple IIgs (C)1988 So What Software ________________________ Segment: MENU1 49205,0:A(8):S$(4):50000:52000 *** PROGRAM EQUATES *** > BL38912:DSBL3:MSDS3:ICMS3:CHIC3:STCH3:IBST3:COIB3:CFCO3:SOCF3:SFSO3:SCSF3:CISC3:PICI3:LIPI3J CBLI3 MH38976:MVMH2:MBMV2:HLMB1:VLHL2:ZBVL2:BVZB2:BKBV2 DA38990:TTDA1:LLTT1:ITLL1:ILIT1:IWIL1:IHIW1:IKIH1:CLIK1 VI38999:HIVI1:WIHI2:HTWI1:N08192:N226624_ S116605:S2S112:S3S27:S4S37:S5S47:S6S57:S7S67:S8S76:C2255 LG38960:IK,2:ZB,64:39326,96:39331,64 BK,6:49204,5:SO:DS 1 *** MAIN MENU LOOP *** 2MS:CO <MS:CO:(MB)25560 FX(MH):Y(MV) PX117! ZX11X72120+ d:60G xYA(X1)YA(X1)13200P 100l *** DISTRIBUTOR *** X1300,400,900,500,700,600,800 + *** WAVEFORM EDITOR *** ,CF:9000:9010 6:29:"/SONIX/SYSTEM/WAVEDIT":(4);"RUN SYSTEM/WAVEDIT"  *** MUSIC EDITOR *** < CF:9000:9010:49204,6 :29:"/SONIX/SYSTEM/MUSICEDIT":CO:CF:(4);"RUN SYSTEM/MUSBOOT"  *** BASIC INTERFACE *** CF:9000:9010 :29:"/SONIX/SYSTEM/BASICINFAC":(4);"RUN SYSTEM/BASICINFAC" W *** INSTRUCTIONS *** N XCF:9000:9010:X11000::49204,6:CL,187:SC YY0:X0:W160:H13:C10:C2221:10000:Y187:10000 ZY78:X51:W60:H36:C10:C20:10000:C2221:H13 [Y63:X50:W60:X113:YY12:10000: \TT,3:LL,32:SG$"INSTRUCTIONS AND OPTIONS":CL,17:ST@]SG$S$(1):TT,78:LL,59:ST`^SG$S$(2):TT,90:LL,57:ST_SG$S$(3):TT,102:LL,55:STaSG$"Position mouse and click to select":TT,190:LL,11:STbMS:COcMS:CO:(MB)255611dX1(MH):Y1(MV)eX150X1110615f6115gY176Y18812000MhY188Y110011000diY1100Y1112620mk611}lCF:IB:30 *** LONGLOADER *** CF:9000:9010:29:"/SONIX/SYSTEM/LONGLOADER":(4);"RUN SYSTEM/LONGLOADER" *** EXIT TO BASIC *** H 9000:9010:X11000::CF:SF:49204,6:49186,246:*"SONIX for the Apple IIgs So What Software"+"================================================================================"Q48:"This software product is copyrighted and all rights are reserved by the author.">"The distribution and sale of this product is intended for the use of the"H"original purchaser only and for use only on the computer system specified."LR"Copying, duplicating, selling or otherwise distributing this product without the";\"express written permission of the author are violations of U.S. copyright law"f"and are hereby expressly forbidden."p17:"(C) 1988 William Stephens, All rights reserved"cz21:"Apple IIgs,ProDOS and Applesoft are registered trademarks of Apple Computer Inc.";{"================================================================================";:21:| *** NOTE ENGINE *** CF:9000:9010::29:"/SONIX/SYSTEM/NOTENGINE":(4);"RUN SYSTEM/NOTENGINE"^'# *** INVERSE BOX BLINKER *** }(#X07:9010:Y175:::2#VI,A(X1):HI,11:WI,60:HT,11:IB:' *** BOX PLOTTER *** 'VI,Y:HI,X:WI,W:HT,H:CL,C1:CB:VI,Y1:HI,X1:WI,W2:HT,H2:CL,C2:CB::* *** PREAMP INSTRUCTIONS *** g*CF:VI,88:IB:(4);"RUN SYSTEM/PREAMP"*. *** MANUAL PRINTER *** W.CF:VI,76:IB:(4);"RUN SYSTEM/MANUAL"|Oò *** SCREEN LOCATION DATA *** PÃ99,111,123,135,147,159,171ZÁX17:A(X):: ˃THE MANUAL,THE PRE-AMP,EXIT TO MENU *ˁX13:S$(X)::   !"UUUUUUQUQQQUUUQUUQUQQUUUQUUUQUUUUQUUQUUQUUUUUUUQUUUUQUUQUQUQUUQUUQUQUUQQUQUUUUUQUQUUQUUQUUUUQQQQQUUUUUUUUQUQQQUQUUUUUQUUUQUUQUUUUUUQQQQUUUUQUUUUUQUQQQQQQQUUUUQUUUUUQUQQQUUUQQQQUUUUUQUUUUUUQQUUUUUQUQUQQUQQUUUUUUUQUQUQUQUUUQUQQQQDDDDDDDDDDDDDDDDADDDDADDDDADDDDDDDADDDDDDDDDADIDDIDAI@I@@DDA@I@IDI@@@DD@D@D@IDII@@I@IDD@D@H@H@H@@HDH@DDDAADDDDDDH@H@H@@D@DDDA@D@DDDDADDAHDD@DDHHDH@DDD@DDD@@D@D@@@@HDH@ADHH@HHDDD@@DD@@@@H@H@H@H@HH@D@@@D@@DD@H@H@H@H@D@D@@@D@@DD@H@DDDD@HDH@D@@@DA@@@Gwww@wwwtwwwtGwwwwwtGwww@wwwtGwwwwwDD@@@D@@@@AGwwwDwwwtwwwtGwwwwwtGwww@wwwtGwwwww@DDD@@DD@@@DD@GwwwtDDDDDwwwtwwwtGwwwwwwGwww@wwwtDwwwwt@DDD@D@@DDGwwwwwwwwtDwwwtwwwtGwwwwwwGwww@wwwtwwwwtGwwwwwwwwwtwwwtwwwtGwwwwwwwwww@wwwtGwwwDDwwwwwwwwwt@wwwtwwwtFwwwwwwwwww@wwwtGwww@wwwwwwwwww@wwwtwwwtGwwwwwwwwww@wwwtGwwwDDfffffffff@fffdfffdFfffFffffff@fffdffffdDDDDDffff@fffdfffdFfffFffffff@fffdDffffd@Ffff@fffdfffdFfffDffffff@fffdFfffff@DADDADAFfff@fffdfffdFfffDffffff@fffdFfffffDDDDDD@D@Ffff@fffdfffdFfffDFfffff@fffdffffffdDDDDDDDDDAFfff@fffdfffdFfff@Ffffff@fffdDffffffd@DDDDADDADDADDDDDAFfff@Ffff@fffdfffdFfff@Dfffff@fffdFfffFfff@DDDDDDDDDDDDDDDDDDDDEUUUDEUUU@UUUTADUUUTEUUU@UUUUU@UUUTEUUUEUUUDDDDDDDDDDDDDDDEUUUTDDUUUU@UUUUDDEUUUTEUUU@EUUUU@DDUUUTDAUUUTDUUUTDDDDDDDDDDDDDDEUUUUUUUUUU@UUUUUUUUUUTEUUU@EUUUU@UUUUUUU@DUUUTUUUT@DDDDDDDDDDDDDDDDDAEUUUUUUUUUU@UUUUUUUUUUTEUUU@DUUUU@UUUUUUU@EUUUDEUUU@DDDDDDDDDDDDDDDDDDUUUUUUUUUT@EUUUUUUUUUDEUUU@UUUU@UUUUUUU@EUUU@EUUUDDDDDDDDDDDDDDDUUUUUUUUUTEUUUUUUUUU@EUUU@EUUU@UUUUUUU@UUUT@DUUUTDDDDDDDDDDDDADDUUUUUUUTDDEUUUUUUUD@EUUU@EUUU@UUUUUUU@UUUTUUUTDDDDDDDDDADDADADAADDDDDDDDDDDDDDDDDDDD@DDDD@DDDD@DDDDDDD@DDDDDDDDDDDD@DD@D@D@D@D@@DD@DDDDDDDD@UQUUQUQUQUUUUUQQUUUUUQUUUUUUUUUUUUQUUQQUUUUUUUUUUUUUQUUQUUQUUQUUQUQUQUUUUUQUQUUUUUUQQQQQQQUQQQQQQQUQQQQQUUQQUQUUQUUUQUUUUUUUUUUUUUQQUUQQQQUQQUUQUQQQUQQUUQUUUQUUQQQUUQUUUUUUUUUUUUUUUUQQQQQQQUQQQUQQQUQQQQQUUQQQUUQUUUUUUUUUUUUUUUQQQUUUUQQUQUUQUUQQQUQQUUUUUQUUQUUQUUUUUQUQUUUUUQUQQUUUQUUUQQQUUQUUQUQQUUQUUUUUQQQUUUQQQUQQQQQQQQQQUUUQQQQQQQQQQUQQQUUQUUUUQUUUQUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDDDwwwz{wwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwz{wwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzDwwwzpDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwww{pDDDwww{wpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDww{wpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwzwpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwzwpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDw{wzwpDwwwzwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDw{wzwpDꪪDD{wzwpDwwwz~ww~wwwzwwwwwwwzwwwwwwwzwwwwwwwzDDDwwwz~wwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwzwpDwwwzpDwwzwpDwwwzpDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDwwwzwpDwww~pDDDwwwzwpDwww~wpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDꪠDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDww~wpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDDwwzwpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDwwzwpDwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDw~wzwpDwwwzwDDDwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDw~wzwpDDDwwwzwpD~wzwpDwwwztwwwGwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDDwwwztwwwDwwwzwwwwwwwzwwwwwwwzwwwwwwwzDDwwwzwpDwwzwpDwwwzGwDDwwzwpDwwwzGwDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DwwwzwpDwwwzwpDwwwtGwJ@DwwwzwpDwwwzwpDwwwtwwJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@""""""!DwwwzwpDwwwzwpDDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@!!!"!DwwwzwpDwwwzwpDwwtJwwJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@!!""!"""""!""""""!"""!""!""""DwwwzwpDDwwDzwwJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@""!!!"!!!!!"!!"!!!!!!!DwwwzwpDwwwzwpDwwGzwwJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@!!!!"""!!!!"""!!!!!!""!DDwwwzwpDwtwzwwJwwwwwwwwwwwzwwwwwwwzwwwwwwwzwwww@!!!!!"!!!!!"!!!!!!!!!DwwwzwpDwwwzwpDwtwzwwJ@""""!"""!""""!!"""!!""!""""DwwwzwpDwwwzwpDtGwzwwJwwwwwwwwwwwwzwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwpDJwwwwwwzwwwwwwzwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwpDDwwzwwJwwwwwwwzwwwwzwwwwwwwzwwwwwwwzwwww@DwwwzwpDDGwwzwwJwwwwwwwzwwwzwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwpDwwwzwwJwwwwwwwzwwzwwwwwwwzwwwwwwwzwwww@DDwwwzwpDwwwzwwJwwwwwwwzwwwwzwwwwwwwzwwwwwwwzwwww@DDDDDDD@DwwwzwpDwwwzwwJ@DwwwzwpDwwwzwwJwwwwwwzwwwwwwzwwwwwwwzwwwwwwwzwwww@DwwwzwpDJwwwwwzwwwwwwzwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwwJwwwwwwzwwwwwwzwwwwwwzwwwwwwwzwwww@DDwwwzwwJwwwwwwzwwwwwwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwwJwwwwwwzwwwwwwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwwJwwwwwwzwwwwwwwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwwJ@DwwwzwpDwwwzwwJwwwwwzwwwwwwwzwwwwwwzwwwwwwwzwwww@DwwwzwpDJwwwwwwzwwwwwwwzwwwwwwzwwwwwwwzwwww@DwwwzwpDwwwzwwJwwwwwwzwwwwwwwzwwwwwwzwwwwwwwzwwww@DDwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwwzwwww@DDDDDDD@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwww@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwzwww@DwwwzwwJ@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwzwwwwwwzwww@DJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwzww@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwzwwww@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwzwwww@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwzwwwwwwwzwwww@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwwwwwwwwwzwwww@DwwwzwwJ@DwwwzwwJwwwwwwwzwwwwwwwzwwwwwwwwwwwzwwww@DJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwzwwww@DDADDADADADADADDDDDDDDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@AAADDDDDDDDDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@ADDDADDADDADADDDDDDDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@DADAAAADDDDADDDADDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@ADAAADDDDDDDDDDJ@ADAAADADDDDDDDDDDDDJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@DDDDDDDADADADDADDDADADAJwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@Jwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@Jwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@Jwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@Jwwwwwwwzwwwwwwwzwwwwwwwzwwwwwwwzwwww@J@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@      816/Paint 3 o c3  c^^UUUU^^UUUUDDD@D@DDDDD@D@DD̪3  c3   c3  / c3  ? c3  O c3  _ c3 o c3  cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff#%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc ffffff fffff fffff ffffff ffffff fffff fffff ffffff ffffff fffff fffff ffffff ffffff fffff fffff ffffff ffffff fffff fffff ffffff ffffff fffff fffff ffffff ffffff fffff fffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333333333333333333333333333333333333333333333333333333333333333333fffffffffffffffff33fffffffffffffffff33 ffffff ffffff fffff33 ffffff ffffff fffff33 ffffff ffffff fffff33 ffffff ffffff fffff33 ffffff ffffff fffff33 ffffff ffffff fffff33 ffffff ffffff fffff33fffffffffffffffff33fffffffffffffffff33fffffffffffffffff333333333333333333333333333333333333333333333333333333333333333333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeUUUUfffff333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 33 33 33 33 33 33 333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 816/Paint "A ,p DDDDOOOOOODDDDOOOOOO^^UUUU^^UUUUDDD@D@DDDDD@D@DD̙"A ,p wA,p   wA,p     wp w @ I   wU __ _Z "3DUfw dfghijklmnopqrstuvwxyz{|}~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFfffffffffffffffffffffffffffffDFfffffffffffffffffffffffffffffDFfffffffffffafaffffffffDFfffffaaaafafaaffffffffDFfffffaffaafafaaffffffffDFfffffaaafafaffffffffDFfffffaaafafaffffffffDFfffffaaaafafaaffffffffDFfffffffaaffafffffffffDFfffffffffffffffffffffffffffffDFfffffffffffffffffffffffffffffDFffffafaaafffafffDFaaaaaafafaaaaafffDFaffaaaafafaaaaafffDFaffaaafafafaaafffDFaffaaafafafaaafffDFaaaaaafafaaaaafffDFffffaffafaaffafDFfffffffffffffffffffffffffffffDFfffffffffffffffffffffffffffffDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDODDDDDDDDDDDDDDDDDDDDDDDDDDDDODffffffffffffffffffffffffffDODffffffffffffffffffffffffffDODfffaffffafffDODfaaafffffffffaaffDODfaffaffffffffaaffDODfaffaffffffafffDODfaffaffaffffffafffDODfaaafffffffffaaffDODfffaffaffffaaffDODffffffffffffffffffffffffffDODffffffffffffffffffffffffffDODfffafffaaaffafDODfaaaaffaaaaafaffDODfaaaaffaaaafffaffDODfaaaaffaaafffaffDODfaaaffaaaffafaffDODfaaaaaaaaaafaffDODfaaaffffffffaffDODffffffffffffffffffffffffffDODffffffffffffffffffffffffffDODDDDDDDDDDDDDDDDDDDDDDDDDDDDODDDDDDDDDDDDDDDDDDDDDDDDDDDDODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDffDDffDFdFdFffDdDDdDffDFffdDffDDffDDDFffDDffDDffDDffDFffDDffDFDDFDDDDDDDDDDDDDFdFdFdFdFdFdFdDDfDFdFdFdDFdDDFdDFdFdDDFdFdDFdDFdFdFdFdFdFdFdFdFdDfDDDDDDDDDDDDDFdDDFdDDFdFdFdDDfdfdFdFdDFdDDFdDFdDDDDFdFdDFdDFdFdFdDDFdFdFdFdFfFfDDDDDDDDDDDDDDffDFdDDFffdFfdDfffdFdFdDFdDDFdDFdDDDDFdFdDFdDFdFdFdfdFffDFdFdFfffDDDDDDDDDDDDDDDFdFdDDFdFdFdDDfFFdFffdDFdDDFdDFdDDDDFdFdDFdDFffdFdFdFdfDFffdFddfDDDDDDDDDDDDDFdFdFdFdFdFdFdDDfDFdFdFdDFdDDFdDFdFdDDFdFdDFdDFdFdFdFdFdFdFdFdFdDfDDDDDDDDDDDDDDffDDffDFdFdFffDfDFdFdFdDFdDDffDDffDDDFffDDffDFdFdDffDFdFdFdFdFdDfDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 816/Paint   DDDDOOOOOODDDDOOOOOO^^UUUU^^UUUUDDD@D@DDDDD@D@DD  wA,p   wA,p     wp w @ I   wU __ _Z "3DUfw fnffnfnfffffffffnffnffnfffffnDPffffffffffffffD@DPffffffffffffffffnDDDD@DPfffffffffffffDDDDD@DPffffnffnfnfnfnfnnffnDDDDDDD@DPfffnDDDDDDDDD@DPDDDDDDDDDD@DPDDDDDDDDDDD@DPDDDDDDDDDDDD@DPDDDDDDDDDDDDD@DPDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDD@DPDDDDDDD@DD@DPffnffffnffnffnffDDDDDDDDDDDDD@DPnnnnnnfffffDDDDDDDDDDDD@DPnnnnnnffffnfDDDDDDDDDD@DDDD@DPnnnfffnffffnfDDDDDDDDDDDDDDD@DPnnnnfnfffnfDDDDDDDDD@DDDD@DPnnnnfffnnDDDDDDD@DD@D@DPnffnffnffnnnDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDD@DDDDDDDDDDPDDDDDDDDDDDDDDD@""" DDDDDDDDDDPDDDDDDDDDDDDDDD@""" DDDDDDDDDDPDDDDDDDDDDDDDDD@") DDDDDDDDDDPDDDDDDDDDDDDDDD@") DDDDDDDDDDPDDDDDDDDDDDDDDD@""" DDDDDDDDDDPDDDDDDDDDDDDDDD@") DDDDDDDDDDPDDDDDDDDDDDDDDDD@") DDDDDDDDDDPDDDDDDDDDDDDDDDD@""" DDDDDDDDDDPDDDDDDDDDDDDDDDD@") DDDDDDDDDDPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDD@") DDDDDDDDDDPPDDDDDDDDDDDDDDDD@""" DDDDDDDDDDPPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@") DDDDDDDDDDPPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@") DDDDDDDDDDPPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@""" DDDDDDDDDDPPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@") DDDDDDDDDDPffofoofPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@") DDDDDDDDDDPfffffPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@""" DDDDDDDDDDPffffofPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@") DDODDDDDDDPffoffffPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@") DODDDDDDDPffffPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDD@""" OfffffPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDD@") ffffffffffffffffffoffofPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDD@") ffffffffffffffffffoPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDD@""" OfPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDD@""" DODDDDDDDPfPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDD@DDODDDDDDDPfPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPfPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPfPDD@D@D@D@D@D@D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPfPDD@D@D@D@D@D@D@DDDDDfPDD@D@D@D@D@D@D@DDDDDfoPDD@D@D@D@D@D@D@DDDDDPDD@D@D@D@D@D@D@DDDDDPDD@D@D@D@D@D@D@DDDDDPDD@D@D@D@D@D@D@DDDDD@PDD@D@D@D@D@D@D@DDDDD@PDD@D@D@D@D@D@D@DDDDD@PDD@D@D@D@D@D@D@DDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@PDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@PDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@PDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDD@D@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDD@D@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDD@DD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDD@DD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDD@DDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDD@PDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDD@DDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDD@DDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDD@DDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDD@DDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDD@DDDD DDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDPDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@@333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333303333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333303393333333333933333333933333393333933333333333333333333933333333333333333333333333333333333333333933333333333333333933333333033993333333333333333333333333333333333333333393333333333333333333333333393333933333333933333333339333333333333333333333333333303399939333393333393333333333333933333933333333333393333393393339393339333303393339933393339933333333393333339333333933333333933333339333393333339333333393333333333933333303393333993339333993333333333333333939333933333339333333393333933333393333339333393333393333330339333399333933399333333393333339333333933333333933333339333933333933333339333333333339333333033933999333333333333393393333933333339333333393333333933333339339333939333393333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333303333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333333933333333333333333333333333339333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333339333333333333333333333333333333339333333333333333333333333333333333333333333333333333333333333333333033333333333333333333399939393333393933933333333333333333339393393993339333333333333333333333333330333333333333333333393399993339999933333339993333333393333333999999933333333999333333333333333333333333333033333333333333333333399933399933333939933333333333333393399993933333339933333333333333333333333333303333333333333333333339399939999333393333393393333333933333333999999393333333993393333333333333333333333333330333333333333333333333939993939933339933933333339333333333333993933933339333933333333333333333333333333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333303333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330#C9Fx ??GA ,p A ,p A ,p  A ,p  A ,p  A ,p  A ,p   t c c S SB22!  !"#$%&D"D"D"D" D"  D" D" D" D" D"        wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwp  pp    "fpp    "fpp   "fpp  "fpp   "fpp    "fpp  "fpp   "f  pwwwwwwwwwwp   "f p   "f p  UUP p  P p  P p P p   p    "f p   "f p  P "f p P "f p P "fff` p P "f` p P "f` p P "f` p P "f` p P "f` p P ` p P ` p P ` p P ` """""""""""P ffffffffffffffffffffffffffffffffffffffffffffffff"""""""""""P """""""""""""P "" p໰"""""""""""P "" p """""""""""UUUP "" p   """"""""/"""P "" p """"""""/"""P 𪪪"" wwwwwwwwwwwwp ""/"""P "" p  ""/"""P "" p  ""/"""P "" p  ""/"""P "" p  ""/"""P  p  """""""""""P  p """""""""""P  p """""""""""P  p   ffffff"""""""""""P  p ffffff"""""""""""P "f """""""""p໰"""""""""""P "f """""""""pP "f """""""""pP "f """""""""pP "f """""""""pP "f """""""""pP"f """""""""pP"f """""""""pP"f """pP"f """pP """pP """pP """pP """pP """pP """""""""pP """""""""pP """""""""pP """""""""p UUUUUUUU  """""""""p UUUUUUUU  """""""""p UUUUU  """""""""p UUUUU  p UUUUU  p UUUUU  p UUUUU  p  UUUUU  p  UUUUUUUU  p  UUUUU    p  UUUUU    p  UUUUU    p  UUUUU    p  UUUUU  p UUUUU  p UUUUUUUU p UUUUUUUU p UUUUUUUU fffff`ffffffp fffff`UUUUUUUU fffff`ffffffp fffff`UUUUUUUU pUUUUUUUU p U_U p  U_U p U_U p U_U p U_U p U_U pU_U fffff`ffffffpwwwwwpUUUUUUUU fffff`ffffffpwwwwwpUUUUUUUU pUUUUUUUU pUUUUUUUU pUUUUUUUU pUUUUUUUU pUUUUUUUUpUUUUUUUUpUUUUUUUUpUUUUUUUUpUUUUUUUUpppppppppppppppppppppppppppppppppwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwppppppp           33333333333333333333333333333333333  6ff36c6cffc3wws37ws37ws3wwsw333w333  6ff36c6cffc3wws37ws37ws3wwsw333w333  6ff36c6cffc3wws37ws37ws3wwsw333w333  6c6c6c6cf3f3w3w3w3w3w3w3w33w333w333  6c6c6c6cf3f3w3w3w3w3w3w3w33w333w333  6c6c6c6cf3f3w3w3w3w3w333w33w333w333  6c6c6c6cf3f3w3w3w3w3w333w33w333w333  6c6c6c6cf3f3w3w3w3w3w333w33w333w333  6c6c6c6cf3f3wws3w3w3w333ww3w333w333  6c6c6c6cf3f3wws3w3w3w333ww3w333w333  6c6c6c6cf3f3w7s3www3w333w33w333w333  6c6c6c6cf3f3w7s3www3w333w33w333w333  6c6c6c6cf3f3w7s3www3w333w33w333w333 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDO 6c6c6c6cf3f3w3w3w3w3w3w3w33w333w333 GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO 6c6c6c6cf3f3w3w3w3w3w3w3w33w333w333 GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO 6ff33ff3ffc3w3w3w3w37ws3wwswww3www3 GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO 6ff33ff3ffc3w3w3w3w37ws3wwswww3www3 GwwwwwywwwwwwwwwwwwwwwwwwywwwwwwwwwwwwwwwwwwwwwwwwO 6ff33ff3ffc3w3w3w3w37ws3wwswww3www3 GwwwwwwwwwwwwwwwwwwwwwwwwwwywwwwwwwwwwwwwwwwwwwwwwwwwO 33333333333333333333333333333333333 GwwywwyywywwwwwywwwywyywwwO GwwywywwwwyyyywwyywwyyyyywwwyywwO GwwywywwwwwyyyywwyywwyyyyywwwyywwO GwwyywywwwwwyywwwyywwyywywwwyywwO GwwyywwwwyyyywywwwywywyywwyyywwO GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO GwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwO DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDO  816/Paint wA,p   DDDDOOOOOODDDDOOOOOO^^UUUU^^UUUUDDD@D@DDDDD@D@DDwA,p   wA,p   wA,p     wp w @ I   wU __ _Z "3DUfw ')*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333393933393933933393933393339993333333399999333333999999993393393333333399933933333399999999333393333339933933339393999333339933333333993393333339393999333999333333339999933333399999999333339393939333933399993399333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333          UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffjfffjfffjfffUUffffjffjffffjffjfUUUUjjjjjfffffffUUjfffjffffffUUUUjjfjjffffffUUjfffjfffffjfUUUUjjffjfjfjffffffUUfjffjfffjffjfffffUUffff񻻻UUjjjfjjffffffUUjfjfjfjffffUUf`f`UUjjjjjfffffffUUjfffjffffffUUn`n`UUffjjfffjfffjfUUjffffjfffffjfUUnfnfUUUUUUn`n`UUUUUUf`f`UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUffffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfjjfUUfjffjffUUUUffffUUfffjUUUUfffjfUUfffjUUffUUfffffUUfffffjUUf`UUffffUUfffjUUn`UUffffUUfffjUUnfUUfjfUUfjfjUUn`UUUUUUf`UUUUUUffUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfjfjfjffjfjffjffffffjffjjUUfffffffffffjjjjjjjjUUfffffffffjjjjjjjUUfffffffjfjffffjjjffjUUfffffffjffjjjjjjUUfffffffffffjjjjjjjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUfjfjfffffjffjjffjffjjUZPUUZPUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZPUUZZZPUUZZZPUUZZffffffjfffjZPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZjjjjjfffffZPUUZZjjjffffffZPUUZZffjjfffffjfffZPUUZZjffjjjffffZPUUZZjjjjjffffZPUffjffjffffjfjffffjffUZZffjjjfffffffjZPUfjjjjffffffffUZZZPUfjfjjfffffffUZZZPUffjffjfjffjffffffUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZPUfjjfjjffffffUZPUfjjjjfffffffUZPUfffjjffffjffjffUZUUUUUUUUUUUUUUUUUUUUUUUUUZPUUZ_ZPUUZ_ZPUUZUUUUUUZUU_ZPUUZZZZZZZ_ZPUUZZZZZZZ_ZPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZUUZZZUZ_ZPUUZZUUUZZZ_ZPUUZZZZZZZ_ZPUUZZZZZZUU_ZPUUZ_ZPUfjffjjjffjUZ_ZPUfjjjjjjjffUZUUUUUUUUUUUUUUUUUUUUUUUUUZPUfjjjjjjfffUZPUjfjjjjjfffffUZPUjfjjjjjjjffUZUUUUUUUUUUUUUUUUUUUUUUUUUZPUfjjjjjjjffUZ_ZPUfjffffjffjfffjUZ_ZPUUZUUUUUUZUU_ZPUUZZZZZZ_ZPUUZZZUZ_ZPUUZUUZZUZ_ZPUUZZZUZ_ZPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZZZZ_ZPUUZUUUUUUZUU_ZPUUZ_ZPUUZ_ZPUUZUUUUUUUUUUUUUUUUUUUUUUUUUZPUUZPUUZPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUfjfjfjUUfffffjUUUUffffffUUjjjffUUU""""""UffffUUjjjfUUU""""""""UfffjfUUfffjfjUUU""""""""""""UffffUUjfjfUUU"()"()UffffffUUjjjffUUU")")UfjfjfjfUUjjfffjfUUU")ffff")UUUUUU )ffff)UUUUUU (ffi(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU(ffi(YUU(`i(YUU Xi(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU X (UUUU (YUUUU (YUUffffffffffjfffUU Yk (UUjjjjjjjfffUU Y[ (UUjjjjjfffUU)Yh)UUjjjjfjffjfUU)ih)UUffjjjjffUUi[))UUjjjjjjjffUUi[))UUjjffffffffUU)Y[)UUUU)Y[)UUUUY[))UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUY[))UU)Y[)UU ( (Y[UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU (Y[ ( (Y[ ( ( (Y[ ( (Y[ (fff (fff (k (k3333333333333333333333333333333333333333333333333333339 (j (j3333333333333333333333333333333333333333333333333333339 ( (9393333339333333339933939339))933333333333339399993399999999393339))9333333333333393999933933999999393339))933333333333939999333399993393339))9333333333333393999933339999993393339))9333333333333393999933999999993933339))9339333339333333333993399393339))3333333333333333333333333333333333333333333333333333339))3333333333333333333333333333333333333333333333333333339)) ) )  """)""" """)"""  """)""" """)"""      <#E9Fx ?G?Q31G+ ) 7 r2s10 "A ,p  ",p ^^UUUU^^UUUUDDD@D@DDDDD@D@DD"A ,p wA,p   wA,p     wp w @ I   wU __ _Z "3DUfw 0 The Apple IIgs uses an Ensoniq 085 1 synthesizer to produce sound. 085 2 034 3 Pin 1 of J25 on the motherboard is 034 4 the input to the A to D converter. 034 5 This input requires a 2.5 volt max 034 6 input signal to produce a digital 034 7 sample of the input sound. 034 8 034 9 The pre-amp outlined here and either034 0 a high impedance mike or a low im- 034 1 pedance output from an amplifier hjklmnop034 2 will give quite good results at a 034 3 modest cost in time and parts. 034 4 034 5 Click PICTURE for a schematic and 034 6 wiring diagram. 034 7 034 NEWLINE 0 034 1 034 2 CONSTRUCTION* 051 3 034 4 Use a 2 by 3 inch perfboard for 034 5 constructing this circuit. All the 034 6 parts with the exception of P1 are 034 7 available from RADIO SHACK. P1 can 034 8 be anything that will fit...shop 034 9 around. Parts placement and con- 034 0 struction are not critical& but best034 1 results require a metal box for 034 2 shielding. If you aren't handy with034 3 electronics& ask a friend who is to 034 4 help you. 034 5 034 6 034 7 034 NEWLINE 0 PREAMP PARTS LIST 051 1 ---------------------------------- 051 2 R1 RESISTOR 100 1/8W 034 3 R2&4 RESISTOR 10K 1/8W 034 4 R5&8 RESISTOR 10K 1/8W 034 5 R3 RESISTOR 680 OHM 1/8W 034 6 R9 RESISTOR 3.9K 1/8W 034 7 R10&11 RESISTOR 39K 1/8W 034 8 R6 POTENTIOMETER 15K 034 9 R7 POTENTIOMETER 25K 034 0 C1&2 CAPACITOR (MYLAR) .1uf 10v 034 1 C3 CAPACITOR (LYTIC) 1uf 10V 034 2 C4 CAPACITOR (LYTIC) 470uf 10v 034 3 J1 PHONO JACK 034 4 P1 CONNECTOR .100 PIN SPACING 034 5 U1 OP-AMP (TL071 - LOW NOISE) 034 6 S1 SWITCH& D.P.S.T. 034 NEWLINE 0 ALIGNMENT* (Center at 1.28 volts) 051 1 034 2 Connect P1 to J25 on the mother 034 3 board. Unplug the microphone or low 034 4 impedance (line) input source. 034 5 034 6 Switch your circuit on and bring 034 7 up the SONIX Waveform Editor. 034 8 034 9 Select CAPTURE and then SAMPLE. 034 0 034 1 Set the CENTER ADJUST control to 034 2 produce a horizontal white line 034 3 across the center of the screen. 034 4 034 5 You must RE-SAMPLE to see what 034 6 has changed after each adjustment. 034 7 034 NEWLINE 0 ALIGNMENT* (Set preamp output) 051 1 034 2 Connect a sound signal source to 034 3 the circuit's input connector& J1. 034 4 Set SW 1 for high impedance if you 034 5 are using a mike& or for low imped- 034 6 ance if you are using a line-level 034 7 input (such as an amplifier output).034 8 034 9 Sample the input and adjust the GAIN034 0 CONTROL to produce a waveform that 034 1 just touches the top and bottom of 034 2 the Waveform Window. 034 3 034 4 This completes all adjustments.... 034 5 034 6 YOU ARE NOW READY TO SAMPLE SOUND 085 ENDLINE~============================================================================= ~RAM Variable = RA Hex Address = $9600 Decimal Address = 38400 ~============================================================================= ~ This routine will load the Sound RAM with a waveform from a SONIX waveform ~ file somewhere in memory& as well as locating a semitone table and initial- ~ izing a specified oscillator. The following parameters need to be supplied ~ prior to CALL-ing RAM% ~ ~ SR qs $961E 38430 Sound RAM address (Lo-Hi-Bk) ~ ~ WF $9620 38432 SONIX waveform file address (Lo-Hi-Bk) ~ ~ SM $9623 38435 Semitone table address (Lo-Hi-Bk) ~ ~ OS $962D 38445 Oscillator number (0 to 29) ~ ~ Example% ~ ~ 10 POKE SR&0 % POKE SR+1&96 % POKE WF&0 % POKE WF+1&32 % POKE WF+2&4 % ~ ~ POKE SM&0 % POKE SM+1&32 % POKE SM+2&4 % POKE OS&0 % CALL RA ENDLINE ~============================================================================== ~SEMI Variable = SE Hex Address = $9603 Decimal Address = 38403 ~============================================================================== ~ ~ This routine controls the parameters for a specified oscillator. Volume& ~ pitch& resolution& and mode may be altered with this Call. The Sound RAM ~ address and semitone table address must be the same as set by a previous ~ RAM or DISK Call. ~ tv~ VO $9629 38441 Volume (0 to 255) ~ PT $962C 38444 Pitch (0 to 95) ~ RE $962B 38443 Resolution (0 to 7) ~ MO $962A 38442 Mode (Free Run 0&1 - One Shot 2&3) ~ ~ Example% ~ ~ 10 POKE VO&40 % POKE PT&24 % POKE MO&2 % POKE RE&7 % CALL SE ENDLINE~============================================================================== ~ROOT Variable = RO Hex Address = $9606 Decimal Address = 38406 ~============================================================================== ~ ~ This routine controls the parameters for a specified oscillator. All of the ~ parameters must be supplied for each Call. The pitch becomes a 2-byte num- ~ ber (0 to 65535). A ROOT Call does not follow the SONIX data bytes. ~ ~ S0 $9772 38770 Pitwyzch (Lo byte) ~ S1 $9779 38777 Pitch (Hi byte) ~ S2 $9780 38784 Volume (0 to 255) ~ S3 $9787 38791 Sound RAM address (Hi byte only) ~ S4 $97BC 38844 Waveform length (coded) ~ S5 $978E 38798 Resolution (0 to 7) ~ S6 $9798 38808 Mode (Free Run 0&1 - One Shot 2&3) ~ S7 $979A 38810 Oscillator number (0 to 29) ~ ~ Example% ~ ~ 10 POKE S0&0 % POKE S1&30 % POKE S2&128 % POKE S3&0 % POKE S4&7 % POKE ~ S5&7 % POKE S6&2 % POKE S7&0 % CALL RO ENDLINE~============================================================================== ~AUTO Variable = AO Hex Address = $9609 Decimal Address = 38409 ~============================================================================== ~ ~ This routine controls the parameters for a specified oscillator. The only ~ data needed are the oscillator number and pitch. The AUTO Call retrieves ~ all parameter and semitone information automatically. ~ ~ ~ PT $9632 38444 Pitch (0 to{} 95) ~ ~ OS $9633 38445 Oscillator number (0 to 29) ~ ~ ~ Example% ~ ~ 10 POKE PT&36 % POKE OS&0 % CALL AO ENDLINE~============================================================================== ~DISK Variable = DI Hex Address = $960C Decimal Address = 38412 ~============================================================================== ~ ~ This routine will load a SONIX waveform file from disk& install the semitone ~ table& the waveform pattern& and the oscillator parameters. The string var- ~ iable SG$ is used to pass parameters to DISK. The string descriptor syntax ~ is as follows% ~ ~ +------- Load sound command ~ | +-- ProDOS pathname ~ | | +---- Load addr. ~ | | | +-- Semitone table addr. ~ | | | | +--- Sound RAM addr. ~ | | | | | +-- Oscillator ~ | | | | | | number ~ ~ SG$ = "LS&/FULL/PATHNAME&A$012345&S$6789AB&R$CDEF&O$00&" ~ ~ Example% ~ ~ 10 SG$ = "LS&/SONIX/WAVE/NOISE&A$042000&S$042000&R$0000&O$00&" % CALL DI ENDLINE~============================================================================== ~SOUND RAM ADDRESS Hex Address = $961E Decimal Address = 38430 ~============================================================================== ~ ~ ~ ~ ~ This data location is the starting address in the special Sound RAM where ~ a waveform pattern exists--it must be page aligned (ie& the low order byte ~ must always be zero). This address is automatically inserted when CALL-ing ~ AUTO& but must be supplied by the user for SEMI and RAM Calls. The DISK ~ Call creates this address with the string descriptor segment "S$XXXX". ENDLINE~============================================================================== ~SOURCE ADDRESS Hex Address = $9620 Decimal Address = 38432 ~============================================================================== ~ ~ ~ ~ This data location is the loading address for a SONIX waveform file. This ~ is a 3-byte address in the form& BANK - HIGH BYTE - LOW BYTE. The DISK and ~ RAM Calls need this information as part of the data necessary to set up the ~ DOC and Sound RAM. The RAM Call will need the bytes poked in separately& ~ but the DISK Call gets this address from the string descriptor segment ~ "A$XXXXXX". ENDLINE~============================================================================== ~SEMITONE TABLE ADDRESS Hex Address = $9623 Decimal Address = 38435 ~============================================================================== ~ ~ ~ This data location is the address where the semitone table and oscillator ~ parameters for a specific waveform exist; it is usually the same as the ~ SOURCE address. This address is in 3-byte format& BANK& HI BYTE& LO BYTE. ~ ~ The address needs to be supplied to a RAM Call by the user& but a DISK Call ~ gets the information from the string descriptor segment "S$XXXXXX". ENDLINE ~============================================================================== ~WAVEFORM LENGTH Hex Address = $9626 Decimal Address = 38438 ~============================================================================== ~ ~ ~ ~ This data location is the length of the waveform last installed. The value ~ is returned from RAM and DISK Calls and is intended for user reference only. ~ The address is in 2-byte format% LOW BYTE& HIGH BYTE. ENDLINE~============================================================================== ~LENGTH NUMBER Hex Address = $9629 Decimal Address = 38440 ~============================================================================== ~ This data location is the coded length of the waveform last installed. The ~ value must be supplied for SEMI Calls. This value is recorded in the wave- ~ form file and written to this location via any RAM& DISK& or AUTO Call. ~ ~ Actual Length Index  Shift Factor Length Number ~ ~ 256 0 x1 0 ~ 512 1 x8 8 ~ 1024 2 x8 16 ~ 2048 3 x8 24 ~ 4096 4 x8 32 ~ 8192 5 x8 40 ~ 16384 6 x8 48 ~ 32768 7 x8 56 ~ ~ The coded length number is the index of the actual length shifted from the ~ low to the high order nibble. ENDLINE~============================================================================== ~VOLUME Hex Address = $9629 Decimal Address = 38441 ~============================================================================== ~ ~ ~ ~ This data byte is the volume for the oscillator currently being used. The ~ value is added to the system Master volume at $E1/00CA to create the actual ~ volume for that oscillator. The volume byte can be any value from 0 to 255 ~ (where 255 is the highest volume value). This value is installed at default ~ by AUTO& RAM& and DISK Calls. ENDLINEO&BAS.11 ! O&BAS.12 ! O&BAS.13 ! O&BAS.14! ! O%INTROt ! O$NE.0 ! O$NE.1 ! O$NE.2) ! ONE.3E ! ONE.4c ! ONE.5m ! O$NE.6 ! O$NE.7N ! O~============================================================================== ~OSCILLATOR MODE Hex Address = $9630 Decimal Address = 38442 ~============================================================================== ~ ~ ~ This data byte describes the operating mode for the oscillator currently ~ being used. There are 4 modes of operation% One Shot& Free Run& Sync& and ~ Swap. ~ ~ One Shot% Plays the waveform from the beginning to the end and the shutoff. ~ ~ Free Run% Plays the waveform over and over until you shut it off. ~ ~ Sync% Playing an even oscillator will start up its odd pair oscillator and ~ play simultaneously. ~ ~ Swap% Playing an even oscillator will start up its odd pair oscillator after ~ it reaches the end of its waveform. ~ ~ Free Run ON% 0 One Shot ON% 2 Sync ON% 4 Swap ON% 6 ~ Free Run OFF% 1 One Shot OFF% 3 Sync OFF% 5 Swap OFF% 7 ENDLINE ~============================================================================= ~RESOLUTION Hex Address = $9631 Decimal Address = 38443 ~============================================================================= ~ ~ This data byte sets the resolution at which the waveform is played back ~ from memory. A resolution of 7 will play back every byte in the waveform& ~ 6 will play back every other one& 5 will play back every 4th& and so on. ~ ~ This value is supplied by SEMI and AUTO Calls& but can be altered only via ~ the ROOT Call. ~ ~ 0 = Every 128th byte ~ 1 = Every 64th byte ~ 2 = Every 32nd byte ~ 3 = Every 16th byte ~ 4 = Every 8th byte ~ 5 = Every 4th byte ~ 6 = Every 2nd byte ~ 7 = Every byte ENDLINE~============================================================================== ~PITCH NUMBER Hex Address = $9632 Decimal Address = 38444 ~============================================================================== ~ ~ ~ ~ This data byte sets the pitch at which a waveform is played. The pitch is ~ a value from 0 to 95& representing the notes of an 8-octave chromatic scale ~ from C0 to B7. ~ ~ The value is supplied by SEMI and AUTO Calls and is derived from a semitone ~ table associated with the selected waveform. ENDLINE ~============================================================================== ~OSCILLATOR NUMBER Hex Address = $9633 Decimal Address = 38445 ~============================================================================== ~ ~ ~ ~ This data byte selects the oscillator to be supported by the current data ~ bytes. The value must be supplied for both AUTO and SEMI Calls. ~ ~ To point data at Oscillator 0& set this byte to zero. 30 oscillators ~ (numbered 0 thru 29) are available for use at any time. ENDLINE~INTRODUCTION SONIX for the Apple IIgs ~============================================================================ ~Welcome to the world of synthesized sound and welcome to SONIX--the key that ~unlocks the tremendous sound and music capability of your Apple IIgs. ~ ~SONIX for the Apple IIgs consists of 2 editors% ~ ~ WAVEFORM EDITOR (Creates SONIX waveform files) ~ MUSIC EDITOR (Creates SONIX music files) ~ ~and 3 interfaces% ~ ~  SONIX.GS (Basic language interface) ~ LONGLOADER (ProDOS/memory interface) ~ NOTE.ENGINE (Music sequencer) ~ ~on 2 disks% ~ ~ /SONIX/ (SONIX system/editor disk) ~ /WAVE.LIB/ (SONIX waveform library) ~ ~Complete documentation and programming tips are included on this disk. ENDFILE ~=========================================================================== ~LOAD VARIABLE = NL DECIMAL = 38144 HEX = $9500 ~=========================================================================== ~ ~This call loads a music file and all the waveform files associated with ~it. All the digital oscillator control (DOC) parameters and sound RAM ~patterns are initialized and put in place& according to the music file ~data. The "SG$" string descriptor is used to pass the music file path- ~name to the Note Engine. ~ ~ 10 SG$ = "/FULL/PATHNAME&" : CALL NL ~ ~ => NOTE THE "TRAILING COMMA"--IT'S VERY IMPORTANT ! <= ENDLINE~============================================================================ ~CONVERT VARIABLE = NC DECIMAL = 38152 HEX = $9508 ~============================================================================ ~This Call installs an interupt pattern for the Note Engine onto a Super Hi- ~Res screen image. The screen image can be in any memory bank& but its ~starting address must be 8192 ($2000). This aligns it with the Super Hi-Res ~screen buffers. ~ ~To Convert a screen image& have the screen in memory aligned at 8192 ~($2000)& POKE its bank number in variable BK (38989; $984D)& and CALL the ~Convert routine. ~ ~ 10 POKE BK& X % CALL NC ~ ~ where X= number of memory bank holding the Super Hi-Res image to be ~ Converted. ~ ~NOTE% All screen images should be Converted AFTER they are loaded in from ~ disk& so that when they are displayed& the interrupt pattern for the ~ Note Engine is already present. ENDLINE ~============================================================================ ~START VARIABLE = NS DECIMAL = 38156 HEX = $950C ~============================================================================ ~ ~This Call begins play of a previously loaded song file from the beginning ~and will halt when either a Stop Call is made or the end of the song file is ~reached. As soon as the Call is made& control of the computer is returned ~to you so your program can continue while the song file plays. ~ ~ 10 CALL NS ENDLINE ~============================================================================ ~STOP VARIABLE = NP DECIMAL = 38160 HEX = $9510 ~============================================================================ ~ ~This Call halts the playing of a song file by the Note Engine. ~ ~ 10 CALL NP ENDLINE ~============================================================================ ~RESUME VARIABLE = NR DECIMAL = 38164 HEX = $9514 ~============================================================================ ~ ~This Call continues the playing of a song file from where it was stopped (by ~the STOP Call). ~ ~ 10 CALL NR ENDLINE ~============================================================================ ~STEP VARIABLE = NX DECIMAL = 38168 HEX = $9518 ~============================================================================ ~ ~This Call will "one step" your song file& advancing a 1/64th note duration ~for each Call that is made. ~ ~ 10 CALL NX ENDLINE ~============================================================================ ~STATUS Hex Address = $95FF Decimal Address = 38399 ~============================================================================ ~ ~ The Status address holds a 0 when the Note Engine is NOT playing. Issuing ~ a START Call begins a song and returns control to the Basic program. ~ ~ PEEK the Status address to see if a song is still being played& so that it ~ doesn't execute any program steps not wanted before the song is over. ~ ~ Example% ~ ~ 10 SG$ = "/WAVE/SONG.SWF&" % CALL NL % CALL NS ~ ~ 20 IF PEEK (38399) < > 0 THEN 20 ~ ~ 30 {Another code line to be executed AFTER the song is finished} ENDLINE~============================================================================ ~SONG COUNT Hex Address = $25FA& $25FB Decimal Address = 9722& 9723 ~============================================================================ ~ ~The 2 bytes of the Song Count address tell how many 64th note "ticks" have ~occurred since a song was START-ed. ~ ~The following code would STOP a song at the end of the 15th bar% ~ ~ 10 BAR = (PEEK (9722) + 256 * PEEK (9733)) / 64 {64 notes per bar} ~ ~ 20 IF BAR < 15 THEN 10 ~ ~ 30 CALL NP ENDLINE$NE.8 ! O~============================================================================ ~ MASTER VOLUME Hex Address = $95F7 Decimal Address = 38391 ~============================================================================ ~ ~A song's Master volume can be changed at any point while it's playing by ~POKE-ing in a value from 0 to 15 (0 is OFF) at $95F7 (38391). The START ~Call sets Master volume to 8 at this address at default. ~ ~The following code would increase Master volume to 10 at the beginning of ~Bar 16: ~ ~ 10 BAR = (PEEK (9722) + 256 * PEEK (9733)) / 64 ~ ~ 20 IF BAR < 15 THEN 10 ~ ~ 30 POKE 38391& 10 ENDLINE~ ~ ~ ~ ======================================================================= ~ SONIX for the Apple IIgs Version 1.1 ~ ======================================================================= ~ ~ X ~ ~ ~ ~ ~ Table of Contents ~ -------------------------------------- ~ ~ ~ Section A ................... Overview ~ ~ Section B ................... Waveform Editor ~ ~ Section C ................... Music Editor ~ ~ Section D ................... Note Engine ~ ~ Section E ................... Basic Interface ~ ~ Section F ................... Longloader ~ ~ Appendix A .................. Sample Parameters ~ ~ Appendix B .................. Semitone Table ~ ~ X Appendix C .................. SONIX File Structure ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software i 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ===================================================================== ~ OVERVIEW SONIX for the Apple IIgs ~ ===================================================================== ~ ~ Welcome to the world of synthesized sound...and welcome to SONIX--the ~ key that unlocks the tremendous sound and music capability of your ~ X Apple IIgs. Using only the Basic commands that you're already famil- ~ iar with& you can command all the features of the IIgs' built-in ~ Ensoniq synthesizer chip to load& save& and use virtually any sonic ~ waveform& duplicating all the sound effects that you hear in commer- ~ cial software programs. Before SONIX& it took many hours of program- ~ ming--in complex assembly language--to access the IIgs' built-in ~ sound handling routines. The IIgs' ROM (Read Only Memory) that con- ~ trols waveforms just wasn't designed to be accessible via normal ~ Basic program commands. So& we developed the SONIX routines to give ~ the Basic programmer full control of the Ensoniq chip...without hav- ~ ing to bother with the details of the IIgs' Sound ROM. ~ ~ In a nutshell& SONIX is a sophisticated machine code module that fits ~ in between you (in the form of your Basic program) and the IIgs' Sound ~ GLU (General Logic Unit). You give your commands in Basic& primarily ~ POKE-ing values into special memory locations that SONIX sets up and ~ CALL-ing machine code routines that SONIX provides for you. Only a ~ handful of "standard" address definitions are necessary at the begin- ~ ning of your Basic program listing& and you copy those from some of ~ the programs on your SONIX disk. You never need to speak "Toolbox- ~ ese"! Basic was developed to be the easy-to-understand programming ~ language for all of us personal computer users& and that's what SONIX ~ uses. ~ ~ ~ X What can you do with SONIX? How about these% ~ ~ ~ -> Extract sound files from disks& either custom-made ones or even ~ ones that are in commercial programs you already own. ~ ~ -> Sample and record your own sounds via almost any input. You can ~ use a microphone& a tape deck& a compact disc player& or... ~ ~ -> Define a sound waveform's pitch from anywhere in an 8-octave span. ~ ~ -> Compose and play music...in up to 30 voices. You can set master ~ volume& as well as volume for any of the individual voices. Set ~ master tempo and then vary it anywhere in a song. You get resolu- ~ tion down to 64th notes& too! ~ ~ -> Add sonic response to keyboard events. Have your IIgs talk back ~ to you& or add sound effects to your own Applesoft Basic programs. ~ ~ ~ SONIX has a Waveform Editor& 30-voice Music Editor& 30-voice Sequen- ~ cer& our exclusive Longloader data handling utility& and Basic Inter- ~ face... plus construction plans for an inexpensive& reliable digit- ~ izer pre-amp for sampling sound. ~ ~ ~ X ~ ~ ~ ~ So What Software A-1 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ OVERVIEW SONIX for the Apple IIgs ~ ===================================================================== ~ ~ Accessing and manipulating sounds with a microcomputer is a decep- ~ tively complex operation--luckily& with the IIgs it's easier than ~ X with most others. You've already heard a small sample of what you ~ can do with SONIX when you booted this disk. The voice and "ping" ~ sounds were sampled with SONIX and the inexpensive digitizer pre- ~ amp& stored on the SONIX disk& and then called up from the Startup ~ program. (You can easily list the routine to see how it's done.) ~ We explain all the features of SONIX and give you sample Basic code ~ modules to show you how to add sound to your own programs. Just ~ click the selection "THE MANUAL" when you're at the Main Menu screen ~ to get full instructions on how to print out and assemble your own ~ "reference manual". (Oops! Sorry& we slipped in a little "assem- ~ bly" language there.) ~ ~ ~ One final note. We HATE copy protection! There are only a few bad ~ characters out there who think it's OK to copy software and give it ~ to others (some even sell it; they're usually called criminals). All ~ of us at So What Software believe in the "Apple II spirit"; we think ~ that you should have access to every scrap of information about ~ what's going on in your computer. So& our programs are in easy-to- ~ read Basic& and our disks can be copied with ease. We respect you-- ~ please& PLEASE return the respect by copying SONIX only for your- ~ self. If you like the program& show off your work to your friends ~ and encourage them to get a copy of SONIX legally. That way& we'll ~ be able to stay in business and continue to develop the best in soft- ~ ware tools for you and your IIgs. (Wait 'til you see ICONIX; it does ~ X for the IIgs' Super Hi-Res graphics system what SONIX does for sound.) ~ ~ ~ ~ Thank you for investing in a So What Software product. If you like ~ it& tell others. If you have any problems& let us know so we can fix ~ them for you. If you have any suggestions or comments& please feel ~ free to drop us a line and tell us what you think--we're interested. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software A-2 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ SONIX's Waveform Editor lets you load& create& modify& and save sound ~ waveforms& which you can then access from your Basic programs. Wave- ~ X forms can be brought into the Waveform Editor either by extracting ~ them from  !"#$ a sound waveform file on disk (one you've created yourself ~ --or one from an application program you own)& or by capturing a ~ sound via the analog to digital (A to D) convertor in the IIgs' built- ~ in Ensoniq synthesizer chip. There are many features of the Waveform ~ Editor& but they're all easy to use. Let's take them one by one. ~ ~ ~ THE I/O ~ ------- ~ ~ The Waveform Editor screen is dominated by the Waveform Window& in ~ which you'll see the graphic representation of a sound waveform you ~ load or capture. Five "click-able" boxes appear above the window% ~ Load& Save& Prefix& Catalog& and Exit. These five comprise the Wave- ~ form Editor's Input/Output (I/O) section. (You won't see the Save ~ box until you have a waveform that's "save-able".) ~ ~ ~ PREFIX% Click this box to set the "current" prefix. Remember to ~ specify the volume name and any pertinent subdirectories. Press ~ Return to set the new prefix--just press Return without entering a ~ new pathname to get back to the Waveform Editor screen without ~ changing anything. ~ ~ X ~ CATALOG% Clicking this box will clear the Waveform Editor screen ~ to the text screen and show the contents of the "current" directory. ~ ~ ~ LOAD% Click this box to load a waveform file from disk. You'll ~ see a catalog of the "current" directory& and the partial pathname ~ will be printed on the screen& ready for you to type in the name of ~ the file you wish to load. Type in a filename and press Return to ~ load& or just press Return (without entering a filename) to return ~ to the Waveform Editor screen. ~ ~ ~ SAVE% This box will appear when you have a waveform in the Wave- ~ form Window. Click the box to save the file; the Waveform Editor ~ screen will be replaced by the text screen& and a prompt will ask ~ if you want to save to the "current" pathname. Press "Y" if the ~ pathname is correct. If you want to use another pathname& press ~ "N"& enter the FULL pathname you wish the waveform to be saved un- ~ der& and press Return when you're ready to save. Remember to use ~ all the slashes ("/") in the pathname . (Quality Software's excel- ~ lent book "Beneath Apple ProDOS" explains pathnames and slashes ~ completely.) ~ ~ ~ EXIT% Click this box to leave the Waveform Editor and return to ~ X SONIX's Main Menu Screen. ~ ~ ~ ~ So What Software B-1 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ WINDOW CONTROLS ~ --------------- ~ X ~ The Window Controls appear below the Waveform Window. There are 6 ~ "click-able" boxes% Edit& Extract& Capture& Down& Up& and Zip. ~ There's also a window that will reveal important data about a wave- ~ form in the Waveform Window. To make the explanation of the Window ~ Controls a little easier to understand& let's talk about what you'll ~ see in the Waveform Window when you're ready to work on a waveform. ~ ~ The Waveform Window shows a selected waveform as a series of ivory- ~ colored pixels whose vertical positions in the Window reflect the ~ relative volume of the waveform at that point. (Technically& this is ~ the instantaneous "amplitude" of the waveform.) Now& sonic waveforms ~ usually are repetitive in nature; that is& as you hear a sound& the ~ volume (amplitude) varies up and down with the passage of time. (An ~ engineer or mathematician would say they're "periodic".) You see ~ this characteristic in the Waveform Window as the relative volume ~ (ie& amplitude) pixels alternate vertical position above and below ~ the horizontal centerline of the Window screen as you view the wave- ~ form from left to right. The Waveform Window can handle a maximum of ~ 320 different amplitude values at once& and it shows every other one ~ of them as a pixel (for a total of 160 pixels)& left to right. ~ ~ What SONIX does is to show the output of the Ensoniq synthesizer ~ chip's Analog to Digital (A to D) convertor referenced to 1.28 volts. ~ The horizontal centerline of the Waveform Window is the 1.28 volt ~ X value; the top of the Window is 0 volts& and the bottom of the Window ~ is 2.55 volts. SONIX uses special graphics routines to convert these ~ A to D output voltages to pixel screen positions& with the top line ~ of the Window being screen position values 0 and 1& the second line ~ down being values 2 and 3& and so on...to the bottom line of the ~ Window& which is screen position values 254 and 255. (The reason ~ for 2 values on each line is that the IIgs has only 200 horizontal ~ lines on its monitor screen. So& the best detail SONIX can show is ~ 128 lines X 2 values per line = 256 values to show a total of 2.55 ~ volts. But don't worry& SONIX handles the "2 values per line" busi- ~ ness automatically.) The only important thing for you to remember is ~ that "0" is all the way at the top of the Waveform Window. You'll ~ understand why when we get into explaining the Zip control. ~ ~ Let's get back to the Window Controls....... ~ ~ UP% When you click the Up box& the Window "moves" 80 values to the ~ right& or& as we think of it& 80 values "up" in the waveform. So& ~ if the Waveform Window is showing the 0 - 319 part of a waveform ~ (remember& computers...including your IIgs...count 0 as a value& so ~ 0 - 319 is a total of 320 values)& and you click the Up box once& ~ you'll see the 80 - 399 part of the waveform (if it's that big... ~ and waveforms usually are). The part of the waveform you're seeing ~ will be shown in the wide window to the right of the Zip box. ~ ~ DOWN% When you click the Down box& you move "down" in the wave- ~ X form& but only 75 values. We do this so that you will always be ~ able to see a single pixel for every value in a waveform. Clicking ~ Up lets you see the "even-valued" ones; clicking Down shows you the ~ "odd-valued" ones. ~ ~ So What Software B-2 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ ZIP% This is a quick way to move up and down in a waveform. Click ~ the Zip box (it will become highlighted) and then Up& and you'll go ~ X immediately to the NEXT "0" in the waveform. Click Zip and then ~ Down& and you'll go immediately to the PREVIOUS "0". The Waveform ~ Window will align the waveform so that the 0 value you Zip-ed to is ~ at the left of the Window. (Recall that a 0 value is at the top of ~ the window; when you Zip& the 0 is at the upper left of the Window.) ~ ~ SLIDER% The Slider is a very convenient way of moving to any point ~ in a waveform. The Slider box appears at the very bottom of the ~ Waveform Editor screen whenever there's a waveform in the Window& ~ and it represents a total of 32&768 waveform amplitude values. ~ When you move the arrowhead cursor into the Slider box& the cursor ~ becomes a dotted blue square with a yellow "bull's-eye" in it. The ~ Slider itself is a pink square that also appears in the Slider box& ~ and the Slider's position in the box corresponds to the part of a ~ waveform shown in the Waveform Window ~ ~ (What?!? Let's take that a little slower!) ~ ~ If you put the Slider at about the midpoint of the Slider box& the ~ Waveform Window will show the 320 values around 16&384. The range ~ of values will be shown in the window to the right of the Zip box. ~ Put the Slider near the left side at& say& the 1/8 position& and ~ you'll see the 320 values around 4096. As you can imagine& if you ~ want to home in on a specific part of a waveform& a good technique ~ is to use the Slider to get into the general area and then click ~ X the Up and Down boxes for precise movements. ~ ~ You can move the Slider in two ways% use the mouse to put the cursor ~ on the Slider and drag it to where you want it& or put the cursor at ~ the position in the Slider box that you want to Slider to move to ~ and click. ~ ~ ~ EDIT ~ ---- ~ ~ SONIX's Edit function lets you change amplitude values of a waveform ~ by simply redrawing the part of the waveform you want to change. ~ When you click the Edit box& the arrowhead cursor becomes a pencil ~ that you can move with the mouse to any location in the Waveform Win- ~ dow. When you click and hold the mouse button and then move the pen- ~ cil cursor& you'll see new waveform amplitude value pixels being drawn ~ on the screen. Release the mouse button and the waveform's new shape ~ will be shown. If you're not satisfied with what you've drawn& just ~ re-click the Edit box and draw some other waveform shape. ~ ~ To make sure that the Waveform Editor doesn't get confused by any ~ inspired waveform redrawing you do& we designed it to pay attention ~ ONLY to cursor movements going from left to right. So& don't bother ~ trying to draw a part of a waveform going the other way. ~ ~ X ~ ~ So What Software B-3 1-MAY-88 ~ ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Also& keep in mind that any waveform reshaping you do in the Edit ~ mode is only temporary--you make it permanent by clicking the Save ~ X box and saving the new waveform. (Be careful here! If you save the ~ reshaped waveform with the same pathname as it had before& you'll ~ write over the earlier version and lose it. If that's what you want ~ to do& OK...just be SURE that's what you want to do.) You'll probab- ~ ly be using the Edit function quite a bit in the Extract and Capture ~ modes. ~ ~ ~ EXTRACT ~ ------- ~ ~ SONIX's Extract function is used to define and tailor a sonic wave- ~ form--or a part of a waveform--so that it can be called and sounded ~ from a Basic program. As you'll find out in the descriptions of the ~ Music Editor and the Note Engine& you'll be able to use various wave- ~ forms that you've extracted for "simple" things such as giving a ~ sound effect when the mouse is clicked on a certain place on the ~ screen...and for more complex tasks such as sounding as many as 30 ~ different musical "voices" in long songs that you command to play ~ from your own programs. ~ ~ The Extract function can be used readily with any waveform files that ~ have been created with SONIX's utility routines; for instance& a dig- ~ ital file of your own voice saying "Press a key"& which you'd create ~ in the "Capture" mode. (Capture will be described a little later.) ~ X Another example is 1 of the 20 waveform files that we've included in ~ Waveform Library disk that came with the SONIX disk. Because many ~ SONIX owners also own other music software that has waveform files& ~ we've designed the Extract function to be able to let you extract and ~ shape those waveforms too. For instance& you can extract sounds from ~ Electronic Arts' "Music Construction Set"& from Activision's "Music ~ Studio"& and from Broderbund's "Fantavision". ~ ~ ~ ~ ~ --------------------------------------------------------------------- ~ ********************************************************************* ~ --------------------------------------------------------------------- ~ ~ HOLD ON A MOMENT! PLEASE....ALWAYS REMEMBER THAT COMMERCIAL SOFTWARE ~ IS COPYRIGHTED. EVEN THOUGH IT IS PHYSICALLY POSSIBLE TO EXTRACT ~ SOUNDS FROM OTHER SOFTWARE PROGRAMS& YOU SHOULDN'T DO IT UNLESS YOU ~ OWN THEM! WE'VE DESIGNED SONIX TO WORK AS SMOOTHLY AND EFFECTIVELY ~ AS IT DOES AS A CONVENIENCE TO YOU& THE SOFTWARE OWNER. WE URGE YOU ~ TO USE IT ONLY IN ACCORDANCE WITH ALL LEGAL RESTRICTIONS AND CONDI- ~ TIONS. DON'T ABUSE THE "FRIENDLINESS" OF YOUR SOFTWARE!! ~ ~ --------------------------------------------------------------------- ~ ********************************************************************* ~ --------------------------------------------------------------------- ~ X ~ ~ ~ So What Software B-4 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ SONIX lets you extract waveforms in 8 discrete sizes& from very ~ short& 256-byte files up to detailed files 32&768 bytes long. The ~ X key to the process lies in defining an Extract Region& which is a ~ continuous series of bytes (or volume values) between 2 "0" values. ~ That is& an Extract Region begins with a 0& has a series of other ~ values (none of them 0)& then ends with another 0. Defining an Ex- ~ tract Region is an easy matter& since SONIX's Edit function lets you ~ define a 0 value anywhere you want in a waveform. ~ ~ Because an Extract region must begin with a single 0& SONIX has a ~ built-in way to make sure you get off on the right foot. You begin ~ by getting a waveform into the Waveform Window& either by loading it ~ from disk (as was explained on p. B-1) or by capturing it (which will ~ be explained starting on p. B-8). Then& you use the Slider or click ~ the Up box to get past the beginning of the waveform--all you have to ~ do is see some "waveform-like" stuff on the screen. Next& you click ~ Zip& then Down--this gets you to the first 0 BEFORE the 0 at the be- ~ ginning of the Extract region. Then& you click Up& and the Waveform ~ Window is exactly aligned& with a single 0 at the upper lefthand cor- ~ ner. Last& you click the Extract box& and SONIX will Extract a wave- ~ form file from the first 0 to the next 0 in the waveform. ~ ~ The sequence& again% Get past the first 0 in the waveform => Click ~ Zip& then Down& then Up => Click Extract. (If you don't follow the ~ sequence& you'll get an error message.) ~ ~ Let's take a moment here to clarify something. SONIX works with ~ X waveform files of 8 discrete lengths% 256& 512& 1024& 2048& 4096& ~ 8192& 16384& and 32768 bytes. The reason for this is rather involved& ~ having to do with the way the IIgs' Ensoniq synthesizer chip encodes ~ data. All you need to keep in mind at this point is that the smallest ~ waveform file SONIX can extract is 256 bytes long. If you start at a ~ 0 value and the next 0 is closer than 256 bytes away& you'll get a ~ "File Too Short" message in the middle of the screen. You can fix ~ that glitch by just moving up to the "too close" 0 value (use the Sli- ~ der and/or the Up and Down boxes) and using the Edit function to ~ change the 0 (or 0s) that are too close to some other value. ~ ~ When you click Extract and the waveform is at least 256 bytes long ~ before the next 0& you'll see a blue Tuning Window& which has click- ~ able windows for One Shot& Free Run& On& Off& Resolution& Oscillator& ~ and Accept. The Window also has movable sliders for Coarse Pitch& ~ Fine Pitch& and Volume. At the top of the Waveform Window& you'll see ~ another pair of click-able boxes for Reference Oscillator On and Off. ~ Here's how you use all that stuff% ~ ~ ONE SHOT% Click this box& then On& to sound your Extracted wave- ~ form one time. (You may not hear it at first; that'll be explain- ~ ed in the Pitch and Volume sections.) ~ ~ FREE RUN% Click this box& then On& to sound your Extracted wave- ~ form continuously. Click Off to stop Free Run. ~ ~ X ~ ~ ~ So What Software B-5 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ RESOLUTION% Click this box to select 1 of 7 levels of "detail" for ~ your extracted waveform. The higher the Resolution number& the more ~ X accurate the waveform sound will be& but the pitch will be lower. ~ There is interaction between Resolution& Oscillator& and Coarse and ~ Fine Pitch. For most applications& it's best to set Resolution to ~ as high a number as you can while still being able to get the wave- ~ form's pitch as low as you want it. ~ ~ OSCILLATOR% This number can be click-selected from 1 to 30. The ~ number shows how many of the IIgs' digital oscillators are being ~ "enabled" for the waveform you're extracting. This setting inter- ~ acts with Resolution and Coarse and Fine Pitch& and it also can have ~ an effect on the tuning of individual voices during playback of a ~ song. It's best to keep Oscillator ALWAYS set to 30; as you become ~ more experienced with SONIX& you may find a rare situation in which ~ some lesser number of Oscillators should be selected...but trust us ~ and leave it set to 30 until then. ~ ~ REF ON% Click this box to sound the "C above Middle C" (523 Hz) ~ Reference Tone. ~ ~ REF OFF% Click to silence the Reference Tone. ~ ~ ACCEPT% Click this box to accept the waveform and the current ~ settings. ~ ~ Time for a little more discussion% ~ X ~ Recall that the Waveform Editor configures sonic waveforms so they ~ can be played over a span of 8 octaves (the range of a standard piano ~ keyboard). Now& since we expect you'll be using different waveforms ~ you've defined together sometimes& SONIX gives you an easy method of ~ "tuning" everything to the same pitch. Click both the Free Run and On ~ boxes. Most of the time& you'll hear a high-pitched "chirping"-- ~ that's your extracted waveform being sounded over and over again at a ~ high rate. Use the mouse to move the Coarse Pitch Slider to the left ~ to lower the pitch--much of the time you'll want to move it all the ~ way to the extreme left--until the waveform sound becomes recogniz- ~ able. (And remember& if you change the values of Oscillator and Ref- ~ erence at this time& you'll also change the pitch...but in the proc- ~ ess& you may get yourself completely lost. It's best to leave them ~ set at the default values& 30 and 7.) ~ ~ Now& click the One Shot box (and leave the On box highlighted). Every ~ time you click the box& you'll hear your waveform sound 1 time. To ~ get it in exact tune& click the Reference On box (at the top of the ~ Waveform Window)--you'll hear the "C above Middle C" reference tone. ~ Use the mouse to move the Coarse Pitch and Fine Pitch sliders so that ~ when you click the One Shot box& your waveform seems to be at the ~ same pitch as the Reference Tone. Move the Volume slider with the ~ mouse to adjust the loudness of your waveform. This tuning process ~ takes some patience and a pretty good ear& but it CAN be done...and ~ you'll be glad you did& later on. Click Reference Off when you're ~ X finished. ~ ~ ~ So What Software B-6 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ By the way& some find it easier to click the Free Run box and let ~ their waveform sound continuously while they match its pitch to the ~ X Reference Tone. If you do it this way& you can hear the "beat" fre- ~ quency get lower and lower as the pitches get closer together. We've ~ used both methods successfully; it's really the user's choice. ~ ~ (A side note% Tuning a waveform makes most sense for "musical" ~ sounds& and& in fact& it's mandatory if you intend to use 2 or more ~ waveforms together in a song you create with SONIX's Music Editor. ~ Spoken sounds--or just sound effects--don't really need to be tuned. ~ BUT...you'll soon understand that you will want to set the pitch of ~ every waveform before you accept it.) ~ ~ Now that you've got your waveform's pitch set& it's ALMOST time to ~ Accept it. Last thing& though% you've got to decide whether to have ~ the One Shot box highlighted or the Free Run box highlighted before ~ you click Accept. If you're in One Shot mode when you click the ~ Accept box& your waveform will sound only one time when you play it ~ from a Basic program. That's what you'll probably want most of the ~ time& and it works quite well with waveforms that are at least 1024 ~ bytes long. If you Accept a "long" waveform (say& one that's 4096 ~ bytes long) with the Free Run box highlighted& you likely won't like ~ the result& because the lower pitches of the waveform will sound sev- ~ eral cycles& and the higher pitches will sound fewer...or not even ~ one whole waveform cycle. (Try it--you'll see what we mean.) ~ ~ But for really "short" waveforms& particularly the 256- and 512-byte ~ X ones& you'll probably want to Accept with the Free Run box highlighted ~ so that at higher pitches you'll get enough repetitions of the wave- ~ form so that your ears will recognize it. We can't give you any ~ Eternal Rule on this& because waveforms can vary widely in size and ~ content. You'll be the judge of what works best for YOU in your pro- ~ grams& so try it different ways and use the one you like. ~ ~ OK& click the Accept box. The Tuning Window disappears& a 1-octave ~ keyboard appears& you see the message "Creating semitone table -- ~ stand by"& and the arrowhead cursor changes to a pointing hand. ~ (What IS all this stuff?!) ~ ~ Western Hemisphere music is based on "semitones" (among other ~ things). That is& we use only 12 notes in an octave% C& C-sharp (the ~ same as D-flat)& D& E-flat (the same as D-sharp)& F& F-sharp (same as ~ G-flat)& G-sharp& (A-flat)& A& B-flat (A-sharp)& and B. Each of ~ these notes is musically (and mathematically) 1 "halftone" apart from ~ its 2 neighbors. So& a collection of them is called a "semitone ~ table"& and SONIX creates a 96-value (that is& 12 semitones x 8 oc- ~ taves = 96) one from your waveform when you click the Accept box. ~ Use the mouse to point and click the "pointing hand" cursor on the ~ keys on the screen& and you'll hear the notes you're familiar with. ~ ~ Appendix B has more detailed information on the structure of a semi- ~ tone table. ~ ~ X ~ ~ ~ So What Software B-7 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ If you tuned your waveform accurately to the Reference Tone& each ~ X note you sound on the keyboard will be accurate. If you didn't& ~ they'll all still sound OK relative to each other.....but remember& ~ when you use different waveforms in a song& you're gonna be sorry! ~ You should pay particular attention to this if you're using waveforms ~ from other software packages; there's no way to know how they were ~ tuned by their original designers. ~ ~ You'll see 3 "click-able" boxes on the Keyboard screen% Octave and ~ Save at the top& and Backout at the bottom. ~ ~ OCTAVE% Click the Octave box to select which of the 8 octaves that ~ your waveform has been set for will sound when you hit a key with ~ the cursor. Octaves 0 and 1 are quite low& so don't be surprised ~ if all you hear is a low rumbling. Likewise& Octaves 6 and 7 are ~ high& so your waveform may sound more like a "tink" than what you ~ expect. The pitch you set in the Tuning Window is the left-hand C ~ in Octave 5. (That's why you need to think about where you set the ~ pitch when accepting voice and sound effects. Set it too low and ~ you'll get only "rumbling"--too high& and you'll drive neighborhood ~ dogs crazy!) ~ ~ BACKOUT% Click the Backout box to get back to the Waveform Window. ~ You'll be at the very front end of the waveform you just created. ~ The curved arcs you see all the way at the left of the waveform are ~ the graphic representation of the Semitone Table that SONIX created ~ for you when you Accepted the waveform. If you like the waveform& ~ X click Save& make sure you type in the pathname you want to save ~ under& and press Return. If you want to make some changes& use the ~ Edit function and the other Waveform Editor features to redraw the ~ waveform& set things up in the Tuning Window& and Accept it again. ~ ~ SAVE% Click the Save box to save your waveform to disk. Be sure ~ to use the pathname you want. ~ ~ ~ CAPTURE ~ ------- ~ ~ SONIX's Capture function lets you bring "real time" sound signals ~ into the IIgs' Ensoniq synthesizer's A to D convertor& shape and ~ calibrate them& and save them to disk as waveform files that can be ~ used in your Basic programs. Input signals can come via microphone& ~ tape deck& phonograph& CD player& electronic synthesizer...virtually ~ any "electronic" source. The only precaution that you have to ob- ~ serve in Capturing a sound is to keep the maximum voltage of the ~ input signal below 2.55 volts. That's the upper limit that the En- ~ soniq chip's A to D convertor should be expected to handle without ~ failure. (That is& try to pump a HIGHER voltage signal than 2.55 ~ volts into the A to D convertor and you'll probably get to know your ~ local Apple IIgs repair technician pretty well.) You've got to be ~ SURE that the input signal level is controlled within the A to D ~ convertor's design limits. ~ X ~ ~ ~ So What Software B-8 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ IF YOU'RE NOT SURE ABOUT AN INPUT SIGNAL'S CONDITION& DON'T USE IT ~ UNTIL A QUALIFIED TECHNICIAN CHECKS THINGS OUT FOR YOU. SO WHAT ~ X SOFTWARE CAN'T...AND WON'T...BE RESPONSIBLE IF YOU CONNECT YOUR IIgs ~ TO A HIGH VOLTAGE SIGNAL!! ~ ~ There are a schematic& parts list& and adjusting procedures for an ~ inexpensive& EFFECTIVE pre-amplifier included on this disk. You can ~ easily assemble one for yourself (or get an electronics-type to do it ~ for you) and use it to condition input signals. ~ ~ Sorry about all the "Doom and Gloom" warnings& but when it comes to ~ injecting "unknown" signals into your IIgs& you've got only 2 choices% ~ do it carefully--at your own risk........or don't do it at all!! ~ ~ For the following explanation of the Capture function& we're assuming ~ that you're using a microphone as the input device and that you've ~ got your pre-amp adjusted correctly. Click the INSTRUCTIONS selec- ~ tion on SONIX's Main Menu screen& then click THE PRE-AMP to get full ~ information about the pre-amp we use. ~ ~ When you click the Capture box on the Waveform Editor screen& a blue ~ Sample Parameter Window will appear& with "click-able" boxes for ~ Rate& Size& and Sample& plus a Backout box. Before we discuss how ~ they work& let's go over some of the concepts of digital sound samp- ~ ling. ~ ~ Recall that in the Window Control section (p. B-2) we observed how ~ X sonic waveforms vary with time; that is& they have a volume at any ~ instant of time& and a changing series of volumes over a span of ~ time. A digital sampler "measures and records" a waveform's volume ~ (or amplitude) at selected time intervals and collects all these ~ amplitude/time pairs (or& samples) in a digital file. Now& the ~ faster the sampling occurs--that is& the more times a waveform is ~ sampled over its span of sounding& the better the digital file of ~ amplitude/time samples will represent how the waveform really sounds. ~ BUT...the file will be longer& because it has more amplitude/time ~ samples in it. Conversely& the fewer the samples& the shorter the ~ file...but the less accurate the representation of the waveform. ~ ~ SONIX's sampling technique lets you choose any of 16 sample rates& ~ the fastest being only 32.12 microseconds per sample and the slowest ~ being 242.12 microseconds per sample. SONIX's sampler also lets you ~ choose how long a file of samples you want to create& from 256 bytes ~ long (that is& 256 samples& with 1 byte representing the amplitude ~ value of each sample) to 32768 bytes long. (Bet you know the se- ~ quence% 256& 512& 1024&....&32768.) ~ ~ So....the smaller the sample rate number& the more samples taken ~ while a waveform sounds. And....the longer the file size allowed& ~ the more samples in the file. Best fidelity comes at 32.12 micro- ~ second sampling rate and 32768 sample file size. (Appendix A has a ~ lot of detail on the relationship of sampling rate& sample size& and ~ sampling time.) ~ X ~ ~ ~ So What Software B-9 1-MAY-88 ~ ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ RATE% Click to select the sampling rate value. ~ ~ X SIZE% Click to select the sample file size. ~ ~ SAMPLE% Click to begin the sampling process. The Sample box will ~ be highlighted during the actual time a waveform is being sampled. ~ ~ BACKOUT% Click to return to the Waveform Editor ~ ~ Here's a step-by-step procedure that will get you going in the right ~ direction. We'll try not to over-samplify it too much. (GROAN!) ~ ~ With Rate and Size at their default values (32.12 and 32768)& click ~ the Sample box& but DON'T speak into your microphone. Note that Sam- ~ ple is highlighted for about 1 second& and then the Sample Parameter ~ Window is replaced by the familiar Tuning Window. Click Backout and ~ you'll see the result of a "no signal" input. What you SHOULD see is ~ a straight& horizontal line at or very near the center of the Wave- ~ form Window. If the horizontal line is more than about 5 percent ~ away from the Waveform Window's centerline& the pre-amp is too far out ~ of adjustment. (Click the PRE-AMP selection of the Instructions ~ option in SONIX's Main Menu screen for a refresher on this subject.) ~ Don't be concerned if the horizontal line is at the center but has a ~ few little "bumps" on it. Those are small noise spikes that are ~ pretty much unavoidable. Click Backout when you're finished. ~ ~ Now that your pre-amp is all set up& it's time for some serious sam- ~ X pling. Click Capture& click the Rate and Size boxes to choose the ~ sampling parameters you want& click Sample& and speak into your micro- ~ phone as soon as you see the Sample box become highlighted. (It's ~ quite likely that you'll be in the Sample mode for a longer or short- ~ er time than you want. No problem; just click Backout& reset Rate ~ higher if you ran out of time or lower if you had time to spare& and ~ sample again.) ~ ~ Set all the sampled waveform's parameters with the Tuning Window's ~ controls the way we discussed in the section on the Extract function ~ (beginning on page B-4)& Accept the waveform& and hear yourself speak ~ via your IIgs! Note that you can "play" your voice at different ~ pitches; click the keys on the 1-octave keyboard and you'll hear ~ yourself over an 8-octave span. ~ ~ Now& click Backout--you'll be returned to the Waveform Editor--and ~ look at how your waveform is distributed over the Waveform Window. ~ What you want is for the extremes of the waveform to come NEAR (but ~ not all the way up to) the top and bottom of the Waveform Window. If ~ they're clustered around the centerline& you'll have problems of vol- ~ ume too low and too much audible "hash" (technically& the signal to ~ noise ratio will be too low). Try sampling again& but speak a little ~ louder and/or hold the microphone a little closer. ~ ~ If you see a lot of horizontal blue lines at the top and bottom of ~ the Waveform Window& your input was too loud. This usually makes the ~ X resulting waveform "muddy" and distorted& and the cure is to "back ~ off" a little in voice volume and/or hold the microphone a little ~ further away. ~ ~ So What Software B-10 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ This is a good time to talk about "trimming" a waveform. Let's say ~ you sample a waveform of yourself saying& "So What Software"& and ~ X after Extracting and Tuning& you notice a pause preceding the actual ~ words. You would probably want the words to begin right away& so ~ you'd click Backout and use the Edit function to trim off the "dead ~ space" at the beginning. (Recall that since an extracted waveform ~ begins with a 0 value& you'd use the Edit function to draw in 1 or ~ more 0s just BEFORE the word part of the waveform begins.) Then& ~ proud of your prowess as a waveform technician& you'd re-Extract the ~ edited waveform& re-Tune it& and check it out. ~ ~ WHAT?! The *@!! thing says&"So What Sof"!! What's going on here?!? ~ You trimmed off "dead space" at the beginning& and now you're missing ~ a piece of the waveform at the END!! ~ ~ The key to understanding what's happened is in how the Extract func- ~ tion works. Recall that on page B-4 we pointed out that SONIX works ~ with files that are 256& 512& 1024& 2048& 4096& 8192& 16384& and ~ 32768 bytes long.....and ONLY those lengths. If you extract a wave- ~ form that is any length between 1024 and 2047 bytes long& say& it will ~ be defined as a 1024-byte waveform file. If you were to subtract only ~ a single byte from a 1024-byte long waveform (making it 1023 bytes ~ long)& it would have to jump down to the next smaller size category& ~ 512 bytes. So& in our hypothetical example& when you whacked off the ~ "dead space" at the beginning of the waveform and then re-Extracted ~ it& you actually shortened it enough that SONIX had to define it in ~ the next smaller size category. The "So What Sof" part fit into the ~ X shorter file size& but the tail end of the waveform (the "tware" part) ~ had to be ignored. ~ ~ Despair not. The solution is simple& now that you have insight into ~ the workings of SONIX's Extract function. ~ ~ All you've got to do is make sure that the waveform file you're defin- ~ ing contains all the bytes you want (that is& everything you want to ~ hear) in a file length big enough to hold it all. The way to make ~ this happen is to use the Edit function to draw some "dummy" values ~ at the end of the waveform--about the same amount as you trimmed off ~ at the beginning. It's best to draw the "dummy" values as a horizon- ~ tal line near the center of the Waveform Window& but actually& you ~ can draw them almost anywhere EXCEPT at the top of the Window (values ~ all the way at the top of the Window are 0s). Remember& you define ~ the END of a waveform with a 0& so you don't want a 0 in the waveform ~ until you've just crossed the "size boundary" into the next bigger ~ file size. Just draw in enough "dummy" values to make your waveform& ~ say& 1030 bytes long& THEN draw in a few 0s. ~ ~ It's a good idea at this point to look at your entire waveform to ~ make sure that no unwanted 0s are "lurking" in the interior. The ~ easiest way is to use the Slider to get somewhere in the middle of ~ the waveform. Then& click Zip and Down& followed by Up& to go to the ~ first 0. (That's the same procedure you use at the beginning of the ~ Extract function& remember?) The beginning of your waveform should ~ X be aligned exactly at the left of the Waveform Window& and the first ~ number appearing in the window at the right of the screen should show ~ the beginning byte of the waveform you want. ~ ~ ~ So What Software B-11 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ WAVEFORM EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ If NOT...there's a stray 0 somewhere between the place you started ~ (in the waveform) and the place you want to be the waveform's begin- ~ X ning. You can find it...or them...by clicking the Up box (turn off ~ Zip) until the culprit appears on the screen and using the Edit func- ~ tion to draw in some other value(s). Zip to the beginning of the ~ waveform& as before& and then Zip Up one more time. If all the un- ~ wanted 0s are gone& you'll go right to the place that you drew in the ~ string of 0s to complete the waveform file length. If Zip-ing Up ~ doesn't get you to that part of the waveform& then you'll need to ~ track down the offending 0s and use the Edit function to get rid of ~ THEM& too. ~ ~ It may take a few moments to make sure there aren't any unwanted 0s ~ in your waveform& but it's not hard to do& really. The best part is ~ that you'll know you've got 'em all when you can Zip Down immediately ~ to the beginning and Zip Up immediately to the place where you drew ~ in the string of 0s& from anywhere in the "interior" of your waveform. ~ ~ Now& when you extract the waveform& tune it& and check it by clicking ~ the keyboard& you'll see that you've actually moved the "dead space" ~ to the END of the waveform& where it's usually not objectionable at ~ all. The full "So What Software" will be at the beginning of the ~ waveform file& and you'll hear it every time. ~ ~ This technique is also the way to go when you're extracting just a ~ part of a waveform that is on a commercial disk& such as getting just ~ the snare drum from a waveform file that contains cymbal& snare drum& ~ X bass drum& and high hat all together. A bit of practice will make ~ the technique second nature to you. ~ ~ ~ That's about it for waveform editing. Try your hand at using all the ~ Waveform Editor's features and you'll quickly become used to how they ~ work. We do suggest that you format a separate disk to hold waveform ~ files; you'll probably wind up creating quite a few& and your SONIX ~ and Waveform Library disks have only a limited amount of room left on ~ them. We've included 4 SONIX Waveform Library labels for you to put ~ on your waveform file disks. ~ ~ The Waveform Library disk that came with your copy of SONIX has a col- ~ lection of waveforms that we've developed with the Waveform Editor& ~ using a variety of input sources. If we can do it& so can you! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software B-12 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ INTRODUCTION ~ ------------ ~ X The Music Editor is a comprehensive& sophisticated utility program ~ that lets you write songs for your IIgs to play via Basic programs. ~ It gives you complete control over all the II%'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrgs' Ensoniq synthesizer ~ chip's sound handling capabilities& and the song files the Music ~ Editor lets you create can have features far beyond those from any ~ other IIgs music software. ~ ~ The IIgs can sound through as many as 30 digital oscillators--for ~ convenience& each oscillator can be thought of as providing a ~ "voice". (Of course& what each "voice" sounds like depends on the ~ nature of the electronic signal being sent to the digital oscillator. ~ SONIX's Waveform Editor takes care of that.) The Music Editor gives ~ you the ability to turn each "voice" (oscillator) on and off anywhere ~ in a song file& so you can write music that has only one "voice"& all ~ the way up to 30 "voices" (or instruments...or any sounds) simultan- ~ eously. But that's not all! ~ ~ You also can change the volume and tempo of a song anywhere in the ~ song& as well as changing the volumes of individual voices--at any ~ time. To be exact& the Music Editor gives you 1/64th note resolu- ~ tion in each measure of music that you write& over a song file span ~ of up to 128 measures. At any or all of these 64 separately defined ~ points in each measure of your song& you can set the volume and tempo ~ for all the voices& cause any or all of the voices to sound at differ- ~ ent volume levels& or silence any or all of the voices. ~ X ~ Let's go over that in a different way% In any song you write& you ~ can have& at any time& any number of voices from 1 to 30. Each song ~ file can be from 1 to 128 measures long& and in each measure& you can ~ control the sounding of any or all the voices at 64 places in the ~ measure. So& for a single song file& that's 30 voices X 64 notes per ~ measure X 128 measures = 245&760 individual events. PLUS...you can ~ set the volume and/or tempo each to 16 separate values at any of the ~ 8192 separate "note locations" in the song! But there's more....... ~ ~ Each voice can sound a note over a full 8-octave span--that's the ~ same 96-note range of a grand piano. Over that range& notes can go ~ from so low that they can't be heard to so high that your speaker(s) ~ and ears would have to be top-notch to handle them. And& each voice ~ can sound at any of 16 volume settings. ~ ~ Now& the "average" popular song is 32 measures long--usually 16 meas- ~ ures of the melody& then 8 measures of the "bridge"& followed by ~ another 8 measures of the melody (the refrain). Most popular songs ~ are just over 2 minutes long& so the Music Editor lets you write a ~ single song file that's 4 times as long--128 measures in 4/4 time& or ~ about 9 minutes' worth--with 30 voices and 1/64th note resolution. ~ That's a LOT of music! ~ ~ Don't let this description of the Music Editor sound too formidable. ~ It's just that your IIgs is a VERY capable sound-handling computer& ~ X and so any tool that gives you the degree of control you get from the ~ Music Editor will sound complicated. Actually& it's an easy matter ~ to begin with small songs with only a couple of voices& and then work ~ up in time to full capability. ~ ~ So What Software C-1 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ All right& enough "description". Let's get down to business and find ~ out how to use the Music Editor. ~ X ~ The Music Editor shows you a single measure (of the 128 possible for ~ a single song) on the screen at a time& all of the definable tempo ~ and volume settings for the measure& and it shows you all 64 of the ~ definable notes for any 6 of the 30 voices you can sound. Even ~ though we're showing only 1/128th of the measures and 6/30 of the ~ voices...or 1/640th of the detail you can put into a single song ~ file...the Music Editor screen is still pretty full. ~ ~ Here's a quick description of each of the features and controls& ~ followed by a more in-depth discussion of the uses of the more com- ~ plex ones. ~ ~ BAR# - Shows the bar (measure) being displayed (0-127). ~ ~ OSCILLATOR - 1 of 6 (of 30 total) available for note definition in ~ current screen; designated by hexadecimal value& 0-1E. ~ ~ UP - Click to display next bar. ~ ~ DOWN - Click to display previous bar. ~ ~ Ux10 - Click to go ahead 10 bars. ~ ~ Dx10 - Same& but goes back 10 bars. ~ X ~ TOP - Click to go to Bar #127 (the 128th bar). ~ ~ BOT - Click to go to Bar #0 (the 1st bar). ~ ~ SET DOC - Click to allow assignment of "voice" waveforms to the 30 ~ oscillators. (Detailed instructions follow.) ~ ~ SET DIS - Click to allow selection of which 6 oscillators will be ~ displayed on the screen at any one time. (Detailed ~ instructions follow.) ~ ~ LOAD - Click to allow selection of song file from disk to Music ~ Editor screen. (Default directory is /WAVE.LIB/MUSIC/.) ~ ~ EDIT - Click to enter Edit mode. (Detailed instructions follow.) ~ ~ SAVE - Click to allow designation of song file title and save it to ~ disk. (Default directory is /WAVE.LIB/MUSIC/.) ~ ~ PLAY - Click to select the Play options. (Detailed instructions ~ follow.) ~ ~ PREFIX - Click to allow setting of new pathname prefix for loading ~ and/or saving. Be sure to use all slashes ("/") in the ~ pathname. ~ X ~ ~ ~ ~ So What Software C-2 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ CATALOG - Click to display contents of currently defined directory ~ (or subdirectory). ~ X ~ EXIT - Click to exit to SONIX's Main Menu screen. ~ ~ ~ MUSIC EDITOR SCREEN ~ ------------------- ~ For discussion at this point& let's assume that you're going to write ~ a new song from scratch. When you click the Music Editor selection ~ on SONIX's Main Menu screen& the Super Hi-Res graphics screen gives ~ way to an 80-column text screen. (We use the text screen to give ~ that last bit of resolution--hence& information--to you in one ~ glance.) The horizontal band at the top of the screen gives you a ~ set of "reminders" about how to type in your music notation. The 6 ~ oscillators being displayed (of the 30 available) are listed down the ~ left-hand side of the screen& and the 15 function selectors are ~ across the bottom of the screen. ~ ~ The majority of the screen is taken up by the index markers for the ~ notes and volume/tempo markers you'll be entering. There's a pair of ~ lines of 64 "dashes" for each of the 6 oscillators; the upper line of ~ each pair is where notes& tempo flags& and volume flags themselves ~ are entered& and the lower of each line is where the octave of each ~ note or the tempo/volume value is entered. Also& there are 8 verti- ~ cal index marks& 8 64th notes apart& for each of the note lines... ~ so you can find quickly the place in the bar you want to put a note. ~ X ~ ENTERING NOTES AND OCTAVES ~ -------------------------- ~ To enter notes& you click the Edit function selector at the bottom ~ of the screen--and the cursor becomes a highlighted " ^ " (caret) ~ that points up to the pair of dash line for an oscillator. We've ~ written the Music Editor code so that while the caret cursor is com- ~ pletely free to move horizontally& it "jumps" as you move the mouse ~ vertically. That way you're always on the right line for entering ~ notes...or for setting the tempo and volume. ~ ~ When you've clicked the Edit function and gotten the caret cursor& ~ you move it to the line of dashes for an oscillator& locate it at the ~ horizontal position where you wish a note to begin& and click. At ~ this point& the upper dash (at the horizontal position you decided ~ on) is highlighted& and you then enter the letter of the note you ~ want% A&B&C&D&E&F&or G. "A-HA!"& you say& "what about sharps and ~ flats?" (Or "incidentals"& as they're known to musicians.) ~ ~ The Music Editor handles incidentals by using upper case (capital) ~ letters for the "natural" notes& and lower case for the incidentals& ~ the sharps and flats. AND...the Music Editor recognizes 3 sharps ~ (C-sharp& F-sharp and G-sharp) and 2 flats (B-flat and E-flat). This ~ covers all 12 of the semitones in a standard Western octave& and in ~ order& they would look like this on the Music Editor screen% ~ ~ X => C& c& D& e& E& F& f& G& g& A& b& B ~ ~ It's an easy thing to remember that A-sharp and B-flat& for instance& ~ are exactly the same note...so "b" is good for both. ~ ~ So What Software C-3 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ (In case you're wondering why we're not using a specific mark to indi- ~ cate sharp or flat& such as F+ for F-sharp or B- for B-flat& it's so ~ X the Music Editor can let you define and see all 64 notes you may want ~ to enter for each oscillator in a single measure. Remember& we're ~ already using the 80-column text screen to show the most information ~ we can at one time. If each note needed 2 characters& a letter fol- ~ lowed by a plus or minus& then the screen would only be able to show ~ 40 notes at a time for each oscillator.) ~ ~ As soon as you've entered a letter for a note& the lower dash mark at ~ your current note position is highlighted so you can enter the octave ~ you want for the note. Remember& the Music Editor gives you 8 oc- ~ taves for every note& but computers insist on treating "0" as a num- ~ ber; the 8 octaves are thus numbered 0 - 7. Just type in a number ~ from 0 to 7 and press Return& and the inverted caret cursor returns ~ so you can enter another note. By the way& if you type in an "il- ~ legal" note letter--an"R"& maybe...or an "illegal" octave number... ~ 8 and 9 are the only single digits not allowed--the Music Editor will ~ wait glumly for you to come to your senses and type in an acceptable ~ letter or number. ~ ~ With only 1 exception& when you enter a letter for a note& it's pre- ~ sumed by the Music Editor that you'll want the note to sound for the ~ rest of the current measure. You turn a note OFF by clicking at the ~ desired "turnoff" point and typing in an "X" or "x". The only excep- ~ tion is when the note is the last one (for a single oscillator) in ~ the bar. In this case& the note will be presumed to be a 64th note ~ X UNLESS you type in an "X" after it where you want it to be turned off. ~ ~ A half note C-natural in the 4th octave& sounding via Oscillator 4 on ~ the 2nd beat of a 4/4 measure& would be entered in this sequence% ~ ~ - Click EDIT to get the caret cursor. ~ ~ - Move the cursor vertically to the note/octave line for Oscillator ~ 4 and click at the 2nd vertical index mark (the 17th 64th note ~ position). ~ ~ - Type in a "C" (the capital letter)& then type in a 3 (because the ~ 1st octave is "0"& and we want the 4th octave). ~ ~ - Click at the position just before 4th vertical index mark and ~ type in an "X" or "x". ~ ~ Remember& though& the notes you're telling the Music Editor to play ~ can't sound any longer than you set up when you created them with the ~ Waveform Editor. That is& you can't create a short-sounding "voice" ~ waveform (say& a single piano note) and expect the Music Editor to ~ sound it constantly for a whole song. The general rule of thumb is ~ that a single note can be sounded for about 2 whole notes maximum or ~ for the length of the waveform--whichever is SHORTER. (That's why ~ you'll want to Extract really short waveforms in "Free Run" mode--to ~ give them extra length. See p. B-7 of the Waveform Editor instruc- ~ X tions for a discussion.) ~ ~ You can get out of the Edit mode and be ready to select one of the ~ other functions available at the bottom of the Music Editor screen ~ very simply% just click the mouse and then press Return. ~ ~ So What Software C-4 1-MAY-88 ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ SETTING VOLUME AND TEMPO ~ ------------------------ ~ X ~ Setting tempo and volume is very similar to entering notes. The ~ Music Editor looks for tempo and volume settings BEFORE each note ~ that it sounds& so all you have to do for tempo and Master Volume is ~ click the mouse at a horizontal position (for ANY of the 6 oscilla- ~ tors being shown) before the note position you want to start the new ~ tempo and Master Volume& type in a T (for tempo) and then a value of ~ 0 - F (where 0 is slowest and F is fastest)& or type in an M (for ~ Master Volume) and then a value of 0 - F (where 0 is softest and F is ~ loudest). The Music Editor will change tempo or volume at that point ~ in the song immediately for that following note and any others al- ~ ready sounding at the time. ("0 - F"?? Computer convention calls for ~ hexadecimal notation& so the values A - F correspond to 10 - 15.) ~ ~ To set volume for a single oscillator& you use the same procedure& ~ except& of course& you have to click on the horizontal line control- ~ ling the oscillator you're interested in. Click anywhere before the ~ next note you want to have a different volume& type in a V& and type ~ in a value of 0 - F. This volume will affect ONLY the oscillator ~ whose line you've entered it on. ~ ~ The relation between Master Volume and single Oscillator Volume is ~ this% Master Volume defines the loudest the music can be--for ALL ~ oscillators. Single Oscillator Volume defines how much of that maxi- ~ mum "loudness" an oscillator can use. So& a Master Volume of 6 and a ~ X single Oscillator Volume of F for Oscillator 2& say& means that Oscil- ~ lator 2 will sound at volume level 6. (That is& the maximum of the ~ Master Volume setting for this example& 6.) If you set Oscillator ~ 2's volume to 8& though& it will only be able to sound 1/2 the level ~ of the Master Volume setting. So& Oscillator 2 will sound at volume ~ level 3 (that is& 1/2 of 6)& while other oscillators will be free to ~ sound at the Master Volume level (which we set at 6). ~ ~ You can "increment" or "decrement" tempo& Master Volume& and Oscilla- ~ tor Volume by 1 by clicking and typing in a ">" to increment or a "<" ~ to decrement. This is very convenient for gradual tempo and volume ~ changes& and it obviates the need to go back in a song to find the ~ last tempo or volume entry. ~ ~ The Music Editor presumes that you want whatever volume and tempo ~ settings you've entered to be constant for the rest of the song& so ~ you only have to enter them when you want to CHANGE something. ~ ~ To re-edit note& tempo& or volume entries you've made& put the cursor ~ at the point just below where you want to make a change and click. ~ Now you can either enter new data (maybe change a note or an octave) ~ by typing in what you want& or you can "erase" an entry by typing a ~ single hyphen& "-". This is the way to start a "rest"& too. ~ ~ Another very convenient editing feature is the "Z" command. Clicking ~ at a point on an oscillator's line and typing in a "Z" will set that ~ X oscillator's volume to 0 for the rest of the song& no matter what ~ notation comes afterward. This provides an easy way to "shut off" 1 ~ or more voices when you want to concentrate on only a few oscilla- ~ ~ ~ So What Software C-5 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ tors. Note& though& that "Z" commands are ERASED when a song file ~ is saved to disk. If you want to make a permanent change to shut an ~ X oscillator off& be sure to set all its Oscillator Volume values to 0 ~ at and after the point you want it silenced. ~ ~ The last notation option is the setting of an oscillator's "Multi- ~ plexer Channel". We've already noted that SONIX supports all 30 of ~ the IIgs' available oscillators& but now you should know that you can ~ identify as many as 8 separate channels for each of the oscillators. ~ OK& we expect that almost every SONIX user will stop at "stereo" (ie& ~ 2 channels)& but if your system has the ability to use 4 separate ~ channels (or 3..or 8..or..)& you can set that up. ~ ~ To set the Multiplexer Channel for an oscillator& click at a point on ~ the oscillator's line and type in an "N"& followed by a value from 0 ~ to 7. The default setting is 0& so if you don't do anything at all& ~ you'll get monophonic sound. Stereo is simple% click& type "N"& and ~ type 0 for left channel or 1 for right channel. Do keep in mind& ~ though& that the IIgs's sound output jack on the back panel of the ~ computer is only a monophonic sound source. To get true stereophonic ~ sound& you'll need to install a "stereo card"& such as Applied Ingen- ~ uity's G-Stereo card or MDIdeas' SuperSonic card. ~ ~ When you're ready to stop editing (that is& typing in notes& setting ~ volumes& and such) and want to be able to select one of the options ~ at the bottom of the Music Editor screen& put the cursor anywhere in ~ the screen& click once& and press Return...WITHOUT pressing any other ~ X keys. You'll get the inverse block cursor back& ready for you to ~ highlight another choice. ~ ~ If& by chance& you find some keystroke combination that causes you to ~ "lose control" of the Music Editor while you've got a whole bunch of ~ music written in...but NOT saved...we've got some good news! You can ~ get back into the Music Editor simply by pressing Control and Reset ~ simultaneously (which gets you the Applesoft "]" prompt)& then typing ~ in RUN and pressing Return. All your music data will be OK (the ~ notes& volumes& etc)& but you will have to reassign the waveforms to ~ each of the oscillators. Luckily& this is a simple task; it's all ~ explained in the section titled Setting Oscillators and Waveforms. ~ ~ ~ SELECTING OSCILLATORS FOR DISPLAY ~ --------------------------------- ~ Recall in the introduction to this discussion of the Music Editor ~ that it was pointed out how much control the Music Editor gives you ~ over the music you write. (It's MUCH greater control than any other ~ currently available Apple IIgs music composition application program ~ we've ever seen or heard of--and as well& only SONIX lets you play ~ your music via a Basic program!) Now& since your IIgs can sound 30 ~ oscillators& but the Music Editor's screen only shows 6 at a time to ~ keep from crowding the screen too much& we've provided a slick feature ~ to let you see any 6 of the 30 oscillators at a time. ~ ~ X ~ ~ ~ ~ So What Software C-6 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Click the SET DIS function at the bottom of the screen& and you'll ~ get a screen inviting you to select an oscillator for "Position 1". ~ X Position 1 is where the topmost of the 6 oscillators that are on the ~ Music Editor screen appears& so all you do is enter a number from 0 ~ to 29 to tell the Music Editor which oscillator to show on top of the ~ stack. When you enter a number--or press Return without entering a ~ number--the next position down is available for your choice. Pressing ~ Return without entering a number leaves the oscillator in that posi- ~ tion alone. ~ ~ A quick example% Let's say that the oscillators indicated from top ~ to bottom are 00& 01& 02& 03& 04& and 05 (the "default" values)& but ~ you want to write in notes to be sounded by Oscillators 7& 9& 15& 18& ~ 5& and 29--in that exact order. Here's how you go about it% ~ ~ - Click the SET DIS function. ~ ~ - When the first oscillator selection window appears& type in 7 and ~ press Return. ~ ~ - When the next window appears& enter 9 and press Return. ~ ~ - Do the same for the next 2 oscillators& entering 15 and 18. ~ ~ - For the 5th one& you can either enter 5 and press Return& or just ~ press Return& since Oscillator 05 was already selected for this ~ position. ~ X ~ - Enter 29 and press return to take care of the 6th oscillator. ~ ~ After you enter your choice for the 6th oscillator& you're returned ~ to the regular Music Editor screen& and on the left-hand side of the ~ screen you see.....WHAT?!! 07& 09& 0F& 12& 05& and 1E!! What gives? ~ ~ All is under control and proper. The Music Editor uses hexadecimal ~ format to identify oscillators because the Apple IIgs-internal calcu- ~ lation subroutines we need to use to identify oscillators give output ~ in hexadecimal only. To "recaculate" the oscillator numbers in deci- ~ mal form would add extra code and slow the overall Music Editor opera- ~ tion down. You'll soon have no problem recognizing the hex values; ~ it's second nature to almost every IIgs user. ~ ~ ~ SETTING OSCILLATORS AND WAVEFORMS ~ --------------------------------- ~ Typing in notes and volumes is all well and good& but until you tell ~ your IIgs what voice(s) to use& all it can do is "hum"...so to speak. ~ When you highlight and click the SET DOC option at the bottom of the ~ Music Editor screen& a new screen appears& with listings of the 30 ~ oscillators available& a line of 15 hyphens and a "00 0100" entry for ~ each& and headings at the bottom for Source Prefix& Sound RAM Used& ~ Sound RAM Unused& Edit& and Exit. ~ ~ X By now& you're probably "in tune" with some of our So What Software ~ program architecture& so it's necessary only to mention that high- ~ lighting and clicking Exit will get you back to the Music Editor ~ screen. Clicking Edit lets you edit& of course& but edit what? ~ ~ So What Software C-7 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ The function of the SET DOC (by the way& the acronym DOC stands for ~ Digital Oscillator Control) routine is to tell the Music Editor what ~ X waveform file it should use for each of the 30 oscillators...and ~ where to find them. Recall that you create waveform files with ~ SONIX's Waveform Editor and then save them to disk with the ".SWF" ~ suffix. So& since all your waveforms are on disk somewhere& you need ~ to tell the Music Editor what their names are and what disk they're ~ on. The Music Editor then lumps that information in with all the ~ notes and volumes and tempo settings& and when you use the Save op- ~ tion& the song file you save has EVERYTHING it needs to be able to be ~ loaded and played at some other time. ~ ~ To get started& highlight and click the Edit option--you'll get an ~ inverse arrow cursor that you can put on any oscillator's line. When ~ you do that and click once more& the first of the 15 hyphens to the ~ right of the oscillator is highlighted. All you do now is type in ~ the filename of the waveform you want this oscillator to use...but ~ just the filename itself (yes& with the ".SWF" suffix)& not the full ~ pathname; that comes a little later. When the waveform filename is ~ typed in& press Return& and the inverse arrow cursor returns for ~ specifying another oscillator's "voice". (If you change your mind ~ and want to "undo" a waveform filename entry for a certain oscilla- ~ tor& just highlight the oscillator's position& enter a single hyphen& ~ and press Return. This will erase any filename entered for that ~ oscillator.) ~ ~ When you've entered waveform filenames for all the oscillators you ~ X plan to use for the current song& move the cursor to highlight the ~ Source Prefix option and click. The highlight will indicate where to ~ type in the disk directory for the waveforms you've selected. We ~ designed SONIX to be usable by those with "minimal" IIgs peripheral ~ equipment& so it's presumed that you have only 1 disk drive available ~ to hold waveform files. As a result& you can enter the name of only ~ one directory--so& just make sure that all the waveform files you ~ want for a specific song are on the same disk. ~ ~ The /WAVE.LIB disk that came in the SONIX package has 20 waveform ~ files on it (you can catalog the disk to see them all)& in this gen- ~ eral format% /WAVE.LIB/WAVE/PIANO.SWF. Each of the waveform filenames ~ is an "instrument" name with the ".SWF" suffix. The Source Prefix& ~ then& for waveform files on this disk is "/WAVE.LIB/WAVE/". Note that ~ the Source Prefix includes everything up to the filename itself& IN- ~ CLUDING the last "slash". Should you forget to enter the last ~ "slash"& SONIX will give you a rather pointed reminder! ~ ~ Press Return when you're finished typing in the Source Prefix. ~ ~ As another example& though& suppose that you've got a waveform file ~ named "MY.VOICE.SWF" on a disk named "/SOUNDS"& and in a subdirectory ~ named "VOICES". You'd type in the filename itself& "MY.VOICE.SWF" ~ for a single oscillator& and you'd type in "/SOUNDS/VOICES/" to the ~ right of the Source Prefix notation. ~ ~ X "OK"& you say& "so what's the meaning of the other stuff on the ~ screen?" ~ ~ ~ ~ So What Software C-8 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ The "00 0100" entries to the right of each oscillator will (probably) ~ change as soon as your waveforms are loaded from disk. The first 2 ~ X digits will be the number (in hexadecimal notation) of the location in ~ the 64K-byte Sound RAM that the waveform is occupying in your IIgs& ~ expressed in hexadecimal as multiples of 256 bytes. The last 4 dig- ~ its will be the length of the waveform file; again& in hexadecimal. ~ As an example& the 32&768-byte waveform "PIANO.SWF" selected for ~ Oscillator 01 would be followed by "00 8000"& because it grabs the ~ first half Sound RAM and the 32&768-byte waveform file length is the ~ equivalent to 8000 in hexadecimal. The 4096-byte waveform "SNARE.SWF" ~ selected for Oscillator 03 would be followed by "80 1000" because it ~ would have to begin in the second "half" of the Sound RAM (since ~ PIANO.SWF is using ALL of the first half and 80 in hexadecimal ~ denotes the first 256-byte segment of the second half of the Sound ~ RAM) and the 4096-byte file length is 1000 in hexadecimal. ~ ~ Keep in mind that the IIgs' Sound RAM is only 64K bytes in size& and ~ that 64K has got to hold all the waveforms you plan to use for an ~ individual song. For instance& you'll only be able to use 2 separate ~ 32K waveforms at a time. BUT...that doesn't mean you can only have 2 ~ oscillators sounding 32K waveforms. Once a waveform is loaded into ~ the Sound RAM& it can be accessed by any of the 30 oscillators...even ~ all 30 of them simultaneously. So& if you want to write a 30-piano ~ piece& you can& or you can have 15 pianos and 15 trumpets. Remember ~ that the more DIFFERENT waveforms you want to use& the smaller ~ they'll have to be...so that their total is no more than 64K bytes. ~ ~ X We don't expect you to do all the hexadecimal addition to check on ~ the amount of Sound RAM you're using--that's the job of the Sound RAM ~ Used and Sound RAM Unused blocks at the lower left of the screen. As ~ you call for waveforms& these 2 values will change to show you where ~ you stand. The MOST you'll be able to use is "FFFF" (hexadecimal); ~ the most unused will actually be 10000 (hexadecimal)& but the Sound ~ RAM Unused window won't show the leading "1"...you'll see only the ~ "0000". If you get carried away with waveforms& by the way& you'll ~ get a firm reminder from SONIX's error message generator! ~ ~ When you're all finished defining oscillator waveforms& put the cur- ~ sor anywhere on the screen& click once and press Return& then high- ~ light and click Exit. All the waveform files will be loaded from ~ disk (you'll hear each one sound)& the message "Processing changes... ~ stand by" will appear& and the SET DOC screen will be updated to re- ~ flect the waveform file lengths and your usage of the Sound RAM. If ~ you're satisfied and want to get back to the Music Editor& highlight ~ Exit (again) and click. ~ ~ ~ LOADING A SONG ~ -------------- ~ Highlight and click this option to load a SONIX-configured song file ~ --that is& one with a ".SMF" suffix--from disk. The Music Editor ~ will set about loading all the appropriate waveform files& so be sure ~ you have the disk they're on in an accessible disk drive..forget& and ~ X you'll get an error message! The Music Editor's "default" pathname ~ prefix for loading is /WAVE.LIB/MUSIC/; if you're using some other ~ ~ ~ ~ So What Software C-9 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ pathname& click the Prefix option& change the pathname prefix& and ~ then come back to the Load option. As soon as your song file is load- ~ X ed& you can edit it or play it& as you see fit. ~ ~ ~ SAVING A SONG ~ ------------- ~ Saving a song file is straightforward. The Music Editor's default ~ pathname prefix is /WAVE.LIB/MUSIC/& so if that's the name of the ~ disk you want to save your song file to& just make sure the disk is ~ in an accessible drive& highlight SAVE& type in the filename of your ~ choice--with the ".SMF" suffix& please--and click. To save under a ~ different pathname prefix& highlight and click PREFIX& type in the new ~ prefix& and then go through the steps for saving. ~ ~ ~ PLAYING A SONG ~ -------------- ~ This is where the action is. Highlight PLAY and click....and WOW! ~ Another screen! ~ ~ On the Play screen& you'll see a graphic of a metronome at the upper ~ center& flanked by a bar (or measure) counter on the left and a tempo ~ indicator on the right. Below are 6 options% Play& Resume& Stop& ~ Step& Zip& and Edit. Here's what they're for...... ~ ~ The bar counter lets you know what bar is playing as you hear the ~ X music. Its limits are from 0 to 127& and it correlates with the bars ~ you type music on in the Music Editor. ~ ~ The tempo indicator gives the actual quarter note timing that you ~ selected by typing in a T and a value of 0 - F in the Music Editor. ~ For instance& the notation of a quarter note = 60 means that the ~ tempo at that point in your song is 60 beats per minute (1 quarter ~ note per second). ~ ~ The 6 options below the metronome are selected by typing in the let- ~ ter in parentheses before the option. ~ ~ (P) Play - Press P to start playing the current song from the first ~ bar& Bar 0. Pressing P ALWAYS starts the song from Bar 0. ~ ~ (R) Resume - Press R to start the song from where you stopped it. ~ ~ (S) Stop - Press S to stop the song in its tracks. ~ ~ (X) Step - Press X once to hear whatever is written at the current ~ 64th note "tick"--it may be silence& so if you don't hear any- ~ thing& press again until you do. Press and HOLD X to start the ~ song playing from its current bar. The song plays at slow speed ~ and stops as soon as you release the X key. ~ ~ (Z) Zip - Press Z for super-fast play of the song and type in the ~ X measure you want to Zip to. Zip sets the tempo temporarily to ~ 900 quarter notes per minute& or nearly four 4/4 bars per ~ second. You won't hear anything very musical while the song is ~ ~ ~ So What Software C-10 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ MUSIC EDITOR INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Zip-ing& because of the speed; it'll sound a lot like an audio ~ tape deck in fast forward. Press R to Resume play of the song ~ X when the Zip is finished. ~ ~ (E) Press E to get back to the Music Editor screen. ~ ~ ~ ~ That's about it for the Music Editor. There are a lot of features and ~ screens to become familiar with& but that's because the Apple IIgs's ~ built-in music handling capabilities are so great. We've found that ~ it really pays to start simple and work one's way up the complexity ~ scale. As time goes by and the various features become more familiar& ~ it's almost routine to enter complex musical scores in multiple ~ voices. Add to that the ability to extract and sample your own custom ~ sounds...and play songs from your own Basic programs...and tie sound ~ events to key presses and mouse clicks... There's just no other sound ~ software like SONIX available for the IIgs& anywhere. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software C-11 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ INTRODUCTION ~ ------------ ~ X The Note Engine is a program that plays back song files that have ~ been created by SONIX's Music Editor; it uses Waveform Files for the ~ characteristic instrument or "voice" sounds. The Nosuvwxyz{|}~te Engine can ~ handle 30 separate& simultaneous oscillators over an 8-octave (96- ~ note) range& with 1/64th-note resolution. Music files can be up to ~ 128 measures in length& providing for a gigantic musical score& well ~ in excess of normal requirements. ~ ~ Tempo& Master Volume& and Oscillator Volume can be changed at any ~ point in a music file& plus starting& stopping& or resuming the se- ~ quencing of the music file--from within an Applesoft Basic program. ~ ~ ~ INTERRUPT DRIVEN ~ ---------------- ~ Every sequencer has a "heartbeat"& an evenly-timed& constant& incor- ~ ruptible train of pulses that can be detected by software. Many ~ potential heartbeats are available in the IIgs& but only one of them ~ is fast enough to support the Note Engine's 1/64th-note resolution% ~ interrupts from the video output circuitry in the IIgs. ~ ~ Each horizontal line on the Super Hi-Res screen has a scanline con- ~ trol byte (SCB) associated with it. This byte has several functions& ~ one of which is to provide an interrupt flag that creates an inter- ~ rupt at the rate that the video display is scanned (30 time per sec- ~ X ond). That's more than fast enough for the Note Engine. However& ~ using the SCB interrupts means that the Super Hi-Res screen must be ~ enabled for the Note Engine to operate& and interrupt flags must be ~ set at specific horizontal lines. The Note Engine's CONVERT Call ~ install these flags automatically. (It's described in detail in the ~ section on the CONVERT Call.) ~ ~ ~ INSTALLATION ~ ------------ ~ The Note Engine is installed by BRUN-ing it at startup time. The ~ program needs our LONGLOADER and SONIX.GS binary files already instal- ~ led to handle disk access. Follow this startup sequence% ~ ~ ~ 10 PRINT CHR$(4);"BRUN LONGLOADER" % PRINT CHR$(4);"BRUN SONIX.GS"% ~ PRINT CHR$(4);"BRUN NOTE.ENGINE" ~ ~ Should you wish to use the ICONIX.GS graphics interface file from So ~ What Software's "ICONIX for the Apple IIgs" program along with the ~ full SONIX Basic interface& BRUN the ICONIX.GS file first& then BRUN ~ the SONIX files in the order shown above. We highly recommend that ~ you have all these routines installed at the same time to let your ~ Basic programs both handle Super Hi-Res graphics and give you direct ~ control of the Ensoniq synthesizer chip. ~ ~ X ~ PLEASE NOTE% Memory allocation priorities dictate this sequence; ~ deviations WILL cause a crash! (Try it if you doubt us!) ~ ~ ~ So What Software D-1 1-MAY-88 ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ NOTE ENGINE CALLS ~ ----------------- ~ X There are 6 Call commands that the Note Engine adds to your Basic ~ programming repertoire. 5 of them let you load song files from disk ~ and save them from memory to disk& start and stop a song file in ~ memory& resume a stopped song's play& and "single-step" through a ~ song one 64th note at a time. The last Call modifies your graphic ~ screen files so they and your song programs work together. ~ ~ Let's take a short time out to clarify 2 points. First& when we ~ refer to a "song" file& that doesn't mean strictly that the only ~ thing you're able to make your IIgs sound is music. Actually& liter- ~ ally ANY sound that you can extract or capture via SONIX's Waveform ~ Editor can be used by SONIX's Music Editor to create a sound file ~ that you can execute from a Basic program. So& not only can your ~ programs yield music& they can also yield the spoken word& or dog ~ barks& or thunder& or anything...and any combination! ~ ~ We use the term "song" file because the Music Editor is designed from ~ a musician's point of view--So What Software's staff just happens to ~ comprise engineers who are also musicians. We tend to think of pro- ~ grams that produce sound as music programs& to differentiate them ~ from graphics programs. ~ ~ That brings up the second point. The Calls about to be explained are ~ valid ONLY for programs using song files that were created with ~ SONIX's Music Editor. The Music Editor assembles a lot of data when ~ X you save a song file& and the data are arranged in a particular for- ~ mat so the Note Engine Calls know exactly where to find what they ~ need. OK& let's get into those Calls..... ~ ~ LOAD ~ ---- ~ This Call loads a music file and all the waveform files associated ~ with it. All the digital oscillator control (DOC) parameters and ~ Sound RAM patterns are initialized and put in place& according to the ~ song file data. The "SG$" string descriptor is used to pass the song ~ file pathname to the Note Engine. ~ ~ For example& the following line of code in a Basic program would load ~ a song file called "My.Song.SWF" from a disk named "/WAVE.LIB/" ~ ~ 10 SG$ = "/WAVE.LIB/MY.SONG.SWF&" % CALL 38144 ~ ~ {Note the "trailing comma" after the pathname--it's VERY important!} ~ ~ Experienced programmers save some keystrokes in a program by "declar- ~ ing" a 1- or 2-letter variable to be the same as a numeric address. ~ We do this for Note Engine Calls& setting aside six 2-letter variables ~ for just that purpose. We use "NL" for the LOAD Call. ~ ~ You need to "declare" the variable before you CALL it (of course)& so ~ your code might look like this% ~ X ~ 5 NL = 38144 ~ ~ 10 SG$ = "/WAVE.LIB/MY.SONG.SWF&" % CALL NL ~ ~ So What Software D-2 1-MAY-88 ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ You might find it very convenient to "declare" all 6 of the Note ~ Engine Calls at the beginning of your program& like this% ~ X ~ 10 NL = 38144 % NV = NL + 4 % NS = NC + 8% NP = NS + 4 % ~ NR = NP + 4 % NX = NR + 4 ~ ~ If you do this& be sure that the "declaration" line comes BEFORE the ~ first time you make one of the Note Engine Calls. For the purpose of ~ explaining the next 5 Calls& we're going to presume that the 6 vari- ~ ables have been "declared" in a Basic program. There is a summary of ~ the 6 Calls& their decimal and hexadecimal addresses& and the 2- ~ letter variables we use for them at the end of this section. ~ ~ ~ ~ START ~ ----- ~ This Call begins play of a previously loaded song file from the begin- ~ ning; the song will halt when either a STOP Call is made or the end ~ of the song file is reached. As soon as the Call is made& control of ~ the computer is returned to you so your program can continue while the ~ song file plays. ~ ~ 10 CALL NS ~ ~ ~ STOP ~ X ---- ~ This Call halts the playing of a song file by the Note Engine. ~ ~ 10 CALL NP ~ ~ ~ RESUME ~ ------ ~ This Call continues the playing of a song file from where it was stop- ~ ped (by the STOP Call). ~ ~ 10 CALL NR ~ ~ ~ STEP ~ ---- ~ This Call will "one step" a song file& advancing a 1/64th note dura- ~ tion for each STEP Call that is made. ~ ~ 10 CALL NX ~ ~ ~ CONVERT ~ ------- ~ This Call installs an interrupt pattern for the Note Engine onto a ~ Super Hi-Res screen image. The screen image can be in any memory ~ X bank& but its starting address must be 8192 (hex $2000). This aligns ~ it with the Super Hi-Res screen buffers. ~ ~ ~ So What Software D-3 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ To Convert a screen image& have the image in memory aligned at 8192 ~ ($2000)& POKE its bank number (38989 decimal; $984D hex)& and CALL the ~ X Convert routine. ~ ~ 10 POKE BK& X % CALL NC ~ ~ where X= number of memory bank holding the Super Hi-Res image to ~ be converted. ~ ~ NOTE% All screen images should be Converted AFTER they are loaded in ~ from disk& so that when they are displayed& the interrupt pat- ~ tern for the Note Engine is already present. ~ __________________________________________________ ~ ~ ~ In case you're wondering how to get a Super Hi-Res image loaded into ~ memory in the right bank and at the right location.... ~ ~ So What Software has 2 (other) state-of-the-art programs for the ~ Apple IIgs that work perfectly with SONIX& and both of them can be ~ used for loading Super Hi-Res images. ICONIX for the Apple IIgs is ~ our graphics program that gives you full control of the Super Hi-Res ~ screen from Basic& as well as giving you the ability to add graphics ~ features to your images that NO other software allows. When you use ~ ICONIX's BLoader& images are automatically put into memory at the ~ right location...and that's why we designed SONIX to look for them ~ there. ~ X ~ DISC COMMANDER for the Apple IIgs is our exclusive disk utility pro- ~ gram that lets you load any file from any ProDOS disk into any place ~ in your IIgs' memory& move any piece of data anywhere in memory& and ~ save any piece of data to disk as any filetype...and all from Basic ~ or from the keyboard. DISC COMMANDER's Load command can put your ~ graphic images exactly where SONIX wants them& too. ~ ~ Both ICONIX and DISC COMMANDER are available from the same place you ~ got SONIX& as well as directly from So What Software. ~ __________________________________________________ ~ ~ ~ This is a good point to remind you that the superb note resolution ~ and volume/tempo variability the Note Engine gives needs the Super ~ Hi-Res screen to be enabled. What this means is that when you want ~ your Basic program to use the Note Engine to play a song& you can't ~ do it with the screen in either text mode or in Hi-Res graphics mode. ~ Sorry about that& but all software developers have to live within the ~ limits of the hardware...that is& the IIgs. Other IIgs music soft- ~ ware we've seen has only 1/32nd note resolution& or doesn't let you ~ change tempo during a song& or doesn't let you change volume during a ~ song& or....in fact& they have ALL these limitations. And to top it ~ off& NONE of them lets you play songs from your own Basic programs! ~ ~ ~ X ~ ~ ~ ~ So What Software D-4 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ In the Note Engine Programming section& you'll learn about an example ~ program on the SONIX disk that shows you how to enable the Super ~ X Hi-Res screen from your Basic program& and how to do a little bit of ~ Super Hi-Res "graphic-ing" ("graphic-ery"& maybe?). To get COMPLETE ~ control of the Super Hi-Res screen& you'll want to have ICONIX for ~ the Apple IIgs& the graphics program we mentioned just a few para- ~ graphs back. SONIX and ICONIX work perfectly together. ~ ~ ~ ~ NOTE ENGINE CALL SUMMARY ~ ~ CALL FUNCTION VARIABLE DECIMAL ADDRESS HEX ADDRESS ~ -------------------------------------------------------------------- ~ ~ LOAD NL 38144 $9500 ~ CONVERT NC 38152 $9508 ~ START NS 38156 $950C ~ STOP NP 38160 $9510 ~ RESUME NR 38164 $9514 ~ STEP NX 38168 $9518 ~ ~ ~ ~ NOTE ENGINE PROGRAMMING ~ ----------------------- ~ The old adage is that a picture is worth a thousand words& so one ~ X might make the analogy that a Basic program is worth about the same ~ number. There is a program called NOTENGINE.EX on the SONIX system ~ disk& which we invite you to run and examine. You can get it going ~ by clicking the Exit to Basic option on SONIX's Main Menu screen& ~ typing RUN NOTENGINE.EX& and pressing Return. You'll get a text ~ screen asking you for a few choices& then you'll press Return to play ~ a song. ~ ~ NOTENGINE.EX will show what we mean by needing to enable the Super ~ Hi-Res screen& and when the song has finished& you should look at the ~ program's Basic code to see how the Note Engine's many features are ~ used. You can LIST the program by pressing Control and Reset (simul- ~ taneously) and then releasing them& typing LIST& and pressing Return. ~ NOTENGINE.EX might be a good starting point for you in writing your ~ own song-playing Basic programs& but please take care not to erase or ~ overwrite it. ~ ~ => YOU DO HAVE BACKUP COPIES OF BOTH YOUR SONIX DISKS& DON'T YOU? ~ IF NOT& PLEASE MAKE THEM NOW !! ~ ~ ~ NOTE ENGINE PEEKS AND POKES ~ --------------------------- ~ When the Note Engine is in memory and running& there are 2 memory ~ addresses that will contain information you may want to help your ~ Basic program do more things. These data "flag" whether a song is ~ X playing and where in the song the Note Engine is currently playing. ~ Two other addresses let you set tempo and volume "externally". ~ ~ ~ So What Software D-5 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ STATUS PEEK ~ ----------- ~ X The Status address is 38399 ($95FF hex); when it holds a 0& the Note ~ Engine is NOT playing. When you issue the Note Engine's START Call& ~ the song begins playing until either it has finished or you issue the ~ STOP Call. Meanwhile& your program is free to go on to its next line ~ of code. Your program can PEEK the Status address to see if the song ~ is still being played& so that it doesn't execute any program steps ~ you don't want to happen until the song is over. ~ ~ Example% ~ ~ 10 SG$ = "/WAVE/MY.SONG.SWF&" % CALL NL % CALL NS ~ ~ 20 IF PEEK (38399) < > 0 THEN 20 ~ ~ 30 {Another code line to be executed AFTER the song is finished} ~ ~ ~ SONG COUNT PEEK ~ --------------- ~ The 2 bytes of the Song Count address are at 9722 and 9723 ($25FA & ~ $25FB). These 2 bytes tell you how many 64th note "ticks" have occur- ~ red since a song was START-ed. (The way you combine the 2 bytes to ~ yield the decimal number is simple% multiply the value at 9723 by 256 ~ and add it to the value at 9722.) Song Count is very useful for ~ stopping a song exactly at a chosen point& and you can do it by 64th ~ X notes& quarter notes& bars& or almost any way you care to count. ~ ~ The following code would STOP a song at the end of the 15th bar% ~ ~ 10 BAR = (PEEK (9722) + 256 * PEEK (9733)) / 64 {64 notes per bar} ~ ~ 20 IF BAR < 15 THEN 10 ~ ~ 30 CALL NP ~ ~ ~ MASTER VOLUME POKE ~ ------------------ ~ You can change a song's Master Volume at any point while it's play- ~ ing by simply POKE-ing in a value from 0 to 15 (0 is OFF) at Address ~ 38391 ($95F7). When a song is started by the START Call& the Master ~ Volume is set to 8 at this address--and& of course& any Master Volume ~ setting you entered at the beginning of the song immediately POKEs in ~ a different value. ~ ~ Suppose we hadn't set an initial Master Volume setting in a song& but ~ wanted to begin a crescendo at the 16th bar. We can use the measure ~ counting technique as we did in the previous example& but instead of ~ stopping the song at the end of Bar 15& set the Master Volume to 11% ~ ~ X 10 BAR = (PEEK (9722) + 256 * PEEK (9733)) / 64 ~ ~ 20 IF BAR < 15 THEN 10 ~ ~ 30 POKE 38391& 11 ~ ~ So What Software D-6 1-MAY-88 ~ ~ ~ ~ ===================================================================== ~ NOTE ENGINE SONIX for the Apple IIgs ~ ===================================================================== ~ ~ TEMPO INDEX POKE ~ ---------------- ~ X The Note Engine controls tempo in essentially the same way that it ~ does Master Volume& and it uses the very next byte& 38392 ($95F8)& to ~ hold a Tempo Index value. The Note Engine "calculates" the tempo by ~ dividing the value 900 by the Tempo Index& and then setting the tempo ~ "quarter note = " to this value. ~ ~ Here's an example% POKE-ing in a Tempo Index of 6& say& means that ~ the song's tempo will be 900 / 6 = 150 quarter notes per minute. The ~ Note Engine's "default" Tempo Index for a song that is START-ed is 8& ~ so to speed up the song we've been using in our examples at its 15th ~ bar& you could use code like this% ~ ~ 10 BAR = (PEEK (9722) + 256 * PEEK (9733)) / 64 ~ ~ 20 IF BAR < 15 THEN 10 ~ ~ 30 POKE 38392& 6 ~ ~ Notice that the while the Tempo Index can be a number from 1 to 255& ~ since it is divided into another number to "calculate" the tempo& the ~ HIGHER the Tempo Index number& the LOWER the tempo itself. Below is ~ a table of some Tempo Index values and their tempo equivalents. ~ ~ ~ Tempo Index Quarter Notes per Minute ~ X ----------------------------------------- ~ 1 900 ~ 2 450 ~ 3 300 ~ 4 225 ~ 5 180 ~ 6 150 ~ 7 128.6 ~ 8 112.5 ~ 9 100 ~ 10 90 ~ 11 81.8 ~ 12 75 ~ 13 69.2 ~ 14 64.3 ~ 15 60 ~ 16 56.3 ~ 17 52.9 ~ 18 50 ~ 19 47.4 ~ 20 45 ~ 21 42.6 ~ 22 40.1 ~ ~ ~ ~ X ~ ~ ~ ~ So What Software D-7 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ INTRODUCTION ~ ------------ ~ The Basic Interface part of SONIX gives you complete control of what ~ X sounds your IIgs' Ensoniq synthesizer chip makes--and why. There are ~ 5 Call commands that you use in your Basic programs to load waveform ~ files (thus selecting the "voices" your program can use)& select ~ which of the IIgs' 30 oscillators is to sound& select pitch and vol- ~ ume of sounds& and so on. To use the Call commands& you POKE values ~ into specific memory addresses and then issue a CALL command in your ~ program--SONIX takes care of all the details. ~ ~ We've designed SONIX's Basic Interface with 2 frames of reference. ~ On one hand& there are simple programming techniques that you can use ~ to keep your code short and uncomplicated. Of course& the price to ~ be paid for keeping your code simple is that you have to give up a ~ little of the control you have over some of the real nuances of pro- ~ ducing sound from a IIgs. In almost every case& though& the only real ~ difference would be noted in a VERY complex Basic program...one that ~ would probably be tackled by a quite experienced code writer. On the ~ other hand& for those who want to be able to control virtually every ~ bit and byte in their machines& SONIX's Basic Interface can give as ~ much flexibility for locating files and data in memory as is needed ~ for absolute control. ~ ~ ~ BASIC INTERFACE CALLS ~ --------------------- ~ X The easiest way to explain how to use the Basic Interface in your ~ programs is to describe the 5 Calls& which fall into 2 categories% ~ (1) how you get waveform file data into the IIgs' Sound RAM (the ~ special 64K memory bank that Apple designed to handle waveforms)& and ~ (2) how you control the sounds the waveforms make. Let's go over the ~ "loading waveforms into the Sound RAM" part first. ~ ~ ~ LOADING FROM DISK [ CALL DI Hex = $960C Decimal = 38412 ] ~ --------------------------------------------------------------- ~ A waveform file resides primarily on disk; SONIX's Waveform Editor ~ saves waveform files to disk with the suffix ".SWF"& for instance. ~ To get the waveform file from disk into the Sound RAM& you define ~ some pieces of information in a single "string descriptor" and CALL ~ the loading routine. ~ ~ The "string descriptor" specifies 6 things% ~ ~ * That something is to be loaded... ~ ~ * What the waveform file's pathname (on disk) is... ~ ~ * Where in the Sound Buffer it's to be loaded... ~ ~ * Where the waveform's semitone table is to be located... ~ ~ X * Where in the Sound RAM the waveform is to be located...and... ~ ~ * Which oscillator is to use the waveform. ~ ~ ~ So What Software E-1 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Sound complicated? It really isn't. Remember& the IIgs' Sound RAM ~ memory is only 64K bytes in size. Now& that memory only has to hold ~ X the waveform data (so the oscillators can use it to produce sound)... ~ and the Sound RAM has to be loaded carefully& because it's got to ~ hold ALL the waveform data you want to use while a program is run- ~ ning. BUT...there's a complication% the Sound RAM isn't accessible ~ in the same way that "regular" RAM (that is& one of the 64K byte ~ banks of memory on your IIgs' memory card) is& so you can't just load ~ a waveform file from disk directly into the Sound RAM. ~ ~ The way we've set SONIX up to work is to let you select a bank of ~ "regular" RAM as a "holding area"--that is& a Sound Buffer--for get- ~ ting waveform data organized. (We usually use Bank 4.) Then& when ~ your program makes the DISK Call& the waveform data are moved quickly ~ into the Sound RAM. ~ ___________________________________________________ ~ ~ By the way....We use 2-letter variables for SONIX Calls; "DI" is ~ typical. If you need a refresher on how and when you "declare" varia- ~ bles this way& please refer to p. D-2 of the Note Engine instruc- ~ tions. The true hex and decimal addresses for each of the Calls are ~ shown in square brackets at the beginning of each Call's description. ~ __________________________________________________ ~ ~ This example of code would load a waveform named VOICE& in a subdirec- ~ tory called SOUNDS on a disk named /WAVES/& into the Sound RAM and ~ ready Oscillator 2% ~ X ~ 10 SG$ = "LS&/WAVES/SOUNDS/VOICE&A$042000&S$042000&R$0000&O$02&" ~ ~ 20 CALL DI ~ ~ What this code does is to identify the waveform's on-disk location by ~ specifying its COMPLETE pathname& load the waveform into Bank 4 at ~ address $2000& then identify the waveform's semitone table as being ~ at the same address (that'll be explained in a moment). The address ~ in the Sound RAM to put the waveform file is specified as the begin- ~ ning of the Sound RAM's 64K space& and the parameters for using Oscil- ~ lator 2 are identified (these are explained in an upcoming section). ~ The CALL DI command makes it happen. ~ ~ Semitone tables are short& since they only have to specify informa- ~ tion about 96 notes& and they are ALWAYS at the beginning of a com- ~ plete waveform file. The waveform data are much more extensive& ~ often 32K bytes long. The DISK Call takes care of copying the wave- ~ form into the Sound RAM& and it leaves the ENTIRE waveform file where ~ it was loaded into the Sound Buffer. So& the semitone table for the ~ waveform just moved into the Sound RAM is still at the "regular" ~ memory address where the waveform file was loaded. This is important ~ information needed by the Calls that control oscillator parameters. ~ ~ If you plan to load several different waveforms from disk& you need ~ to be careful that loading a second one doesn't overwrite the begin- ~ X ning of the previous one in the Sound Buffer. You can avoid THAT ~ problem by defining a new Sound Buffer as a place in memory that's far ~ enough away from the previous Sound Buffer to keep the semitone ~ tables from being interfered with. ~ ~ So What Software E-2 1-MAY-88 ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Now& if you do load another waveform& the other thing you've got to ~ watch for is the length of the waveform(s) you've already loaded into ~ X the Sound RAM& so that you don't load one over another that's already ~ in place. In the example above& we used the very beginning of the ~ Sound RAM (address $0000) because this was the first waveform to be ~ loaded. If the VOICE waveform were& say& 2048 bytes long& then the ~ next waveform to be loaded would need to have a Sound RAM address ~ specified at least as high as $0800. (Because VOICES took up the ~ first 2048 bytes of Sound RAM space& from $0000 to $07FF.) ~ ~ Here's a formal layout of the string descriptor for the DISK Call% ~ ~ +--- Load sound command ~ | +-- ProDOS pathname ~ | | +---- Load addr. ~ | | | +-- Semitone table addr. ~ | | | | +--- Sound RAM addr. ~ | | | | | +-- Oscillator ~ | | | | | | number ~ ~ SG$ = "LS&/FULL/PATHNAME&A$012345&S$6789AB&R$CDEF&O$00&" ~ ~ ~ ~ LOADING FROM MEMORY [ CALL RA Hex = $9600 Decimal = 38400 ] ~ ----------------------------------------------------------------- ~ Once a waveform file with its semitone table is in "regular" memory ~ X somewhere& you can use the Basic Interface's other Sound RAM-loading ~ Call to copy the waveform into the Sound RAM. As you've gathered ~ from the discussion of the DISK Call& there are some pieces of data ~ that will need to be specified before a waveform goes into the Sound ~ RAM% the Sound RAM address& the memory addresses of the waveform and ~ its semitone table& and the oscillator number. That's done by POKE- ~ ing values into certain memory locations& which the Basic Interface ~ identifies as these 4 variables% ~ ~ SR $961E 38430 Sound RAM address (low& high) ~ ~ WF $9620 38432 SONIX waveform file address (low& high& bank) ~ ~ SM $9623 38435 Semitone table address (low& high& bank) ~ ~ OS $962D 38445 Oscillator number (0 to 29) ~ ~ Here's an example% ~ ~ 10 POKE SR&0 % POKE SR+1&96 % POKE WF&0 % POKE WF+1&32 % POKE ~ WF+2&4 % POKE SM&0 % POKE SM+1&32 % POKE SM+2&4 % POKE OS&0 ~ ~ 20 CALL RA ~ ~ ~ Notice that 3 of the 4 variables call for multiple POKEs. POKE-ing a ~ X bank number for an oscillator is no big deal; just use the decimal ~ value. ~ ~ ~ So What Software E-3 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ The "low / high" terminology& though& refers to fact that POKE values ~ in Applesoft Basic can't be any bigger that 255 (decimal). BUT...in ~ this Call (and several others in the Basic Interface)& you need to be ~ X able to POKE a value as high as 65535& since that's the upper limit ~ of a memory bank's address space. So& the SONIX Basic Interface POKEs ~ that are for BIG numbers are done in 2 pieces. ~ ~ The second piece& the high byte& is the number of WHOLE multiples of ~ 256 the desired POKE value has...and the first piece& the low byte& ~ is simply the remainder. ~ ~ Example% To POKE in a value of 25000 for a waveform file address& ~ divide 25000 by 256 (97.6) and round it down to the number of WHOLE ~ multiples of 256 in 25000& 97. Now& convert those 97 multiples of 256 ~ to a real decimal number (97 x 256 = 24832) and subtract that value ~ from 25000 (25000 - 24832 = 168); 168 is the low byte. The POKEs them ~ selves are& then % POKE WF&168% POKE WF+1&97 ~ ~ NOTE% For some rather detailed reasons that needn't be discussed now& ~ the LOW byte of a Sound RAM address POKE is always 0. ~ ~ ~ Here's an example of code that takes waveform file data from memory ~ address 8192 in Bank 4 and puts it into the Sound RAM at address ~ 24576 for Oscillator 7 to use% ~ ~ 10 POKE SR&0 % POKE SR+1&96 {Pokes the value 0 + 96 x 256 = 24576} ~ X ~ 20 POKE WF&0 % POKE WF+1&32 % POKE WF+2&4 {Pokes 32 x 256 = 8192} ~ ~ 30 POKE SM&0 % POKE SM+1&32 % POKE SM+2&4 {Pokes 8192} ~ ~ 40 POKE OS&7 % CALL RA ~ ~ ~ CONTROLLING OSCILLATOR PARAMETERS ~ --------------------------------- ~ There are 7 parameters that specify and control the performance of ~ the IIgs' 30 oscillators% oscillator number& pitch& volume& resolu- ~ tion& mode& waveform length& and Sound RAM address. SONIX's Basic ~ Interface gives you 3 different Calls for setting oscillator parame- ~ ters& with increasing levels of detail. The easiest to use is the ~ AUTO Call& then the SEMI Call& and the ROOT Call gives most control. ~ ~ AUTO CALL [ CALL AO Hex = $9609 Decimal = 38409 ] ~ ------------------------------------------------------ ~ This routine controls the parameters for a specified oscillator. The ~ only data needed are the oscillator number and pitch. The AUTO Call ~ retrieves all parameter and semitone information automatically from ~ the locations that were identified by either the DISK Call or the RAM ~ Call when the waveform data were copied into the Sound RAM. ~ ~ PT $9632 38444 Pitch (0 to 95) ~ X ~ OS $9633 38445 Oscillator number (0 to 29) ~ ~ ~ So What Software E-4 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Example% ~ 10 POKE PT&36 % POKE OS&1A % CALL AO ~ X ~ This causes Oscillator 10 to sound the 4th octave's C-natural in the ~ waveform previously set for it (if the waveform was tuned accurately ~ ...see Section B for a discussion of this). ~ ~ ~ SEMI CALL [ CALL SE Hex = $9603 Decimal = 38403 ] ~ --------------------------------------------------------- ~ This routine controls the parameters for a specified oscillator and ~ lets you specify volume& pitch& resolution& and mode. The Sound RAM ~ address and semitone table address must be the same as set by a prev- ~ ious RAM or DISK Call. ~ ~ VO $9629 38441 Volume (0 to 255) ~ ~ PT $962C 38444 Pitch (0 to 95) ~ ~ RE $962B 38443 Resolution (0 to 7) ~ ~ MO $962A 38442 Mode (Free Run% 0&1 ; One Shot% 2&3) ~ ~ ~ Example% ~ ~ 10 POKE VO&40 % POKE PT&24 % POKE RE&7 % POKE MO&2 % CALL SE ~ X ~ ~ ROOT CALL [ CALL RO Hex = $9606 Decimal = 38406 ] ~ --------------------------------------------------------- ~ This routine controls the parameters for a specified oscillator& ~ letting you specify all of the parameters for each Call. The pitch ~ becomes a two byte number (0 to 65535). A ROOT Call uses its own ~ buffer for data values& not the buffer used by the SEMI and AUTO ~ Calls. ~ ~ S0 $9772 38770 Pitch (low byte) ~ S1 $9779 38777 Pitch (high byte) ~ S2 $9780 38784 Volume (0 to 255) ~ S3 $9787 38791 Sound RAM address (high byte only) ~ S4 $97BC 38844 Waveform length (coded number; see note) ~ S5 $978E 38798 Resolution (0 to 7) ~ S6 $9798 38808 Mode (Free Run% 0&1 ; One Shot% 2&3) ~ S7 $979A 38810 Oscillator number (0 to 29) ~ ~ NOTE% Waveform length is handled in a "lookup table" format; ~ details are in the Waveform Length Address section. ~ ~ Example% ~ ~ 10 POKE S0&0 % POKE S1&30 % POKE S2&128 % POKE S3&0 % POKE S4&7% ~ POKE S5&7 % POKE S6&2 % POKE S7&0 % CALL RO ~ X ~ ~ ~ ~ So What Software E-5 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ ADDRESS NOMENCLATURE ~ -------------------- ~ X There are 10 memory addresses that are important to effective use of ~ the SONIX Basic Interface's Calls. Some have been described in some ~ detail in the foregoing Call explanations& while others have only ~ been mentioned briefly. A more complete description of each follows. ~ ~ ~ SOUND RAM ADDRESS [ Hex Address = $961E Decimal Address = 38430 ] ~ -------------------------------------------------------------------- ~ This data location is the starting address in the special Sound RAM ~ where your waveform pattern exists. The address must be page aligned ~ (that is& the low order byte must always be zero). This address is ~ automatically inserted when an AUTO Call is made& but it must be sup- ~ plied by the user for SEMI and RAM Calls. The DISK Call creates this ~ address with the string descriptor segment "S$XXXX". ~ ~ ~ SOURCE ADDRESS [ Hex Address = $9620 Decimal Address = 38432 ] ~ ----------------------------------------------------------------- ~ This data location is the loading address for a SONIX waveform file. ~ This is a 3-byte address in this form% BANK& HIGH BYTE& LOW BYTE. ~ The DISK and RAM Calls need this information as part of the data ~ necessary to set up the DOC and Sound RAM. The RAM Call will need ~ the bytes POKE-ed in separately& while the DISK Call gets the address ~ from the string descriptor segment "A$XXXXXX". ~ ~ X ~ SEMITONE TABLE ADDRESS [Hex Address = $9623 Decimal Address = 38435 ] ~ ---------------------------------------------------------------------- ~ This data location is the address where the semitone table and oscil- ~ lator parameters for a specific waveform exist. This address is in ~ 3-byte format (BANK& HIGH BYTE& LOW BYTE)& and it is usually the same ~ as the Source Address. The Semitone Table Address needs to be sup- ~ plied to a RAM Call by the user& while a DISK Call gets the informa- ~ tion from the string descriptor segment "S$XXXXXX". ~ ~ ~ WAVEFORM LENGTH [ Hex Address = $9626 Decimal Address = 38438 ] ~ --------------------------------------------------------------------- ~ This data location holds the length of the waveform last installed. ~ The value is returned from RAM and DISK Calls and is intended for ~ user reference only. This address is in 2-byte format% LOW BYTE& ~ HIGH BYTE. ~ ~ ~ LENGTH NUMBER [ Hex Address = $9629 Decimal Address = 38440 ] ~ ------------------------------------------------------------------ ~ This data location holds the coded length of the waveform last instal- ~ led. The value must be supplied for SEMI Calls. The value is record- ~ ed in the waveform file and written to this location from any RAM& ~ DISK& or AUTO Call. ~ ~ X {Table follows& next page.} ~ ~ ~ ~ So What Software E-6 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Actual Waveform Length Coded Length Number ~ -------------------------------------------------- ~ X 256 0 ~ 512 8 ~ 1024 16 ~ 2048 24 ~ 4096 32 ~ 8192 40 ~ 16384 48 ~ 32768 56 ~ ~ ~ VOLUME [ Hex Address = $9629 Decimal Address = 38441 ] ~ ----------------------------------------------------------------- ~ This data byte is the volume for the oscillator currently being used. ~ The value is added to the Master System Volume byte at $E1/00CA (the ~ same byte set by the Volume function in the Control Panel) to create ~ the actual volume for that oscillator. The volume byte can be any ~ value between 0 and 255 (where 255 is the highest volume value). This ~ value is installed as the Control Panel volume setting at default by ~ AUTO& RAM& and DISK Calls. ~ ~ ~ OSCILLATOR MODE [ Hex Address = $9630 Decimal Address = 38442 ] ~ ------------------------------------------------------------------- ~ This data byte describes the operating mode for the oscillator cur- ~ rently being used. There are 4 modes of operation% One Shot& Free ~ X Run& Sync& and Swap. ~ ~ One Shot% Plays the waveform from the beginning to the end and the ~ shutoff. ~ ~ Free Run% Plays the waveform over and over until you shut it off. ~ ~ Sync% Playing an even-numbered oscillator will start up its odd ~ pair oscillator and play simultaneously. ~ ~ Swap% Playing an even-numbered oscillator will start up its odd ~ pair oscillator after the even-numbered one reaches the end ~ of its waveform. ~ ~ Free Run ON % 0 One Shot ON% 2 Sync ON % 4 Swap ON % 6 ~ Free Run OFF% 1 One Shot OFF% 3 Sync OFF% 5 Swap OFF% 7 ~ ~ ~ RESOLUTION [ Hex address = $9631 Decimal address = 38443 ] ~ ----------------------------------------------------------------- ~ This data byte sets the resolution at which the waveform is played ~ back from memory. A resolution of 7 will play back every byte in the ~ waveform& 6 will play back every other one& 5 plays back every 4th ~ one & and so on. The value is supplied by SEMI and AUTO Calls& but ~ can only be altered through the ROOT Call. ~ ~ X 0 = Every 128th byte 4 = Every 8th byte ~ 1 = Every 64th byte 5 = Every 4th byte ~ 2 = Every 32nd byte 6 = Every 2nd byte ~ 3 = Every 16th byte 7 = Every byte ~ ~ So What Software E-7 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ BASIC INTERFACE SONIX for the Apple IIgs ~ ====================================================================== ~ ~ PITCH NUMBER [ Hex Address = $9632 Decimal Address = 38444 ] ~ ------------------------------------------------------------------- ~ X This data byte sets the pitch at which the waveform is played. The ~ pitch is a value from 0 to 95& corresponding to the notes of an 8- ~ octave chromatic scale from C0 to B7. ~ ~ This value is supplied by SEMI and AUTO calls and is derived from ~ a semitone table associated with the selected waveform. ~ ~ ~ OSCILLATOR NUMBER [ Hex Address = $9633 Decimal Address = 38445 ] ~ --------------------------------------------------------------------- ~ This data byte selects the oscillator to be supported by the current ~ data bytes. The value must be supplied for both AUTO and SEMI calls. ~ ~ To point your data at Oscillator "n"& set this byte to "n". 30 oscil- ~ lators (numbers 0 through 29) are available for your use at any time. ~ ~ ~ PROGRAMMING ~ ----------- ~ These preceding discussions may leave you feeling as though you've ~ taken a drink from a fire hose. To help you bring everything into ~ focus& we'll now give a quick word summary of the basic (no pun inten- ~ ded) points of using SONIX's Basic Interface& and then invite you to ~ run and examine a sample program. ~ ~ X The Apple IIgs' sound section has 30 separate digital oscillators ~ that can produce music or other sounds when given certain data and ~ commands. The sound section uses a special 64K-byte memory bank& ~ the Sound RAM& to hold waveform data& while other important data must ~ be put into the "regular" IIgs memory. SONIX's Basic Interface tools ~ let you load the Sound RAM with waveform data& place all the other ~ important data where you want it in "regular" memory& and then issue ~ all the appropriate commands to cause oscillators to sound when and ~ how you wish them to. ~ ~ You've already gotten a taste of the way a simple Basic program can ~ exercise the IIgs's sound talents...when you booted up the SONIX sys- ~ tem disk. There is a special example program on that same disk& ~ which we've written to illustrate the use of the Basic Interface. To ~ run it& get into Basic by clicking the Exit to Basic entry on SONIX's ~ Main Menu screen& type in RUN BASIC.EX& and press Return. What the ~ BASIC.EX program will do is show how a Basic program can load differ- ~ ent waveforms and cause them to sound at different pitches and vol- ~ umes& as a function of what keys you press. After you've played ~ around with the program& press Control and Reset (simultaneously) and ~ release them& then type LIST and press Return to see the actual Basic ~ program itself. You're welcome to use BASIC.EX as a starting point ~ for your own programs.....but take care not to erase or overwrite ~ your only copy of BASIC.EX ! ~ ~ ====> IF YOU HAVEN'T MADE BACKUP COPIES OF BOTH YOUR SONIX DISKS YET& ~ X PLEASE DO IT NOW !!! ~ ~ ~ ~ So What Software E-8 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ====================================================================== ~ LONGLOADER INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Longloader is a powerful utility that lets you load literally any file ~ from disk to any memory bank in your IIgs& move any piece of data from ~ X any memory location to another& and save any piece of data from any ~ memory location to disk--and all from Applesoft Basic or the keyboard ~ (immediate mode). There is no need to enter the monitor in the usual& ~ "formal" way& and the ability to access all memory via Applesoft means ~ there are no "off limits" memory areas to your own Basic programs. ~ ~ The load part of Longloader is especially effective& since you don't ~ have to be concerned about the type of file you want to load (such as ~ having to BLOAD a binary file....and how to load a word processor ~ file). When Longloader loads a file& it makes a copy of all the ~ file's attributes (type& size& dates& times& etc.) in memory for your ~ programming reference and use. These data are in memory bank 0& and ~ you can refer to them by PEEK-ing the locations shown below. ~ ~ ~ 771 ($0303) - Access Bits 778 ($030A) - Last Mod. Date ~ ~ 772 ($0304) - Filetype 780 ($030C) - Last Mod. Time ~ ~ 773 ($0305) - Aux. Filetype 782 ($030E) - Creation Date ~ ~ 775 ($0307) - Storage Type 784 ($0310) - Creation Time ~ ~ 776 ($0308) - Blocks Used ~ ~ X ~ ~ LONGLOADER ACCESS ~ ----------------- ~ To use Longloader& BRUN the binary file "Longloader" in the way most ~ convenient to you. This can be from the keyboard (immediate mode)& ~ from an Applesoft Basic program& or from a program launcher of some ~ sort. Please note& though& that you should BRUN Longloader only once ~ per "application session". When it's BRUN& Longloader makes space ~ for itself between the Basic Interpreter and its buffers& so each suc- ~ cessive BRUN allocates another space& moving HIMEM down and down. ~ (Quality Software's book "Beneath Apple ProDOS" gives a good explana- ~ tion of this.) This could prove to be undesirable for many reasons... ~ please take our advice% don't do it! ~ ~ If you're using Longloader and our program ICONIX.GS (which is a ~ binary file on the "ICONIX for the Apple IIgs" disk) at the same ~ time& you should BRUN ICONIX.GS first& then BRUN Longloader. ~ ~ ~ LOADING FILES ~ ------------- ~ To load a file from disk to memory& use this statement syntax% ~ ~ SG$ = "LD&/VOLUME/SUBDIRECTORY/FILENAME&A$123ABC&" % CALL 38960 ~ ~ X where A$123ABC is the complete memory address you wish to load to. ~ ~ ~ ~ So What Software F-1 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ LONGLOADER INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ Note that the address has 6 alphanumeric characters...in hexadecimal ~ format. The first 2 specify the memory bank ($00 - $FF& depending on ~ X how much memory your IIgs has)& and the last 4 specify the address ~ within the selected bank ($0000 - $FFFF). ~ ~ Be sure to enclose the entire statement following the SG$= portion in ~ quotes& and please note the comma at the end of the statement& just ~ before the final quote mark. You can usually get by without it& but ~ the comma delimits the contents of the "SG$" string and guarantees ~ that Longloader will recognize the end of the string regardless of ~ where the "SG$" variable exists in memory. ~ ~ ~ SAVING FILES ~ ------------ ~ To save a file--or to save a piece of data as a file--from a memory ~ location& use this statement syntax% ~ ~ SG$ = "SA&06(see note& below)&/VOLUME/SUBDIRECTORY/FILENAME& ~ A$123ABC&L$12AB&" % CALL 38960 ~ ~ where the address and length entries are in hexadecimal format and ~ denote the memory location you desire to be the saved file's begin- ~ ning and the length of the file& respectively. Don't forget the ~ trailing comma& please. ~ ~ The filetype should& in general& be the same as the filetype of the ~ X data originally loaded into memory. In the statement example above& ~ we've used "06"& the filetype for a binary file. Longloader is quite ~ flexible about the type of file it creates when saving& however. You ~ can easily convert a word processor document (say& an AppleWorks docu- ~ ment& filetype $1A) to a binary file (filetype $06) or a text file ~ (filetype $04). Exercise some judgment in specifying filetype& ~ though; you can really mess up a disk by "creating" files whose con- ~ tents don't match their filetype! ~ ~ Here's a list of some of the filetypes recognized by ProDOS; you can ~ find a complete list in Quality Software's book "Beneath Apple ~ ProDOS". ~ ~ ~ $00% (No type) $0F% DIR - Subdirectory ~ $01% (Damaged) $1A% AWP - AppleWorks W-P file ~ $04% TXT - Text $FC% BAS - Applesoft program ~ $06% BIN - Binary $FF% SYS - ProDOS system file ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software F-2 1-MAY-88 ~ ~ ~ ~ ~ ====================================================================== ~ LONGLOADER INSTRUCTIONS SONIX for the Apple IIgs ~ ====================================================================== ~ ~ TRANSFERRING MEMORY CONTENTS ~ ---------------------------- ~ X To move a piece of data from one memory location to another& use this ~ statement syntax% ~ ~ SG$ = "XF&123ABC&>&456DEF&L&12AB&" % CALL 38960 ~ ~ where 123ABC is the starting location to transfer FROM (bank and ~ memory address)& 456DEF is the starting location to transfer TO ~ (bank and memory address)& and 12AB is the length of the memory ~ segment to be transferred. (Trailing comma here& too.) ~ ~ Please note that the two addresses and the length are to be expressed ~ in hexadecimal format& WITHOUT the traditional "$". ("$" ARE used in ~ Longloader's Load and Save statements& but not in the transfer state- ~ ment--for some rather arcane reasons that needn't be divulged here.) ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ X ~ ~ ~ ~ So What Software F-3 1-MAY-88 ~ ~ ~ ENDFILE~ ~ ==================================================================== ~ Appendix A SONIX for the Apple IIgs ~ ==================================================================== ~ ~ This table gives the sample durations and frequency responses for ~ various rates and lengths selected when using the SONIX Waveform ~ X Editor's CAPTURE function. ~ ~ WAVEFORM DURATION TABLE (seconds) ~ ~ +------+----------------------------------------------------+-------+ ~ | RATE | SAMPLE SIZE (bytes) |FRQ.RSP| ~ | (us) | 256 512 1024 2048 4096 8192 16384 32768 | (Hz) | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 32.1 |.008 |.016 | .032 |.065 |.130 | .262 | .512 | 1.05 | 15570 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 42.1 |.010 |.021 | .043 |.086 |.172 | .344 | .689 | 1.37 | 11870 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 52.1 |.013 |.026 | .053 |.106 |.213 | .426 | .853 | 1.70 | 9590 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 62.1 |.015 |.031 | .063 |.127 |.254 | .508 | 1.01 | 2.03 | 8050 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 72.1 |.018 |.036 | .073 |.147 |.295 | .590 | 1.18 | 2.36 | 6930 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 82.1 |.021 |.042 | .084 |.168 |.336 | .672 | 1.34 | 2.69 | 6090 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ | 92.1 |.023 |.047 | .094 |.188 |.377 | .754 | 1.50 | 3.01 | 5428 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |102.1 |.026 |.052 | .104 |.209 |.418 | .836 | 1.67 | 3.34 | 4897 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |112.1 |.028 |.057 | .114 |.229 |.459 | .918 | 1.83 | 3.67 | 4460 | ~ X |------+-----+-----+------+-----+-----+------+-------+ -----+-------| ~ |122.1 |.031 |.062 | .125 |.250 |.500 | 1.00 | 2.00 | 4.00 | 4096 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |132.1 |.033 |.067 | .135 |.270 |.541 | 1.08 | 2.16 | 4.32 | 3785 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |142.1 |.036 |.072 | .145 |.291 |.582 | 1.16 | 2.32 | 4.65 | 3518 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |152.1 |.038 |.077 | .155 |.311 |.623 | 1.24 | 2.49 | 4.98 | 3287 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |162.1 |.041 |.082 | .165 |.331 |.663 | 1.32 | 2.65 | 5.31 | 3084 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |172.1 |.044 |.088 | .176 |.352 |.704 | 1.40 | 2.81 | 5.63 | 2905 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |182.1 |.046 |.093 | .186 |.372 |.745 | 1.49 | 2.98 | 5.96 | 2745 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |192.1 |.049 |.098 | .196 |.393 |.786 | 1.57 | 3.14 | 6.29 | 2602 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |202.1 |.051 |.103 | .206 |.413 |.827 | 1.65 | 3.31 | 6.62 | 2474 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |212. |.054 |.108 | .217 |.434 |.868 | 1.73 | 3.47 | 6.95 | 2357 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |222.1 |.056 |.113 | .227 |.454 |.909 | 1.81 | 3.63 | 7.27 | 2251 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |232.1 |.059 |.118 | .237 |.475 |.950 | 1.90 | 3.80 | 7.60 | 2154 | ~ |------+-----+-----+------+-----+-----+------+-------+------+-------| ~ |242.1 |.061 |.123 | .247 |.495 |.991 | 1.98 | 3.96 | 7.93 | 2065 | ~ X +------+-----+-----+------+-----+-----+------+-------+------+-------+ ~ ~ Frequency response is calculated per the formula Bw / 2 = Cf; the ~ maximum bandwidth (Bw) must be at least 1/2 the sample frequency (Cf). ~ ~ So What Software a-1 1-MAY-88 ~ ~ ~ ~ ===================================================================== ~ Appendix B SONIX for the Apple IIgs ~ ===================================================================== ~ ~ The following note designations are in standard semitone intervals ~ based on the 12th root of 2. This is commonly referred to as the ~ X "Western Tempered Scale". ~ ~ ~ NOTE DESIGNATION AND FREQUENCY (Hz) ~ ~ C0 16.351 C1 32.703 C2 65.406 C3 130.81 ~ ~ C#0 17.324 C#1 34.647 C#2 69.295 C#3 138.58 ~ ~ D0 18.354 D1 36.708 D2 73.416 D3 146.83 ~ ~ Eb0 19.445 Eb1 38.890 Eb2 77.781 Eb3 155.56 ~ ~ E0 20.601 E1 41.203 E2 82.407 E3 164.81 ~ ~ F0 21.826 F1 43.654 F2 87.307 F3 174.61 ~ ~ F#0 23.124 F#1 46.248 F#2 92.498 F#3 184.99 ~ ~ G0 24.499 G1 48.999 G2 97.999 G3 196.00 ~ ~ G#0 25.956 G#1 51.913 G#2 103.82 G#3 207.65 ~ ~ A0 27.500 A1 55.000 A2 110.00 A3 220.00 ~ ~ X Bb0 29.135 Bb1 58.270 Bb2 116.54 Bb3 233.09 ~ ~ B0 30.868 B1 61.735 B2 123.47 B3 246.96 ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~ ~ C4 261.63 (MidC) C5 523.25 C6 1046.5 C7 2093.0 ~ ~ C#4 277.17 C#5 554.36 C#6 1108.7 C#7 2217.4 ~ ~ D4 293.66 D5 587.33 D6 1174.7 D7 2349.3 ~ ~ Eb4 311.12 Eb5 622.25 Eb6 1244.5 Eb7 2489.0 ~ ~ E4 329.63 E5 659.26 E6 1318.5 E7 2637.0 ~ ~ F4 349.23 F5 698.46 F6 1396.9 F7 2793.8 ~ ~ F#4 369.99 F#5 739.98 F#6 1479.9 F#7 2959.9 ~ ~ G4 392.00 G5 783.99 G6 1568.0 G7 3136.0 ~ ~ G#4 415.30 G#5 830.61 G#6 1661.2 G#7 3322.4 ~ ~ A4 440.00 (A440) A5 880.00 A6 1760.0 A7 3520.0 ~ ~ Bb4 466.16 Bb5 932.33 Bb6 1864.6 Bb7 3729.3 ~ X ~ B4 493.88 B5 987.77 B6 1975.5 B7 3951.1 ~ ~ ~ So What Software b-1 1-MAY-88 ~ ~ ~ ~ ~ ===================================================================== ~ Appendix B SONIX for the Apple IIgs ~ ===================================================================== ~ ~ STANDARD INSTRUMENT RANGES ~ ~ X Harp D1-G7 C Flute C4-C7 Bb Bass clar. D2-Eb5 ~ ~ ~ Accordion G1-A6 Bb Sopr. sax. Ab3-Eb6 Oboe Bb3-F6 ~ ~ ~ Guitar E2-F5 Eb Alto sax. Db3-Eb6 English horn E3-Cb6 ~ ~ ~ Marimba C3-F7 Bb Tenor sax. A2b-Eb5 Bassoon B1b-Eb5 ~ ~ ~ Xylophone C3-F7 Eb Bari. sax. D2b-Ab4 Eb CBSPN* D1b-B3 ~ ~ ~ Chimes C5-F6 Bb Bass sax. A1b-Eb4 Bb Cornet E3-Bb5 ~ ~ ~ Tympani F2-F3 Bb Sopr. clar.D3-G6 Bb Trumpet E3-Bb5 ~ ~ ~ C Piccolo D5-Bb7 Eb Alto clar. G2-Ab5 Bb Fluegelhorn E3-Bb5 ~ ~ ~ Eb Alto Mell. A2-Eb5 F French horn B1-F5 Bb Trombone E2-Bb4 ~ X ~ ~ Bb Euphonium E2-Bb4 Eb Bass tuba A1-Bb3 BBb Bass tuba E1-Bb3 ~ ~ ~ Violin G3-C7 Viola C3-C6 Cello C2-E5 ~ ~ ~ Bass E1-B3 Sopr. voice C4-C6 Alto voice G3-F5 ~ ~ ~ Tenor voice D3-Bb4 Bari. voice A2-G4 Bass voice E2-D4 ~ ~ ~ ~ *Eb CBSPN = Eb Contrabass Sarrussophone ~ ~ Mell. = Mellophone ~ ~ Sopr. = Soprano ~ ~ Bari. = Baritone ~ ~ Sax. = Saxophone ~ ~ Clar. = Clarinet ~ X ~ ~ ~ ~ So What Software b-2 1-MAY-88 ~ ~ ~ ~ ~ ======================================================================= ~ Appendix C SONIX for the Apple IIgs ~ ======================================================================= ~ ~ SONIX FILE STRUCTURES ~ ~ X Type .SWF (SONIX Waveform file) Type .SMF (SONIX Music file) ~ ~ +----------------------------+ +---------------------------+ ~ 0000 | Length number | 0000 | | ~ +----------------------------+ | Waveform Prefix | ~ 0001 | Volume | | | ~ +----------------------------+ | 48 bytes | ~ 0002 | Mode | | | ~ +----------------------------+ +---------------------------+ ~ | | 0030 | Oscillator #00 Filename | ~ 0003 | Resolution | | | ~ +----------------------------+ | 15 bytes | ~ 0004 | Unused | +---------------------------+ ~ +----------------------------+ 003F | Sound RAM Hi byte address| ~ 0005 | | +---------------------------+ ~ | | 0040 | Oscillator #01 Filename | ~ | | | . | ~ | | | . | ~ | Semitone table | | . | ~ | | | . | ~ | 192 bytes | | . | ~ | | | . | ~ | | | . | ~ | | +---------------------------+ ~ | | 0200 | Oscillator #1D Filename | ~ X | | | 15 bytes | ~ +----------------------------+ +---------------------------+ ~ 00C5 | | 020F | Sound RAM hi byte address | ~ | | +---------------------------+ ~ | | 0210 | | ~ | Unused | | Waveform length | ~ | | | numbers | ~ | 64 Bytes | | | ~ | | | 30 bytes | ~ | | | | ~ | | +---------------------------+ ~ +----------------------------+ 022E | Unused Sound RAM | ~ 0100 | | +---------------------------+ ~ | | 0230 | Used Sound RAM | ~ | | +---------------------------+ ~ | Waveform | 0232 | Master Volume | ~ | Byte pattern | +---------------------------+ ~ | | 0233 | Master Tempo | ~ | Can be any one of 8 | +---------------------------+ ~ | different sizes | 0234 | | ~ | | | | ~ | 256 bytes | | Music Sequencer | ~ | 512 bytes | | byte pattern | ~ | 1024 bytes | | | ~ | 2048 bytes | | (Size varies) | ~ | 4096 bytes | | | ~ X | 8192 bytes | | | ~ | 16384 bytes | | | ~ | 32768 bytes | | | ~ ???? | | ???? | | ~ +----------------------------+ +---------------------------+ ~ ~ So What Software c-1 1-MAY-88 ~ ENDFILE8B@DHLPUZ`flry 1CWk Ac0`A\`(  \ P* >sU# "$8&}(*s-'03 6C9<x? ? ? ? ? o?@o?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG@_?@_?@_?@_?@_/@_@?/@?@?o@? o`? _? _? _?@_?@?/@_@?@?@?_@?_@?_`?_@? ? ?o ?o@?_@?_@?_@?_@/?@?@o?@o ?@_ ?`_ ?`_@??@/?@o?@_?@_?@_ ?@_Ѐ /@? /oP?Ѐ o`?@_`?@_?@_?@? 7o@? /_P? _P? _`?@_`?@O`/o@? /_А@?ఀ /_Ȑ@? _АP?@_Р`?@_Р`?o@OР` 7o@?Р /_@?ࠀ /_@?Р@/_P?wР@_` ?oఀ@O` ?oа@?` 7_԰@?` /_@?` /_P?w@/_P?oĠ@/_` ?oȠ@W` ?oȠ@O` 7_Ƞ@?`07_ȨP?`@/_ȨP ?o@/_ȰP ?o@/_Ȱ` ?o@/WȰ`(?_@OȰ`@?_H OȰ`@?_P O{Ȱh@7_P ?oİp@7_`(?oİ@ /_`@?oİH /W`@?oP /W`@?_P(/Ow`@ ?_P0/Ooh@ ?_`@/OopH ?_`@/OoP(?_`@ ?oP07_`@  ?oP07Ww`@  ?_`@7WwpH(?_`@ 7WwpP0?_`@ /OopP0?_`@$7OoP@ '?_`@(7OoX@ '?_hP07Oo`@(/?_pP@ 7Oo`@( /?_{pP@ 7Oo`D0  /?_wpP@$ 7Oo`H0  /?_wp`@(7OghP4 /?_wp`@0 '7OghP@(/?_w`H0 +?OghP@0 &/?_o`H8$+?O_{hP@0 '/?[o`P@( -?O_{p`D0( "+7?_odP@0$#'/?O_wp`H@,&%-7G_ohT@4(&*3?O_wp`P@0(*/;G[ohXD8,)-5?O_wt`P@2,+/=G[ohXH@0,/7?O_wt`PB80.3=K[o}p`L@403;?O_utdTH@437?K[k{p`P@846;GO_sxhXH@86;?O[kwp`PD@89>GU_oxh`PB::CKW_o~p`PHB@BGO^gvthXPHBBFMW_o{pbXPHDEJS_kvth`PJEDIOW_owxpbXPJFGKS]go~th`TPHFJOW_nwpdZRLJJNU^go{tj`XPLLNSY_nwzph`XPLNOW_go{xlb\TPNPT[cmu}zph`XRPPRW_goytph`XRPRV\cmu{yrjd\VSTVZ_gow~xph`\XTVY^eltzztlf`ZXVW\_gov||xphb`YXX[_ekrw~ztnh`^ZYZ^bgntz~zxplf`\ZZ]_fkow{~|ztphd`\\^_cjnsx|~~|xrlhd`^^`bgkovz|~}|xvplhd```bfjnswz|||zxtpjdb`abdgkotwz||zxtplhfbbbcfjnqtxyzzxvtplhdbbcegkoruwxzxvtrpjhfddfhjlosvxyxxvtpljhfffghknrtvwwxvtrpllhffgjlmortvvxxvtrpljjjiillnprtvwxvttrppljjjjlnnrrttvvttrrpnllkjlmnopqrtttttrppnnlllllnnpqrrttsrrrpppnllmnnnpqrrtttttrppnnnnnnnnnoprrrrrrrrrpnnmlllmnnpqrrttttrrpnllllllnnprrttvttrrppnlljjlmnprstvvvvtrrplljjjlmoprtvxxxxvrqpnlljjlmoruvxxyxxvtrpljjhjjmprvxzzzzxvtpllihhilnptvz{||zxtrpljhhhikorvz{|||zxtpmjhffhimotwz|~}|zvrpjhfdefjmouz|~~~|zvrljhdddfjorw|~|xtplhdbbdgkovz~|xrphedbbfinsw}|vplhd``bfjouzztpidb`acgmsw~xrlhb``bdiov{|tphd`^^adkqw~ztlh`^\^bgns{xphb`\]_djowtlf`\\\_fmu|xphb\ZZ^_gowtpd`\ZZ^cks}rhb`XX[_gowxpf`XXX\cks}rj`ZXVY^fowxpd`XTVY_gs}tj`XTTV[cmwpd`VTTW^go{tj`XTRSY_kwpd\TPPT[fo{xh`XPPRW_kvpd\RPNRZ_o{l`XPNOU_gwph`TPNQW_o{p`XPLNS]guth`PLJOV_n{p`TLJJOZ_othXPHHKS_kwp`TJHHOW_othXPHFJO[gwp`TJFFKW_ohXPFDGO[gwp`RHDDJS_ohXPDBEKWgwp`PHBCGO_oh`PDBEMWgwp`PH@?CO[ohXH@<>GO_op`PB<GO_wdRH@>?O[op`L@<=EO_o`PD<8?GWkp`H@9;?O_o`PB87;GWgp`H@66?K_o`P@427?O_wpXH823;GWo`P@426?O_wp`H823;GWodP@405?O_wp`H8017?WodP@2.3?O_wp`D80-5?OghP@0+/7G_wp`H4,+3?OghP@0*.7?_o`H4,*/?OghP@0(+6?[o`H4)(/;O_hP@0(+6?[o`H4('.;O_pP@0&'/?Wo`D0$"'7?_hP@( #/?Oo`D0$!'3?_ĸpP@("#.?Oo`H0$ '5?_pP@( ';Oo`D0 /?_wpP@( '7Okİ`H0 /?_{P@('7Okȴ`H0 +?WwP@$/?_ȸ`H0 '?WwT@$/?_`H0 '?Woİ`@(/?_hH0 7OoİP@ '?_dH0/OoȰ`@ '?_hH0 /Oo`@$'?_pP0 /?o`@  ?_ȰpP0/?o`@  ?_ȰpP0 /?k`@  7WwȰP0 '?_`@ /OwP0 '?_`@ 7OwP0?_Ĩ`@  /OoP0?_Ĩ`@ /OoP0 ?_Ȱ`@ /?oP0 ?_Ȱ`@ '?oP07_аh@ ?o`@7Wp@ ?o`@/Op@  ?_`@/O@ ?_Ȩ`@/OH ?_Ш`@/OwH$?_а`@+?wP ?_а`@?oP 7_`@?oP(/_`@ ?oȠP(/W`@ ?oȠP(/W`@ ?_РP(/Oh@ ?_ШP0/Oh@ ?_а`0O@ ?_а`0?@ 7_а`0?@ /_`0?o@ /_`@?oȠH /_`@?oРH /_`@?oРP /W`@?oШP /O`@?oаP Oh@?_аP O@?_`(?@?_`(?Ƞ@7_`0?wȠ@ /_`0?wР@ /_`@?oР@ /_`0?oШH  /_`@?oШH /O`@?oఀP O`@?_ఀP O`@?_P ?@7_P ?Ƞ@/_` ?Р@/_`(?wР@/_`0?oР@ /_`0?oР@ /_`0?oа@ /W`@?oఀP O`@?oఀP O`@?_P ?Ƞh@7_P ?Ƞ@/_P ?Р@/_` ?wР@/_`(?oР@/_`0?oР@ /_`0?oШ@ W`@?oаH O`@?_ఀP O`@?_P ?@7_P ?Ƞ@/_` ?Ƞ@/_`(?oР@ /_`0?oР@ /_`0?oР@ /W`@?oШH /O`@?_аP O`@?_аP ?@7_аP ?@7_ఀP(?w@ /_`0?oȠ@ /_`0?oР@ /_`@?oРH /W`@?oРP  /O`@?_аP /Oh@?_аP(?@ ?_а`0?w@ 7_а`0?w@ 7_`@?oH /_`@?oP /_`@?oȠP(/W`@ ?_ȠP(/Oh@ ?_Ƞ`0/Op@ ?_Ȩ`0/O@ ?_Ш`@/OwH ?_а`@ /?wP(?_а`@ ?oP0?_а`@ ?oP07_аd@ '?o`07_p@ ?o`@7WpH$?_`@ /OP(?_`@ /OwP0?_`@  /OwP0?_Ȩ`@  /OoP0  ?_Ȩh@( /Oo`@ ?_İhD( /Oo`@  ?_ȰpP0 /Oo`@ ?_ȰpP0 /?o`@$?_ȰP0 /?_`@(?WwȰP@ /?_`D0?WwȰ`@ /?_hH0 ';WwȰ`@(/?_hP0 '7OoȰ`@(/?_pP0 '7OoȰ`@0 /?_pP@$'7OoȰ`D0 /?_P@( '7Ooȸ`H0"#/?_`@* '7OoȸhP4$ #/?_w`@0 !'7OgȴhP8( #/?_w`@0$"+7OgĴhP@("&/?Ww`H0($+7O_pP@0&'/?[o`H8(&+7O_ĸpX@0()/?Wo`P@*(-7O_ĸp`@0)*3?WohP@,(/7K_`D4*+3?WohP@0*.7K_w`H4,+/?OkhP@0,/;K_w`H@0.6?WkpX@402;K_w`P@207?WkpXD803;G_w`P@407?Ogp`H823;G_odP@427?Ogp`H@44=K_ohPB847?O_`P@67?K_opXD@6;?Og`P@88?K]opXH@8;?O_w`P@:9?K[op`H@:;?O_wdPD<:?KWop`P@<>FO_whTH@?M[op`PD@?GO_wh`LB@CMWk`PD@?GO_op`LD@CKWg{dTHBBGO_op`PHBEM[g{hXJDCGO_op`PHDEMWgwhXLDDGO_op`PHDGMWgwh`PHFKS_op`TLFHOWgwh`PHGKS_opbXLHJOZgwp`PJHLU_othXPJKOWgwp`TLKNU_oxhZPLLR[gwp`TPLNV_n{xh`RNLO[gop`XPLNV_m{h`TNNR[gopdXPNOW_kwp`TPOS[gopd\RPPV_kwp`XPPS[eorh`TPRW_kwp`XRQT[foth`VRRW_kwpdZTSV[foxj`XTUZ_kwpd`VTV]fo}xl`XUVZ_kwph`XUW^fo{l`ZXV[_kvrh`XVX^go{xpd`XX[ckwth`ZXZ^fo{xpd`XX[_js~rh`\XZ]cnwxpd`YX[_gs~tjb\ZZ_enwph`\[]cjs~tld`Z\_fowphb`\_cks~xpf`\]_gowrhd`^_eks}xphb`^bgowrjd```eks{xphb`_bgowtlda`afks{xphd``cgowtlhdabfls{rlfdbdjowxphdbdfls{xrjfdbdiov}tphdbbgkryxplfbbdhnu{tpheddgkswztphfdfjov}xpjhffjmsztpjhfgkov}xplhffinsy|tpjhhhkov|xqlhhgjnsx~ztplhghlov{xrljhhjnrw~ztpljhjlpvzxrnjjjknsw}|vpnljjnqv{xtplljmoty~|xrplllorv{xtpnllnqux~|xrplllnqvz~|xtpnllmosw||vrplllnrvz~xtppnlnpsw||xtpnnnprvz~zvrpnnpruw||xtqpnpqtvz~~zvtqpprsvy||xtrppprtwz~~zvtrpprrvy|~|xvtrrrrtwz~zxtrqqrsvy{~zxttrqrsuwz~|zxttrrstvy{~zxvttrrtvxz|~|zxvttrtvxz|~~|xxvtttvvxz|~|zxxuttuvxz|~}|zxvvuvvwyz}~~~|zxxvuvvvxyz|~~~}|zxxvvttuwxz|}~~~~~|zzxvvvuvvxyz||}~~||zyxxvuvvvwxz||~~~~||zzxxvvvwwzz{|~~~~~||zyxxxwwxxzz||}~~|||zzzxxxxxxxz|||}||||zyxxxxxxxyz||||||||zzxxxxxxxyzzz|||||zzyxxxxxxxyzzzz|z|zzzzzxxxxxxyz{z||||z|zzzyxxyyzzz||||||||zzxzxxxxzzzz||||||zzzzxxxxyzzzz|||||zzzyxxxxxxyzzzzz|||zzzxxxxxxxyz|z||||||zzzxxxxxyzz||||||||zzzxxxxxzyz{||~~|}|||zzxxxxxzzz||~}~~||zzxxvxxxxzz{|~}~|||zyxxvvvvvxzz||~~~~||zxxvvvvwxyz||~~~~||zxwvvvvvxz||~~~~~||zxxvuvvvxyz|~~||zxvvvvvvxz{~~~|zxxvvtvvxy{~~||yxvttttvxz|~~}|zxvtsttuwyz}~|zxvtttttvwz|~~|xxutrrttvy|~~zxvttrrtvwz|~|zvvtrrrtvxz~}zxvtrrrrtvz|~|xvtrrrrtvx{~|xttqpqrtvz|~|zxtrppqsux{~|xtrppprtwz}|zvrpppprtw{~|xtrpppprvz}|zvrppnprtx{~zxtppnnoruy|zvrpnnnqsw{|xtpnnnprvy}zvrpmnnpsw{|xtppnmorvy~zvrpnlnosw||xtpmllnqty~zvrnlllnrw{|xtplllmotx}zvpnjjlnrv{xtpljjlotx~ztrnljknrv{xtpljlmotw~ztpljjjmov{xrnljilorx}ztpljhhkovzxrpjhhjmsw~|tplhfhjouzxrlihhjmsw~vplhhhkov{xrlhhgjmsw~xplhhhjot{xrlhhfilow~tpjhffjntzxrlhddgjov}tphfddglrwxpjfddfinv|tphdcdfkowxplhdcejov}vphdbcfkryzrlhdddiov}xphdddflrzxrlfbadgnu{tnhb`bdjowxrjdb`bgms}xphd`adiowxrjdb`bgms{xphb``dhowrld``bemt}xphdbbdjoytldb`bflt}xphb`_bgnwphb`^_cjo{tld`\\_emv~rhb`\^cio{xpf`^]_fmwrjd`]^cjo{xph`\\_emvrhb^\^bgo{xpd`\\^ckutjb`\]_go{xph`\\^dmvthb\Z\_go{xpd`ZZ\_js~rh`\XZ^enwxpd`XY[_go~tj`\XZ^eowpd`YX[_gstjb\XZ]eowpd`XXZ_go}th`ZVW[_kwpd`XVY_go}th`ZVW[_kwpd`XUW]go}th`XVVZ_kwpd`XUW]fo{tj`XTVY_jvpd`XTW\eo{xl`XTUZ_kvpd`VTV[eo{xj`XTTW_gspd\TRU[_n{xj`XRSV^gspd\TRTY_nwxl`XRRV^gspd`TRSY_mwj`XRRU[gopdZTPRW_kwl`XPPS[fopd\TPQV_kwp`XPPRZ_oph\RPOU^gwp`XPNRZ_othZTPOV_gwp`XPORZ_oth`RPOS^gwp`XPNOW_o{thZPMNR[gsp`TPLOV_n{th`PLMS[gup`TPLNU_k{th`PLLQ[gop`XPLNU_k{xh`PLKOW_op`TPLMU_kwh`PLJOW_op`TNJLS[gwh`PLJOW_op`TPJKR]gwh`PJINW_op`TLHJO[gwh`PJJMV_opdXPHJO[gwh`PJINU_opdXPJIO[gwl`PJHKS_ordXLHHNWgsp`PIHJO_m{tdXLHGNWgvp`PJGJO_k{tdXPFFLW_op`RHHJO]k{hXLHGKW_op`PHFGO[kwhXLFFKS_op`RHFGO[gwhXLFFKO_op`PHDFNWgwhXLFDGO_op`PHDFMWgwhXPFDIO_op`TJFGNWgwh`PHDGO_op`THDFKW_wh`PFDFO[k{p`THCCJU_oh`PDBFO[g{t`THDCJS_op`PFDGO[g{tdTJDCIS_op`PEBEMWgwdXHDCGS_op`PFBEMWgwhXJDBGO_op`PHBEKWgwhXJDBGO_op`PHADKW_whXJDBFO_op`PHBCKW_whXLDBFO_op`RHBCJW_whXLDAFO[kp`PHBBGS_ohXPD@DM[k{t`PHABGO_oj`PDBDMWg{t`THBAGO_op`PD@CKWgwdTHBBGO_op`PDBDKWgwhXHBBGO_op`PFBDKWgwhXHBAGO_op`PD@BGV_whXHB@EO]op`PD@BGV_whXJBAEO[mp`PHABGS_whXLBBEN[kp`RHBBGO_oh`PDAEO[k}t`THBAGO_op`PD@CMWgw`THBBGO_op`PDACKWgwdTHBBGO_op`PFBDKWgwhXHDBGO_op`PHBCKWgwhXJDBFO_op`PFBCKW_whXJDBGO_op`PHBBGU_whXLDBFO[k{p`RHBCJV_oh`PDBEO[k}t`THBCIS_oh`PDBFMWg{tdTHBCGO_op`PDBEMWgwtdTHBBGO_op`PDBDKWgwhXJDCGO_op`PHCEMWgwhXLDDHO_op`PHDEKW_whXLDCGO_op`PHDEKW_whXLDCGO^mp`THDDKW_vh`PHDGO[k}tbTJDEKW_up`PHDGO[k{tdXLDEKU_op`PHDGO[g{hXLFEKS_op`PHDFO[gwhXLFEJS_op`RHEGNWgwhXPFFJS_op`THFGNWgwh`PHFJS_op`TJFGOWgwh`PHGKS_opbTLHHNWgwp`PHGKO_m{tdXLHGNW_oh`PHFIO[gwtdXLHGKW_op`PHFIO]g{xhXPHHNW_op`TLHKO_k{hZPJJNW_op`TLHJO[gwh`PIHMV_op`TLHKO[gwh`PJHLS_opbXLHJO[gwl`RLINV_o~pdXPJJOZgvp`TLJNV_o}thXPLKO[gup`TNLNV_m{xhXPLLO[gsp`TPJNU_k{xh`PLLOW_op`TPLNS_kwh`RLLOWcopbXPLNS^kwj`TPLOW_opdXPNOS_gwl`TPMOW_othXRNNU^gwp`XPNOW_oth\RNNS]gwp`XPMOW_o{th\TNNS[gsp`XPNOW_n{th`TPNS[gopdXRPQW_m{xh`TPPT[gopdXRPRW_mwl`XPPS[gopdZRPRW_kwl`XRPT[fopd`TPRW_kwl`XRPS[eo~rh`TQRW_gwpbXTRT[co{th`VRRW_jwpdZTRT[eo{xh`XRTW_jwpd\TTU[co{th`XRRW_gspd\TRT[_owxj`XTTW^goph`XTU[_nwxp`ZVTW_gsph`XTV[_nwpbZVUW^goth`XUV[cmwpd\XVX_go}th`XVWZ_mwpd\XUX^go{th`ZVV[_kwpd`XVX^go{th`ZVW[_kwpd`XVX^go{xld\XX\_kvph`ZXZ^fo{xlb\XW[_gsph`ZXX]fowxpd`XX[_gs~rh`\ZZ_fowpd`ZY\bkuthb\YZ_fowpd`ZZ\_js}tjb\ZZ^enwxph`\Z[_go|tlb\ZZ^fmwph`\Z\_go{tld`Z[_dnwph`\\]bgo{xpd`\\_enwrhb`\^bjo{xpf`\\_fmvrjd`\^bgo{xph`\\_eks~rjd`\]agowxph`^\_dkt~tld`^^bgoyxphb`^_fmu}tlh``_bgowxphd`^_eks}tld``^bgowxphb`^_eks{tpf``_bgowxphd`^_djsztlf``^bgowxpid`_`dkszxphd``bgowtleb`bfks{xphdaacgowtlfb`bekrzxphdaachow~tlhdbbfkrzxpjdbbdhnv~tphdbbfkozxphdbadgnu}tphdbdfkrwxrjfbbeinv}tphdbdfkryxrlhddfjov}vphfddgkrwxrlhddeiot{tpheddfkow~xplhdddhms{tpjfddfkow~xrlhfdfjns{xplhefgkqw~ztpjhffjov{xplhffilrw~|tpjhffjot{xrlhffhmrw}ztpjhffjnszxplhffglov|ztphfffinszxplhffhlov{ztpjhhhjntzxrljhhjmqw}|vplhhhjosyxrljfghlpw||tplhfhjnsx~xrlihfikov{ztplhghjnsx}xrnjhhjmrv||vpljhjknsy~xtplihjmrv{|xplljjlosz~xtpljjjnrv||xrpjjjlotz~xtpljjlnrw{|xrpjjjlosx}xtpljjkmqv{|xpnljjlosx~xtpljjlnrv{|xrplllmptx~xtpnljlosv{xtpnllnpuz~ztpnlllnsw{|xrplllnpty|ztpljklnquz~|xtplllnptx|xvpnlklnrv{~|vtplllnosw|xtpnlklnruy}zxtplllnosw{~xtrpllnorvz~|xtppnnnrtx}zxrpmmnosv{~|xtppnmnrtw||zvrpnlmorvz~|xtppmlnpsx{~zvrpnmnosvz~|xtrpnnnrtx|zxrpnnnpsvz~|xtrpnnpruw|~yvrpnnnpsvz}|xtppnnprtw{~|xvrpnnnprvz~|xtppnnprtw{~|zvrpnnopswz}zxtrppoprux|~|xxtppnprswz}|xurppnprvx|zvtrppprtxz~|xtrpppprvx{~|xvtqpppqtwz}|xtrppoprvw|~|zxtrppprtwz}~|xttqpprrvx||zxtrrprrvwz~zxvtppprtvx{~|zxtrppqrtwz||zxutqpqrtvy|~~|xxtrppqruxz}|zxurrpqrtvy|~}zxvtrppprtvz|~|yvtrpppqrtw{|~|zxvrrppprtwz|~~|zxtrrqrrtvy|~~|zxtrrrrsvx{~||xvtrrrsvwz|~|xxttrrrtvxz|~|zwutrqrrtwz|}||xvtrrrrtvxz|~~|zxttrrrstvyz~~~|zxvtrrrrtvxz}~~|yxvtrrrtuwz|~~|zxvtrrrrtvxz|~~}zyxttrrrtuvz|~~|zxvttrrrtvxz~~~|zxvtttttvxz|~~||zxvtrrtvxy{}~~|zxvttrttvwz|~~|zxvtttrstvxz|~~~~||xxttrrssvxy|}~~~|zxvtrrrrtvxz|~~~~~|zxxvttrttvxz|~~~~|zxvvttttvwz|~~~~|zzxvttttvwxz|~~~~|zxvtttttvxz|~~~|zyxvtsttuvyz|~~~~||zxvtttttvxz||~~|zxxvttttvxyz|~~~~~zzxvvttttvwzz|~~~~~|zxxvtsrtuvxz||}~~}|zxvuttrttuvxz{|~}||zzxvtrrrtuvxz||~~}||zxxtttttuvxyz|~~~~||zxvutttuvwx{}~~~~~|zyxvttttvwxz|~~~~~~|zxxvtvuvvxz||~~~}|zxxvvtvvvwxz|~~~~||zxxvtttttvxyz|~}~}||zxvttsttvvwz{|~~}|zzxxvttttuvxy{|~~~~||zxxuuttuvwx{|~~~~~|zzxvvtttvwxz|}~~~~||zxxvutvvvxz||~~~~~||zxvttuvvxyz|}~~~}||zxvvtuvvvxz{|~~~~~|zzxvvvuuvxzz|~~~~~|zxxvvtttvvwzz|}~~||zyxxvtttuvvxz{|}}~||zxvuttttuvxy{||}~|||zxvvtttvvxxz||~}}||zxxvutttvvxzz|~~~~|zzxvtttttvxzz|}~~~}|zyxvvuvvvxz{|~~~~~~|zxxvvvuvxyz|~~~~}|zzxvvvuvvwyz|}~~~|||zxxuttvvvxz{|~~~}||zxvutttvvwyz||~~~||zxvvvttvvvxzz|~~}||zyxvutttuvwx{||~~~||zxvvttttvvxz||}~~||zzxvtttttvxyz||~~}|zxxvvttttvvxzz|}~~||zxwvttttvvxz{|~~~~}|zxxvvtvvvxz{|~~~~~|zxxvtttuvwxz||}~~||zzxxvtttuvxzz|}~~~||zxxvttttuvxz||}}~||zxxvtttttvwxz||~~}|zzxvvtsttuwxz||~~}~|zxvvttrttvxzz|~~~~}|zxxvttttuwxz|}~~~~|zxxvttttvvxz{|~~~~~|zxvtttttvwyz|~~~}||xxvttrttvxz{|~~~~||xxvttrrtvwx{|~~~~||zxvutttrtvxz{~~~~~|zyxvtttrtvwy||~~~|zxvvttttuvxz|~~~~~|zxvvtttvvxz|}~||xvvtrttvvyz|~~||zxvtttttvxz|~~|zxxvttttuxz{|~~~||xxttrrstvwz|}~~}|zxvttrrrtvxz|~~~~~||xxvtrrrtuxz|}~~|zxvtrrrrtvxz|~~~|zxvtrrrtvxz|~~|zxvtrrrtvvxz~~~|zxxtrrrstvxz|~~|zxvttrrtuvz|}~|zxvtrrrrtuwz|}~|xvttrrrrtvxz|~~~~|zxvtrrrrstvy|~}zxvtrrprrtvzz|~~|zxvtrrrrtvxz|~~|yxttrrrtvwy|~|xvttrrrtvx{}~|zxttrrrtuwz|~~zxvtrrrrtvy{~|yxttrrrruvz|~|zxvtrrprtvxz|~~|xvtrppprtvz{~~|zxvtrppqsvw{}~|xxtrppqrtvy|~~zxvrqpprsux{}|zxtrrpqrtvz|zxvtrpprsvxz~|yvtrppprtvz}~~zxvrrpprruxz~|zxtrppprtvy|~|xvrrpprrvxz~~|xvtqppprtvz|~~zxtrppnprtx{~|xvtrppprtwz|~|xvrppppruxz~|zxtqppprtvy||xvrrpprrvxz~|yvtqpooqtvz}~|xvrpppprtwz~|yxtpppopsvz|~|xtrpnnprtwz~|zvrpnnnpsvz||xtrpnnortw{~xvtpnnnoruy||xtrpnnnqtvz~|zxtpnnopsvy||xtrpnportw{~zxtppnnqrvy}|xtqpnnnrswz~zxrppnnoruy||xtppnmnorvz~zvtpnnnorvx||xvrpnnnpsw{~zxtpnnnpruz}|xvrppnopsv{~zxtppnnorvy}xtrpnmnosvz~zxrpnlmoqux||xtqpnlnprvz~zxtpnlmoqtx||xtpnllmorvz}zxtpnllnqtw{|xtrpllnorvz~zxtpnlmnrtx|yvrpmlnpsvz~|xtpnnmoquy|zvrpnmnorvz~|xrpnllmosw|~xtqplllnrux~zxtpnllnosw{ztrplllnruz~|xtpmllnosw{ytrplllnqtz}|xtpnllmosw{yvrplllnpty||xtpljjmorw{zurnlllnpsx}|xtpnlllorv{|xtplllnqty||xtrnllmorv{|xtplllnptw}xtpnljlnqvz~|xrplllmptw}xtpnlllnrvz~|xtpmllmpsx|ztrnlllnruz~|xtpllllosw|xtppjjlnrvy~|xtpllllosw|ztrplllnrvz~|xtplkllnrwzztrnljknquz~xtpllkmorw|zvpnljjnpux~xtpmlllorv{~|vrpljlnotx~xtplljlnrvz~zvppjjklotx}xtpljjlnqvz|xrpljjmosw}xtpllllnrv{~|xrplljlosx|xtpmlllnrv{~|xrpljjlnrw{xtpljjjmpty}|xrnljjknsw{zvpnljknquz~xtpljjlnrw||vrnlllnqvz~xtpllklorw{zvpnljlmotx}|xtplljlnrv{zxrnljklosw}xtpljjlnrvz|xrpljlmosw|xtpnjjlnrvz~|xrpljkmotx}ztpnjjlnqvz~|xrpllklosw|ytpnjjlnpuz~|xtpljjlosw|ytplljlnqvz~xtpljjlnrw{ztpnljjlpuz~|xrpljjlnrw{zvqpljjnptz~xtplljlorv{zvrpljlnpty~xtplljkmqvzzvrpljjlotw|xtpljjknquz~|xrpljjlnrw{xtpljjknruz|xrpljjlnrw|xtpljjlnouz~|xtpljjkorw|zvpljjkmovy~xtpljllnsw{zvrnljknquz~xtplljlnrw{zvpnljjmoty~xtpljjlnrvzztrnjjjlotw~xtpljjlnrv{|xrpljlnosy}xtpnljlnrv{|xtplklnptz}xtpljjknpuz~|vrnljjlorv|xtpljjkmouy~|xrpljjlosv{ztpnlklnrvz~xtpljklosw{ztppljkmqtz}xtpnjklosw{zvrnlllnquz~xtplljlorw{zvrnlljlptx}xtpljjknqvz~zxqnljjlotw|xtpljjknrvz~|vrpljjlnsw|xtpnjjknqvz|xrplllmotx}ztpnlllnrvz~|xrpljjlorw|ztpnjjkmoty~|xtpljjlnsv{zvpnjjknoty~xtpljllosw|zvrplllnrvz~xtpnllmosw{|vrplllnptz~xtplljlorv{~zvrnljllosx|xtpnlllorv{|xrpljlmotw|xtpnlllnrvz~|xtpljllorw|ztpnlllnquz~|xrpllkmpsw|xvpnljlnquz~|xtpnlknotw|zvqnljlnqty~|xtpnllnnrvz~ztrpljkmptw}|xtpnllnnrv{~zvrplkknqty}xtpmlllnrw{~zvrplllnpuy}xtpplllnrv{zxrplllmosw||xtplljknquz~zxrpljlmosw|xtpnlllnrvz~|xrplllnosx}zvrpnlmnrvz~|xtpmllmosw|xtpplllnptx}zxrpnlllosw{yvrplllnrvz~|xtpnllnosw{zvrplllnqtx||xtpllllorvz~zvrplllnptx||xtpnllmosw{~|xtpnlnnruy~ztrpnlnosvzzxtpnllnruy~xtrpllnosvz~|xrpmllmptw|~xtpnlllnrvz~|xtpmllnptw{|ztrpnlnorvz~|xtpnmnnpuw{zvrplnnorvz~|xtpnlmnqtw{zxrpnnnorvy}|xtpnllmosv{~|xtrnlllnqsx||xtpnllmorvz~zvrpnllnrux||xtppmlnprvzzvrpnlmnrux||xtpnmmnotvz~|xrpnnmnrvx|yurpnnnptv{|xtpplnortx||xtqpmmnorvz~zvrpnllnptwz|xtrpllmoruy|zxtpnnnnqtx{zvtppnnpsvz~|xtppnnnrtw{~xtrpnnnprvy|zxtpnnlnpsvz~zvrpnnnosvz}|xtrpnnoqtw{~zxtpnnnprvy||xtrplnnptvz~|xvtpnlmnrtw{|xtppmlnpsvz~zxrpnnnprvy}|zvtpnportw{zxtrpnorsvz}zvrppnprswz~zvtppmnoqtx||xvrpnnnprvz}~zxtpnnnoruw{~|xvrpnnnprvz|~zxtppnnortw{~|xurppnnprvz}zxtqpnnoqtx{~|xvrpnnnprvz||xtrpnnprtx{~|zvtrpnpqsvz}|xvrpppprux{~|yvtpnnnprvx{~zxtrpnnnrswz~|xutppnnprvw{~}zxtqpnnoqtwz}zxtrppprtvz||xxtrppqruw{~zxtrppprsvz||xvrppnprtxz}zxtrppprrvx|~|xvrppnoqtvy|~|yxtppnoprtw|~|xurpppprtwz}||xtrpppprvx{|zvtqppprtwz}~zxtrpppprvx{~|xvtrppprsvy|~|zxtrppppstwz~|zxtrppprtvy|~zxtrpppqrtwz~|xvtrppprtvz|~|zxtrpppqrtwz||yxtrppprtvz|~|xtrpppprtwz}~|zvtrppprrvx{~|xutppppruwz||zxtrppprsvy{~zxvtrpprrtvz|~|zvtrpppqsvx{~|zxutpppprtwz|~|zxtrrprrsvx|~~|xvtrppqstwz|~|zxtrrpprtvxz}~|xvtrpppstwz|~|zxvtrpprtvxz~|yxttqrrtuwz|~|zxurrrqrsvx{~~}|xvtrrprrtwz{~~|zxvrrrprsvwz|~}|xvtrpqrrtwy|~|zxutrprrtvxz}~}|xxtrqpqrtvy{~~|zxvtrrrrsvwz~~|zxvtrrrttwy|~|zxvtrqrrtvxz}~|yxtrrqrruvy|}~||xvtrrrrrvwz|~~zxvtrqqprtvxz}~~|zxvtrqrrtvxz|~~~|zxutrrrrtwx|}~zxxtrrrstvxz|~~|zxvtrrrttvy|}}|xvttrrrtvxz|~|zxvtrrrstvyz|~~|zxxtrrqrrtvzz}~~~~|zyxtrrrrrtvxz|~~~~|zxvtrrpqrtvxz|~~~~||zxtrrqrrtuwz|}~~~~|zxvttrrrttvxz|~~~}|zxvtrrrrtvxz|}~|yxvttrttvxz|~~~|zxvttrtttvxz|}~|xxvttrrtvwz|}~~~~|zxxtsrrttvwz|~~~|zxvutrrrrtvxz|~~~~|zyxvtrrrrtvxz||~~~~||zxttrrtrvvxz|~~~~~|zxvvttrstvxz|~~~~~|zxvtttttvvz|~~~~|zzxvttttvwxz|~~~~|zxvttrttvxzz|~~~||zxvtrrttvwz|~~~}|zxvtttrttvxz|~~~~~|zxxttrtttvwyz|}~~~||zxvttttstvxz{|~~~||zxxvtrrttvxy{|}~~~||zxvttrttvvxz||~~~~|zxxvtttttvxz{|~~~~||zxvuttttvvxz|}~~~~|zyxxvtttuvxz{}~~~~~||xxvttttuvxz|~~~~~||zxvtttttvxyz|}~~}||zxvutrrttvxyz||}||zzxxvtsrttvvxzz|}|||zxxvtttrttvxzz|~}~||zxxvtssstvvxzz|}}|||zxvuttttvvwzz|}~~||zzxxutttuvxzz||}~|||zxxvuttuuvxyz||}~||zzxvvtttvvwxz|||}~}||zxvutttvvxzz||~~}|zzxvvvtttvwxzz||~}||zxxvtttttvwxzz|||||zzxxvttttvvxyz|||||{zxxvutttuvwxz||||||zxxxvttttvvxzz{|||||zxxvtttttvwzz||||||zzxxvvttvvvxzz||}|||zzxwvvtuvwxyz||~~~||zzxxvvvvvxxz||~~}||zzxxvvvvvvxyz|||||||zxxvvttvvvxzzz||||zyxxvutttuvvxyz|||||zyxvvutttvvxxz||||||zyxxxvvvvwxxz||||~|||zxxxvvvvxxz|||~~||{zzxvvvvvxxzz||||||zzzxxvvvvvxxyzz|||||zzxxvvvuvvxxzz|||||zzxvvvvtvuvxxyzz||zzzxxvvtttuvvwzz|||||zzxxwvvuuvvxzz{|||||zzxxxvvvvwxxyz||||||zzxvvvvvvvwxzz{z||zzzxxvvuvvvvxxyz|||zzzxxvvvvvvvxxzzzzz|zzzxxvvuvvvwxxyzz|||zzxxxvvvvvvxxzzz{|zzzyxxxvvvvvwxzzzz|||zzxxxvvvvvvxxzzzz||zzzxxxxxvvxxxyz{|||||zzxxxvvvxwxxyzzz|{zzyxxwvvvvvvwxyzz|||zzzxxwvvvvvwxzzzzz|zzzxxxvvvvwvxxyzz|||z|zzxxxxvxxxxyzz||||zzzxxxwxxxxxyyzz{|||zyxxxwvvvxxxxzzzzzzzyxxxxvvvxxxxyzz|z|zzyxxxvvvvvxxxzzzzzzzzxxxvvvvvxxxyzzzzzzzzxxxwvvvwxxzzzzzz|zzzzxxxxwxxxyyzz|z{|zzzxxxxwxxxxzzzzzzzzzyxxxxxxxxxzyzzzzzzzzzxxxxvwxxxzzzzzz{zzyzxxwxxwxxxyzzzzzzzzyxxxxxwxxxxyzzzzzzxzxxxxvvxwxxxyyyzyzyxxxxvvvvvxxxxzyzzzzzxxxxxxxwxxxxzyzzzzzyxxxxxxxxxxxzzzzzzzzzzxxxxwxxxxzzzzzzzzzyyxxxwxxxxxzzzzzzzzzxxxxxxxxxxyxzyzzzyzxxxxxwxxxxxxxyzzzzzzxxxxxxxxxxxxxzyyzzyxxxxxxvxxxxxxxxzyzzzxxxxxxxxxxxxxxxyxxxxxxwwvwvwxxxxxxxzyzzzxxxxxxxxxxzyzzzzzzyzzxxxxxyyzzyzzzzzzzzzzxzxxxzyzzzzzzzzzzyzxxxxxxxxxxzzzyzyzxxxxxxxxxxxxxzyzzyyxxxxxxxxxxxxxxzzzxzyxxxxxxxxxxxxxzyzyxyyxxxxxxxxxxxxxxzxzyzxxxxxxxxxxxxxxzyzzyyzyyyxxxxxxyxzyzzzzyzzzyzzxzzzxzzzzzzzzzzzzyyxxyzzyzzzzzzzzzzzzzzzzzyyzyyzzzzzzzzzzyyxxxxxxyxxxzzxxzxxxxxxxxxxxxxxxxxxxxxxxxxxwxxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxyyxyyyxxxxxxyxzxzzzzzzzzzyzxzxzzzzzzzzzzzzzyyyzyyxxxyzxyzzzzzzzzzyzxzxyxyyxxyyyxyzxxyxxxxxxxxxxxyzzxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzyzyzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxxxzyyyzyxxxxxxxxxxxxxxyzzxzzxxxxxxxxxxxyyzyzzzyzyxyxxxxxxxyzzzzzz|zzzzzzzzzyzzzzzzzzzzzzyxxxxxxxxxxzzyzyzzzxxxxxxxxxxxxxxxyxxxxxxwwvxwwxxxxxxxxxxxxxxxwxxxxxxxyxzyzzzyxxxxxxxxxxxyzzzzzzyzxxxxxxxxxxxzyzzzzzzyzxxxxxxxxxxzzzzzzzzzxxxxxxxxyzzzzzzzzzzyxxxxxxxxxzyzzzzzzzzzxxxxxxxxyyzzz8 "$&)+.036:=ADIMRV\agmtz$5H[p'Hk :lO nu@#" A 2 ]G?E[d``````^^^\\\ZYXVVTTRRPONNNNNPOOPPSV[bjqy~xrh`PD80(&$  #)-27?MWeow~zrj`XPHB@:62.*((),.268BFJNSZ_kwp`TJ@2$7?U_kwpdXPD<0( &,3;?KS\dkqvy|~|xrlhd`\XTPJFB@@BDDDDCDFKOSVXXXZZ^`bdd``\ZXZZXVTPLJHJJJJHHFFGKNRTVXZ\^acgjjjhhffdb`^ZVRNJHD@<9620,***,./259>CJOW_gsp`@0  +7G]oĺvj`P@2( "'/7?GOY_gnrvvxxxxvtpjd`ZXVTPNJFDDFJNPPPPPRTY\^^\ZXVVXZZXTRNLLLNNNLHFDDEFHHHFDDFHLNQRTTVZ\_dfhhhhhhffd`\XTPLHD@<8520.,***+./247:>CGOW_gohP0 '?OZcodXLD<4, )/5;CKU_glpprrtvvtph`VPNNLLHDB@BGOW^`b`acgnrtrld`ZXXXXRLF@>>AEGGFCBCFJNPPNLJJJLNPPNNNORTWYZ\\^_bbcb``\ZXVTPLF@>:86410,($$#$$$$$'*/7?KWg{p`@ ?_p`H4( %*.//3:CO_lqrrrrtvvtl`PD@<<<:60*)-7?S_fjjmr{th`ZVRLD@0,(,2:?FILOV^flpplh`\XTPH@6,(&%'),.06=GO^flprtx{~~|xpdXPD@60$ '7GWgШ`@0 %)/?_p`LFFJJHD@?FO_o{~ztpnruvthXH:2038:84007?Wgu{~~~l`PD@82* -7DNW_kwxphXL@0"&/?MWbfjlnrtvtph`PH@<84,$ #$" #+3:?EM[oРP0 7GV_oȸxlXH:8;DNUWVV[fsxdTJFDB<0 ';O^gnwrh`H@$&/?O_uxp`TD:40,*(&&)/7EO[addbbbddb`TLD<64320,($""%(,..,($ "$)/;G[oP ?ghXPLMOPMMR_ohP0+?_hP@( '2>KW_krvwtpjd`XPH@80..06@BB@@>=94," ;Wo@?ozrdP0 ?WkzȨhX@ +?OghXH4$/?O]gowdP4 '?WohP@(/?O[dhjhbXP@0 ?oP(7KW_gwpD(/Owа`@(  /?_xpj`TH8( +>O_op`H8(7GWgoyrdTD8,%" "#&+5?ISZ^^ZTLB8, '?Wo`@$/?Wgnlhdddb`XD0/;G[k¸p`XLD@BDGKORRRW]cgllh`PH@<>CJNNJHB@BKV_jnnjbZTPNNLH@80(#"$*/7?EILNOQRTVWXXTPNHD@@@@@@B@><:866440*$+27?O_`@05?Wop`J@8:;:80( '?_pb\\_mztdTD@?ENW^^XPD@=?MWelpl`TH@:BGKKH@80($&+2:?DDB@<:<>BFGHFB@82,*((()*(&" #*2>K_wȰphfo`@( +:CJLJJKOV_jsz|zvph`ZVTVY^dkry~|tj`TLDABDJOV\bfiklllljhd`\VPLJHHILOTW\^``\XTNJFDBCDEFFFEDDDDDEFFFFFDDBA@@>><<:886668::::986678;>BFKOU[enw~xrrtyxtrtvzzxtph`ZTPOPRTTRPLJHJLNRTUVTTRRRRSTVVVVVVVVXXZZ\\\^``bdbb`\XVRPNLLJHD@<:::<>>>=<86656688888789><=>?@AA@@<:8688:<<<<<:;;<<>><<862.*($" !$(.5>GWfv|z~xrpnorttrlh`XPLJKNQRRPLHHGHJNOSUVVVUVWZ]_bddb`^\\ZZZXXXVVTTRPPLJHDB@<886666668:>?BDEDDDCCCDDEFFDDB@@@@@@@@>:50,($""#'*/5=GS_o~|xvxvrprstvtph`XPJHHLOSTTPNLLNPTY\^``^\ZZ[]_bbbb``\\ZZZZYXXXXWVTRPLLHFB@><:99888:<>?BBCDBB@@@@ABBA@@><<:;;<<<<:620*(&&*/5=ENWeo~|~xrpnpqrrphbZTLHHKOTVVTRPNNPQTVZ\ZXVTRRTW[^_bbbb```^^^\ZXVTPNJGDB@@<9866689::<>?@BB@@><86434466678889:<>?@@@>:840.,-/4:?KV_ozvrpppppnhd\TPLJLOTWXXTPLJJJKMPQRRRPNPRTX\_bcdddbb``^\ZXVTPNJHDBB@@>=<<<=>>>>>?@@@@@><<:8889:;<==>>>>>>><<:820,(&$&',29?M[gwxrliijnprrnhb\VRPRVYZZXRPJHHHJNSVXXXXVVXX[]^^^\ZXTRPPPNPPPRPPNNMLLLLHHFDB@><<<<<>?@BABBA@@@@@@@@><<986666766420.,*+,/37?GO[gs|vplkllljhb\TPLLOTZ^_^\XTPNKKMORTTRPNNORVZ]_bbb`\XVSRPPNNLJHFDDDDDDBA@@>><<;;;=>>@@@@@@@@BBCDDDDDB@@>><<:86420.,,*,.26=FO^gu~||~ztpnnopplh`ZTLJJNRWZ\\XVRPNLNPTVXXVTRSTVZ]_bbb``\XVTRRPPNLLHFFDDDEDDDBB@@>>>>>?@@@@@@>>>??@@BBBBBB@@>>><<:88441000136:?GO]goz~~|xtttx|xvtvvvrph`XPLJNSWZ\ZXTRPNNNQSTVTRPNLNNRUXZ[\\\ZXVVTTTTRPPLJIHHHHHFFFDDDDBBBBBBBBB@@@>>>??@@@@@@@><<<<;::86422001258;?DJS_js{|xvtv{|vrpprrrphbXRLJKOTX[\ZXTRPPNPRUVVTRPNNOQUXZ]^^\ZXVTTTTTRQOLJHHHHHHHHFFFFDDDDDEFFDDBB@@@@@@@BBBBBA@@>><<<:8842100/0249>CIOZdluz}|xxvwzxvuvvtrnh`ZTPPRVXZZXVRPNNMNORTTTTRPORTVYZ\\\\ZXXVVUVTRPNLJJHHHJJJHHFDBBBCBDDDDBB@@@@@BBBBBBB@@@>>=<<<::8520/.../147:?DKU_kuxxvvttpjd\XRPRTW[\[ZVTPNMLLNNPPPPNNNQTVXXYXXVTTRRRRRRTTRRRRPPPPNLJHHFEDDCBBDDFFFDDDBBA@@>>><<::8788::;<:8642001247:>AGNWcoz|xxx|xvtrrrplh`\XTRTX[^^\ZVTRRPPNNNNNNMNNPRVXXXXXXXXVUTRPPNNNONNNNNNNNLLJJJJHHHFFFGJJHHFDDBBBB@@@><::989:<<<:9844212368:>?EJOYeozzxxz~~ztplhedb```^\\\ZXXVUVVVVTPLIHHJLNOPRTVXXXXXZZXXVTRRRRRPPNMLLLNNNMLHHFDDDCDEGHHHFDCCDDBB@@>><:::88888888664422246:>CIOZcowzxxz|xplhfdffdb`ZVTTVZ\^^`^\XTPNLKLNPPPPNPPPRSTVXXXXVTRRRRRQRRPPNNNLLJHHFFEDDCBCDCDDDDDB@@><<:8866544444455444222469<:865422222111112368:>BFLS[fow~ztrrrvx||xvtrplh`ZTRQRVWZZZXXVVVWXYZZZXXVTTTTTTRRPPPNNNNNOPRRRRRPPNNLLJJHEBB@@@@@@BCDEFFFDDBB@@<:86310..,,,,,,.0259>CIOW_jsy~|xrpnprtxz||}~|xvqlhb\XVUVWXZXXVVVVXXYZZZZZXXVVTTTRPPNLLLLLLLLLNNNNNNNNLKJHFDB@@@>>>>>>?BDEFFDDBB@@><86410.,,***+,-/26;?GOW_nw~xrnnpqsvvvvvvxy|~zvphb\XVVVXYZXXVTTUVXZZ\\ZZZXVVVVVTSPPLLJJJLKLNOQRRRRPPPNLJHDDB@>><<<<>?BDFFFDDBBB@@<98420,*)(((*+.038>FOZfozxrppqrtvttppporu|zvph`\XTTVVXXVTRRSTVX[]^_`^\ZXVUTTRPNJHHHHIJJLNPPRRRRPPPMLHFDB@><:::;<>?@BBDDDCDB@@<:6400,(& Othd``\ZXRNLOV_gouvxvx{~|tpd`XPD80& #+29?GO[gvp`XJ@4,$  ""#$&(*)($! "%),048;>@BBB@@<:40(" +;OkX@?Wk{xhXPDBEKSZ^bgnt}xrh`XLB82*&# !'.7?FJNOPPRPPJF@80,($$#$$&*-16:=>>><9840(   '7G_h@?_hXH@=?EJNRTVZ_fntvxtph`ZVRLH@<8668:<>ACFJORTTPLHB@:61,& $(,05:>ABB@@84.(  /?_ఈ`@/Ow`H8,&(,1469=BKV_glnnljhhdb`XTPLJJJHFDDDDFHHHB<40*($"#'-27FO_nz~|th`PB80,$ +7?LQRRRRRRNH@4( /?_Ȩ` ?[wȰtbTL@4('7GWgovxz~pbXLB80 /;FMRW\bfhf`XPH@<88:?O_oP 7OgȰp`H0 5?S^gozxpdZP@( &/?KW_mrvtrpnljkowX@(/?_hP@( +7GVgwxhX@0/?O_js{p`LD>82(  #*3?O_o|´p`P@0  '7GV_iou{xp`TH@4( />JW_opXD80,("  &/49>ENWgs}xpdXJ@4*$ &-39>AEIMQTTTPLJFD@<82,$   %+1;K]odXLD8,  "&+5?KV_jrw|tj`XPD@40,($ #&)-0258;>?BDDDBBBB@@<840,('$"!  #',/47>EO[gvxrldXPHB><<=>@ABEHNU[_fjnsyxrld`XRLHDB@@CFJNRV[_bcdb`\YVPLHD@:642000000023578::::<>?BDEGJNSZcmu{|xtpnljlllljjklnrvz~~~~~~~~zxtrpljjhd`\ZXXWXYZZZZ\^_`abdbb``^\XVTRNLHFDB@>>>>>>><::98888866444445689CIOW^cfffgkorvvxvvtrrtvx{~~|||yvrpjfdbb`\ZXXVVTTTRRRPNLHHFDDB@@>><::::<<<<:866544465665444468:=?FMT[bfhhfgjloppppnlllllnrvz~||zzxvtrrppnljhddddb```````^^\\ZXVSPLIEB@>:88420.../000/../0124467888778:CGOZbhlnnllnrtvvwvvtttrvvz~~~~~||zzzxxtrplljhfdb`^\ZZXXXVTRPNLHFD@@<<:8642111222220000002356888654468><986446666666666668:<=>><:8888:;?DLT\cgihhfgknprtttttttvwzzvrppprrrrrqrrrrppnnljhfdb`^^^^\[ZXXXVUTRPLHFFDB@><885422102000001368:<<<<<::::;=?DKRZ_eghfdehjlortttutvvxz~~|xtpljjjllllllllnnnlljhfdb`^\\ZZZXXVTTRQPNLJHFFDDBA@><<:866444221000024566788888::<>?FMU\cillljhjlnrtvxyzxzz|~|zxtpljhhhjlnnnppnlljjhgfdb``\\ZZZZZZXXXVTTRPPPPPPPLLHFFDB@@><:8864444456666688889::::<>CKU_gnrrpnllmnrvxz|zzxxx{|zxxxvrphdb`abdffhjklllljhhfdb`^\ZXVVVVVVVVVVVVVVTTUVVVTRRPMLHFCB@@><:886668888876666688::;<=>BGOWcmtxxtpnlmorvy{}~||||~xvttttrplhd``^_`bbccdfffffdbb```^\ZZXYYZZZZZZZZZZZZZZYXZZZZXXTQNLHFFCDB@>::89:::88666556668::<<>>@DHOW_jovvtpnlnnpsuwyzz|||~xrnjjjjjjhd``]]^_`bbcdefhiijjijjjhdb\XTRPRTVXZZ\\_bdfhkowp`P@*  &*...+("'7GWkxvvz~p`PB84,$/;GO[gq}phb\ZZ\_cfjowpf`TL@<:BFKQ[gtporw{~}~~t`P@0**(((*.7GWgquvvvvwxtpd`ZZ^bfjnt{xpfdehjljfbacinrttpld`XPHB@@CFKORTWZ]^^^\XRLF@<89<>CGKMNOPRRRPLF@60*&$$""""#%'),/37BGJJJE@80,(%$&'*-038=CJOV[^`bado´|z~|zvpbTD:359?DFHJMT_gnnhb\XTVZ\\^_cfjnrtvwyzxtlbXPLMS[befffhlrttphb\TPLLLMQW_fjlnlifddb`\XTPNORV[_fijjgd`XTPPLLJHFFGJNSWZZZXTRNLHFDDBBDEGHKLMNNLJHFDBBBBCFHLNT^gw~~|~xph`\\\^```^_```\ZXXXY\\\\ZXVVXZ^`bbbbbb``^_`bfhhhdb`^^``bccb`````bbba`^\\ZXXXZZZ\[[\\^`bcddddbb``````bbdddddbbbb``^\ZXXVVVVVVTTRRPPNLLJHIJJKLNNNPPPPPNNNNNNMMNNNNPPRSTTVX]cjotvtrpnmprw|||~|tpljjllnljfb`ZXXXZ\^\ZXTPNNPRTVXXVVTRRRTUVXYZZYXXZZ]^```^^\ZZYYYYZZ[[ZZZZ\\^^__`````bbbbddffhhgffffddddddbbb````````^\ZXXVVVVTTTTTRRRPPPNNLLLLLLLLLLLNNNPPPPRRSUZ_flqtttpppprtwz||||zxxvvx|zxtttvz|~~|xtpnllnnopljfb^\ZZ\^_``^ZXTRRRTTVVVTTRRTUVY[\^^\ZZXXYZ\^^]\\]^`bdfffdddbb````bbbbbbbbbbbcdddbb`bbbcdddefdddbbbbbb```^^^^]\\\[ZZZXWXVTTRRQRQQRRRPPPNLLLLJLJJHHFDDDEFHJKLNPRTX\aglptttrrrrtw{||||~|zvrpljjjjjhd`\ZXVVXZ[\\ZXVTTTTVXXXXVVUTUVXZ\^^^\\ZZZZZZ\ZZXXXVVXXZ\\\\^\^\\^^_`````abbbbdfghhhfffffffffghhhhhhghhhhhffdbbbaa`````^^\\ZZXXXVVVTTTTTTTSSRQPNNLLKJJJJHHGFFFHHJLNOQRRTV[_dimoppnnnoqtw{~~zxvvvxzzzxtpljhffhhhhd`\XVTTVX[\^\ZXVVVVZ\]^^\\ZXXXYZ]_```\\YXXZ\^^^^\\ZZZZ\\^^^^^\ZZZ\^_`````^^^^_bbddddcbbcddfhhhfffddddeffddbbb```bbbbb```^^^^\\\ZZXWVVTTTTRRRRRRRPPPNNMLLLLLLKKJLJLLMNNPPRRTVZ_cimprpppppqtvy{~~~}||z|~zxxxz|~|zxrnjhhhhjjjgd`\YXXZ\_`a`^ZXTTTVXZZZZXVTTTUXZ^_``\ZXVVWY[\^^^\\ZZZ[\^````^\ZZZ\^`bbbb`````abddfdddbbbdfhjjjjhffddffhjiihhfefffffffdb``^^^^^^^^]\[ZZXXXVVTTRPPPPPPPPPPPPPPPNNNNNNNLLLLMNNPPPPPRVZ_dgjjhhhhhknrtvyzzxxxxz||zxxz|~|xtpnlllnnnnlhd`\\[\^````\XTRPRTVXXXXVTTRRTVZ\^^\\XXVVWZ\^``^\ZZYZ[]^````\\ZZZ\^_`a``^\Z[\^`abb``^^]^^`bbdddbb``abdfggghfddddfghhhhffddbcdddfeddb`````aa```^\ZXXXXVXVVTTRRQRRRRRRQPPPPOOPPPPPPPNNNOPPRRTTVY]adhjjjjjjlmortvxxzxxxyz|~|zxxwxzz||xvtpnlllllljhfb`\\Z\\^^^\ZXVTSSTUVVXXVVVTVVXZ\^^\\ZYXXXZ[\^^^^\\\\\^^````^\\\[\^_bbbb``_^```bbbaa`````bbdddddbbbbbbbddcdbbbbbbbdddddddbbbcbdddcddbbbbbbbbbbba```_````^^]\\\\[ZZZZZXXXXXXXXXXXXXXXXXXXXXXXXXXXWVVVVVVWXXXXZZ\^_`bddffffhhjjllnnpppprrttvvvvvvvttttttttsrrppnnnnlljjhfdbb```^^^\[ZYXXXXXXXXXXXXXXXXYZZZZZYXXXXWXXXXXXXVVXXXXZZZZZZZZZZ\\\]]^^^^^^^_``````````abbbbcbbbbbbddddefddddddfffffeffffddddfffffeddddddddddddbbbbbbbbbb```^^^^^^^^\\\\\\ZZZZZZZZZXXXXXWXXXYXXXXXZZZZZ\\\\\\\\\\^^^^^^^^^^^_``bbddffffhhhhijjklllnnnnnnppprqrrrrrrqrprpppppnllljjjhhhffddbba````^^\\ZZXXXXXXVVVVVTVUVVVVVVVVVVVVVVXVXXXXWXXXYZZZ\\\\\\\\\^^^`````````abbbbbbbbbbbddddfdfdddddefffhffffffghhhhhhhfffffffffdddbbbbbbba`````^^^^^^^^^^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]^^^]^^^^^^^^_`````_```^^^^^^^^^^^^^^```````````abbbabbccdddddeffffefffhghhhhjhiiijjjjjjjjjhhhhhghffddddbbbb`````^^]]^^\\\\\\\\\\\\\\\\\\\\\\\^^^^^^^^^^^^^^^^^^^^^^^^^^```````````````aabbbdcddddddddddddddddddddddddddddddddddddcbbbbbbbbbaa```````````^^^^^^^^^^\]\\\\^^^^]^^^^^^^^^^^^^````````abbbbbbbbbbbbbbbbabbbbbbbbabbbbbbbbbbbbb`aa`b`b`aa``````````````````````````````a``````````````````````````````ababbbbbbbbbbbbbbbbbbbbbbbaabbbbb```````````````````````````````````````````````^^^^^^^^^^^^^^^^^^^^^^^`^`_```````__```````_``````````````````bbbbbabbbbbbbbabbbabbab`a``a`aabbbbbbbabbbbba`ba````````b`abbbabbbbbbbbbbbbbbbbbbbbbbb`b`a````````````````````````````````aabaabbbabaaa``abbbbbbbbbbb```b`a```````````````````_```````````_`___```````^````````````````````````````````````````````````````a`a```aa`````````````b`bbbbbbb`a``bb`````````````````````````````````````````````````````````````````````````````````````````````````````````````````^^^^^^^^^^^`^^_^````````````````````````````````````````````````````bba``````a`ababba`aaab`a``a``````a```bbbbbaabbbbbb`````ab`aabbbbbbaaabbabaab``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````a```bbbbababbbbbbaab`````````````````````````````````````````````````````````````aa`b`b````````````````a``````a``````````````````````````````````````````````````__```````__```^^^^^^^^^^^^^^^^^^`_````_`````````````````````````````````````````````````````````b`bbbbab`a`bb`bbaaab`a```````````a``b`a`baabbaabab`bbbbbbaabbbbbbaab````a`ab`a````````````````````````````````aa```````````````````````````````````````````````````````````````````````````````````````````````ab````````````````````````````````_````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````__```````_``^^^^^^^^^^^^^^^^^^^^^^^^^```````````__```````_````````````````````````````b`bbab`b`bbbbbbbbbbbabbbbbbbbbbbbbbbbbbbb`a```````````````````````````````````````````````````b`bba``b`a`abbghdddb```bbabbbbabb````_^````````````````bddfddb```^\\^]\\^\\\\^^^bjjjjhb\XXXY_glnnlf`XVTRSVX\\\\\ZZ\^`adfjlkjhfdb````````^]\\[\]^`bcddcdbb```^^_`````^`_```fnppppstppjd\XVRPLNNPPRRTWZ^bdffdffhjhd`\ZXXXXXXZZXXXX[^bdffffffffhhihhfdb```^\\ZZZYXXXZZ\\^````^\\[\^```^\\ZZZ\^_abdb`bbddefefffdb````\Z\\\\]^^``````b``abddcbbbb``__`````^^_``bcddddddddcddb``^^^^^`^^_^^^\\]^^``````b````aab```^^^````bb`abbbbddcddbbbb`````^^^^`bdddbbbbdddddbba`abbb````````a```^^_abbbb```````````````bddddb``_^^^\\\\[\\^^``abb````abbb``^^^^`bbbb```abbbb```_`bbb```````````ababbbddbbbb`````_`^^^\\[\ZZ\\^^``bcddddcddbbba``````^^^^^^\\\\^^\\^^`aba```bbbbbbbbbbb`````^^^^^^^^\\\\\\\\^bfhhfhffdb``^^]\ZZZ\\ZZZZ\^^^^^^``````abbbbbbbba`````^``````^^^`^^^\\\\\\\\\\\\\\\[ZZZZZZYXXZZ\\\\\\\]]^^````^```a```bbddffhhhhhjjjjjhhhhhhhhhhhffffeeffffhhhjjlllnnnnoppqrrpqprpppnlljhfd``^\ZXXVTSSRRRRRPPNNNNLLJJJJJIHIJJJIJLLNNNOPQRTTVVWXXZZZZZZ[\\\\\\[\\^^^^````bbbbbba```aa``````a`abbbbbbbbddddddefffffffhhhhhhhgffffedddefdfdfffffffghhhhjjjjjjjihhhhhhhfffffffffffffffffffddfffffffffeddddddcbbbbbbbabba``_`_``^^^^]]^^^^^^^^^^^^\\\\\\\\[[\\\\\]^^^^^^_^^^^^^^^\^^]^^^^````````````````````^^^^^\\\\\\^^^\\\\\\\\\\]]^^^^^`````````````^^^]]^^\\\\\\\\\\\\\\\^^^```````bbbbabbbbddddfffffhhhhhhhhhhhhhhhhfffdddcbb````^^^^]\^\\\\\\ZZZZZZXXXXXXWWXXXZZZZZZ\\\^^^```````bba````````^^^^^^^^^]^^\\\\\\\\\\^^^^_```bbbbbbbbbbbabbbbbccddddbbbb```^\\ZZZYXXXXXXXZZZZ[\_dinrvvvx|ztphdb``\ZXVVTTTTUVVXXXXVVTTTTRPNJHFFFHHHHHIKNRVY\_bfhlorsvxxxxxvvtrrpnlhhdb``^^^\\ZZZZZZZXXVVTTRRPPNNNLNNNPPRTTVWYZ\^_`bbbbbb`````^\\ZZZZZZZZZYXYYZZZZZZZZZYZXXXXWVVVVVVVXXXXXXXXZZZZZZXXXXVVTTRPPNPNPPPRW_gs{vphdba```````abbbbbb`\XRLHFD@@:6200258;?BFKOV]bgknprtvvvvtrppljjhffffghhjijllnnnlljhfd`^\XTRPNLJJJLLNPRTVX[^_bbcddbb````^\\ZZZZ\^^`abbcdddeddb``\ZXVTRRPPPNNNPPRTVVXXZZ[\\^\\\ZZXXXXVVVVUVVXXZZ[\]^^```^^\\ZXVTRPNMLLLLLMOW_kw|xplhfgilortvvvtpljfb`\TLD@8200224469>CINSWZ^`bbbbb```^^^_``bdhlptvzz||||||xtpjf`\ZXVTRPPNNPSVXZZ\\\\ZZZXVTTQPNNMNPRTVX[^_bfgjjjjjhfdb``]\ZXXWWWXXXZZZZXXXVTTRPNLLJJJLLNORTVXZ\]^_``^^\ZZXXVVVVVXYZ\\^^`````^\XXTQPNLLJJJJKOW_ovrruxxxvttvx{|th`TLHB@<840.,.39?GLORRRRRRRRRRQPPPOQTZ_gnsw{}~|tpjfb```^^^^^^`bdeedb`ZXSPNLJJHHHHJLOSW[_abbdbbb````^^\\\\^`dfhjkllljjhhfb`\XTRPNNNNNNNOPPQRTTVVTTQPPPPRRSTTTTVVXZ\^^^^^^^^```bbb```\\\[[ZXTRPLLLLNNNPOPU_orlmr{|xtph`PD@669?EJNNNLIHHJJJJHD@:4337?JS\bfhjloswz||xtphffgjmprrrrpppppnlhb\XRNLJJJJLNNNPPRTVWXVTRPPPPRTWXZ\]_`cfillnlljhfffhhhhgfcb```_^\ZXTPNLLLLMNNNNNNMNNNNNNLLLJLLORUXZ\^^``bbbab``\\\Z[\\^^```^^\ZXXTRPLHFDDDFGHJJLS_oz~|pd`Z[_b`\XPLNQW\^\TL@4,&#%*2;?GLLLLNRW_dfd`ZTRT\foy|zzxxtplhb`^^beilljf`XPLHDDDDDDFHKORVXYZZXTRPNNOSX^bfjlortvxvtplhfddfghjjllllhfd`\XTPNJHHHIKNPQPPPLLJJHHHHIJLNORTWZ\^^`^\ZZZ\^`bbcdfhjklljhd`^ZXVTTTTRRRPPNNNLLJHFFHO_otns}ph`Z[_jqvvrh`XPLJHD@82,((*/7?KSVTPF@646=FNV[^_bfjow{||xtpjhhjosz~|vphb`\\ZXVRPPNPTVXXXRLH@><=?DINQUX\_cddb``^^_bdglqvz|~|zxtplhhfddddfghhhd`ZTPLHFDBCEGJLNOPNLHFDB@@@ACFKOTXZ\\\\\ZZZ[\^_bdfhhijhihhd`^ZXXZ\^^]\ZXVTPNLLKLJKKLOT^k{p`X_oxrpllowxhXH@87;?GLNPNJF@>::<<<:6447=GS^dhf`\TRPSW_fmsw{||zxtqpnljjhhhjlnrrpphbZRLHHJMQVYZZXVTPLJHHHJLNRW\biottrld`\\^bglrvz|~|xtplhfddbbcdfhjjjhb\TPJHHJMOPRQQPPLJHDB@@@@CFKOSVXVTRPLJLNQVZ]adffhhhhdb`^\\^`cfhhhfb`XTPPNNNPRTVXZ\_bddfjowxpfgnz|xtrppplh`XPLLLNRTTRPJD@:868;?CFFDDBCEGKNNPRRTVX\_cfhhhhhffdffilorttpnlhfdbbbb`````^^\\ZZXXVVTTTVVY[\\\\ZYXXZ\_dgjjhfdbbcdfjlnnnnljhhffhhhffddbabbbb`\ZXTRRRRRSTTRRPLJHHHHHHJJJKLLLNNPQRRRTTTTVXZ\]^^^^^^^_`bbbb```^^\\ZZXXZ\^_bbbccccdddglu~pddkw|xwvx{~~ztpljhhfb`XTQRTVXXXTPLF@<::>BGNOPNJHDDFHJNQSWY\\^^^^^``bbddefhjnnpnnlhfdddfhjklljfc``]^^`abcdb``\ZZYZZZZZZ\\\]^bbddb`\ZZ\_cgjlljfd`^\]_bdghhhfd``^\\\ZZZZZZZXXUTPPNLJJJJLNNNNLJIHFFFGIKNNQRSTTTTTVVXZZ\^^^````````^^^````^^`_`bbdddddddb`^\^gsbTQ[ktlhfkspf`\^`cedb`\XVVTTRPLHD@<<>CKRVTPH@:88"The distribution and sale of this product is intended for the use of the" H"original purchaser only and for use only on the computer system specified."\ R"Copying, duplicating, selling or otherwise distributing this product without the"; \"express written permission of the author are violations of U.S. copyright law" f"and are hereby expressly forbidden."