| WA -SOURCE FOR La Machine -By Steve Alpert - MODIFIED 12/16/85 FOR ANALOG MAGAZINEAX; F=EK=EI( OPEN 2!X;CHANNEL#,MODE,FILESPEC LABEL<X;FIRST P1=P1*16F  PQ> ZT?dT?nT?xT?>;;CHANNEL # GOES IN XREGX;!X;NOW PUT THE MODE NUMBER INTOX;THE AUX BYTEX;Q> PJ9;;ICAX1Q>PK9X;%X;NOW GET THE LOW AND HIGH ADDRESSX;OF THE FILESPECX; Q>4 PD9;;ICBAL Q>5 "PE9;;ICBAH,X;6$X;INSTALL THE COMMAND AND EXECUTE@X;J Q>;;OPENTPB9;;ICCOM^ V;;$CIOVhX;rX;| AWRONG # PARMSAX;X;X; CLOSE  X;CHANNEL#X;  Q> T?T?T?T?>&Q> ;;CLOSE CMD0PB9: VDX;NX AWRONG #OF PARMSAblvX;X;X;X************************** MCADD     Q ,O>  DSKIPIT # SKIPITP Q  ,O4   DNOMATH* # 4NOMATHP >HR% A*** WRONG # PARMS. - MCADD ***A\fpz X**************************** ZERO   Q>P , A*** NEED ONE PARAMETER FOR - ZERO ***AX;!X***************************** MCINC    AINK - too many parms.A  ,$O>.8Q B,LO>V HSKIPIT` # j SKIPITtP ~X;X************************* MCDEC   ;S>' A*** NO PARMS ALLOWED - MCDEC ***AX; X************************* PAINT   ($>2%><@LOOPQ 9F P@ 7P2Z3d) n H@LOOPxMCADD =("  H@LOOP' A*** MUST BE 4 PARMS, ALPERT! ***AX***************************I=JX** VIDEO EQUATES **X;SDLSTL0STICK0xSTRIG0COLOR0COLOR1COLOR2"COLOR3,COLOR46SCHBAS@CHBASE JCOLPF0TCOLPF1^COLPF2hCOLPF3r COLBK| TRIG0І WSYNC Ԑ NMIENԚATTRACTMDMACTLԮSDMCTL/VDSLSTX*PM GRAPHICS EQUATESX;HPOSP0HPOSP1SIZEP0SIZEP1 COLPM0COLPM1PCOLR0PCOLOR1& PRIOR0GPRIOR:PMBASEDHITCLRNGRACTLXFRMINDbSETVBK\lXITVBKbv STRIG SCRAM TEMP SCREEN PLAYERPACKPNTHARDWAREм TEXT POKMSK IRQEN RND X;GINIT$> ?0QDLIST29P9 2*(> 4H?0>$>HQ>;;CLEAR PMRWIPEPMP"9;;DATA BEFORE\2;;STARTINGfHWIPEPM;;AGAINpQ>p;;KILL THEzPPOKMSK;;BREAKPIRQEN;;KEYQ>> PSDMCTLQ>B PSCRAM PTEMPQ>b PSCRAM PTEMPQ> PSDLSTLQ>`PSDLSTL QC1 P QC2$ P. QBAK8 PB QC3L PV X;` SETDLIj CREDITt $>5FLASH~ %>4FLASH Q> SETVBK X; ";I LIKE TO NAME STORAGE ARRAYS ;AFTER MEMBERS OF MY FAMILY. Q>4NANCY PARRTAB Q>5NANCY PARRTABHI Q>4ANGELA PARRTAB Q>5ANGELA PARRTABHI Q>4NORTON PARRTAB Q>5NORTON( PARRTABHI2 Q>4ALPERT< PARRTABF Q>5ALPERTP PARRTABHIZ Q>4BAGGINSd PARRTABn Q>5BAGGINSx PARRTABHI Q>4RAFF PARRTAB Q>5RAFF PARRTABHI Q>4BAK PARRTAB Q>5BAK PARRTABHI X; Q>4N1 PNUMTABLE Q>5N1 PNUMTABLE_HI Q>4N2 PNUMTABLE Q>5N2" PNUMTABLE_HI, Q>4N36 PNUMTABLE@ Q>5N3J PNUMTABLE_HIT Q>4N4^ PNUMTABLEh Q>Mr PNUMTABLE_HI| X; !BIGBOX X; fSTARTCOL ============================= WIDTH HEIGHT ACROSS DOWN COLUMN  PALETTE U=== LFTLIN  RGTLIN  !BOXLOCLO =V====_= !BOXLOCHI b=g=l=q=b=g=q BOXNUM X; X;& BIGBOX0 Q>: PSCRAMD Q>aN PSCRAMX Q>b PTEMPl Q>uv PTEMP $> %> LINELOOP Q> P@SCRAM7 P@TEMP7 3 )> HLINELOOP 0 FSIDES MCADD SCRAM=( MCADD TEMP=( %> !LINELOOP SIDES Q>* PSCRAM4 Q>a> PSCRAMH Q>R PTEMP\ Q>bf PTEMPp X*SCRAM IS THE LEFT SIDEz X*TEMP IS THE RIGHT SIDE X; Q>| PHEIGHT %> SIDELOOP QLFTLIN P@SCRAM7 QRGTLIN P@TEMP7 "HEIGHT FOTHERBOXES MCADD SCRAM=( MCADD TEMP=( !SIDELOOPX;OTHERBOXES$Q>. PBOXNUM8 BOXLOOPBQ>L PWIDTHVQ> ` PHEIGHTj $BOXNUMtQBOXLOCLO9~ PSCRAMQBOXLOCHI9 PSCRAM)PAINT SCRAM=BOXDATA=WIDTH=HEIGHT #BOXNUM QBOXNUMR> HBOXLOOPQ> PBOXNUMX; CREDIT2 NUMBERS BALL  PMSET$> &PALDEX( NXTCOLR2$ ROTATOR;;ONLY IN ANALOG VERSION< !JSTICKFX;PZ INTERPRETd $BRICKNUMnQBRICKMAP9x PTEMPQBRICKMAP_HI9 PTEMP%>?0 Q@TEMP7 MMASK8 PSTORAGE83)>H?0 #BRICKNUM $BITENUMLSTORAGELSTORAGE LSTORAGEPDATABYTE9"%>, #BITENUM62@(>xJHINTERPRETT 'BRICKNUM^ 'BITENUMh $FRAMECNTr QFRMADR9| PSCRAMQFRMADR_HI9 PSCRAMQ> PWIDTHQ> PHEIGHT*PAINT SCRAM=DATABYTE=WIDTH=HEIGHT:X;%X*THIS ROUTINE MOVES THE DATA FROM X*THE ARRAY (USED BY#X*) TO A ONE OF THE SIX!X*STORAGE ARRAYS,,, X*,,,.X; SNAPSHOT& $FRAMECNT0 QARRTAB9: PPACKPNTDQARRTABHI9NPPACKPNTX%>b MLOOPlQDATABYTE8vP@PACKPNT73)>x HMLOOP:X;X;%X*THIS SECTION ALLOWS THE CHANGINGX*OF THE PALETTE BY JOYSTICKX; JOYPALQ>;;CHANGE COLOR.PWDWCOLOR;;OF TEXT WINDOW TO INDICATE MODEQ> PX; ?0 NUMBERS*Q4R>> F?0.5HX; LDA #$FFRX; STA 754\Q>f PWDWCOLORp:zX;?0.5QSTRIGH?1X;HERE, TRIG PRESSED NXTCOLR?2QSTRIG;;WAIT FOR RELEASEF?2X;HERE, WE START TESTING FOR$X;JOYSTICK MOVEMENT,WHICH CHANGESX;THE COLOR IN USE.X;?1QSTICK0R>;;NEUTRAL?F?0;;YES START AGAIN'X;HERE STICK IS MOVED,CHECK VALIDITYR>;;UP,INCREASE HUEH?3$ $PALDEX.QBAK9;;GET CURRENT COLOR8,BO>L D?2.5VM>;;WRAPAROUND`?2.5 COLSETj!?0tX;~X;X;HERE IT WAS NOT В?3R> ;;DOWNH?4 $PALDEX QBAK9, O>;;-16 E?3.5L>;;WRAPAROUND?3.5 COLSET!?0#X;HERE, IT IS NEITHER UP OR DOWN?4R>;;RIGHT H?5 $PALDEX QBAK9(52M><R>F H?4.5P7ZM>d COLSETn!?0x ?4.5O> PSTORAGE7M> LSTORAGE COLSET!?0X;$X;HERE,IF NOT LEFT THEN NOT VALID?5R> ;;LEFT H?5.6 $PALDEX QBAK95M>R> H?5.5"7,M>6L>@ COLSETJ ?5.6!?0TX;^X;h ?5.5,r O>;;-2| PSTORAGE7M> LSTORAGE COLSET!?0X;X;X;X; COLSET PBAK9 DOPALETTE?0QSTICK0R>;;WAIT FORH?0&:0#X*THIS ROUTINE, DISPLAYS:X*THE COLOR REGISTERS VALUESD"X*ON THE SCREEN IN HEXADECIMAL.NX;XX;bX;lv NUMBERS%>$> ?0QBAK95M>,W?W?W?W?? QHEXCHAR8, O>;;-32  PLDIGIT7 M>*?4 QHEXCHAR8>,H O>;;-32R PRDIGIT\QNUMTABLE9f PPACKPNTpQNUMTABLE_HI9zPPACKPNT%> QLDIGITP@PACKPNT7 QRDIGIT3P@PACKPNT70I?0X;:X;&X**********************************$X* EXTRACTS AND EXPANDS THEX*DATA WHICH WAS CRUNCHED BY#X*, AND MOVES IT TO THE X*SCREEN.$X;. RECALL8 $FRAMECNTB QARRTAB9L PPACKPNTVQARRTABHI9`PPACKPNTjQ>Bt PSCREEN~ PTEMPQ>bPSCREEN PTEMPQ> PACROSSQ> PDOWNX;ROLL$>%>Q@PACKPNT75 M>V?V?(V?2V?<V?FV?P PSTORAGE9Z2d7n5xM>0V?V?V?V? PSTORAGE9275M> V?V? PSTORAGE927M> PSTORAGE9"MCINC PACKPNT,X;6$>@%>JZLOOPQSTORAGE9T?^QBRICKVAL8h PSTORAGE9r2|(> HZLOOPX; XPANDQ> PHEIGHT$>%>YPANDQSTORAGE9 P@SCREEN7MCADD SCREEN=( "HEIGHT HYPANDQ> PHEIGHTMCINC TEMP PSCREEN QTEMP&PSCREEN02:(>D HYPANDNX;X "ACROSSb FDROWl !ROLLvDROWMCADD TEMP= PSCREEN QTEMPPSCREENQ> PACROSS "DOWN FRETURN !ROLL RETURN:$X********************************X;X;X*THIS IS THE TEXT DATA AREAX;  HEADER/ ALA MACHINE VERSION 2.0A  ======*! =========4! =========>! =========H! =========R A By Steve Alpert 1985A\! =========f! =========p! =========z! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========! =========$! =========.! =========8! =========BX;LV OPTIONS`(N1 A $2C8:  AjFS1 A6 Frames At2N2 A $2C4: |Š| A~(N3 A $2C5: | D: | A A٠A*N4 A $2C6: || AFS2 A$06 VBC A/ A  A A Snapshot A ONOFF$ AON AX;X;!X*THIS LITTLE SECTION PROVIDESX*THE OPENING CREDITS AND#X*AFTER A COUPLE OF SECONDS, THE%X*ROUTINE GOES TO A 6 LINE DISPLAY X; CREDIT Q>4HEADER(PLMS2 Q>5HEADER< PLMSFX;PQ>;;SET UPZ P;;DELAYd:nX;x CREDIT2 TLOOPQR>;;IS THE DELAYHTLOOP;;3 SEC. YET?Q>4OPTIONS;;YESPLMS;; PUT OPTIONSQ>5OPTIONS;;ON SCREEN PLMS:X;X;&X*THIS ROUTINE PUTS AND REMOVES THEX*BALL NEXT TO THE FRAME.X;BALL$FRAMECNT QBLOCTN9" PSCREEN,QBLOCTN_HI96PSCREEN@Q>J PWIDTHTQ>^ PHEIGHTh+PAINT SCREEN=BALLDATA=WIDTH=HEIGHTr:|X; NOBALL $FRAMECNT QBLOCTN9 PSCREENQBLOCTN_HI9PSCREENQ> PWIDTHQ> PHEIGHT-PAINT SCREEN=NOBALLDATA=WIDTH=HEIGHT:X; X; PMSET Q>;;INIT POSITION& PROW0 PCOL: Q>8;;INIT HORZD PHORZN Q>X PPMBASEb Q>l PPCOLR0v X; Q>8;;INITIAL POSITION PHPOSP0 $> Q>;;PLAYER SHAPE PMSP"9 2 (> HPMS X; Q>;;ENABLE PGRACTL;;PLAYERS PGPRIOR :!X; !X;! X*THIS IS THE JOYSTICK-DRIVEN !"X*PLAYER ROUTINE USED IN MOVING*!X*THE BRICK AROUND FOR DOING4!#X*ARTWORK.THE ROUTINES HERE ALSO>!X*RESPOND TO THE KEYPRESSES.H!#X*EVERYTHING IS CALLED FROM HERER!X;\!X;f!p!NXTFRM NOBALLz! $FRAMECNT!2! (FRAMESYS!H?0!$>!?0&FRAMECNT! RECALL!X; JSR INTERPRET! BALL!X;!!X;! JSTICK! TRIGGER"QKEY" FNOSV"X;HERE, SOME KEY IS PRESSED$" R>(;;R."H?08" RECALLB" INTERPRETL" !CONTINUEV"?0R>6;;-;;T"H?2" $SNAPFLAG" HZERO" #SNAPFLAG" CHGWORD" !CONTINUE" ZERO$>" &SNAPFLAG" CHGWORD# !CONTINUE #?2#R>';;INV KEY#H?3(# NXTCOLR;;SWITCH COLORS2# !CONTINUE<#?3R>!;;SPACEBARF# FNXTFRMP#R>;;B KEYZ#H?4d# WHEELHOUSEn# !CONTINUEx#?4R>?;;A KEY#H?5# ANIMATOR# !CONTINUE#?5R>:;;D KEY# H?5.5# DODATA# !CONTINUE#?5.5R> ;;U KEY#H?6# DODATA# !CONTINUE#?6R>;;C KEY#H?7$$>d;;VIOLET$ &WDWCOLOR$ COPIER"$$>,$ &WDWCOLOR6$ !CONTINUE@$?7R>>;;S KEYJ$H?8T$ Q>B;;RED^$ PWDWCOLORh$ GETSPECr$Q>|$ PWDWCOLOR$ RITEFILE$ !CONTINUE$?8R>=;;G KEY$H?9$ Q>;;BLUE$ PWDWCOLOR$ GETSPEC$Q>$ PWDWCOLOR$ READFILE$ !CONTINUE$?9R> ;;P KEY$H?10% JOYPAL% !CONTINUE%?10&%R>;;4 KEY0%H?11:%Q>D% SYSTEMN% !CONTINUEX%?11R>;;5 KEYb%H?12l%Q>v% SYSTEM% !CONTINUE%?12R>;;6 KEY%H?13%Q>% SYSTEM% !CONTINUE%?13R>;;* KEY%H?14% DIRECTORY% !CONTINUE%?14% CONTINUE% QSTRIG& HNOPE &X;HERE, BUTTON IS PRESSED&X; &QROW*&,4&U?>&U?H&>R&QBRICKMAP_HI9\&PSCREENf&QBRICKMAP9p& PSCREENz&,&OCOL&D?15&#SCREEN&?15PSCREEN&$>&%>&?16QCOLINUSE& P@SCREEN7&MCADD SCREEN=(&0&H?16& INTERPRET&QSNAPFLAG;;0=OFF'FNOPE;;1=ON' SNAPSHOT;;SAVE WORK'NOPE$' $STICK0.'(>;;AT REST?8'F?17;;YES,RNRB'X;HERE, STICK IS MOVINGL'(>V'F?17`'(> j'F?17t'(>~'F?17'(> 'F?17'X;HERE, IT IS A PROPER MOVE' (>;;UP?' HNOTUP'!UP'NOTUP(> ;;DOWN?' HNOTDWN'!DWN' NOTDWN'X;HERE, IT IS LEFT OR RIGHT'(> ;;LEFT?( FLEFT (X;HERE IT IS TO THE RIGHT(QHORZ;;GET HORZ.(,((O>2(><( (RBORDRF(F?17P(#COLZ(&HPOSP0;;MOVE HORZ POS.d(&HORZ;;SAVE NEW POS.n( LETGOx(?17!TRIGGER(X;(LEFT( QHORZ(,(O>( RLBORDR(G?17(>("COL( &HPOSP0( &HORZ( LETGO(?18!TRIGGER)X;)UP)X*FIRST WE TEST THE BORDER")$ROW,)F?186)$X*IF IT IS ZERO WE ARE ALREADY AT@) X*THE TOP.J) QPPOSLO9T) PPLAYER^) QPPOSHIh)PPLAYERr)"X*FIRST WE WILL WIPE OLD PLAYER|)%>)Q>)WIPEITP@PLAYER7)3))>) HWIPEIT)"X*NOW WE ESTABLISH NEW POSITION)X*AND DRAW THE PLAYER THERE.)0) QPPOSLO9) PPLAYER) QPPOSHI)PPLAYER)&ROW;;SAVE NEW ROW#*X;*%>*Q>;;BRICK SHAPE&* DRAWIT0* P@PLAYER7:*3D*)>N* HDRAWITX* LETGOb*?19!TRIGGERl*X;v*DWN*$ROW*(>*F?19* QPPOSLO9* PPLAYER* QPPOSHI*PPLAYER*%>*Q>*WIPE2P@PLAYER7*3*)>* HWIPE2+2 + QPPOSLO9+ PPLAYER + QPPOSHI*+PPLAYER4+&ROW>+X;H+%>R+Q>\+ DRAW2f+ P@PLAYER7p+3z+)>+ HDRAW2+ LETGO+?20!TRIGGER+X;+X;++FX;LETGO WAITS FOR THE JOYSTICK TO BE CENTERED AFTER IT HAS MOVED,+EX;BUT WILL ONLY WAIT 8 JIFFIES. THIS ALLOWS CONTINUOUS MOVEMENT.+X;+ X; .LOCAL+X;+ LETGOQ>+P,?2QSTICK0,R>,F?0$, ?1Q.,R>8,F?0B,H?2L, HLETGOV,?0:`,X;j,X*DRAWS THE COLOR BARt,~,X;, NXTCOLR, NOBALL2,Q>, PDOWN, $PALDEX,2,(>,H?0,$>,?0&PALDEX, BALL2,Q>- PSCREEN -Q>u-PSCREEN-X;(- DOBAR%>2-QBRICKVAL9<-BARP@SCREEN7F-3P-)>Z- FNXTLd-!BARn-NXTLMCADD SCREEN=(x- "DOWN- HDOBAR- SLOWDOWN-QBRICKVAL9- PCOLINUSE-:-X;- SLOWDOWN-Q>-P- WAITQ-R> - HWAIT-:.X;.6X*THIS PART TOGGLES THE WORDS ί ON THE SCREEN..". CHGWORD,.Q>6.P@. Q>4ONOFFJ. PSCREENT. Q>5ONOFF^.PSCREENh.%>r. QSNAPFLAG|. FPUTOFF. WRITE1.QON8. P@SCREEN7.1. HWRITE1. ?0Q.H?0.:.X;. PUTOFF. QOFF8. P@SCREEN7.1/ HPUTOFF/ ?1Q/H?1&/:0/X;:/X;D/#X* SIMPLY CHANGES THE # OFN/$X*FRAMES IN THE SYSTEM AND CYCLESX/!X*THE FRAMECNT BACK TO ZERO TOb/X*AVOID PROBLEMS.l/X;v/ SYSTEM/5/ NOBALL/$>/ &FRAMECNT/ BALL/7/ PFRAMESYS/>/ QHEXCHAR9/,/ O>;;-32/%PFS1;;PUT THE CHARACTER ON SCREEN/:0X; 00X; 0$X*THIS ROUTINE IS RESPONSIBLE FOR*0X*THE FLASHING EDIT CURSOR.40#X*IT ALSO SCANS THE KEYBOARD FOR>0$X*A KEYPRESS EACH VBC.H0"X*DEF. VERTICAL BLANK INTERVAL.R0X;\0 FLASHf0 KEYSCANp0Q>z0P0"VBC0$VBC0HOUT0$>0&VBC0QRND0 PPCOLR00OUT!XITVBK0X;0X;0 VBC 0 XREG 0X;1 KEYSCAN1Q1R>$1H?0.1Q>81PKEYB1:L1?0V1R>6;;< KEY`1FOKj1R>(;;R KEYt1FOK~1R>;;B KEY1FOK1 R>-;;T1FOK1R>';;INVERSE KEY1FOK1R>!;;SPACEBAR1FOK1R>?;;A KEY1FOK1R>:;;D KEY1FOK1R> ;;U KEY2FOK 2R>>;;S KEY2FOK2R>;;C KEY(2FOK22R>=;;G KEY<2FOKF2R> ;;P KEYP2FOKZ2R>;;4 KEYd2FOKn2R>;;5 KEYx2FOK2R>;;6 KEY2FOK2R>;;* KEY2FOK2)Q>;;RETURNS A ZERO IF NO VALID PRESS2 OKPKEY2:2X;2X;2&X*THIS PART OF THE CODE SETS UP THE2!X*POINTERS AND STUFF FOR ɧ2#X*THE DLI IS TO NEEDED TO OBTAIN2#X*AN INDEPENDANT TEXT DISPLAY ON3X*THE BOTTOM OF THE SCREEN.3X;3 SETDLI"3 Q>4DLI,3 PVDSLST63 Q>5DLI@3PVDSLSTJ3Q>T3 PNMIEN^3:h3X;r3#X*THIS IS THE ACTUAL DLI ROUTINE|3X;3DLI353A353 QTXTCOLOR3 $WDWCOLOR3 PWSYNC3 PTEXT3 &HARDWARE373>37394X;4X;4&4X;04"X* THIS SECTION PROVIDES A DISK:4 X* DIRECTORY ON SCREEN FOR D1D4X;N4 DIRECTORYX4 WIPE_DIRb4 QHORZl45;;SAVE HORZ POS.v4Q>4 PHPOSP04 CLOSE 4OPEN ==ASTERISK4C4 GNOTOPEN4 Q>4DLIST24P04 Q>5DLIST24P14 Q>;;BLUE4P;;GR2 BACKGROUND4P;;GR2 BORDER4Q> ;;BRIGHT WHITE5P;;GR2 TEXT 5Q>5PSCRAM;;SCREEN RAM IS AT 5Q>;;$8100 (FOR DIRECTORY)*5 PSCRAM45Q>5 PICBLL9H5Q>R5 PICBLH9\5 Q>4DBUFFf5 PICBAL9p5 Q>5DBUFFz5 PICBAH95Q>5 PICCOM95 ?0 CIOV5C5GEOF5 CHVERT5KX;CONVERT INTERNAL CODES INTO SCREEN BYTES AND MOVE DATA TO SCREEN AREA.5!?05X;5 EOFQ>5P5 ?1Q5R>6F?16 NOTOPEN6 CLOSE $6Q>.6P086Q>`B6P1L67V6 PHORZ`6 PHPOSP0j6 DOPALETTEt6:~6X;66 CHVERT6%>6 Q>4DBUFF6 PPACKPNT6 Q>5DBUFF6PPACKPNT6?0Q@PACKPNT76,6 O>;;-326 P@SCRAM7637)> 7H?07MCADD SCRAM=7:(7X;27<7 WIPE_DIRF7%>P7 'SCRAMZ7Q>d7 PSCRAMn7 ?1Q>x7?0P@SCRAM7737H?07 #SCRAM7 QSCRAM7R>7H?17:7X;7X;7!X*THIS ROUTINE WIPES CLEAN THE7&X*EDIT WINDOW. IT IS STILL RETAINED77X*IN STORAGE ARRAYS, THOUGH, IF THE IS OFF.7"X*THE ROUTINE WIPES IT OFF WITH8%X*THE CURRENT COLOR, SO IT IS ALSO8X*A CHEAP FILL ROUTINE.8X;"8$X*THE SECOND PART OF THIS SECTION,8#X*OF CODE CONTAIN THE ANIMATORS.68X;@8X;J8 SPEED T8X;^8 MRCLEANh8Q>xr8 PDOWN2|8Q>8 PACROSS28Q>B8 PSCRAM8Q>b8 PSCRAM8X;8REFILL%>8 QCOLINUSE8FILLP@SCRAM7838)>8 HFILL8MCADD SCRAM=(9 "DOWN29 HREFILL9 INTERPRET&9:09X;:9X*THE BIG ANIMATOR.D9X;N9X9WHEELHOUSEb9Q>;;CURSOR ISl9;IRRITATINGv9;WHEN ANIMATING9PHPOSP0;;SO, MOVE OFFSCREEN9P9 NOBALL9 KCHKQ9F?29!?39X;9 ?2QSTRIG9H?49!?39?4$FRAMECNT929 (FRAMESYS:H?1 :$>:?1&FRAMECNT : RECALL*: !KCHK4: ?3QHORZ>: PHPOSP0H:Q>R: PFRAMECNT\: BALLf: RECALLp:?5QSTRIG;;WAIT FORz:F?5;;RELEASE:::X;: DOWN2:ACROSS2:X;:X*THE ACTUAL SIZE ANIMATOR:X;:: ANIMATOR: NOBALL:Q>:P: PHPOSP0; ?3Q>; PHEIGHT;Q>%$; PSCREEN.;Q>r8;PSCREENB;X;L; $FRAMECNTV; QFRMADR9`; PSCRAMj;QFRMADR_HI9t; PSCRAM~;X;; ?2%>;?1Q@SCRAM7; P@SCREEN7;3;)>;H?1;X;;MCADD SCREEN=(;MCADD SCRAM=(; "HEIGHT;H?2;X;<X; < REGULATOR<X;< $FRAMECNT(<22< (FRAMESYS<<H?4F<$>P<?4&FRAMECNTZ<X;d< QSTRIGn< FGDAYx< QSTICK0<R>;;RIGHT<H?10< QUICKER<X;?12 LDA STICK0<X; CMP #7<X; BEQ ?12<!?3<?10R> ;;LEFT<H?0< SLOWER<X;?13 LDA STICK0<X; CMP #11<X; BEQ ?13=!?3= ?0Q=R>!;;SPACEBAR"=X;,= FGDAY6= R>7;;>@=H?7J= QUICKERT=!?3^=X;h= ?7R>6;;= PFRAMECNT= BALL= RECALL=?99QSTRIG=F?99= QHORZ= PHPOSP0=:=X;=X;>X*SPEED REGULATOR>X;>&> REGULATOR0>Q>:>PD> ?1QN> RSPEEDX>H?1b>:l>X;v>> QUICKER> QSPEED>,> O>;;-1>H?5;;0 IS MAX SPD>?8Q>;;MINIMUM SPD> ?5PSPEED>Q>>P> DISPLAYSPEED>:> SLOWER> QSPEED?, ? O>;;+1?R> ?H?5*?Q>4?!?5>?X;H?R?DISPLAYSPEED\?EX*THIS ROUTINE CONVERTS THE CURRENT SPEED # INTO EQUIVALENT SCREENf?+X*BYTES IN ORDER TO DISPLAY IT ON SCREENp? QSPEEDz?M>;;ELIM. HI NIBBLE?>? QHEXCHAR9?,? O>;;-32?PFS2;;PUT ON SCREEN? QSPEED?M>;;ELIM. LO NIBBLE?,?W?;;MOVE HI NIBBLE?W?;;TO LO NIBBLE FOR?W?;;USE AS INDEX?W?;;INTO SCRN CHAR.?>@ QHEXCHAR9@,@ O>;;-32$@PFS2;;PUT ON SCREEN.@?0QSTICK08@R>B@H?0L@:V@X;`@&X*THIS PART OF THE CODE FIGURES OUTj@#X*WHAT THE DATA IS FOR REQUESTEDt@&X*FRAME, INCLUDING WITH 3 SHIFTS OF~@"X*2 PIXELS/SHIFT, AND PRINTS IT@X*TO THE EPSON PRINTER.@X;@X;@ ICCOMB@ ICBALD@ ICBAHE@ ICBLLH@ ICBLHI@ ICAX1J@ ICAX2K@ CIOVV@X;A5OPERRQ>S;;PRINTER WON'T OPEN, SO WE'LL OPEN "S:" APPSPEC;;CHANGES SPEC TO S:AQ>A PHPOSP0(A !RETRY2AX;P;;SET OUTPUT SPEC TO "P:"PA &PSPECZA$>;;DEFAULT ISdA&DFLAG;;NO SHIFTSnAR> ;;U KEY WAS PRESSED?xA FRETRYA#DFLAG;;NO, D KEY WAS.A RETRYQ>APAQ>A PSHIFTNUMAQ>`A PNMIENA CLOSE A9OPEN ==PSPEC;;OPEN CHANNEL 1 TO DEVICE IN PSPECAGOPERR;;WON'T OPEN?A WIPEXBA RECALLA INTERPRETB SNAPSHOTBQ>4DATABYTEB PPACKPNT"BQ>5DATABYTE,BPPACKPNT6BDATALOOP$>@B%>JB 'WIDETB 'YREG^B+CHARLOOP%YREG;;THE STUFF STARTING HEREhB&Q@PACKPNT7;;CONVERTS TH DATA INTOrB5;;ATARI SCREEN BYTES|BM>;;BY BREAKING THE DATABV?;;INTO 2 HALVES ANDBV?;;USING THE RESULT ASBV?;;AN INDEX INTO A TABLEB&V?;;WHICH CONTAIN THE SCREEN BYTES.B?B#QHEXCHAR8;;HEXCHAR IS THE TABLEB9PLDIGIT9;;LeftDIGIT and RightDIGIT ARE STORAGE ARRAYSB7BM>B?B QHEXCHAR8B PRDIGIT9B2C #YREGC #WIDEC QWIDE&CR>0C HCHARLOOP:CX;DCX;NOW THE EXTRA (SHIFT) BYTENCX;XCQ>bC PWIDElC &XREGvCACV?CV?;;DIVIDE BY 4C>C0C QSHFBITE9C5CM>CV?CV?CV?CV?C?C QHEXCHAR8D PLXDIG9 D7DM> D?*D QHEXCHAR84D PRXDIG9>D $XREGHD(>xRD HCHARLOOP\DX;fD"X;HERE, PRINTOUT AND THEN AFTERpDX;THAT WE START SHIFTING.zDX;DQ>;;THE DATA IS 4 X 30D PDOWNDQ>D PWIDED$>;;CHANNEL 1DQ>4PHRASE1D PICBAL9DQ>5PHRASE1D PICBAH9DQ> D PICBLL9DQ>D PICBLH9E %FRAMECNTE QHEXCHAR8E PFRNUM$E %SHIFTNUM.E QHEXCHAR88E PSHNUMBEQ> ;;PUT CHARLE PICCOM9VE CIOV`EQ>4PHRASE2jE PICBAL9tEQ>5PHRASE2~E PICBAH9EQ> E PICCOM9E CIOVEQ>E PICBLL9E Q>4PBUFFE PICBAL9E Q>5PBUFFE PICBAH9E%>E NXTCHRE QLDIGIT8F PPBUFF F QRDIGIT8F PPBUFFF3(FQ> ;;SPACE2F PPBUFF ;;PUTCHARZF PICCOM9dF CIOVnF7xF?F "WIDEF HNXTCHRFQ>F PWIDEFQ;;CHECK FOR KEYPRESSFR>FF?99;;KEEP GOINGF!?98;;EXITF?99CF5FV?FV?;;DIVIDE BY 4F?G1G QLXDIG8G PPBUFF"G QRXDIG8,G PPBUFF6G Q>;;EOL@G PPBUFFJGQ> ;;PUTCHARTG PICCOM9^G CIOVhG7rG?|G "DOWNG HNXTCHRGX;GX;HERE, DONE PRINTING ONCEGQPSPEC;;IS OUTPUT GOINGGR>S;;TO SCREEN?G H?97;;NO.G/ HOLD;;YES, SO WE STOP UNTIL KEY IS PRESSEDG?97QDFLAG;;<>0=DO SHIFTSGF?98;;0=NO SHIFTSG #SHIFTNUMG QSHIFTNUMGR>G HSHIFTERH ?98Q>H PNMIENH CLOSE &H QPSPEC0HR>S;;IF WE WENT TO SCREEN:H/H?96;;WE MUST RESTORE DISPLAY LIST AND PMG.DH7;;POP THE STACKNH7;;AND RESTARTXH!INIT;;IS EASIESTbH?96:;;NORMAL EXIT.lHvHSHIFTERQ>H PDOWNHQ>H PSHFCNTH%>H 'YREGH$>H ?0$YREGH,HWDATABYTE9H2HWDATABYTE9H2HWDATABYTE9I2 IWDATABYTE9IC I>*I WSHFBITE94I "SHFCNT>IH?0HIQ>RI PSHFCNT\I3fI)>pIF?1zICIT?IT?I PYREGI!?0I?1!DATALOOPI WIPEXBII$>IAI?0PSHFBITE9I PRXDIG9I PLXDIG9I2J(>JH?0J:$JX;.J8JX;BJ HOLDQ>LJPVJ ?0Q`JR>jJF?0tJQ>~JPJ:JX;JPSPEC AP:AJ PHRASE1 ===AFRAME# AJFRNUM =JPHRASE2 ASHIFT# AJSHNUM =A A=JX;J DFLAGJ YREGJ PBUFFJSHFBITEK LXDIG K RXDIGKX;KX;(KX;2K#X*THIS IS THE COPIER SECTION. ITKPK ?2QKR>;;1 KEYK FCOPYKR>!;;SPACEKF?4KR>KF?2K!?1K?4QFRAMECNTKRFROMFRAMEKF?5L NOBALLL?5#FRAMECNTL QFRAMECNT"L RFRAMESYS,LH?36LQ>@L PFRAMECNTJL?3PTOFRAMETL BALL^LQ>hLPrL!?2|LX;L?1QFROMFRAMEL PFRAMECNTL RTOFRAMELF?6L NOBALLL?6QTOFRAMEL PFRAMECNTL BALLL RECALLLQ>LPL:LX;MCOPYMX*FIRST, RESTORE THE FRAME#M"X*WHICH IS THE FRAME.&MQFROMFRAME0M>;;RESTORED.:MX;DMX*NOW SAVE THE "" FRAME#NM QFRAMECNTXMPTOFRAME;;SAVED.bM &FRAMECNTlM' RECALL;;CALL UP THE "" DISPLAYvMX;M X*NOW RESTORE THE "" FRAME#M QTOFRAMEM>M &FRAMECNTM INTERPRETM&X* MAKES THE CHANGE FOR USMX;M SNAPSHOTM)X*AND RECORDS IT IN THE ARRAYMX;M!?1M:MX;NX; NX;N X*GETSPEC IS THE ROUTINE THAT NX*GETS THE FILESPEC FROM THE*N"X*USER. ALSO THE WRITE ROUTINES4N$X*AND THE READ ROUTINES ARE HERE.>NX;HNX;RNX;\NfNX;pN GETSPECzN%>NQ>N?0PN38;;WIPE OUT THEN1;;FILESPECNH?0;;ON SCREENNX;NNQ>N PN3NOPEN ==KEYSPECN%>N 'YREGN$> ;;CHANNEL 2NQ>;;MAX RECORDO PICBLL9OQ>O PICBLH9$O Q>4CHBUFF.O PICBAL98O Q>5CHBUFFBO PICBAH9LO?0Q>;;GET CHARVO PICCOM9`O CIOVjOX;tOX;~O QCHBUFFOR>;;RETURNOF?1OR>~;;DEL/BACKSPOF?2OR>0OG?0;;NOT ACCEPTABLEOR>[OI?0;;NOT ACCEPTABLEO$X;HERE IT MAY BE ACCEPTABLE INPUTOR>:OGIOK;;OK, MUST BE 0-9OR>AP$G?0;;NOT ACCEPTABLE, MUST BE :-@ PX;HERE, INPUT OK, SO DISPLAYP X;AND PUT INTO FILENAME ARRAYP IOK%YREG(PPFILENAME82P; FPPN38;;PUT CHAR ON SCREENPP #YREGZP QYREGdPR> nPH?6xPQ> P PYREGP ?6Q>P %YREGP PN38P!?0P ?2%YREGPX; LDA #0PX; STA N3+15,YP)>PF?0PQ>P PN38P "YREGQ %YREGQQ>Q PN38"Q!?0,Q ?1%YREG6QPFILENAME8@QQ>JQ PN38TQ:^QX;hQrQX;|Q RITEFILEQQFILENAMEQR>QF?1QQ>`Q PNMIENQ CLOSE QOPEN ==FILENAMEQG?3;;WON'T OPEN?Q%>Q 'YREGQ?0QARRTAB8Q PICBAL9QQARRTABHI8R PICBAH9R!Q>y;;READ 120 BYTES AT A TIMER PICBLL9&RQ>0R PICBLH9:RQ> ;;PUT RECORDDR PICCOM9NR CIOVXR #YREGbR %YREGlR)>;;6 FRAMES PLUS PALETTEvRH?0R?3CLOSE R ?1Q>R PNMIENR:RX;RRX;R READFILERQFILENAMERR>RF?1RQ>`R PNMIENS CLOSE  SOPEN ==FILENAMESG?2 S%>*S 'YREG4S?0QARRTAB8>S PICBAL9HSQARRTABHI8RS PICBAH9\SQ>yfS PICBLL9pSQ>zS PICBLH9SQ>;;GET RECORDS PICCOM9S CIOVS #YREGS %YREGS)>;;6 FRAMES & PALETTESH?0S DOPALETTES NUMBERSS ROTATORS?2CLOSE S ?1Q>S PNMIENT:TX;T$T ROTATOR.T!X*THE ROTATOR FILLS THE FRAMES8TX*WITH THE NEWLY GOTTEN DATABTX;LT NOBALLVT$>;;START WITH FRAME0`T &FRAMECNTjT?0 RECALLtT BALL~T INTERPRETT GDLY;;DELAYT NOBALLT #FRAMECNTT $FRAMECNTT(>TH?0T NOBALLT$>T &FRAMECNTT RECALLT BALLT:UX; UGDLYU%>U?11(UH?12U:U ?0QC19UP9U2U(>VH?0V QFRAMESYSV$R>;;JUST CHECKING. IF THERE ARE"VGSIX;;LESS THAN 4 FRAMES,VR>;;OR MORE THAN 6, THEN6VISIX;;WE CORRECT IT.@V!?1JV SIXQ>TV?1 SYSTEM^V:hVX;rV|V"X*THIS ROUTINE, ̲ MOVES THEV"X*CONTROL-T CHARACTER AROUND TOV!X*SHOW WHICH COLOR REGISTER ISVX*BE AFFECTED OR USEDVX;VX;V BALL2V?0 BALLMATHV%>VQ>T;;CONTROL-T IS THE BALLV P@SCREEN7V:VX;VX* ERASES THE BALLW NOBALL2W $PALDEXW BALLMATH&WQ>;;BLANK ERASES BALL0W%>:W P@SCREEN7DWRTSNWX;XWX;bWlW BALLMATHvWQNUMTABLE_HI9WPSCREENWQNUMTABLE9W,W/O>;;PROVIDE SPACE BETWEEN #'S AND THE BALLWD?0W#SCREENW?0PSCREENW:WX;WX;W&X*HERE ARE NEARLY ALL THE VARIABLESWX*AND TABLES IN THE PROGRAM.WX;X BOXDATA X =====X ===== X =====*X =====4X =====>X =====HX =====RX =====\X =====fX =====pX =====zX =====X =====X =====X =====X =====X =====X =====X =====X =====X =====X =====X =====X =====X =====Y =====Y =====Y =====$Y =====.Y =====8Y =====BY =====LYX;VY BRICKMAP`Y B=F=J=N;;ROW0jY ===;;ROW1tY ===;;ROW2~Y "=&=*=.;;ROW3Y ===;;ROW4Y b=f=j=n;;ROW5Y == =;;ROW6Y ===;;ROW7Y B=F=J=N;;ROW8Y ===;;ROW9Y ===;;ROW10Y "=&=*=.;;ROW11Y ===;;ROW12Y b=f=j=n;;ROW13Y == =;;ROW14Y ===;;ROW15Z B=F=J=N;;ROW16 Z ===;;ROW17Z ===;;ROW18Z "=&=*=.;;ROW19(Z ===;;ROW202Z b=f=j=n;;ROW21[ B=F=J=N[ R=V=Z=^[ b=f=j=n[ r=v=z=~\ ===\ ==\X;&\ PPOSHI 0\X;:\DATABYTExD\STORAGEN\ KEY X\COLINUSE b\FRMADR /====8=l\FRMADR_HI b=g=l=r=b=gv\BLOCTN = =\===\BLOCTN_HI c=i=n=s=c=i\NUMTABLE\NUMTABLE_HI\SHIFTNUM\ ROW \ COL \ RBORDR x\ LBORDR 8\ HORZ 8\FRAMECNT \BRICKNUM \MASK =0= =\TXTCOLOR  ]WDWCOLOR  ]FROMFRAME]TOFRAME ]SNAPFLAG *]BITENUM 4]BRICKVAL =U==>] PALDEX H]OFF AOFFAR] ON AON A\]!ARRTAB;;6 FRAMES + PALETTEf]#ARRTABHI;;6 FRAMES + PALETTEp] SHFCNT z] BALLDATA] <] ] ] ] ] <]NOBALLDATA] =====]ASTERISK AD:*.*A] WIDE] LDIGITx] RDIGITx]FILENAME AD:ABCDEFGHA^^ CHBUFF^ DBUFF$^KEYSPEC AK:A.^;HEXCHAR 0=1=2=3=4=5=6=7=8=9=A=B=C=D=E=F8^DEC1B^X;L^ NANCYCV^ANGELANANCYx`^NORTONANGELAxj^ALPERTNORTONxt^BAGGINSALPERTx~^RAFFBAGGINSx^X;^BAKRAFFx^C1BAK^ C2C1^ C3C2^FRAMESYSC3^X;^X;^X;^`^DISPLAY_LIST^ p=p=p=N==a_? =================== _? ===================_? ===================_? ===================(_ ========2_ N==p<_? ===================F_? ===================P_* ============Z_ Bd_LMS ======n_ A==`x_X;_X;_ DLIST2_ p=p=p_ B_ =_! =========_! =========_ =_ A==_X;_X;