*****************************›* *›* 'AVALANCHE' *›* written by: TOMMY BENNETT *›* *›*****************************›;›;OS SYMBOLS !!!›;›COLPM0 = $02C0 ;P/M COLORS›COLPM1 = $02C1›COLPM2 = $02C2›COLPM3 = $02C3›COLPF0 = $02C4 ;PLAYFIELD COLORS›COLPF1 = $02C5›COLPF2 = $02C6›COLPF3 = $02C7›COLBK = $02C8›CHBASE = $02F4 ;CHAR. SET ADDRESS›HPOSP0 = $D000 ;P/M HORIZONTAL›HPOSP1 = $D001 ;REGISTERS›HPOSP2 = $D002›HPOSP3 = $D003›P0PF = $D004 ;COLLISION›P1PF = $D005 ;REGISTERS›P2PF = $D006›P3PF = $D007›P0PL = $D00C›P3PL = $D00F›GRACTL = $D01D ;GRAPHICS CONTROL›HITCLR = $D01E ;COLLISION CLEAR›WSYNC = $D40A ;WAIT FOR SYNC›NMIEN = $D40E ;INTERRUPT ENABLE›PRIOR = $026F ;PRIORITY›DMACTL = $022F ;DMA CONTROL›AUDF1 = $D200 ;AUDIO›AUDC1 = $D201 ;REGISTERS›AUDF2 = $D202›AUDC2 = $D203›AUDF3 = $D204›AUDC3 = $D205›AUDF4 = $D206›AUDC4 = $D207›AUDCTL = $D208›SETVBV = $E45C ;VBLANK SET›XITVBV = $E462 ;VBLANK EXIT›SIOINV = $E465 ;SIO INIT›CONSOL = $D01F ;CONSOLE KEYS›PCOLR2 = $02C2 ;P/M COLOR›PCOLR3 = $02C3 ;›STICK0 = $0278 ;STICK›STRIG = $0284 ;STICK TRIGGER›RANDOM = $D20A ;RANDOM #›ATRACT = $4D ;ATTRACT MODE FLAG›PMBASE = $D407 ;P/M ADDRESS›DLISTL = $0230 ;DISPLAY...›DLISTH = $0231 ;LIST ADDR›PMAREA = $3800 ;P/M MEMORY›PLAY0 = PMAREA+$0400›PLAY1 = PMAREA+$0500›PLAY2 = PMAREA+$0600›PLAY3 = PMAREA+$0700›DISP = $3600 ;DISPLAY MEMORY›DISP1 = DISP+20›DISP2 = DISP+40›DISP3 = DISP+60›DISP4 = DISP+80›DISP5 = DISP+100›DISP7 = DISP+140›DISP22 = DISP+440›CHSET = $3800 ;CHAR. SET ADDR›;›;PAGE 0 VARIABLES›;› *= $80 ›LO *= *+1 ;2-BYTE...›HI *= *+1 ;WORK ADDRESS›TIMER *= *+1 ;EVENT TIMER›LVL *= *+1 ;LEVEL #›OPT *= *+1 ;OPTION KEY FLAG›TOG *= *+1 ;EASY/HARD VALUE›PADCT *= *+1 ;JUMPING PAD INDEX›COLR *= *+1 ;COLOR WORK REG.›PNT *= *+1›TOM *= *+1 ;LIVES›FILE *= *+2 ;PAD COLOR POINTER›TIMES4 *= *+1 ;PLOT WORK AREA›;›;USER SYMBOLS !!!›;› *= $0600›PCOL *= *+1 ;PL COL #›PROW *= *+1 ;PL ROW #›NUMSQ *= *+1 ;# OF SQ'S›TIME *= *+1 ;DELAY TIM›SCOL *= *+1 ;SNK COL #›SROW *= *+1 ;SNK ROW #›PXPOS *= *+1 ;PL XPOS›PYPOS *= *+1 ;POSITIONS›XPOSP1 *= *+1 ;OF›XPOSP2 *= *+1 ;PLAYERS...›XPOSP3 *= *+1 ;›YPOSP1 *= *+1 ;›YPOSP2 *= *+1 ;›YPOSP3 *= *+1 ;›COUNT1 *= *+1 ;›COUNT2 *= *+1 ;›COUNT3 *= *+1 ;›COUNT4 *= *+1 ;›LEVEL *= *+1 ;›ROUND *= *+1 ;›START *= *+1 ;›LENGTH *= *+1 ;›LENGTH3 *= *+1 ›ADDNUM3 *= *+1 ›PLAYER *= *+2 ›SCORE *= *+6 ;SCORE DIGITS›BACK *= *+1 ;PLAY END REASON›ADDNUM *= *+1 ›ADD *= *+1 ›SUM *= *+1 ;SCORE ADD VALUE›FALOFF *= *+1 ;FALL FLAG›DIRFLG *= *+1 ;DIRECTION FLAG›SO1FLG *= *+1 ;SOUND FLAGS›SO2FLG *= *+1 ›SO3FLG *= *+1 ›SO4FLG *= *+1 ›MOVFLG *= *+1 ;MOVE FLAG›WARN *= *+1 ›WARN1 *= *+1 ›PITCH1 *= *+1 ;PITCH FLAG›PITCH2 *= *+1 ;›PITCH3 *= *+1 ;›PITCH4 *= *+1 ;›DIRECT *= *+1 ;DIRECTION SAVE›DRP1 *= *+1 ;DROP FLAGS›DRP2 *= *+1 ›BAL1FLG *= *+1 ;ROCK FLAGS›BAL2FLG *= *+1 ›B1MOV *= *+1 ;ROCK MOV›B2MOV *= *+1 ;FLAG'S...›B3MOV *= *+1 ›B1DRP *= *+1 ›B2DRP *= *+1 ›B3DRP *= *+1 ›B1DIR *= *+1 ›B2DIR *= *+1 ›B3DIR *= *+1 ›B1DRW *= *+1 ›B2DRW *= *+1 ›B3DRW *= *+1 ›FNB1DRP *= *+1 ›FNB2DRP *= *+1 ›FNB3DRP *= *+1 ›MAN *= *+1 ;GREEN MAN›GRNFLG *= *+1 ;GREEN MAN PRESENT›OUTFLG2 *= *+1 ›GRNDIR *= *+1 ;GREEN DIRECTION›GCOL *= *+1 ;GREEN MAN COLUMN›GROW *= *+1 ;GREEN MAN ROW›GRNDRP *= *+1 ;GREEN DROP FLAG›GRNMOV *= *+1 ;GREEN MOVE FLAG›GRNFNDRP *= *+1 ;GREEN DROP FINISH›OUTFLG *= *+1 ›GRDIR *= *+1 ;GEORGE DIRECTION›GRGFLG *= *+1 ;GEORGE PRESENT›GRGDRP *= *+1 ;GEORGE DROP›FNGRDRP *= *+1 ;GEORGE DROP FINISH›GRGMOV *= *+1 ;GEORGE MOVE FLAG›HPOS *= *+3 ;TMP LOC...›TEMP *= *+1 ›TEMP1 *= *+1 ›COL *= *+1 ;PLOT COLUMN›ROW *= *+1 ;PLOT ROW›;›;AVALANCHE CONTROL CODE›;› *= $2000›STRTIT JSR SIOINV ;INIT SOUNDS› LDA #0 ;SET AUDIO CONTROL› STA AUDCTL› LDA #1 ;SET EASY MODE› STA OPT› LDA #174› STA TOG› JSR PMCLR› JSR SETCHR ;SET UP CHARSET› JSR INILVL ;SET LEVEL INFO› JSR SCREEN ;INIT SCREEN› JSR SHOLIV ;SHOW LIVES› JSR SNDOFF ;NO SOUNDS› JSR ZEROSC ;ZERO SCORE› LDX #15 ;DISPLAY...›SETAUTH LDA TITLE,X ;TITLE,› STA DISP3+2,X› LDA AUTHOR,X ;AUTHOR,› STA DISP22+2,X› LDA MAGMSG,X ;MAGAZINE› STA DISP22+22,X› DEX › BPL SETAUTH›CKSTRG LDA STRIG ;TRIG PRESSED?› BNE NOSTRG ;NO!› JSR INILVL ;INIT LEVEL› JSR SCREEN ;INIT SCREEN› JSR SHOLIV ;SHOW LIVES› JSR ZEROSC ;ZERO SCORE› LDA #0 ;NO ATTRACT MODE› STA ATRACT› JMP READY ;GO TO IT!›NOSTRG LDA CONSOL ;GET CONSOLE› CMP #3 ;OPTION PRESSED?› BNE SHODIF ;NO!› LDA TOG ;GET DIFFICULTY› CMP #174 ;NORMAL?› BNE NORMAL ;NO, SET NORMAL› LDA #168 ;SET HARD› STA TOG› LDA #1› BNE SETDIF›NORMAL LDA #174 ;NORMAL DIFFICULTY› STA TOG› LDA #0›SETDIF STA OPT ;SAVE DIFF› JSR STODIF ;AND INITIALIZE›SHODIF LDA TOG ;GET DIFF CHAR› STA DISP+9 ;SHOW ON SCREEN› LDA #20 ;WAIT 20 JIFFIES› JSR WAIT› JMP CKSTRG ;LOOP BACK›READY JSR CLINE3 ;CLEAR SCREEN LINE 3› JSR CLINE22 ;AND LINE 22› LDA LEVEL ;GET LEVEL› ORA #$10› STA DISP+18 ;SHOW ON SCREEN› LDA ROUND ;GET ROUND› ORA #$10› STA DISP1+18 ;SHOW ON SCREEN› LDX #7 ;SHOW READY!›SHORDY LDA RDYMSG,X› STA DISP3+6,X› DEX › BPL SHORDY› LDA #120 ;WAIT 120 JIFFIES› JSR WAIT› JSR CLINE3 ;ERASE LINE 3› LDA #20› STA TIME› LDX ROUND ;SET ROUND 0› LDA R1SET,X ;AND SET COLORS› STA DLI4C1+1› LDA R2SET,X› STA DLI4C2+1› LDA R3SET,X› STA DLI4C3+1› LDA R4SET,X› STA DLI4C4+1› JSR SETLD ;INIT DIFF FACTORS› JSR GAME ;GO TO MAIN GAME› LDA #1 ;RESET START FLAG› STA START› JSR SNDOFF ;TURN OFF SOUND› LDA BACK ;GET PLAY END REASON› CMP #1 ;SCREEN COMPLETED?› BEQ LVLEND ;YES!› JMP CKDED2 ;NO, CHECK DEATH›LVLEND INC ROUND ;NEXT ROUND› JSR BONUS ;DO BONUS› JSR BONLIF ;CHECK BONUS LIFE› LDA #0 ;NO ATTRACT MODE› STA ATRACT› LDA ROUND ;GET ROUND #› CMP #5 ;ROUND 5› BNE NOTR5 ;NO!› INC LEVEL ;NEXT LEVEL!› LDA #1 ;RESET ROUND #› STA ROUND› LDA LEVEL ;SAVE LEVEL #› STA LVL› JSR SCREEN ;SET SCREEN› JMP NEWLVL ;NEW LEVEL›NOTR5 LDA #0 ;0 # OF SQUARES› STA NUMSQ› JSR SCREEN ;SET SCREEN› JMP READY ;WE'RE READY!›NEWLVL JSR CLINE22 ;CLEAR LINE 22› LDX #4 ;NEW LEVEL MESSAGE›SHOLVL LDA LVMSG,X› STA DISP22+7,X› DEX › BPL SHOLVL› LDA LEVEL ;SHOW LEVEL #› ORA #$10› STA DISP22+13› LDX #11 ;MAKE LEVEL SOUND›NLSND LDA #150 ;SET SOUND,› STA AUDF1› LDA #168› STA AUDC1› LDA #28 ;SET COLORS› STA DLI4C1+1› LDA #136› STA DLI4C2+1› LDA #6 ;WAIT 6 JIFFIES› JSR WAIT› LDA #50 ;CHANGE SOUND› STA AUDF1› LDA #136 ;AND COLORS› STA DLI4C1+1› LDA #28› STA DLI4C2+1› LDA #6 ;WAIT AGAIN› JSR WAIT› DEX ;MORE SOUNDS?› BPL NLSND ;YES!› LDA #0 ;TURN OFF SOUND› STA AUDC1› JSR CLINE22 ;ERASE LINE 22› LDA LEVEL ;GET LEVEL #› CMP #7 ;LEVEL 7?› BNE NOT7 ;NO!› LDA #6 ;MAKE IT 6 AGAIN› STA LVL›NOT7 LDA #0 ;RESET PLAY FLAG› STA BACK› STA NUMSQ ;AND # SQUARES› JMP READY ;GO PLAY!›CKDED2 CMP #2 ;HIT BY ROCK?› BEQ DEAD2 ;YES!› JMP CKDED3 ;NO, WE FELL.›DEAD2 DEC TOM ;1 LESS LIFE› LDX #15 ;DO DEATH SOUND›DEDSND LDA #120 ;SET SOUND› STA AUDF1› TXA › ORA #$10› STA AUDC1› LDA #5 ;WAIT 5 JIFFIES› JSR WAIT› DEX ;NEXT SOUND› BPL DEDSND› JMP CHKEND ;CHECK END OF GAME›CKDED3 DEC TOM ;1 LESS LIFE› LDA #1 ;RESET PRIORITY› STA PRIOR›CHKEND JSR BONLIF ;BONUS LIFE CHECK› LDA TOM ;MORE LIVES?› BNE NOTEND ;YES!› LDX #8 ;NO, SHOW END MESSAGE›SHOEND LDA ENDMSG,X› STA DISP3+6,X› DEX › BPL SHOEND› JMP CKSTRG ;GO CHECK RESTART›NOTEND JSR SHOLIV ;SHOW LIVES LEFT› JMP READY ;AND PLAY!›CLINE3 LDX #19 ;ERASE 3RD SCREEN LINE› LDA #0›CL3LP STA DISP3,X› DEX › BPL CL3LP› RTS ›CLINE22 LDX #39 ;ERASE LAST 2...› LDA #0 ;SCREEN LINES›CL22LP STA DISP22,X› DEX › BPL CL22LP› RTS ›WAIT STA TIMER ;SET TIMER›WAITLP LDA TIMER ;GET TIMER› BNE WAITLP ;NOT ZERO YET› RTS ;TIME'S UP!›SETCHR LDX #0 ;COPY CHAR SET›MOVCHR LDA $E000,X› STA CHSET,X› LDA $E100,X› STA CHSET+$0100,X› DEX › BNE MOVCHR› LDX #47 ;AND CHANGE...›CHGCHR LDA NEWCHR,X ;THE CHARACTERS...› STA CHSET+24,X ;WE'RE USING!› DEX › BPL CHGCHR› LDA # >CHSET ;TURN ON...› STA CHBASE ;OUT CHAR SET› LDA #62 ;TURN ON DMA› STA DMACTL› LDA # >DLIST ;POINT TO...› STA DLISTH ;OUR› LDA # PMAREA ;SET P/M AREA› STA PMBASE› LDA #38 ;SET COLORS› STA COLPM0› LDA #52› STA COLPM1› STA COLPM2› STA COLPM3› LDA #124 ;SET P/M POSITIONS› STA HPOSP0› LDA #116› STA HPOSP1› STA HPOSP2› STA HPOSP3› LDA #1 ;SET PRIORITY› STA PRIOR› LDA #15 ;SET MISC. COLORS› STA COLPF0› LDA #40› STA COLPF1› LDA #136› STA COLPF2› LDA #214› STA COLPF3› LDA # >DLI1 ;POINT TO DLI› STA $0201› LDA # VBLANK ;SET VBLANK› LDY # DLI2 ;POINT TO DLI #2› STA $0201› LDA # DLI3 ;POINT TO DLI #3› STA $0201› LDA # DLI4 ;POINT TO DLI #4› STA $0201› LDA # DLI1 ;POINT TO DLI #1› STA $0201› LDA # [DISP+169] ;POINT TO...› STA HI ;PAD AREA...› LDA # <[DISP+169] ;ON SCREEN› STA LO› LDA #1 ;AND SET UP PADS!› STA PADCT›SETPAD LDY PADCT›SPADLP LDA PADATA,Y› STA (LO),Y› DEY › BPL SPADLP› LDA PADCT› CLC › ADC #2› CMP #15› BEQ PADEND› STA PADCT› LDA LO› CLC › ADC #39› STA LO› LDA HI› ADC #0› STA HI› JMP SETPAD›PADEND JSR STODIF› LDA #0 ;ERASE...› STA DISP+18 ;LEVEL #› STA DISP+38 ;ROUND #› LDX #5 ;SHOW LVL/RND MESSAGES›SETLR LDA LVLMSG,X› STA DISP+12,X› LDA RNDMSG,X› STA DISP1+12,X› DEX › BPL SETLR› RTS ›ZEROSC LDX #5 ;ZERO SCORE›ZSCLP LDA #16› STA DISP,X› LDA CHGMSG,X ;SET CHANGE TO MSG› STA DISP4,X› DEX › BPL ZSCLP› LDA #52 ;SET UP ARROWS...› STA DISP5+2 ;AND COLOR INDICATOR› LDA #47› STA DISP5+3› LDA #7› STA DISP7+1› LDA #67› STA DISP7+2› LDA #68› STA DISP7+3› LDA #8› STA DISP7+4› RTS ›INILVL LDA #1 ;START AT...› STA LEVEL ;LEVEL 1,› STA LVL› STA ROUND ;ROUND 1› LDA #4 ;4 LIVES!› STA TOM› LDA #0 ;SET START FLAG› STA START› LDA #2 ;SET MISC VARIABLES› STA ROW› LDA #96› STA COLR› LDA #16› STA PNT› RTS ›SNDOFF LDA #0 ;TURN OFF...› STA AUDC1 ;SOUND CHANNEL 1› STA AUDC2 ;SOUND CHANNEL 2› STA AUDC3 ;SOUND CHANNEL 3› STA AUDC4 ;SOUND CHANNEL 4› RTS ›SETLD LDA LVL ;GET LEVEL› CMP #1 ;LEVEL 1?› BEQ L14 ;YES!› CMP #4 ;LEVEL 4?› BNE CL25 ;NO! CHECK 2/5›L14 LDA DLI4C2+1 ;SET COLOR› STA DLI2C1+1› RTS ›CL25 CMP #2 ;LEVEL 2?› BEQ L25 ;YES!› CMP #5 ;LEVEL 5?› BNE L36 ;NO!›L25 LDA DLI4C3+1 ;SET COLOR› STA DLI2C1+1› RTS ›L36 LDA DLI4C4+1 ;SET COLOR› STA DLI2C1+1› RTS ›BONUS LDX #20 ;PLAY MUSIC›MUSLP LDA NOTE,X ;SET NOTE› STA AUDF1› LDA #$AA› STA AUDC1› LDA DUR,X ;SET DURATION› JSR WAIT ;WAIT,› JSR COLCYC ;CYCLE COLORS› DEX ;MORE NOTES?› BPL MUSLP ;YES!› LDX #60 ;DO DOWN-SLUR›MDOWN STX AUDF1› JSR COLCYC› LDA #2› JSR WAIT› INX › INX › INX › CPX #81› BCC MDOWN›MUP STX AUDF1 ;NOW UP-SLUR› JSR COLCYC› LDA #2› JSR WAIT› DEX › DEX › DEX › CPX #57› BNE MUP› LDA #0 ;RESET BACKGND COLOR› STA COLBK› LDA #96› STA COLR› LDX #10 ;AND FADE OUT...›FADE TXA ;LAST NOTE› ORA #$A0› STA AUDC1› LDA #4› JSR WAIT› DEX › BPL FADE› LDA #0 ;SHUT OFF SOUND› STA AUDC1› LDX #9 ;SHOW BONUS MESSAGE›SHOBMS LDA BONMSG,X› STA DISP22+5,X› DEX › BPL SHOBMS› LDA SCORE+2 ;ADD 1000 POINTS› CLC ;TO SCORE› ADC #1› CMP #26› BNE SHOSP2› LDA SCORE+1› CLC › ADC #1› CMP #26› BNE SHOSP2› LDA SCORE+1› CLC › ADC #1› STA SCORE+1› STA DISP+1› LDA #16›SHOSP2 STA SCORE+2› STA DISP+2› LDA #200 ;WAIT 200 JIFFIES› JSR WAIT› RTS ›BONLIF LDA DISP+1 ;GET SCORE› CMP PNT ;> BONUS AMT?› BEQ BRRET ;NO!› BCS BONUSL ;YES!›BRRET RTS ›BONUSL INC PNT ;INC BONUS LEVEL› INC TOM ;1 MORE LIFE› JSR SHOLIV ;SHOW LIVES› LDX #2 ;3 BONUS SOUNDS› LDA #32 ;PITCH = 32› STA AUDF1›BLS1 LDY #15 ;VOLUME 15›BLS2 TYA › ORA #$A0› STA AUDC1› LDA #3 ;LEAVE ON 3 JIFFIES› JSR WAIT› DEY ;NEXT VOLUME› BPL BLS2› DEX ;NEXT SOUND› BPL BLS1› LDA #0 ;TURN OFF SOUND› STA AUDC1› RTS ›STODIF LDA OPT ;GET DIFF FLAG› STA OPTN1+1 ;STORE IN...› STA OPTN2+1 ;PROGRAM› LDA LEVEL ;GET LEVEL› CMP #3 ;LEVEL 3?› BNE NOTL3 ;NO!› LDA ROUND ;GET ROUND› CMP #1 ;ROUND 1?› BEQ SET1 ;YES!› CMP #3 ;ROUND 3?› BNE NOTL3 ;NO!›SET1 LDA #0 ;SET DIFFICULTY› STA OPTN2+1›DIFRTS RTS ›NOTL3 LDA LEVEL ;GET LEVEL #› CMP #7 ;LEVEL 7?› BNE NOTL7 ;NO!› LDA #0 ;SET DIFF› STA OPTN1+1› RTS ›NOTL7 CMP #8 ;LEVEL 8?› BEQ SET1 ;YES!› CMP #9 ;LEVEL 9?› BCC DIFRTS ;NO!› LDA #0 ;SET DIFF› STA OPTN1+1› BEQ SET1›COLCYC LDA COLR ;GET COLOR FLAG› CLC ;ADD 2› ADC #2› STA COLR ;SAVE IT› STA COLBK ;AND SET BACKGND› RTS ›;›;----------------›;START OF PROGRAM›;----------------›;›GAME JSR SETUP ;INIT.....› JSR FIG1›;›;---------›;MAIN LOOP›;---------›;›MAIN LDA BACK ;BACK TO› CMP #$00› BEQ CHKSTK ;CONTROLLER?› RTS ;YES...›CHKSTK LDA MOVFLG ;ALREADY› CMP #1 ;MOVIN...› BNE A1 ;NO!› JSR MOVE.MAN ;YES, MOVE MAN› JMP A2›A1 LDA STICK0 ;CHK STICK› STA DIRECT ;SAVE STICK POS› JSR MOVE.MAN ;MOVE MAN›A2 JSR ROCK2 ;HANDLE ROCK 2› LDA TEMP ;GET ADVANCE FLAG›OPTN1 CMP #1 ;0/1 SETS DIFFICULTY› BNE A6 ;NO ADVANCE!› LDA #0 ;RESET ADV FLAG› STA TEMP› JSR ROCK3 ;HANDLE ROCK 3› JMP A5 ;SKIP NEXT CODE›A6 LDA #1 ;SET ADV FLAG› STA TEMP›A5 LDA TEMP1 ;GET ADV FLAG 2›OPTN2 CMP #1 ;0/1 SETS DIFFICULTY› BNE A3 ;NO ADVANCE!› LDA #0 ;RESET ADV FLAG 2› STA TEMP1› JSR ROCK1 ;HANDLE ROCK 1› JMP A4›A3 LDA #1 ;SET ADVANCE FLAG› STA TEMP1›A4 JSR SOUND ;DO SOUNDS› JSR CHECK ;CHECK SQUARES HIT› JSR CLEAR ;RESET P/M COLLISION› JSR DELAY ;DELAY...› JSR PL.PL ;CHECK PLR-PLR COLL.› JMP MAIN ;GO AGAIN›;›;-------------------›;MOVE MAN SUBROUTINE›;-------------------›;›MOVE.MAN LDA SO1FLG ;CHK SOUND› CMP #1 ;FLG› BNE CHECKDIR› RTS ›;›CHECKDIR LDA DIRECT ;GET STICK...› CMP #9 ;DIRECTION› BNE B1› JMP DNLEFT0 ;DOWN & LEFT›B1 CMP #5› BNE B2› JMP DNRIGHT0 ;DOWN & RIGHT›B2 CMP #6› BNE B3› JMP UPRIGHT0 ;UP & RIGHT›B3 CMP #10› BNE B4› JMP UPLEFT0 ;UP & LEFT›B4 RTS ›;›;---------›;ROCK1 SUB›;---------›ROCK1 LDA SO2FLG ;SOUND ON?› CMP #1› BNE C1 ;NO!› RTS ›C1 LDA DRP1 ;DROPPING?› CMP #80› BEQ C11 ;NO!› INC DRP1 ;NEXT DROP› RTS›C11 LDA B1MOV ;MOVING...› CMP #1› BNE C2› JMP MOVE1 ;YES...›C2 LDA B1DRP ;DROPPED?› CMP #1› BEQ C3 ;YES...› LDA RANDOM ;NOT YET..› BMI C4› RTS ;DON'T DROP›C4 LDA #1 ;SET DRP..› STA B1DRP› JSR BAL1DRW ;DRAW ROCK›C3 LDA FNB1DRP ;FINISHED..› CMP #1› BNE DROP1 ;NO...› JMP GETDIR1›;›DROP1 JSR DOWN1 ;DROP...› JSR DOWN1› JSR DOWN1› JSR DOWN1› LDA YPOSP1 ;FINISHED..› CMP #109› BCS D1 ;YES...› RTS ;NO....›D1 LDA #1› STA FNB1DRP ;SET FLG..› STA SO2FLG ;SOUND FLG› LDA #$AF› STA PITCH2 ;PITCH...› RTS ;RETURN...›;›GETDIR1 LDA #1 ;GET DIRECT› STA B1MOV› LDA RANDOM› BMI E1› LDA #0 ;0=DNRIGHT› STA B1DIR› JMP MOVE1›E1 LDA #1 ;1=DNLEFT› STA B1DIR›;›MOVE1 LDA B1DIR ;WHICH WAY?› CMP #1 ;DNLEFT??› BNE F1 ;NO....› JMP DNLEFT1 ;YES...›F1 JMP DNRIGHT1›;›;----------›;ROCK 2 SUB›;----------›ROCK2 LDA SO3FLG ;SOUND ON?› CMP #1› BNE G1 ;NO!› RTS ›;›G1 LDA DRP2 ;DROPPING?› CMP #40› BEQ G11 ;NO!› INC DRP2 ;INC DROP COUNT› RTS ›G11 LDA GRNFLG ;GRN MAN› CMP #1 ;OUT....› BNE G2› JMP GREEN ;YES...›G2 LDA BAL1FLG ;ROCK OUT??› CMP #1› BNE G3› JMP MOVBAL2 ;YES...›G3 LDA ROUND ;CAN GREEN› CMP #2 ;COME OUT??› BNE G4 ;NO...› JMP GRNCAN ;YES...›G4 CMP #4› BEQ GRNCAN› JMP MOVBAL2 ;NO....›;›GRNCAN LDA MAN› CMP #50› BEQ MOVBAL2› LDA OUTFLG2 ;ROCK COME› CMP #2 ;TWICE....› BCC MOVBAL2› LDA RANDOM ;GREEN OR› BMI MOVBAL2 ;ROCK....› INC MAN ;IT'S GREEN MAN!› JMP GREEN›;›MOVBAL2 LDA B2MOV ;MOVING...› CMP #1› BNE H2 ;NO...› JMP MOVE2 ;YES...›H2 LDA B2DRP ;DROPPED??› CMP #1› BEQ H3 ;YES...› LDA RANDOM ;NOT ET...› BMI H4› RTS ›H4 LDA #1 ;SET DRP..› STA B2DRP› STA BAL1FLG› INC OUTFLG2› JSR BAL2DRW ;DRAW ROCK›H3 LDA FNB2DRP ;FINISHED..› CMP #1› BNE DROP2 ;NO...› JMP GETDIR2›;›DROP2 JSR DOWN2 ;ADVANCE...› JSR DOWN2 ;FOUR...› JSR DOWN2 ;TIMES› JSR DOWN2› LDA YPOSP2 ;DONE DROPPING?› CMP #109› BCS I1 ;YES!› RTS ›I1 LDA #1 ;FINISHED!› STA FNB2DRP› STA SO3FLG› LDA #$AF ;SET SOUND 3› STA PITCH3› RTS ›;›GETDIR2 LDA #1 ;ROCK 2 MOVING› STA B2MOV› LDA RANDOM ;GET RANDOM DIR› BMI J1› LDA #0 ;IT'S DOWN & RIGHT!› STA B2DIR› JMP MOVE2 ;GO MOVE IT!›J1 LDA #1 ;IT'S DOWN & LEFT!› STA B2DIR›;›MOVE2 LDA B2DIR ;WHICH DIR› CMP #1 ;DN & LEFT?› BNE K1 ;NO!› JMP DNLEFT2›K1 JMP DNRIGHT2›;›GREEN LDA #1 ;GET GRNFLG› STA GRNFLG› LDA #0› STA OUTFLG2› LDA GRNMOV ;MOVING?› CMP #1› BNE L1 ;NO!› JMP MOVEGRN ;YES, MOVE IT!›L1 LDA GRNDRP ;DROP YET?› CMP #1› BEQ L2 ;NO!› LDA #1 ;SET FLG...› STA GRNDRP ;FOR DROP› JSR GRN0 ;DRAW›L2 LDA GRNFNDRP ;DROP DONE?› CMP #1› BNE DROPGRN ;NO!› JMP GEDIRGRN ;YES, GET DIRECTION›DROPGRN JSR DOWN2 ;MOVE...› JSR DOWN2 ;DOWN...› JSR DOWN2 ;FOUR...› JSR DOWN2 ;TIMES!› LDA YPOSP2 ;DROP DONE?› CMP #104› BCS M1 ;YES!› RTS ›M1 LDA #1 ;SET DROP DONE FLAG› STA GRNFNDRP› STA SO3FLG› LDA #$AF ;AND SOUND!› STA PITCH3› RTS ›;›GEDIRGRN LDA #1 ;SET GREEN MOVE FLAG› STA GRNMOV› INC GROW ;INC GREEN ROW› INC GROW› LDA RANDOM ;GET RANDOM COL MOVE› BMI N1› LDA #0 ;DOWN & RIGHT› STA GRNDIR› INC GCOL ;INCREMENT COLUMN› JSR GRN0 ;DRAW FACING RIGHT› JMP MOVEGRN ;AND MOVE HIM!›N1 LDA #1 ;DOWN & LEFT› STA GRNDIR› DEC GCOL ;DEC COLUMN› JSR GRN1 ;DRAW FACING LEFT›;›MOVEGRN LDA GRNDIR ;GET DIRECTION› CMP #1 ;DOWN & LEFT?› BNE O1 ;NO!› JMP DNLEFT2 ;MOVE IT!›O1 JMP DNRIGHT2 ;DITTO!›;›;----------›;ROCK 3 SUB›;----------›ROCK3 LDA SO4FLG ;SOUND ON?› CMP #1› BNE P1 ;NO!› RTS ›P1 LDA GRGFLG ;GEORGE ON?› CMP #1› BNE P2 ;NO!› JMP GEORGE ;HANDLE GEORGE›P2 LDA BAL2FLG ;ROCK 2 OUT?› CMP #1› BNE P3 ;NO!› JMP MOVBAL3 ;MOVE ROCK 3›P3 LDA ROUND ;GET ROUND› CMP #3 ;ROUND 3/4?› BCS GRGCAN ;YES, BRING OUT GEORGE› JMP MOVBAL3 ;MOVE ROCK 3!›;›GRGCAN LDA OUTFLG ;CAN GEORGE...› CMP #2 ;COME OUT?› BCC MOVBAL3 ;NO, DO ROCK 3› LDA RANDOM ;GET RANDOM CHANCE...› BMI MOVBAL3 ;NO, HE CAN'T› JMP GEORGE ;COME ON, GEORGE!›;›MOVBAL3 LDA B3MOV ;ROCK 3 MOVING?› CMP #1› BNE Q2 ;NO!› JMP MOVE3 ;MOVE IT!›Q2 LDA B3DRP ;ROCK 3 DROPPING?› CMP #1› BEQ Q3 ;YES!› LDA RANDOM ;READY TO DROP?› BMI Q4 ;YES!› RTS ›Q4 LDA #1 ;SET DROP FLAG› STA B3DRP› STA BAL2FLG› INC OUTFLG ;IN GEORGE CHANCE› JSR BAL3DRW ;DRAW ROCK 3›Q3 LDA FNB3DRP ;IS ROCK 3...› CMP #1 ;DROP COMPLETE?› BNE DROP3 ;NO!› JMP GETDIR3 ;YES, GET DIRECTION›;›DROP3 JSR DOWN3 ;MOVE...› JSR DOWN3 ;DOWN...› JSR DOWN3 ;FOUR...› JSR DOWN3 ;TIMES› LDA YPOSP3 ;DROP DONE?› CMP #109› BCS R1 ;YES!› RTS ›R1 LDA #1 ;SET DROP...› STA FNB3DRP ;FINISH FLAG› STA SO4FLG› LDA #$AF ;AND SOUND!› STA PITCH4› RTS ›;›GETDIR3 LDA #1 ;SET ROCK 3 MOVE FLAG› STA B3MOV› LDA RANDOM ;GET RANDOM CHANCE› BMI S1› LDA #0 ;DOWN & RIGHT!› STA B3DIR› JMP MOVE3 ;MOVE IT›S1 LDA #1 ;DOWN & LEFT!› STA B3DIR›;›MOVE3 LDA B3DIR ;GET ROCK 3 DIRECTION› CMP #1 ;DOWN & LEFT?› BNE T1 ;NO!› JMP DNLEFT3 ;MOVE IT!›T1 JMP DNRIGHT3 ;DITTO!›;›GEORGE LDA #1 ;SET...› STA GRGFLG ;GEORGE FLAG› LDA GRGMOV ;GEORGE MOVING?› CMP #1› BNE U1 ;NO!› JMP MOVGRG ;GO MOVE HIM!›U1 LDA GRGDRP ;GEORGE DROPPING?› CMP #1› BEQ U2 ;YES!› LDA #1 ;OK, START...› STA GRGDRP ;GEORGE DROP› JSR GEORGE0 ;GEORGE FACING LEFT›U2 LDA FNGRDRP ;GEORGE DROP DONE?› CMP #1› BNE DROPGRG ;NO, DROP HIM!› JMP GETDRGRG ;GET GEORGE DIRECTION›;›DROPGRG JSR DOWN3 ;MOVE GEORGE...› JSR DOWN3 ;DOWN...› JSR DOWN3 ;FOUR...› JSR DOWN3 ;TIMES!› LDA YPOSP3 ;DROP DONE?› CMP #98› BCS V1 ;YES!› RTS ›V1 LDA #1 ;SET GEORGE'S DROP...› STA FNGRDRP ;DONE FLAG› STA SO4FLG› LDA #$AF ;SET SOUND› STA PITCH4› RTS ›;›GETDRGRG LDA #1 ;SET GEORGE...› STA GRGMOV ;MOVING FLAG› LDA PCOL ;GET DIRECTION...› CMP SCOL ;BASED ON PLAYER POS.› BCS RIGHT ;GO RIGHT!› LDA PROW ;GET UP/DOWN› CMP SROW› BEQ W1 ;UP!› BCC W1 ;UP!› JSR GEORGE0 ;FACING LEFT & DOWN› DEC SCOL ;MOVE LEFT› INC SROW ;MOVE DOWN...› INC SROW ;2 TIMES› LDA #0 ;0 = DOWN & LEFT› STA GRDIR› JMP MOVGRG ;MOVE GEORGE!›W1 JSR GEORGE2 ;FACING LEFT & UP› DEC SCOL ;MOVE LEFT› DEC SROW ;MOVE UP...› DEC SROW ;2 TIMES› LDA #2 ;2 = UP & LEFT› STA GRDIR› JMP MOVGRG ;MOVE GEORGE!›RIGHT LDA PROW ;GET UP/DOWN› CMP SROW› BEQ X1 ;UP!› BCC X1 ;UP!› JSR GEORGE1 ;FACING RIGHT & DOWN› INC SCOL ;MOVE RIGHT› INC SROW ;MOVE DOWN...› INC SROW ;2 TIMES› LDA #1 ;1 = RIGHT & DOWN› STA GRDIR› JMP MOVGRG ;MOVE GEORGE!›X1 JSR GEORGE3 ;FACING RIGHT & UP› INC SCOL ;MOVE RIGHT› DEC SROW ;MOVE UP...› DEC SROW ;2 TIMES› LDA #3 ;3 = RIGHT & UP› STA GRDIR›;›MOVGRG LDA GRDIR ;GET GEORGE DIRECTION› CMP #0 ;DOWN & LEFT?› BNE Y1 ;NO!› JMP DNLEFT3›Y1 CMP #1 ;DOWN & RIGHT?› BNE Y2 ;NO!› JMP DNRIGHT3›Y2 CMP #2 ;UP & LEFT?› BNE Y3 ;NO!› JMP UPLEFT3›Y3 JMP UPRIGHT3›;›;----------------›;SOUND SUBROUTINE›;----------------›;›SOUND LDA SO1FLG ;SOUND 1 ON?› CMP #1› BEQ Z1 ;YES!› JMP SO2 ;NO, DO SOUND 2›Z1 LDA PITCH1 ;GET SOUND 1 PITCH› STA AUDC1› DEC PITCH1 ;NEXT PITCH› LDA PITCH1 ;GET PITCH› CMP #$A0 ;ALL DONE?› BEQ Z2 ;YES!› JMP SO2›Z2 LDA #0 ;TURN OFF...› STA AUDC1 ;SOUND 1,› STA SO1FLG ;SOUND 1 FLAG,› STA MOVFLG ;MOVEMENT FLAG› LDA #8› STA COUNT1› LDA P0PF ;MAN ON SQUARE?› CMP #0› BNE GETLEVEL ;YES!› JSR FALL ;UH-OH, HE FELL!› RTS ;HE'S OK›;›GETLEVEL JSR UPDATMAN ;MOVE MAN› LDA LEVEL ;GO TO...› CMP #1 ;APPROPRIATE...› BNE AA1 ;LEVEL HANDLER!› JMP LEVEL1›AA1 CMP #2› BNE AA2› JMP LEVEL2›AA2 CMP #3› BNE AA4› JMP LEVEL3›AA4 CMP #4› BNE AA5› JMP LEVEL4›AA5 CMP #5› BNE AA6› JMP LEVEL5›AA6 CMP #6› BNE AA7› JMP LEVEL6›AA7 CMP #7› BNE AA8› JMP LEVEL3›AA8 JMP LEVEL6›;›LEVEL1 LDA P0PF ;HIT› CMP #1 ;PLAYFIELD 0?› BNE BB1 ;NO...› INC NUMSQ ;YES-INCREMENT SQUARES› JSR PLAYFLD1 ;CHANGE IT TO PF1›BB1 JMP SO2›;›LEVEL2 LDA P0PF ;HIT › CMP #1 ;PLAYFIELD 0?› BNE CC1 ;NO...› JSR PLAYFLD1 ;CHANGE IT TO PF1› JMP SO2 ;AND PROCEED›CC1 CMP #2 ;PLAYFIELD 1?› BNE CC2 ;NO...› INC NUMSQ ;1 MORE SQUARE› JSR PLAYFLD2 ;CHANGE IT TO PF2!›CC2 JMP SO2 ;AND PROCEED›;›LEVEL4 LDA P0PF ;HIT PLAYFIELD 0?› CMP #1› BNE DD1 ;NO...› INC NUMSQ ;1 MORE SQUARE!› JSR PLAYFLD1 ;CHANGE TO PF1› JMP SO2 ;PROCEED!›DD1 DEC NUMSQ ;DEDUCT SQUARE!› JSR PLAYFLD0 ;BACK TO PF0› JMP SO2 ;AND GO ON.›;›LEVEL3 LDA P0PF ;HIT PLAYFIELD 0?› CMP #1› BNE EE1 ;NO...› JSR PLAYFLD1 ;CHANGE TO PF1› JMP SO2 ;AND PROCEED›EE1 CMP #2 ;HIT PLAYFIELD 2?› BNE EE2 ;NO...› JSR PLAYFLD2 ;CHANGE TO PF2› JMP SO2 ;AND PROCEED›EE2 CMP #4 ;HIT PLAYFIELD 2?› BNE SO2 ;NO...› INC NUMSQ ;1 MORE SQUARE› JSR PLAYFLD3 ;CHANGE PF3› JMP SO2 ;AND PROCEED›;›LEVEL5 LDA P0PF ;HIT PLAYFIELD 0?› CMP #1› BNE FF1 ;NO...› JSR PLAYFLD1 ;CHANGE TO PF1› JMP SO2 ;PROCEED›FF1 CMP #2 ;HIT PLAYFIELD 1?› BNE FF2 ;NO...› INC NUMSQ ;1 MORE SQUARE› JSR PLAYFLD2 ;CHANGE TO PF2› JMP SO2 ;PROCEED›FF2 DEC NUMSQ ;1 LESS SQUARE› JSR PLAYFLD1 ;CHANGE TO PF1› JMP SO2 ;PROCEED›;›LEVEL6 LDA P0PF ;HIT PLAYFIELD 0?› CMP #1› BNE GG1 ;NO...› JSR PLAYFLD1 ;CHANGE TO PF1› JMP SO2 ;PROCEED›GG1 CMP #2 ;HIT PLAYFIELD 1?› BNE GG2 ;NO...› JSR PLAYFLD2 ;CHANGE TO PF2› JMP SO2 ;PROCEED›GG2 CMP #4 ;HIT PLAYFIELD 2?› BNE GG3 ;NO...› INC NUMSQ ;1 MORE SQUARE› JSR PLAYFLD3 ;CHANGE TO PF3› JMP SO2 ;PROCEED›GG3 DEC NUMSQ ;1 LESS SQUARE› JSR PLAYFLD2 ;CHANGE TO PF2›;›SO2 LDX #0 ;ROCK 1› LDY #0› JSR BALCHK ;SEE IF IT FELL› LDA FALOFF ;DID IT FALL?› CMP #1› BEQ HH1 ;YES!› JMP SO3 ;NO, PROCEED›HH1 LDY YPOSP1 ;ERASE ROCK 1› LDX #0› TXA ›HH2 STA PLAY1,Y› INX › INY › CPX #10› BNE HH2› LDA #0 ;RESET DROP FLAG› STA DRP1› LDX #0 ;CLR OTHER FLAGS› JSR CLRFLG›;›SO3 LDA GRNFLG ;GREEN MAN ACTIVE?› CMP #1› BNE II99 ;NO!› JMP GRNCHK ;SEE IF HE FELL›II99 LDX #1 ;ROCK 2› LDY #2› JSR BALCHK ;SEE IF IT FELL› LDA FALOFF ;DID ROCK 2 FALL?› CMP #1› BEQ II1 ;YES!› JMP SO4 ;NO, PROCEED›II1 LDY YPOSP2 ;ERASE ROCK 2› LDX #0› TXA ›II2 STA PLAY2,Y› INX › INY › CPX #10› BNE II2› LDA #0 ;RESET DROP FLAG› STA DRP2› STA BAL1FLG› LDX #1 ;AND OTHER FLAGS› JSR CLRFLG›;›SO4 LDA GRGFLG ;GEORGE ACTIVE?› CMP #1› BEQ GRGCHK ;YES!› LDX #2 ;CHECK ROCK 3› LDY #4› JSR BALCHK ;SEE IF IT FELL› LDA FALOFF ;DID IT FALL?› CMP #1› BEQ JJ1 ;YES!› RTS ›JJ1 LDY YPOSP3 ;ERASE ROCK 3› LDX #0› TXA ›JJ2 STA PLAY3,Y› INY › INX › CPX #10› BNE JJ2› LDA #0 ;CLEAR ROCK 3 FLAG› STA BAL2FLG› LDX #2 ;AND OTHER FLAGS› JSR CLRFLG› RTS ›;›GRGCHK LDA SO4FLG ;SOUND ON?› CMP #1› BEQ KK1 ;YES!› RTS ›KK1 LDA PITCH4 ;SET VOLUME› STA AUDC4› DEC PITCH4 ;NEXT VOLUME› LDA PITCH4 ;SOUND DONE?› CMP #$A0› BEQ KK2 ;YES!› RTS ›KK2 LDA P3PF ;DID GEORGE...› CMP #0 ;HIT PF?› BNE KK3 ;YES!› LDA #5 ;ADD 500 POINTS...› STA SUM ;TO SCORE› JSR ADD200› JSR RESET ;RESET GEORGE› RTS ›KK3 LDA #0 ;ZERO...› STA AUDC4 ;SOUND 4,› STA SO4FLG ;SOUND 4 FLAG› STA GRGMOV ;GEORGE MOVE FLAG› LDA #8› STA COUNT4› RTS ›;›GRNCHK LDA SO3FLG ;SOUND 3 ON?› CMP #1› BEQ LL1 ;YES!› JMP SO4 ;NO, DO SOUND 4›LL1 LDA PITCH3 ;SET SOUND 3 VOLUME› STA AUDC3› DEC PITCH3 ;NEXT VOLUME› LDA PITCH3 ;SOUND 3 DONE?› CMP #$A0› BEQ LL2 ;YES!› JMP SO4 ;NO, DO SOUND 4›LL2 LDA #0 ;TURN OFF SOUND 3› STA AUDC3› LDA P2PF ;DID GREEN MAN...› CMP #0 ;HIT PLAYFIELD?› BNE GOBACK ;YES!›HITGRN JSR ERASEGRN ;GREEN MAN GONE› LDA #0 ;RESET GREEN MAN› STA GRNDRP› STA GRNFNDRP› STA GRNFLG› STA GRNMOV› STA SO3FLG› STA DRP2› LDA #10 ;RESET ROW› STA GROW› LDA #8 ;RESET COLUMN› STA GCOL› STA COUNT3› LDA #45› STA YPOSP2› LDA #116› STA HPOSP2› STA XPOSP2› RTS ›GOBACK LDA #0 ;RESET SOUND 3› STA SO3FLG› STA GRNMOV› LDA #8› STA COUNT3› LDA P2PF ;DID GREEN HIT PF0?› CMP #1› BNE MM4 ;NO!› RTS ›MM4 JSR DECNUM ;DEC # SQUARES› LDA # PF0› STA FILE+1› LDA GCOL ;SET COLUMN› STA COL› LDA GROW ;AND ROW› STA ROW› JSR CHANGE ;CHANGE IT!› RTS ›DECNUM LDA LEVEL ;GET LEVEL› CMP #1› BEQ NN1 ;LEVEL 1› CMP #2› BEQ NN2 ;LEVEL 2› CMP #3› BEQ NN4 ;LEVEL 3› CMP #4› BEQ NN1 ;LEVEL 4› CMP #5› BEQ NN2 ;LEVEL 5› JMP NN4 ;LEVEL 6›;›NN1 LDA P2PF ;HIT PF1?› CMP #2› BEQ DECR ;YES!› RTS ›NN2 LDA P2PF ;HIT PF2?› CMP #4› BEQ DECR ;YES!› RTS ›NN4 LDA P2PF ;HIT PF3?› CMP #8› BEQ DECR ;YES!› RTS ›DECR DEC NUMSQ ;1 LESS SQUARE› RTS ›BALCHK LDA SO2FLG,X ;SOUND 2 ON?› CMP #1› BEQ OO1 ;YES!› RTS ›OO1 LDA PITCH2,X ;SET VOLUME› STA AUDC2,Y› DEC PITCH2,X ;NEXT VOLUME› LDA PITCH2,X ;ALL DONE?› CMP #$A0› BEQ OO2 ;YES!› RTS ›OO2 LDA #0 ;TURN OFF...› STA AUDC2,Y ;SOUND 2› LDA P1PF,X ;DID ROCK...› CMP #0 ;HIT PF?› BNE OO3 ;YES!› LDA #1 ;UH-OH! IT FELL!› STA FALOFF ;SET FALL FLAG› RTS ›OO3 LDA #0 ;RESET SOUND FLAG› STA SO2FLG,X› STA B1MOV,X› LDA #8› STA COUNT2,X› RTS ›;›CLRFLG LDA #0 ;RESET MISC FLAGS› STA B1MOV,X› STA SO2FLG,X› STA B1DRP,X› STA FNB1DRP,X› STA FALOFF› LDA #8› STA COUNT2,X› LDA #45› STA YPOSP1,X› LDA HPOS,X› STA HPOSP1,X› STA XPOSP1,X› RTS ›;›UPDATMAN LDA DIRECT ;GET DIR...› CMP #9› BEQ PP1 ;DOWN & LEFT› CMP #5› BEQ PP2 ;DOWN & RIGHT› CMP #6› BEQ PP4 ;UP & RIGHT› CMP #10› BEQ PP3 ;UP & LEFT› RTS ›;›PP1 DEC PCOL ;MOVE LEFT› INC PROW ;MOVE DOWN...› INC PROW ;2 TIMES› RTS ›PP2 INC PCOL ;MOVE RIGHT› INC PROW ;MOVE DOWN...› INC PROW ;2 TIMES› RTS ›PP3 DEC PCOL ;MOVE LEFT› DEC PROW ;MOVE UP...› DEC PROW ;2 TIMES› RTS ›PP4 INC PCOL ;MOVE RIGHT› DEC PROW ;MOVE UP...› DEC PROW ;2 TIMES› RTS ›;›PCUBPOS LDA PCOL ;SAVE SQUARE POS.› STA COL› LDA PROW› STA ROW› RTS ›;›;-----›;DELAY›;-----›DELAY LDX #$FF ;TIME DELAY›QQ1 LDY TIME›QQ2 DEY › BNE QQ2› DEX › BNE QQ1› RTS ›;›;-------------›;SETUP ROUTINE›;-------------›;›SETUP LDA START ;INIT ALL?› CMP #$00› BNE PART ;NO...› LDA #$00 ;YES...› STA NUMSQ› LDA #$10 ;RESET› LDX #0 ;SCORE...›RESET1 STA SCORE,X› INX › CPX #$06› BNE RESET1›;›PART LDA #$00 ;SET FLG'S› LDX #0 ;TO ZERO..›SETZERO STA BACK,X› INX › CPX #100› BNE SETZERO› LDA #$08 ;SET COUNT› STA COUNT1› STA COUNT2› STA COUNT3› STA COUNT4›;› LDA #9 ;SET PLAYER› STA PCOL ;COLUMN & › LDA #8 ;ROW...› STA PROW›;› LDA #10 ;SET GEORGE› STA SCOL ;& GREEN› STA SROW ;COLUMN...› STA GROW› LDA #8› STA GCOL›;› LDA #124 ;PM DATA..› STA PXPOS› STA HPOSP0› LDA #85› STA PYPOS› LDA #116› STA XPOSP1› STA XPOSP2› STA HPOSP1› STA HPOSP2› STA HPOS› STA HPOS+1› LDA #132› STA XPOSP3› STA HPOS+2› STA HPOSP3› LDA #45› STA YPOSP1› STA YPOSP2› STA YPOSP3›;› CLC ;SET UP...› LDA #170 ;SOUND...› STA AUDF1 ;FREQUENCIES› ADC #10› STA AUDF2› ADC #10› STA AUDF3› ADC #10› STA AUDF4›;› LDA #$01 ;CLR COLLISIONS› STA HITCLR›;›PMCLR LDA #$00 ;ERASE P/M› LDX #$FF ;MEMORY›ERASEMEM STA PLAY0,X› STA PLAY1,X› STA PLAY2,X› STA PLAY3,X› DEX › BNE ERASEMEM› RTS ;RETURN...›;›;---------------›;FIGURES FOR MAN›;---------------›;›FIG1 LDA DIRFLG ;GET MOVE DIRECTION› CMP #9 ;DOWN & LEFT?› BEQ RR2 ;YES!› LDY PYPOS ;DRAW FIGURE 1› LDX #0›RR1 LDA FIG1DAT,X› STA PLAY0,Y› INY › INX › CPX #16› BNE RR1›RR2 RTS ›;›FIG2 LDA DIRFLG ;GET MOVE DIRECTION› CMP #5 ;DOWN & RIGHT?› BEQ SS2 ;YES!› JSR ERASEMAN ;ERASE MAN› LDY PYPOS ;DRAW FIGURE 2› LDX #0›SS1 LDA FIG2DAT,X› STA PLAY0,Y› INY › INX › CPX #16› BNE SS1›SS2 RTS ›;›FIG3 LDA DIRFLG ;GET DIRECTION› CMP #10 ;UP & LEFT?› BEQ TT2 ;YES!› JSR ERASEMAN ;ERASE MAN› LDY PYPOS ;DRAW FIGURE 3› LDX #0›TT1 LDA FIG3DAT,X› STA PLAY0,Y› INY › INX › CPX #15› BNE TT1›TT2 RTS ›;›FIG4 LDA DIRFLG ;GET DIRECTION› CMP #6 ;UP & RIGHT?› BEQ UU2 ;YES!› JSR ERASEMAN ;ERASE MAN› LDY PYPOS ;DRAW FIGURE 4› LDX #0›UU1 LDA FIG4DAT,X› STA PLAY0,Y› INY › INX › CPX #15› BNE UU1›UU2 RTS ›GRN0 JSR ERASEGRN ;ERASE GREEN MAN› LDY YPOSP2 ;DRAW GREEN MAN...› LDX #$00 ;FACING RIGHT!›VV1 LDA GRN1DAT,X› STA PLAY2,Y› INX › INY › CPX #13› BNE VV1› JSR SETGRN ;SET GREEN PARAMETERS› RTS ›;›GRN1 JSR ERASEGRN ;ERASE GREEN MAN› LDY YPOSP2 ;DRAW GREEN MAN...› LDX #0 ;FACING LEFT›WW1 LDA GRN2DAT,X› STA PLAY2,Y› INY › INX › CPX #13› BNE WW1› JSR SETGRN ;SET GREEN PARAMETERS› RTS ›;›ERASEGRN LDY YPOSP2 ;ERASE GREEN MAN› LDX #0› TXA ›XX1 STA PLAY2,Y› INX › INY › CPX #15› BNE XX1› RTS ›;›SETGRN LDA #13 ;GREEN 13 LINES TALL› STA LENGTH› LDA #11› STA ADDNUM› LDA #198 ;AND HE'S GREEN!› STA PCOLR2› RTS ›;›;›;ERASE MAN SUB›;›ERASEMAN LDY PYPOS› LDX #$00› LDA #$00›YY1 STA PLAY0,Y› INY › INX › CPX #20› BNE YY1› RTS ›;›;FIGURES FOR GEORGE !!›;›GEORGE0 JSR ERASEGRG ;ERASE GEORGE› LDY YPOSP3 ;DRAW GEORGE...› LDX #0 ;IN POSITION 0›ZZ1 LDA GRG0DAT,X› STA PLAY3,Y› INY › INX › CPX #18› BNE ZZ1› JSR SETGRG ;SET GEORGE PARAMETERS› RTS ›;›GEORGE1 JSR ERASEGRG ;ERASE GEORGE› LDY YPOSP3 ;DRAW GEORGE...› LDX #0 ;IN POSITION 1›AAA1 LDA GRG1DAT,X› STA PLAY3,Y› INY › INX › CPX #18› BNE AAA1› RTS ›;›GEORGE2 JSR ERASEGRG ;ERASE GEORGE› LDY YPOSP3 ;DRAW GEORGE...› LDX #0 ;IN POSITION 2›BBB1 LDA GRG2DAT,X› STA PLAY3,Y› INY › INX › CPX #18› BNE BBB1› RTS ›;›GEORGE3 JSR ERASEGRG ;ERASE GEORGE› LDY YPOSP3 ;DRAW GEORGE...› LDX #0 ;IN POSITION 3›CCC1 LDA GRG3DAT,X› STA PLAY3,Y› INY › INX › CPX #18› BNE CCC1› RTS ›;›SETGRG LDA #19 ;GEORGE 19 LINES TALL› STA LENGTH3› LDA #16› STA ADDNUM3› LDA #86 ;GEORGE PURPLE!› STA PCOLR3› RTS ›;›ERASEGRG LDY YPOSP3 ;ERASE GEORGE› LDX #0› TXA ›DDD1 STA PLAY3,Y› INY › INX › CPX #20› BNE DDD1› RTS ›;›;-----------------›;CHANGE SQUARE SUB›;-----------------›;›CHANGE LDA ROW ;GET ROW,› STA LO ;SAVE IN...› LDA #0 ;MULT AREA› STA HI› ASL LO ;*2› ASL LO ;*4› LDA LO ;SAVE *4 VALUE› STA TIMES4› ASL LO ;*8› ASL LO ;*16› ROL HI› LDA LO ;+*4 = *20› CLC › ADC TIMES4› STA LO› LDA HI› ADC #0› STA HI› LDA LO ;NOW ADD COLUMN› CLC › ADC COL› STA LO› LDA HI› ADC #0› STA HI› LDA LO ;NOW DISPLAY START› CLC › ADC # DISP› STA HI› LDY #1› LDA (FILE),Y ;GET RIGHT OF SQUARE› STA (LO),Y ;PUT ON SCREEN› DEY › LDA (FILE),Y ;GET LEFT OF SQUARE› STA (LO),Y ;PUT ON SCREEN› RTS ;ALL DONE!›;›;-------------›;FALL OFF SUB›;-------------›FALL LDA #$04 ;SET PRIOR› STA PRIOR› LDA #2› STA TIME› JSR TURNOFF› LDA #$AA› STA AUDC1›EEE1 LDA PYPOS ;GET YPOS› STA AUDF1 ;MAKE SO...› CMP #240 ;OFF SCR...› BEQ ENDLP ;YES...› JSR DOWN0 ;NO...› JSR DELAY ;DELAY...› JMP EEE1 ;DO AGAIN›ENDLP LDA #$6F› STA AUDC1› CLC › LDA #130›FFF1 STA AUDF1› ADC #1› JSR DELAY› CMP #210› BNE FFF1› LDA #$00› STA AUDF1› STA AUDC1› LDA #3 ;3=FALL› STA BACK› RTS ›;---------›;DRAW ROCK›;---------›BAL1DRW LDY YPOSP1 ;DRAW ROCK 1› LDX #$00›GGG1 LDA BALDAT,X› STA PLAY1,Y› INY › INX › CPX #10› BNE GGG1› RTS ›;›BAL2DRW LDY YPOSP2 ;DRAW ROCK 2› LDX #0›HHH1 LDA BALDAT,X› STA PLAY2,Y› INX › INY › CPX #10› BNE HHH1› LDA #10 ;SET ROCK PARAMS› STA LENGTH ;(INSTEAD OF...› LDA #8 ;GREEN MAN)› STA ADDNUM› LDA #52› STA PCOLR2› RTS ›;›BAL3DRW LDY YPOSP3 ;DRAW ROCK 3› LDX #0›III1 LDA BALDAT,X› STA PLAY3,Y› INY › INX › CPX #10› BNE III1› LDA #10 ;SET ROCK PARAMS› STA LENGTH3 ;(INSTEAD OF...› LDA #8 ;GEORGE!)› STA ADDNUM3› LDA #52› STA PCOLR3› RTS ›;›;-------------›;MOVEMENT SUBS›;-------------›;›DNLEFT0 JSR FIG1 ;SHAPE...› LDA #1› STA MOVFLG› JSR LEFT0 ;MOVE...› JSR DOWN0› JSR DOWN0› DEC COUNT1› BNE JJJ1› JSR SETFLG0 ;RETURN›JJJ1 RTS ›;›DNRIGHT0 JSR FIG2 ;SHAPE...› LDA #1› STA MOVFLG› JSR RIGHT0 ;MOVE...› JSR DOWN0› JSR DOWN0› DEC COUNT1 ;DONE...› BNE KKK1› JSR SETFLG0 ;RETURN›KKK1 RTS ›;›UPLEFT0 JSR FIG3 ;SHAPE...› LDA #1› STA MOVFLG› JSR LEFT0 ;MOVE...› JSR UP0› JSR UP0› DEC COUNT1 ;DONE???› BNE LLL1› JSR SETFLG0 ;SETFLG...›LLL1 RTS ›;›UPRIGHT0 JSR FIG4 ;SHAPE...› LDA #1› STA MOVFLG› JSR RIGHT0 ;MOVE...› JSR UP0› JSR UP0› DEC COUNT1 ;DONE???› BNE MMM1› JSR SETFLG0›MMM1 RTS ›;›LEFT0 DEC PXPOS ;MOVE MAN LEFT› LDA PXPOS› STA HPOSP0› RTS ›;›RIGHT0 INC PXPOS ;MOVE MAN RIGHT› LDA PXPOS› STA HPOSP0› RTS ›;›UP0 LDY PYPOS ;MOVE MAN UP› LDX #$00›NNN1 LDA PLAY0,Y› STA PLAY0-1,Y› INX › INY › CPX #17› BNE NNN1› DEC PYPOS› RTS ›;›DOWN0 LDX #0 ;MOVE MAN DOWN› CLC › LDA PYPOS› ADC #14› TAY ›OOO1 LDA PLAY0,Y› STA PLAY0+1,Y› DEY › INX › CPX #17› BNE OOO1› INC PYPOS› RTS ›;›;ROCK 1 MOVEMENT›;›DNLEFT1 JSR LEFT1 ;MOVE LEFT,› JSR DOWN1 ;MOVE DOWN...› JSR DOWN1 ;2 TIMES› DEC COUNT2› BNE PPP1› LDX #0› JSR SETFLG ;SET UP SOUND›PPP1 RTS ›;›DNRIGHT1 JSR RIGHT1 ;MOVE RIGHT,› JSR DOWN1 ;MOVE DOWN...› JSR DOWN1 ;2 TIMES› DEC COUNT2› BNE QQQ1› LDX #0› JSR SETFLG ;SET UP SOUND›QQQ1 RTS›;›LEFT1 DEC XPOSP1 ;MOVE ROCK 1 LEFT› LDA XPOSP1› STA HPOSP1› RTS ›;›RIGHT1 INC XPOSP1 ;MOVE ROCK 1 RIGHT› LDA XPOSP1› STA HPOSP1› RTS ›;›;›DOWN1 LDX #0 ;MOVE PLAYER 1 DOWN› CLC › LDA YPOSP1› ADC #8› TAY ›RRR1 LDA PLAY1,Y› STA PLAY1+1,Y› DEY › INX › CPX #10› BNE RRR1› INC YPOSP1› RTS ›;›;›;ROCK 2 MOVEMENT›;›;SAME AS ROCK 1, BUT FOR ROCK 2›;›DNLEFT2 JSR LEFT2› JSR DOWN2› JSR DOWN2› DEC COUNT3› BNE SSS1› LDX #1› JSR SETFLG›SSS1 RTS ›;›DNRIGHT2 JSR RIGHT2› JSR DOWN2› JSR DOWN2› DEC COUNT3› BNE TTT1› LDX #1› JSR SETFLG›TTT1 RTS ›;›LEFT2 DEC XPOSP2› LDA XPOSP2› STA HPOSP2› RTS ›;›RIGHT2 INC XPOSP2› LDA XPOSP2› STA HPOSP2› RTS ›;›DOWN2 LDX #0› CLC › LDA YPOSP2› ADC ADDNUM› TAY ›UUU1 LDA PLAY2,Y› STA PLAY2+1,Y› DEY › INX › CPX LENGTH› BNE UUU1› INC YPOSP2› RTS ›;›;ROCK 3 MOVEMENT›;›;SAME AS ROCK 1, BUT FOR ROCK 3›;›DNLEFT3 JSR LEFT3› JSR DOWN3› JSR DOWN3› DEC COUNT4› BNE VVV1› LDX #2› JSR SETFLG›VVV1 RTS ›;›DNRIGHT3 JSR RIGHT3› JSR DOWN3› JSR DOWN3› DEC COUNT4› BNE WWW1› LDX #2› JSR SETFLG›WWW1 RTS ›;›UPLEFT3 JSR LEFT3› JSR UP3› JSR UP3› DEC COUNT4› BNE XXX1› LDX #2› JSR SETFLG›XXX1 RTS ›;›UPRIGHT3 JSR RIGHT3› JSR UP3› JSR UP3› DEC COUNT4› BNE YYY1› LDX #2› JSR SETFLG›YYY1 RTS ›;›LEFT3 DEC XPOSP3› LDA XPOSP3› STA HPOSP3› RTS ›;›RIGHT3 INC XPOSP3› LDA XPOSP3› STA HPOSP3› RTS ›;›UP3 LDY YPOSP3› LDX #0›ZZZ1 LDA PLAY3,Y› STA PLAY3-1,Y› INY › INX › CPX LENGTH3› BNE ZZZ1› DEC YPOSP3› RTS ›;›DOWN3 LDX #0› CLC › LDA YPOSP3› ADC ADDNUM3› TAY ›AAAA1 LDA PLAY3,Y› STA PLAY3+1,Y› DEY › INX › CPX LENGTH3› BNE AAAA1› INC YPOSP3› RTS ›;›SETFLG0 LDA #1 ;SET FLG› STA SO1FLG› STA MOVFLG› LDA #$AF› STA PITCH1 ;PITCH...› LDA DIRECT› STA DIRFLG› RTS ›;›SETFLG LDA #1› STA SO2FLG,X› LDA #$AF› STA PITCH2,X ;PITCH...› RTS ›;›PLAYFLD0 LDA # PF0›DOSQUARE STA FILE+1› JSR ADD25 ;ADD 25 POINTS› JSR PCUBPOS ;GET CUBE POS› JSR CHANGE ;CHANGE COLOR› RTS ›;›PLAYFLD1 LDA # PF1› JMP DOSQUARE ;DO MISC STUFF›;›PLAYFLD2 LDA # PF2› JMP DOSQUARE ;DO MISC STUFF›;›PLAYFLD3 LDA # PF3› JMP DOSQUARE ;ETC.›;›CLEAR LDA #$01 ;RESET COLLISIONS› STA HITCLR› RTS ›;›TURNOFF LDA #$00 ;NO AUDIO...› STA AUDC2 ;ON CHANNELS...› STA AUDF2 ;2, 3, 4!› STA AUDC3› STA AUDF3› STA AUDC4› STA AUDF4› RTS ›;›PL.PL LDA P0PL ;DID MAN...› CMP #1 ;HIT PLAYER 0?› BCC BBBB1 ;NO!› CMP #4 ;HIT PLAYER 2?› BNE BBBB2 ;NO!› LDA GRNFLG ;GREEN MAN ACTIVE?› CMP #1› BNE BBBB2 ;NO!› JSR HITGRN ;CLOBBER GREEN MAN!› LDA #2 ;AWARD 200 POINTS!› STA SUM› JSR ADD200› JMP BBBB1›BBBB2 LDA P0PL ;DID MAN HIT...› CMP #8 ;PLAYER 3?› BNE BBBB8 ;NO!› LDA GRGFLG ;GEORGE ACTIVE?› CMP #1› BEQ BBBB1 ;YES!›BBBB8 LDA WARN1› CMP #4› BEQ BBBB7› INC WARN1› RTS ›BBBB7 LDA #2 ;DEATH DUE TO...› STA BACK ;GEORGE!› RTS ›BBBB1 LDA #0› STA WARN1› LDA GRGFLG› CMP #1› BNE RET› LDA P3PL› CMP #1› BNE BBBB5› LDA WARN› CMP #4› BEQ BBBB6› INC WARN› RTS ›BBBB6 LDA #2› STA BACK› RTS ›BBBB5 LDA #0› STA WARN› LDA P3PL› CMP #2› BCC RET› CMP #4› BNE RESET› LDA GRNFLG› CMP #1› BEQ RET›RESET JSR ERASEGRG ;ERASE GEORGE› LDA #0 ;CLEAR GEORGE...› STA GRGFLG ;VARIABLES› STA SO4FLG› STA FNGRDRP› STA GRGDRP› STA OUTFLG› STA GRGMOV› LDA #10› STA SCOL› STA SROW› LDA #8› STA COUNT4› LDA #45› STA YPOSP3› LDA #132› STA XPOSP3› STA HPOSP3›RET RTS ›;›;›CHECK LDA NUMSQ ;GET SQUARES HIT› CMP #28 ;ALL DONE?› BNE CCCC1 ;NO!› LDA #1 ;ROUND COMPLETED!› STA BACK›CCCC1 RTS ›;›;---------------›;SCORE ROUTINES›;---------------›ADD25 LDY #5 ;ADD 25 POINTS› CLC ;TO SCORE› LDA SCORE,Y› ADC #5› CMP #$1A› BNE DDDD1› LDA #$10› STA DISP,Y› STA SCORE,Y› DEY › LDA SCORE,Y› CLC › ADC #1› STA SCORE,Y› JMP DDDD2›DDDD1 LDA #$15› STA DISP,Y› STA SCORE,Y› DEY ›DDDD2 LDA SCORE,Y› CLC › ADC #2› CMP #$1A› BEQ DDDD3› STA DISP,Y› STA SCORE,Y› RTS ›DDDD3 LDA #$10› STA DISP,Y› STA SCORE,Y› DEY › LDA SCORE,Y› CLC › ADC #1› CMP #$1A› BEQ DDDD3› STA DISP,Y› STA SCORE,Y› RTS ›;›ADD200 LDY #3 ;ADD SUM * 100...› CLC ;TO SCORE› LDA SCORE,Y› ADC SUM› CMP #$1A› BCC EEEE1›EEEE2 SEC › SBC #$1A› STA ADD›EEEE3 CLC › LDA #$10› ADC ADD› STA DISP,Y› STA SCORE,Y› LDA #0› STA ADD› DEY › CLC › LDA SCORE,Y› ADC #1› CMP #$1A› BEQ EEEE3›EEEE1 STA DISP,Y› STA SCORE,Y› RTS ›;›;CHARACTER IMAGES›;(MAN, GREEN MAN, GEORGE, ROCKS)›;›FIG1DAT .BYTE 12,30,63,43,43,63› .BYTE 43,55,30,30,18,18,27› .BYTE 54,108,72›FIG2DAT .BYTE 48,120,252,212,212› .BYTE 252,212,236,120,120,72› .BYTE 72,216,108,54,18›FIG3DAT .BYTE 14,31,55,55,31,15› .BYTE 31,31,14,10,46,62,27› .BYTE 13,4›FIG4DAT .BYTE 112,248,236,236,248› .BYTE 240,248,248,112,80,116› .BYTE 124,216,176,32›GRN1DAT .BYTE 160,80,40,60,126,106› .BYTE 126,118,60,60,36,54›GRN2DAT .BYTE 5,10,20,60,126,86› .BYTE 126,110,60,60,36,108›GRG0DAT .BYTE 12,30,30,255,43› .BYTE 43,255,255,45,51,63› .BYTE 30,18,18,27,54,108,0›GRG1DAT .BYTE 48,120,120,255,212,212› .BYTE 255,255,180,204,252,120› .BYTE 72,72,216,108,54,0›GRG2DAT .BYTE 12,30,30,255,47› .BYTE 47,255,127,47,31,63› .BYTE 30,18,18,126,54,27,0›GRG3DAT .BYTE 48,120,120,255,244› .BYTE 244,255,254,244,248,252› .BYTE 120,72,72,126,108,216,0›BALDAT .BYTE 24,60,126,255,255› .BYTE 255,126,60,24,0›;›;SQUARES !!!›;›PF0 .BYTE $03,$04›PF1 .BYTE $43,$44›PF2 .BYTE $83,$84›PF3 .BYTE $C3,$C4›;›;DISPLAY LIST›;›DLIST .BYTE $70,$70,$70,$46› .WORD DISP› .BYTE 6,6,$86,6,$86,$86,$86,6,6,6› .BYTE 6,6,6,6,6,6,6,6,6,6› .BYTE 6,6,6,$41› .WORD DLIST›RDYMSG .SBYTE +$80,"READY %%"›LVMSG .SBYTE "LeVeL"›ENDMSG .SBYTE +$80,"GAME OVER"›CHGMSG .SBYTE "CHANGE"›LVLMSG .SBYTE +$80,"level:"›RNDMSG .SBYTE +$80,"round:"›BONMSG .SBYTE +$80,"BONUS"› .SBYTE " 1000"›TITLE .SBYTE " AVALANCHE "›AUTHOR .SBYTE "BY TOMMY BENNETT"›MAGMSG .SBYTE +$80,"ANALOG COMPUTING"›;›;MISC. DATA›;›R1SET .BYTE 0,15,90,4,156›R2SET .BYTE 0,134,246,12,146›R3SET .BYTE 0,26,164,118,84›R4SET .BYTE 0,196,66,34,102›;›;CHAR SET DATA›;›NEWCHR .BYTE 3,15,63,127,63,15,3,0› .BYTE 192,240,252,254,252,240,192,0› .BYTE 0,6,12,24,48,0,96,0› .BYTE 12,30,63,43,63,30,18,54› .BYTE 8,12,126,127,126,12,8,0› .BYTE 16,48,126,254,126,48,16,0›;›;JUMPING PADS›;›PADATA .BYTE 3,4,3,4,3,4,3,4› .BYTE 3,4,3,4,3,4›;›;MUSIC DATA›;›NOTE .BYTE 60,47,0,47,60,72,60,0› .BYTE 72,64,72,64,72,64,0,81› .BYTE 72,81,72,81,72›DUR .BYTE 11,14,7,11,7,7,7,7› .BYTE 7,7,7,7,7,7,7,7› .BYTE 7,7,7,7,7›