05 ;********************* 06 ;* COSMIC GLOB * 07 ;* [C] * 08 ;* BY RICH B. ENNS * 09 ;********************* 20 .OPT OBJ 40 .OPT NO LIST 60 *= 128 80 DLLO 2 ;ZERO PAGE DLIST 0100 SCLO 2 ;ADDER FOR GR.7 0120 MIS0MOVE 2 ;MIS.0 VERTMOVE 0140 MIS1MOVE 2 0160 MIS2MOVE 2 0180 PM0MOVE 2 ;PM0 VERTMOVE 0200 PM1MOVE 2 0220 PM2MOVE 2 0240 PM3MOVE 2 0260 PM2AUX 2 ;PM2 AUXILLIARY 0280 PM3AUX 2 0300 PMPLOT 2 ;PM DATA PLOT 0320 PM0BLOCK 2 ;PM0 START SCREEN 0340 PM1BLOCK 2 0360 TURNDIR 1 ;ROTATION DIR. 0380 PMSETUP 1 ;PMBASE SHADOW 0400 PM0GYRO 1 ;PM0 DIR. ANGLE 0420 PM1GYRO 1 0440 PMINDEX 1 ;GYRO MULTIPLYER 0460 TSTORE0 1 ;TEMPORARY 0480 TSTORE1 1 ;STORING 0500 TSTORE2 1 ;LOCATIONS 0520 TSTORE3 1 ;0-3 FOR 0540 TSTORE4 1 ;VB ROUTINES 0560 TSTORE5 1 ;4-7 FOR NORMAL 0580 TSTORE6 1 ;ROUTINES 0600 TSTORE7 1 0620 ROTTIME0 1 ;PM0 TURN DELAY 0640 ROTTIME1 1 0660 PM0SPEED 1 ;PM0 MOVE CTRL 0680 PM1SPEED 1 0700 HPM0 1 ;PM0 H. SHADOW 0720 HPM1 1 0740 HPM2 1 0760 HPM3 1 0780 HMS0 1 ;MIS.0 H. SHADOW 0800 HMS1 1 0820 MSTATUS0 1 ;M0 FIRE STATUS 0840 MSTATUS1 1 0860 MIS0GYRO 1 ;MIS.0 VECTOR 0880 MIS1GYRO 1 0900 GLOBGYRO 1 ;GLOB VECTOR 0920 DLITIME 1 ;DLI VB DELAY 0940 CTRLSTOP0 1 ;PM0 OVERRIDE 0960 CTRLSTOP1 1 0980 FLIPTIME0 1 ;PM0 FLIP DELAY 1000 FLIPTIME1 1 1020 FLYGYRO 1 ;FLY DIRECTION 1040 HMS2 1 ;MIS2 H. SHADOW 1060 HMS3 1 1080 FLYTIME 1 ;FLY VB. TIMER 1100 FLYDURATE 1 ;FLY DIR. DELAY 1120 GLOBGATE 1 ;GLOB ENABLE 1140 PLAYGATE0 1 ;PM0 ENABLE 1160 PLAYGATE1 1 1180 EXPMUSIC 1 ;EXP SOUND START 1200 SOUNDACT1 1 ;EXP SOUND CTRL 1220 NOTE1 1 ;EXP PITCH CTRL 1240 FIREMUSIC 1 ;MIS SO. START 1260 SOUNDACT2 1 ;MIS SOUND CTRL 1280 NOTE2 1 ;MIS PITCH CTRL 1300 BOUMUSIC 1 ;BOUNCE SO.START 1320 SOUNDACT3 1 ;BOUNCE SO.CTRL 1340 NOTE3 1 ;BOUNCE PI. CTRL 1360 VOL3 1 ;BOUNCE VOL CTRL 1380 SLOWFIRE0 1 ;PM0 FIRE DELAY 1400 SLOWFIRE1 1 1420 LIVES0 1 ;PM0 # OF LIVES 1440 LIVES1 1 1460 ACTTIME0 1 ;PM0 START DELAY 1480 ACTTIME1 1 1500 SFEEDLO 1 ;SCORE LO,MED 1520 SFEEDMED 1 ;& HIGH BYTE 1540 SFEEDHI 1 ;FEEDERS 1560 SCLO0 1 ;PLAYER 0 & 1 1580 SCLO1 1 ;SCORE LOC. 1600 SCMED0 1 ;LO , MED AND 1620 SCMED1 1 ;HIGH BYTES 1640 SCHI0 1 1660 SCHI1 1 1680 COL0ALT 1 ;PLAYFIELD 1700 COL1ALT 1 ;0,1 & 3 COLOR 1720 COL3ALT 1 ;DLI CHANGES 1740 APPDELAY0 1 ;SHIP APPEAR 1760 APPDELAY1 1 ;DELAY TIMERS 1780 DIFFCTRL 1 ;GLOB SPEED CTRL 1800 PSCHI0 1 1820 PSCHI1 1 1822 HITVRF0 1 ;PLAYER MISSILE 1824 HITVRF1 1 ;HIT VERIFY 1840 FLYFAST 1 ;FLY SPEED INC. 1860 NCOLORS 1 ;DLI # OF COLORS 1880 DLICOLOR1 6 ;DLI COLORS 1 1900 DLICOLOR2 6 ;DLI COLORS 2 1920 DECDIF = 1536 ;DECIMAL DIFF. INDICATOR 1940 DIFFIC = 1537 ;GLOB SPEED FLAG 1960 NUMPLAY = 1538 ;# OF PLAYERS 1980 MINEGATE = 1539 ;MINE ENABLE 2000 NUMLIFE = 1540 ;# OF SHIPS 2020 RAPFIRE = 1541 ;RAPID FIRE CTRL 2040 DIFSTEER1 = 1542 ;STEERING TYPE 2060 DIFSTEER2 = 1543 2080 CHARHOLD = 1544 ;CHAR. POINTER 2100 SDMCTL = 559 ;DMA ENABLE 2120 DLIST = 560 ;DLIST ADDRESS 2140 GPRIOR = 623 ;PM PRIORITIES 2160 STICK0 = 632 ;STICK (0) SHADOW 2180 STICK1 = 633 2200 STRIG0 = 644 ;STICK 0 FIRE 2220 STRIG1 = 645 2240 ATRACT = 77 ;ATTRACT MODE 2260 SCREENLO = 88 ;SCREEN MEMORY 2280 RAMTOP = 106 ;TOP OF FREE RAM 2300 PMBASE = 54279 ;PMBASE ADDRESS 2320 SETVBV = $E45C ;VBLANK REVECTOR 2340 RETURN = $E462 ;VBLANK RETURN 2360 HPOSP0 = 53248 ;PM0 - PM3 2380 HPOSP1 = 53249 ;HARDWARE 2400 HPOSP2 = 53250 2420 HPOSP3 = 53251 2440 HPOSM0 = 53252 ;MIS.0 - MIS.3 2460 HPOSM1 = 53253 ;HARDWARE 2480 HPOSM2 = 53254 2500 HPOSM3 = 53255 2520 HITCLR = 53278 ;COLISION CLEAR 2540 RANDOM = 53770 ;RND GENERATOR 2560 WSYNC = 54282 ;HORIZ SYNC 2580 COLPM2 = 53268 ;PM2 HARD. COLOR 2600 COLPM3 = 53269 ;PM3 HARD. COLOR 2620 COLPF0 = 53270 ;PLAYFIELD 2640 COLPF1 = 53271 ;0,1 & 3 2660 COLPF3 = 53273 ;HARDWARE 2680 GRACTL = 53277 ;GR. CONTROL 2700 CONSOL = 53279 ;FUNCTION KEYS 2720 SKCTL = 53775 ;POKEY INIT 2740 AUDCTL = 53768 ;POKEY CONTROL 2760 AUDF1 = 53760 ;V1 - V4 2780 AUDF2 = 53762 ;FREQUENCY 2800 AUDF3 = 53764 2820 AUDF4 = 53766 2840 AUDC1 = 53761 ;V1 - V4 2860 AUDC2 = 53763 ;NOTE CTRL 2880 AUDC3 = 53765 2900 AUDC4 = 53767 2920 *= $0700 2940 .SET 6,$3500 2960 JMP DEFAULT ;START OF GAME -- TAPE START=$700 / 1792 RUN=SAME 2980 LDA #0 ;DISK START=$3C00 / 15360 RUN=$3C03 / 15363 3000 STA DLLO 3020 STA SCLO ;TRANSFER GAME 3040 LDA #7 ;FROM $3C00 3060 STA DLLO+1 ;TO $700 3080 LDA #60 ;DISK ONLY 3100 STA SCLO+1 3120 LDY #0 3140 REPOSIT LDA (SCLO),Y 3160 STA (DLLO),Y ;DO TRANSFER 3180 CLC 3200 LDA DLLO 3220 ADC #1 3240 STA DLLO 3260 LDA DLLO+1 3280 ADC #0 3300 STA DLLO+1 3320 CLC 3340 LDA SCLO 3360 ADC #1 3380 STA SCLO 3400 LDA SCLO+1 3420 ADC #0 3440 STA SCLO+1 3460 LDA DLLO+1 3480 CMP #GLOBEND/256+1 3500 BNE REPOSIT 3520 JMP DEFAULT ;START GAME 3540 DLIS PHA 3560 TXA 3580 PHA 3600 TYA 3620 PHA 3640 LDY NCOLORS ;DISPLAY 3660 LDA DLICOLOR1,Y ;DLI COLORS 3680 STA WSYNC ;FOR 3700 STA COLPM2 ;PLAYERS 3720 LDA DLICOLOR2,Y ;2 & 3 3740 STA COLPM3 3760 LDA COL0ALT 3780 STA COLPF0 ;PLAYFIELD 3800 LDA COL1ALT ;COLOR 3820 STA COLPF1 ;CHANGES 3840 LDA COL3ALT 3860 STA COLPF3 3880 INC NCOLORS 3900 LDA NCOLORS 3920 CMP #6 3940 BNE DLISKIP 3960 LDA #0 3980 STA NCOLORS 4000 DLISKIP PLA 4020 TAY 4040 PLA 4060 TAX 4080 PLA 4100 RTI 4120 ;VERTICAL BLANK ROUTINES 4140 VBLANK PHA 4160 TXA 4180 PHA 4200 TYA 4220 PHA 4240 LDA #0 ;RESET BLACK 4260 STA 712 ;BACKGROUND 4280 LDA #15 4300 CMP STICK0 ;RESET ATTRACT 4320 BNE ATRESET ;MODE ONLY 4340 CMP STICK1 ;IF A STICK 4360 BEQ ATSKIP ;IS PRESSED 4380 ATRESET LDA #0 4400 STA ATRACT 4420 ATSKIP LDA NUMLIFE 4440 CMP #8 ;CHECK FOR 4460 BNE ETERNSKIP ;ENDLESS LIVES 4480 LDA #200 4500 STA LIVES0 4520 STA LIVES1 4540 ETERNSKIP LDA GLOBGATE ;IS GLOB 4560 CMP #1 ;ACTIVATED ? IF 4580 BEQ ACTIVE ;NOT THEN PASS 4600 JMP EXIT2 ;ALL ROUTINES 4620 ACTIVE LDA HPM2 ;MOVE GLOB 4640 STA HPOSP2 ;IN VBLANK 4660 LDA HPM3 ;FOR SMOOTHNESS 4680 STA HPOSP3 4700 LDY #0 4720 GLOBTRANS LDA FRAG1,Y 4740 STA (PM2MOVE),Y 4760 LDA FRAG2,Y 4780 STA (PM3MOVE),Y 4800 INY 4820 CPY #22 4840 BNE GLOBTRANS 4860 LDA #0 ;POKE EXTRA 4880 STA (PM2MOVE),Y ;ZEROS TO 4900 STA (PM3MOVE),Y ;CORRECT 4920 INY ;FOR GLOB 4940 STA (PM2MOVE),Y ;MOVING 4960 STA (PM3MOVE),Y ;FASTER 4980 SEC ;THAN VB 5000 LDA PM2MOVE 5020 SBC #2 5040 STA PM2AUX 5060 SEC 5080 LDA PM3MOVE 5100 SBC #2 5120 STA PM3AUX 5140 LDY #0 5160 LDA #0 5180 STA (PM2AUX),Y 5200 STA (PM3AUX),Y 5220 INY 5240 STA (PM2AUX),Y 5260 STA (PM3AUX),Y 5280 LDA FLYFAST ;SHOULD FLY 5300 CMP #1 ;SPEED UP ? 5320 BEQ FLYIT2 5340 FLYIT1 INC FLYTIME 5360 LDA FLYTIME 5380 CMP #2 5400 BEQ FLYIT2 5420 JMP FLYSKIP 5440 FLYIT2 LDA #0 5460 STA FLYTIME 5480 INC FLYDURATE 5500 LDA FLYDURATE 5520 CMP #60 5540 BNE FLYSTART 5560 LDA #0 5580 STA FLYDURATE 5600 LDA FLYGYRO 5620 STA TSTORE0 5640 LDA RANDOM 5660 AND #1 5680 ASL A 5700 ASL A 5720 CLC 5740 ADC TSTORE0 5760 TAY 5780 LDA FLYRIGHT,Y 5800 STA FLYGYRO 5820 FLYSTART LDY FLYGYRO 5840 HFLYMOVE CLC 5860 LDA HMS2 5880 ADC HFLYDATA,Y 5900 STA HMS2 5920 STA HPOSM2 5940 CLC 5960 LDA HMS3 5980 ADC HFLYDATA,Y 6000 STA HMS3 6020 STA HPOSM3 6040 CMP #55 6060 BEQ FLYFLIP 6080 CMP #197 6100 BEQ FLYFLIP 6120 VFLYMOVE CLC 6140 LDA MIS2MOVE 6160 ADC VFLYDATA,Y 6180 STA MIS2MOVE 6200 LDA FLYGYRO 6220 ASL A 6240 ASL A 6260 ASL A 6280 TAX 6300 LDY #0 6320 FLYPLOT LDA (MIS2MOVE),Y 6340 AND #15 6360 CLC 6380 ADC FLYDIR,X 6400 STA (MIS2MOVE),Y 6420 INX 6440 INY 6460 CPY #6 6480 BNE FLYPLOT 6500 LDA MIS2MOVE 6520 CMP #150 6540 BEQ FLYFLIP 6560 CMP #232 6580 BNE FLYSKIP 6600 FLYFLIP LDY FLYGYRO 6620 LDA FLYFLIPDAT,Y 6640 STA FLYGYRO 6660 LDA #1 6680 STA BOUMUSIC 6700 JMP FLYSTART 6720 FLYSKIP INC DLITIME 6740 LDA DLITIME 6760 CMP #12 6780 BNE RDLISKIP 6800 LDA #0 6820 STA DLITIME 6840 LDX #0 6860 LDY DLICOLOR1 6880 COLROT1 LDA DLICOLOR1+1,X 6900 STA DLICOLOR1,X ;ROTATE 6920 INX ;DLI COLORS 6940 CPX #5 6960 BNE COLROT1 6980 STY DLICOLOR1+5 7000 LDX #4 7020 LDY DLICOLOR2+5 7040 COLROT2 LDA DLICOLOR2,X 7060 STA DLICOLOR2+1,X 7080 DEX 7100 CPX #255 7120 BNE COLROT2 7140 STY DLICOLOR2 7160 RDLISKIP LDA #0 ;ONLY RUMBLE 7180 CMP ACTTIME0 ;IF NO SHIP 7200 BNE PMACTIVE ;IS FORMING 7220 CMP ACTTIME1 7240 BNE PMACTIVE 7260 LDA #1 ;CHECK IF 7280 CMP PM0SPEED ;EITHER SHIP 7300 BEQ RUMBLEON ;IS MOVING 7320 CMP PM1SPEED ;IF SO NAKE 7340 BNE RUMBLEOFF ;RUMBLE 7360 RUMBLEON LDA #3 7380 STA SKCTL 7400 LDA #129 7420 STA AUDCTL ;TURN ON 7440 LDA #130 ;RUMBLE 7460 STA AUDC4 7480 LDA #9 7500 STA AUDF4 7520 JMP PMACTIVE 7540 RUMBLEOFF LDA #0 ;TURN OFF 7560 STA AUDC4 ;RUMBLE 7580 STA AUDF4 7600 PMACTIVE LDX #0 ;ACTIVATE SHIPS 7620 ACTLOOP LDA LIVES0,X ;CHECK IF 7640 CMP #0 ;LIVES ALL 7660 BEQ NEXTACT ;USED UP 7680 LDA PLAYGATE0,X ;CHECK IF 7700 CMP #1 ;SHIP ALREADY 7720 BEQ NEXTACT ;ACTIVATED 7740 LDA APPDELAY0,X ;CHECK 7760 CMP #0 ;DESTRUCT-TO 7780 BEQ GETSTICK ;-ACTIVATE 7800 DEC APPDELAY0,X ;DELAY TIMER 7820 JMP NEXTACT 7840 GETSTICK LDA STICK0,X 7860 CMP #15 ;START SHIP IF 7880 BNE GOSHIP ;STICK PRESSED 7900 TIMEUP INC ACTTIME0,X 7920 JSR BLOCKPLOT 7940 LDA ACTTIME0,X ;START SHIP 7960 CMP #255 ;IF TIME ELAPSED 7980 BNE NEXTACT 8000 GOSHIP LDA #0 ;START SHIP & 8020 STA ACTTIME0,X ;RESET TIMER 8040 STA PM0GYRO,X ;& DIRECTION 8060 STA SLOWFIRE0,X ;& TRIGGER 8080 JSR BLOCKPLOT 8100 TXA 8120 ASL A 8140 TAY ;VERTICAL 8160 LDA VACT,X ;START POS. 8180 STA PM0MOVE,Y ;OF SHIP 8200 STA PMPLOT 8220 LDA PM0MOVE+1,Y 8240 STA PMPLOT+1 8260 STX TSTORE0 8280 LDX #0 8300 LDY #0 8320 STY AUDC4 ;TURN OFF SOUND 8340 ACTPLOT LDA SHIP,X ;PLOT SHIP 8360 STA (PMPLOT),Y 8380 INX 8400 INY 8420 CPY #10 8440 BNE ACTPLOT 8460 LDX TSTORE0 8480 LDA HACT,X ;HORIZONTAL 8500 STA HPM0,X ;START POS. 8520 STA HPOSP0,X ;OF SHIP 8540 LDA #1 ;OPEN ACTIVE 8560 STA PLAYGATE0,X ;GATE 8580 NEXTACT INX 8600 CPX NUMPLAY ;1 OR 2 PLAYERS 8620 BEQ MOVEOBJ 8640 JMP ACTLOOP 8660 MOVEOBJ LDX #0 8680 LDY #0 8700 PMRIGHT LDA PLAYGATE0,X ;CHECK 8720 CMP #1 ;IF PLAYER 8740 BEQ PMRIGHT1 ;TURNED ON 8760 JMP NEXTTURN 8780 PMRIGHT1 LDA CTRLSTOP0,X ;CHECK 8800 CMP #0 ;IF TO 8820 BEQ STICKREAD ;BYPASS 8840 DEC CTRLSTOP0,X ;PLAYER 8860 JMP NEXTTURN ;CONTROL 8880 STICKREAD LDA DIFSTEER1,X ;CHECK 8900 CMP #0 ;WHICH METHOD 8920 BNE STICKREAD3 ;OF CONTROL 8940 LDA STICK0,X 8960 CMP #15 ;STICK PRESSED 8980 BNE STICKREAD2 9000 LDA #0 9020 STA PM0SPEED,X 9040 STICKREAD4 JMP NEXTTURN 9060 STICKREAD2 STY TSTORE0 9080 TAY ;DO DIRECT 9100 LDA STICKGYRO,Y ;CONTROL. 9120 STA PM0GYRO,X 9140 LDA #1 9160 STA PM0SPEED,X 9180 LDY TSTORE0 9200 JMP NEXTTURN 9220 STICKREAD3 INC ROTTIME0,X 9240 LDA ROTTIME0,X ;CHECK 9260 CMP #5 ;TIMER TO 9280 BNE SHIPFLIP ;SLOW DOWN SHIP 9300 LDA #0 ;ROTATION 9320 STA ROTTIME0,X 9340 LDA STICK0,X ;CHECK 9360 AND #8 ;IF SHIPS 9380 BNE PMLEFT ;ROTATED 9400 LDA #1 9420 STA TURNDIR 9440 JSR ROTATE 9460 PMLEFT LDA STICK0,X 9480 AND #4 9500 BNE SHIPFLIP 9520 LDA #255 9540 STA TURNDIR 9560 JSR ROTATE 9580 SHIPFLIP LDA FLIPTIME0,X 9600 CMP #0 ;SLOW DOWN 9620 BEQ FLIPIT ;SHIP FLIP 9640 DEC FLIPTIME0,X 9660 JMP SPEEDUP 9680 FLIPIT LDA STICK0,X ;FLIP 9700 CMP #13 ;SHIPS 9720 BNE SPEEDUP 9740 LDA PM0GYRO,X ;GET FLIP 9760 TAY ;VECTOR 9780 LDA FLIPDATA,Y 9800 STA PM0GYRO,X 9820 TXA 9840 ASL A 9860 TAY 9880 JSR DOUBLE2 ;DRAW FLIPPED 9900 LDA #40 ;SHIP 9920 STA FLIPTIME0,X 9940 SPEEDUP LDA #0 ;MOVE SHIP 9960 STA PM0SPEED,X 9980 LDA STICK0,X 010000 AND #1 010020 BNE NEXTTURN 010040 LDA #1 010060 STA PM0SPEED,X 010080 NEXTTURN INX 010100 INY 010120 INY 010140 CPX #2 010160 BEQ MOVEIT 010180 JMP PMRIGHT 010200 MOVEIT LDX #0 010220 MOVELOOP LDA STRIG0,X ;TRIGGER 010240 CMP #1 ;PRESSED OR 010260 BNE RAPSKIP ;RESET ? 010280 STA SLOWFIRE0,X 010300 RAPSKIP LDA PM0SPEED,X ;CHECK 010320 CMP #1 ;IF SHIP 010340 BEQ VECINSERT ;SHOULD MOVE 010360 JMP NEXTMOVE 010380 VECINSERT LDY PM0GYRO,X 010400 STY TSTORE2 010420 HORIZ CLC 010440 LDA HPM0,X 010460 ADC HMOVE,Y 010480 STA HPM0,X ;HORIZ 010500 STA HPOSP0,X ;MOVEMENT 010520 CMP #55 ;CHECK RANGE 010540 BEQ HVECSHIFT 010560 CMP #193 010580 BNE HVSKIP 010600 HVECSHIFT LDY PM0GYRO,X ;INSERT 010620 LDA HBOUNCE,Y ;BOUNCE 010640 STA PM0GYRO,X ;VECTORS 010660 LDA #1 010680 STA BOUMUSIC ;SOUND 010700 LDA DIFSTEER1,X 010720 CMP #0 010740 BNE HVECSHIFT2 010760 LDA #3 010780 STA CTRLSTOP0,X 010800 HVECSHIFT2 JMP VECINSERT 010820 HVSKIP TXA 010840 ASL A 010860 TAX 010880 VERT LDY TSTORE2 010900 CLC 010920 LDA PM0MOVE,X 010940 ADC VMOVE,Y 010960 STA PM0MOVE,X 010980 STA PMPLOT ;VERTICAL 011000 LDA PM0MOVE+1,X ;MOVEMENT 011020 STA PMPLOT+1 011040 TXA 011060 LSR A 011080 TAX 011100 LDA PM0GYRO,X ;SET UP FOR 011120 ASL A ;CORRECT 011140 ASL A ;SHIP IMAGE 011160 ASL A ;ACCORDING 011180 ASL A ;TO DIRECTION 011200 STX TSTORE0 011220 TAX 011240 LDY #0 011260 DRAWSHIP LDA SHIP,X ;DRAW THE 011280 STA (PMPLOT),Y ;SHIP 011300 INX 011320 INY 011340 CPY #10 011360 BNE DRAWSHIP 011380 LDX TSTORE0 011400 TXA 011420 ASL A 011440 TAX 011460 LDA PM0MOVE,X ;CHECK FOR 011480 CMP VLIMIT1,X ;VERTICAL 011500 BEQ VVECSHIFT ;RANGE 011520 CMP VLIMIT2,X 011540 BNE VVSKIP 011560 VVECSHIFT TXA 011580 LSR A 011600 TAX 011620 LDY PM0GYRO,X ;INSERT 011640 LDA VBOUNCE,Y ;BOUNCE 011660 STA PM0GYRO,X ;VECTORS 011680 LDA #1 011700 STA BOUMUSIC 011720 LDA DIFSTEER1,X 011740 CMP #0 011760 BNE VVECSHIFT2 011780 LDA #3 011800 STA CTRLSTOP0,X 011820 VVECSHIFT2 JMP VECINSERT 011840 VVSKIP TXA 011860 LSR A 011880 TAX 011900 NEXTMOVE INX 011920 CPX #2 011940 BEQ PLAYERHIT 011960 JMP MOVELOOP 011980 PLAYERHIT LDY #0 012000 LDX #1 012020 PLAYLOOP LDA 53260,Y ;CHECK 012040 AND #12 ;IF SHIP 012060 BNE HITPREP ;HIT GLOB 012080 LDA 53252,Y 012100 AND #4 ;SHIP HIT 012120 BNE HITPREP ;MINE ? 012140 STY TSTORE0 012160 INC TSTORE0 012180 LDA 53258 ;SHIP HIT 012200 AND TSTORE0 ;FLY ? 012220 BNE HITPREP 012240 LDA 53259 ;(BOTH SIDES) 012260 AND TSTORE0 012280 BNE HITPREP 012300 JMP HITRETRY 012320 HITPREP LDA #0 ;DISABLE 012340 STA PLAYGATE0,Y ;HIT SHIP 012360 STA ACTTIME0,Y 012380 STA PM0SPEED,Y ;& MOVEMENT 012400 STA FLIPTIME0,Y 012420 LDA CTRLSTOP0,Y 012440 CMP #0 012460 BEQ PREPSKIP 012466 LDA HITVRF0,X 012468 CMP #0 012470 BEQ PREPSKIP 012480 SED 012500 CLC 012520 LDA SCMED0,X 012540 ADC #2 012560 STA SCMED0,X 012580 LDA SCHI0,X 012600 ADC #0 012620 STA SCHI0,X 012640 CLD 012644 LDA #0 012646 STA HITVRF0,X 012660 PREPSKIP LDA #150 ;SET SHIP 012680 STA APPDELAY0,Y ;APPEAR DEL. 012700 LDA COL1ALT 012720 STA 712 ;BRIGHT BACK. 012740 SEC ;SUBTRACT 012760 LDA LIVES0,Y ;ONE LIFE 012780 SBC #1 012800 STA LIVES0,Y 012820 LDA #1 ;ENABLE DESTROY 012840 STA EXPMUSIC ;SUBROUTINE 012860 STY TSTORE1 012880 TYA 012900 ASL A 012920 TAY 012940 LDA PM0MOVE,Y 012960 STA PMPLOT 012980 LDA PM0MOVE+1,Y 013000 STA PMPLOT+1 013020 LDY #0 013040 PLCLEAR LDA #0 013060 STA (PMPLOT),Y 013080 INY 013100 CPY #10 013120 BNE PLCLEAR 013140 LDA #0 013160 STA HITCLR 013180 LDY TSTORE1 013200 HITRETRY INY 013220 DEX 013240 CPY #2 013260 BEQ FIRING 013280 JMP PLAYLOOP 013300 FIRING ; MISSILE FIRING 013320 LDX #0 013340 MISSLOOP LDA PLAYGATE0,X 013360 CMP #1 ;CHECK IF 013380 BNE NEXTFIRE ;SHIP GONE 013400 LDA MSTATUS0,X ;CHECK 013420 CMP #0 ;IF MISSILE IN 013440 BNE NEXTFIRE ;MOTION 013460 LDA RAPFIRE 013480 CMP #0 ;RAPID FIRE ON ? 013500 BNE RAPPSKIP 013520 LDA SLOWFIRE0,X ;CHECK IF 013540 CMP #1 ;BUTTON RELEASED 013560 BNE NEXTFIRE ;BEFORE FIRING 013580 RAPPSKIP LDA STRIG0,X 013600 CMP #0 ;BUTTON PRESSED 013620 BNE NEXTFIRE 013640 STA SLOWFIRE0,X ;PRESSED 013660 LDA PM0GYRO,X 013680 STA MIS0GYRO,X 013700 TAY 013720 CLC 013740 LDA HPM0,X 013760 HFIRE ADC HMISSILE,Y ;HSTART 013780 STA HMS0,X 013800 TXA 013820 ASL A 013840 TAX 013860 CLC 013880 LDA PM0MOVE,X 013900 ADC MALIGN,X 013920 STA MIS0MOVE,X 013940 CLC 013960 LDA MIS0MOVE,X 013980 VFIRE ADC VMISSILE,Y ;VSTART 014000 STA MIS0MOVE,X 014020 TXA 014040 LSR A 014060 TAX 014080 LDA #1 014100 STA MSTATUS0,X 014120 STA FIREMUSIC ;TURN ON NOISE 014140 NEXTFIRE INX 014160 CPX #2 014180 BNE MISSLOOP 014200 LDX #0 014220 MTRAVEL STX TSTORE1 014240 LDX #0 014260 ADVLOOP LDA MSTATUS0,X ;CHECK 014280 CMP #1 ;IF MISSILE 014300 BEQ VECADV ;FIRED 014320 JMP NEXTINC 014340 VECADV LDY MIS0GYRO,X 014360 STY TSTORE2 014380 HADV CLC 014400 LDA HMS0,X 014420 ADC HMOVE,Y 014440 STA HMS0,X 014460 STA HPOSM0,X 014480 TXA 014500 TAY 014520 ASL A 014540 TAX 014560 LDA HMS0,Y ;CHECK IF 014580 CMP #56 ;HORIZONTALY 014600 BEQ VCAN ;OUT OF RANGE 014620 CMP #199 014640 BEQ VCAN 014660 VADV LDY TSTORE2 014680 CLC 014700 LDA MIS0MOVE,X 014720 ADC VMOVE,Y 014740 STA MIS0MOVE,X 014760 STA PMPLOT 014780 LDA MIS0MOVE+1,X 014800 STA PMPLOT+1 014820 LDY #0 014840 LDA (PMPLOT),Y ;PLOT ONE 014860 AND MSAVE,X ;MISSILE 014880 STA (PMPLOT),Y ;WITHOUT 014900 INY ;DISTURBING 014920 LDA (PMPLOT),Y ;THE OTHER 014940 AND MSAVE,X 014960 CLC 014980 ADC MSHAPE,X 015000 STA (PMPLOT),Y 015020 INY 015040 LDA (PMPLOT),Y 015060 AND MSAVE,X 015080 STA (PMPLOT),Y 015100 LDA MIS0MOVE,X ;CHECK IF 015120 CMP #151 ;VERTICALLY 015140 BEQ VCAN ;OUT OF 015160 CMP #234 ;RANGE 015180 BNE MVCONT 015200 VCAN JSR MISDEL ;GO TO 015220 TXA ;CLEAR 015240 LSR A ;MISSILE 015260 TAX ;SUBROUTINE 015280 LDA #0 015300 STA MSTATUS0,X 015320 JMP NEXTINC 015340 MVCONT TXA ;CHECK IF 015360 LSR A ;MISSILE IN 015380 TAX ;HORIZONTAL 015400 LDA HMS0,X ;RANGE OF GLOB 015420 CMP HPM2 015440 BCC DESTSKIP 015460 CLC 015480 LDA HPM2 015500 ADC #31 015520 CMP HMS0,X 015540 BCC DESTSKIP 015560 LDA HMS0,X 015580 CMP HPM3 015600 BCC GDESLEFT 015620 JMP GDESRIGHT 015640 DESTSKIP JMP NEXTINC 015660 GDESLEFT SEC 015680 LDA HMS0,X 015700 SBC HPM2 015720 LSR A 015740 TAY 015760 TXA ;LEFT 015780 ASL A ;MISSILE 015800 TAX ;MEMORY 015820 SEC ;ALIGNMENT 015840 LDA MIS0MOVE,X 015860 SBC #127 015880 STA PMPLOT 015900 JMP GDESTRUCT 015920 GDESRIGHT SEC 015940 LDA HMS0,X 015960 SBC HPM3 015980 LSR A 016000 TAY 016020 TXA ;RIGHT 016040 ASL A ;MISSILE 016060 TAX ;MEMORY 016080 CLC ;ALAIGNMENT 016100 LDA MIS0MOVE,X 016120 ADC #1 016140 STA PMPLOT 016160 GDESTRUCT LDA PM3MOVE+1 016180 STA PMPLOT+1 016200 STX TSTORE2 016220 LDX #0 016240 LDA (PMPLOT,X) 016260 AND BITMASK,Y 016280 BNE GLOBCHUNK 016300 LDX TSTORE2 016320 TXA ;MISSILE 016340 LSR A ;VERTICALLY 016360 TAX ;IN RANGE OF 016380 JMP NEXTINC ;GLOB 016400 GLOBCHUNK LDA (PMPLOT,X) 016420 AND SCRATCH,Y 016440 STA (PMPLOT,X) 016460 LDX TSTORE2 016480 SEC 016500 LDA MIS0MOVE,X 016520 SBC PM3MOVE 016540 CLC 016560 ADC #1 016580 TAY 016600 LDA (PM2MOVE),Y 016620 STA FRAG1,Y 016640 LDA (PM3MOVE),Y 016660 STA FRAG2,Y 016680 JSR MISDEL ;CAN MISSILE 016700 TXA 016720 LSR A 016740 TAX 016760 LDA #0 016780 STA MSTATUS0,X 016800 SED ;GIVE CREDIT 016820 CLC ;1 POINT 016840 LDA SCLO0,X 016860 ADC #1 016880 STA SCLO0,X 016900 LDA SCMED0,X 016920 ADC #0 016940 STA SCMED0,X 016960 LDA SCHI0,X 016980 ADC #0 017000 STA SCHI0,X 017020 CLD 017040 LDY #0 ;CENTER OF GLOB HIT ? 017060 GLOBCLEAR LDA FRAG1+9,Y 017080 AND LCLEAR,Y ;CHECK IF ANY 017100 BEQ GOCLEAR ;RIGHT AND 017120 LDA FRAG2+9,Y ;LEFT CENTER 017140 AND RCLEAR,Y ;BIT IS GONE 017160 BNE CLRNEXT 017180 GOCLEAR LDA #0 ;TURN OFF GLOB 017200 STA GLOBGATE 017220 STA PLAYGATE0 ;TURN OFF 017240 STA PLAYGATE1 ;BOTH SHIPS 017260 STA PM0SPEED ;TURN OFF SHIP 017280 STA PM1SPEED ;MOVEMENT 017300 STA MSTATUS0 ;TURN OFF 017320 STA MSTATUS1 ;ALL MISSILES 017340 STA AUDC4 ;TURN OFF 017360 STA AUDC3 ;SOUNDS 017380 STA AUDC2 017400 STA AUDC1 017420 SED ;GIVE CREDIT 017440 CLC ;500 POINTS 017460 LDA SCMED0,X 017480 ADC #5 017500 STA SCMED0,X 017520 LDA SCHI0,X 017540 ADC #0 017560 STA SCHI0,X 017580 CLD 017600 LDX #0 017620 JSR MISDEL ;CLEAR ALL 017640 LDX #2 ;MISSILES 017660 JSR MISDEL 017680 JMP EXIT ;LEAVE VBLANK 017700 CLRNEXT INY 017720 CPY #4 017740 BNE GLOBCLEAR 017760 NEXTINC INX 017780 CPX #2 017800 BEQ PCOLIDE 017820 JMP ADVLOOP 017840 PCOLIDE LDX #0 017860 LDY #1 017880 PCLOOP LDA 53248,X ;CHECK 017900 AND #5 ;IF MISSILE 017920 BEQ PCO ;HIT MINES 017940 STX TSTORE3 017960 LDX #0 017980 GLOBREPLOT LDA GLOB1,X 018000 STA FRAG1,X ;RESTORE GLOB 018020 LDA GLOB2,X ;IF MINE HIT 018040 STA FRAG2,X 018060 INX 018080 CPX #22 018100 BNE GLOBREPLOT 018120 LDX TSTORE3 018140 LDA #1 018160 STA EXPMUSIC 018180 JMP MLLCLEAR 018200 PCO LDA 53256,X ;CHECK IF 018220 AND PCOLDATA,X ;MISSILE 018240 BEQ PCOLSKIP ;HIT OTHER 018260 LDA #1 ;PLAYER 018280 STA PM0SPEED,Y 018300 STA BOUMUSIC ;SOUND 018320 LDA #20 018340 STA CTRLSTOP0,Y 018360 LDA MIS0GYRO,X ;BOUNCE 018380 STA PM0GYRO,Y ;SHIP IN 018400 MLLCLEAR LDA #0 ;DIRECTION 018420 STA MSTATUS0,X ;OF MISSILE 018422 LDA #1 018424 STA HITVRF0,X 018480 STY TSTORE0 018500 TXA 018520 ASL A 018540 TAX 018560 JSR MISDEL ;CLEAR MISSILE 018580 LDA #0 018600 STA HITCLR 018620 TXA 018640 LSR A 018660 TAX 018680 LDY TSTORE0 018700 PCOLSKIP DEY 018720 INX 018740 CPX #2 018760 BNE PCLOOP 018780 LDX TSTORE1 018800 INX 018820 CPX #2 018840 BEQ EXPLOSION 018860 JMP MTRAVEL 018880 EXPLOSION LDA EXPMUSIC ;CHECK 018900 CMP #1 ;IF SOUND 018920 BEQ EXPBEGIN ;SHOULD START 018940 LDA SOUNDACT1 ;CHECK IF 018960 CMP #1 ;SOUND GOING 018980 BEQ NOISE1 019000 JMP MISNOISE 019020 EXPBEGIN LDA #0 019040 STA EXPMUSIC ;RESET & 019060 LDA #1 ;ENABLE AUTO 019080 STA SOUNDACT1 ;CONTROL 019100 LDA #3 019120 STA SKCTL ;INIT POKEY 019140 LDA #129 019160 STA AUDCTL ;SET SO. CTRL 019180 LDA #47 019200 STA AUDC1 ;SET VOL.& DIST. 019220 LDA #4 019240 STA NOTE1 ;START V1 SHADOW 019260 NOISE1 INC NOTE1 ;MAKE 019280 LDA NOTE1 019300 STA AUDF1 019320 CMP #52 ;CHECK IF 019340 BNE MISNOISE ;DONE 019360 LDA #0 019380 STA AUDF1 ;TURN OFF 019400 STA AUDC1 ;SOUND 019420 STA SOUNDACT1 019440 MISNOISE LDA FIREMUSIC 019460 CMP #1 019480 BEQ FIREBEGIN ;SEE 019500 LDA SOUNDACT2 ;EXPLOSION 019520 CMP #1 ;FOR INFO 019540 BEQ NOISE2 019560 JMP BOUNOISE 019580 FIREBEGIN LDA #0 019600 STA FIREMUSIC 019620 LDA #1 019640 STA SOUNDACT2 019660 LDA #3 019680 STA SKCTL 019700 LDA #129 019720 STA AUDCTL 019740 LDA #135 019760 STA AUDC2 019780 LDA #255 019800 STA NOTE2 019820 NOISE2 INC NOTE2 019840 LDA NOTE2 019860 STA NOTE2 019880 STA AUDF2 019900 CMP #15 019920 BNE BOUNOISE 019940 LDA #0 019960 STA AUDC2 019980 STA AUDF2 020000 STA SOUNDACT2 020020 BOUNOISE LDA BOUMUSIC 020040 CMP #1 020060 BEQ BOUBEGIN 020080 LDA SOUNDACT3 020100 CMP #1 020120 BEQ NOISE3 020140 JMP EXIT 020160 BOUBEGIN LDA #0 020180 STA BOUMUSIC 020200 LDA #1 020220 STA SOUNDACT3 020240 LDA #3 020260 STA SKCTL 020280 LDA #129 020300 STA AUDCTL 020320 LDA RANDOM 020340 AND #15 020360 CLC 020380 ADC #10 020400 STA NOTE3 020420 LDA #17 020440 STA VOL3 020460 NOISE3 DEC VOL3 020480 DEC VOL3 020500 CLC 020520 LDA VOL3 020540 ADC #160 020560 STA AUDC3 020580 LDA VOL3 020600 ASL A 020620 ASL A 020640 CLC 020660 ADC NOTE3 020680 STA AUDF3 020700 LDA VOL3 020720 CMP #255 020740 BNE EXIT 020760 LDA #0 020780 STA AUDC3 020800 STA AUDF3 020820 STA SOUNDACT3 020840 EXIT LDX #0 ;UPDATE 020860 JSR FEEDTRANS ;SCORES 020880 LDX #1 020900 JSR FEEDTRANS 020920 EXIT2 PLA 020940 TAY 020960 PLA 020980 TAX 021000 PLA 021020 JMP RETURN 021040 ROTATE ; SHIP ROTATION 021060 CLC 021080 LDA PM0GYRO,X 021100 ADC TURNDIR 021120 STA PM0GYRO,X 021140 CMP #8 021160 BNE DOUBLE1 021180 LDA #0 021200 STA PM0GYRO,X 021220 DOUBLE1 CMP #255 021240 BNE DOUBLE2 021260 LDA #7 021280 STA PM0GYRO,X 021300 DOUBLE2 LDA PM0GYRO,X 021320 ASL A 021340 ASL A 021360 ASL A 021380 ASL A 021400 STA PMINDEX 021420 STX TSTORE0 021440 LDA PM0MOVE,Y 021460 STA PMPLOT 021480 LDA PM0MOVE+1,Y 021500 STA PMPLOT+1 021520 STY TSTORE1 021540 LDA PMINDEX 021560 TAX 021580 LDY #0 021600 PLOTLOOP LDA SHIP,X 021620 STA (PMPLOT),Y 021640 INX 021660 INY 021680 CPY #10 021700 BNE PLOTLOOP 021720 LDX TSTORE0 021740 LDY TSTORE1 021760 RTS 021780 MISDEL LDA MIS0MOVE,X ;CLEAR 021800 STA PMPLOT ;MISSILE 021820 LDA MIS0MOVE+1,X ;SUBROUTINE 021840 STA PMPLOT+1 021860 LDY #0 021880 CLEARIT LDA (PMPLOT),Y 021900 AND MSAVE,X 021920 STA (PMPLOT),Y 021940 INY 021960 CPY #3 021980 BNE CLEARIT 022000 RTS 022020 BLOCKPLOT ; SHIP START DESIGN 022040 TXA 022060 ASL A 022080 TAY 022100 LDA PM0BLOCK,Y 022120 STA PMPLOT 022140 LDA PM0BLOCK+1,Y 022160 STA PMPLOT+1 022180 LDA #134 022200 STA AUDC4 022220 LDA ACTTIME0,X 022240 AND #170 022260 STA TSTORE1 022280 LDA ACTTIME0,X 022300 EOR #255 022320 LSR A 022340 LSR A 022360 STA AUDF4 022380 STX TSTORE0 022400 LDX #0 022420 BLOCKLOOP1 LDY #0 022440 BLOCKLOOP2 LDA TSTORE1 022460 STA (PMPLOT),Y 022480 INY 022500 CPY #3 022520 BNE BLOCKLOOP2 022540 CLC 022560 LDA PMPLOT 022580 ADC #80 022600 STA PMPLOT 022620 LDA PMPLOT+1 022640 ADC #0 022660 STA PMPLOT+1 022680 INX 022700 CPX #6 022720 BNE BLOCKLOOP1 022740 LDX TSTORE0 022760 RTS 022780 HMOVE .BYTE 0,1,1,1,0,255,255,255 022800 VMOVE .BYTE 255,255,0,1,1,1,0,255 022820 VLIMIT1 .BYTE 22,0,150,0 022840 VLIMIT2 .BYTE 100,0,228,0 022860 HACT .BYTE 58,190 022880 VACT .BYTE 97,225 022900 HBOUNCE .BYTE 4,7,6,5,0,3,2,1 022920 VBOUNCE .BYTE 4,3,6,1,0,7,2,5 022940 HMISSILE .BYTE 4,2,2,2,3,5,5,5 022960 VMISSILE .BYTE 5,5,4,2,2,2,3,5 022980 MSHAPE .BYTE 2,0,8,0 023000 MALIGN .BYTE 128,0,0,0 023020 MSAVE .BYTE 252,0,243,0 023040 PCOLDATA .BYTE 2,1 023060 HITTHROW .BYTE 4,5,6,7,0,1,2,3 023080 FLIPDATA .BYTE 4,5,6,7,0,1,2,3 023100 BITMASK .BYTE 128,64,32,16,8,4,2,1 023120 SCRATCH .BYTE 127,191,223,239,247,251,253,254 023140 HFLYDATA .BYTE 0,1,0,255 023160 VFLYDATA .BYTE 255,0,1,0 023180 FLYFLIPDAT .BYTE 2,3,0,1 023200 FLYDIR .BYTE 0,144,144,240,96,0,0,0,0,112,192,192,112,0,0,0 023220 .BYTE 0,96,240,144,144,0,0,0,0,224,48,48,224,0,0,0 023240 FLYRIGHT .BYTE 3,0,1,2,1,2,3,0 023260 LCLEAR .BYTE 1,2,2,1 023280 RCLEAR .BYTE 128,64,64,128 023300 STICKGYRO .BYTE 0,0,0,0,0,3,1,2,0,5,7,6,0,4,0,0,0 023320 .INCLUDE #D:GLOB2.ASM