-B X;KRAZY KATERPILLARSX;DAVID HUFFX;(X;2X;RUN ADDRESS: $2000<X;FX;PEHZ  ==dX;nX;SYSTEM EQUATESxX;HPOSP0ЌHPOSM0ЖSIZEP0Р SIZEM Ъ M0PFд P0PFо M0PLPMBASEHITCLRGRACTLSDMCTL/GPRIORoSDLSTL0VDSLST CHBASSTICK0x"STRIG0,PCOLR06COLOR0@ ATRACTMJCOLPF0TAUDCTL^ AUDF1h AUDC1r AUDF2| AUDC2҆ AUDF3Ґ AUDC3Қ AUDF4Ҥ AUDC4ҮRANDOM ҸXITVBVbSETVBV\SIOINVe NMIEN WSYNC CONSOLX;X;PROGRAM REGISTERSX;X;&VP0LO ;;Y POS. PLAYER00VP0HI :SHP0 ;;X POS. PLAYER0DVP1LO ;;Y POS. PLAYER1NVP1HI XSHM0 ;;X POS. MISSILESbVPMLO ;;Y POS. MISSILESl HPOSM ;;X POS. COLLISIONv!VPM0LO ;;Y POS. COLLISIONVPM0HI COLLO ;;COLLISION ADDRCOLHI DMLO ;;START SCREEN MEM DMHI DLCNT ;;DLI COUNTEROLDSET ;;ADDR ROM CHSETNEWSET ;;ADDR NEW CHSETX;X;STOP ;;PLAYER MOVEMENT?TEMPHI ;;TEMPS LOX8  SAVEX TRGCNT ;;READ TRIGGER? M0SND ;;SOUNDS*HITSND 4P0SND >LVLSND HLVLFLG ;;NEW LEVEL?RLEVEL ;;BCD LEVEL #\LEVHEX ;;HEX LEVEL #fLEVORG ;;ORIGINAL LEVELpP0DEAD ;;PLAYER DEAD?zSPEED ;;BUGS SPEEDBUGCNT ;;# OF BUGSSCORE ;;SCORESCOADD ;;ADD TO SCOREDIGIT ;;FOR DISPLAYLIVES ;;LIVESTIMER ;;DELAY TIMERCPYCNT ;;PAGES TO MOVECPYTMP ;;TEMP"MSTAT ;;WHICH MISSILES OUTMSTOP ;;DISTANCE TO GOSPKFLG ;;SPIKE ON?X;PMB(;;PMBASE ADDRESS#CHBASEPMB;;CHARACTER SET BASESCOMEM0;;SCORE LINE#DMEMSCOMEM(;;DISPLAY MEMORY$X;.X;8 BX;L !STARTVX;`X;jX;DISPLAY LIST FOR TITLEtX;~DLTITL p=p=p=p=p G TITLE p==p=p=p==p=p=! p=p=p=p=p=p=p==0= A DLTITLX;X;X;TITLE MEMORYX; TITLE' =======+=r==:=y   +=a==%=r==) l==!=r=  ( =2 <! =========F  P ======Z ====d n =====x ====  X;X;X;GAME DISPLAY LISTX;DLIST p=p=p F SCOMEM = DMEM! ========= A DLISTX;X; START-"Q>H;;TITLE COLORS, PCOLOR06Q>(@PCOLOR0JQ>xTPCOLOR0^Q>hhPCOLOR0rQ>;;BACKGND|PCOLOR0X;Q>DLTITL;;SHOW TITLE PSDLSTLQ>DLTITLPSDLSTLX;$>;;CLEAR PAGE0 REGISTERSQ> CLRP0P90 ICLRP0X;$>;;CLEAR PAGE6ACLRP6P90& HCLRP60X;:Q>DMEM;;SET POINTER TODPDMLO;;SCREEN MEMORYNQ>DMEMX PDMHIb CLRSM;;CLEAR PLAYFIELDlX;v$>;;INITIALIZE SOUNDSQ>NOSNDPAUDF190 INOSND SIOINVX;%>VBLANK;;START VBI$>VBLANKQ> SETVBVX;$>;;SET LEVEL &LEVHEXX; X;X;ROTATE TITLE COLORS X;*!ROTCOLQCOLOR0;;GET COLOR24 5;;SAVE IT>$>HCOLRQCOLOR09;;GET COLORRPCOLOR09;;MOVE IT\0;;NEXT COLORf ICOLRp7;;GET COLOR2zPCOLOR0;;TO COLOR0X;Q>;;DELAY PTIMERTMQCONSOLM>;;CHECK STARTFBEGIN;;PRESSED, BEGIN GAMEQTIMER;;TIME UP? HTM;;NOX; QCONSOLM>;;CHECK SELECTHSHOLEV;;NOT PRESSED#LEVHEX;;PRESSED Q>;;BEEP PAUDC4 Q>y$ PAUDF4. Q> ;;DURATION8 PLVLSNDB SHOLEVQLEVHEX;;GET LEVELL R> ;;TO BIG?V DOKLEV;;NO` Q>;;YES,RESETj PLEVHEXt OKLEVL>;;COLOR3~ $>a PTITLE9;;DISPLAY IT !ROTCOL;;TITLE ROUTINE X; BEGIN"LEVHEX;;WANT (0-9) $LEVHEX;;START LEVEL &LEVEL &LEVORG;;KEEP ORIGINAL LEVEL X; X; X;REDEFINE CHARACTERS X; Q>;;ADDR ROM CHSET POLDSET Q>CHBASE;;NEW CHBASE PNEWSET Q>;;LOW BYTES( POLDSET2 PNEWSET< X;F $>;;DO 2 PAGES OF CHSETP CH1%>Z CH2Q@OLDSET7;;GET ROMd P@NEWSET7;;PUT IN RAMn 1x HCH2 #OLDSET;;DO NEXT PAGE #NEWSET 0 ICH1 X; "NEWCH$>';;REDEFINE CHARACTERS NEW1QCHR19;;GET CHAR DATA PCHBASE9;;MOVE IT 0 INEW1 X; X;GAME COLORS X; Q>;;SCORE NUMBERS PCOLOR0 Q>;;SCORE LETTERS" PCOLOR0, Q>;;BUGS LEGS6 PCOLOR0@ Q>*;;MISSILESJ PCOLOR0T Q>;;BACKGND^ PCOLOR0h X;r Q>DLIST;;GAME DISPLA ON| PSDLSTL Q>DLIST PSDLSTL X; Q>DLI;;SET DLI VECTOR PVDSLST Q>DLI PVDSLST X; Q>;;ENABLE DLI PNMIEN X; "Q>CHBASE;;SWITCH CHAR BASE PCHBAS X; Q>;;ENABLE P/M PGRACTL& Q>>;;SINGLE LINE RES.0 PSDMCTL: Q>PMB;;HI BYTE PMBASED PPMBASEN Q>;;FIFTH PLAYER ENABLEX PGPRIORb $>;;NORMAL SIZEl &SIZEP0v &SIZEM Q>PMB;;PLAYER0 BASE PVP0HI Q>PMB;;MISSILE BASE PVPM0HI  CLRPM;;CLEAR P/M AREA X; !RESET$>';;DISPLAY SCORE LINE SCRLNQSCOLN9 PSCOMEM9 0 ISCRLN X; $>;;SCORE = 0 &SCORE &SCORE &SCORE  DISPSCO;;PUT ON SCORE* X;4 $>;;4 LIVES> &LIVESH  NEWLVL;;GET FIRST LEVELR X;\ $>;;ENABLE MOVEMENTf &STOPp &HITCLR;;CLEAR COLLISIONSz X; X; X; X;MAIN LOOP X; PLAY COPY;;MOVE BUGS  MFIRE;;MOVE MISSILES  DISPSCO;;SHOW SCORE  DELAY;;SLOW IT DOWN  MFIRE;;MOVE AGAIN  CKLEV;;CHECK LEVEL QLVLFLG;;COMPLETE? FCHKP0;;NO  NEWLVL;;YES,DO NEXT LEVELX;CHKP0QP0DEAD;;PLAYER DEADFALIVE;;NO$!KILLP0;;YES,EXPLOSION.X;8ALIVE!PLAY;;CONTINUE GAMEBX;LX;VX;PLAYER KILLED`X;jKILLP0Q>;;NO MOTIONt PSTOP~PP0DEAD;;RESET FLAGX;%>;;SHOW EXPLOSIONEXPQEXPLODE8;;DATAP@VP0LO7;;SHOW IT1IEXPX;Q> ;;TURN ON SOUND PAUDF3Q>" PP0SNDDLYQP0SND;;WAITHDLY X; CLRPM;;CLEAR P/M AREAX;("LIVES;;LOSE A LIFE2QLIVES;;ANY LEFT?< FDEAD;;NOF DISPLIV;;YES,SHOW THEMP CLRSM;;CLEAR SCREENZ SETUP;;SETUP LEVELd STARTP0;;RESTARTnQ>xPHITCLR;;CLEAR COLLISIONPSTOP;;ALLOW MOVEMENT!PLAY;;TO MAIN LOOPX;X;X;X; GAME OVER ROUTINEX; DEAD$>DD1QMESSAGE9;;GAME OVERPSCOMEM9;;SHOW IT0IDD1X; CLRSM;;CLEAR SCREENQ> PBUGCNT;;10 BUGS" SET1;;SHOW THEM,Q> 6PBUGCNT;;10 BUGS@#DMHI;;NEXT PAGEJ SET1;;SHOW THEMT"DMHI;;RESTORE^X;hWAITQCONSOLrM>;;START?| HWT1;;NOWT2QCONSOL;;YESM>;;RELEASED? FWT2;;NO!START;;YES, DO TITLEX;WT1QSTRIG0;;PRESSED?FRESTART;;YESQTIMER;;TIME UP? HWAIT;;NO COPY;;MOVE BUGSQ> ;;RELOAD TIMER PTIMER!WAIT;;KEEP CHECKINGX;!RESTART$LEVORG;;ORIGINAL LEV&LEVEL;;RESET& &LEVHEX0 CLRSM;;CLEAR SCREEN:!RESET;;RESTARTDX;NX;XX;bX;lX;SUBROUTINESvX;X;X;MISSILE ROUTINESX;MFIRE$>;;DO 4 MISSILESCKP0QM0PL9;;PLAYER HIT?FNOMHIT;;NO#P0DEAD;;YES,SET FLAG!FMEXIT;;DONENOMHIT0;;NEXT MISSILE ICKP0X;$>;;DO 4 MISSILESCKMQM0PF9;;BUG HIT?FNOHIT;;NO  KILLBUG;;YES, DESTROY ITNOHIT0;;NEXT MISSILE ICKM*X;4$>;;CLEAR COLLISIONS> &HITCLRHX;R$>;;MOVE MISSILES IF OUT\ FIREMQMSTAT;;MISSILE STATUSfMMDATA9;;IS IT OUT?pFNOMOVE;;NOz MOVEM;;YES, MOVE ITNOMOVE0;;NEXT ONE IFIREMX;TRIGQTRGCNT;;CHECK TRIG?FCKTRIG;;YES"TRGCNT;;NO!FMEXIT;;DONEX;CKTRIGQ>;;RESET IT PTRGCNTQSTRIG0;;PRESSED?FLAUNCH;;YES, TRY TO FIRE!FMEXIT;;NOX;LAUNCH$> NEXTMQMSTAT;;ANY AVAILABLE?$MMDATA9;;CHECK BITS.HMOUT;;NO,ALREADY OUT8QMDATA9;;YESBLMSTAT;;UPDATE MSTATLPMSTAT;;TO SHOW IT'S OUTV STARTM;;START IT`!FMEXIT;;CAN ONLY FIRE 1jMOUT0;;TRY NEXT ONEt INEXTM~ !FMEXITX;STARTMQ>;;MISSILE SOUND PAUDC1Q> PM0SNDX;QSHP0;;GET PLAYERS X POS.,O>;;OFFSET PHPOSM09PSHM09;;SAVE MISSILE POS.X;; QVP0LO;;PLAYERS VERT .POSS>;;OFFSETPVPMLO9;;SAVE IT(X;2Q>A;;MOVE IT 65 TIMES< PMSTOP9FX;P MOVEM;;MOVE ITZ:dX;nMOVEMQVPMLO9;;GET YxPVPM0LO;;SAVE ITX;"MSTOP9;;DONE?FCLEARM;;YES, CLEAR ITX;QSPKFLG9;;SPIKE?HSPIKE;;YES%>;;NO,ERASE OLD POS.CLRMQMDATA9;;GET BITSN>;;MAKE MASKM@VPM0LO7;;ZERO BITSP@VPM0LO7;;MISSILE OFF1 ICLRMX; SPIKE;QVPM0LO;;OLD Y"S>;;MOVE UP 3, PVPM0LO6PVPMLO9;;SAVE NEW Y@R>2;;TOP LIMITJDSPKON;;YES,SPIKE ONT %>;;NO^LOADMQ@VPM0LO7hLMDATA9;;GET MISSILE BITSrP@VPM0LO7;;MISSILE ON|1 ILOADM:X;SPKONQ>;;SPIKE ONPVPMLO9;;MISSILE TO BOTTOMPSPKFLG9;;SET FLAG:X;CLEARM%>;;ERASE A MISSILEQ> PVPM0LO!CLMQMDATA9;;GET MISSILE BITSN>;;MAKE MASKM@VPM0LO7;;ZERO BITSP@VPM0LO7;;TURN IT OFF1;;DO ALL OF MISSILE&HCLM0X;:Q>;;RESETD PMSTOP9N PSPKFLG9XX;bQMDATA9;;MISSILE BITSlNMSTAT;;MISSILE NOT OUTvPMSTAT;;UPDATE MSTAT:X;X;KILLBUG CLEARM;;HIT A BUGQVPMLO9;;GET Y POS. PVPM0LOQSHM09;;GET X POS PHPOSMX;&SAVEX;;SAVE MISSILE # FIND;;GET MEMORY LOCATIONX;Q>;;ERASE THE BUGP@COLLO7;;FIRST PART 3P@COLLO7;;SECOND PART X;*Q> ;;UP SCORE4PSCOADD>X;HQ>;;SOUND ONR PAUDC2\Q> f PHITSNDp$SAVEX;;RECOVER MISSILE #z:X;FMEXIT:;TO MAIN LOOPX;MDATA = =0=X;X;X;X;SHOW NEXT LEVELX;NEWLVL<;;BCD ADDITION,QLEVEL;;BCD LEVELO> PLEVEL-X;$Q>.PSTOP;;STOP MOVEMENT8PLVLFLG;;RESET FLAGBX;L#LEVHEX;;HEX LEVELV QLEVHEX`R>;;TOO BIG?jDLEVOK;;NOt Q>;;YES~ PLEVHEXLEVOK$LEVHEX;;INDEXQLEVSPEED9;;GET LEVEL SPEEDPSPEED;;FOR COPY ROUTINEX;Q>;;NEW LEVEL SOUND PAUDC4Q> PAUDF4Q>P;;SOUND DURATION PLVLSNDX; CLRPM;;CLEAR P/M DISPLIV;;SHOW LIVES  DISPSCO;;SHOW SCORE SETUP;;NEXT LEVEL STARTP0;;START PLAYER(X;2Q>;;DELAY BETWEEN LEVELS< PTIMERFDLEV1QTIMERP HDLEV1ZQ>dPSTOP;;ALLOW MOVEMENTn:xX;$LEVSPEED ====== =  = = =====X;X;X;DELAY$SPEED;;SLOW IT DOWN DE1%>DE21HDE20HDE1:X;X;X;X;MOVE THE BUGS"X;,COPY$>;;DO 2 PAGES6 &CPYCNT@X;J%>T #DMHI^Q@DMLO7;;GET LAST BYTEh >;;SAVE ITr"DMHI;;RESTORE|X;CPY1%>;;SET TO FIRST BYTECPY2&CPYTMPQ@DMLO7;;GET BYTE >;;STOREQCPYTMP;;GET PREVIOUS BYTEP@DMLO7;;MOVE IT3;;NEXT BYTE HCPY2X;#DMHI;;NEXT PAGE"CPYCNT;;DONE? HCPY1;;NOX;"DMHI;;YES,RESTORE "DMHI:&X;0X;:X;D$X;CALCULATE SCREEN MEMORY ADDRESSNX;FROM P/M COORDINATESXX;b FIND;lQHPOSM;;X POSvS>0;;OFFSET V?;;/2 V?;;/4 >;;X COORDX;Q>;;CLEAR PTEMPHIX;;;;Y=Y/16*40 BYTES/LINEQVPM0LO;;Y POSS>0;;OFFSETM>;;Y/16*16V?;;SHIFT RIGHT (*8)PLOX8;;SAVE *8X;  T?;;*16 T?;;*32 UTEMPHI;;SHIFT CARRY*X;4,;;ADD *8+*32=*40> OLOX8HPCOLLO;;*40 LOR QTEMPHI\O>fPCOLHI;;*40 HIpX;z,;;GET FINAL COLLISION ADDRQ>DMEM;;SCREEN MEMOCOLLO;;ADD POSITIONPCOLLO;;COLLISION ADDR LOQ>DMEM OCOLHIPCOLHI;;COLLISION ADDR HIX; A;;GET X?;;Y=INDEX FOR X POS:X;X;X;X;SCORE AND LEVEL DISPLAYX;DISPSCO<;;BCD ADDITION$,.$>;;DO 3 BYTES8 TOTALQSCORE9;;GET OLD SCOREBOSCOADD9;;ADD TO SCORELPSCORE9;;SAVE SCOREV0` ITOTALj-tX;~$>;;CLEAR SCOADDQ>ZEROPSCOADD90 IZEROX;$>;;POSITION 6%>SCODPQSCORE8;;GET BYTE DISP;;DISPLAY IT2;;NEXT POSITION23;;NEXT BYTE)>;;DO 3 BYTES  HSCODPX;DISPLVL$>;;POSITION 17(QLEVEL;;LEVEL2 DISP;;DISPLAY IT<X;F:PX;ZX;dDISPPDIGIT;;BCD # TO SHOWnM>;;LOWER NIBBLExL>;;COLOR0X;PSCOMEM9;;DISLPAY ITQDIGIT;;GET BCD #V?;;GET HIGH NIBBLEV?V?V?L>;;COLOR0PSCOMEM9;;DISPLAY IT:X;X;X;X;DISPLAY REMAINING LIVESX;)DISPLIVQ>PMB;;PLAYER 1 Y POS." PVP1HI,Q>&6 PVP1LO@X;J$>;;REMOVE ALLTQ>;;FROM SCREEN^LD1PHPOSP09h0rHLD1|X;Q>;;COLORSPPCOLR0PPCOLR0PPCOLR0X;$>;;DO 3 PLAYERS LD2%> LD3QP0DATA8;;SHAPE DATAP@VP1LO7;;SHOW IT1ILD3#VP1HI;;NEXT PLAYER0 ILD2 X; $LIVES& 0;;SHOW ONE LESS0 FLD5;;NONE TO SHOW: LD4QTABX9;;POSITIONSD PHPOSP09;;SHOW PLAYERSN 0X HLD4b LD5:l X;v TABX === X; X; X; X;DISPLAY LIST INTERRUPT X; DLI5;;SAVE X,Y,A A 5 C 5 X; $DLCNT;;WHICH LINE QBODYCLR9;;COLOR0!%SPOTCLR9;;COLOR1 !PWSYNC;;WAIT FOR SYNC! PCOLPF0;;CHANGE HARDWARE REG !'COLPF0*!#DLCNT;;NEXT LINE4!(> ;;LAST ONE?>!HDLIEND;;NOH! $>;;YESR!&DLCNT;;RESET TO TOP\!X;f!DLIEND7;;RESTORE X,Y,Ap!?z!7!>!7!9!X;!,BODYCLR ===V=~==F=*==f=!X;!,SPOTCLR ==<====z=F==<=!X;!X;!X;!X;!X;CLEAR P/M MEMORY!X;"CLRPMQ>;;MISSILE BASE" PVPM0LO"X;$"$>;;DO 5 PAGES UP."Q>8"?B"CPMP@VPM0LO7;;CLEAR ITL"1V"HCPM`"#VPM0HI;;NEXT PAGEj"0t"HCPM~"X;"Q>PMB;;RESET" PVPM0HI"X;"$>;;UPDATE TO SHOW"Q>;;ALL MISSILES OFF"OFFPSPKFLG9" PMSTOP9" PMSTAT"0"IOFF"X;":#X; #X;#X;#X;START PLAYER(#X;2#STARTP0Q>;;Y START POS.<# PVP0LOF# Q>d;;XP# PHPOSP0Z# PSHP0d#X;n#Q>x#PPCOLR0;;COLOR P0#X;#%> #DISP0QP0DATA8;;SHAPE DATA#P@VP0LO7;;SHOW IT#1# IDISP0#X;#:#X;#X;#X;#X;CLEAR SCREEN MEMORY#X;$CLRSM$>;;2 PAGES$Q>$?"$CSMP@DMLO7;;CLEAR IT,$16$HCSM@$#DMHI;;NEXT PAGEJ$0T$ICSM^$X;h$Q>DMEM;;RESTOREr$ PDMHI|$X;$:$X;$X;$X;$X;PLAYFIELD SETUP$X;$SETUP RNDPF;;PUT ON BUGS$#DMHI;;NEXT PAGE OF MEMORY$ RNDPF;;MORE BUGS$"DMHI;;RESTORE$X;$,$QDMLO;;FIND ADDR%O>;;SCREEN CENTER% PDMLO% QDMHI&%O>0% PDMHI:%X;D%%>;;CLEAR 4 LINESN%Q>;;IN SCREEN CENTERX%CP0SP@DMLO7;;FOR STARTb%1l% HCP0Sv%X;%Q>DMEM;;RESTORE% PDMLO%Q>DMEM% PDMHI%:%X;%X;%RNDPF$LEVHEX;;INDEX%QBUGLEV9;;# TO DISPLAY% PBUGCNT%X;%SET1%RANDOM;;POSITION% BUG;;SHOW THEM&"BUGCNT;;ANY MORE? &ISET1;;YES&:;;NO &X;*&BUG$>;;CHARACTERS 1-44& SBUGA>&P@DMLO7;;SHOW BUGSH&1R&0\& HSBUGf&X;p&:z&X;&BUGLEV == ==== & =======#=#&X;&X;&X;&X;CHECK IF LEVEL COMPLETE&X;&CKLEV$>;;2 PAGES&%>&CKL1Q@DMLO7;;GET MEMORY&HNOTDONE;; IF<>0 NOT DONE&1;;CHECK NEXT& HCKL1'#DMHI;;NEXT PAGE'0' ICKL1$'X;.'$>;;ALL ZERO,LEVEL DONE8'&LVLFLG;;SET FLAGB' HLVLDONEL'X;V'NOTDONE$>;;NOT DONE`' &LVLFLGj'LVLDONEQ>DMEM;;RESETt' PDMHI~'X;':'X;'X;'X;'X;'X;'X; VBLANK ROUTINE'X;'X;' VBLANK-'X;'$TIMER;;COUNT DOWN TIMER( FSOUND1 ( "TIMER(X;($SOUND1$M0SND;;MISSILE SOUND ON?((FNOSND1;;NO2(QM0SND19;;YES, NEXT FREQ<( PAUDF1F( "M0SNDP( HSOUND2Z(NOSND1Q>;;OFFd( PAUDC1n(X;x(#SOUND2$HITSND;;BUG HIT SND ON?(FNOSND2;;NO(QHITSND29;;YES, NEXT FREQ( PAUDF2( "HITSND( HSOUND3(NOSND2Q>;;OFF( PAUDC2(X;("SOUND3QP0SND;;BLOW UP SND ON?(FNOSND3;;NO( V?;;YES,/2( PAUDC3( "P0SND) HSOUND4)NOSND3Q>;;OFF) PAUDC3")X;,)SOUND4$LVLSND;;SOUND 4 ON?6)FNOSND4;;NO@)"LVLSND;;YESJ) HSTOPVBT)NOSND4Q>;;OFF^) PAUDC4h)X;r)STOPVBQSTOP;;CONTINUE?|)HCOLCK;;YES)EXIT!XITVBV;;NO)X;)COLCKQP0PF;;PLAYER HIT?) FMOVE;;NO)#P0DEAD;;YES,SET FLAG) !EXIT)X;)MOVE$SHP0;;PLAYER X POS)%VP0LO;;Y POS)X;) QSTICK0)V?;;CHECK D0)ENOTUP;;SET,NO MOTION*1;;NOT SET,MOVE UP 2*1*X;&*NOTUPV?;;CHECK D10*ENOTDOWN;;NO:*3;;MOVE DOWN 2D*3N*X;X*NOTDOWNV?;;CHECK D2b*ENOTLEFT;;NOl*0;;MOVE 2 LEFTv*0*X;*NOTLEFTV?;;CHECK D3*ENOTRT;;NO*2;;MOVE 2 RIGHT*2*X;*NOTRT(>2;;LEFT LIMIT*DBADX;;TOO FAR*(>;;RIGHT LIMIT*DGOODX;;OK? YES*$>2;;NO,RESET TO LEFT*GOODX&SHP0;;NEW X POS* &HPOSP0+X; +BADX)>Z;;UPPER LIMIT+DBADY;;TOO FAR? YES +)>;;LOWER LIMIT*+EBADY;;TOO FAR? YES4+'VP0LO;;OK, SAVE IT>+X;H+BADY%> ;;READ IN PLAYERR+LP1QP0DATA8;;AT VP0LO\+ P@VP0LO7f+1p+ILP1z+X;+Q>;;STOP ATTRACT+ PATRACT+!EXIT;;ALL DONE+X;+X;+X;+X;DATA TABLES+X;+ P0DATA+- =======>=>=>=>=>==+X;+ EXPLODE+ ==J="=H=D===, ===E==H===,X;, M0SND1$,! =========., d=K=A=2=-=(8,X;B, HITSND2L,' x=d=Z=P=K=F=2=(=== =V,X;`, MESSAGEj, ========t,X;~, CHR1 =======, = =3=V=Z=V=3= , ==3====3=̜, ==3=V=Z=V=3=̦, ==0====0=,X;, SCOLN,* s=c=o=r=e========, l=v=l===, ,X;,