@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8udX;SETCOLOR macro examplenX;by Karl E. WiegersxX;X;Usage: SETCOLOR X,Y,ZX;FX; X;in a real program, T}put this!X;equate in your usual equatesX;COLOR0X;SETCOLOR X;$X;check for right # of parametersX;U}   ASETCOLOR errorA"X;,"X;set offset for color register6X;@  J$ T^$> hrX;|%X;if V}%2>15 assume it's an address;#X;multiply by 16 with four ASL AX;  Q T?T?T?T?X;"X;otherwiseW} just multiply by 16X; Q> X;%X;if %3>15 assume it's an address;&!X;put it in Y-reg. temporarily0X;:X}  D% NX%> blX;v X;store what's already in the%X;accumulator briefly, even thoughX;we haven't addY}ed yetX; PCOLOR09X; X;keep just the low nybble ofX;what's in the Y-registerX;CM>X;$X;add %3 (noZ}w in A) to %2*16 (now!X;in COLOR0,X) and store againX; , OCOLOR09  PCOLOR09*4>X;H#X;sample program to tr[}y SETCOLORRX;\PfSETCOLOR ==p+ againX; , OCOLOR09  PCOLOR09*4>X;H#X;sample program to tr0OPqFFQLQLSPECIACCHELPKECCBYTCTRLRETUREXIIPOTEMPOPOSOPTIOILECFLIMENURIGHTARROMAXOPTIONWINDOWP ]}TWINDOWWINDOWHEIGHWINDOSCREEC4COPEDGELINELINEWIDTBLANKSDONFORMASEARCRECORDNUSECTORBYTEFULLDISPLAMAXLIN ^}CURLINTOPLINREFTITLEDESC1DESC2DESC3DESC4DESC5RECORDUPCASP1UPP1P1LEP2UPP2P2LEMATCHMATCHSEARCHMATCHCLEARA _}UTOPRINTBOTLINLASTRELASTLINEWSAVEWSTARWSIZMONTHNFILECFILCFILEDISKFNAMEOUTDEVGETKEESUPARRODOWNARROLEFTARRO `}WINDOWOPEWINDOWCLOSXYNCHOICMPOSCHOICESSAVPSIZCHOICFILELEXYLINELENRECCUD@ a} @ b}@ !"# c}$%&'()*@+@,-./0123 d}456789:;<=>?@AB e}CDEFGHIJKLMNOPQR f}STUVWXYZ[\]@^_`a g}bcdefghijd##+---------------------------+n##| EasyFi h}nd V2.0 |x##| Magazine Index Retrieval |##| |##| SIERRA SERVICES |## i}| P.O. BOX 40454 |##| BELLEVUE, WA 98004 |##| (206) 881-0512 |##+------------------ j}---------+;@,9@, AAPś AJUMP TO START** GETKEY SUBROUTINE k}* 6-!F:B2y,"@6-!$,F:,"@" A9, AP''F:,"AU)F:,"AT l}A`" ), " A9 AP6$@*J* CHARACTER CHECK ROUTINET*^ "6-$h7"A m}&*! *6-&@467,.7$r6%+ @2)"@)!A#,3 >:AS,6$|" >:,67,.>:,6 n}-%"$** GET OPTION CHOICE* 6-8,6-8%,&&6-?::,67%,.>:,*67%,. N 6-%6-%$X6-?:<:A ,%67,.7<&,<67B:,%,.>:A,6-?::A,%67,.7<&,<67B: t},%,.>:A,6-?:AA@H*** GET NEXT RECORDR& 6-%68,-&68,-\,(* 8,"6-8&@% w},, A f A 0p*** GET PRIOR RECORDz 6-$ 6-& (*!6-8&,8,8, x},-@5 $-@5, =:, 6.67B:,%,.67B:,%,.67B:,%,. y}67B:,%,.67B:,%,.67B:,%,.6-?:"-@"@" H6. ȠR6-@6-@\0 6-68,-!68,-@068, }-@f A7p 6.z-@$@  - >:AE, " A"!"8,8,E A }6-@6-(68,-/6.56-;6-E A** GET SEARCH PHRASE*& 6-6--%& } 堺#  A #*"A"P$** FILE OPTION*' 6-6-6-@ '6-@ }  A3  !-@!  Ԡź W "-@@; >:AS,ϠӠΠI-AM } W A$@$ !6-@6-@!6.. 6-?::AE,    6-6- A } * * DISK OPTION * -6-@6-!6-@ -6-@   !-@@! ˺ &  } @:1,)!@:8,&6-@:1,  6.>:,   - >:AE,  6-6-  07<,A# A } *( * RECORD OPTION2 *< -6-@6-!6-@ -6-@F  P A&pZ b-@@8 > }:AS,ĠΠJ-@@b Ơ٠d -A  A' n )-@@ }) ĺx  6-6- )  A )@*"A& & A'6-A:,6-& A'  6- } % B-! >:AE,%   * A A  A * * KEYWORDS OPTION * ) 6- }6-&6-@)6-@@   2 -2 #ΠŠàӠ 1 -%1  ΠϠ }Ӡ / -%/ ٠ԠɠӠ . -%. ŠؠŠ͠ 4 -%4 # }ҠŠŠŠ" 9-%@9 " Ǡ٠ɠ̠, :-%@: #Ҡ }ϯӠЯ͠Ƞ6 :-%@: #ˠנĠȠԠ@ 9-%@9 "ӠŠ٠ }ĠJ -%@  ŠT 7-@%@7 Press to Continue^    A`h * }r * AUTOPRINT OPTION| * ' 6-6-6-@'6-@%   %-@@%   6. } 6-@6-@ * 6-68,-68,-*68,-@  A7ԠŤ 6.   A } * * OUTPUT OPTION * ' 6-6-6-@'6-@2   G-@@G , }&  6-6-0 #  A # *"A1 : A1P? ##7<,4S)7<,4E }A1PD ) 6. A1P)@N  - >:AE, X Ab *l * DISPLAY OPTIONv * } 36-@6-@'6-@36-@&   #-@@#  ,6-@6-@,6. } ̠ 0 6-68,-!68,-@068,-@ A7  - >:AE,  (+4FULL*",A3 } #6-?:< * DISK DIRECTORYH *R A4p\ )67<,.6.)67@,.*.DATf }  6.6-p @z - -7@<@,0DATA4P , 6-%"67+&,$@%,., A4P }  A4u "6.  $ $ * * SELECT FILENAME * $$6.7+&,$@%<$ }@, 67@,. -@ *7<,0 *67%@<%,.7<,   67B:,%,..DAT $ }** VERTICAL MENU*$- --%&) 78,<8%,&,- . 6-8 6-8,6-8%,&B6-?: to Continue ) @@ }$*"* PROGRAM INITIALIZATION,*6{6-@96-@'6-36-@?6-@K6-@W }6-@c6-@@o6-AP{6-@ @88;@$+&,,;@$+&,,;%,;,;,J;,;,;,; },;,T!!;,;,;@$,;,^9@,9@,h++;@ ,;@r,;,;@,r;,;, };,;,|;,;,9,9,&&;A,9@,;A@,;,;,;,N6-@ 6-@ }'6-@36-@96-B68,-H6-N- 6.DX:'67,. 67%,. '67,.7,367,.>:A(, }'67,.>:A(,367,.7,367,.>:A,'67,.>:A,367,.7,= 6.16-6.P:!6.'6--6- }36-=6.OFF-AU36-@B6-@C'6-@a36-@E36-@(6-Ad'6-A236 }-@ '-A 6-A@'6-ARR6.HSearch堠렠䠠 }T 68,-68,-@ *68,-@?68@,-@!T68@,-@)&l68@,-@9-6 }8@,-@PB68@,-@XW68@ ,-@gl68@,-@s0UU6-C:HhhhhhhhhhР }ߥЅԥх`ԅ`,:HH6-C:;hhhhhͥ`8ͥΠ)ߑ˥i˥i̩,DHH6-C:; }hhhhhͥ`8ͥΠI˥i˥i̩,N446-C:'hhhhhhh֑`,S--6-C: hh }hH9eЍ Ԉh8`,X 6-68,-b%%6-F:@,%AV$F:@,l 6-%$6-+&,$v@ }K:** DISPLAY TITLE SCREEN*7+AA +A7A--6-F:A`,% }AV$F:Aa,%@&@q#-@%@# )-@@%%@)  }%@@e1%@ F:A`,1%@!F:Aa,@% -% @EASYFIND V2.0% - }% @MAGAZINE INDEX@ --@- @ --@ - @ЮϮ }  /-@/ @Ŭ ,+-@+ @ɠ..-@. @ }Ӡ0+-@+ @43A!A@t3AA(96-?: }<,>$H*R* DISPLAY MAIN SCREEN\*f+p0@0z!AR!TURN CURSOR OFF7 - }7 (Ӓ7 -7 (뺠庠亠7 -7 ( }7 -7 (7 -7 (庠 }ߠ=-@= (ߠ=-@= ( }ߠ=-@= (=-@= ( Help is available for each op }tion by =-@ = ( highlighting the option and then =-@= ( pressing or H } =-@= ( =-@= ( = Selects highlighted opti }on=-@= ( = Search and display records=-@= ( = Stop record search }=-@= ( $=-@= ( LEFT,RIGHT ARROWS highlight the menu . }=-@= ( options at the screen bottom 8=-@= ( UP,DOWN ARROWS will display the next B= }-@= ( or previous record L=-@ = (ӠՒV=- }@!= (Search堠렠䠠`=-@"= (j<-@# }< 't - >:AE,~%A YA$..10, }))((󩮠曕(( }囖))$$EITHERBOTH󮛘))򠪠 }蠛**䮛&&䛛++ }宛++7,웝**''栢ԢР }Π**盠''宛(( }󮛦--7,囧&&Ӯ'' }))宠&&˺((䠸 }䛬ᠱ--8,囱++䛲++ }򮠠++宠䛴&&ĺ䛵++ }&&蛷󩮛++5, }**箠%%'' }))6,'')) }((((ONOFF++7, }**宠%%庢++ }))к&&堨箠ĺŮԩ(( }--8,(())󠱠 }宛((󠱠''䬠(( }宠''))2, }îD:EASYFIND.BAS))2, ?fuFPFPFPFPPAS@@ @4 @}"E2/2@@E2@@(+"@+2@@}@2W2@;2@@@W2@@@<-@@P }F @ P-6-@#Ap# @- @ Z>#6-@42@> @d}MEASURE 1n50,4,0,0,0,0,0,0x0,0,0,0,0,0,0,01,4,0,0,0,0,0,01,0,0,0,0,0,0,050,4,0,0,0,0,0,050},0,0,0,0,0,0,01,4,0,0,0,0,0,01,0,0,0,0,0,0,0MEASURE 250,4,0,0,0,0,0,00,0,0,0,0,0,0,01,4,0},0,0,0,0,01,0,0,0,0,0,0,050,4,0,0,0,0,0,050,0,0,0,0,0,0,01,4,0,0,0,0,0,01,0,0,0,0,0,0,0ME}ASURE 3"50,4,0,0,144,6,0,0,0,0,0,0,144,6,0,061,4,0,0,0,0,0,0@1,0,0,0,144,6,0,0J50,4,0,0,144,0,0,0T}50,0,0,0,144,6,0,0^1,4,0,0,0,0,0,0h1,0,0,8,0,0,0,0rMEASURE 4|50,4,0,0,144,6,0,00,0,0,0,144,6,0,0}1,4,0,0,0,0,0,01,0,0,0,144,6,0,050,4,0,0,144,0,0,050,0,0,0,144,6,0,01,4,0,0,0,0,0,01,0,0,}8,0,0,0,0MEASURE 550,4,0,0,144,6,0,00,0,0,0,144,6,0,01,4,60,0,0,0,47,41,0,53,0,144,6,45,4}50,4,47,0,144,0,40,450,0,53,0,144,6,45,41,4,60,0,0,0,47,41,0,47,8,0,0,40,4&MEASURE 6050,4,47,8,14}4,6,40,4:0,0,47,8,144,6,40,4D1,4,60,0,0,0,47,4N1,0,53,0,144,6,45,4X50,4,47,0,144,0,40,4b50,0,53,0,14}4,6,45,4l1,4,60,0,0,0,47,4v1,0,47,8,0,0,40,4MEASURE 750,4,47,8,192,6,64,40,0,47,8,192,6,60,4}1,4,64,0,0,0,53,41,0,60,0,192,6,47,450,4,53,8,192,0,45,450,0,60,0,192,6,40,41,4,64,0,0,0,35,41},0,53,0,0,0,31,4MEASURE 850,4,53,8,192,6,35,40,0,53,8,192,6,40,41,4,64,0,0,0,45,41,0,60,0,192,6},47,4 50,4,53,0,192,0,53,450,0,60,0,192,6,60,4 1,4,64,0,0,0,64,4*1,0,53,0,0,0,64,44MEASURE 9>5}0,4,53,8,182,6,72,4H0,0,53,8,182,6,64,4R1,4,72,0,0,0,60,4\1,0,64,0,182,6,53,3f50,4,60,0,182,0,47,4p5}0,0,64,0,182,6,53,4z1,4,72,0,0,0,60,41,0,60,0,0,0,47,4MEASURE 1050,4,60,8,182,6,47,40,0,60,8,182},6,47,41,4,72,0,0,0,60,41,0,64,0,182,6,53,450,4,60,0,182,0,47,450,0,64,0,182,6,53,41,4,72,8,0,0},60,41,0,72,8,0,0,60,4MEASURE 1150,4,81,8,162,6,29,40,0,81,8,162,6,57,41,4,81,8,0,0,31,41},0,81,8,162,6,64,450,4,81,8,162,0,35,4$50,0,81,8,162,6,72,4.1,4,81,8,0,0,40,481,0,81,8,0,0,81,4BMEA}SURE 12L50,4,91,8,162,6,45,4V0,0,91,8,162,6,91,4`1,4,91,8,0,0,47,4j1,0,91,8,162,6,96,4t50,4,81,8,162},0,53,4~50,0,91,8,162,6,108,41,4,91,8,0,0,60,41,0,91,8,0,0,121,4MEASURE 1350,4,96,8,192,6,0,0}0,0,96,8,192,6,0,01,4,96,8,0,0,0,01,0,96,8,192,6,0,050,4,96,8,192,0,0,050,0,96,8,192,6,0,01,}4,96,8,0,0,0,01,0,96,8,0,0,0,0MEASURE 1450,4,96,8,192,6,76,4 0,0,96,8,192,6,76,41,4,96,8,0,0,76,}41,0,96,8,192,6,76,4(50,4,96,8,192,0,76,4250,0,96,8,192,6,76,4<1,4,96,8,0,0,76,4F1,0,96,8,0,0,76,4}PMEASURE 15Z50,4,76,8,192,6,64,4d0,0,76,8,192,6,64,4n1,4,76,8,0,0,64,4x1,0,76,8,192,6,64,450,4,}76,8,192,0,64,450,0,76,8,192,6,64,41,4,76,8,0,0,64,41,0,76,8,0,0,64,4MEASURE 1650,4,64,8,192,6,}53,40,0,64,8,192,6,53,41,4,64,8,0,0,53,41,0,64,8,192,6,53,450,4,64,8,192,0,53,450,0,64,8,192,6, }53,41,4,64,8,0,0,53,41,0,64,8,0,0,53,4MEASURE 1750,4,53,8,192,6,45,40,0,53,8,192,6,45,4"1, }4,53,8,0,0,45,4,1,0,53,8,192,6,45,4650,4,53,8,192,0,45,4@50,0,53,8,192,6,45,4J1,4,53,8,0,0,45,4T1,0, }53,8,0,0,45,4^MEASURE 18h50,4,53,8,192,6,45,4r0,0,53,8,192,6,45,4|1,4,53,8,0,0,45,41,0,53,8,192,6,4 }5,450,4,53,8,192,0,45,450,0,53,8,192,6,45,41,4,53,8,0,0,45,41,0,53,8,0,0,45,4 D:MELODIC.BAS,4{ ҩ& ҅̅έͩ@Ϡ@̑@FPPP PI;Pש@ԩ/b} \䩈0=1 & )$ D%M_G<"/M<<< ޭ$_G@}p !9PL /`GMWG;_G 8>0 %3ͩ %&i@ %9P O%:P 8:Pm9Pe}̰=̐ӍP!"ʭP)i@iȑ %9P O%:P8:Pm9Pḛ̐1̠ͩБȩQ %iPRPSȩԑȘ}e̅ %m آ %i= }0)= 00="#1 9$%& \?//+P(PPLj L!P#PL1! U% D%0>P~P $P};;  $PW)PP}5Pl %&PPPP,PP+P PPP$P<i<< э<Ѝ< i<Ѝ}<P $@P%P?P#$ $L#"Pخ PWGi WG$P` WGL#T %``EO%N`wP>>@?F .}` aG) MaG )]P>>@?ʈ0ǩD D` )HTThUUPP` ҬP)L$)L$PЍiЮ>PʩT}UTU $PWG$%0$P`p=X=`tW`̩̈́`P }%PPP*nPPP`}`<)`>P#=SSʈPPP P t$` )` )` )`PPPP`HHʍ Խ?н=ԍ ԽX?нp?н}?н@?н > ԍн >}8> ԍʽ%& G ԍЍ!P 0P 4$hh@H6 4$h@ ҍh@&'+PL/ʍP%PL/}P hhL!L/ PL&PP8=P $ D%L/ +$ (?i) p(??i ҩύҍL/w*P)]>>@?ҍ}ҍҭP  IL/=g==\==+8>=>>@=>PF0=PLA''(>>==}>PF0=PLA'=6P6Pɀ >6P7P7P:<) BzBs BBgBB7PPP(<} q?r?>(q?r?P P P8H!CCC?CCC PPL)Pz>PL(5PL)P()P ;P}PxMP) ;P;P;P;P ;PPIP;PPP PP>PL7)>PL7) PPPx)Lm);P P %}PP!GPLm)EGҽ3GieiePLm)PL(;P * P%PɁ|P PP O%"P"P #L) *m)P }Lm)P;PP!x)x)Px)x)Lm)>PL7)>PL7)PP PP>P%%>PP&&PPэP $!}-Pq.PL* }%L* }%1P1P %4P 0P %`G`G E~W/PPPɈ!Py PP6=P O%"P"P #(Pi(P(Pη;;D;;<<`G`GaG&}aG D%@,-Px P?P%P $L/ U%L,P*ҭP  U%L,>P=SSʬPȩ# U%L,=SP0- PSʈݩ=S '} ) >Pɀ  P % PLD-PfPLD-x)U)>Pi $ $L,>P $ $P >Pi $PIP(}",P,P--,P ,P,PPP@P0>PȭP"G!GȩBU2PL-8P0P %3P3P8 %Ѝ)}P2P3P-P] )3P ( !@3Pҩҩ йHF #%~W0"P83PҩҊ HF #%vWwWBPLm.APAPl*}ҍAPBPЪzV-.`i6.*ҩP8APP %MPҭ ) hF #%V7AP8 ҩVVOҪ )xF{V|V}V~V+}Ș)2P2PP"=P=PJJ @ҩ PҭPL/&P0m&Pҭ&P0L/P;x+PL/ $ ,}ҭ )>P PHF #% $./ PL/ $,P ,PJJJJL/ҩ,PP8iЩ P>P8 )0FT-} P P )0PFP .%PPU P PMЭ@P(?P 4$@?Lb//::UZ\YW[\XU[\XW[^`bb\XWYU[\Y/}VZ^`bd\XV[\Y\YUZ\XV[_`baef]^`daij_c\YVZ^`dc\XUZ_^_`acij]`bbij]`ij^_]`adcbgh`ij^]^bij]_``acbaef]]_``ij^_^`ackklkklllklmnonom0}llklklnkllkklmonoomkllklkllkklmoprqrpqrprrqr:;prprprqrpqrpqrprqpqprprpqrprqrprprrpstust}ststutsus}sustusts~~sutu}ttsututttu1}s}sstu}}wx}v}}v}}}wx}}}xv}x}}yz{|y}}}x}}}}}}v}}}}w}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~}}}}}}}}}}}}}}}}}}}}}}#2!$32}&5%,0<=,%6%,3}pp01Ԁ0Ԁ0@75@35@375Ԁ0Ԁ0Ԁ0: R;A0=ԀԀ<<=Ԁ04}=Ԁ0pppppD;pppppppppppppp==pA=P>>ʤ22222222222$4444444444 6666666666P@@@@@@@5}@@@HH@@@@@@@@P@?@ BB/;;/@6}@;>;=TyT ?> @PPP@ (y% 59-)89)$88$99)%TZ7}TT **  `X>;=@PY@PU?=@PUUYV꾻BC8}jiUYeYiVeYYeUYf@SUUYUV~ZVe~_YUYe{^ee_Y_~9}YYYYU_UUW?CD:}$~~$$<~BB$~~$$<~B$~~$$<~BB$~~$$$fBB$~~$$$BBB;}$~~$$$BBB$~~$$$BBZ$~~$$$BZZ$~~$$$ZZB$~~$$>*I">}>EF$(88(<~<T8|8T(8<<8|8T8TZU>~$HB(4D@(9ADGK"""""""""""""!!!!!!!!!11 8@PX`hpx 80_][YXXY[]_08HH((((((((((HHA} GN9/   #&),/258;>ADGK"""""""""""""!!!!!!!!!11 8@PX`hpx 80_][YXXY[]_08HH((((((((((HHCdX; *********************nX; * ROCKS! *xX; * *X; * BY DOUGLAS ENGEL *X; * C} *X; *********************X;X; OS EQUATESX; ATRACTM AUDC1 AUDC2 AUDC3 AUD}DC4AUDCTL AUDF1 AUDF2 AUDF3" AUDF4, CH6 CHBAS@COLOR0JCOLOR4TE}COLPF0^COLPM0h COLRSHOrCONSOL| DRKMSKNGRACTLАHITCLRКHPOSP0ФHPOSP1ЮF}HPOSP2иHPOSP3HPOSM0HSCROLKBCODE  M2PF M2PL  NMIEN P0PF P0PLG}  P1PF P1PL & P3PL0PCOLR0:PMBASED PRIORNRANDOM X RUNADbSDLSTL0lH}SDMCTL/vSETVBV\SIZEP0Њ SKCTLҔSTICK0xSTRIG0VDSLSTVKEYBD WSYNC I}XITVBVbX;X; PROGRAM EQUATESX;#MISSLESPMTABL;;PM missles)PLAYER0PMTABL;;PM players 0 & 1PLAYJ}ER1PMTABL #PMSATSPMTABL~;;PM for satsPMTABLP;;Loc. of table  PMZAPPMSATS;;PM for zap*+SCOREBOARDK}SCREEN;;Print score here4SCREEN0;;Screen mem.>X;HX; PROGRAM VARIABLESRX;\ PMTABLf"ACCOUNT ;;VelocitL}y counterpALT ;;1/30 sec counterz#ANIMATE ;;Animation counter'ANIPTR ;;Offset to frame values BEAMDLAYM} ;;Delay counterBEAMFLG ;;Flags beam onBEAMPOS ;;Beam lengthBLEEP ;;DecayBLINK ;;Light coN}unterBLINK1 ;;Ditto#COMPLETED ;;Level done flag#COWNTER ;;Explosion counter"DIGIT ;;Current scorO}e dig.DOOM ;;Doom flagEMPTY ;;No fuel flagENDCNTR ;;Doom counterETC. ;;Misc. sound flagEXP}PLOSION ;;FlagFD ;;Flame dir.$FLASHME ;;Light counter.FLIP ;;Direction mask8FUEL ;;Amount ofQ} fuelB"FUELMTR ;;Offset to needleLFUELUSE ;;Rate of useV+GRAVITY ;;Counter for veloc. change`G.O ;;R}Game over flagj HOLDA ;;Temp accumulatortHOLDX ;;Temp index reg.~HPOSME ;;My horiz.HPOSSAT ;;Sat S}horiz.#KONSOL ;;Former consol val.LANDFLAG ;;Flag landingLOADED ;;Flag loaded$MISS ;;M2PF shadT}ow (sort of)MULTIPLY ;;Multiplier NEWLEV ;;Next level flagNEWSC ;;Flag show scorePAUSED ;;PausU}e flag#POWNTER ;;Explosion counter'RADCOUNT ;;Rate of rad increaseRADS ;;Amount of rads"RADSMTR V};;Offset to needle RAND1 ;;Saved random #RESET ;;Set up me flagROAR ;;Rocket decay(SAT? ;;ActivW}e sat flag2*SATCNT ;;Time between sats counter<"SATCNT1 ;;Sat move counterFSATCOLR ;;Color of satPSATDIX}R ;;Move directionZ#SATEXP ;;Sat explosion flagd(SATFRAME ;;Sat explosion counternSATSPD ;;Speed of saY}tx SKY ;;Where fall happens#STARCNT ;;Star move counterSTROBE ;;Light counterSUPER ;;Super sat fZ}lagTEMPA ;;TemporaryTEMPB ;;TemporaryVELOCITY ;;Fall veloc.VOL ;;DecayVOL4 ;;Decay[}VPOSME ;;My vert. WAITCNTR ;;Message delayWAITING ;;Message flagZAPCNT ;;Zap counterZAPFLAG \};;Flags zapX;X; ZERO PAGE EQUATESX;"#LINENO;;Current DL mode line,#SHAPEA;;Player 0 bit pattern6 SHAP]}EB;;same for Player 1@ZEROPA;;General usageJZEROPB;;same hereTX;^ X; PROGRAMhX;r |STARTQ>;;Init^} serial port PSKCTLQ>4INKEY;;Steal KB vector PVKEYBD Q>5INKEYPVKEYBDQ>;;Star colorPPCOLR0Q_}>;;Init sound PAUDCTLX;X; Move portion of charsX;PZEROPA;;Clear these PZEROPBQCHBAS;;Point to chars`}PZEROPA&Q>5CHARS;;Point to mine0PZEROPB:%>@;;16 already definedD$>NCHLOOPQ@ZEROPA7;;Move 'emX P@Za}EROPB7b3l HCHLOOPv#ZEROPA#ZEROPB0 ICHLOOP%Q>5CHARS;;Tell OS where they went PCHBASX;X; Drab}w titleX;%>$>"BITBLTQBITS9;;Grab title bytePHOLDA;;Save it&HOLDX;;Save x$>;;Rotate byte 8 timesc} SHFTQHOLDAT?  PHOLDA*DCC;;See if 0 falls out4Q>I;;No, load Rock char>HPLOT;;AlwaysHCCQ>;;Space charRd}&PLOTPTITLE8;;Store in screen mem.\3f0p ISHFTz$HOLDX;;Get next byte2(>HBITBLT;;Go back until doneSe}ETUPQ>@;;DLI off PNMIENQ>;;DMA off PSDMCTL%>4XITVBV;;VBI off $>5XITVBVQ> SETVBVQ>4DLIST1;;Newf} DL vectors PSDLSTL Q>5DLIST1 PSDLSTL !CDLI1Q>4DLI1;;New DLI vector$ PVDSLST. Q>5DLI18 PVDSLSTB Q>g};;DLI onL PNMIENV  INITPM;;Clear PM regs.`  SILENT;;No soundj PATRACT;;No attractt PCOLOR0;;Black~ Q> PCOLq}B%DOS SYSB*)DUP SYSB SBOOTCAMPM65B\EASYFINDBASB"MELODIC BASB5 ROCKS OBJBBROCKS1 M65BROCKS2 M65BSHAKUHACBASSOUND1 BASOR0;;Dk grey Q> PCOLOR0;;Grey Q> PCOLOR0;;Lt grey Q> PCOLOR0;;Blue QSLEVEL;;Use start levelr} PLEVEL Q>";;Screen DMA on PSDMCTL X; INPUTQCONSOL;;Consol input R>;;No key, try again FINPUT PATRACTs};;Off( SELR>;;Select?2 HSTA< #LEVEL;;Update levelF QLEVELP R>;;Insure wrap at 10Z HDEBOUNCEd Q>n PLEVELx t}HDEBOUNCE;;Always STAR>;;Start? HINPUT LGQCONSOL;;Wait for release R> HLG FUNPRESS;;Always %DEBOUNCu}EPSLEVEL;;New start level $>@;;Debounce delay %> ASIA3 HASIA 0 HASIA BOINK$>p;;Wait for release %>v} PRESSEDQTEMPA;;Waste time" 3, HPRESSED6 QCONSOL;;Let go, go back@ R>J FINPUTT 0^ HPRESSEDh !INPUT;;go bacw}k nowr X;| UNPRESSQ> PSDMCTL PTOTAL;;Levels done=0 PATRACT;;Off (CLRSCR$>;;Put ATASCII 0's in score Q>x} GEMPSCORE9 0 IGEM Q>;;ATASCII 3 ships PSHIPS !QSLEVEL;;Start at start level PLEVEL PPAINT;;Planet coly}or mask X; (INITQ>5PMTABL;;Clear all those vars %>4PMTABL& $>0  CLEER;;Use this routine:  SILENT;;Sound offD z} INITPM;;Reset PM regs.N Q>;;Make sure that weX #PCHARS;;Start with originalb PCHARS;;Char shapesl Q>v PC{}HARS Q> PCANISTERS PPAUSED;;Start paused ACROSSQ>;;PM on PGRACTL "Q>5PMTABL;;Tell OS where pm is P|}PMBASE Q>;;Clear scroll tables $> CLRPSCRLST9 0 ICLR Q>5MISSLES;;Clear PM area %>4MISSLES $> C}}LEER &Q>5MISSLES;;Put stars in missile 3* PZEROPA4 Q>4MISSLES> PZEROPAH Q>);;Starting lineR SPOT?\ Q>;;Put ~}$80f P@ZEROPA7;; on 2 consecutivep #ZEROPA;; bytesz P@ZEROPA7 "ZEROPA C , O>;;Then skip 8 bytes DSPOT;; a}nd put in more X; $>;;Draw guage needles NEEDLEQMISSLES9 L>;;Missiles 0 & 1 PMISSLES9 2 (> HNEEDLE}X; $> ;;Create random distances&STARSQRANDOM;; between the horiz.$)FSTARS;; positions of the consecutive.PMPOS9};; star bits.8OFSQRANDOMBFOFSL POFFSET9V0` ISTARSjX;t,FIELDCLRQ>5SCREEN;;Clear asteroid field~ %>4SCREEN}$>  CLEERX;X; Put rock chars on screenX;$>!Q>5SCREEN;;Start locationPZEROPA ROCKSQ>}PZEROPA;;Start at 0ASTRO R16;;Random # R>;;<6?DDOUBLE;;Yes, make big rock ,O>@;;Offset to char code%>}(P@ZEROPA7;;Put in char2$ R16;;Find spacing for next rock< PTEMPAF GETLEV;;Based on levelP PTEMPBZ%Q> ;;By su}btracting level from 14d;n STEMPBx, OTEMPA;; and adding random #,OZEROPA;;Point to new spotECOMPLE;;Done }at page end PZEROPADASTRO;;AlwaysDOUBLEPHOLDA;;Save!QZEROPA;;See if near page endR>EASTRO;;Too close }try againQHOLDA;;Get char codeM>;;Make evenO>@;;Char offset%>P@ZEROPA7;;Put in mem,"O>;;Next cha}r,36!P@ZEROPA7;; goes in next byte@( R16;;Random spacing by level again.J PTEMPAT GETLEV^ PTEMPBhQ>r;| S}TEMPB, OTEMPA, OZEROPA ECOMPLE PZEROPA DASTRO)COMPLE#ZEROPA;;Point to next page#ZEROPA0}IROCKS;;Do moreX;X; Put fleet on screenQ>5SCREEN;;Set addr.PZEROPAQ>4SCREEN& PZEROPA0PU}TSHP%>;;Set index:Q>;;Rear char codeDP@ZEROPA7;;PlaceN3;;Next byteXQ>Q;;Engines charbP@ZEROPA7;;Placel 3;;N}extv R07;;Random # <=7 but >3,O> PHOLDAQ>R;;Pod back charSHIPP@ZEROPA7 3;;Next)HOLDA;;Done enoug}h? HSHIPQ>S;;Bridge char P@ZEROPA7 3;;NextQ>;;Nose char P@ZEROPA73 C, !OZEROPA;;Start addr is n}ow at*PZEROPA;;Front of ship4 R16;;Spacing = 2*level+Rnd> OLEVELH OLEVELRO> ;;+ $20\,fOZEROPA;;Add to start}pEOVER;;Page done?z PZEROPA;;See if too close toR>;;Page boundary DPUTSHPX;X; Copy for scroll wrapX;}OVER$>;;# of pagesQ>4SCREEN;Set up PZEROPAQ>5SCREENPZEROPAWRAP%>;;# of bytes movedCOPY}Q@ZEROPA7;;Get one #ZEROPA;;Put on next page P@ZEROPA7#"ZEROPA;;Point to ogir. page3$)>0.HCOPY;;Done}?8#ZEROPA;;Skip a pageB#ZEROPAL 0;;Done?V IWRAP`X;j(X;Random scroll directions and speedstX;~Q>PS}CRLST;;Fleet dirQ>PLIMIT;;Fleet speed$>#SETDIRQRANDOM;;Random rock dirM>FSETDIR;;no 0'sR>};;no 3's FSETDIR PSCRLST9R>;;Set counterHRD;; to right valueQ>;; for left  PCURR9HZC;;AlwaysR}DQ>;;Also for right( PCURR92ZCQ>;;Set 0 color clocks< PCOLCKS9F2P(> ;;Done?Z HSETDIRd%SPEED$>;;Set 5 (s}peed) countersnSETSPD R16;;Random # 1-16xO>PLIMIT9;;Store itQRANDOM;;Bias the speedsR>0;; if <$30 DCON}TINM>;;High speed PLIMIT9 CONTIN2(> ;;Done? HSETSPDX;Q>4DLIST;;New DL vector PSDLSTL Q>5DLIST}PSDLSTL OLDC;;Set color tableCDLIQ>4DLI;;New DLI vector" PVDSLST, Q>5DLI6PVDSLST@%>4VBLANK;;New V}BI vectorJ $>5VBLANKTQ>^ SETVBVhFATQ>?;;Wide screen DMAr PSDMCTL|HRESETME;;AlwaysX;X; PROGRAM LOOP}X;LOOPQRESET;;Reset flag?FSPCLKEYS;;No, check consolHRESETME;;Yes, reset SPCLKEYSQCONSOL;;Get consolR>;};Any pressedHAAAAAC;;Yes, go aheadQKONSOL;;No, get former$>&KONSOL;;Clear itSEL1R>;;Select? HSTA1}!SETUP;;Go to title screenSTA1R>;;Start?& HAAAAAB0!UNPRESS;;Restart game:*AAAAACPKONSOL;;Save Console in form}erD'AAAAABQNEWLEV;;Check for new levelN FLOOPX!INIT;;Start new levelbX;lRESETME BEAMOFF;;No beamv SILENT;;No} soundQ>0;;Init my positions PVPOSMEQ>~ PHPOSME CLRME;;Erase me!QEXPLOSION;;See if I explodedFRS232;};No? skip this.SUBTRACT"SHIPS;;Another on bites the dustQSHIPS;;Any left?R>HRS232;;Yes skip this#$>;;Gam}e over message and flag DLPRINTQ> PG.O"RS232Q>W;;Reset all variables  PRADSMTR*Q>4 PFUELMTR>Q>}H}PSKYRQ>l\PPCOLR0fQ>p PPCOLR0z FLAGS;;Reset landed flags PPOWNTERPEXPLOSION PGRAVITY PEMPTY }PROAR PETC. PRESETPCOMPLETEDQ>;;Fill 'er up PFUELQ> PFLIPPNEWSC;;Flag new score#QLEVEL;;Get} right ATASCII value,;; for displaying levelO>$ PPLEVEL.QLEVEL;;Find multiplier8R>;;If level<9 thenBHONED}IGIT;;Mult. <10LQ>;;Mult must be 10VPPMULT;;Show "1"`Q>jPPMULT;;Show "0"tHTHX1138;;Always~ONEDIGIT,;;M}ult. = level+1!O>;;+$C0 for correct ATASCII PPMULTQ>ЦPPMULT;;" " in second digit"THX1138QG.O;;See if ga}me overHNEO$>;;Yes, show message DLPRINTQ> PWAITINGQ>;;Permanent pause PPAUSEDQ>  PWAITCN}TRNEO SHOW;;Show me!LOOP;;Back to main(X;2X; SUBROUTINE LIBRARY<X;FX; routine to find scorePX;Z#MATH%MU}LTIPLY;;# of iterationsd-n$STEP$DIGIT;;Digit to operate onxADDNUMQSCORE9;;Current val,O>;;+1 for each iterat}ionR>;;Over 10?ENEXTPLACE;;Yes, next digitFINPSCORE9;;New val 1;;NextHSTEP;;Another iterationQ>P}NEWSC;;Flag score :;;Done!NEXTPLACE,;;Sub 9 from valS> PSCORE9;;Save0;;Next higher digitIADDNUM;;Always}'EGG!LOOP;;Easter egg could go here"X;,&X;Routine to clear me form PM table6X;@CLRMEQ>5PLAYER0J%>4PLAYER0T$>}^ CLEERh:rX;|X; PM register clear routineX;INITPM$>;;17 registers+INITPQ>;;Entry point if other than} 17IPMPHPOSP090IIPM:X;"X; Routine for color attractingX;MIXUPNCOLRSH MDRKMSK:X;(X; Rou}tint to initialize color tablesX;& OLDC$>w0 SETCOLRQCOLTAB9;;Orig color:PACOLTAB9;;Attract tableDPDCOLTAB9;;Di}splay tableN(>FX-FCHANGE;;Test to see if color in questionb(>.lFCHANGE;; is a planet colorv(>FCHANGE;; and} alter it0ISETCOLR;;Done? :;;ReturnCHANGE%> ;;Change next 11SILLYQPAINT;;Get maskM>;;Make lower bits }highT?T?T?T?NPAINT;;Scramble itT?;;Scramble moreM>;;Mask high intensity 'NCOLTAB9;;Use it to scramb}le colors PACOLTAB9  PDCOLTAB9*041>ISILLY;;All done?HGSETCOLR;;NO, go backRX;\)X; Routine to set my PM shap}e pointersfX;p!SETSHAPEQ>4SHAPE1A;;Player 0z PSHAPEAQ>5SHAPE1APSHAPEAQ>4SHAPE1B;;Player 1 PSHAPEB}Q>5SHAPE1BPSHAPEB:X;#X; Routine to put flames on shipX;)BURNQRANDOM;;Bits for top and bottomM>;;F}lames here'PUT5;;Entry point from side routine!LPLAYER09;;"OR" into player 0 PPLAYER097$LPLAYER19;;Ditto. PP}LAYER198#FUELUSE;;Rockets use fuelB #FUELUSEL:VX;`'BURN1QRANDOM;;Bits for side flamesj%FD;;Movng left or righ}tt)>~HRF;;Right. skip thisM>;;Mask bits!PUT;;Show themRFM>;;Mask bits!PUT;;Show themX;X; Rout}ine to show meX;"SHOWQHPOSME;;Set horiz. regs. PHPOSP0 PHPOSP1,O>;;+3 for beam horiz.PHPOSM0 $}VPOSME;;My vert0Q>(!PPLAYER09;;Erase flames above2 PPLAYER19<2F%>P%LPRINTQ@SHAPEA7;;Move shape dataZ P}PLAYER09dQ@SHAPEB7;;For both playersn PPLAYER19x23)> ;;12 bytes? HLPRINT QNEWSC;;See if score updatedF}AAAAAD;;No, skip this%$>;;Yes, Put score in screen memRMKQSCORE9PSCOREBOARD90IRMKQ>;;Clear flag P}NEWSCAAAAAD:;;ReturnX;!X; Routine to display messagesX; by altering Display list"X;,DLPRINT%>;;Counter6}LLLLLLQDLTABL9;;New DL val@PDLIST(8;;StoreJ2T3^)>;;6 vals alteredhHLLLLLL;;No, do,it againr:|X;/X; Ro}utine to clear satellites form PM tableX; CSATQ>$>;;Zero 64 bytesRUBPPMSATS 90IRUB:X;&X; G}eneral purpose clearing routineX;$CLEERPZEROPA;;Save high byte'ZEROPA;;Save low byte Q>;;X reg. is # of pag}es ? CLEANP@ZEROPA7;;Clear& 30 HCLEAN: #ZEROPAD 0N HCLEAN;;Do until doneX :b X;l &X; Routine to mirror bit}s in a bytev X; /MYRNAPHOLDA;;Entry point for random mirror  R01 HRET;;Don't mirror QHOLDA 0MIRRORPHOLDA;;Ent}ry point for mirror always &HOLDX;;Save x $>;;8 bits MMU?;;Rotate bit in carry WHOLDA;;Rotate out reverse 0 }IMM;;Do all 8 $HOLDX;;Restore X & A RETQHOLDA! :;;Done! !X;!X; Routine to turn off sound !X;*!%SILENTQ>;;No e}xplanation needed4!$>>!HUHPAUDC19H!0R!IHUH\!:f!X;p!!X; Routine to get actual levelz!X;!GETLEVQLEVEL!M>!}:!X;!X; Routine to erase beam!X;!(BEAMOFF$VPOSME;;Beam starts at me+2!2!2!%>#;;Erase this much!OFFLOOPQ>}! MMISSLES9! PMISSLES9"0"1"HOFFLOOP;;Do it all$"Q>;;Clear all beam flags." PBEAMFLG8" PBEAMDLAYB" PBEAMPOSL"} PLOADEDV" PAUDC4`"! SETSHAPE;;Set original shapej":t"X;~"X; Random number routines"X;"R01QRANDOM"M>":"R}07QRANDOM"M>":"R16QRANDOM"M>":"X;"#X; Landing flag clearing routine#X; # FLAGSQ># PLANDFLAG# PAC}COUNT(# PANIPTR2# PANIMATE<#:F#X;P#$X; DISPLAY LIST INTERRUPT ROUTINEZ#X; FOR GAME SCREENd#X;n#DLI5;;Save 650}2 regs.x#A#5#$LINENO;;Current mode line# PWSYNC#"QDCOLTAB`9;;Background color#PCOLPF0#QCURR9;;Current HS}CROL val# PHSCROL# PWSYNC#QDCOLTAB9;;Color1#PCOLPF0#QDCOLTAB09;;Color2#PCOLPF0#QDCOLTABH9;;Co}lor3$PCOLPF0$QDCOLTAB9;;Color0$ PCOLPF0"$QMPOS9;;Stars on this line?,$FNOSTAR;;No? skip this6$ PWSYNC@$#PHPO}SM0;;Horiz. pos. of starJ$'QMPOS9;;Find pos. of star next lineT$,^$ OOFFSET9h$PWSYNC;;Wait for next liner$&NOSTARPH}POSM0;;Save pos for it|$ #LINENO$$QPRITAB9;;Set priority this line$ PWSYNC$ PPRIOR$(>;;Is it line #2?$HNADA;};No, skip$#QM2PF;;Hold collisions for line$ PMISS$NADA(> ;;Line 11 yet?$HNAY;;No, skip$#QSATCOLR;;Change color f}or sats$ MIXUP;;Attract them first$PCOLPM0$NAY7;;Restore 6502%>%7%9&%X;0%$X; DISPLAY LIST INTERRUPT ROUTIN}E:%X; FOR TITLE SCREEND%X;N%DLI15;;SaveX% Q>6;;Redb% MIXUP;;Attractl%PCOLPF0;;Color0v% 7;;Restore%9%X;%} X; KEYBOARD INTERRUPT ROUTINE%X;%+INKEYQKBCODE;;Key code (A saved by OS)% PCH;;Save% 7;;Restore%9%X;%X; COMMON} LABELS%X;%ACOLTAB>% BITSF&CANISTERS; & CHARS@&COLCKS> &COLTABP>*& CURR=4&DCOLTAB@?>}& DLIST0=H&DLIST1=R&DLTABLp=\& LEVELz&OFFSET8>& PAINTaG&PLEVEL<& PM}ULT<&PRITAB G& SCOREWG&SCRLST=&SHAPE1AD&SHAPE1B D& SHIPS;&SLEVEL_G& TITLE;& TOT}AL`G&VBLANK&'SCOREWG&SCRLST=&SHAPE1AD&SHAPE1B D& SHIPS;&SLEVEL_G& TITLE;& TOTboX X; ROCKS! VERTICAL BLANKb X; ROUTINE AND DATA TABLESl X; By: Douglas Engelv X; X; OS EQUATES X; ATRACT}M AUDC1Ҩ AUDC2Ҳ AUDC3Ҽ AUDC4 AUDCTL AUDF1 AUDF2 AUDF3 AUDF4 CH}!HITCLR !HPOSP0!HPOSP1 !HPOSP2*!HPOSP34!HPOSM0>! M2PFH! M2PL R! P0PF\}! P0PL f! P1PFp! P1PL z! P3PLЄ!PCOLR0! PRIORИ!RANDOM Ң! RUNAD!SIZEP0ж!STICK0}x!STRIG0!XITVBVb!X;! X;COMMON LABELS AND VARIABLES! X;SEE PART 1 FOR DESCRIPTIONS!X;!ACCOUNTP" }ALTP"ANIMATEP"ANIPTRP$"BEAMDLAYP."BEAMFLGP8"BEAMOFFU%B"BEAMPOSPL" BLEEPPV" BLINKP`"}BLINK1 Pj" BURN$t" BURN1$~" CLRME$"COMPLETED P"COWNTER P" CSAT%" DIGIT P"DLPRINT$" }DOOM P" EMPTYP"ENDCNTRP" ETC.P"EXPLOSIONP" FDP" FLAGS%#FLASHMEP # FLIPP# FUEL}P#FUELMTRP(#FUELUSEP2#GETLEVO%<#GRAVITYPF# G.OPP# HOLDAPZ# HOLDXPd#HPOSMEPn#HPOSSAT}Px# INITP+$#KONSOLP#LANDFLAGP# LINENOʠ#LOADED P# MATH##MIRROR.%# MIXUP4$# MISS!P}#MISSLESPMTABL#MULTIPLY"P# MYRNA#%#NEWLEV#P# NEWSC$P$ OLDC9$$PAUSED%P$PLAYER0PMTABL}"$PLAYER1PMTABL,$PMSATSPMTABL~6$PMTABLP@$PMZAPPMSATSJ$POWNTER&PT$ PUT$^$ R01}%h$ R07}%r$ R16%|$RADCOUNT'P$ RADS(P$RADSMTR)P$ RAND1*P$RESETFLAG+P$ ROAR,P$ SAT?-P$SATCNT.}P$SATCNT1/P$SATCOLR0P$SATDIR1P$SATEXP2P$SATFRAME3P$SATSPD4P% SHAPEA% SHAPEB% SHOW}$&%SILENTD%0% SKY5P:%STARCNT6PD% START N%STROBE7PX% SUPER8Pb%UNPRESS!l%VELOCITY;Pv% VOLP%WAITCNTR?P%WAITING@P%ZAPCNTAP%ZAPFLAGBP%X;%&;;Byte after Part 1%X;%X}; VERTICAL BLANK ROUTINE%X;%-VBLANKQRESETFLAG;;Skip most during reset% FREADY& !TESTCH & READYQ>&PLINENO;;Poin}t to !st line &PFD;;Clear*& QPAUSED;;Skip most if paused4& FFIN?>& !TESTCHH&%FIN?QG.O;;Skip ahead if not overR& FDOOM}SDAY\&QSTRIG0;;Trigger restartsf& HBUSYp&!7;;This breaks out of routine,z&7;; so, pull ret. addr.&!UNPRESS;; and jump }back&BUSY!CLRCH&X;& X; Planet destruction routine&X;&!DOOMSDAYQDOOM;;Test for doom&HQW&!MOVEMENT;;No, skip }this&QW#ENDCNTR;;Count& QENDCNTR;;Test and branch to&'R>8;; appropriate part of explosion&DPY0&R>;;Maximum val}?'DPY1;;No, skip'$>;;Set game over flags'&G.O$' DLPRINT;;Print message.' SILENT;;Sound off8'!TESTCH;;Skip res}tB'PY0$>;;0 all HPOS regs.L' INITPV'$> ;;Increment sky colors`'GQACOLTAB`9j',t'O>~'M>;;Make them only blu}e'L>p'PACOLTAB`9'PDCOLTAB`9'PAUDF1;;Use val for sounds'O> ' PAUDF2'Q>;;Set audio control' PAUDC1'} PAUDC2'2'(>;;Do all sky lines'HG( !TESTCH (PY1$>w;;Flash all colors(G1QRAND1;;Random mask(M>;;Only in}tensity bits(( NACOLTAB92( PACOLTAB9<( PDCOLTAB9F(Q>;;Audio controlsP( PAUDC1Z( PAUDC2d(Q>n( PAUDC3x( PAUDC4(#Q}ENDCNTR;;Use counter for freq.( PAUDF1(T?;;Freq *2( PAUDF2(T?;;Freq *2( PAUDF3(N>;;Inverse(PAUDF4;;Use as f}req.(0(IG1;;Do all colors(!TESTCH;;Skip ahead(X;(X; Scrolling routine)X;)$MOVEMENT$>;;Scrolling 24 lines)}SCROLLQSCRLST9;;Direction")FNXTLIN;;0?, don't,)QCOUNT9;;Speed counter6)RLIMIT9;;Is it max?@)DINCCNT;;No, skipJ)Q>}T)PCOUNT9;;0 count^)QSCRLST9;;Check dir.h)R>r) FRIGHT|)#LEFTQ>;;Find #of color clocks);) SCOLCKS9)PCURR9;;}Put in table) #COLCKS9)QCOLCKS9;;See if too many)R>) HNXTLIN)PCURR9;;Reset table)Q>) PCOLCKS9) &HOLDX)}$QPOINTR9;;Find DL byte to change)>*#DLIST9;;Change* $HOLDX*!NXTLIN;;Next line&*$RIGHT#COLCKS9;;Next color clock}0*QCOLCKS9;;Update table:* PCURR9D*R>;;See if too manyN* HNXTLINX*Q>;;Reset tableb* PCURR9l* PCOLCKS9v* &HOLDX*}QPOINTR9;;DL byte to alter*>*"DLIST9;;Alter* $HOLDX*!NXTLIN;;Next* INCCNT#COUNT9;;Inc. counter*NXTLIN0;;Do }rest of lines* ISCROLL*!SKYLON#STARCNT;;Star counter*QSTARCNT;;Test max.*R>*HFLASH;;Not yet, skip*$> +!TI}ME"MPOS9;;Change star pos. +0+ITIME;;Do all lines +2*+ &STARCNT4+X;>+X; Light flashing routinesH+X;R+ FLASH#STROB}E;;Light counter\+ QSTROBEf+ R>;;Branch at each of thesep+ FYES1z+R>+FNO1+R>:+FYES+R><+FNO+HRUNING;;}None of them, skip+YES1Q> ;;On, alter char+PCHARS+ HMOVEME+NO1Q>;;Off alter char+PCHARS+ HMOVEME+}YESQ> ;;On, alter these,PCHARS,Q>,PCHARS$, HMOVEME.,NOQ>;;Off, alter these8,PCHARSB,Q>L,P}CHARSV,Q>`, PSTROBEj,&RUNING#BLINK;;Other light countert,!QBLINK;;Branch at right vals.~,R>(,FOFF,R><,F}ON, HBASE,OFFQ>;;Off, dark color,PDCOLTAB1,PDCOLTAB2, HMOVEME,ONQ>(;;On, light color,PDCOLTAB1,}PDCOLTAB2,Q>-PBLINK;;Clear count -$BASE#BLINK1;;Base light counter-QBLINK1;;Branch at these-R>8(- FDARK2-}R>H<- FLIGHTF- HMOVEMEP-DARKQ>;;Off, alter charsZ-PCHARSd-Q>n-PCHARSx-PCHARS- HMOVEME-LIGHT}Q>?;;On, alter chars-PCHARS-Q>-PCHARS-PCHARS-Q>- PBLINK1-X;-(X; Movement within atmosphere} routine-X;-(MOVEMEQEXPLOSION;;Skip if exploding- FLUKE. !SPOCK."LUKEQLANDFLAG;;Skip if landed. HLANDED".QVPO}SME;;Ground level?,.R>6. HABOVE@. !GROUNDJ.ABOVERSKY;;In space?T. ERISING^. !SPACEh.RISING#GRAVITY;;Inc. countr.} QGRAVITY|.R> ;;Max val?. HFALL.Q>;;Yes, clear. PGRAVITY.QEMPTY;;No fuel, no stick. FJOY1.Q>.HNOJOY1;;}Always.JOY1QSTICK0."NOJOY1NFLIP;;Change stick for.M>;;Up or down accel.. HDECEL. ACCEL"VELOCITY;;Move faster}.HFALL;;Can't be <1/Q>/ PVELOCITY/HFALL;;Always&/ DECEL#VELOCITY;;Move slower0/ QVELOCITY:/R>D/HFALL;;At t}his slow we areN/Q>;; reversing directionX/ PVELOCITYb/ QFLIPl/N>;;Flip to reverse dir.v/ PFLIP/FALLQVELOCITY;;C }ounter/ #ACCOUNT/ RACCOUNT/ FOOOOOH/ EJUMPIT/OOOOOHQ>;;Clear them/ PACCOUNT/"QFLIP;;See if going up or down }/ FDECRE/%INCRE#VPOSME;;Move down and jump/JUMPIT!SLEFT/#DECRE"VPOSME;;Move up and jump/ !SLEFT0X; 0X; Landin }g routines0X; 0%LANDEDQLOADED;;Landed? Then skip*0 HBLASTOFF40#ANIMATE;;Count>0HNOSTK;;Not maxH0Q>;;Reset countR0 } PANIMATE\0QSTICK0;;Wait for stickf0M>p0 FBLASTOFFz0 !PRINT0BLASTOFFQ>;;Set vel.0 PVELOCITY0PLOADED;;All lo }aded0 FLAGS;;Clear land flags0 PFLIP0!NOSTK$ANIPTR;;Find frame val0QANITAB9;;There yet?0 RANIMATE0FNEWFRAME;;}Yes0 !PRINT0$NEWFRAMEQNOIZE9;;Get sound vals0 PAUDC10 QFREQ91 PAUDF11,1 QSHAPEA;;Point to next frame$1O>.1}PSHAPEA;;Player081Q>;;+ carryB1OSHAPEAL1PSHAPEAV1,`1QSHAPEB;;Same, player1j1O>t1 PSHAPEB~1Q>1OSHAP}EB1PSHAPEB1#ANIPTR;;Counter1 !PRINT1%GROUNDQFLIP;;Up, or down motion?1 HFALLING1 !RISING1)FALLINGQVEL}OCITY;;Too fast, we crash1R> 1 DCRASHED1QLOADED;;Crash if loaded1 HCRASHED2QHPOSME;;Not on pad, crash 2R>2 E}CRASHED2Q>|(2 RHPOSME22 ECRASHED<2Q>;;Landed! set flagsF2 PDIGITP2 PLANDFLAGZ2 GETLEV;;Give scored2 PMULTIPLYn2} #MULTIPLYx2 MATH2 !PRINT2!CRASHED#EXPLOSION;;Flag <> 02 !PRINT2X;2X; Movement in space routine2X;2$SPACEQ>};;In space? reset Vars.2 PFLIP2Q>2 PVELOCITY2X;2(X;Test joystick for movement in space2X;3!SUPQEMPTY;;No fu}el, no stick3HCCC3QSTICK0;;Up?"3M>,3FMUP63SDOWNQSTICK0;;Down?@3M>J3 FMDOWNT3SLEFTQEMPTY;;Out of fuel?^3}HCCCh3QSTICK0;;Left?r3M>|3 FMLEFT3SRIGHTQSTICK0;;Right3M>3 FMRIGHT3CCC!PRINT;;No stick, skip3MUP"VPO}SME;;Up.3!SLEFT;;Test for sideways3MDOWN#VPOSME;;Down3!SLEFT;;Test for sideways3MLEFT"HPOSME;;Left3Q>;;Flam}e direction flag3PFD3 HPRINT3MRIGHT#HPOSME;;Right.4Q>4PFD4 HPRINT&4%PRINTQVPOSME;;Test screen bounds04R>}%:4 ETESTLD4Q>%N4 PVPOSMEX4TESTLQHPOSMEb4R>&l4 ETESTRv4Q>&4 PHPOSME4 TESTRQ>є4 RHPOSME4 EDISPLAY4Q>}4 PHPOSME4'DISPLAY SHOW;;Now we can show ship4X;4 X; Sattelite creation routine4X;4SPOCKQSAT?;;Move sat?4 HSA}TMOV4#SATCNT;;Delay between sats5FT1 5 !NODIFF5T1 R01;;Random # 5FT2;;No sat this time*5 !NODIFF45T2 R01;;Di}r to move>5 FMINMAYH5Q>;;RightR5 PSATDIR\5 HSDF1f5MINMAYQ>;;Leftp5 PSATDIRz5SDF1 R07;;Speed5FSDF1;;<> 05 P}SATSPD5QRANDOM;;Color5L>5 PSATCOLR5 R16;;Random sat5$RTOTAL;;Based on complete levels5 ETHAT5 DTHIS5!THAT}QTOTAL;;Use this for sat5THIST?;;Otherwise Random5T?5T?6>6%>6#SATLPQASATS9;;Move shape to PM$6 PPMSATS8.62}863B6)>L6 HSATLPV6Q>;;Set flags and counters`6 PSATCNT1j6 PBLEEPt6PVOL~6Q>6 PSAT?6 R07;;Is sat super6H }WIMPY;;No, skip6Q>6 PSUPER6HSATMOV;;Always6WIMPYQ>;;Not super6 PSUPER6X;6X; Sattelite movement6X;6#SA!}TMOV#SATCNT1;;Count to speed7 QSATCNT1 7 RSATSPD7 HNODIFF7QSATEXP;;Exploding? skip(7HNSO27QHPOSSAT;;Sound for sa"}t<7;F7S>;;Louder at mid screenP7IDIVZ7N>d7,n7O>x7DIVPVOL;;save7&Q>;;Sub, since higher # is louder7;7S#}VOL7V?;;Div to get ony vol bits7V?7V?7V?7V?7PVOL7#BLEEP;;Beep count7 QBLEEP7R> ;;Beep between $0B & $0C$}7DNBL8R> 8DYBL8Q>"8PBLEEP;;Clear,8FNSO;; Always68YBLQ>;;Beep sound@8LVOLJ8 PAUDC2T8Q>^8 PAUDF2h8H%}NSO;;Alwaysr8NBLQVOL;;Rocket sound|8V?8L>8 PAUDC28Q>8 PAUDF28 NSOQ>8PSATCNT1;;Clear8 QHPOSSAT8,8&}OSATDIR;;Move8 PHPOSSAT8 PHPOSP38 HNODIFF;;All the way across?8Q>9PSAT?;;Reset9 PAUDC29NODIFFQSUPER;;Sup'}er?&9FWIERD;;No skip09#SATCOLR;;Flash color:9X;D9!X; Fuel and radiation routinesN9X;X9WIERD#RADCOUNT;;Counterb9 QRA(}DCOUNTl9 R>8;;Max?v9 HTHESAME9Q>9PRADCOUNT;;Clear9#RADS;;More rads9 QRADS9R>;;Too many?9 HTHESAME9PDOO)}M;;End of planet?9&THESAMEQRADS;;Enough rads to zap?9R>9 DTWOMUCH9QZAPFLAG;;Zap in progress?9 HTWOMUCH9 R01;*};Randomly zap: LRAND1 : HTWOMUCH: RPOQRANDOM;;Get random spot :R>&;;Within bounds?*:ER.T4:DRPO>: R.TR>H: DBAT+}MANR:ERPO\:!BATMANPHPOSP2;;Use this pos.f:Q>p:PZAPFLAG;;Do zapz:#TWOMUCHQLANDFLAG;;Landed? skip: HGUAGES:#FUE,}LUSE;;Use fuel: QFUELUSE:R>q;;Limit?: DGUAGES:Q>:PFUELUSE;;Clear:"FUEL;;Move needle:HGUAGES;;Fuel left? s-}kip:PAUDC1;;No sound:Q>:PEMPTY;;Flag empty:X;;X; Display guages routine;X;;GUAGESQDOOM;;Test doom$;FR.;.}QRADSMTR;;Pin the needle8;,B;O> L;PHPOSM0;;Show needleV; !BANGTEST`;%RQRADS;;Divide to get needle valj;V?t;V?~;V/}?;,;ORADSMTR;;+ offset; PHPOSM0;TANKQEMPTY;;Empty?;FF;$FUELMTR;;Zero needle;0;&HPOSM0;;Show needle;0} Q>;;Raise sky so ship falls;PSKY;FN;#FQFUEL;;Div. to get needle val<V? <V?<V?<,(<OFUELMTR;;Add offset2<1}PHPOSM0<<X;F<X; Transporter routineP<X;Z<NQLANDFLAG;;Landed? skipd< HXPORTERn<$BUTTONQLOADED;;Not loaded? skipx<2} FXPORTER<QEXPLOSION;;Exploding? skip< HXPORTER<QSTRIG0;;No button? skip< HXPORTER<Q><PBEAMFLG;;Flag beam<3}*XPORTERQBEAMFLG;;Beaming in progress?< HALREADY< !HITME<ALREADY#BEAMDLAY;;Delay< QBEAMDLAY<R>;;Only 1/60 sec4}< FPSPS= !NOACTION= PSPSQ>=PBEAMDLAY;;Clear"=QM2PL;;Hit a sat?,=M>6=FSORRY;;No, skip@=#SATEXP;;Flag <>0J=5}Q>;;Give pointsT= PDIGIT^= QSUPERh= FASDFGr= "DIGIT|=!ASDFG GETLEV;;Based on level= PMULTIPLY= #MULTIPLY= MAT6}H= !NOTSHIP=JMPTAB!EXTEND;;Jump table=SORRYQVPOSME='R>;;If this low, it hit a mountain= EJMPTAB=QM2PF;;Hit 7}anything?= FJMPTAB=QMISS;;Was a hit on line 2?= FNOTSHIP=%Q>;;If it gets here it hit fleet>PDIGIT;; so give scor8}e>Q>> PETC.&>Q>60> PVOL4:> GETLEV;;Based on levelD> PMULTIPLYN> #MULTIPLYX> MATHb>QRADS;;And decrease radsl>9},v>O>> PRADS>EMISFITS;;Can't be <0>Q>>PRADS;;So, make it 0>#MISFITS"CANISTERS;;1 less can.>QCANISTERS;;:}All gone?>R>> HNOTSHIP>$QSHIPS;;Level done, so give ship>R>;;But no more than 9> FENUF> #SHIPS>ENUFQLEVEL;};;Next level?R>;;No more than 9 ? FCMPL? #LEVEL ?!CMPLQTOTAL;;Inc total levels*?R>;;Not more than 154?FZYX>? #<}TOTALH?!ZYX$PAINT;;Next planet colorR?2\?(>;;Wrap at 10f?HXYZp?$>z?XYZ&PAINT? SILENT;;No sound?PWAITING;;=}Message delay on?Q>x?PCOMPLETED;;Flag done?PWAITCNTR;; & wait?PPAUSED;; & pause?$> ? DLPRINT;;Print message>}? !TESTCH?"NOTSHIP BEAMOFF;;No valid hit?!LUMINATE;;Skip? EXTEND#BEAMPOS;;Extend beam?Q>*;;Beam sound@ PAUDC4?}@ QBEAMPOS@ PAUDF4$@R> ;;Beam limit?.@ HNOACTION8@ BEAMOFF;;Yes, offB@ !LUMINATEL@(NOACTION$VPOSME;;Draw beam at @}top+2V@2`@2j@Q>t@MMISSLES9;;clear end~@ PMISSLES9@0@ %BEAMPOS@3@BEAMLOOPQ>;;Beam mask@(>#;;Hit top of sA}creen@ HNOT2HIGH@ BEAMOFF;;Yes, off@ !LUMINATE@NOT2HIGHMMISSLES9;;Clear@PHOLDA;;Save@ NOTZEROQ>0;;Ok, randomB} beam@ MRANDOMA FNOTZERO A LHOLDAAPMISSLES9;;Draw itA0(A12AHBEAMLOOP;;Do all of itFAMMISSLES9;;Clear enC}dPAX;ZAX; Ship collision detectiondAX;nA'HITMEQP0PL;;My collision detectionxALP1PL;;Sats and zaps detectAM> AHKAD}POW;;Yes, explodeA(QVPOSME;;If this low, I hit mountainAR>A ELUMINATEA!QP1PF;;Rocks and ships detectA LP0PFAFLE}UMINATE;;No, skipAKAPOW#EXPLOSION;;Flag <>0A)LUMINATE R16;;Random blue Zap & beamAL>APPCOLR0AX;BX; RockeF}t flames routineBX;B(JETSQEXPLOSION;;No jets if exploded"B FDARTH,B !BANGTEST6B&DARTHQLANDFLAG;;No jets if landed@B G}HNOFLJBQEMPTY;;No fuel, no jetsTB FXVXV^B !BANGTESThB'XVXVQSTICK0;;Stick determines dir.rBM>|BR>BFNOFL;;No stH}icks? skipBM>BR>;;Test for upBFUFBR>;;Test for downBFDFBHSIDES;;Neither, try sidesB!UFQVPOSME;;Loc. tI}o put flameB,BO> B>B BURN;;Show flameB2C BURNC !SIDESC!DF$VPOSME;;Loc. to put flame&C20C BURN;;Show flJ}ame:C0DC BURNNC#SIDESQFD;;Side flame dir. flagXCFEFX;;No dir? skipbC"QVPOSME;;Location to put flamelC,vCO>C>CK} BURN1;;Show itC#EFXQALT;;Flip 1/30 sec counterCN>CPALTC"HMYLT;;Skip every other VBLANKCQROAR;;Test rocket soL}undCR>;;Not too loudCFSOC#ROAR;;Update and sound onC SOPAUDC1CQ>C PAUDF1DHMYLT;;Always D&NOFLQROAR;;NM}o flames? Quiet soundDFMYLT;; until silent D "ROAR*D QROAR4D PAUDC1>D MYLT#FLASHME;;Light counterHD"QFLASHME;;BranchN} at right timeRDR>@\D HTBIRDfDQ>pDPFLASHME;;Reset countzD FBANGTESTDTBIRDR>0;;Turn off timeDEBANGTEST;;Yes, sO}kipD%VPOSME;;Pos. of lightsD3D3DQANIMATE;;Less if landingDRANITABD ETALLD RANITABD DTALLD3DTALLQ>P}B;;Light Bit patternDPPLAYER18;;Turn onEX;E"X; Satellite explosion routinesEX;$E#BANGTESTQSATEXP;;Sat exploding.E HQ}YESSAT8E!NOTASAT;;No, skipBEYESSATQ>LEPSUPER;;Turn off supersatVEQ>`EPSATCOLR;;Yellow explosionjE CSAT;;ClearR} sattE#SATFRAME;;Explosion count~E QSATFRAMEER>8;;Branch if less thanEDP1E# CSAT;;Explosion done. Clear itEQ>;S};Set pos to 0E PHPOSP3E PHPOSSATEPSATEXP;;Clear flagsE PSATFRAMEE PSAT?EPAUDC2;;Sound offEFNOTASAT;;AlwaysET}%P1QRANDOM;;Make random explosionFM>;;Mask wrong bits F?F$>;;8 bytes of dataF"EXPLP1QSATFRAME;;Test counter(FRU}>2F$DSMALLER;;If less do small shape(FF"ESMALLER;;If greater, do smallPF Q>;;If between, make largerZFPSIZEP0V};;Double widthdFHBIGGER;;Branch alwaysnF#SMALLERQ>@;;Get sound in rangexF&SSATFRAME;; by subtracting from 64FPAUDF2;W};Set audioFQ>F PAUDC2FQ>FPSIZEP0;;Make it narrowFTINYQEXPL18;;Get byteF MYRNA;;Random mirrorFPPMSATX}S9;;Place itF3F0FITINY;;Do 8FGNOTASAT;;AlwaysF"BIGGERQ>P;;Get sound in rangeG;;; by subtracting from 80G SSAY}TFRAMEGPAUDF2;;Set audio"GQ>,G PAUDC26GA;;Multiply X*2@GT?JG>;; and put it backTGLARGERQEXPL18;;Get byte^G MYRZ}NA;;Randomly mirrorhGPPMSATS9;;Put on 2 linesrG#PPMSATS9;; for double height|G3G#0;;Update twice for double lines[}G0GILARGER;;Do 16 linesGX;GX; Zap routineGX;GNOTASATQZAPFLAG;;Do a zap?G HZZZZTG!NOZAP;;No, skipGZZZZT#\}ZAPCNT;;CounterGQZAPCNT;;Test max val.GR>lGHHUNTER;;No, skipHQ>;;Zap is done, clearHPAUDC3;; soundHPZAPCN]}T;; & flags&H PZAPFLAG0HPHPOSP2;; & pos.:H>;; & clear PM zap areaDHPILLPPMZAPP9NH2XH(>`bH HPILLlHFNOZAP;;Alway^}svHHUNTERR>6;;Test branchesHESTRIKE;;>$36, skipHQ>*;;Set for noiseH PAUDC3HQ>P;;Find freq.H;H SZAPCNTH PH_}OLDAH R16;;Randomize itH NHOLDAHPAUDF3;;Sound itHQRANDOM;;Make random sparksHM> ;;Set pointerH?I$>;;4 lin`}es of them ISPKLPQSPARKS8I MYRNA;;Randomly mirror I PPMZAP9*I34I0>IHSPKLP;;Do all 4HIFNOZAP;;AlwaysRI!STRIKEQZa}APCNT;;Now make bolt\I;fIS> ;;Find sound freq.pI PAUDF3zIQ>;;Clear remaining sparksI PPMZAPI PPMZAPIQ>OIb}PAUDC3;;Set audioI>;;Save X for later routineI QRANDOM;;Random starting pt.IM>;;Mask bitsI?ISTRILPQBOLTS8I!Pc}PMZAPO9;;Make 4 same linesIPPMZAPN9IPPMZAPM9IPPMZAPL9J3JCJM>;;Make y wrap at 32$J?.J08J0BJ0LJ0d}VJISTRILP;;Do 78 lines`J!NOZAPQSATEXP;;Sat exploding?jJHSATOK;;Yes, skiptJQP3PL;;Sat zapped?~J FSATOKJ#SATEXP;;Yee}s, Flag itJX;JX; Misc. sound routineJX;J%SATOKQETC.;;Test misc sound flagJFTE;;0?, skipJR>;;Branch to right pf}laceJHUEJ$"VOL4;;This is Boing sound decayJ QVOL4JFUE;;Until 0JV?KV? KL>@;;Set distortionKPAUDC4;;Use itKg}Q> (KPAUDF4;;This freq.2KHTE;;AlwaysFKPETC.;;Clear flagPKPAUDC4;;Off soundZKX;dKX; Ship explosion routih}nenKX;xK$TEQEXPLOSION;;Test my exp. flagK HSHABOOMK!NOATR;;No, SkipKSHABOOM#POWNTER;;CounterKQ>0;;Get freq. rai}ngeK,KOPOWNTER;; by adding $30K PAUDF1KQPOWNTER;;Test branchesKR>K DOVERLAPKR>0KETAK !ENGULFL TAR>j}PL DCATCHUPLR>x;;No branches?"L DSLNT,LQ>6LPRESETFLAG;;Done? reset me@LSLNTQ>;;My sound offJL PAUDC1TL !NOATk}R^LOVERLAP SHOW;;Show mehLQ> ;;Set audiorL PAUDC1|L"QRANDOM;;Find rand. expl. dataLM>L?L$VPOSME;;My positionl}L2LQ>L PCOWNTERLHINKLEYQEXPL18;;Get byteL MYRNA;;Random mirrorL PUT;;"OR" it on meL2L3L "COWNTERLIHm}INKLEY;;Do 8M !NOATRMCATCHUP CLRME;;EraseM%>&MD"ROAR;;Fade sound0MFOW;;Unless 0:M1DMIDNM QROARXMV?bMV?lMn}V?vMV?M PAUDC1M OW!NOATRM#ENGULFQ>;;Big explosion soundM PAUDC1MQ>MPROAR;;Clear sound fadeMQ>;;Brighto} white expl.M PPCOLR0MPPCOLR0M&QHPOSME;;Center Plyrs on my horiz.M;MS>M PHPOSP0N, NO>N PHPOSP1 NQ>p}*NPCOWNTER;;Clear count4N(LSIDEQVPOSME;;Draw random left exp.>N;HNS>RN>\NQRANDOM;;Rand bytefNM>0;;Point to dataq}pN?zNAUTOMANQEXPME8;;Xfer dataN PPLAYER09N2N3N #COWNTERN QCOWNTERNR>NHAUTOMAN;;Do 16 linesN"RSIDEQRANr}DOM;;Draw right sideNM>0;;Point to dataN?NORBOTS&HOLDX;;Save countNQEXPME8;;Get Left side dataN PHOLDAO MIRRs}OR;;Mirror for rightO$HOLDX;;Get countO QHOLDA$OPPLAYER19;;Place byte.O08O3BO "COWNTERLO QCOWNTERVOHORBOTS;;Do 1t}6 lines`OX;jOX; Pause routine and cleanuptOX;~O NOATRQ>OPATRACT;;Attract mode offO"TESTCHPHITCLR;;Clr collisionsu}OQWAITING;;Are we waiting?OHINCH;;No, skipO"WAITCNTR;;Count downOHCLRCH;;Not 0 yet? skipOQ>;;Reset count to 3 v}secO PWAITCNTROPWAITING;;Flag not waitingO$>O DLPRINT;;Erase messagesOQCOMPLETED;;Level done?PFNNLEV;;No, sw}kip PQ>;;Flag waitP PWAITINGPQ>(PPNEWLEV;;Flag new level2PHINCH;;Always

