0100 ***************************** 0110 * * 0120 * 'AVALANCHE' * 0130 * written by: TOMMY BENNETT * 0140 * * 0150 ***************************** 0160 ; 0170 ;OS SYMBOLS !!! 0180 ; 0190 COLPM0 = $02C0 ;P/M COLORS 0200 COLPM1 = $02C1 0210 COLPM2 = $02C2 0220 COLPM3 = $02C3 0230 COLPF0 = $02C4 ;PLAYFIELD COLORS 0240 COLPF1 = $02C5 0250 COLPF2 = $02C6 0260 COLPF3 = $02C7 0270 COLBK = $02C8 0280 CHBASE = $02F4 ;CHAR. SET ADDRESS 0290 HPOSP0 = $D000 ;P/M HORIZONTAL 0300 HPOSP1 = $D001 ;REGISTERS 0310 HPOSP2 = $D002 0320 HPOSP3 = $D003 0330 P0PF = $D004 ;COLLISION 0340 P1PF = $D005 ;REGISTERS 0350 P2PF = $D006 0360 P3PF = $D007 0370 P0PL = $D00C 0380 P3PL = $D00F 0390 GRACTL = $D01D ;GRAPHICS CONTROL 0400 HITCLR = $D01E ;COLLISION CLEAR 0410 WSYNC = $D40A ;WAIT FOR SYNC 0420 NMIEN = $D40E ;INTERRUPT ENABLE 0430 PRIOR = $026F ;PRIORITY 0440 DMACTL = $022F ;DMA CONTROL 0450 AUDF1 = $D200 ;AUDIO 0460 AUDC1 = $D201 ;REGISTERS 0470 AUDF2 = $D202 0480 AUDC2 = $D203 0490 AUDF3 = $D204 0500 AUDC3 = $D205 0510 AUDF4 = $D206 0520 AUDC4 = $D207 0530 AUDCTL = $D208 0540 SETVBV = $E45C ;VBLANK SET 0550 XITVBV = $E462 ;VBLANK EXIT 0560 SIOINV = $E465 ;SIO INIT 0570 CONSOL = $D01F ;CONSOLE KEYS 0580 PCOLR2 = $02C2 ;P/M COLOR 0590 PCOLR3 = $02C3 ; 0600 STICK0 = $0278 ;STICK 0610 STRIG = $0284 ;STICK TRIGGER 0620 RANDOM = $D20A ;RANDOM # 0630 ATRACT = $4D ;ATTRACT MODE FLAG 0640 PMBASE = $D407 ;P/M ADDRESS 0650 DLISTL = $0230 ;DISPLAY... 0660 DLISTH = $0231 ;LIST ADDR 0670 PMAREA = $3800 ;P/M MEMORY 0680 PLAY0 = PMAREA+$0400 0690 PLAY1 = PMAREA+$0500 0700 PLAY2 = PMAREA+$0600 0710 PLAY3 = PMAREA+$0700 0720 DISP = $3600 ;DISPLAY MEMORY 0730 DISP1 = DISP+20 0740 DISP2 = DISP+40 0750 DISP3 = DISP+60 0760 DISP4 = DISP+80 0770 DISP5 = DISP+100 0780 DISP7 = DISP+140 0790 DISP22 = DISP+440 0800 CHSET = $3800 ;CHAR. SET ADDR 0810 ; 0820 ;PAGE 0 VARIABLES 0830 ; 0840 *= $80 0850 LO *= *+1 ;2-BYTE... 0860 HI *= *+1 ;WORK ADDRESS 0870 TIMER *= *+1 ;EVENT TIMER 0880 LVL *= *+1 ;LEVEL # 0890 OPT *= *+1 ;OPTION KEY FLAG 0900 TOG *= *+1 ;EASY/HARD VALUE 0910 PADCT *= *+1 ;JUMPING PAD INDEX 0920 COLR *= *+1 ;COLOR WORK REG. 0930 PNT *= *+1 0940 TOM *= *+1 ;LIVES 0950 FILE *= *+2 ;PAD COLOR POINTER 0960 TIMES4 *= *+1 ;PLOT WORK AREA 0970 ; 0980 ;USER SYMBOLS !!! 0990 ; 1000 *= $0600 1010 PCOL *= *+1 ;PL COL # 1020 PROW *= *+1 ;PL ROW # 1030 NUMSQ *= *+1 ;# OF SQ'S 1040 TIME *= *+1 ;DELAY TIM 1050 SCOL *= *+1 ;SNK COL # 1060 SROW *= *+1 ;SNK ROW # 1070 PXPOS *= *+1 ;PL XPOS 1080 PYPOS *= *+1 ;PL YPOS 1090 XPOSP1 *= *+1 ;POSITIONS 1100 XPOSP2 *= *+1 ;OF 1110 XPOSP3 *= *+1 ;PLAYERS.. 1120 YPOSP1 *= *+1 ; 1130 YPOSP2 *= *+1 ; 1140 YPOSP3 *= *+1 ; 1150 COUNT1 *= *+1 ; 1160 COUNT2 *= *+1 ; 1170 COUNT3 *= *+1 ; 1180 COUNT4 *= *+1 ; 1190 LEVEL *= *+1 ; 1200 ROUND *= *+1 ; 1210 START *= *+1 ; 1220 LENGTH *= *+1 ; 1230 LENGTH3 *= *+1 1240 ADDNUM3 *= *+1 1250 PLAYER *= *+2 1260 SCORE *= *+6 ;SCORE DIGITS 1270 BACK *= *+1 ;PLAY END REASON 1280 ADDNUM *= *+1 1290 ADD *= *+1 1300 SUM *= *+1 ;SCORE ADD VALUE 1310 FALOFF *= *+1 ;FALL FLAG 1320 DIRFLG *= *+1 ;DIRECTION FLAG 1330 SO1FLG *= *+1 ;SOUND FLAGS 1340 SO2FLG *= *+1 1350 SO3FLG *= *+1 1360 SO4FLG *= *+1 1370 MOVFLG *= *+1 ;MOVE FLAG 1380 WARN *= *+1 1390 WARN1 *= *+1 1400 PITCH1 *= *+1 ;PITCH FLG 1410 PITCH2 *= *+1 ; 1420 PITCH3 *= *+1 ; 1430 PITCH4 *= *+1 ; 1440 DIRECT *= *+1 ;DIRECTION SAVE 1450 DRP1 *= *+1 ;DROP FLAGS 1460 DRP2 *= *+1 1470 BAL1FLG *= *+1 ;ROCK FLAGS 1480 BAL2FLG *= *+1 1490 B1MOV *= *+1 ;ROCK MOV 1500 B2MOV *= *+1 ;FLAG'S.. 1510 B3MOV *= *+1 1520 B1DRP *= *+1 1530 B2DRP *= *+1 1540 B3DRP *= *+1 1550 B1DIR *= *+1 1560 B2DIR *= *+1 1570 B3DIR *= *+1 1580 B1DRW *= *+1 1590 B2DRW *= *+1 1600 B3DRW *= *+1 1610 FNB1DRP *= *+1 1620 FNB2DRP *= *+1 1630 FNB3DRP *= *+1 1640 MAN *= *+1 ;GREEN MAN 1650 GRNFLG *= *+1 ;GREEN MAN PRESENT 1660 OUTFLG2 *= *+1 1670 GRNDIR *= *+1 ;GREEN DIRECTION 1680 GCOL *= *+1 ;GREEN MAN COLUMN 1690 GROW *= *+1 ;GREEN MAN ROW 1700 GRNDRP *= *+1 ;GREEN DROP FLAG 1710 GRNMOV *= *+1 ;GREEN MOVE FLAG 1720 GRNFNDRP *= *+1 ;GREEN DROP FINISH 1730 OUTFLG *= *+1 1740 GRDIR *= *+1 ;GEORGE DIRECTION 1750 GRGFLG *= *+1 ;GEORGE PRESENT 1760 GRGDRP *= *+1 ;GEORGE DROP 1770 FNGRDRP *= *+1 ;GEORGE DROP FINISH 1780 GRGMOV *= *+1 ;GEORGE MOVE FLAG 1790 HPOS *= *+3 ;TMP LOC.. 1800 TEMP *= *+1 1810 TEMP1 *= *+1 1820 COL *= *+1 ;PLOT COLUMN 1830 ROW *= *+1 ;PLOT ROW 1840 ; 1850 ;AVALANCHE CONTROL CODE 1860 ; 1870 *= $2000 1880 STRTIT JSR SIOINV ;INIT SOUNDS 1890 LDA #0 ;SET AUDIO CONTROL 1900 STA AUDCTL 1910 LDA #1 ;SET EASY MODE 1920 STA OPT 1930 LDA #174 1940 STA TOG 1950 JSR PMCLR 1960 JSR SETCHR ;SET UP CHARSET 1970 JSR INILVL ;SET LEVEL INFO 1980 JSR SCREEN ;INIT SCREEN 1990 JSR SHOLIV ;SHOW LIVES 2000 JSR SNDOFF ;NO SOUNDS 2010 JSR ZEROSC ;ZERO SCORE 2020 LDX #15 ;DISPLAY... 2030 SETAUTH LDA TITLE,X ;TITLE, 2040 STA DISP3+2,X 2050 LDA AUTHOR,X ;AUTHOR, 2060 STA DISP22+2,X 2070 LDA MAGMSG,X ;MAGAZINE 2080 STA DISP22+22,X 2090 DEX 2100 BPL SETAUTH 2110 CKSTRG LDA STRIG ;TRIG PRESSED? 2120 BNE NOSTRG ;NO! 2130 JSR INILVL ;INIT LEVEL 2140 JSR SCREEN ;INIT SCREEN 2150 JSR SHOLIV ;SHOW LIVES 2160 JSR ZEROSC ;ZERO SCORE 2170 LDA #0 ;NO ATTRACT MODE 2180 STA ATRACT 2190 JMP READY ;GO TO IT! 2200 NOSTRG LDA CONSOL ;GET CONSOLE 2210 CMP #3 ;OPTION PRESSED? 2220 BNE SHODIF ;NO! 2230 LDA TOG ;GET DIFFICULTY 2240 CMP #174 ;NORMAL? 2250 BNE NORMAL ;NO, SET NORMAL 2260 LDA #168 ;SET HARD 2270 STA TOG 2280 LDA #1 2290 BNE SETDIF 2300 NORMAL LDA #174 ;NORMAL DIFFICULTY 2310 STA TOG 2320 LDA #0 2330 SETDIF STA OPT ;SAVE DIFF 2340 JSR STODIF ;AND INITIALIZE 2350 SHODIF LDA TOG ;GET DIFF CHAR 2360 STA DISP+9 ;SHOW ON SCREEN 2370 LDA #20 ;WAIT 20 JIFFIES 2380 JSR WAIT 2390 JMP CKSTRG ;LOOP BACK 2400 READY JSR CLINE3 ;CLEAR SCREEN LINE 3 2410 JSR CLINE22 ;AND LINE 22 2420 LDA LEVEL ;GET LEVEL 2430 ORA #$10 2440 STA DISP+18 ;SHOW ON SCREEN 2450 LDA ROUND ;GET ROUND 2460 ORA #$10 2470 STA DISP1+18 ;SHOW ON SCREEN 2480 LDX #7 ;SHOW READY! 2490 SHORDY LDA RDYMSG,X 2500 STA DISP3+6,X 2510 DEX 2520 BPL SHORDY 2530 LDA #120 ;WAIT 120 JIFFIES 2540 JSR WAIT 2550 JSR CLINE3 ;ERASE LINE 3 2560 LDA #20 2570 STA TIME 2580 LDX ROUND ;GET ROUND # 2590 LDA R1SET,X ;AND SET COLORS 2600 STA DLI4C1+1 2610 LDA R2SET,X 2620 STA DLI4C2+1 2630 LDA R3SET,X 2640 STA DLI4C3+1 2650 LDA R4SET,X 2660 STA DLI4C4+1 2670 JSR SETLD ;INIT DIFF FACTORS 2680 JSR GAME ;GO TO MAIN GAME 2690 LDA #1 ;RESET START FLAG 2700 STA START 2710 JSR SNDOFF ;TURN OFF SOUND 2720 LDA BACK ;GET PLAY END REASON 2730 CMP #1 ;SCREEN COMPLETED? 2740 BEQ LVLEND ;YES! 2750 JMP CKDED2 ;NO, CHECK DEATH 2760 LVLEND INC ROUND ;NEXT ROUND 2770 JSR BONUS ;DO BONUS 2780 JSR BONLIF ;CHECK BONUS LIFE 2790 LDA #0 ;NO ATTRACT MODE 2800 STA ATRACT 2810 LDA ROUND ;GET ROUND # 2820 CMP #5 ;ROUND 5? 2830 BNE NOTR5 ;NO! 2840 INC LEVEL ;NEXT LEVEL! 2850 LDA #1 ;RESET ROUND # 2860 STA ROUND 2870 LDA LEVEL ;SAVE LEVEL # 2880 STA LVL 2890 JSR SCREEN ;SET SCREEN 2900 JMP NEWLVL ;NEW LEVEL 2910 NOTR5 LDA #0 ;0 # OF SQUARES 2920 STA NUMSQ 2930 JSR SCREEN ;SET SCREEN 2940 JMP READY ;WE'RE READY! 2950 NEWLVL JSR CLINE22 ;CLEAR LINE 22 2960 LDX #4 ;NEW LEVEL MESSAGE 2970 SHOLVL LDA LVMSG,X 2980 STA DISP22+7,X 2990 DEX 3000 BPL SHOLVL 3010 LDA LEVEL ;SHOW LEVEL # 3020 ORA #$10 3030 STA DISP22+13 3040 LDX #11 ;MAKE LEVEL SOUND 3050 NLSND LDA #150 ;SET SOUND, 3060 STA AUDF1 3070 LDA #168 3080 STA AUDC1 3090 LDA #28 ;SET COLORS 3100 STA DLI4C1+1 3110 LDA #136 3120 STA DLI4C2+1 3130 LDA #6 ;WAIT 6 JIFFIES 3140 JSR WAIT 3150 LDA #50 ;CHANGE SOUND 3160 STA AUDF1 3170 LDA #136 ;AND COLORS 3180 STA DLI4C1+1 3190 LDA #28 3200 STA DLI4C2+1 3210 LDA #6 ;WAIT AGAIN 3220 JSR WAIT 3230 DEX ;MORE SOUNDS? 3240 BPL NLSND ;YES! 3250 LDA #0 ;TURN OFF SOUND 3260 STA AUDC1 3270 JSR CLINE22 ;ERASE LINE 22 3280 LDA LEVEL ;GET LEVEL # 3290 CMP #7 ;LEVEL 7? 3300 BNE NOT7 ;NO! 3310 LDA #6 ;MAKE IT 6 AGAIN 3320 STA LVL 3330 NOT7 LDA #0 ;RESET PLAY FLAG 3340 STA BACK 3350 STA NUMSQ ;AND # SQUARES 3360 JMP READY ;GO PLAY! 3370 CKDED2 CMP #2 ;HIT BY ROCK? 3380 BEQ DEAD2 ;YES! 3390 JMP CKDED3 ;NO, WE FELL. 3400 DEAD2 DEC TOM ;1 LESS LIFE 3410 LDX #15 ;DO DEATH SOUND 3420 DEDSND LDA #120 ;SET SOUND 3430 STA AUDF1 3440 TXA 3450 ORA #$10 3460 STA AUDC1 3470 LDA #5 ;WAIT 5 JIFFIES 3480 JSR WAIT 3490 DEX ;NEXT SOUND 3500 BPL DEDSND 3510 JMP CHKEND ;CHECK END OF GAME 3520 CKDED3 DEC TOM ;1 LESS LIFE 3530 LDA #1 ;RESET PRIORITY 3540 STA PRIOR 3550 CHKEND JSR BONLIF ;BONUS LIFE CHECK 3560 LDA TOM ;MORE LIVES? 3570 BNE NOTEND ;YES! 3580 LDX #8 ;NO, SHOW END MESSAGE 3590 SHOEND LDA ENDMSG,X 3600 STA DISP3+6,X 3610 DEX 3620 BPL SHOEND 3630 JMP CKSTRG ;GO CHECK RESTART 3640 NOTEND JSR SHOLIV ;SHOW LIVES LEFT 3650 JMP READY ;AND PLAY! 3660 CLINE3 LDX #19 ;ERASE 3RD SCREEN LINE 3670 LDA #0 3680 CL3LP STA DISP3,X 3690 DEX 3700 BPL CL3LP 3710 RTS 3720 CLINE22 LDX #39 ;ERASE LAST 2... 3730 LDA #0 ;SCREEN LINES 3740 CL22LP STA DISP22,X 3750 DEX 3760 BPL CL22LP 3770 RTS 3780 WAIT STA TIMER ;SET TIMER 3790 WAITLP LDA TIMER ;GET TIMER 3800 BNE WAITLP ;NOT ZERO YET 3810 RTS ;TIME'S UP! 3820 SETCHR LDX #0 ;COPY CHAR SET 3830 MOVCHR LDA $E000,X 3840 STA CHSET,X 3850 LDA $E100,X 3860 STA CHSET+$0100,X 3870 DEX 3880 BNE MOVCHR 3890 LDX #47 ;AND CHANGE... 3900 CHGCHR LDA NEWCHR,X ;THE CHARACTERS... 3910 STA CHSET+24,X ;WE'RE USING! 3920 DEX 3930 BPL CHGCHR 3940 LDA # >CHSET ;TURN ON... 3950 STA CHBASE ;OUT CHAR SET 3960 LDA #62 ;TURN ON DMA 3970 STA DMACTL 3980 LDA # >DLIST ;POINT TO... 3990 STA DLISTH ;OUR... 4000 LDA # PMAREA ;SET P/M AREA 4050 STA PMBASE 4060 LDA #38 ;SET COLORS 4070 STA COLPM0 4080 LDA #52 4090 STA COLPM1 4100 STA COLPM2 4110 STA COLPM3 4120 LDA #124 ;SET P/M POSITIONS 4130 STA HPOSP0 4140 LDA #116 4150 STA HPOSP1 4160 STA HPOSP2 4170 STA HPOSP3 4180 LDA #1 ;SET PRIORITY 4190 STA PRIOR 4200 LDA #15 ;SET MISC. COLORS 4210 STA COLPF0 4220 LDA #40 4230 STA COLPF1 4240 LDA #136 4250 STA COLPF2 4260 LDA #214 4270 STA COLPF3 4280 LDA # >DLI1 ;POINT TO DLI 4290 STA $0201 4300 LDA # VBLANK ;SET VBLANK 4330 LDY # DLI2 ;POINT TO DLI #2 4550 STA $0201 4560 LDA # DLI3 ;POINT TO DLI #3 4650 STA $0201 4660 LDA # DLI4 ;POINT TO DLI #4 4880 STA $0201 4890 LDA # DLI1 ;POINT TO DLI #1 5040 STA $0201 5050 LDA # [DISP+169] ;POINT TO... 5200 STA HI ;PAD AREA... 5210 LDA # <[DISP+169] ;ON SCREEN 5220 STA LO 5230 LDA #1 ;AND SET UP PADS! 5240 STA PADCT 5250 SETPAD LDY PADCT 5260 SPADLP LDA PADATA,Y 5270 STA (LO),Y 5280 DEY 5290 BPL SPADLP 5300 LDA PADCT 5310 CLC 5320 ADC #2 5330 CMP #15 5340 BEQ PADEND 5350 STA PADCT 5360 LDA LO 5370 CLC 5380 ADC #39 5390 STA LO 5400 LDA HI 5410 ADC #0 5420 STA HI 5430 JMP SETPAD 5440 PADEND JSR STODIF 5450 LDA #0 ;ERASE... 5460 STA DISP+18 ;LEVEL # 5470 STA DISP+38 ;ROUND # 5480 LDX #5 ;SHOW LVL/RND MESSAGES 5490 SETLR LDA LVLMSG,X 5500 STA DISP+12,X 5510 LDA RNDMSG,X 5520 STA DISP1+12,X 5530 DEX 5540 BPL SETLR 5550 RTS 5560 ZEROSC LDX #5 ;ZERO SCORE 5570 ZSCLP LDA #16 5580 STA DISP,X 5590 LDA CHGMSG,X ;SET CHANGE TO MSG 5600 STA DISP4,X 5610 DEX 5620 BPL ZSCLP 5630 LDA #52 ;SET UP ARROWS... 5640 STA DISP5+2 ;AND COLOR INDICATOR 5650 LDA #47 5660 STA DISP5+3 5670 LDA #7 5680 STA DISP7+1 5690 LDA #67 5700 STA DISP7+2 5710 LDA #68 5720 STA DISP7+3 5730 LDA #8 5740 STA DISP7+4 5750 RTS 5760 INILVL LDA #1 ;START AT... 5770 STA LEVEL ;LEVEL 1, 5780 STA LVL 5790 STA ROUND ;ROUND 1 5800 LDA #4 ;4 LIVES! 5810 STA TOM 5820 LDA #0 ;SET START FLAG 5830 STA START 5840 LDA #2 ;SET MISC VARIABLES 5850 STA ROW 5860 LDA #96 5870 STA COLR 5880 LDA #16 5890 STA PNT 5900 RTS 5910 SNDOFF LDA #0 ;TURN OFF... 5920 STA AUDC1 ;SOUND CHANNEL 1 5930 STA AUDC2 ;SOUND CHANNEL 2 5940 STA AUDC3 ;SOUND CHANNEL 3 5950 STA AUDC4 ;SOUND CHANNEL 4 5960 RTS 5970 SETLD LDA LVL ;GET LEVEL 5980 CMP #1 ;LEVEL 1? 5990 BEQ L14 ;YES! 6000 CMP #4 ;LEVEL 4? 6010 BNE CL25 ;NO! CHECK 2/5 6020 L14 LDA DLI4C2+1 ;SET COLOR 6030 STA DLI2C1+1 6040 RTS 6050 CL25 CMP #2 ;LEVEL 2? 6060 BEQ L25 ;YES! 6070 CMP #5 ;LEVEL 5? 6080 BNE L36 ;NO! 6090 L25 LDA DLI4C3+1 ;SET COLOR 6100 STA DLI2C1+1 6110 RTS 6120 L36 LDA DLI4C4+1 ;SET COLOR 6130 STA DLI2C1+1 6140 RTS 6150 BONUS LDX #20 ;PLAY MUSIC 6160 MUSLP LDA NOTE,X ;SET NOTE 6170 STA AUDF1 6180 LDA #$AA 6190 STA AUDC1 6200 LDA DUR,X ;SET DURATION 6210 JSR WAIT ;WAIT, 6220 JSR COLCYC ;CYCLE COLORS 6230 DEX ;MORE NOTES? 6240 BPL MUSLP ;YES! 6250 LDX #60 ;DO DOWN-SLUR 6260 MDOWN STX AUDF1 6270 JSR COLCYC 6280 LDA #2 6290 JSR WAIT 6300 INX 6310 INX 6320 INX 6330 CPX #81 6340 BCC MDOWN 6350 MUP STX AUDF1 ;NOW UP-SLUR 6360 JSR COLCYC 6370 LDA #2 6380 JSR WAIT 6390 DEX 6400 DEX 6410 DEX 6420 CPX #57 6430 BNE MUP 6440 LDA #0 ;RESET BACKGND COLOR 6450 STA COLBK 6460 LDA #96 6470 STA COLR 6480 LDX #10 ;AND FADE OUT... 6490 FADE TXA ;LAST NOTE 6500 ORA #$A0 6510 STA AUDC1 6520 LDA #4 6530 JSR WAIT 6540 DEX 6550 BPL FADE 6560 LDA #0 ;SHUT OFF SOUND 6570 STA AUDC1 6580 LDX #9 ;SHOW BONUS MESSAGE 6590 SHOBMS LDA BONMSG,X 6600 STA DISP22+5,X 6610 DEX 6620 BPL SHOBMS 6630 LDA SCORE+2 ;ADD 1000 POINTS 6640 CLC ;TO SCORE 6650 ADC #1 6660 CMP #26 6670 BNE SHOSP2 6680 LDA SCORE+1 6690 CLC 6700 ADC #1 6710 CMP #26 6720 BNE SHOSP2 6730 LDA SCORE+1 6740 CLC 6750 ADC #1 6760 STA SCORE+1 6770 STA DISP+1 6780 LDA #16 6790 SHOSP2 STA SCORE+2 6800 STA DISP+2 6810 LDA #200 ;WAIT 200 JIFFIES 6820 JSR WAIT 6830 RTS 6840 BONLIF LDA DISP+1 ;GET SCORE 6850 CMP PNT ;> BONUS AMT? 6860 BEQ BRRET ;NO! 6870 BCS BONUSL ;YES! 6880 BRRET RTS 6890 BONUSL INC PNT ;INC BONUS LEVEL 6900 INC TOM ;1 MORE LIFE 6910 JSR SHOLIV ;SHOW LIVES 6920 LDX #2 ;3 BONUS SOUNDS 6930 LDA #32 ;PITCH = 32 6940 STA AUDF1 6950 BLS1 LDY #15 ;VOLUME 15 6960 BLS2 TYA 6970 ORA #$A0 6980 STA AUDC1 6990 LDA #3 ;LEAVE ON 3 JIFFIES 7000 JSR WAIT 7010 DEY ;NEXT VOLUME 7020 BPL BLS2 7030 DEX ;NEXT SOUND 7040 BPL BLS1 7050 LDA #0 ;TURN OFF SOUND 7060 STA AUDC1 7070 RTS 7080 STODIF LDA OPT ;GET DIFF FLAG 7090 STA OPTN1+1 ;STORE IN... 7100 STA OPTN2+1 ;PROGRAM 7110 LDA LEVEL ;GET LEVEL 7120 CMP #3 ;LEVEL 3? 7130 BNE NOTL3 ;NO! 7140 LDA ROUND ;GET ROUND 7150 CMP #1 ;ROUND 1? 7160 BEQ SET1 ;YES! 7170 CMP #3 ;ROUND 3? 7180 BNE NOTL3 ;NO! 7190 SET1 LDA #0 ;SET DIFFICULTY 7200 STA OPTN2+1 7210 DIFRTS RTS 7220 NOTL3 LDA LEVEL ;GET LEVEL # 7230 CMP #7 ;LEVEL 7? 7240 BNE NOTL7 ;NO! 7250 LDA #0 ;SET DIFF 7260 STA OPTN1+1 7270 RTS 7280 NOTL7 CMP #8 ;LEVEL 8? 7290 BEQ SET1 ;YES! 7300 CMP #9 ;LEVEL 9? 7310 BCC DIFRTS ;NO! 7320 LDA #0 ;SET DIFF 7330 STA OPTN1+1 7340 BEQ SET1 7350 COLCYC LDA COLR ;GET COLOR FLAG 7360 CLC ;ADD 2 7370 ADC #2 7380 STA COLR ;SAVE IT 7390 STA COLBK ;AND SET BACKGND 7400 RTS 7410 ; 7420 ;---------------- 7430 ;START OF PROGRAM 7440 ;---------------- 7450 ; 7460 GAME JSR SETUP ;INIT..... 7470 JSR FIG1 7480 ; 7490 ;--------- 7500 ;MAIN LOOP 7510 ;--------- 7520 ; 7530 MAIN LDA BACK ;BACK TO 7540 CMP #$00 7550 BEQ CHKSTK ;CONTROLLER? 7560 RTS ;yes... 7570 CHKSTK LDA MOVFLG ;ALREADY 7580 CMP #1 ;MOVIN... 7590 BNE A1 ;NO! 7600 JSR MOVE.MAN ;YES, MOVE MAN 7610 JMP A2 7620 A1 LDA STICK0 ;CHK STICK 7630 STA DIRECT ;SAVE STICK POS 7640 JSR MOVE.MAN ;MOVE MAN 7650 A2 JSR ROCK2 ;HANDLE ROCK 2 7660 LDA TEMP ;GET ADVANCE FLAG 7670 OPTN1 CMP #1 ;0/1 SETS DIFFICULTY 7680 BNE A6 ;NO ADVANCE! 7690 LDA #0 ;RESET ADV FLAG 7700 STA TEMP 7710 JSR ROCK3 ;HANDLE ROCK 3 7720 JMP A5 ;SKIP NEXT CODE 7730 A6 LDA #1 ;SET ADV FLAG 7740 STA TEMP 7750 A5 LDA TEMP1 ;GET ADV FLAG 2 7760 OPTN2 CMP #1 ;0/1 SETS DIFFICULTY 7770 BNE A3 ;NO ADVANCE! 7780 LDA #0 ;RESET ADV FLAG 2 7790 STA TEMP1 7800 JSR ROCK1 ;HANDLE ROCK 1 7810 JMP A4 7820 A3 LDA #1 ;SET ADVANCE FLAG 7830 STA TEMP1 7840 A4 JSR SOUND ;DO SOUNDS 7850 JSR CHECK ;CHECK SQUARES HIT 7860 JSR CLEAR ;RESET P/M COLLISION 7870 JSR DELAY ;DELAY... 7880 JSR PL.PL ;CHECK PLR-PLR COLL. 7890 JMP MAIN ;GO AGAIN 7900 ; 7910 ;------------------- 7920 ;MOVE MAN SUBROUTINE 7930 ;------------------- 7940 ; 7950 MOVE.MAN LDA SO1FLG ;CHK SOUND 7960 CMP #1 ;FLG 7970 BNE CHECKDIR 7980 RTS 7990 ; 8000 CHECKDIR LDA DIRECT ;GET STICK... 8010 CMP #9 ;DIRECTION 8020 BNE B1 8030 JMP DNLEFT0 ;DOWN & LEFT 8040 B1 CMP #5 8050 BNE B2 8060 JMP DNRIGHT0 ;DOWN & RIGHT 8070 B2 CMP #6 8080 BNE B3 8090 JMP UPRIGHT0 ;UP & RIGHT 8100 B3 CMP #10 8110 BNE B4 8120 JMP UPLEFT0 ;UP & LEFT 8130 B4 RTS 8140 ; 8150 ;--------- 8160 ;ROCK1 SUB 8170 ;--------- 8180 ROCK1 LDA SO2FLG ;SOUND ON? 8190 CMP #1 8200 BNE C1 ;NO! 8210 RTS 8220 C1 LDA DRP1 ;DROPPING? 8230 CMP #80 8240 BEQ C11 ;NO! 8250 INC DRP1 ;NEXT DROP 8260 RTS 8270 C11 LDA B1MOV ;MOVING... 8280 CMP #1 8290 BNE C2 8300 JMP MOVE1 ;YES... 8310 C2 LDA B1DRP ;DROPED?? 8320 CMP #1 8330 BEQ C3 ;YES... 8340 LDA RANDOM ;NOT YET.. 8350 BMI C4 8360 RTS ;DONT DROP 8370 C4 LDA #1 ;SET DRP.. 8380 STA B1DRP 8390 JSR BAL1DRW ;DRAW ROCK 8400 C3 LDA FNB1DRP ;FINISHED.. 8410 CMP #1 8420 BNE DROP1 ;NO... 8430 JMP GETDIR1 8440 ; 8450 DROP1 JSR DOWN1 ;DROP... 8460 JSR DOWN1 8470 JSR DOWN1 8480 JSR DOWN1 8490 LDA YPOSP1 ;FINISHED.. 8500 CMP #109 8510 BCS D1 ;YES... 8520 RTS ;NO.... 8530 D1 LDA #1 8540 STA FNB1DRP ;SET FLG.. 8550 STA SO2FLG ;SOUND FLG 8560 LDA #$AF 8570 STA PITCH2 ;PITCH... 8580 RTS ;RETURN... 8590 ; 8600 GETDIR1 LDA #1 ;GET DIRECT 8610 STA B1MOV 8620 LDA RANDOM 8630 BMI E1 8640 LDA #0 ;0=DNRIGHT 8650 STA B1DIR 8660 JMP MOVE1 8670 E1 LDA #1 ;1=DNLEFT 8680 STA B1DIR 8690 ; 8700 MOVE1 LDA B1DIR ;WHICH WAY? 8710 CMP #1 ;DNLEFT?? 8720 BNE F1 ;NO.... 8730 JMP DNLEFT1 ;YES... 8740 F1 JMP DNRIGHT1 8750 ; 8760 ;---------- 8770 ;ROCK 2 SUB 8780 ;---------- 8790 ROCK2 LDA SO3FLG ;SOUND ON? 8800 CMP #1 8810 BNE G1 ;NO! 8820 RTS 8830 ; 8840 G1 LDA DRP2 ;DROPPING? 8850 CMP #40 8860 BEQ G11 ;NO! 8870 INC DRP2 ;INC DROP COUNT 8880 RTS 8890 G11 LDA GRNFLG ;GRN MAN 8900 CMP #1 ;OUT.... 8910 BNE G2 8920 JMP GREEN ;YES... 8930 G2 LDA BAL1FLG ;ROCK OUT?? 8940 CMP #1 8950 BNE G3 8960 JMP MOVBAL2 ;YES... 8970 G3 LDA ROUND ;CAN GREEN 8980 CMP #2 ;COME OUT?? 8990 BNE G4 ;NO... 9000 JMP GRNCAN ;YES... 9010 G4 CMP #4 9020 BEQ GRNCAN 9030 JMP MOVBAL2 ;NO.... 9040 ; 9050 GRNCAN LDA MAN 9060 CMP #50 9070 BEQ MOVBAL2 9080 LDA OUTFLG2 ;ROCK COME 9090 CMP #2 ;TWICE.... 9100 BCC MOVBAL2 9110 LDA RANDOM ;GREEN OR 9120 BMI MOVBAL2 ;ROCK.... 9130 INC MAN ;IT'S GREEN MAN! 9140 JMP GREEN 9150 ; 9160 MOVBAL2 LDA B2MOV ;MOVING... 9170 CMP #1 9180 BNE H2 ;NO... 9190 JMP MOVE2 ;YES... 9200 H2 LDA B2DRP ;DROPPED?? 9210 CMP #1 9220 BEQ H3 ;YES... 9230 LDA RANDOM ;NOT YET... 9240 BMI H4 9250 RTS 9260 H4 LDA #1 ;SET DRP.. 9270 STA B2DRP 9280 STA BAL1FLG 9290 INC OUTFLG2 9300 JSR BAL2DRW ;DRAW ROCK 9310 H3 LDA FNB2DRP ;FINISHED.. 9320 CMP #1 9330 BNE DROP2 ;NO... 9340 JMP GETDIR2 9350 ; 9360 DROP2 JSR DOWN2 ;ADVANCE... 9370 JSR DOWN2 ;FOUR... 9380 JSR DOWN2 ;TIMES 9390 JSR DOWN2 9400 LDA YPOSP2 ;DONE DROPPING? 9410 CMP #109 9420 BCS I1 ;YES! 9430 RTS 9440 I1 LDA #1 ;FINISHED! 9450 STA FNB2DRP 9460 STA SO3FLG 9470 LDA #$AF ;SET SOUND 3 9480 STA PITCH3 9490 RTS 9500 ; 9510 GETDIR2 LDA #1 ;ROCK 2 MOVING 9520 STA B2MOV 9530 LDA RANDOM ;GET RANDOM DIR 9540 BMI J1 9550 LDA #0 ;IT'S DOWN & RIGHT! 9560 STA B2DIR 9570 JMP MOVE2 ;GO MOVE IT! 9580 J1 LDA #1 ;IT'S DOWN & LEFT! 9590 STA B2DIR 9600 ; 9610 MOVE2 LDA B2DIR ;WHICH DIR 9620 CMP #1 ;DN & LEFT? 9630 BNE K1 ;NO! 9640 JMP DNLEFT2 9650 K1 JMP DNRIGHT2 9660 ; 9670 GREEN LDA #1 ;SET GRNFLG 9680 STA GRNFLG 9690 LDA #0 9700 STA OUTFLG2 9710 LDA GRNMOV ;MOVING? 9720 CMP #1 9730 BNE L1 ;NO! 9740 JMP MOVEGRN ;YES, MOVE IT! 9750 L1 LDA GRNDRP ;DROP YET? 9760 CMP #1 9770 BEQ L2 ;NO! 9780 LDA #1 ;SET FLG... 9790 STA GRNDRP ;FOR DROP 9800 JSR GRN0 ;DRAW 9810 L2 LDA GRNFNDRP ;DROP DONE? 9820 CMP #1 9830 BNE DROPGRN ;NO! 9840 JMP GEDIRGRN ;YES, GET DIRECTION 9850 DROPGRN JSR DOWN2 ;MOVE... 9860 JSR DOWN2 ;DOWN... 9870 JSR DOWN2 ;FOUR... 9880 JSR DOWN2 ;TIMES! 9890 LDA YPOSP2 ;DROP DONE? 9900 CMP #104 9910 BCS M1 ;YES! 9920 RTS 9930 M1 LDA #1 ;SET DROP DONE FLAG 9940 STA GRNFNDRP 9950 STA SO3FLG 9960 LDA #$AF ;AND SOUND! 9970 STA PITCH3 9980 RTS 9990 ; 010000 GEDIRGRN LDA #1 ;SET GREEN MOVE FLAG 010010 STA GRNMOV 010020 INC GROW ;INC GREEN ROW 010030 INC GROW 010040 LDA RANDOM ;GET RANDOM COL MOVE 010050 BMI N1 010060 LDA #0 ;DOWN & RIGHT 010070 STA GRNDIR 010080 INC GCOL ;INCREMENT COLUMN 010090 JSR GRN0 ;DRAW FACING RIGHT 010100 JMP MOVEGRN ;AND MOVE HIM! 010110 N1 LDA #1 ;DOWN & LEFT 010120 STA GRNDIR 010130 DEC GCOL ;DEC COLUMN 010140 JSR GRN1 ;DRAW FACING LEFT 010150 ; 010160 MOVEGRN LDA GRNDIR ;GET DIRECTION 010170 CMP #1 ;DOWN & LEFT? 010180 BNE O1 ;NO! 010190 JMP DNLEFT2 ;MOVE IT! 010200 O1 JMP DNRIGHT2 ;DITTO! 010210 ; 010220 ;---------- 010230 ;ROCK 3 SUB 010240 ;---------- 010250 ROCK3 LDA SO4FLG ;SOUND ON? 010260 CMP #1 010270 BNE P1 ;NO! 010280 RTS 010290 P1 LDA GRGFLG ;GEORGE ON? 010300 CMP #1 010310 BNE P2 ;NO! 010320 JMP GEORGE ;HANDLE GEORGE 010330 P2 LDA BAL2FLG ;ROCK 2 OUT? 010340 CMP #1 010350 BNE P3 ;NO! 010360 JMP MOVBAL3 ;MOVE ROCK 3 010370 P3 LDA ROUND ;GET ROUND 010380 CMP #3 ;ROUND 3/4? 010390 BCS GRGCAN ;YES, BRING OUT GEORGE! 010400 JMP MOVBAL3 ;MOVE ROCK 3! 010410 ; 010420 GRGCAN LDA OUTFLG ;CAN GEORGE...