G@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@PG1  Y0@R !L` D  C D     G)16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD`G_`$$BEOCSGEFGSDHMLCBLEEEEBSMPHISTARPDLISDLDLNUMNUMCd}C @@@"#*.Ar25@ :; BE @JM @RS Zc Bjkru@ z@}C@ @@%&-.56=>EFMP@UX@P]`@efmnux @~}C !Bhd"@d#AU$@ #%@()&03'@X8<(AD@I)BR*PQ+XY,`a-hi.pq/w --*}C,** AIR RAID-2000 *** ANTIC MAGAZINE***1*P 1983 E.F.WOLPAW ***2&;AT[,;@_f,;@js,26-@w(7 } C-AP A0! A+ A76-@1<2U6-@@F6-LT'6-AX`36-@dl?6-@pvK6-| } CU A<06-R:#,0@'-*@15@9GF6-+"@KS,&+"@Wc,PV@gm*@q86-F:%@ } C %%+@ $,,V<*A2APZ/@@F*@JP%6-Vk/ Ad#%@ot%+@ x$, } C?6-+"@,&+"@!.,`6-F:%@27%+@ ;I$+%,,,Oa*A2)%"@eAPn"A2 } CA xQ6-&@#-@"&@*1=(@5JFUEL- Q"PTAXkR 6-%+%@os%@ w$A}C r&RT:,*"%8Ap"@<bA!ApE6-%@fn/%@rv%@ z$}CA4;6-@0E A* 6-%%@ 4C!B:,*6-&@GR`&'@V^"P:'@bg,*m.6-&B-}C@ !\B2H%%+$@$%7,` E6-%@;E+6-&@IP$+"@T],7 @akE6-%@ox~}C AP." .0@$(@,4P:'@38B,b-@FJ@NU/(@Yc7<%@ g,bAVF:A,}C%@ %+@$+"@+,,227%@/5<%@9B,0$*"HL@`PYg12@]a@@el%+$@pu,@y@}C ="I6-@$U6-@(0a6-@4Eg6-5"@IW*"+%%@ [_$e5 AP%%@ }C$ )6-&@176-%$+,W"@5;)"@?E)"@IOc6-U[2@_agioqw @`}C"@,*"AP%%%@ 0@$A9% @`DS"k*6-F:%@W\%+@ `g$+%@kt,,,Jz*}C A9)"@=W67<,. a Ak Ap,W!%@AE%@ IM$S]/6-%@aiM%@mq%@ u$Ap}C4W Ap6,,,,,@ #A*67%@8><%@BO,. H%@SW%@ [_$ekT6-qb6-%@}Cn6-z6-2$(@ ,.48@<B2@FRAU@VZ@^kJ6-%@Pov$+"@z)"}C@ ,%@ $+"@!)"@%*,%@.R$+"A)"A )"A!,%@V]$+"@ak,TM-@os@w+(@}C$SCORE-7"A2C6-@(=M AP^)"@AG)0@KO@SW@[fhS"@jn12tv|}C S2@!#)+1?r16-+%@C[,""67<,..@_z1$|667<,. "@~}C60@ $]6-*.1246<>DFLRS2@VX^`fhn] Ap}C AP- @!)-%@-1%@ 59$?HW%2@LNTV\^dn36-%@rxW2@|}C@  %@d@&C6-%@*7#6-&+!@;D,C%@HL%@ Pm$Ar&] 6-%"s%6-%@}C 1"@ S2@"$*,2G] APV'@KS"P:'@Wf,$6-&8-lp@tRB2H } C %%+@$ $,V &&!@$**%@ .F B:,A"@J[A"arAPz-@vz@~!}!C/(@ 7<%@ #,E"@'+*"1=f6-F:%@AE%@ IM$@QX,z^qAP#"@u#"@"}"C&A A6-&@*4067%@8><%@BQ,. T%@UY%@ ]a$@egmu`6-@y2#}#C@ @`@@&-@*.@ 2< 2@@D@hHL@PT@Xa5-@ei@!mt5(@xRE$}$C SCUED-@&G-@#@0'1 =2@57=?EGMG Ap&DD8,96,152,84,52,24,255,153,255,24%}%G,0,255,165,255,165,255,165,1310XX32,0,0,0,0,254,190,230,230,400,0,0,0,0,0,0,85,255,48,0,240,144,240,144,255,153,249:??8&}&G8,129,66,36,24,24,36,66,129,440,80,160,72,74,60,16,16,16Djj56,0,0,0,0,24,24,24,24,64,0,0,0,0,0,0,24,24,72,24,126,255,153,2'}'G4,24,24,24,80,24,60,60,24,24,24,24,24NTT448,0,8,22,25,78,116,84,68,456,2,15,73,167,211,114,34,34,464,255,0,0,0,0,0,0,0X(}(G320,0,0,0,24,84,56,16,40bWW336,0,0,16,12,16,0,0,0,344,128,192,248,228,255,56,112,0,360,1,3,31,39,255,28,14,0l((96,255)})Cd,255,255,255,255,255,255,255v$$40,0,0,255,170,170,170,170,170-1] AF:A,&@hn*+@rA6-F:A*}*C,$AVSAR@8]#AP""6@<MA3-SW@["%%%) 3 A`A +}+CAF:A,&@K76-F:A,$AVA#A4""6@Oh1AVF:A,%@lx4$3-~,},C@ "%%%) 3 ACC8,12,50,84,88,48,255,153,255,24,0,255,165,255,165,255,165,131YY32,0,0,0,0,254,-}-G190,230,230,400,0,0,0,0,0,0,170,255,48,0,240,144,240,144,255,153,249;;88,0,0,231,24,24,231,0,0,440,80,160,72,74,60,16,16,.}.G16jj56,0,0,0,0,24,24,24,24,64,0,0,0,0,0,0,24,24,72,24,126,255,153,24,24,24,24,80,24,60,60,24,24,24,24,24TT448,0,8,22,/}/G25,78,116,84,68,456,2,15,73,167,211,114,34,34,464,255,0,0,0,0,0,0,0320,0,0,0,24,16,56,84,40UU336,0,0,0,28,0,0,0,0,30}0G44,128,192,248,228,255,56,112,0,360,1,3,31,39,255,28,14,0 ((96,255,255,255,255,255,255,255,255$$40,0,0,255,170,170,1701}1C,170,170 -1*nn6.dy!##&! wwwx$y yywxxwy&!# wy yxy xy$ w&$ $# ! $$$ xw xxywyxxwxww$$$ $ !xw yw !}2}2C 4 @"A@>nn6.d&0!$$ wywwx5$J $$$$&$$$ wx$$&$$wxN$U!$$ $$!]$k wxx$ $$ & ## p$ $!$$$ xwy$$3}3C$#&$ H96-@!@"$*2-6-@6<96-BMR-@QU@Y]#-cl7(@psyC-4}4C@U(@"Y k-(,@07(@;>OV\5-\`@dk5(@or}5}5CfA6-%@* A @)6-@.8&5 @<DA6-@HSpE6-@W]-@aj*(@nx 6-@|6}6CE(@  z5-@!@!%,5(@0?RESCUED-@CN&;-TX@\l7B2H%@pw%+$@${,7}7C ; m-@@3(@#1SCORE-6 <E-@@D@HOa(@SlLEVEL- m6-@pyz"~8}8C)0 @"C0@&*@.2@6<]0@@D@HL@PVw0@Z^@bf@jz$$ll0,6,9}9G7,7,15,31,31,31,127,255,255,0,0,128,200,252,252,252,255,255,255,255,0,2,7,15,31,63,127,255,255,25511255,0,0,128,192,224,2:}:G24,224,225,243,255,255BB0,0,0,0,0,0,0,0,0,0,0,30,16,16,56,56,124,124,124,124,124,124BB30,16,16,56,56,124,124,124,124,;};C(124,124,0,0,0,0,0,0,0,0,0,0,0'@,4"P:'@8K,&#A `26-@OSL0Y[aciof0@su{<}<C 0@@@ &0@*,24:@0@DFLNTZ A^q3 #A @6-w30@=}=C@ @)-#'@+")A%I7-%A%%+A($,%A!%%+A($,;"A>}>CE I $6-@&6-@X*@d6-F:A,&@Dx&A2BBy@6-AV$RAY@F|?}?C dB2w@2+-%A%A$'8E+ $E-KO@Sh1B2H%%+$@$l,EB2V%@@}@C. 8A#@ P$BW%6-F:A`,%F:Aa,$AV9%@TbA4C#AfW-A6AbLA}AGff72,169,6,141,10,212,141,26,208,169,14,141,22,208,169,224,141,9,212,173,122,210,141,24,208,104,64V#"  #AB}BC `D%@(@ &)-@*.@#29D(@=^ ҠĠjIA@b'BBAI6-F:@C}CC,%AV$F:@9,t$~ A%%@ =A$GR!!%@VZ%@ ^b$hq0-@ uw~D}DC&(@ (0 AP46-&@,2%-@ 6:%@G4(@KX %6-^f6-@j% A6-E}EC>6-%@!6-%@%@(6-F:,16-F:,>6-6@ DM?-@QZ(@^j *"@n0-?(@F}FC M-@@2)96-P:H:@-2,$@6;,%@?EM0@IO@S`)6-%@dl!@px)6-@|G}GC 776-+"@,&+"@%,&+"@)1,%+"@5T, 6-%%2Z^Abf@jn@rxG2@|H}HC AU@@i2@!-A%@15@9?2@COAP@SW@[e -ko@sy2~I}IC   '6-%-6-A19'6-@=M((6-%+ @QZ,&++%@ ^n,!B:,,)"tz)0@~J}JC@ @()"@ &)0@*,24:C2"IqA`< ApF; A`6-w%6-K}KC16-@; @P%P+4' @P8AZ?-@EI@#MT3(@XҠĠ 9!?6-d_L}LC@wAT*T: ,"@$*<-@.2@6=U(@Ad GAME OVER _ An!6-@hn!@wrtzxM}MG$ D:AIRRAIDSGEFGSDHMLCBLEEEEBSMPHISTARPDLISDLDLNUMNUMCdNC^PQDSAMD6LINEALKEYMASPPERASISAMFLAKESASTINDETALLINPIXELSJCgioqwy}O}OC #$+, 34 ;< CD KL ST[\cdklst{P}PC&'-2ooӠ͠ӠĠϠŠĠȠӮͮŠŠŠQ}QGŮԠ̠ٛ333˭РҠҠƠΠԠӮͮcANTIC MAGAZINEdDRAWTEXT 8/3/83iR}RGBY JERRY WHITEns! AU!BYPASS SUBROUTINEx} CHARACTER FETCH SUBROUTINEFOR GR.4 DISPLAY@!6-S}SC BsD%$@&@F@LOCATE CHARACTER DATA IN ROM9-%@pJN@R\)6-%@`2F:,6 9$IT}TCNITIAL SCREEN DISPLAY+ +"0AR@4I+6-AH-@MQ@U6(DRAWTEXT DEMO BY JERRY WHITEH-@ U}UC@ M""FIND OUT IF SAM IS AVAILABLEU'F:,"A*F:%@QV,"@vZ?( S.A.M. IS IN RAMK6-@V}VC-U A((S.A.M. IS NOT IN RAM(6-3(A%POKE S.A.M.9APA4'AQAW}WC'49ARA4'A@`+9'A @`=N9AT@R`'AY@dr9Ad@vX}XC$CONVERT DATA TO STRING1-@(,@ 01(CREATING D6$ FROM DATA!!DISPLAY A DOT FOR EACH BYTE;AY}YC,4-@`A")67<,.>:,0(.4 MORE HOUSEKEEPINGC +@d/6-F:A`,%AV$FZ}ZC(:Aa,CFIND DISPLAY LIST &&;@ ,3,;@ 7,;A0,DEFINE SAM'S ALPHABET776.-EYY4 BIYY4SIYY4[}[C.DIYY4IYY4 EH4F DJIY4EY4CHAY4 EE67B:,%@2s,.-JEY4 KEY4 EH4L EH4M EH4N OW4 PIY4 KYUW4AA4R "@@67B:,%@w,.(EH\}\C4S TTIY4YUW4 VIY4 WUEH4KSWAY4 ZIY4 ',SETUP MIXED DISPLAY LIST1?%@Y]@uak/-%@ou%@y;]}]C@? 6+-%@#%@I'/'@ 3D+ ;+-%@PHN%@dRZ'@^m+ @E%@equ@ey.^}^C%@fF:A`,E%@g\F:Aa,EJ""USE IOCB #5 FOR THE KEYBOARDO.@`g.@ko@su{_}_CUK:TYNOW WE'RE READY^TO DISPLAY OUR TOP LINEc46.DRAWTEXT6-@Ya*6-@e4 A@hm<%6-`}`CF:@ ,%AV$F:@,<LOCATE SCREEN MEMORYr/6-%A/ADD OFFSET TO CENTER SCREENw|##DISPLAY "S.A.Ma}aC!." IN MODE GR.4 6-@:S,&@2%A A5.6-@:.,&@2EO$6-%@So. A5.6-@:A,&@2s$6-%@b}bC . A5.6-@:.,&@2$.$6-%@2N. A5.6-@:M,&@2R\$6-%@`. A5.6-@:.,&@2c}cC $6-%@f. A5DISPLAY INSTRUCTIONS SLIDING UP FROM THE BOTTOM*6-@j*6.TYPE A LETTEd}dCR PLEASE. -@6@($6@(f* A@. ERASE WHAT WE LEFT BEHINDF -@Ajn@4rw6@{*e}eC 6,cB/AYF KEYBOARD INPUT ROUTINE-AdAU!6-@go-6-@6s F:Af}fC d,"AUApA)@$.& @e28)!@<D26-@cHALETTERS ONLY* 6.>:, A@*DISPLAY CHARAg}gC6CTER'(Ae'WAIT FOR ANOTHER KEY?"@c:6.UH1PS% A?DISPLAY ? AND SAY OOOPS##LOOK ITh}hC# UP IN SAMS DICTIONARY<6-&@e'3<6.7$@7;%@?E<$@IM%@Q\,%4aW!6. DAH4BULYUW6%W/6i}iC 7B:,%@,.."6-?:,/SAM SPEAKS! Ae!PLAY IT AGAIN SAM ''DATA FOR MODE6 DISPLAY SUBROUTINE--j}jG104,104,133,204,104,133,203,104,104,141!!0,6,104,104,141,1,6,206,1,6!$$104,104,141,2,6,206,2,6,173,48&&&2,133,207,1k}kG73,49,2,133,208,160,4+''177,207,141,4,6,200,177,207,141,50!!6,172,2,6,240,17,24,173,4,65""105,20,141,4,6,144,3,238,5l}lG,6:$$136,208,239,24,173,4,6,109,1,6?!!141,4,6,144,3,238,5,6,169,0D!!141,3,6,172,3,6,204,0,6,176I((82,169,0,133,20m}mG6,177,203,56,233,32N&&133,205,24,6,205,38,206,6,205,38S((206,6,205,38,206,165,206,9,224,133X%%206,173,4,6,133,207,17n}nG3,5,6,133]))208,160,0,162,6,177,205,145,207,230b))205,208,2,230,206,24,165,207,105,20g**133,207,144,2,230,208,202,16}oC9)*hyPDICEOLDICEVALDICETYPPIWWAINU@@B@HJ@PR@YZabijqryp}pC  PPROGRAM LISTING ONEàś +@T_ 119@cj,9@nu,9@y,9q}qC@, @ (-@$(@,"$68,-( R( TYPE OF MUSIC2(1=WHITE; 2= BROWN; 3=1/F6RAr}rCA A/-SOUND AND PLOT2%%2@37@;?@CG@KT7""2@Xa8,@ei@mv<%%2@zs}sC  A&&,&@@$,$P:'@@05,@9F&F-@J\ K0&+&@@`h$P:'@@lr,,"@9v0+@t}tC%P$dWHITE MUSICi-@)<A(n%%6-@@F%P:@JP$H:@Tv,,x( WHITE MUSIC6-Azu}uC @P   A@:BROWN MUSIC-@>SA(''6-&@W]%P:@ag$H:@kx,,% @|)v}vC!@ %6-@B( BROWN MUSIC6-A @PFV  A@Zt,1/F MUSIC1V-@x@w}wC468,-P:@$H:@),,C68,-/8R68,->MV 6-@QbA(;6-hy6-@-@}x}xC@E4#68,-&@%$+P:'@)7,,46-P:'@;X,J,8,8,,68,-P:@\b$H:@f,,O68,-8,T6y}yC-%@ 5%8,Y ^( 1/F MUSICc% @9?)!@CK%6-@OZh6-@^gm @Pkr w A@z}zG DIATONIC SCALE- C MAJOR ::162,144,128,121,108,96,91,81,72,64,60,53,47,45,40,35 PENTONIC SCALE <<243,217,18{}{G2,162,144,121,108,96,81,72,60,53,60,72,81,91 BUGLE NOTES ::239,119,79,59,47,39,33,29,26,23,21,19,16,14,14,13,12" +|}|C9"RETURNS TO GR.0 D:JACKSONWAINU@@B@HJ@PR@YZabijqry.}C2"#HMLLLLKLKNKNULFLA@9;@AC@JKRSZ[bcjkrsz ~}~C    %&-.56<PROGRAM 4..THE SIMPLE SYNTHESIZER BY VERN L. MASTEL.. }C4SET UP MATRIXES, OPEN KEYBOARD FOR INPUTY&9@8?,9@CJ,9@NV,E@Z^@bdjtKO AxY A }C4$$MULTIVOICE ROUTINE LINES 20-40b6-R::C,!6-Q:IT,06-Q:@Xc,?6-Q:@g,N6-F:Ad,b }CFAUA--IF NO KEY IS PRESSED TURN OFF THE SOUND"@JN12TV\^dflrS2@vx} }C u2@#%+-39 @ =D(X2JS8,@W_52@cl8,@pxN2@| }C8,@ X @ B1PIANO MODE LINES 50 TO 7526-R:H,4&6-F:Ad,&AUA6--IF NO KE }C*Y IS PRESSED TURN OFF THE SOUND7;"@.2128:@BHJPV; @PZ:22SAVE KEY IN LAST KEY PRESS, S }CrTART DECAY LOOP;RRCHECK DURING LOOP TO SEE IF A KEY IS STILL PRESSED AND IF IT IS THE SAME KEY<p 6-&-@vx} }C6@ ?28,@!+S-@/3@07CW f6-R:I,l"p EhhREAD KEYBOARD AGAIN. IF KEY IS STIL }CJL THE SAME AT THE END OF DECAY WAIT FOR A NEW KEY TO BE PRESSEDF 6-R:P[, "@p_JSTART SEQUENCE AGAINK }C 6- @UOddCHORD ROUTINE. THIS IS THE SAME AS THE MULTIVOICE ROUTINE EXCEPT THE NOTE VALUES ARE DIFFERENTPb6-R: }C,!6-Q:!,06-Q:@%0,?6-Q:@4,N6-F:Ad,bAUATJJWATCH OUT FOR TWO KEYS BEING PR }C.ESSED AT ONE TIME GIVING A ZERO VALUEU"48@<sY,,IF NO KEY IS PRESSED TURN OF THE SOUNDZ"@w12 }C "S2@&(.068>Du2@HJPRXZ`f @jqdX2w8, }C@52@8,@ (N2@,58,@9AX @E]]THROW AWAY THE FIRST ATARI KEYPRESS AND SET UP THE }C/ SCREEN FOR THE MENU LINES 200 TO 220)@3> +@BH'0@LP@TX@\bA0@fj@nr@vL(@ }C W(@x(@7 SIMPLE SYNTHESIZER(@;B(@FP(@T[(@_f:(@jMULTIPLE VOICES- }C --E(@f(@61ST OCTAVE CHORDS-q(@:A(@Ee2ND OCTAVE CHORDS-q(@ip/(@tPIANO }COCTAVE 1 -P(@)PIANO OCTAVE 2--5q(@9JPIANO OCTAVE 3N-99MAKE SURE THE INPUT IS VALID AND PROCESS }C THE CHOICEq(@ (@$+:(@/L SELECT MODE (-)G)@PZe @I^d)!@ThlApvq6-| }C`RRTURN OFF THE SCREEN AND LOAD THE CORRECT MATRIX VALUES FOR THE MODE SELECTED3AYft3 A0%@x$+& }C@H,#6-&#A# A*5#6-@9I#A# AMX#6-@\l#A# Ap #A }C A  #A  A !4" #A A8v+33DO CHORDS IF SELECTED OTHERWISE DO MULTIVOICE,!"@z@ }C ! @ jPPALL OF THE PITCH VALUES ARE STORED AS DATA STATEMENTS AND READ UPON DEMANDH-@nr@v" }C&(68,-168,-:68,-> H A*cc121,243,60,114,230,57,108,217,53,102,204,50,96,193,47,91,182,45,85,173,42,81, }CH162,40,76,153,37--72,144,35,68,136,33,64,128,31,60,121,29XH-@LP@T"(68,-168,-:68,-> H }C Abee243,193,162,230,182,153,217,173,144,204,162,136,193,153,128,182,144,121,173,136,114,162,128,108l<<153,121,10 }C72,144,114,96,136,108,91,128,102,85,121,96,81H-@;?@Cp"(68,-168,-:68,-> H At??121 }G,96,81,114,91,76,108,85,72,102,81,68,96,76,64,91,72,60DD85,68,57,81,64,53,76,60,50,72,57,48,68,53,45,64,50,42,60,47,40  }EC2-@ @+"$68,-( 2 @P/s*99243,230,217,204,193,182,173,162,153,144,136,128,1212-@w@ }C"$68,-( 2 @PX00121,114,108,102,96,91,85,81,76,72,68,64,602-@\`@d"$68,-( 2 @P }CC--60, 57,53,50,47,45,42,40,37,35,33,31,29D:MASTEL@JKRSZ[bcjkrsz @GTO TOOTSMAKE "X JOY 0IF :X = 6 [MAKE "POINTER CHANGE :POINTER -1 0 7]IF :X = 2 [MAKE "POINTER CHANGE :POINTER 1 0 7]SHOWP}GOINTERIF OR :X = 6 :X = 2 [TOOTS]IF :POINTER = 0 [SETENV0]IF :POINTER = 1 [SETFRE0]IF :POINTER = 2 [SETVOL0]IF :POINTER }G= 3 [SETDUR0]IF :POINTER = 4 [SETENV1]IF :POINTER = 5 [SETFRE1]IF :POINTER = 6 [SETVOL1]IF :POINTER = 7 [SETDUR1]TOOTSE}GNDTO STARTCTSETCURSOR [3 5] PR [SET __TOOT 0___ SET __TOOT 1___]SETCURSOR [3 6] PR [ENV FRE VOL DUR ENV FRE VOL DUR]MAK}GE "ENV0 0 MAKE "ENV1 0MAKE "FRE0 20 MAKE "FRE1 20MAKE "VOL0 10 MAKE "VOL1 10MAKE "DUR0 30 MAKE "DUR1 30MAKE "POINTER 0 MA}GKE "X 0SETCURSOR [0 8]( PR [\ \ ] :ENV0 [\ ] :FRE0 [] :VOL0 [] :DUR0 [] :ENV1 [\ ] :FRE1 [] :VOL1 [] :DUR1 )SETCURSOR [9 1}G4]( PR CHAR 28 CHAR 29 [CHANGES VALUES] )( PR [\ ] [ HOLD BUTTON FOR FAST CHANGE ] )SETCURSOR [8 17]( PR CHAR 30 CHAR}G 31 [TO CHANGE FUNCTION] )TOOTSENDTO SETENV0MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS]IF :X = 0 [MAKE "ENV0 CHANGE :ENV0}G -1 0 10]IF :X = 4 [MAKE "ENV0 CHANGE :ENV0 1 0 10]SETENV 0 :ENV0SAYVALUESTOOTERSETENV0ENDTO SETFRE0MAKE "X JOY 0IF}G OR :X = 2 :X = 6 [TOOTS]IF AND NOT JOYB 0 :X = 0 [MAKE "FRE0 CHANGE :FRE0 -10 15 9000]IF AND JOYB 0 :X = 0 [MAKE "FRE0 CHA}GNGE :FRE0 -100 15 9000]IF AND NOT JOYB 0 :X = 4 [MAKE "FRE0 CHANGE :FRE0 10 15 9000]IF AND JOYB 0 :X = 4 [MAKE "FRE0 CHANGE}G :FRE0 100 15 9000]SAYVALUESTOOTERSETFRE0ENDTO SETVOL0MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS]IF :X = 0 [MAKE "VOL0 }GCHANGE :VOL0 -1 0 15]IF :X = 4 [MAKE "VOL0 CHANGE :VOL0 1 0 15]SAYVALUESTOOTERSETVOL0ENDTO SETDUR0MAKE "X JOY 0IF OR}G :X = 2 :X = 6 [TOOTS]IF AND NOT JOYB 0 :X = 0 [MAKE "DUR0 CHANGE :DUR0 -1 0 255]IF AND NOT JOYB 0 :X = 4 [MAKE "DUR0 CHANG}GE :DUR0 1 0 255]IF AND JOYB 0 :X = 0 [MAKE "DUR0 CHANGE :DUR0 -10 0 255]IF AND JOYB 0 :X = 4 [MAKE "DUR0 CHANGE :DUR0 10 0 }G255]SAYVALUESTOOTERSETDUR0ENDTO TOOTERTOOT 0 :FRE0 :VOL0 :DUR0TOOT 1 :FRE1 :VOL1 :DUR1ENDTO SAYVALUESSETCURSOR [3}G 8] PR :ENV0SETCURSOR [7 8] PR :FRE0SETCURSOR [11 8] PR :VOL0SETCURSOR [15 8] PR :DUR0SETCURSOR [19 8] PR :ENV1SETCURSOR}G [23 8] PR :FRE1SETCURSOR [27 8] PR :VOL1SETCURSOR [31 8] PR :DUR1ENDTO SETDUR1MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS}G]IF AND NOT JOYB 0 :X = 0 [MAKE "DUR1 CHANGE :DUR1 -1 0 255]IF AND NOT JOYB 0 :X = 4 [MAKE "DUR1 CHANGE :DUR1 1 0 255]IF A}GND JOYB 0 :X = 0 [MAKE "DUR1 CHANGE :DUR1 -10 0 255]IF AND JOYB 0 :X = 4 [MAKE "DUR1 CHANGE :DUR1 10 0 255]SAYVALUESTOOTER}GSETDUR1ENDTO SETVOL1MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS]IF :X = 0 [MAKE "VOL1 CHANGE :VOL1 -1 0 15]IF :X = 4 [MAK}GE "VOL1 CHANGE :VOL1 1 0 15]SAYVALUESTOOTERSETVOL1ENDTO SETFRE1MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS]IF AND NOT JO}GYB 0 :X = 0 [MAKE "FRE1 CHANGE :FRE1 -10 15 9000]IF AND JOYB 0 :X = 0 [MAKE "FRE1 CHANGE :FRE1 -100 15 9000]IF AND NOT JOYB}G 0 :X = 4 [MAKE "FRE1 CHANGE :FRE1 10 15 9000]IF AND JOYB 0 :X = 4 [MAKE "FRE1 CHANGE :FRE1 100 15 9000]SAYVALUESTOOTERSE}GTFRE1ENDTO SETENV1MAKE "X JOY 0IF OR :X = 2 :X = 6 [TOOTS]IF :X = 0 [MAKE "ENV1 CHANGE :ENV1 -1 0 10]IF :X = 4 [MAKE "}GENV1 CHANGE :ENV1 1 0 10]SETENV 1 :ENV1SAYVALUESTOOTERSETENV1ENDTO SHOWPOINTERSETCURSOR [3 9]PR [\ \ \ \ \ \ \ \ \ \}G \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ]IF :POINTER = 0 [SETCURSOR [3 9]]IF :POINTER = 1 [SETCURSOR [7 9]]IF :PO}GINTER = 2 [SETCURSOR [11 9]]IF :POINTER = 3 [SETCURSOR [15 9]]IF :POINTER = 4 [SETCURSOR [19 9]]IF :POINTER = 5 [SETCURSOR}G [23 9]]IF :POINTER = 6 [SETCURSOR [27 9]]IF :POINTER = 7 [SETCURSOR [31 9]]PR []ENDTO CHANGE :VAL :CHG :MIN :MAXMA}GKE "V :VAL + :CHGIF :V < :MIN [MAKE "V :MAX]IF :V > :MAX [MAKE "V :MIN]OUTPUT :VENDOINTER CHANGE :POINTER 1 0 7]SHOWPZG0100 ; SCREEN DISPLAY SUBROUTINE0110 ; OUTPUT GR.2 CHARACTERS IN GR.60120 ;0130 ; COPYRIGHT (C) 1983 ROBERT FREEDMAN0140 }G;0150 ; CALL WITH THE FOLLOWING FROM BASIC0160 ; ASM=USR(ADR(D6$),ADR(LINE$),LEN(LINE$),PX,PY)0170 ; PX= X DISPLACEMENT+1,}G PY=Y DISPLACEMENT+10180 ;0190 *=$630 ; RELOCATABLE0200 ADRSTR = $CB0210 SCRMEM = $6040220 SCRWRK = $CF0230 LENGTH = $}G6000240 XPOS = $6010250 YPOS = $6020260 TEMP = $6030270 OFFSET = $CD0280 ;0290 PLA0300 PLA0310 STA ADRSTR+10320 }GPLA0330 STA ADRSTR0340 PLA0350 PLA0360 STA LENGTH0370 PLA0380 PLA0390 STA XPOS0400 DEC XPOS0410 PLA0420 P}GLA0430 STA YPOS0440 DEC YPOS0450 LDA 560 ; DISPLAY LIST LO0460 STA $CF ; TEMP ZPAGE LOC0470 LDA 561 ; DL HI0480 S}GTA $D00490 LDY #4 ; OFFSET FOR SCREEN RAM0500 LDA ($CF),Y ; GET SCREEN RAM LO0510 STA SCRMEM ; TO PAGE 60520 INY05}Cu30 LDA ($CF),Y ; GET SCREEN RAM HI0540 STA SCRMEM+10550 ;0560 ; FIND WHERE TO START OUTPUT0570 ;0580 LDY YPOSz ; H}COW FAR DOWN0590 BEQ GOON ; 1ST LINE?0600 LOOP CLC ; GET READY FOR ADD0610 LDA SCRMEM ; BEGIN OF SCR RAM0620 ADC }G#20 ; EACH LINE 20 LONG0630 STA SCRMEM0640 BCC NEXT ; CARRY?0650 INC SCRMEM+1 ; YES0660 NEXT DEY ; DECREMENT COUNTER0}G670 BNE LOOP ; CONTINUE MULTIPLY0680 GOON CLC ; 1 MORE ADD0690 LDA SCRMEM ; CURRENTLY ON 1ST BYTE OF LINE0700 ADC XPOS }G; X OFFSET0710 STA SCRMEM0720 BCC N1 ; CARRY?0730 INC SCRMEM+1 ; YES0740 ;0750 ; FIND BITMAP OF CHARACTER0760 ;0770}G N1 LDA #00 ; CLEAR TEMP0780 STA TEMP0790 NEXT1 LDY TEMP ; COUNTER OF LETTERS OUTPUT0800 CPY LENGTH ; END?0810 BCS END}G ; YES (TEMP >= LENGTH)0820 LDA #00 ; CLEAR HI OFFSET0830 STA OFFSET+10840 LDA ($CB),Y ; GET LETTER0850 SEC ; GET REA}GDY FOR SUBTRACTION0860 SBC #32 ; CONVERT TO INTERNAL CODE0870 STA OFFSET ; OFFSET INTO BIT-MAP TABLE0880 CLC ; CLEAR FO}GR X8 MULTIPLACTION0890 ASL OFFSET ; DO MULTIPLACTION - 16 BIT, X80900 ROL OFFSET+10910 ASL OFFSET0920 ROL OFFSET+109}G30 ASL OFFSET0940 ROL OFFSET+10950 LDA OFFSET+1 ; ADD $E000 TO OFFSET0960 ORA #$E0 ; THIS IS AN ADD!0970 STA OFFSET+}G10980 ;0990 ; OUTPUT TO SCREEN1000 ;1010 LDA SCRMEM1020 STA SCRWRK ; TEMP REG FOR OUTPUT1030 LDA SCRMEM+11040 STA }GSCRWRK+1 ; TEMP REG HI1050 LDY #00 ; CLEAR Y REG1060 LDX #6 ; OUTPUT 8 CHAR1070 OUTPUT LDA (OFFSET),Y ; BITMAP #11080 }GSTA (SCRWRK),Y ; OUTPUT #11090 INC OFFSET ; NEXT BIT MAP1100 BNE N2 ; CROSS PAGE BOUNDARY?1110 INC OFFSET+1 ; YES1120 }GN2 CLC ; CLEAR FOR ADD1130 LDA SCRWRK ; CURRENT SCREEN LINE1140 ADC #20 ; NEXT LINE1150 STA SCRWRK1160 BCC N3 ; CARR}GY?1170 INC SCRWRK+1 ; YES1180 N3 DEX ; ONE MORE DONE1190 BPL OUTPUT ; ALL 8 OUTPUT? NO -1200 ;1210 ;NEXT LETTER1220 ;}G1230 INC TEMP ; NEXT LETTER1240 INC SCRMEM ; NEXT SCREEN LOCATION1250 BNE N4 ; PAGE BOUNDARY?1260 INC SCRMEM+1 ; YES}G1270 N4 SEC ; SET CARRY1280 BCS NEXT1 ; MAKE CODE RELOCATABLE ( I COULD KILL FOR BAW (BRANCH ALWAYS))1290 END RTS ; THATS}G ALL FOLKSEN DISPLAY SUBROUTINE0110 ; OUTPUT GR.2 CHARACTERS IN GR.60120 ;0130 ; COPYRIGHT (C) 1983 ROBERT FREEDMAN0140  C7$% DIMDMFNL3STRIGLOULXCO@Q<?@aDG@LO@QT]Acelms }C  @  A '*@$.3 $$<+H SOUND DEMO Q+\*;@ `,*6.PRESS TO QUIT}C *;@ 2,*6.PRESS JOYSTK BUTTON(9#@6:@>@FSK:/6-@W]9 A ah2%2npvx}}C G2@#%+1Y+@59%@=Am0GM@QX(@\q CHOOSE ONE:(@u(@}C .BLAST-OFF<s(@6 .ENGINE R0OM?(@:W.SPACE MACHINE GUNZ(@[r .DIESEL HORNs(@v .LA}CSER GUNA}(@, .BOMBS AWAY!6(@0D .RACE CARL(@HZ.CANNONm(@^.THINKING COMPUTER}(@}C.D&(@!.&(@%7.ENDFa(@;B8(@FlENTER SELECTION(A,B,C,ETC.)E)@pS6-&@d}C a6-$@Pe+@"%@&.5!@28* @<B)"@FM@(@QXM(@\eX(@ipe(@tU }C$AZ&d -@`!@%*6@.7n2@;?EI@MXs-@\`Adx x  @P|}C%%2 @@@ @$.(@29(@=S F:B2y,@WhA  @Plu,6-{}Cmachine gun62%AU@)4@.T::=,"CK$6-@Ob. A@J6-hT F:B2y,"@}C@P !^ A6-'<diesel horn;2BF@%JN@RZ;2@^b@'fj@ny.T:}}C," $6-@*. A@6-0D F:B2y,"@HL@PPh A6-@lu T:{,}CA`-"@u&-23;@?M &%%2SU[]cek0 F:B2y,}C@A: @P&X-@*.@`29v2?E@IM@QZ''2@^d%@hl@pt@x}C-@ @P&  (-@*.@29( @=PBOOM! -@TV\a6@el2rAP@}C2@A @$/2@37@%;?@CP-@TXA\p   @Pt(@}C (@%%2#@@'+@/3@7K F:B2y,@O`A  @Pdo 6-@s A}C -AU@6@ '2-3@7;@?H332@LRP:H:Xf,$AU,@jn@r %}C%2@ @@@!,-@04@P8E  @PIX A \b @Pf D:LUKEROTH yC3#$l MENU1MENU2PITCHINTSNKECHOR:<BD@JL@RT@[\cdklstz }C.CHORD PROGRAM.!##'.9by Karl E. Wiegers>.D$$I.\ANTIC MAGAZINE 1983b.m(<<;@`qx,;@r|,}C9@7 ,9@H,9@ (,2S +.4'0@8:@BHNA0@RV@Z^@bpSAR@t<0-@}C@ #0(ONE MOMENT, PLEASE'.2FFF6.:A%,#Clear the screen9-@EI@M[(/-@%_c@g9(_-@}C@ 7-@&+!@ %,@):%_(. 7@>D$&@HL<@P\$,O#-@#`g&+!@ kp,@t%K(}C. 7@ $&@<@6$,O LA@:LSet up a text window in this Graphics Mode 0 displayU5+F:A}C`,%AV$F:Aa,%@# X,A0USet DLI on line 18 of displayYA^l'A@p9BBA}C.YEnable display list interrupt$ A2R ( Enter a Key: $"-!X^* @bh# Bl- A,A!(}CCҠҠ͠$(. AAESC CTRL-2 FOR 6?-@GK@OV?(@Z`7@dj$&@nr<@v$,@&}C+ A@"(Enter a Chord: &J-!17* @;A# BE- APTA!(ҠҠ͠$(. A }CAESC CTRL-2 FOR ^?-@ $@(/?(@397@=C$&@GK<@O]$,h6-@ae@io#-@s2(@}C 6 rY-@@"/>6-8+&@38,$@<E%,%&@ImJ68,-8,YChoose notes|c?-@qu@y%&}C@ $+!@,&@!$+!@$%-,U(@1Z>:AY,cDraw arrows P-`d@ht828%@x,@}C@ /< PHere is the chord<-@37A;i <Play chord for about 2 secondsQ-os@w32}Ck7 QTurn off sound channels-(-("PRESS TO GO ON, TO QUIT##@os@wy}}CK:$)@$"@'#LAAUAP@Pd( A +jD:CHORDS}CK:$)@$"@'#LAAUAP@Pd( A +jD:CHORDSCD67FYVOICFREQAUDCTLSPRAYPMMESUVOLDISTPMLLDNOVW]_@eg@nouw}!}C   "@ (*@ 12 9:ABIJP""*** ĠҬ*** By!}G Chris Chabris 1983*** For ANTIC Magazine""*** Allows modification of 4""*** voices and AUDCTL value.U-B!}C7`B7h#!' I2')/179?GU6-@KR$ +XfA@Tjv1A |!}C CAR@U@@#)g@-1@85Pt(>:A%,BB@dT A0.- MAIN PROGRAM LOOP8!}C B2yB T:!,"'CA@L F:B2y,"@GcAV F:B2y,"@gA`` F:B2y!}C,"@ Aj R:!&,"@*;At R:AF,@JcAp~=A%is%6-&@w1"!}C=6-@P-@#@'<(.A%@@HB-@LPATkF P A R:qv,@zA!}C=A%&%6-%@*21"@6>=6-@BKP-@OS@Wl(.A%@pxB-@|! } CAF P A R:$),@-HAp( 6-(8&@Lj,"AUAO'68&@nw,-8&@{,%! } C@ ;-@$@%O(8&@)B, //B2G%@XFP%P:8&@TY,'@]q,$B7X%$@u8&@! } C ,C8@,"@ * @$*U-@".2@6;( @ @EI8O^,%AV$8@bo,**8@sv,"|)! } C @ AM-@3"@&+C( 0 05;8@?N,%AV$8@RZ,M A^g R:mr,@vA! } C( 6-(8&@,"!6A O'68&@:C,-8&@GL,&@PV;-@Z`$@dnO(8&@r, //!}CB2G%@X%P:8&@ %,'@)=,$B7X%$@AI8&@MV,C8@Z_,"@ci* @msU-@"w@!}C( 8*,%AV$8@.;,(**8@?B,"HN) @RcAp2M-@3gk@otC( y y}!}C8@ ,%AV$8@=,M Ap<[ 6--68&@AJ,-8&@NS,%@%WaD8&@ex,!AU[68&@|,!}C-F}/B2G%@X)%P:8&@-2,'@6E,PB7X%@IS$8&@W^,d-@bf@j$}( 8&!}C@,Pb"8@,"@ &* @*04-@"48@<Ab( F FKO8Ud,%AV$8@hu,Z**8@y,@!}C ) @A dM-@3$(@,1C( 6 6;A8@ET,%AV$8@X`,M Adnp56-?:C:,<%A$%!}C+&@ ",$AV<AV,G-@&*@.hp($ ̠ҮxiB2G%n!#A5-!}C @&9"e%A$%+&@*,$AV%A%i --126,126,66,66,66,66,66,66,66,66,126,126;B2G!}C%@t #6-@7-@"&@P*7;  T:=@,"FWAR:]b,"@fp&6-%@tB6-&+!}C@ $+"@#,,jB2G%@t'+%@/4$+@8C&,~-@GK@POf  A0R:lq,"@u&6-&!}C@C6-%+@$+"6@!3,,kB2G%@t7;%@?D$+@HS&,-@W[@P_  A0 F:B2y,!}C"@,A  A0vB2y2D,68,-O:8,&@HO,86-U[L-ae@it[8,"@xv6-!}C%P:@ #%?P2, B7hQ)-@6:%@>C$+@GN&,@#R`1(8,C-@4dh@ lQ( !}C B2yC A@A-6-?:C:,<%A$%AV$+&@GW,,AB2G%]pi #A!-v@!}C %"e%A$%AV$+&@$,,%+&@05,$@29=%@rA\%i //B2G%@X`j%P:8&@ns,'@w,I!}C-@ @Q?(% ԭԭΠ˭ҠI AU'68&@U^,-8&@bg,%@ku>8&@y,"@!}CU68&@,-%"k-@')/$@3=+(8&@AW, aB7Y%$@[c8&@gl,$@px%8&@|,!}Ck A,%-@@P!< % A6U'68&@@I,-8&@MR,%@V`>8&@di,"@mwU68&@{,-! } C@a-@5$@(+(8&@,B, aB7Y%$@FN8&@RW,$@[c%8&@gs,J%-@w@P!!}!CD % AT- INITIALIZATION ROUTINE^(6-F:A,&@Ha(6-$AVhX;@Bex,#AP.-@|!"}"C@B2">67,.>:,B X6-?:C:,<<A H,rYY104,104,133,204,104,133,203,104,133,206,104,133,205,166,206,160,0,169,!#}#Ce0,145,203,136|OO208,251,230,204,202,48,6,208,244,164,205,208,240,198,204,160,0,145,203,96m-ko@s!#A!$}$C5- @49"e%A$%$AV%$@28<%@r@l%i m 8,8,8,8,8,62,28,8m #Apv!-|!%}%C@()%"3A6%7 IA/;[AAOmA@Shh8,72,138,72,141,10,212,166,207,189,3!&}&CO2,6,141,24,208,232,224,5,208,2,162,0,134,207,104,170,104,40,64]Ah@S'AiA9ApAfKA!'}'CKqA]ArAFS%6-F:A`,%AV$F:Aa,A-@OS@$W[@_O%A0S {-A!(}(CA#5' 3BByEB2w@9GWA#@KYiAY@b]x{BBAi-@|!)})C?(% &ĠҠ08i(% =U󠠱Z0(0(% ԭԭΠ!*}*C˭Ҡt-@!@%)@-3+-@7L`( VOICE #'@Pt: FREQ=0 VOL=6 DIST=10t-@x%@!+}+CX+(#  '(/9T($ 000> A064F I128N Q192V f255X i-@jn@ r?(%AUDCTL!,},C SETTING: Q(TOTAL VALUE=0 )i(%BIT | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |X-(%U X(%IS!-}-CC | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |'-B2HB2Q#@XGT' >-@X\@`l>($VOICE=1t V1+2=0 !.}.C V3+4=0 19@",9@&-,9@18,9@<C,E-IM@QZT68,-`kc68,-@or68,-@!/}/CB7a%@*$Af &?-04@8A&68,-GY* <A@]w?$ D2:SNDEDITR} t0C  -hySETRESET$%+-35; N/ #B!-A6A7%"+/ *N162,0,160,0,32%1}1G,1554N6,189,177,6,133,203>N189,178,6,133,204,32HN161,6,189,189,6,208RN118,222,185,6,208,113\N188,193,6,17%2}E2G7,203,201fN255,208,22,169,1,157pN189,6,169,0,32,155zN6,157,0,210,157,1N210,32,161,6,76,143N6,201,254,20%3}3G8,18,169N0,157,193,6,169,1N157,185,6,169,0,157N197,6,76,143,6,72N189,197,6,208,23,169N3,157,185,6,15%4}4G7,197N6,169,0,32,155,6N157,0,210,32,161,6N104,76,143,6,169,0N157,197,6,104,32,155N6,157,0,210,169,16%5}5G6N157,1,210,32,161,6O200,177,203,157,185,6O200,152,157,193,6,232O236,176,6,208,3,76$O167,6,76,4,6,72%6}6G.O138,10,170,104,96,728O138,74,170,104,96,173BO201,6,141,8,210,76LO98,228,0,0,0,0VO0,0,0,0,0,1`O1,1,1,%7}7C80,0,0jO0,0,0,0,0,0tO 0,0,0,0~OB #B`;@<E,.-@IM@Q2">67,.>:,B O104,160,0,162,6,16%8}8C*9O7,32,92,228,96OB #B;@.7,.-@;?@C2">67,.>:,B O104,160,98,162,228,169O7,32%9}9C%,92,228,96O$ D2:SNDVBI+-35; N/ #B!-A6A7%"+/ *N162,0,160,0,32$":C%VV1V1V1AV1ASET-.56=>EFMNUV\^d00- LOAD V1$ WITH MUSI);};C!C FROM DATA STATEMENTSZ;@A%8,#A.-@<@@@D`2">67,.>:,B Z67@Ad,.>:AT,II- SET U)<}<CEP THE THREE ROUTINES, POKE IN NUMBER OF VOICES AND ADDRESSESa BIWA@[(6-C:,96-P:'AV,I6-&)=}=CZAV$UAaA++- POKE AUDCTL VALUE AND START ROUTINE!A7`!6-?:C:,,$- YOUR PROG)>}>GRAM COMES NEXT. Ap8''- MUSIC DATA FOR VOICE #1 FOLLOWSBll207,10,207,10,207,10,162,60,108,60,121,10,128,10,144,)?}?G10,81,60,108,30,121,10,128,10,144,10,81,60,108,30L&&121,10,128,10,121,10,144,30,0,30 D2:SNDLST2 LOAD V1$ WITH MUSI(j@C5'(XXXXYYYYSTSTSTONTYP?@GHOPWX_`ghopwx}-A}AC   "# *+23:;BCJKRSYa Aen 6-t6--B}BC [ +@A"01AR@4:=6-@FI6-LR[@wVX^g=6-mu6-@yy'6-C}CC-@ 36-@ = A/__A@@`3=#6-%@AI/"@`MW=6-%@[bS(@fw>:A%,_6-}-D}DC d!6-R:,!6-R:@ ,,n+"@086-%>F+6-%LWs"@[c6-%is+6-&@wM2-E}ECA @@$a-@(,@08e 2>@FHNPVax"@eo6-&@s+6-%-F}FCM2A @"@&.a-@26@:Be 2HJPRXZ`k}"@ow6-%}-G}GC +6-%@M2$A @(,@08a-@<@@DLe 2RTZ\bdju"@y6-H}HC-%@ +6-%M2".A @26@:Ba-@FJ@NVe 2\^dflnt"-I}IC@6-%@+6-&@"&M2,8A @<@@DLa-@PT@X`e 2fhnpvx}-J}JC "@6-&@(+6-&@,0M26BA @FJ@NVa-@Z^@bje 2prx-K}KC "@ $6-&@(2+6-%@6:M2@LA @PT@X`a-@dh@lte 2z-L}LC  "@$.6-%@2<+6-%@@DM2JVA @Z^@bja-@nr@ve 2-M}MC *!@y.46-:C IQ6-@yU`!@9dj6-py }-N}NC 6-@9# @',@+G#, 1+"@KS6-%Ya+6-%gr"@v6-%-O}OC+6-&@M2@+AP@/3@7?a-@CG@KUe 2@Y[acikq"@-P}PC 6-&@+6-%%M2@)5AP@9=@AIa-@MQ@U_e 2@cekmsu{-Q}QC "@ 6-%%+6-%@)/M2@3?AP@CG@KSa-@W[@_ie 2@mouw}-R}RC"@!6-%@%-+6-%39M2@=IAP@MQ@U]a-@ae@ise 2@wy}-S}SC "@!+6-%@/9+6-&@=CM2@GSAP@W[@_ga-@ko@se 2@-T}TC '"@+56-&@9C+6-&@GMM2@Q]AP@ae@iqa-@uy@}-U}UC e 2@ &1"@ 5?6-&@CM+6-%@QWM2@[gAP@ko@sa-@-V}VC@ e 2@ "(*0;"@?I6-%@MW+6-%@[aM2@eqAP@uy@}-W}WCa-@ @e 2@"$*,24:E!@yIO6-U^ dl6-@yp!@9-X}XC6- %6-@9)2  @6G,?"@KQ)"@U_'6-%@cm56-'@qw? A{-Y}YC F:A@,"@<(:  A@K,h"@Oh,(PLAYER #2 IS NOW ITl!^(PLAYER #1 DI-Z}ZC'D IT IN : BEAT THAT #2!h A+66"@:S,(PLAYER #1 IS NOW ITW!^(PLAYER #2 DID IT IN : B-[}[CEAT THAT #1!j6-v6-$* A.7@ @ ;Dq +@HTAZa*(@elq(@p9 #-\}\C91堠堠栠堠W(@=DW(@H]; player #2 is thea dot on the right side of t-]}]Che screen-@A -  +@1=ACJ*(@NU5(@Y`@(@dkn(@o player #1-^}^C is 'it' first-@!%A)L $X #A b ""Rh$dA@+2nt@x@-_}_C O2@ %@@#@'-s2@17&@;?@CG@KQ2@U[@_c@gygF:A@,"}-`}`C:2 $*\2@.068>@FL~2@PRXZ`bhn2@rtz-a}aC  Aj Aljj162,8,162,24,162,8,162,24,182,8,196,24,162,8,121,24,108,8,96,24,96,8,96,24,108,8,12-b}bG1,32,121,24,128,8qff144,24,144,8,144,24,128,8,121,24,128,8,121,24,144,8,162,24,144,8,162,24,196,8,162,32,162,8,162,8vkk-c}cG162,8,162,24,162,8,162,24,182,8,192,24,162,8,121,24,108,8,96,24,96,8,96,24,108,8,121,32,121,32,108,32{&&108,32,121,32,128,-d}dC32,121,128,0,0' B5D1:TAGTONTYP?@GHOPWX_`ghopwx},*eG; VBISOUND.SRC, rev. 2.4; By Chris Chabris, 7-14-83; For ANTIC Magazine; VBI routine to play constant tone/distortion mus1f}fCFic independent of mainline program execution; Call from BASIC with:;M Q=USR(ADR(SET$)); No additional calls are neces1g}gC@sary except the following if you want to turn off the routine:;G Q=USR(ADR(RESET$)); PROGRAM EQUATES FOLLOW:TABLE 1q}hCMNddiCIbJAIRRAID BASb#NDRAWTEXTBASboRNDMUSICBASb!}SMPSYNTHBASbTOOTM LGObDRAWTEXTASMbSNDDEMO BASbCHORDS BASjC8b0SNDEDTR3BASb 0SNDEDTR1BASb:SNDEDTR2BASb%@TAG= XBASb5eSNDEDTR ASMb'DOS] hSYSb*DUPm SYSbAUTORUN SYSkC bMENU bDOC )TXTbHELP- 0BASqC EQU $00CB X; Address of current music table stored as a stringAUDF1 EQU] b$D200m ; Audio frequenc1r}rC!y (pitch)for voice #1AUDC1 EQU& +$D2016 r; Audio control (volume/distortion) for voice #1XITVBV EQUw $E462 1s}sC 5; Exit deferred VBI O.S. vectorSETVBV EQU: ?$E45CJ k; Set VBI O.S. vectorAUDCTL EQUp u$D208} 1t}tCD ; POKEY AUDio ConTroL register; DEFERRED VBI ROUTINE FOLLOWS:L OORGT Y$0600d ; This program is not rel1u}uC ocatable LDX #00) M; Initialize the X- and Y-registersU XLDY] l#00LOOP1 JSRq tMX2} 1v}vC 6; Multiply the X-register by two for 2-byte table> ALDAF MV0ADR,XV ; Get address of next voice's table of 1w}wCnotes and durations STA$ )TABLE4 g; Put it on page 0 for indirect indexed addressingo rLDAw V0ADR+1x}xC1,X STA TABLE+1$ 'JSR, /DX2< e; Now divide X by two for the next tablem pLDAu STATUS,X1y}yC BNE NEXT! Q; If status>0 (voice inactive) go do next voiceY \DECa fDUR,Xq ; Decrement 1z}zCthis voice's duration counter& )BNE. 2NEXT> ; If >0, note or pause is still in progress, so go try the next1{}{C voice LDY COUNT,X' h; Get the index into the music table to find next note, durationp sLDAx (TABL1|}|C E),YCEND CMP #$FF% d; $FF means end this voice until the status becomes zero againl oBNEt xCREP} 1}}}C 7; If not $FF, check for the next command option? BLDAG J#01W ; A one in the status register turns o1~}~C ff the voice STA &STATUS,X. 1LDA6 :#00B EJSRJ NMX2V YSTA^ eAUDF1,Xn ; Turn off this1}C0 voice by storing a zero in its Audio Frequency8 ;STA@ GAUDC1,XP p; and Audio Control registersx JSR 1}C DX2 JMP NEXT' M; And go on to try the next voiceCREPQ TCMPY ]#$FEi ; $FE means immemdia1}C/tely repeat the preceding music for this voice7 :BNE? CNOTEO w; If not $FE, try to play the next note} 1}C LDA #00 STA %COUNT,X. m; Reset index to zero, indicating the start of the music tableu xLDA} 1}C#01 U; Mark a duration of one so that the next VBI will restart the music] `STAe kDUR,Xs vLDA{ #01}C0 STA PAUSE,X" V; Turn off a pause that might have been in progress^ aJMPf jNEXTv ; Try t1}Che next voiceNOTE PHA. \; Save the frequency value in the accumulatord gLDAl sPAUSE,X| ;1}C. Check to see whether a pause was in progress6 9BNE> BPLAYN ; >0 indicates yes - a pause has just terminate1}Cd LDA #03" J; No - so set up a pause of 3/60 secondR USTAZ _DUR,Xj ; Using the duratio1}C n counter STA !PAUSE,X* K; And setting the pause registerS VLDA[ _#00g jJSRo sMX2{ ST1}CA AUDF1,X <; Don't forget to turn off the sound!D GJSRL PDX2X [PLAp ; Pop stack 1}C JMP NEXT B; to go on to the next voicePLAYF ILDAN Q#00^ ; The pause is over - reset the1}C pause register STA (PAUSE,X0 3PLAH l; Retrieve the next frequency valuet wJSR| M1}CX2 STA AUDF1,X# c; and put it into the Audio Frequency register for this voicek nLDAs w#$A6} 1}C 7; Give it a pure distortion (10) and volume of 6? BSTAG NAUDC1,XW ; so put 16*distortion+volume into the1}C Audio Control register #JSR( ,DX24 7INYL ; Increment index to get this note's duration 1}C LDA (TABLE),Y "STA' ,DUR,X7 Y; Store it to begin the countdowna dINYy ; In1}C#crement the index for the next VBI+ /TYA7 :STA? FCOUNT,XO n; and save it until thenNEXTr uINX} 1}C :; Increment counter of # of voices processedB ECPXJ NNUMVZ ; Have we processed all voices spec1}Cified? BNE AGAIN' [; No - go jump to the beginning (too far to branch)c fJMPk oDONE{ ; 1}C-Yes - so go and end the interruptAGAIN JMP2 7LOOP1B ; Go back to the start of the loop to process the next voic1}Ce; SUBROUTINES FOLLOW:MX2" %PHA: l; This routine simply multiplies the value in thet wTXA} 1}C 6; X-register by two for various uses> AASLF HAP TTAX\ `PLAh oRTSDX2t wPHA} 1}C <; This one reverses the multiply done in theD GTXA\ n; routine abovev yLSR} 1}C A TAX PLA# gRTS; EXIT DEFERRED VERTICAL BLANK INTERRUPT ROUTINE FOLLOWS:DONEk nLDAs vAUD} 1}C ; Get user AUDCTL setting( +STA0 6AUDCTL@ _; Make sure POKEY remembers itg jJMPo uXITVBV} 1}Cm ; Now let the O.S. take us out of the interrupt and back to main program; VARIABLE STORAGE FOLLOWS:NUMVq sDBy $011}C V0ADR DB 3$00,$00,$00,$00,$00,$00,$00,$00DUR8 :DB@ Z$01,$01,$01,$01STATUS DB` $00,$00,$00,$00COUNT DB 1}C $00,$00,$00,$00PAUSE DB# 6$00,$00,$00,$00AUD; =DBC v$00; RELOCATABLE VBI INSERTION ROUTINE FOLLOWS:} 1}C ORG $6000 PLA/ T; Required when accessing from BASIC\ _LDYd h#$00t ; Lobyte 1}C0of VBI routine start address goes in Y-register8 ;LDX@ D#$06P t; Hibyte of same goes in X-register| L1}CDA #07 9; 7=Deferred VBI, 6=Immediate VBIA DJSRI OSETVBVY ; Let the O.S. insert the routine 1}C RTS f; All done, so back to BASIC; RELOCATABLE VBI RESET ROUTINE FOLLOWS:n qORGv $6100 1}C PLA P; This reverses the above routine by storing theX [LDY` d#$62p ; address X1}C!ITVBV in the deferred VBI vector) ,LDX1 5#$E4A l; (actually, it lets the O.S. do it again)t wLDA| #1}C07 JSR SETVBV" 'RTS/ END3; For ANTIC Magazine; VBI routine to play constant tone/distortion mus03G D  C D     )16CS S)  C)D1 p p 5}G0 C9DI pCDL~CiCDiD` DD˙` d J)L !5}GD L(( LL()  L| L( S LH 0p n  5}G CY?  q  L L  ` )5}G `A! d߰")-݆ "  $G@LLL&0") $G%5}GH0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(05}G)8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH)5}G  hyhyB q L> Lm JJ  Ln*` dB%'5}G8  H H` 1 { LL   !L     Hh SY?  q  1L5}G  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L5}G) `L0AM݊L݉ ML  N݆LLLNLMLHG!@5}G1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q5}G L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF 5}G G) *Gȩ GȽG GȌd q q G`  8   0G  `D5}GCEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y5}G`piH n0)բY? 08`0 5}G  0$L GGȽG L `8L`L5}G8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`5}GE8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE5}G H8EEȱEEȩEh J E8   . m  i`LI!)E1FR5}G1LJ舩9GIH`LJJ`HGHh l`5}G S gL   8 rii `дCDCG W  5}C#C  Lq` X٨`DOS( SYS IIIIIIIIIIIIIIIC`0 ߩ0}}P P5}C  07 %|+-3G||DDOS PVDOSDOS[ `SYS sx}}5}C4}"$},-5}5}CB0SNDEDITR B 0SNDVBI! -B:SNDLST21 9B%@TAGA YB5eSNDVBI SRCCDOS^ aSYS}5}CV 0`BDELV !B 5}G`LVUQ   ]   TU J ]L!T  #      TU 5}G L ? .  t`GBJ V~DEHI B V0dV5}GQDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh5}GDEL8HI   0 HI,0 0  9 .G VLO5}G,0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI5}G V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI5}G VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO 5}GSTILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -5}GLLu DEHILV 9 .l 9 .l  `` s$B VBH5}GI|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL5}G1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e5}C)1i1232435ޥ<<8fg?}4}G 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D9}CUPLICATE DISKC. COPY FILE ^K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILEb M. RUN AT ADDRESSF. LOCK F9}CILE )N. CREATE MEM.SAVG. UNLOCK FILE- RO. DUPLICATE FILEH. WRITE DOS FILESW9!&x#!7&p))'&X*./)L''-؆莟9}GR'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i9}Gil ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 09}GJB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE9}GN !B 1L " 1 !BDED:}:1BJ|DE 1DEBH9}GI 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 9}CS BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWEDjy COPYING---DN:}9}C # 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B9}G 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#9}GPdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%9}G 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C70@BDJN@RXQ0@\^dh@lrc@v@A}Cu@ @7'{(}AR@+4++(#U++(#| ANTIC MONTHLY DISK NOV. 198A}C 3 |++(#.8++(#Yc @ gr-@vAA}C $ GG;@@,;@ "),;@@-4,;A8?,;@CJ,;@@Nh, "D1:MENU" &&@lp@tv|A}CD:*.* 6,6."3 96 @0=Ji6-%@NX(6.7@\`<@dm,A67@ qu<@ y,.A}C .i67@ <@,.7@ $<@(A,3 6.|67B:,%@EU,.367B:,%@Yg,.G67@ko<@s,.(--A}C@>B:,:7<,4 G67<,..] 6.=:, @BJD67@NR<@V],.7@ae<@ir,]67@v<@A}C,.0$@'(''7@+/<@3?,4FREE@CL- @ Pi2() <@mF''7@A}C<@ ,4FREE@"K @ &1P(7@59<@=N,)|U @0R[W'!-@6_f+'@jo,%@s' |Z+B}C+(#|& 0|[ ( |8 = F P|\++(#qd-(-("B}C1 Select HELP.BAS for information.xAR7@[@DH@9LR'-@VZ@"^dC(p SELECTIONM B}CA0Q[ B4P:,A00"@8B&6.7@FJ<@Ni,0 AELB6.7+&@mr,$@v%@B}C<+&@ ,$@%@$,L B(337@7;<@?N,4 36.7@RV<@Zf,!7@jn<@r,4DOS!.B}C0 6.-@?B:,07<,4 AH67B:,%@Cr,.7<,   6.! 6.D1:!67B:,%@v,.?B}C AR@'-@@"#)? 1 DLOADING ? AHN@RV@9Z`1@dh@lv5%? BzB}CK-@ @"-  0CANNOT RUN 7 @4:A B>\K A0D1:MENU.bdkl st |@YC%J WELCOME TO THE ANTIC MONTHLY DISK n Most of the F}Gprograms on this disk arewritten in Atari BASIC. Some requirespecial hardware or specific instruc-tions. We recommend you F } Grefer to thecorresponding issue of ANTIC forcomprehensive documentation. If youwish to order a back issue, or needsubscriF } Gption information, contact usat (415) 957-0886 or, for credit cardorders, dial (800) 227-1617, Ex. 133.In California,(800)F } C 722-3545, Ex. 133XXXThe menu that appeared on the screenwhen you booted the disk will onlyrun programs with a .BAS exF } Gtender.If you try to run a program and the response is 'cannot run Filename',then check the file extender withthe followiF } C4ng list:XXX.BAS BASIC saved program, use menu; sRUN or LOAD and RUN..LST BASIC listed program, ENTERz theF}C*n RUN..EXE Assembly language 'Load and1 NGo' file. Remove BASIC, bootU pDOS, type L then enter thew filenaF}C)me..ASM Assembly language source code0 Mfrom Atari Assembler Editor.T Must be assembled..M65 Same as .ASM onF}CRly MAC/65..SYN Same as .ASM only Synassembler.AMC Same as .ASM only AMACXXXV.OBJ Machine language object file. F}C $Same as .EXE but not 'Load and+ GGo'. Refer to correspondingN article..ACT ACTION! source code..SYS ResF}CBerved for DOS system files..PLT Pilot language, requires PilotI xcartridge..LGO Logo language, requires Logo} F}C0 cartridge..TXT Text file. Usually accessed7 Nby another program.XXXRAll programs from ANTIC issues datedprior F}Gto August 1984 were reproducedfrom ANTIC's Archive. We have up-dated them from our HELP columns and most are compatible wiF}Gth the XLmachines. We have worked to insurethat our programs operate as pub-lished, but we consider all our software lisF}Cytings to be works in progress which we encourage you, thereader, to personalize and enhance.Good luck, and ENJOY! } F}C J-ANTIC ED WELCOME TO THE ANTIC MONTHLY DISK n Most of the D"CiwLINEA;xx ;A ,;@?P,; (}@T[;@_c@gio D:DOC.TXTJ}C A (@)2lB:,!@-5-7@9=<@AT,4XXX0(3(E-@X\@"`X( ӠΠ\b(}J}Cl @@ <( @@%da@)/ B39*-@=A@"ER("ΠҠՠҠˠҠVa%D:MENUJ}CD:HELPLINEA;xx ;A ,;@?P,; (}@T[;@_c@gio D:DOC.TXTHG,232,238l3,6,238,4,6,208,3,238,5,6q56,176,166,96v{$$DISPLAY MODE 6 TEXT SUBROUTINE 6-?:C:,C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC{C|C}C~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE