; ;FILL 'ER UP! II ; ;BY TOM HUDSON ; ; ;ALPHABETIC CONSTANTS ; CA = 'A'-$20 CB = 'B'-$20 CC = 'C'-$20 CD = 'D'-$20 CE = 'E'-$20 CF = 'F'-$20 CG = 'G'-$20 CH = 'H'-$20 CI = 'I'-$20 CJ = 'J'-$20 CK = 'K'-$20 CL = 'L'-$20 CM = 'M'-$20 CN = 'N'-$20 CO = 'O'-$20 CP = 'P'-$20 CQ = 'Q'-$20 CR = 'R'-$20 CS = 'S'-$20 CT = 'T'-$20 CU = 'U'-$20 CV = 'V'-$20 CW = 'W'-$20 CX = 'X'-$20 CY = 'Y'-$20 CZ = 'Z'-$20 CCOL = ':'-$20 ; ;PAGE ZERO ITEMS ; ORG $80 LO DS 1 HI DS 1 PLOTX DS 1 PLOTY DS 1 LOHLD DS 1 HIHLD DS 1 SMTIM DS 1 MOVTIM DS 1 TIMER DS 1 DEADFG DS 1 HSHORT DS 1 PX DS 1 PY DS 1 XI DS 1 YI DS 1 DESTNM DS 1 SHFLIP DS 1 DESTLO DS 1 DESTHI DS 1 SHTIM1 DS 1 SHTIM2 DS 1 SHTIMI DS 1 SHORTN DS 1 DIRSAV DS 1 HOLDSX DS 1 VBXHLD DS 1 CPYST DS 1 CPYCNT DS 1 ; ;MISCELLANEOUS MEMORY USAGE ; PMAREA = $1000 MISSLS = PMAREA+384 PL0 = PMAREA+512 PL1 = PMAREA+640 PL2 = PMAREA+768 PL3 = PMAREA+896 DISP = $3000 ; ;SYSTEM EQUATES ; KEY = $2FC CONSOL = $D01F PMBASE = $D407 RANDOM = $D20A SETVBV = $E45C XITVBV = $E45F COLBK = $2C8 COLPF0 = $2C4 COLPF1 = $2C5 COLPF2 = $2C6 COLPF3 = $2C7 AUDC1 = $D201 AUDC2 = $D203 AUDC3 = $D205 AUDC4 = $D207 AUDF1 = $D200 AUDF2 = $D202 AUDF3 = $D204 AUDF4 = $D206 AUDCTL = $D208 PRIOR = $026F ATTRAC = $4D DMACTL = $22F DLISTL = $230 GRACTL = $D01D NMIEN = $D40E COLPM0 = $2C0 COLPM1 = $2C1 COLPM2 = $2C2 COLPM3 = $2C3 HPOSP0 = $D000 HPOSP1 = $D001 HPOSP2 = $D002 HITCLR = $D01E P0PF = $D004 P1PL = $D00D STICK = $278 STRIG = $284 ORG $6000 ;ASSEMBLE ADDR. LOC $1400 ;ACTUAL ADDRESS ; ;RELOCATE PROGRAM (DISK VERSION ONLY) ; MOVEPG LDA #$25 ;FOR DISK ONLY, STA HI ;THIS SECTION LDA #$14 ;MOVES THE STA DESTHI ;PROGRAM TO LDA #0 ;ITS OPERATIONAL STA LO ;MEMORY LOCATION STA DESTLO ;OF $1400. LDY #0 COPYLP LDA (LO),Y STA (DESTLO),Y INC LO INC DESTLO BNE INCEND INC HI INC DESTHI INCEND LDA DESTHI CMP #DIR/256 BNE COPYLP LDA DESTLO CMP #DIR&255 BNE COPYLP JMP FILLUP ; ;MAIN PROGRAM STARTS HERE ; FILLUP LDA #$00 ;TURN OFF... STA DMACTL ;DMA STA GRACTL ;GRAPHICS STA COLBK ;BLACK BACKGND LDA #$74 ;BLUE STA COLPF0 ;COLOR0 LDA #$C4 ;GREEN STA COLPF1 ;COLOR1 LDA #$0A ;WHITE STA COLPF2 ;COLOR2 LDA #$34 ;RED STA COLPF3 ;COLOR3 LDA #TITLDL&255 ;SETUP... STA DLISTL ;TITLE... LDA #TITLDL/256 ;DISPLAY... STA DLISTL+1 ;LIST! LDA #$2E ;TURN ON... STA DMACTL ;DMA LDA #3 ;TURN ON... STA GRACTL ;GRAPHICS JMP CKSTRT ;WAIT FOR START START JSR $E465 ;INIT SOUNDS LDA #0 ;CLEAR OUT LDX #127 ;ALL ZERO PAGE CLPG0 STA $80,X ;USER MEMORY DEX BPL CLPG0 STA SHORTF ;STOP SHORTS STA SHORTF+1 STA SHORTF+2 STA SHORTF+3 LDA #$11 ;P/M PRIORITY STA PRIOR LDA #1 ;DON'T SHOW STA SHOOFF ;PLAYER OR STAR STA FILLON ;WE STILL MUST JSR PMCLR ;CLEAR P/M AREA LDA #64 ;AND SET UP THE STA STRHGT ;STAR'S HEIGHT LDA #128 ;AND STA STRHOR ;HORIZONTAL POSITION LDA #$D0 ;NOW LET'S LDX #4 ;ZERO OUT ZSCLP STA SCOLIN+4,X ;THE SCORE STA SCOLIN+15,X ;AREAS! DEX BPL ZSCLP LDX #5 ZSCLP2 STA SCOLN2+12,X DEX BPL ZSCLP2 LDA #0 ;THESE ITEMS STA FILLON ;MUST BE SET STA DEADFG ;TO ZERO ON STA NOCCHG ;STARTUP OR STA HITCLR ;ELSE WE'LL STA DMACTL ;WIND UP WITH STA NMIEN ;NASTY THINGS STA HASDRN ;HAPPENING! STA HSHORT STA AUDCTL LDX #5 ;LET'S ZERO CMSLP STA SCORE,X ;OUT THE SCORE DEX ;COUNTER... BPL CMSLP STA LEVEL ;AND LEVEL #! LDA #3 ;WE START WITH STA LIVES ;3 LIVES ORA #$90 ;AND PUT THEM IN STA SCOLN2+19 ;THE SCORE LINE LDA #$0A ;NEXT WE SET UP STA COLPF0 ;THE COLORS WE LDA #$24 ;WANT TO USE. STA COLPF1 LDA #$94 STA COLPF2 LDA #$C4 STA COLPF3 LDA #0 STA COLBK LDA #$76 STA COLPM1 LDA #$3F STA COLPM2 STA COLPM3 LDA #$34 STA COLPM0 LDA #DLIST&255 ;WE'D BETTER TELL STA DLISTL ;THE COMPUTER WHERE LDA #DLIST/256 ;OUR DISPLAY LIST STA DLISTL+1 ;IS LOCATED! LDY #INTRPT&255 ;TELL WHERE THE LDX #INTRPT/256 ;VERTICAL BLANK LDA #6 ;INTERRUPT IS JSR SETVBV ;AND SET IT! LDA #PMAREA/256 ;HERE'S OUR P/M STA PMBASE ;GRAPHICS AREA! LDA #$2E ;TURN ON THE STA DMACTL ;DMA CONTROL LDA #$3 ;AND STA GRACTL ;GRAPHICS CONTROL! LDA #$40 ;ENABLE VBI STA NMIEN JMP CLRDSP PMCLR LDA #0 ;CLEAR OUT LDX #127 ;THE P/M AREA: PMICLR STA MISSLS,X ;MISSILES, STA PL0,X ;PLAYER 0, STA PL1,X ;PLAYER 1, STA PL2,X ;PLAYER 2, STA PL3,X ;AND PLAYER 3! DEX BNE PMICLR ;LOOP UNTIL DONE RETURN RTS ;WE'RE DONE! ; ;PLOT ADDRESS CALCULATOR ; ;MULTIPLY PLOTY BY 40, THEN CALCULATE ADDRESS ;OF THE SCREEN MEMORY TO BE ALTERED. ; PLOTCL LDA PLOTY ASL A STA LO LDA #0 STA HI ;*2 ASL LO ROL HI ;*4 ASL LO LDA LO STA LOHLD ROL HI ;*8 LDA HI STA HIHLD ASL LO ROL HI ;*16 ASL LO ROL HI ;*32 LDA LO CLC ADC LOHLD STA LO LDA HI ADC HIHLD STA HI ;+*8=*40 LDA #DISP&255 CLC ADC LO STA LO LDA #DISP/256 ADC HI STA HI ;+DISPLAY START LDA PLOTX ;MASK X POSITION AND #3 TAX LDA PLOTX LSR A LSR A CLC ADC LO STA LO LDA HI ADC #0 ;LO & HI NOW HOLD STA HI ;THE ADDRESS! RTS ;EXIT! ; ;CLEAR THE DISPLAY MEMORY ; CLRDSP LDX #0 ;THIS ROUTINE WILL STX PLOTX ;CLEAR THE SCREEN RAM. LDX #0 ;IT GETS THE ADDRESS DLOOP2 STX PLOTY ;OF THE BEGINNING OF JSR PLOTCL ;EACH GR.7 LINE LDX PLOTY ;THEN ZEROES OUT LDA #$00 ;EACH OF THE LDY #39 ;40 BYTES (0-39) DLOOP3 STA (LO),Y ;IN THE LINE. DEY BPL DLOOP3 INX CPX #86 BNE DLOOP2 ; ;DRAW THE COLOR 1 BORDER ; LDA #3 ;THIS ROUTINE STA BORNUM ;DRAWS THE 4 LINES BORDER LDX BORNUM ;THAT MAKE UP THE LDA BXSTRT,X ;WHITE GR.7 BORDER STA PLOTX ;ON THE SCREEN. LDA BYSTRT,X STA PLOTY LDA BXINC,X STA BDINCX LDA BYINC,X STA BDINCY LDA BORCNT,X STA BDCNT DRAWLN JSR PLOTCL LDA COLOR1,X LDY #0 ORA (LO),Y STA (LO),Y LDA PLOTX CLC ADC BDINCX STA PLOTX LDA PLOTY CLC ADC BDINCY STA PLOTY DEC BDCNT BNE DRAWLN DEC BORNUM BPL BORDER ; ;THIS SECTION STARTS OFF EACH LEVEL ; LDA #80 ;POSITION THE STA PX ;PLAYER LDA #84 STA PY LDA LEVEL ;INCREMENT THE CLC ;LEVEL NUMBER ADC #1 STA LOWK LDA #0 ;ZERO OUT STA SHORTF STA SHORTF+1 STA SHORTF+2 STA SHORTF+3 STA CURLO ;CURRENT TALLY STA CURHI ;WORK AREA STA HIWK LDA #$FF ;TELL DECIMAL CONVERTER STA SLLOC ;NOT TO PLACE RESULT JSR CNVDEC ;CONVERT LEVEL # LDA DECIMAL+1 ;GET DECIMAL LEVEL # ORA #$90 ;ADD COLOR STA SCOLN2+3 ;PUT IN SCORE LINE LDA DECIMAL ;SAME FOR 2ND ORA #$90 ;LEVEL # STA SCOLN2+4 ;DIGIT LDX LEVEL ;GET THIS LEVEL'S LDA TGTLO,X ;PARAMETERS STA LOWK LDA TGTHI,X STA HIWK LDA STARSP,X STA STRSPD LDA SHTIME,X STA SHTIMI STA SHTIM2 LDA #4 STA SLLOC JSR CNVDEC ;SHOW TARGET AMOUNT ; ;CLEAR OUT THE TRACKING TABLE THAT ;REMEMBERS WHERE THE PLAYER MOVED ; CLRTRK LDA #0 STA SHOOFF TAX CLRTLP STA DIR,X ;CLEAR DIRECTION STA LGTH,X ;AND LENGTH ENTRIES DEX BNE CLRTLP STA MOVIX ;CLEAR MOVEMENT INDEX STA DRAWFG ;AND DRAW FLAG GETSTK LDA PAUSE ;GAME PAUSED? BNE GETSTK ;YES, LOOP AND WAIT. LDA #$FD ;DO 'WARBLE' SOUND STA AUDF1 ;USING SOUND LDA #$FE ;CHANNELS 1-3 STA AUDF2 LDA #$FF STA AUDF3 LDA #$A3 STA AUDC1 STA AUDC2 STA AUDC3 LDA #0 ;NO ATTRACT MODE! STA ATTRAC LDA HSHORT ;DID SHORT HIT US? BNE JCRSH ;YES! WE'RE DEAD! LDA DEADFG ;DID STAR HIT US? BEQ ALIVE ;NO! LDX LEVEL ;IT HIT US-- LDA KILLFG,X ;UNCONDITIONAL KILL? BNE JCRSH ;YES! WE'RE DEAD!!! LDA PX ;NO, IF WE'RE ON A STA PLOTX ;WHITE LINE (COLOR 1) LDA PY ;THEN WE'RE ALIVE! STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y CMP COLOR1,X ;ON COLOR 1? BEQ ALIVE ;YES (WHEW!) JCRSH JMP CRASH ;GO KILL PLAYER. ALIVE LDA MOVTIM ;PLAYER MOVING? BEQ GOTSTK ;YES--GET STICK. JMP MOVSTR ;NO, MOVE STAR. JGSTK JMP GETSTK ;GO GET STICK GOTSTK LDA #4 ;SET UP THE STA MOVTIM ;MOVEMENT TIMER LDA STICK ;GET THE STICK STA STKHLD ;AND SAVE IT TAX ;THEN LOOK UP LDA XD,X ;X DIRECTION CLC ADC XD,X STA XI ;AND LDA YD,X ;Y DIRECTION CLC ADC YD,X STA YI ORA XI ;ANY MOVEMENT? BEQ JGSTK ;NO, TRY AGAIN. LDA PX ;INCREMENT CLC ;PLAYER X ADC XI ;POSITION AND STA CKX ;HOLD IT... CMP #159 ;OFFSCREEN? BCS JGSTK ;YES! STA PLOTX ;NO, SAVE IT SEC SBC XD,X STA PXWC LDA PY ;INCREMENT CLC ;PLAYER Y ADC YI ;POSITION AND STA CKY ;HOLD IT... CMP #85 ;OFFSCREEN? BCS JGSTK ;YES! STA PLOTY ;NO, SAVE IT SEC SBC YD,X STA PYWC JSR PLOTCL ;LOCATE NEW PLAYER LDY #0 ;POSITION. LDA BITSON,X AND (LO),Y STA CKV ;SAVE THE 'LOCATE'. STX CKVX LDA PXWC ;CHECK THE STA PLOTX ;POSITION NEXT LDA PYWC ;TO THE ONE WE'RE STA PLOTY ;NOW IN... JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y PHA ;AND SAVE IT! LDA STRIG ;TRIGGER PRESSED? BNE NOTDRN ;NO! PLA ;OK TO DRAW? BNE JGS ;NO!! JMP DRAWIN ;YES, GO DRAW. NOTDRN PLA ;NOT DRAWING--ARE WE CMP COLOR1,X ;ON COLOR 1? BNE JGS ;NO, TRY AGAIN LDA CKV ;ARE WE MOVING LDX CKVX ;ONTO ANOTHER CMP COLOR1,X ;COLOR 1? BNE JGS ;NO! TRY AGAIN. LDA CKX ;ALL'S WELL... STA PX ;UPDATE PX LDA CKY ;AND STA PY ;PY, JGS JMP GETSTK ;GET STICK. ; ;THIS ROUTINE HANDLES THE DRAW FUNCTION. ; DRAWIN LDA DRAWFG ;ALREADY DRAWING? BNE DRAWOK ;YES! STA MOVIX ;NO, THIS IS THE LDA STKHLD ;FIRST TIME--SET UP STA DIR ;INITIAL DRAWING LDA #1 ;VARIABLES. STA DRAWFG STA HASDRN LDA PX STA INIX STA MINX STA MAXX LDA PY STA INIY STA MINY STA MAXY DRAWOK LDA CKV ;DID WE LDX CKVX ;RUN INTO ANOTHER CMP COLOR2,X ;COLOR 2? BNE NOCRSH ;NO, WE'RE OK. JMP CRASH ;CRRAAASSSHHH! NOCRSH LDX MOVIX ;UPDATE THE LDA STKHLD ;TRACKING CMP DIR,X ;TABLES WITH BEQ SAMDIR ;DIRECTION INC MOVIX ;INFORMATION. INX STA DIR,X LDA #0 STA LGTH,X SAMDIR INC LGTH,X LDA #3 STA BDCNT LDA PX ;NOW PLOT THE STA PLOTX ;LINE WE'RE LDA PY ;DRAWING... STA PLOTY CCLOOP JSR PLOTCL LDY #0 LDA (LO),Y AND BITOFF,X ORA COLOR2,X ;IN COLOR 2. STA (LO),Y DEC BDCNT BEQ CKCOLR LDY MOVIX LDX DIR,Y LDA XD,X CLC ADC PLOTX STA PLOTX LDA YD,X CLC ADC PLOTY STA PLOTY JMP CCLOOP CKCOLR LDA PLOTX ;UPDATE X POS. STA PX CMP MAXX ;CHECK MINIMUM BCC TMINX ;AND MAXIMUM STA MAXX ;X & Y VALUES JMP CHKYMM ;AND UPDATE IF TMINX CMP MINX ;NECESSARY BCS CHKYMM STA MINX CHKYMM LDA PLOTY STA PY CMP MAXY BCC TMINY STA MAXY JMP ENDMM TMINY CMP MINY BCS ENDMM STA MINY ENDMM LDX CKVX ;DID WE DRAW LDA CKV ;INTO CMP COLOR1,X ;COLOR 1? BEQ ENDLIN ;YES! END OF LINE! JMP GETSTK ;NO, GO GET STICK. ENDLIN LDA #0 ;WE AREN'T STA DRAWFG ;DRAWING ANYMORE JSR SEARCH ;SEARCH AND FILL!! LDA CURLO ;GET CURRENT VALUE STA LOWK LDA CURHI STA HIWK LDA #15 ;PUT AT 15TH STA SLLOC ;POS. IN SCOLIN JSR CNVDEC ;CONVERT TO DECIMAL LDA #1 ;NOW REDRAW THE STA RDRCOL ;PLAYER'S PATH IN JSR REDRAW ;COLOR 1 (WHITE). LDX LEVEL ;CHECK TO SEE LDA CURLO ;IF WE'VE HIT SEC ;THE TARGET. SBC TGTLO,X STA LOWK LDA CURHI SBC TGTHI,X STA HIWK ;HIT TARGET? BPL NEWLVL ;YES--NEW LEVEL! JMP CLRTRK ;NO, GO CLEAR TRACK NEWLVL LDA LEVEL ;IF LEVEL < 15 CMP #15 ;THEN BEQ NOLINC ;INCREMENT INC LEVEL ;LEVEL ; ;INCREASE SCORE HERE ; NOLINC ASL LOWK ;SCORE INC = ROL HIWK ;TGT-CUR * 2 LDA #$FF ;DON'T PLACE STA SLLOC ;THE RESULT! JSR CNVDEC ;CONVERT TO DECIMAL LDX #5 ;AND ADD TO SCORE LDY #0 SCOLP LDA DECIMAL,Y CLC ADC SCORE,X CMP #10 BMI NOCARY SEC SBC #10 STA SCORE,X INC SCORE-1,X JMP NXSPOS NOCARY STA SCORE,X NXSPOS INY DEX BPL SCOLP LDX #5 ;NOW PLACE THE SHSLP LDA SCORE,X ;SCORE IN ORA #$D0 ;SCORE LINE #2 STA SCOLN2+12,X DEX BPL SHSLP LDA #1 ;STOP VBI FOR STA FILLON ;A MOMENT STA SHOOFF JSR PMCLR ;CLEAR P/M AREA LDA #64 ;INITIALIZE STA STRHGT ;THE LDA #128 ;STAR STA STRHOR ;POSITION LDA #0 ;VBI ON AGAIN STA FILLON JMP CLRDSP ;GO CLEAR DISPLAY! ; ;THIS SECTION HANDLES PLAYER'S DEATH ; CRASH LDA #0 ;NO WARBLE SOUND STA AUDC1 STA AUDC2 STA AUDC3 LDA #1 ;NO PLAYER COLOR STA NOCCHG ;CHANGE IN VBI LDA #15 ;SET BRIGHTNESS OF STA DEDBRT ;PLAYER DEATH. TIMRST LDA #5 ;SET DEATH TIMER STA TIMER ;TO 5 JIFFIES. DEADCC LDA DEDBRT ;MOVE BRIGHTNESS STA AUDC1 ;TO DEATH SOUND VOLUME LDA RANDOM ;GET RANDOM AND #$1F ;DEATH SOUND STA AUDF1 ;FREQUENCY LDA RANDOM ;GET RANDOM AND #$F0 ;DEATH COLOR ORA DEDBRT ;ADD BRITE STA COLPF1 ;PUT IN LINE COLOR STA COLPM1 ;AND PLAYER COLOR LDA TIMER ;TIMER DONE YET? BNE DEADCC ;NO, GO CHANGE COLOR. DEC DEDBRT ;DECREMENT BRIGHTNESS BPL TIMRST ;IF MORE, GO DO IT. DEC LIVES ;1 LESS LIFE LDA LIVES ;GET # LIVES ORA #$90 ;ADD COLOR STA SCOLN2+19 ;AND DISPLAY! CMP #$90 ;ZERO LIVES? BNE NOTDED ;NO! LDA #GOMSG&255 ;WE'RE COMPLETELY STA SCDL ;DEAD, SHOW LDA #GOMSG/256 ;'GAME OVER' STA SCDL+1 ;MESSAGE CKSTRT LDA CONSOL ;WAIT FOR START AND #1 ;KEY... BNE CKSTRT ;NOT PRESSED--LOOP. RELEAS LDA CONSOL ;KEY PRESSED, NOW AND #1 ;WAIT FOR RELEASE! BEQ RELEAS ;NOT RELEASED YET! LDA #SCOLIN&255 ;PUT SCORE STA SCDL ;LINE BACK LDA #SCOLIN/256 ;IN DISPLAY STA SCDL+1 ;LIST... JMP START ;AND START GAME! ; ;THIS SECTION PLACES PLAYER AT A RANDOM ;LOCATION IF THERE ARE MORE LIVES LEFT. ; NOTDED LDA #1 ;DON'T SHOW STA SHOOFF ;PLAYER NEWLOC LDA RANDOM ;GET RANDOM X AND #$FE ;MUST BE EVEN CMP #159 ;AND ON SCREEN BCS NEWLOC STA PLOTX CSHY LDA RANDOM ;GET RANDOM Y AND #$7E ;MUST BE EVEN CMP #85 ;AND ON SCREEN BCS CSHY STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y ;IS LOCATION ON CMP COLOR1,X ;COLOR 1? BNE NEWLOC ;NO, TRY AGAIN. JSR PMCLR ;IT'S OK, CLEAR P/M LDA PLOTX ;SAVE STA PX ;THE PLAYER'S LDA PLOTY ;NEW STA PY ;COORDINATES. LDA #0 ;REDRAW THE STA RDRCOL ;PLAYER'S TRACK LDA HASDRN ;IN COLOR 0 BEQ JCTRK JSR REDRAW LDA INIX ;THIS PART IS STA PLOTX ;NEEDED TO PLOT LDA INIY ;A COLOR 1 BLOCK STA PLOTY ;AT THE START OF JSR PLOTCL ;THE PLAYER'S TRACK LDY #0 ;AFTER IT IS ERASED. LDA BITOFF,X ;(NOBODY'S PERFECT!) AND (LO),Y ORA COLOR1,X STA (LO),Y JCTRK LDA #$24 ;RESTORE DRAW LINE STA COLPF1 ;COLOR LDA #0 STA NOCCHG STA HITCLR STA DEADFG STA HSHORT JMP CLRTRK ;AND GO START NEW TRACK. ; ;THIS ROUTINE USES THE TRACKING TABLES, ;DIR AND LGTH, TO REDRAW THE LINE THE ;PLAYER DREW. RDRCOL INDICATES THE COLOR ;DESIRED. ; REDRAW LDA INIX STA REX LDA INIY STA REY LDA #0 STA X REDXLP LDX X LDA DIR,X STA REDIR LDA LGTH,X STA LGTHY LDA #1 STA Y REDYLP LDA #3 STA TIMES TIMES3 LDA REX STA PLOTX LDA REY STA PLOTY JSR PLOTCL LDY #0 LDA RDRCOL BNE RDC1 LDA BITOFF,X AND (LO),Y STA (LO),Y JMP SETNRP ENDRD LDA #0 STA DRAWFG RTS RDC1 LDA BITOFF,X AND (LO),Y ORA COLOR1,X STA (LO),Y SETNRP DEC TIMES BEQ NXTY LDX REDIR LDA REX CLC ADC XD,X STA REX LDA REY CLC ADC YD,X STA REY JMP TIMES3 NXTY INC Y LDA Y CMP LGTHY BEQ JNRD BCS NXTX JNRD JMP REDYLP NXTX INC X LDA X CMP MOVIX BEQ JRXLP BCS ENDRD JRXLP JMP REDXLP ; ;2-BYTE DECIMAL CONVERTER. CONVERTS ;A 2-BYTE BINARY NUMBER TO A 5-BYTE ;DECIMAL NUMBER. WILL PLACE THE ;DECIMAL NUMBER IN SCOLIN IF DESIRED ;(SLLOC DETERMINES POSITION). ; CNVDEC LDX #4 LDA #0 CDLP STA DECIMAL,X DEX BPL CDLP LDX #4 CKMAG LDA HIWK CMP HIVALS,X BEQ CKM2 BCS SUBEM BCC NOSUB CKM2 LDA LOWK CMP LOVALS,X BCS SUBEM NOSUB DEX BPL CKMAG JMP SHOWIT SUBEM LDA LOWK SEC SBC LOVALS,X STA LOWK LDA HIWK SBC HIVALS,X STA HIWK INC DECIMAL,X JMP CKMAG SHOWIT LDX #$4 LDY SLLOC BMI SHEND SHOLP LDA DECIMAL,X ORA #$D0 STA SCOLIN,Y INY DEX BPL SHOLP SHEND RTS ; ;THIS ROUTINE MOVES THE STAR AROUND ON ;THE PLAYFIELD. THE STAR IS ROTATED AND ;PLOTTED (IN A PLAYER) IN THE VBI. ; MOVSTR LDA SMTIM ;TIME TO MOVE? BEQ MSTR ;YES, GO DO IT JMP TRYSHO ;NO, GET STICK MSTR LDA STRSPD ;SET MOVEMENT TIMER STA SMTIM ;WITH STAR SPEED LDA STRHGT ;ADJUST P/M SEC ;COORDINATES TO SBC #13 ;MATCH PLAYFIELD STA STRLY ;PLOTTING LDA STRHOR ;COORDINATES. SEC SBC #44 STA STRLX LDA RANDOM ;WANT TO CHANGE CMP #240 ;THE STAR'S DIRECTION? BCC SAMSTD ;NO, USE SAME. NEWDIR LDA RANDOM ;GET RANDOM AND #7 ;DIRECTION JMP DIRCHK SAMSTD LDA STRDIR ;GET OLD DIRECTION. DIRCHK TAX ;CHECK TO SEE STA TMPDIR ;IF STAR WILL LDA STRLX ;BUMP INTO ANY CLC ;PLAYFIELD ADC STRDTX,X ;OBJECT. STA PLOTX LDA STRLY CLC ADC STRDTY,X STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y ;ANY COLLISION? BEQ WAYCLR ;NO, ALL CLEAR! LDA #15 ;HIT SOMETHING, STA BSCNT ;START BUMP SOUND AND BNE NEWDIR ;GET NEW DIRECTION. WAYCLR LDA PLOTX ;ADJUST STAR CLC ;COORDINATES ADC #44 ;BACK TO P/M STA STRHOR ;COORDINATES LDA PLOTY ;FROM PLAYFIELD. CLC ADC #13 STA STRHGT LDA TMPDIR ;SET DIRECTION STA STRDIR MOVESH LDA #3 ;CHECK ALL STA SHORTN ;4 SHORTS SHMVLP LDX SHORTN ;GET SHORT # LDA SHORTF,X ;SHORT ALIVE? BEQ NXTSM ;NO LDA SHORTX,X ;GET X STA PLOTX ;COORDINATE LDA SHORTY,X ;AND Y STA PLOTY ;COORDINATE JSR PLOTCL ;IS SHORT LDY #0 ;ON... LDA BITSON,X AND (LO),Y CMP COLOR1,X ;COLOR1? BEQ MOVEIT ;YUP! KILLSH LDX SHORTN ;STOP THIS SHORT LDA #0 ;BY TURNING STA SHORTF,X ;FUNCTION FLAG OFF NXTSM DEC SHORTN ;MORE SHORTS? BPL SHMVLP ;YES! JMP TRYSHO ;NO. MOVEIT LDA #3 ;TRY 4 STA TRIES ;DIRECTIONS LDX SHORTN ;GET SHORT # LDA SHORTD,X ;AND DIRECTION STA DIRSAV ;SAVE IT TRYMOV LDX SHORTN ;GET SHORT # LDY DIRSAV ;AND DIRECTION LDA SHORTX,X ;FIND OUT CLC ;WHERE THE ADC DIRX,Y ;SHORT WILL CMP #159 ;BE NEXT BCS NXTTRN ;POSITION, STA PLOTX LDA SHORTY,X CLC ADC DIRY,Y CMP #85 BCS NXTTRN STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y ;IS IT OVER CMP COLOR1,X ;COLOR 1? BEQ GOTDIR ;YES! IT'S OK! NXTTRN DEC TRIES ;MORE DIRECTIONS? BMI KILLSH ;NO! LDX TRIES ;GET NEXT LDA DIRSAV ;TRIAL DIRECTION CLC ADC DADD,X AND #3 STA DIRSAV JMP TRYMOV ;AND TRY TO MOVE! GOTDIR LDX SHORTN ;GET SHORT # LDA PLOTX ;SAVE ALL STA SHORTX,X ;NEW SHORT LDA PLOTY ;POSITION STA SHORTY,X ;AND DIRECTION LDA DIRSAV ;VALUES! STA SHORTD,X JMP NXTSM ;DO NEXT SHORT! ; THIS ROUTINE GENERATES NEW ; SHORTS AT THE PROPER TIME IF ; ANY ARE INACTIVE. TRYSHO LDA SHTIM2 ;READY TO START ONE? BEQ TRYSH2 ;YES! JMP GETSTK ;NO! TRYSH2 LDA SHTIMI ;RESET THE STA SHTIM2 ;SHORT TIMER LDX #3 ;SEARCH FOR SHSCAN LDA SHORTF,X ;INACTIVE SHORT BEQ STRTSH ;GOT ONE!!! DEX BPL SHSCAN JMP GETSTK ;NONE FOUN STRTSH STX HOLDSX STRTSX LDA RANDOM ;RANDOM SHORT X CMP #160 BCS STRTSX STA PLOTX STRTSY LDA RANDOM ;RANDOM SHORT Y AND #$7F CMP #85 BCS STRTSY STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y CMP COLOR1,X ;ON COLOR 1? BNE STRTSX ;NO, TRY AGAIN! LDX HOLDSX LDA PLOTX ;SAVE ALL STA SHORTX,X ;SHORT LDA PLOTY ;PARAMETERS STA SHORTY,X LDA RANDOM AND #3 STA SHORTD,X LDA #1 ;TELL PROGRAM STA SHORTF,X ;SHORT IS ALIVE! JMP GETSTK ;LOOP BACK ; ;SEARCH FOR FILLABLE AREA ; ;THIS SECTION SEARCHES FOR THE AREA TO ;BE FILLED. IT IS SO COMPLICATED THAT ;EXPLANATION OF ITS FINER DETAILS ;WOULD BE ALMOST IMPOSSIBLE WITHOUT ;WRITING ANOTHER COMPLETE ARTICLE. AT ;ANY RATE, IT WORKS. THOSE WITH ANY ;SPECIFIC QUESTIONS SHOULD WRITE ME, ;CARE OF A.N.A.L.O.G. ; SEARCH LDA #1 STA FILLON LDA #0 STA D LDA STRHOR SEC SBC #44 STA SX LDA STRHGT SEC SBC #13 STA SY FINDCL LDX D LDA SX CLC ADC SXD,X STA SX STA PLOTX LDA SY CLC ADC SYD,X STA SY STA PLOTY JSR PLOTCL LDY #0 LDA (LO),Y AND BITSON,X CMP COLOR1,X BEQ FINDC2 CMP COLOR2,X BNE FINDCL LDA #0 STA TD JMP FOUND2 FINDC2 LDA D STA TD JSR DECD FC2A JSR SRCHLC CMP COLOR1,X BNE FC2B JSR GRABEM JMP FINDC2 FC2B CMP COLOR2,X BNE FC2C JSR GRABEM JMP OUTLIN FC2C JSR INCD JMP FC2A FOUND2 LDA #0 STA TRIES JSR DECD FND2A JSR SRCHLC CMP COLOR2,X BNE FND2B JSR GRABEM JMP FOUND2 FND2B LDA TRIES CLC ADC #1 STA TRIES CMP #3 BEQ FINDC1 JSR INCD JMP FND2A FINDC1 LDA D STA TD JSR DECD FC1A JSR SRCHLC CMP COLOR1,X BNE FC1B JSR GRABEM JMP FINDC2 FC1B JSR INCD JMP FC1A OUTLIN JSR PLSXSY LDA #0 STA TRIES OUTLA JSR SRCHLC CMP COLOR1,X BNE OUTLB JSR GRABEM JMP OUTLIN OUTLB LDA TRIES CLC ADC #1 STA TRIES CMP #4 BEQ OUTLD JSR INCD JMP OUTLA OUTLD JSR LOCTXY OUTLD2 CMP COLOR2,X BNE OUTLE JSR FILL LDA #0 STA FILLON RTS OUTLE JSR INCD JSR SRCHLC JMP OUTLD2 SRCHLC LDX TD LDA SX CLC ADC SXD,X STA TX STA PLOTX LDA SY CLC ADC SYD,X STA TY STA PLOTY LOCTXY LDA PLOTX CMP #159 BCS NOREAD LDA PLOTY CMP #85 BCS NOREAD JSR PLOTCL LDY #0 LDA (LO),Y AND BITSON,X RTS NOREAD LDA #0 LDX #0 RTS GRABEM LDA TD STA D LDA TX STA SX LDA TY STA SY RTS INCD LDA TD CLC ADC #1 AND #3 STA TD RTS DECD LDA TD SEC SBC #1 AND #3 STA TD RTS PLSXSY LDA SX STA PLOTX CMP MAXX BCC TMINX2 STA MAXX JMP CKYMM2 TMINX2 CMP MINX BCS CKYMM2 STA MINX CKYMM2 LDA SY STA PLOTY CMP MAXY BCC TMINY2 STA MAXY JMP ENDMM2 TMINY2 CMP MINY BCS ENDMM2 STA MINY ENDMM2 JSR PLOTCL LDY #0 LDA BITOFF,X AND (LO),Y ORA COLOR2,X STA (LO),Y RTS ; ;FILL ROUTINE ; ;AS WITH THE 'SEARCH' SUBROUTINE, THE ;FILL SUBROUTINE IS FAR TOO COMPLEX TO ;EXPLAIN HERE. THIS FILL IS ENTIRELY ;DIFFERENT FROM THE SYSTEM'S FILL ;ROUTINE, AS IT WILL FILL ANY SHAPE ;THAT IS OUTLINED IN COLOR 2. ; FILL LDA #0 ;TURN OFF STA AUDC2 ;SOUND CHANNELS STA AUDC3 ;2 AND 3. LDA MAXY ;INITIALIZE SEC ;THE FILL SBC MINY ;SOUND STA FILFRQ ;FREQUENCY. LDA MINX SEC SBC #1 STA MINX STA FX LDA MINY STA FY SEC SBC #1 STA MINY LDA MAXX CLC ADC #1 STA MAXX LDA MAXY CLC ADC #1 STA MAXY LDA #0 STA SCTALY CLRC2T LDA #0 STA C2TALY LOCLP1 JSR LOCATE CMP #2 BNE LOCLP1 LOCLP2 INC C2TALY JSR LOCATE CMP #2 BEQ LOCLP2 AND #1 BNE CLRC2T LDA C2TALY CMP #1 BEQ FILLIT JSR LOCPRV BEQ CLRC2T FILLIT LDA FX STA PLOTX LDA FY STA PLOTY JSR PLOTCL LDY #0 LDA (LO),Y ORA COLOR3,X STA (LO),Y INC SCTALY JSR LOCATE CMP #0 BEQ FILLIT AND #1 BNE CLRC2T LDA #1 STA C2TALY FOLLOW JSR LOCATE CMP #0 BEQ LOCLP3 AND #1 BNE CLRC2T INC C2TALY JMP FOLLOW LOCLP3 LDA C2TALY CMP #1 BNE LOCLP4 JMP CLRC2T LOCLP4 JSR LOCPRV CMP BITSON,X BEQ FILLIT JMP CLRC2T LOCATE LDA FX CLC ADC #1 STA FX CMP MAXX BNE STOFX LDA CURLO CLC ADC SCTALY STA CURLO LDA CURHI ADC #0 STA CURHI LDA #0 STA SCTALY LDA MINX STA FX LDA #0 STA C2TALY LDA #$86 STA AUDC1 LDA FILFRQ STA AUDF1 BEQ NOFFDC DEC FILFRQ NOFFDC LDA FY CLC ADC #1 STA FY CMP MAXY BEQ FILEND LDA FX CMP MINX BNE STOFX PLA PLA JMP CLRC2T FILEND PLA PLA RTS STOFX LDA FX STA PLOTX LDA FY STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y CMP COLOR2,X BNE NOTC2 LDA BITSON,X ORA (LO),Y STA (LO),Y INC SCTALY LDA #2 RTS NOTC2 CMP COLOR1,X BNE NOTC1 LDA #1 RTS NOTC1 CMP #0 BNE C3 RTS C3 LDA #3 RTS LOCPRV LDA FX STA PLOTX LDA FY SEC SBC #1 CMP MINY BEQ NOLOCP STA PLOTY JSR PLOTCL LDY #0 LDA BITSON,X AND (LO),Y RTS NOLOCP LDA #0 LDX #0 RTS ; ;VBI ROUTINE ; INTRPT LDA KEY ;IS SPACE BAR CMP #$21 ;PRESSED? BNE NOPRES ;NO, CHECK FOR PAUSE. LDA #$FF ;CLEAR OUT STA KEY ;KEY CODE, LDA PAUSE ;COMPLEMENT EOR #$FF ;THE PAUSE STA PAUSE ;FLAG. NOPRES LDA PAUSE ;ARE WE PAUSED? BEQ NOPAUS ;NO! JMP XITVBV ;PAUSED, NO VBI! NOPAUS LDA BSCNT ;MORE BUMP SOUND? BMI NOBS ;NO, PROCESS TIMER. ORA #$A0 ;MIX VOLUME WITH STA AUDC4 ;PURE TONE, LDA #$80 ;SET UP BUMP STA AUDF4 ;SOUND FREQUENCY DEC BSCNT ;AND DECREMENT COUNT. NOBS LDA TIMER ;TIMER DOWN TO ZERO? BEQ NODEC ;YES, DON'T DECREMENT. DEC TIMER ;DECREMENT TIMER. NODEC LDA SHTIM2 BEQ NODEC2 DEC SHTIM1 BNE NODEC2 DEC SHTIM2 NODEC2 LDA FILLON ;ARE WE FILLING? BEQ NOFILL ;NO, DO REST OF VBI. JMP XITVBV ;YES, EXIT VBI NOFILL LDA #0 ;CLEAR OUT STA DEADFG ;DEAD FLAG STA HSHORT ;AND SHORT HIT. LDA P1PL ;HAS PLAYER 1 AND #$0C ;HIT PLAYER 2/3? BEQ NOHITS ;NO, IT'S OK INC HSHORT ;YES!!! NOHITS LDA P1PL ;HAS PLAYER 1 AND #$01 ;HIT PLAYER 0? BEQ NOHITP ;NO! INC DEADFG ;YES!!! NOHITP LDA P0PF ;HAS PLAYER 0 AND #$02 ;HIT COLOR 2? BEQ NOHITL ;NO! INC DEADFG ;YES!!! NOHITL STA HITCLR ;CLEAR COLLISION. LDA MOVTIM ;MOVEMENT TIMER ZERO? BEQ NOMDEC ;YES, DON'T DECREMENT. DEC MOVTIM ;DECREMENT TIMER. NOMDEC LDA SMTIM ;STAR MOVE TIMER ZERO? BEQ NMTDEC ;YES, DON'T DECREMENT. DEC SMTIM ;DECREMENT TIMER. NMTDEC LDA STARCT ;STAR ROT. TIMER ZERO? BEQ STAROT ;YES, ROTATE STAR! DEC STARCT ;DECREMENT TIMER JMP VBREST ;AND SKIP ROTATION. STAROT LDA #1 ;SET ROT. TIMER STA STARCT ;TO 1 LDA STRPOS ;INCREMENT CLC ;STAR ROTATION ADC #1 ;COUNTER, CMP #7 ;ALLOW ONLY 0-6. BNE STOSTP ;ROT. COUNT OK LDA #0 ;ZERO ROT. COUNTER. STOSTP STA STRPOS ;SAVE ROT. POS. VBREST LDY STRPOS ;THIS SECTION LDX STRHGT ;DRAWS THE STAR LDA #0 ;IN PLAYER 0 STA PL0-1,X ;MEMORY USING STA PL0+8,X ;THE TABLES LDA STARB1,Y ;'STARB1' THRU STA PL0,X ;'STARB8'. LDA STARB2,Y STA PL0+1,X LDA STARB3,Y STA PL0+2,X LDA STARB4,Y STA PL0+3,X LDA STARB5,Y STA PL0+4,X LDA STARB6,Y STA PL0+5,X LDA STARB7,Y STA PL0+6,X LDA STARB8,Y STA PL0+7,X LDA STRHOR ;SET STAR'S STA HPOSP0 ;HORIZ. POS. LDA SHOOFF ;OK TO SHOW PLAYER? BNE ENDVBI ;NO, EXIT VBI LDA PX ;SET PLAYER'S CLC ;HORIZONTAL ADC #47 ;POSITION STA HPOSP1 LDA PY ;DRAW PLAYER CLC ;IN PLAYER 3 ADC #$10 ;MEMORY TAX LDA #0 STA PL1-3,X STA PL1-2,X STA PL1+2,X STA PL1+3,X LDA #$40 STA PL1-1,X STA PL1+1,X LDA #$A0 STA PL1,X LDA NOCCHG ;COLOR CHANGE OK? BNE ENDVBI ;NO, EXIT VBI INC COLPM1 ;YES, CYCLE THE COLOR. ; THE FOLLOWING ROUTINE USES TWO ; PLAYERS (2 & 3) TO DISPLAY THE ; "SHORTS." EACH PLAYER IS USED ; TO SHOW 2 SHORTS, SO SOME ; FLICKER MAY BE OBSERVED. ENDVBI INC SHFLIP ;TOGGLE FLIP LDA SHFLIP ;MASK FLIP LSR A ;TO EITHER AND #1 ;0 OR 1 TAY ;PUT IN Y LDA CPYSTN,Y ;AND GET IMAGE STA CPYST ;TO USE (+/X) LDA SHFLIP ;GET FLIP, AND #1 ;MASK AND TAY ;PUT IN Y LDA #PL3/256 ;PUT PLAYER 3 STA DESTHI ;IN DESTINATION LDA #PL3&255 ;ADDRESS STA DESTLO ;HI & LO LDA #1 ;SET DEST # STA DESTNM LDA SHSTRT,Y ;GET START STA VBXHLD ;SHORT # SHORLP LDA #0 LDX DESTNM LDY SHYHLD,X ;GET LAST INDEX LDX #4 ;NOW ERASE ERSSHO STA (DESTLO),Y ;PREVIOUS INY ;SHORT DEX BPL ERSSHO LDX VBXHLD LDA SHORTF,X ;SHORT ALIVE? BEQ NXTSHO ;NO! LDA SHORTX,X ;GET SHORT'S LDY SHORTY,X ;COORDINATES, CLC ADC #46 LDX DESTNM STA HPOSP2,X ;SET HORIZ. POS. TYA CLC ADC #14 STA SHYHLD,X ;AND VERTICAL POS. TAY LDX CPYST LDA #4 ;NOW COPY STA CPYCNT ;SHORT IMAGE SHOCOP LDA SHOIMG,X ;TO THE STA (DESTLO),Y ;PLAYER INY DEX DEC CPYCNT BPL SHOCOP NXTSHO DEC DESTNM ;MORE? BMI VBEND ;NO, EXIT! LDA DESTLO ;POINT TO SEC ;NEXT PLAYER SBC #128 STA DESTLO LDA DESTHI SBC #0 STA DESTHI INC VBXHLD JMP SHORLP ;AND LOOP BACK. VBEND JMP XITVBV ;DONE WITH VBI! ; ;DATA ; DLIST DB $70,$70,$70 DB $4D,DISP&255,DISP/256 DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$D,$D,$D,$D,$D DB $D,$D,$D,$D,$D,$20,$46 SCDL DW SCOLIN DB $46 DW SCOLN2 DB $41,DLIST&255,DLIST/256 TITLDL DB $70,$70,$70,$70,$70,$70 DB $70,$70,$70,$30,$46 DW MAGMSG DB $70,$47 DW TITLE DB $30,$46 DW AUTHOR DB $70,$70,$30,$46 DW STMSG DB $41 DW TITLDL SCOLIN DB CT,CG,CT,CCOL,0,0,0,0,0,0 DB 0,CC,CU,CR,CCOL,0,0,0,0,0 SCOLN2 DB CL,CV,CCOL,0,0,0,CS,CC,CO DB CR,CE,CCOL,0,0,0,0,0,0,0,0 GOMSG DB 0,0,0,0,0,CG,CA,CM,CE,0 DB 0,CO,CV,CE,CR,0,0,0,0,0 MAGMSG DB 0,0,$21,$2E,$21,$2C,$2F,$27 DB 0,$23,$2F,$2D,$30,$35 DB $34,$29,$2E,$27,0,0 TITLE DB 0,0,0,$66,$69,$6C,$6C,$47 DB $65,$72,0,$75,$70,$41,0 DB $69,$69,0,0,0 AUTHOR DB 0,0,0,$A2,$B9,0,0,$B4 DB $AF,$AD,0,$A8,$B5,$A4,$B3,$AF DB $AE,0,0,0 STMSG DB 0,0,0,0,$F0,$F2,$E5,$F3 DB $F3,0,0,$F3,$F4,$E1,$F2,$F4 DB 0,0,0,0 ; ;LEVEL TABLES ; TGTLO DB 64,16,224,40,248,212,16,4 DB 248,224,212,224,68,168,112,212 TGTHI DB 31,39,46,35,42,48,39,41,42 DB 46,48,46,47,47,48,48 STARSP DB 4,4,4,3,3,3,2,2,2,2,2,1,1 DB 1,1,1 KILLFG DB 0,0,1,0,1,1,0,1,1,1,1,0,0 DB 1,1,1 SHTIME DB 7,7,7,6,6,6,5,5,5,4,4,4,3 DB 3,2,1 SHSTRT DB 0,2 SHYHLD DS 2 SHOIMG DB $88,$50,$20,$50,$88 DB $20,$20,$F8,$20,$20 CPYSTN DB 4,9 DADD DB $FF,2,1 DIRX DB 0,1,0,$FF DIRY DB $FF,0,1,0 SHORTX DS 4 SHORTY DS 4 SHORTF DS 4 SHORTD DS 4 ZERO1 DB 0 SCORE DB 0,0,0,0,0,0 SLLOC DB 0 CURLO DB 0 CURHI DB 0 LEVEL DB 0 PAUSE DB 0 HASDRN DB 0 LOWK DB 0 HIWK DB 0 SCTALY DB 0 LIVES DB 0 ; ;STAR PLAYER-MISSILE IMAGES ; STARB1 DB $81,$40,$20,$10,$08,$04,$02 STARB2 DB $42,$43,$20,$10,$08,$04,$C2 STARB3 DB $24,$24,$13,$10,$08,$C8,$24 STARB4 DB $18,$18,$1C,$1F,$F8,$38,$18 STARB5 DB $18,$18,$38,$F8,$1F,$1C,$18 STARB6 DB $24,$24,$C8,$08,$10,$13,$24 STARB7 DB $42,$C2,$04,$08,$10,$20,$43 STARB8 DB $81,$02,$04,$08,$10,$20,$40 STARCT DB 0 STRPOS DB 0 STRHGT DB 0 STRHOR DB 0 STRLX DB 0 STRLY DB 0 TMPDIR DB 0 STRDIR DB 0 STRDTX DB 1,1,0,255,255,255,0,1 STRDTY DB 0,1,1,0,1,255,255,255 STRSPD DB 4 COLOR1 DB $40,$10,$04,$01 COLOR2 DB $80,$20,$08,$02 COLOR3 DB $C0,$30,$0C,$03 BITSON DB $C0,$30,$0C,$03 BITOFF DB $3F,$CF,$F3,$FC BXSTRT DB 0,158,158,0 BYSTRT DB 0,0,84,84 BXINC DB 1,0,255,0 BYINC DB 0,1,0,255 BORCNT DB 159,85,159,85 BORNUM DB 0 BDINCX DB 0 BDINCY DB 0 BDCNT DB 0 PXWC DB 0 PYWC DB 0 SHOOFF DB 0 CKX DB 0 CKY DB 0 INIX DB 0 INIY DB 0 MINX DB 0 MINY DB 0 MAXX DB 0 MAXY DB 0 REX DB 0 REY DB 0 X DB 0 Y DB 0 SX DB 0 SY DB 0 TX DB 0 TY DB 0 FX DB 0 FY DB 0 TD DB 0 D DB 0 BSCNT DB 0 FILFRQ DB 0 TRIES DB 0 FILLON DB 0 C2TALY DB 0 NOCCHG DB 0 DEDBRT DB 0 STKHLD DB 0 RDRCOL DB 0 REDIR DB 0 LGTHY DB 0 TIMES DB 0 CKV DB 0 CKVX DB 0 DRAWFG DB 0 MOVIX DB 0 XD DB 0,0,0,0 DB 0,0,0,1 DB 0,0,0,255 DB 0,0,0,0 YD DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,1,255,0 SXD DB 0,1,0,255 SYD DB 255,0,1,0 DECIMAL DB 0,0,0,0,0 ZERO2 DB 0 HIVALS DB 0,0,0,3,39 LOVALS DB 1,10,100,232,16 DIR DS 256 LGTH DS 256 END $6000