FPPPAUSED;;Pause offPP#INx}CHQCH;;Test KB for space barZPR>!dPHCLRCH;;No? skipnP SILENT;;Sound offxPQPAUSED;;Toggle pausePN>P PPAUSEDPHy}CLRCH;;Pause on? skipP$>wP OLDC;; restore colorsP CLRCHQ>PPCH;;Reset KB shadowP QRANDOMP!PRAND1;;Set constaz}nt random #PATRQPAUSED;;If paused...PLG.O;; or game over...P FEXITP$>w;; do attractingQACQACOLTAB9Q MIXUP{}Q PDCOLTAB9"Q0,QIAC6Q EXIT!XITVBV;;End or routine@QX;JQX; PROGRAM DATA TABLESTQX;^QX;hQX; Mountain range datarQX;|}|Q:Q; @=A_______________5:<9___________________7;<8______AQ; @=A________5;<8_7;>@BB<879____5;<9_____6:>@BD<86;<9A}}Q; @=A<95:<86;?@BAEF=>@DAIJ?C<96:>@DC<8_5:?>?@ACIJ=@BBAQ; @=AIJ=@IJ>?=@ADCBGH@IJ>=>BIJ=?@@ACBAEF==?@@IJ>?>@ACAQ; @~}=AKKLKKLLLKLMNONOMLLKLKLNKLLKKLMONOOMKLLKLKLLKKLMOAQ; @=APRQRPQRPRRQRPRPRPRQRPQRPQRPRQPQPRPRPQRPRQRPRPRRPAQ; @=ASTUS}T]STSTUTSUS]SUSTUSTS^^SUTU]TTSUTUTTTUS]SSTU]AQ; @=A]WX]V]]V]]]WX]]]XV]X]]YZ[\Y]]]X]]]]]]V]]]]W]]]]]AQ; @=A]]]]]]]]]]]}]]]]]]]]]]]]]^^]]]]]]]]]]]]]]]]]]]]]]AQ;BOT A C:0 RADS'!#$#%#$#& FUEL'!#$#%#$#& P:0 AQ$CANISTERS );;# canist}ers leftQSHIPS ;;# ships leftQX;RX; Title screen textRX;RTITLE &R =A BY DOUGLAS ENGEL A0R A } LEVEL: 0 A:RLEVEL DRX;NRX; Message textXRX;bR,LEVLLINE =A LEVEL: 0 AlRPLEVEL  vR,MULT}LINE =A MULTIPLIER: 00 ARPMULT R,MESSLINE =A GAME OVER AR,COMPLINE =A LEVEL CO}MPLETED ARX;RX; Game display listRX;R'DLIST =p=p===0====1R! ==0===0==@=7=R! =}5==@=3===5==@R! 3===7===5===0R ==0===0===:R =======R(  =R}=4BOT=5BOT=A=4DLIST=5DLISTSX; S%X; Alternate DL lines for messagesSX; S DLTABL*S =====4S5 =4LEVLLIN}E=5LEVLLINE==4MULTLINE=5MULTLINE>S% =4COMPLINE=5COMPLINE===0HS% =4MESSLINE=5MESSLINE===0RSX;\SX; Tit}le screen display listfSX;pS>DLIST1 p=p=p=p=p=D=4TITLE=5TITLE=====p=zS0 p=p=p=p=p==p=p=p=p=p}=p=p=p=pS A=4DLIST1=5DLIST1SX;SX; Scroll tablesSX;SSCRLST ;;DirectionSCOUNT ;;Speed counterSL}IMIT ;;Maximum countS#CURR ;;Current HSCROL valueS&COLCKS ;;Scrolled color clocksS%MPOS ;;Star missile }positionsS%OFFSET ;;Offset between starsSX;SX; COLOR TABLESTX;TX;TX;Actual colors$TX;.T.COLTAB ====}=======8T' 2=2=2=2=2=2=2=2=2=2=2=BT' $===========LT' =4=4=4=4=4=4}=4=4=4=4= VT' ===========`T' =6=6=6=6=6=6=6=6=6=6=PjT' @===@=@=@=@=@=@=}@=@=@tT' H=H=@=@=@=@=@=@=@=@==~T' ===========T' ===========P}TX;T!ACOLTAB x;;Attracted tableTX;T!DCOLTAB x;;Displayed tableTX;TX; Character set dataTX;T@;;First 8} charsT9CHARS ===============T3 ===============T3 ==}=============U3 = ============== UCHARS;;Last 64 charsU3 }===/=;=;=/===@======@U3 ==;==>=;=====T==y====T(U3 = =?====>= =}==@=P=P==P=@2U3 ===============U3 =======;=========U3 ====@}=P==Y=====@=P==UU3 ===?=============U3 @=P==U=U=Y==V=====}===U3 ===============U3 =============j==U3 ===}=i===U=Y==e=Y==i=V=eU3 Y==Y=e=U=Y==f=@=S==U=U=Y=U=VU3 ====~=Z=V=e=~=_=}=Y=U=Y==eU3 ===={=^==e====e===_=U3 Y==_=~============U3 =}==============U3 ===============V3 =========}======V3 ===============V3 ==============="V3} ===============,V3 ===============6V3 =======}===Y=Y==Y=Y=U@V3 ==_=U==U=W=========JV3 ====?===========}TVX;^VX; PLAYER MISSILE BIT MAPShVX;rVX;|VX;Data for my shipVX;V SHAPE1AV' =$=~=~=$=$======V }SHAPE1BV' ======<=~=B=B==V' ==$=~=~=$=$=====V' =======<=~=B==}V' =$=~=~=$=$======V' ======<=~=B=B==V' =$=~=~=$=$======V' =}=====$=f=B=B==V' =$=~=~=$=$======V' ======$=B=B=B==W' =$=~=~=}$=$======W' ======$=B=B=B==W' =$=~=~=$=$======&W' ======$}=B=B=Z==0W' =$=~=~=$=$======:W' ======$=B=Z=Z==DW' =$=~=~=$=$====}==NW' ======$=Z=Z=B==XW' =$=~=~=$=$======bW' ======<=Z=B=B==l}W' =$=~=~=$=<======vW' ======<=B=B=B==W' =$=~=~=<=<======W' =}=====$=B=B=B==W' =$=~=~=<=<======W' ======$=B=B=B==W' =$=~=~=}<=<======W' ======$=B=B=B==W' =$=~=~=<=<======W' ======$=}B=B=B==W' =$=~=~=<=<======W' ======$=B=B=B==W' =$=~=~=<=<====}==W' ======$=B=B=B==W' =$=~=~=<=<======X' ======$=f=B=B== X}' =$=~=~=<=<======X' ======<=~=B=B== XX;*XX;Sattelite data4XX;>X9ASATS =D=(=}=8=8=8====d=?=?=d==HX3 6=I==>=>==*=I="=======RX3 =====>======}===$=\X3 ========(===8=8===(fX3 ==<==~==<===T=8=|=8=T==(pX3 =}========8==<=<==8=zX3 ==|=8==T=8=T==Z=<=f=f=<=Z=X3 ==>=U=>=====}===~===XX;XX;Sattelite explosion dataXX;X9EXPL1 =$===H=====B=(=4==D==X3 =@=}(==9=<=P===%==,==!=H=XX;XX;Spark dataXX;X:SPARKS @=1====Z===D==A===,==@}XX;XX;Bolt dataXX;Y9BOLTS ===== =@==@=@= =====Y3 =============}==YX;$YX;My explosion data.YX;8Y9EXPME ==(====&====K====B=BY3  ==D======N}= ==#====LY3 ==== ====+= ='= ==@==VY3 = ===U=======#====`Y}X;jYX; MISCELLANEOUS DATA TABLEStYX;~YX;YX;Title screen bitmapYX;Y5BITS ==9='===Q=E=H= ===A==} Y! =Q=E=@===N=9=/= YX;YX;DL modification pointersYX;Y.POINTR == ======= =#=&Y' )}=,=/=2=5=8=;=>=A=D=G=KYX;YX;Priority tableYX;Z.PRITAB "="="="="="="="="="="=" Z' "=!=!=!=}!=!=!=!=!=!=1=1ZX;ZX;Animation frame pointers(ZX;2Z%ANITAB  ==8=@=P=X=`=h=p:A%,a0@"}{0@0@d/(@(@$(@/(@n00(@"} >:@,>:@,xDD(@ >:@,>:@,>:A6,>:A8,##(@ "} >:A6,++(@ Shakuhachi KeyboardJ(@J(@ >:@,>:"}@,SS(@ >:@,>:@,>:A6,>:A8,22(@ "} >:A6,=-@=(@ JAPANESE SCALE?-@?(@ ^^^"}^^^^^^^^^^^^^^^-@K0@@+0@@G0@@@&K %%6-P:H:"},$@,%@77A@APA`ApAA!6-Ab(G ! A!6-AD"}(A ! A!6-A!(C ! A!6-A(D ! A!6-@(E ! A"!"}6-@(G ! A,[-@?052@W2@@@@[ 6;2"}@;2@@@@@)%-@P:H:,$AP,) Js%2@"}G2sREMOVE REM FOR DELAY BETWEEN NOTES AB=1^1T A D:JAPANFLT.BASA"}@6REMOVE REM FOR DELAY BETWEEN NOTES AB=1^1T A D:JAPANFLT.BASA +\](DDDDDDDDDDD1D1D1D1D2MDCOLSMLOSSCRRCRCCRSPODLLDT&} @@&} !&}"#$%&'()*+,33*** ĠӠҠ$}