þþ[dX*******************nX* COSMIC DEFENDER *xX* BY *‚X* PHILLIP ROEY *ŒX*******************–X; X; OPERATING SYSTEM EQUATESªX;´†AUDCTLÒ¾ …SKCTLÒÈ …AUDF1ÒÒ …AUDC1ÒÜ …AUDF2Òæ …AUDC2Òð …AUDF3Òú …AUDC3Ò …AUDF4Ò …AUDC4Ò †ATRACTM" …VERTI,†DMACTL/6 „DLST0@†GRACTLÐJ†GPRIORoT†PMBASEÔ^†COLPM0Àh†COLPM1Ár‡HCOLPM0Ð|‡HCOLPM1І‡HCOLPM2ЇHCOLPM3К …COLP0Ĥ …COLP1Å® …COLP2Ƹ …COLP3Ç …COLBKÈ̆HCOLP0ÐÖ†HCOLP1Ðà†HCOLP3Ðê†CONSOLÐô ƒKEYüþ†HPOSP0Ð …STICKÓ …TRIG0ІTIMER3&†TIMER40†TIMER5 :‡TIMERF3*D‡TIMERF4,N‡TIMERF5.X …NMIENÔb†SETVBV\äl†XITVBVbäv†SIOINIe䀆HSCROLÔŠ …WSYNC Ô” …CHBASôž …SIZEM Ш „M0PFв „M0PLм „P0PFÐÆ „P0PL ÐІHITCLRÐÚ …CHORGàä†RANDOM ÒîX;øX; PAGE ZERO EQUATESX; €X; …KILLU;COLLISION*†KILLIT;FLAGS4†KILLPL;DITTO>„OVER;GAMEOVER?H…FRAME;COUNTERR…PAUSE;PAUSE FLAG\…SNDF1;MISSLE SNDf„SND1;LOCATIONSp„OXM0;MISSLE Xz„OYM0;MISSLE Y„ƒXPY;EXPLOSION YŽ‡XPIMAGE;EXP. IMAGE#˜‡EXPTIME;EXP. TIMER¢ †TEMPLO¬ †TEMPHI¶‡SCRTEMPÀ‡EXPLODE;EXP. SOUND CNTRÊ „TEMPÔ …TEMP2Þ†NONEW1;SCROLL FLAGè…XPLON;EXP. FLAGòƒABX;SCREEN POS. LSBüƒABY;SCREEN POS. MSB ‚FX ‚FY‚OX;PLAYER X$‚OY;PLAYER Y.„MSL0;MISSLE FLG8†CSHIFT;DLI COLORB†DSHIFT;SHIFT USEL…TITLF;TITLE SCRN FLAGV‡ROCKSPD `‡ROCKPOS ;NASTY X LOCj †RIMAGE t†COLOR2 ;COLORS OF~†COLOR3 ;NASTIESˆ ƒADR’…DLINE;NASTY COUNTERœX;¦X; MISCELLANEOUS EQUATES°X;ºX;Ä„SCRN0;SCREEN MEM.ΆPLAYER;PMG MEMORYØX;â ;ORIGINìX;öX; INITIALIZATION OF GAMEX;  …START-%>4„MAIN;POINT TO$>5„MAIN;VBI ROUTINE(Q>2 †SETVBV<Q>>;ENABLE PMGF P†DMACTLPQ>Z P†GRACTLdQ>"n P†GPRIORxQ>;SET MISSLE‚P…SIZEM;SIZEŒQ>d–P…COLP0;SET Q>&;PLAYFIELDªP…COLP1;AND P/M´Q>8;COLORS¾ P…COLP2ÈQ>ÔÒ P…COLP3ÜQ>æ P…COLBKðQ>ªú P†COLPM0Q>6 P†COLPM1Q>5†PLAYER;POINT TO"P†PMBASE;P/M AREA,X;6X; MAKE 3 COPIES OF CHAR SET@X;J%>T„COPYQ…CHORG8^P†PLAYER8hP†PLAYER 8rP†PLAYER8|Q…CHORG8†P†PLAYER 8P†PLAYER 8šP†PLAYER8¤1® H„COPY¸X;ÂX; INSTALL CUSTOM CHARACTERSÌX;Ö%>wà„INSTQ…CHSET8êP†PLAYER8ô Q†CHSET28þP†PLAYER 8 Q†CHSET38P†PLAYER81& I„INST0Q>5†PLAYER;POINT TO:P…CHBAS;NEW CHAR. SETDX;NX; EACH NEW GAME STARTS HEREXX;b…BEGIN †PLRINT;CLEAR P/Ml †SNDINT;KILL SOUNDv ‡CLRSCRN;CLR SCREEN€ †VARINT;INITIALIZE VARIABLESŠ …TITLE;DISPLAY TITLES” „GRID;ADD FFIELDSž …ROCKS;AND ROCKS¨ ‡ROCKINT;AND NASTIES²X;¼X; MAIN GAME LOOPÆX;Ð&…MLOOP †COLDET;CHECK FOR COLLISIONSÚQ†CONSOL;ABORT GAME?äR>;(OPTION)îH…MLOOP;NO,LOOPøF…BEGIN;YES,RESTARTX; X; INITIALIZE SOUND CHANNELSX; †SNDINT †SIOINI*Q>4 P‡EXPLODE>%>H P†AUDCTLRƒSN1P…AUDF18\1fIƒSN1p:zX;„X; ADD ROCKS TO SCREENŽX;˜…ROCKSQ…LEVEL;GET NUMBER¢;;OF ROCKS,¬S>;AND PUT IN¶ ?;X REGÀQ>ÊPƒADRÔ Q‡NUMROCK8ÞP„TEMP;AND TEMPè>ò‚R1Q†RANDOM;GET A VALIDüR>ú;RANDOM E‚R1;LOCATION ? ‚R2Q†RANDOM$ M>>. R>(8 E‚R2B O>;CHECK IF ITL  …EMPTY;IS EMPTYV H‚R1;NEXT!` $„TEMP;GET # OF ROCKS FORj #‚R3Q†RANDOM;2ND PAGE OF SCRN MEMt R>0;GET A VALID~ D‚R3;LOCATIONˆ R>ÿ’ F‚R3œ ?¦ ‚R4Q†RANDOM° M>>º R>(Ä E‚R4Î " …EMPTY;LOOK FOR AN EMPTY SEAT.Ø H‚R3;NEXT!â :ì X;ö …EMPTY,;CHECK TO MAKE O>5„SCRN;SURE THE SPACE PƒADR;FOR ALL FOUR Q@ƒADR7;PARTS IS VACANT 3( L@ƒADR72 #ƒADR< #ƒADRF L@ƒADR7P 1Z L@ƒADR7d H‚RX;NO VACANCY! EXITn "ƒADR;POKE 4x "ƒADR;PART ROCK‚ Q>;INTOŒ P@ƒADR7;SCREEN– Q>;MEMORY  3;IN LIVINGª P@ƒADR7;COLOR...´ #ƒADR¾ #ƒADRÈ Q>Ò P@ƒADR7Ü Q>æ 1ð P@ƒADR7ú Q>5„SCRN PƒADR 0;DEC COUNTER ‚RX:" X;, &‡NUMROCK (=<=F=d=}=F=d=P=d6 X;@ X; CHECK FOR COLLISIONSJ X;T †COLDETQ„M0PF;HAS MISSLE HIT?^ F‚C1;NO,CONT...h P†KILLIT;YES,SET FLGr ‚C1Q„M0PL;HIT NASTY?| M>ü† F‚C2;NO,CONT... P†KILLPL;YES,SET FLGš ‚C2Q„P0PF;HIT WALL OR ROCK?¤ HƒDIE;YES,SET FLAG® Q„P0PL;DID WE RUN¸ M>ý;INTO NASTY? F…NODIE;NO. EXITÌ ƒDIEP…KILLUÖ P†HITCLRà …NODIE:ê X;ô +X; CLEAR OUT SCROLLING PORTION OF SCREENþ X; !‡CLRSCRNQ>*5„SCRN;21 LINES * PƒADR;2 PAGES + SCRN ADDR $>& &ƒADR0 %>: ƒCL1A;LOOP UNTILD P@ƒADR7;WE'VE GOTN 3;LOTS OFX HƒCL1;NOTHINGb "ƒADRl Q>5„SCRNv RƒADR€ HƒCL1Š :” X;ž X; ZERO OUT P/M MEMORY¨ X;² †PLRINTQ>¼ ?Æ ƒPL1P†PLAYER8Ð P†PLAYER8Ú P†PLAYER8ä P†PLAYER8î P†PLAYER8ø 3 HƒPL1 : X; !X; REINITIALIZE GAME VARIABLES* X;4 †VARINTQ>> P…PAUSEH P…KILLUR P†KILLIT\ P†KILLPLf P‚FXp P‚FYz PƒXPY„ P‡XPIMAGEŽ PƒABX˜ P†NONEW1¢ Q>5„SCRN¬ PƒABY¶ Q>À P…LIVESÊ P„OVERÔ Q>T;LOAD MEMORY SCANÞ PƒML2è P†HITCLRò Q>2ü P‚OXQ>dP‚OY P…FRAME$:.X;8"X; PLAYER BUYS CEMENT OVERSHOESBX;L$†BITEITQ…XPLON;ALREADY BITING IT?VHƒBT1;YES,CONT...`P„SND1;KILL SOUNDj P‡XPIMAGEtP†HPOSP0;EXPLOSION~Q>;SET DEATHˆP…XPLON;FLAG’ †SNDINT;KILL REST OF SOUNDœ †MISEND;AND MISSLE¦Q>d;SET TIMER° P…FRAMEºQ>ÄP†AUDCTL;MAKE DEATHÎQ>È;TYPE NOISESØ P…AUDF4âQ>‡ì P…AUDC3ö P…AUDC4ƒBT1Q†RANDOM;FLASH  M>;SHIPP‡HCOLPM0;IN A NICEP‡HCOLPM1;GREY(Q†RANDOM;PALLOR.2P…AUDF1;MORE NOISE< Q†RANDOMF P…AUDF2P Q†RANDOMZM>ßd P…AUDC1n P…AUDC2x"…FRAME;DONE KILLING?‚H†DEDEND;NO.Œ †SNDINT;KILL NOISE–Q>2;REST SHIP P‚OX;LOCATIONª P†HITCLR´Q>d¾P‚OYÈQ>ÒP…XPLON;CLEAR FLAGSÜ P…KILLUæ"…LIVES;ZAP A LIFEðQ…LIVES;ANY LEFT?úR>F†GMOVER;NO? THE BIG SLEEP!Q>;YES,RESETPƒABX;TO START"Q>5„SCRN;OF SCREEN,PƒABY6 P†HITCLR@ †SCREEN;CLEAN UPJ †PLRINT;SCREEN ANDT ‡ROCKINT;NASTIES^†DEDEND!†XITVBVhX;r†GMOVER †PLRINT;CLEAN UP| †SNDINT;SCREEN +† Q>;SOUNDP…KILLU;ANDšQ>;SET GAME¤P†HITCLR;OVER®P„OVER;FLAG¸Q>4…BLANK;PUT GAMEÂPƒML1;OVERÌPƒML3;INTO THEÖQ>5…BLANK;MIDDLE OFàPƒML1;THE SCREENê PƒML3ôQ>4‡MESSAGEþ PƒML2Q>5‡MESSAGE PƒML2Q>F&PƒML20Q>ÿ:P‡TIMERF5;HANGDP†TIMER5;AROUNDNƒGM1Q‡TIMERF5;AWHILEX HƒGM1;THENb!…BEGIN;ALL OVERlX;vX; VERTICAL BLANK INTERRUPT€&X; THIS IS WHERE ALL THE ACTION IS!ŠX;” „MAINQ>žP…DLINE;POINT TO¨Q„OVER;IS GAME ASLEEP?²H…ENDVB;YES,BYE...¼P†ATRACT;NO ATTRACT MODEÆQ†KILLPL;HIT NASTY?ÐFƒMA2;NO,CONT..Ú †XPINIT;YES,KILLä ‡KILLPLR;ITîƒMA2Q…KILLU;HIT US?øFƒMA1;NO,CONT...!†BITEIT;YES,SUICIDE ƒMA1QƒKEY;SPACEBARR>!;PRESSED H…NOKEY;NO,BYE*Q>ÿ;YES TOGGLE4PƒKEY;PAUSE>Q…PAUSE;FLAGHN>ÿR P…PAUSE\…NOKEYQ…PAUSE;FLAG SET?fH…ENDVB;YES,BYE...p ‡ANIMATE;ROTATE CHAR SETSz †ATTACK;MOVE NASTYS„ †RSTICK;READ JOYSTICKŽ „MOVE;MOVE SHIP˜ „MISL;AND MISSLES¢ …SOUND;BOOM¬ †XPLODE;FIREWORKS¶ †SCROLL;SCROLL SCREENÀ †SCREEN;UPDATE DISP. LISTÊ…ENDVBQ…TITLF;TITLES?ÔFƒEN1;NO,BYE...Þ Q>4„TDLIè P…VERTIò Q>5„TDLIü P…VERTIƒEN1!†XITVBVX;X; READ JOYSTICK$X;.†RSTICKQ…STICK;GET STICK8$‚OY;CHECK STICK FORBV?;MOVEMENT IN ALEƒRS1;DIRECTION ANDV(> ;CHECK IF WE ARE`FƒRS1;AT OUR LIMITS INj"‚OY;THAT DIRECTIONt ƒRS1V?~EƒRS2ˆ(>¾’FƒRS2œ#‚OY¦ ƒRS2$‚OX°V?ºEƒRS3Ä(>2ÎFƒRS3Ø"‚OXâ ƒRS3V?ìEƒRS4ö(>dFƒRS4 #‚OXƒRS4:X;(*X; MOVE PLAYER0 AND MISSLE1 (YOUR SHIP)2X;< „MOVE$‚OXF &†HPOSP0P2Z2d&†HPOSP0n%‚OYx$>‚ƒMO0Q…SHAPE9ŒP†PLAYER8–Q†PLAYER8 M>óªP†PLAYER8´3¾0ÈIƒMO0Ò%‚OYÜQ†PLAYER8æL> ðP†PLAYER8úQ†PLAYER8L>P†PLAYER8Q†PLAYER8"L> ,P†PLAYER86:@X;JX; SHIP SHAPE (ARGH!)TX;^$…SHAPE =À=p==s==p=À=hX;r"X; MOVE MISSLE AND MISSLE SOUND|X;†„MISLQ„MSL0;ACTIVE?H…MSMOV;YES,MOVE ITšQ…TRIG0;TRIGGER PRESSED?¤H†MSLEND;NO,BYE...®Q>;SET FLAG¸ P„MSL0Â%‚OY;GET Y COORDÌQ>;PUT MISSLE ON SCREENÖP†PLAYER8à'„OYM0;STORE YêQ>%;INITIALIZEôP…AUDC1;MISSLEþ Q>2;SOUND P…SNDF1Q‚OX;CALCULATEO>;INITIAL X&P„OXM0;COORD0…MSMOV#„OXM0;MOVE MISSLE:#„OXM0;RIGHTD Q„OXM0NP†HPOSP0X#…SNDF1;DECREASEb#…SNDF1;FREQUENCYl Q…SNDF1v P…AUDF1€Q>Í;MISSLE AT EDGE?Š R„OXM0”D†MISEND;YES,KILL MISSLEžQ†KILLIT;DID MISSLE HIT?¨F†MSLEND;NO,BYE...² †LOCATE;YES,BUT WHAT&WHERE¼ …ERASE;ZAP ITƆMISENDQ>;MISSLE DEADÐP…AUDC1;SO KILL SOUNDÚP„MSL0;CLEAR FLAGä P†KILLITî%„OYM0;ERASE MISSLEøQ†PLAYER8M>ü P†PLAYER8 †MSLEND: X;*X; SCROLL SCREEN4X;>†SCROLLQ‡TIMERF3;TIME YET?HL†NONEW1;OR AT END OF LEVEL?RH‚M2;THEN DON'T SCROLL\Q…LEVEL;GET SCROLLf ;;SPEEDpS>;AND DROPz?;IT IN TIMER„Q…SPEED8;3 AND RESETŽP†TIMER3;FLAG˜ P‡TIMERF3¢%‚FX;SCROLLED WHOLE¬1;CHARACTER?¶IƒM15;NO,CONT...À #ƒABX;YES, UPDATE SCREEN ADD.ÊHƒM14;WHOLE PAGE DONE?Ô#ƒABY;YES, BUMP SCREEN PAGEÞƒM14%>;RESETèƒM15'‚FX;SCROLL CNTRò ‚M2$‚FXü &†HSCROL:X; X; UPDATE SCREEN MEMORY IN DL$X;. †SCREEN%>5„SCRN;ARE WE AT8QƒABY;THE END OFB)ƒABY;2ND PAGE OF SCREEN?LHƒS11;NO,CONT..V$"†NONEW1;YES,DELAY TILL NEW LEVEL`H„SXIT;BYE...j ‡LEVELUP;SET UP NEW LEVELtQ>5„SCRN;RESET TO SCRN START~ƒS115ˆ!$>;# OF LINES TO BE SCROLLED’%>;OFFSET IN DLœ‚S0QƒABX;GET LSB AND¦PƒDSP8;STORE IN DL°3º7;GET MSB ANDÄPƒDSP8;STORE IN DLÎ ,;ADD TWOØ O>;PAGESâ#5;AND HIDE IT ON STACK TILL NEXTì 3;LOOPö3;INC DL POINTER 0;DONE? I‚S0;NO,LOOP..7;YES, CLEAR STACK „SXIT:(X;2$…SPEED ========<X;F#X; SCORE ROUTINE:ENTRY CONDITIONP!X; XREG: SCORE DIGIT TO CHANGEZ"X; YREG: AMOUNT TO ADD TO DIGITdX;n‡SCOREIT#…SCORE9;GET DIGITxQ…SCORE9;AND BUMP IT‚R>;DIGIT>9?ŒF†BIGSCR;YES. FIX IT–ƒSCR1;NO. ARE WE F†SCREND;DONE? YES.ªH‡SCOREIT;NO. LOOP´†BIGSCRQ>;DIGIT=0¾P…SCORE9;STORE ITÈP‡SCRTEMP;SCORE CARRY FLAGÒHƒSCR;LOOP...ÜX;æ†SCRENDQ‡SCRTEMP;FLAG SET?ð FƒSC1;NO.úA;LAST DIGIT? FƒSC1;YES. 0;SET XREG%>;AND YREG"Q>;CLEAR FLAG,P‡SCRTEMP;AND START6F‡SCOREIT;ALL OVER@$ƒSC1!†HIGHSC;CHECK FOR HIGH SCOREJX;TX; FIND OUT WHERE WE HIT^X;h†LOCATEQ„OYM0;GET Y COORDr;;AND CONVERT|S>;TO IRG4† V?;SCREENV?;COORDINATESšM>þ;ADD THE¤ ,;START OF®OƒDSP;SCREEN MEM.¸)P†TEMPHI;SHAKE WELL AND VIOLA! THE MSBÂQ‚FX;GET LSB OFÌ T?;SCREENÖ,;ADD THE MISSLESàO„OXM0;X COORDê ;;CONVERTôS>';TO IRG4þV?;COORDINATESV?;ADD SCROLL,OƒABX;AND WE GET&P†TEMPLO;THE LSB0D„LOC1;OVER BORDER THEN:#†TEMPHI;BUMP MSBD „LOC1:NX;XX; FIND OUT WHAT WE HITbX;l…ERASEQ†TEMPLO;GET SCREENvPƒADR;MEMORY AND€Q†TEMPHI;SEARCH TILLŠPƒADR;WE FIND A”P†HITCLR;NONZEROž%>;CHARACTER¨Q@ƒADR7;(A VICTIM!)² H…GOTIT¼3Æ Q@ƒADR7Ð H…GOTITÚ3ä Q@ƒADR7î F„LOC1ø…GOTITR>;IF CHAR ISF†ERASE4;1-4,ITS A  R>;ROCK.H„GOT1;SET TO TOP "ƒADR;RIGHT CHAR*!†ERASE4;OF ROCK,4„GOT1R>;THEN JUMP>F„GOT2;TO ERASE4HR>R H„GOT4\"ƒADRf„GOT2"ƒADRp "ƒADRz !†ERASE4„„GOT4R> ;GENERATOR?ŽH„GOT5;NO,CONT..˜Q> ;YES,KILL IT¢P@ƒADR7;SET TO TOP¬#ƒADR;OF FIELD.¶ #ƒADRÀ!‡ERASE2V;ERASE IT!Ê„GOT5R> ;LOWER GENERATOR?ÔH„LOC1;NO,BYE..ÞQ> ;YES,KILL ITèP@ƒADR7;SET TO TOPò"ƒADR;OF FORCEü"ƒADR;FIELD. "ƒADR "ƒADR!‡ERASE2V;ERASE IT.$X;.†ERASE4Q>;ERASE THE8P@ƒADR7;FOUR PARTB#ƒADR;ROCK BYL#ƒADR;STORING AVP@ƒADR7;BLANK IN` 3;EACH OFjP@ƒADR7;THE FOURt"ƒADR;FORMER~"ƒADR;POSITIONSˆ P@ƒADR7’$>;SET SCOREœ%>;TO 50 PTS.¦HƒER2°X;º‡ERASE2VQ>;STORE AÄP@ƒADR7;BLANK CHARÎ#ƒADR;IN THE 2Ø#ƒADR;FORCE FIELDâP@ƒADR7;POSITIONSì$>;SET SCOREö%>;TO 200 PTS.!ƒER2P†KILLIT;CLR COLLISION FLG  ‡SCOREITQ>;SET BOOMP‡EXPLODE;COUNTER(!†XPINIT;FIREWORKS2X;< X; BOOM!FX;P…SOUNDQ‡EXPLODE;FLAG SET?ZF†SNDEND;NO,BYE...dQ‡TIMERF4;TIME YET?nH†SNDEND;NO,BYE...x"‡EXPLODE;SET TO NEXT‚Q‡EXPLODE;TONE+CONTRLŒP‡TIMERF4;RESET FLAG–F†SNDEND;ANY LEFT? NO,BYE  ?;YES,GETªQ†EXPSND8;THE NEXT´P…AUDF2;TONE + CTL¾Q†RANDOM;AND PUT'EMÈL>À;IN (THE)ÒP…AUDF3;POKEYÜ Q‡EXPTONE8æL>@ð P…AUDC2ú P…AUDC3Q> P†TIMER4 †SNDEND:"X;,†EXPSND õ=ô=ó=ò=ò6 ð=ò=õ=é=à@ ï=ð=ñ=ò=óJ ô=õ=ô=ñ=õT ò=ó=ô=õ=õ^)‡EXPTONE =========h! ==== = = = = = rX;|X; NEXT LEVEL,PLEASE....†X;‡LEVELUP#…LEVEL;BUMP LEVELšQ…LEVEL;LVL>9?¤R>®HƒLV2;NO,CONT...¸Q>;YES,BACK TOÂP…LEVEL;LEVEL FOUR̃LV2Q>@;DISABLE INTERRUPTSÖP…NMIEN;AND TELL COMPUTERà6;TO STAY PUTê=;TILL NOTIFIED!ô ‡CLRSCRN;CLEAR SCRNþQ>;RESET TO PƒABX;SCRN START P„MSL0;KILL MISSLE  †SNDINT;AND SOUND& Q>5„SCRN;PAGE 1 OF0 PƒABY;SCREEN:  †SCREEN;UPDATE DLD P†HITCLR;CLEAR COLLISIONSN  „GRID;ADD GRIDSX  …ROCKS;AND ROCKSb Q>;RESET ANDl $> ;ADD NASTIESv ƒLV1P†RIMAGE9€ 0Š IƒLV1” ‡ROCKINTž #…LIVES;ADD AN EXTRA LIFE¨ 8;AND BACK TO² Q>À;THE REAL¼ P…NMIEN;WORLD....Æ :Ð X;Ú X; ROTATE CHARACTER SETSä X;î ‡ANIMATEQ‡TIMERF5;TIME YET?ø HƒAN3!Q>;RESET TIMER !P†TIMER5;AND FLAG! P‡TIMERF5 ! Q…CHBAS*!R>5†PLAYER;3RD SET?4!FƒAN2;OOPS..>!,;NO,ADD 1KH!O>5;TO CHBASR!HƒAN1;JMP ALWAYS\!ƒAN2Q>5†PLAYER;RESET TOf!ƒAN1P…CHBAS;1ST CHARp!ƒAN3:;SET AND BYEz!X;„!X; HIGH SCORE?!?!?!Ž!X;˜!†HIGHSC%>;CHECK SCORE¢!ƒHI1Q…SCORE8;FROM MS TO¬!R„HIGH8;LS DIGIT¶!FƒHI3;EQUAL LOOPÀ!DˆHSCOREND;LOWER,CONTÊ!E‡NEWHIGH;REPLACE HIGH SCOREÔ!ƒHI33Þ!)>è!HƒHI1;LOOP....ò!‡NEWHIGH%>;COPYü!ƒNH1Q…SCORE8;SCORE INTO"P„HIGH8;HIGH SCORE"3")>$"HƒNH1;LOOP...." ˆHSCOREND:8"X;B"X; ADD FORCE FIELD GRIDSL"X;V"„GRIDQ…LEVEL;GET SPACE`" ;;BETWEENj"S>;GRIDS FOR LEVELt">~"Q…GATES9;AND THROWˆ"P„TEMP;IN TEMP’"%>;THEN GETœ"Q>5„SCRN;OFFSET AND¦"P…TEMP2;ADD IT TO°"Q†OFFSET9;START OFº"PƒADR;SCREEN MEM.Ä"ƒGR1Q…TEMP2;POKE THEÎ"PƒADR;3 GRIDØ"$>;CHARACTERSâ"ƒGR2Q>;INTOì"P@ƒADR7;MEMORYö" #ƒADR# #ƒADR #Q># P@ƒADR7# #ƒADR(# #ƒADR2#Q><# P@ƒADR7F# #ƒADRP# #ƒADRZ#0d#HƒGR2n#ƒGR3Q†RANDOM;FIND Ax#M>;VALID GATE‚#R>;LOCATIONŒ#EƒGR3–#R> #DƒGR3ª#"ƒADR;AND ADD THE´#T?;FORCE FIELD¾#,;ANDÈ#O…TEMP2;GENERATORSÒ# PƒADRÜ#Q>æ# P@ƒADR7ð# "ƒADRú# "ƒADR$Q> $ P@ƒADR7$ "ƒADR"$ "ƒADR,$Q>Œ;FORCEFIELD6$ P@ƒADR7@$3J$Q>T$ P@ƒADR7^$ "ƒADRh$ "ƒADRr$ P@ƒADR7|$1†$Q>‹;FORCEFIELD$ P@ƒADR7š$ "ƒADR¤$ "ƒADR®$Q> ¸$ P@ƒADR7Â$ "ƒADRÌ$ "ƒADRÖ$Q>à$ P@ƒADR7ê$QƒADR;ADD SPACEô$O„TEMP;AND SCREENþ$PƒADR;LOCATION%DƒGR1;BUMP MSB% #…TEMP2;IF%Q…TEMP2;NECESSARY&%R>5„SCRN;OUT OF ROOM?0%FƒGR1;NO,LOOP..:%:D%X;N%$…GATES ÿ=–=<===<=<=Z=FX%%†OFFSET ÿ=È=d=K=2=2=2=È=db%X;l%X; MAIN GAME DLIv%X;€%ƒDLI5;SAVE XREGŠ%A;AND A REG”%5ž%$…DLINE;INC NASTY¨% #…DLINE²%Q‡ROCKPOS9;GET LOCATION¼% P†HPOSP0;AND STORE IN PLR2Æ%P†HPOSP0;AND PLR3Ð%Q†COLOR29;PUT COLORÚ%P‡HCOLPM2;DIRECTLYä%Q†COLOR39;INTOî%P‡HCOLPM3;HARDWARE REGISTERSø%(> ;ANY LEFT?&HƒDL1;YES,LOOP.. &Q>4„DLI2;NO,POINT&P…VERTI;TO NEXT &Q>5„DLI2;DLI*& P…VERTI4&ƒDL17;RESTORE A>& >;AND XH&7R&9\&X;f& „DLI25p&Q>ø;POKE SCOREz&P†HCOLP0;COLORS„&Q>˜;DIRECTLYŽ&P†HCOLP1;INTO˜&Q>&;HARDWARE¢&P†HCOLP3;REGISTERS¬&Q>4ƒDLI;POINT TO¶&P…VERTI;MAINÀ&Q>5ƒDLI;DLIÊ& P…VERTIÔ&7Þ&9è&X;ò&X; ATTACTING NASTIES.....ü&X;'†ATTACK$>' &…DLINE'ƒAT3Q‡ROCKSPD9;NASTY ACTIVE?$'FƒAT1;NO,GIVE IT LIFE!.'Q‡ROCKPOS9;YES MOVE8';;ITB'S‡ROCKSPD9;LEFTL'HƒAT2;STILL ON SCREEN?V' P‡ROCKSPD9;NO, RESET POSITION`'Q>þ;AND SPEEDj'ƒAT2P‡ROCKPOS9t' ƒAT42;MORE~'(> ;NASTIES?ˆ'HƒAT3;YES,LOOP..’':œ'!ƒAT1Q†NONEW1;NOT END OF LEVEL?¦' L†RANDOM;CAN WE GIVE IT LIFE?°'HƒAT4;NO,DRATS..º'Q>Ä' %†RANDOMÎ')>;A FAST ONE?Ø'EƒAT0â'Q>;YES. FUN!!!ì'ƒAT0P‡ROCKSPD9ö'Q…LEVEL;LVL>6?(R> (D„AT10;NO. LOOP(#‡ROCKSPD9;SPEED THINGS UP(„AT10!ƒAT4;LOOP....((X;2("†IMAGE2 ======x=ü<( x=======F( =====>==kP( =]="=====Z( =======ød( =======n( =====<=~=;PAST THE 1ST LEVEL?¤)FƒRK7;NO,BYE..®)Q> ;READ THE¸)P„TEMP;IMAGES OFÂ)ƒRK1%>;THE NASTIESÌ)Q„TEMP;(PLAYERSÖ)T?;2 AND 3)à)T?;INTO PMGê) T?;MEMORYô)T?;WHERE THEþ) ,;DLI WILL*O>";FIND'EM.*>*ƒRK2Q†IMAGE18&*P†PLAYER90* Q†IMAGE28:*P†PLAYER9D*0N*1X*HƒRK2b* "„TEMPl*HƒRK1v*$> ;SET INITIAL POSITION€*ƒRK4Q>þ;OFF SCREEN ANDŠ*P‡ROCKPOS9;ZERO SPEED”*Q>;SO THEYž*P‡ROCKSPD9;STAY¨*0;PUT UNTIL²*IƒRK4;WE ACTIVATE¼* $> ;THEMÆ*Q>Ð*ƒRK5,Ú*O>P;GIVE EACHä*P†COLOR29;ONE TWOî*0;DIFFERENTø*IƒRK5;COLORS+$> +Q>ˆ+ƒRK6, +O>0*+ P†COLOR394+0>+IƒRK6H+ƒRK7:R+X;\+X; EXPLOSION (FIREWORKS)f+X;p+%†XPLODEQ‡XPIMAGE;GET IMAGE NUMBER.z+F†EXPEND;ANY LEFT? NO,BYE...„+"‡EXPTIME;TIME YET?Ž+H†EXPEND;NO,BYE...˜+"‡XPIMAGE;NEXT IMAGE¢+ Q‡XPIMAGE¬+T?;OFFSET IN¶+T?;IMAGE DATAÀ+T?Ê+L>Ô+>Þ+Q>è+ P…TEMP2ò+%ƒXPYü+†XPLOOPQ…XPLOD9;STORE IMAGE,P†PLAYER8;IN PLAYER1,0,3;NEXT BYTE$,"…TEMP2;ANY LEFT?.,H†XPLOOP;YES,LOOP8,Q>;NO SETB,P‡EXPTIME;TIMERL, Q‡XPIMAGEV, H†EXPEND`,P†HPOSP0j, †EXPEND:t,†XPINIT$>;INITIALIZE~,Q>;EXPLOSIONˆ, P…TEMP2’,%ƒXPY;GET IT'Sœ, †XPLOOP;LOCATION¦,Q„OYM0;AND PUT IT°,PƒXPY;ON THEº,Q„OXM0;SCREEN THENÄ,P†HPOSP0Î,Q> ;SET IMAGEØ,P‡XPIMAGE;POINTERâ,Q>;AND TIMERì, P‡EXPTIMEö,:-X; -X; EXPLOSION SHAPE DATA-X;-!…XPLOD =======(- =======2- =B=====B=<- ‰=B=$=€==$=B=‘F- =J=$=À==$=R=P- ==,=à==4==Z- ===x====d- ===8====n- =======x-X;‚-X; KILL ATTACKING NASTIES!Œ-X;–-‡KILLPLRQ„OYM0;GET Y COORD -;;AND CONVERTª-S>;TO GET #´-V?;OF NASTY¾- V?;WE HITÈ-V?Ò-V?Ü->æ- Q>;RESET SPEED AND POSITIONð- P‡ROCKSPD9ú-Q>þ. P‡ROCKPOS9.#†RIMAGE9;SET TO.Q†RIMAGE9;NEXT NASTY".P„TEMP;IMAGE,.&…TEMP2;SCORE= 1006.?;TIMES IMAGE@.$>;NUMBER+1J. ‡SCOREITT. $…TEMP2^.%„TEMP;ANY IMAGESh. )>;LEFT?r.DƒKL1;YES,NEXT|.Q>;NO,RESET†.P†RIMAGE9;TO IMAGE #0. P„TEMPš. ƒKL1Q>¤. P‡EXPLODE®.A¸.T?;READ NEWÂ. T?;NASTYÌ.T?;INTO PMGÖ. T?;MEMORYà.,ê.O>1ô.?þ. Q„TEMP/T?/T?/T?&/T?0/ P„TEMP:/L>D/>N/ƒKL2Q†IMAGE19X/P†PLAYER8b/ Q†IMAGE29l/P†PLAYER8v/1€/0Š/(„TEMP;DONE?”/HƒKL2;NO,LOOP...ž/&†HITCLR;YES,CLEAR¨/Q>;COLL. FLAG²/ P†KILLPL¼/!†MISEND;KILL MISSLEÆ/X;Ð/X; TITLE SCREENÚ/X;ä/…TITLEQ>4‡TITLEPG;PUTî/P„DLST;TITLEø/Q>5‡TITLEPG;PAGE ON0P„DLST;SCREEN 0 †PLRINT;GET RID OF PMG0Q>À;ENABLE DLI'S FOR 0P…NMIEN;RAINBOW EFFECT*0#…TITLF;SET FLAG40Q‡STLEVEL;UPDATE>0P…LEVEL;LEVELH0„LOOPQ†CONSOL;IS SELECTR0R>;PRESSED?\0H…LOOP2;NO,CONT..f0#…LEVEL;YES,INCp0Q…LEVEL;LEVELz0R>;LVL>9?„0HƒLP2;NO,CONT..Ž0 Q>;LVL=1˜0ƒLP2P…LEVEL¢0Q>;DELAY 1/2¬0P†TIMER5;SECOND¶0 P‡TIMERF5À0…LOOP2Q…LEVEL;PUT NEWÊ0P†TITLE4;LEVELÔ0 ‡ANIMATE;ON SCREENÞ0Q…TRIG0;IF TRIGGERè0FƒLP7;OR STARTò0Q†CONSOL;IS PRESSEDü0R>;CONTINUE, IF NOT1HƒLP3;LOOP...1ƒLP7Q>4ƒDSP;POINT TO1P„DLST;MAIN GAME$1Q>5ƒDSP;SCREEN.1 P„DLST81 Q>4ƒDLIB1 P…VERTIL1 Q>5ƒDLIV1 P…VERTI`1 Q> 0 j1%>t1ƒLP5P…SCORE8~11ˆ1HƒLP5’1'„OVER;CLR FLAGœ1 '…TITLF¦1Q…LEVEL;SET LEVEL°1 P‡STLEVELº1:Ä1ƒLP3Q‡TIMERF5;DELAY LOOPÎ1 H…LOOP2Ø1 F„LOOPâ1X;ì1‡STLEVEL ö1X;2X; TITLE SCREEN DLI 2X;2„TDLI5;SAVE X AND2A;A REGISTERS(2522$><2Q†DSHIFT;GET COLORF2 P†CSHIFTP2…TDLI1Q†CSHIFTZ2!P…WSYNC;WAIT FOR NEW SCAN LINEd2 P†HCOLP0;STORE IT IN HARDWAREn2 ,;ADD TWOx2O>‚2 P†CSHIFTŒ20;ANY MORE LINES?–2I…TDLI1;YES,LOOP 2$>;RESET COUNTª2…TDLI2Q†CSHIFT;GET COLOR´2P…WSYNC;WAIT FOR NEW LINE¾2P†HCOLP0;STORE ITÈ2;;SUBTRACT 2Ò2S>;TO GET THEÜ2P†CSHIFT;MIRROR EFFECTæ20;ANY MORE?ð2I…TDLI2;YES,LOOPú2Q‡TIMERF4;TIME YET?3H…TDLIX;NO,CONT..3Q>;YES,RESET3P‡TIMERF4;TIMER AND"3P†TIMER4;FLAG AND,3#†DSHIFT;INC THE START COLOR63…TDLIXQ>4„DLI2;POINT TO@3P…VERTI;NEXT DLIJ3 Q>5„DLI2T3 P…VERTI^3 7;RESTOREh3>;REGISTERSr37|39†3X;3X; TITLE PAGE DISPLAY LISTš3X;¤3‡TITLEPG p=p=F®3 ‡SCORELN¸3 p=ð=GÂ3 †TITLE1Ì3 GÖ3 †TITLE6à3 p=p=Fê3 †TITLE2ô3 Fþ3 †TITLE34 ð=G4 †TITLE54 p=Æ&4 †TITLE404 p=p=p:4 p=p=p=FD4 ‡SCORELNN4 ==AX4 ‡TITLEPGb4X;l4†TITLE1 AŽ COSMIC Av4†TITLE6 AŽ DEFENDERA€4!†TITLE2 €=A BY AŠ4#†TITLE3 €=A‘ phill roey A”4 †TITLE4 A’ select level: Až4&†TITLE5 €=A” analog computing A¨4X;²4X; DISPLAY LIST¼4X;Æ4ƒDSP p=p=ÆÐ4 ‡SCORELNÚ4 Tä4 î4 Ôø4 5 T 5 5 Ô 5 *5 T45 >5 ÔH5 R5 T\5 f5 ƒML1 Ôp5 z5 ƒML2 T„5 Ž5 ƒML3 Ô˜5 ¢5 T¬5 ¶5 ÔÀ5 Ê5 TÔ5 Þ5 Ôè5 ò5 Tü5 6 Ô6 6 T$6 .6 Ô86 B6 TL6 V6 Ô`6 j6 Tt6 ~6 ƈ6 ‡SCORELN’6 ==Aœ6 ƒDSP¦6X;°6'‡SCORELN €=A”....................Aº6 €=A‡ score:AÄ6…SCORE A…00000AÎ6 A‡ lives:AØ6…LIVES A3Aâ6 A… hi:Aì6„HIGH A…00000Aö6 Aˆ level:A7…LEVEL A1A 7B…BLANK Aµ A7#‡MESSAGE A” GAME OVER A7X;(7X; CHARACTER SET #127X;<7!…CHSET =======UF7 =@=P=P=d=T=E=QP7 Y=Y======Z7 i=X=T=T=P=@==d7 ÿ=ÿ=×=×=×=×=ÿ=ÿn7 ÿ=ÿ=Ã=Ã=Ã=Ã=ÿ=ÿx7 ÿ=ÿ=ë=ë=ë=ë=ÿ=ÿ‚7 =======Œ7 ?=õ=õ=ê=ê=õ=õ=?–7 ?=õ=õ=ê=ê=õ=õ=? 7 Ã=<==Ã=<==Ã=<ª7 =Ã=<==Ã=<==ô7 ?=ð=ð=À=À=ð=ð=?¾7 ÿ=I=I=I=I=I=I=ÿÈ7 ==!=-=)=-=!=Ò7X;Ü7X; CHARACTER SET #2æ7X;ð7"†CHSET2 =======Uú7 =@=P=P=d=T=E=Q8 Y=Y======8 i=X=T=T=P=@==8 ÿ=ÿ=ë=ë=ë=ë=ÿ=ÿ"8 ÿ=ÿ=×=×=×=×=ÿ=ÿ,8 ÿ=ÿ=Ã=Ã=Ã=Ã=ÿ=ÿ68 =======@8 ?=õ=õ=À=À=õ=õ=?J8 ?=õ=õ=À=À=õ=õ=?T8 =Ã=<==Ã=<==Ã^8 <==Ã=<==Ã=<=h8 ?=ð=ð=À=À=ð=ð=?r8 ÿ=’=’=’=’=’=’=ÿ|8 ==!=-=)=-=!=†8X;8X; CHARACTER SET #3š8X;¤8"†CHSET3 =======U®8 =@=P=P=d=T=E=Q¸8 Y=Y======Â8 i=X=T=T=P=@==Ì8 ÿ=ÿ=Ã=Ã=Ã=Ã=ÿ=ÿÖ8 ÿ=ÿ=ë=ë=ë=ë=ÿ=ÿà8 ÿ=ÿ=×=×=×=×=ÿ=ÿê8 =======ô8 ?=õ=õ=Õ=Õ=õ=õ=?þ8 ?=õ=õ=Õ=Õ=õ=õ=?9 <==Ã=<==Ã=<=9 Ã=<==Ã=<==Ã=<9 ?=ð=ð=À=À=ð=ð=?&9 ÿ=$=$=$=$=$=$=ÿ09 ==!=-=)=-=!=:9X;D9à;RUN PROGRAMN9 …STARTX9