01 .OPT NO LIST 02 ; 03 ; ************************* 04 ; * FIREBUG * 05 ; * by Kyle Peacock * 06 ; * & Tom Hudson * 07 ; * ANALOG Computing * 08 ; * All Rights Reserved * 09 ; ************************* 10 ; 11 ; Redefined Characters by 12 ; Jon Bell -- 6/26/84 13 ; 14 ; CONSTANTS 15 ; 16 GAMESET = $0400 ;CHARACTER SET 17 PLAYBS = $00 ;P/M BASE ADDR. 18 SCREENBASE = $2000 ;BOARD RAM. 19 MISS = PLAYBS+768 ;MISSILEs 20 BOMB = 15 21 ; 22 ; ZERO PAGE USAGE 23 ; 24 *= $80 25 LO *= *+2 ;2-BYTE POINTERS 26 BMB *= *+2 27 ZLO *= *+2 ;Z-PAGE POINTER. 28 LOW *= *+2 ;Z-PGAE POINTER. 29 HLO *= *+2 30 DRWLO *= *+2 ;CHAR DATA PNTR. 31 PLLO *= *+2 ;CHAR WORK PNTR. 32 ADL *= *+2 33 ELO *= *+2 34 ELO2 *= *+2 35 BLO *= *+2 36 BLO2 *= *+2 37 BUGL *= *+2 ;FIREBUG X & Y. 38 SCORE *= *+3 ;BCD SCORE VALUE 39 SCOADD *= *+3 ;SCORE ADD VALUE 40 HBIT *= *+1 ;HSCROL RAM COPY 41 VBIT *= *+1 ;VSCROL RAM COPY 42 DIGGIN *= *+1 ;DIGGING FLAG 43 CHANGE1 *= *+1 ;MATING SOUND 1. 44 CHANGE2 *= *+1 ;MATING SOUND 2. 45 BULLNOISE *= *+1 ;BULLET NOISE 46 BOOMNOISE *= *+1 ;BULLET NOISE 47 NOBULL *= *+2 ;SPARKS FIRED. 48 BULLX *= *+4 ;SPARK X-COORD. 49 BULLY *= *+4 ;SPARK Y-COORD. 50 BULLDIR *= *+4 ;SPARK DIRECT. 51 BULLTIME *= *+4 ;SPARK LIFE 52 BULLPNT *= *+1 ;BAR LINE PNTR. 53 PLAYNO *= *+1 ;PLAYER UP. 54 STARTLEVEL *= *+1 ;STARTING LVL. 55 LEVEL *= *+1 ;CURRENT LEVEL 56 BCDLVL *= *+1 ;BCD LEVEL # 57 TIMER *= *+1 ;GENERAL TIMER 58 VSTOP *= *+1 ;HALT FLAG. 59 YPOINT *= *+1 ;BOARD Y-COORD. 60 XPOINT *= *+1 ;BOARD X-COORD. 61 YTEMP *= *+1 ;Y-REG TEMP HOLD 62 MINX *= *+1 ;MIN X VALUE 63 MINY *= *+1 ;MIN Y VALUE 64 MAXX *= *+1 ;MAX X VALUE 65 MAXY *= *+1 ;MAX Y VALUE 66 MAXBUGS *= *+1 ;# OF CHARs 67 EATNOISE *= *+1 ;EATING SOUND 68 GENTIM *= *+1 ;MATING TIMER 69 GENCTR *= *+1 ;MATING COUNTER 70 XCOORD *= *+1 ;X COORDINATE 71 YCOORD *= *+1 ;Y COORDINATE 72 LISTPOINT *= *+1 ;D-LIST PNTR. 73 NEWBACK *= *+1 ;BOARD B-COLOR. 74 MOVETIME *= *+1 ;MOVEMENT TIMER. 75 FIRETIME *= *+1 ;FIRING TIMER. 76 PHASETIME *= *+1 ;PHASE TIMER. 77 ETRY *= *+1 78 OLDVAL *= *+1 ;OLD CHAR 79 EGGS *= *+1 ;BABY COUNT 80 ENIX *= *+1 ;ENEMY INDEX 81 GNEWIX *= *+1 ;GENERATION INDX 82 NEWTYP *= *+1 ;NEW ENEMY TYPE 83 GENFLG *= *+1 ;MATING FLAG 84 BUGTIM *= *+1 ;BUG TIMER 85 EXPPH *= *+1 ;EXPLOSION PHASE 86 EXPCHR *= *+1 ;EXPL. CHARACTER 87 BOMBCT *= *+1 ;# OF BOMBS 88 XTEMP *= *+1 ;X SAVE AREA 89 EXNOISE *= *+1 ;EXPLOSION SOUND 90 ARMTIM *= *+1 ;BOMB ARM TIMER 91 BULTIM *= *+1 ;BULLET TIMER 92 SHCOLR *= *+1 ;TEXT COLOR 93 SHOBYT *= *+1 ;TEXT CHAR 94 LIVES *= *+1 ;# OF BUGS LEFT 95 ECOUNT *= *+1 ;# OF BABIES 96 EGGTOT *= *+1 ;# OF EGGS 97 EGGIX *= *+1 ;BABY INDEX 98 EGROUP *= *+1 ;BABY GROUP # 99 TYPE *= *+5 ;CHAR. TYPE. 0100 PHASE *= *+5 ;CHAR. PHASE. 0101 ; 0102 ; RAM USAGE 0103 ; 0104 *= $0500 0105 ETYP *= *+30 ;ENEMY TYPE 0106 EACT *= *+30 ;ENEMY ACTIVE 0107 EDIR *= *+30 ;ENEMY DIRECTION 0108 EADL *= *+30 ;ENEMY ADDR LO 0109 EADH *= *+30 ;ENEMY ADDR HI 0110 BOMBL *= *+100 ;BOMB ADDR LO 0111 BOMBH *= *+100 ;BOMB ADDR HI 0112 ARMED *= *+100 ;BOMB ARMED FLAG 0113 EGGL *= *+52 ;BABY ADDR LO 0114 EGGH *= *+52 ;BABY ADDR HI 0115 EGGACT *= *+52 ;BABY ACTIVE 0116 ; ********************** 0117 ; * MASTER EQUATE FILE * 0118 ; ********************** 0119 ; 0120 ; I/O Routines 0121 ; 0122 DSKINV = $E453 0123 SIOINV = $E465 0124 ; 0125 ; Operating System Equates 0126 ; 0127 CASINI = $02 0128 DOSVEC = $0A 0129 DOSINI = $0C 0130 ATRACT = $4D 0131 POKMSK = $10 0132 BRKKEY = $11 0133 RTCLOK = $12 0134 VDSLST = $0200 0135 VIMIRQ = $0216 0136 CDTMV1 = $0218 0137 CDTMV2 = $021A 0138 CDTMV3 = $021C 0139 CDTMV4 = $021E 0140 CDTMV5 = $0220 0141 CDTMA1 = $0226 0142 CDTMA2 = $0228 0143 CDTMF3 = $022A 0144 CDTMF4 = $022C 0145 CDTMF5 = $022E 0146 SRTIMR = $022B 0147 SDMCTL = $022F 0148 SDLSTL = $0230 0149 SDLSTH = $0231 0150 SSKCTL = $0232 0151 LPENH = $0234 0152 LPENV = $0235 0153 GPRIOR = $026F 0154 PADDL0 = $0270 0155 STICK0 = $0278 0156 STICK1 = $0279 0157 STRIG0 = $0284 0158 SHFLK = $02BE 0159 PCOLR0 = $02C0 0160 COLOR0 = $02C4 0161 COLOR1 = $02C5 0162 COLOR2 = $02C6 0163 COLOR3 = $02C7 0164 COLOR4 = $02C8 0165 MEMLO = $02E7 0166 CHART = $02F3 0167 CHBAS = $02F4 0168 CH = $02FC 0169 DDEVIC = $0300 0170 DUNIT = $0301 0171 DCOMND = $0302 0172 DSTATS = $0303 0173 DBUFLO = $0304 0174 DBUFHI = $0305 0175 DTIMLO = $0306 0176 DBYTLO = $0308 0177 DBYTHI = $0309 0178 DAUX1 = $030A 0179 DAUX2 = $030B 0180 ICCOM = $0342 0181 ICBAL = $0344 0182 ICBAH = $0345 0183 ICBLL = $0348 0184 ICBLH = $0349 0185 ICAX1 = $034A 0186 ICAX2 = $034B 0187 CIOV = $E456 0188 SIOV = $E465 0189 SETVBV = $E45C 0190 SYSVBV = $E45F 0191 XITVBV = $E462 0192 OSRETN = $E474 0193 CLICK = $FCD8 0194 ; 0195 ; Hardware Registers 0196 ; 0197 HPOSP0 = $D000 0198 HPOSP1 = $D001 0199 HPOSP2 = $D002 0200 HPOSP3 = $D003 0201 M0PF = $D000 0202 M1PF = $D001 0203 M2PF = $D002 0204 M3PF = $D003 0205 HPOSM0 = $D004 0206 HPOSM1 = $D005 0207 HPOSM2 = $D006 0208 HPOSM3 = $D007 0209 P0PF = $D004 0210 P1PF = $D005 0211 P2PF = $D006 0212 P3PF = $D007 0213 M0PL = $D008 0214 M1PL = $D009 0215 M2PL = $D00A 0216 M3PL = $D00B 0217 P0PL = $D00C 0218 P1PL = $D00D 0219 P2PL = $D00E 0220 P3PL = $D00F 0221 SIZEP0 = $D008 0222 SIZEP1 = $D009 0223 SIZEP2 = $D00A 0224 SIZEP3 = $D00B 0225 SIZEM = $D00C 0226 GRAFP0 = $D00D 0227 GRAFP1 = $D00E 0228 GRAFP2 = $D00F 0229 GRAFP3 = $D010 0230 TRIG0 = $D010 0231 GRAFM = $D011 0232 COLPM0 = $D012 0233 COLPM1 = $D013 0234 COLPM2 = $D014 0235 COLPM3 = $D015 0236 COLPF0 = $D016 0237 COLPF1 = $D017 0238 COLPF2 = $D018 0239 COLPF3 = $D019 0240 COLBK = $D01A 0241 PRIOR = $D01B 0242 VDELAY = $D01C 0243 GRACTL = $D01D 0244 HITCLR = $D01E 0245 CONSOL = $D01F 0246 POT0 = $D200 0247 AUDF1 = $D200 0248 AUDF2 = $D202 0249 AUDF3 = $D204 0250 AUDF4 = $D206 0251 AUDC1 = $D201 0252 AUDC2 = $D203 0253 AUDC3 = $D205 0254 AUDC4 = $D207 0255 AUDCTL = $D208 0256 ALLPOT = $D208 0257 KBCODE = $D209 0258 STIMER = $D209 0259 RANDOM = $D20A 0260 SERIN = $D20A 0261 SKREST = $D20A 0262 POTGO = $D20B 0263 SEROUT = $D20C 0264 IRQEN = $D20E 0265 IRQST = $D20E 0266 SKCTL = $D20F 0267 SKSTAT = $D20F 0268 PORTA = $D300 0269 DMACTL = $D400 0270 CHACTL = $D401 0271 DLISTL = $D402 0272 DLISTH = $D403 0273 HSCROL = $D404 0274 VSCROL = $D405 0275 PMBASE = $D407 0276 CHBASE = $D409 0277 WSYNC = $D40A 0278 VCOUNT = $D40B 0279 PENH = $D40C 0280 PENV = $D40D 0281 NMIEN = $D40E 0282 NMIRES = $D40F 0283 NMIST = $D40F 0284 ; 0285 *= $0800 ;prog start 0286 ; 0287 ; ***************************** 0288 ; * FIREBUG IGNITION * 0289 ; * Tom Hudson & Kyle Peacock * 0290 ; ***************************** 0291 ; 0292 .LOCAL 0293 ; 0294 BICFLICK 0295 LDA #$24 ;RELOCATE PROG 0296 STA HLO+1 ;TO $0800 0297 LDA #$08 ;FROM $2400 0298 STA LO+1 ;(DISK ONLY) 0299 LDA #0 0300 STA HLO 0301 STA LO 0302 RELOC1 LDY #0 0303 RELOC2 LDA (HLO),Y 0304 STA (LO),Y 0305 DEY 0306 BNE RELOC2 0307 INC LO+1 0308 INC HLO+1 0309 LDA HLO+1 0310 CMP #$38 0311 BNE RELOC1 0312 JMP DIGIN 0313 DIGIN 0314 LDA #$22 ;TURN ON... 0315 STA SDMCTL ;SCREEN 0316 LDA #$04 ;NUMBER OF CHARs 0317 STA MAXBUGS ;TO MANIPULATE. 0318 LDA #$01 ;STARTING LEVEL 0319 STA STARTLEVEL ;IS ONE. 0320 IGNITE 0321 LDA #$01 ;SET UP. 0322 STA LISTPOINT ;DISPLAY LIST. 0323 STA HPOSM2 ;PLACE BORDERS 0324 STA HPOSM3 ;OFFSCREEN. 0325 STA VSTOP ;HALT VBLANK. 0326 JSR SOUNDOFF ;SOUNDS OFF. 0327 LDA #$06 ;SET ACC. 0328 LDX #VBLANK/256 ;HI ADDR. 0329 LDY #VBLANK&255 ;LO ADDR. 0330 JSR SETVBV ;VBLANK INIT. 0331 LDA #$07 ;SET ACC. 0332 LDX #DBLANK/256 ;HI ADDR 0333 LDY #DBLANK&255 ;LO ADDR. 0334 JSR SETVBV ;DBLANK INIT. 0335 LDA #$C0 ;SET ACC. 0336 STA NMIEN ;ENABLE DLIs 0337 ?NOPRESS 0338 LDA CONSOL ;GET CONSOLE. 0339 CMP #7 ;UNTOUCHED? 0340 BEQ ?PRESS ;IF =0 BRANCH! 0341 STA ?PREV ;SAVE CONSOLE. 0342 JMP ?NOPRESS ;JUMP ON IT! 0343 ?PRESS 0344 LDA ?PREV ;PREV. CONSOLE. 0345 CMP #6 ;START PRESSED? 0346 BEQ ?VAROOM ;IF =6 BRANCH! 0347 LDA SKSTAT ;KEYBOARD KEY 0348 AND #$04 ;STILL PRESSED? 0349 BEQ ?NOPRESS ;IF =0 BRANCH! 0350 LDA CH ;GET CHARACTER. 0351 LDX #$08 ;SET INDEX-X. 0352 ?NUMCOMP 0353 CMP ?NUMBASE,X ;IS CHAR A #? 0354 BEQ ?GOTANUM ;YES! BRANCH! 0355 DEX ;NO. RESET PNTR. 0356 BPL ?NUMCOMP ;HANDLE ALL. 0357 BMI ?NOPRESS ;NO #s PRESSED. 0358 ?GOTANUM 0359 STX STARTLEVEL ;SAVE START- 0360 INC STARTLEVEL ;ING LEVEL #. 0361 STX BCDLVL 0362 INC BCDLVL 0363 JSR SHOLVL 0364 JSR SETCOLORS 0365 LDA #$FF ;RESET KEYBOARD 0366 STA CH ;CHARACTER. 0367 JMP ?NOPRESS ;JUMP ON IT. 0368 ?VAROOM 0369 LDA #$00 0370 STA ?PREV ;RESET PREVIOUS. 0371 JSR INIT ;INITIALIZE 0372 NEWLVL 0373 LDA #$00 ;CLEAR. 0374 STA VSTOP ;START VBLANK. 0375 STA LISTPOINT ;SET DISPLAY. 0376 MAINLN 0377 ; 0378 ; GAME PAUSED? 0379 ; 0380 LDA CONSOL ;CONSOLE BUTTON. 0381 CMP #$07 ;UNTOUCHED? 0382 BEQ ?PCHECK ;YES. BRANCH! 0383 JMP IGNITE ;RESTART ALL!!! 0384 ?PCHECK 0385 LDA CH ;IS KEYBOARD 0386 CMP #$21 ;SPACEBAR? 0387 BNE ?PAUSE ;IF NOT, BRANCH! 0388 LDA SKSTAT ;STILL HOLDING 0389 AND #$04 ;DOWN KEY? 0390 BEQ ?PAUSE ;IF YES, BRANCH! 0391 LDA #$01 0392 STA VSTOP ;HALT VBLANK. 0393 STA CH ;CLEAR CHAR. 0394 JSR SOUNDOFF ;SOUNDS OFF. 0395 ?WAIT 0396 LDA CH ;IF SPACEBAR 0397 CMP #$21 ;PRESSED? 0398 BNE ?WAIT ;NO. BRANCH! 0399 ?WAITMORE 0400 LDA SKSTAT ;IS SPACEBAR 0401 AND #$04 ;STILL HELD? 0402 BEQ ?WAITMORE ;YES, BRANCH! 0403 LDA #$00 ;CLEAR 0404 STA VSTOP ;START VBLANK. 0405 STA CH ;RESET CHAR. 0406 ?PAUSE 0407 LDA ARMTIM ;TIMER ELAPSED? 0408 BNE CHKBUL ;NO! BRANCH! 0409 LDA #1 ;RESET TIMER. 0410 STA ARMTIM 0411 JSR ARMBOM ;SUBROUTINE. 0412 CHKBUL 0413 LDA BULTIM ;TIMER ELAPSED? 0414 BNE CHKBUG ;NO! BRANCH! 0415 LDA #3 ;RESET TIMER. 0416 STA BULTIM 0417 JSR SPARK ;SUBROUTINE. 0418 CHKBUG LDA BUGTIM ;TIMER UP? 0419 BNE NOFBMV ;NO! BRANCH! 0420 JSR MOVBUG ;SUBROUTINE. 0421 LDA DIGGIN ;RESET TIMER 0422 BEQ ?EIGHT 0423 LDA #11 ;DIGGING. 0424 BNE ?GOTSPD 0425 ?EIGHT 0426 LDA #8 ;NOT DIGGING. 0427 ?GOTSPD 0428 STA BUGTIM ;SAVE TIMER. 0429 NOFBMV 0430 LDA GENFLG ;MATING SEASON? 0431 BEQ NOGTST ;YES! 0432 LDA GENCTR ;SECOND ELAPSED? 0433 BNE NOGTST ;NO! 0434 LDA #60 ;SET TIMER TO 0435 STA GENCTR ;1 SECOND 0436 DEC GENTIM ;1 LESS SECOND 0437 BNE NOGTST ;NOT ZERO! 0438 LDA #0 ;TIME TO START 0439 STA GENFLG ;MATING SEASON! 0440 NOGTST 0441 LDA TIMER ;TIMER ELAPSED? 0442 BEQ DOENMY ;YES, DO ENEMIES 0443 JMP MAINLN ;NO! BRANCH! 0444 DOENMY LDA LEVEL ;RESET ENEMY 0445 LSR A ;BUG MOVEMENT 0446 CMP #16 ;TIMER ACCORDING 0447 BCC ?GOTNEW ;TO LEVEL OF 0448 LDA #15 ;GAME. 0449 ?GOTNEW 0450 TAX ;[LEVEL 30 MAX.] 0451 LDA ENSPEED,X 0452 STA TIMER ;SAVE TIMER. 0453 JSR ENMOVE ;MOVE ENEMIES 0454 JSR BMOVE ;MOVE BABIES 0455 LDA ECOUNT ;ANY ENEMIES? 0456 BNE GAMECONT ;YES! 0457 INC LEVEL ;NO ENEMIES, 0458 SED ;ADVANCE LEVEL 0459 LDA BCDLVL 0460 CLC 0461 ADC #1 0462 STA BCDLVL 0463 CLD ;HERE TOM?!? 0464 JSR SHOLVL ;SHOW NEW LEVEL 0465 JSR INIT3 ;RE-INIT 0466 JMP NEWLVL ;AND PLAY! 0467 GAMECONT 0468 JMP MAINLN ;LOOP BACK! 0469 ENSPEED 0470 .BYTE 20,19,18,17,16,15 0471 .BYTE 14,13,12,11,10,9 0472 .BYTE 8,7,6,5 0473 ?NUMBASE 0474 .BYTE $1F,$1E,$1A,$18,$1D 0475 .BYTE $1B,$33,$35,$30 0476 ?PREV .BYTE 0 0477 ; 0478 ; ***************************** 0479 ; * FIREBUG DEATH/ENEMY MOVER * 0480 ; * BY Tom Hudson * 0481 ; ***************************** 0482 ; 0483 ;FIREBUG DEATH 0484 ; 0485 DEAD LDA BUGL ;SET EXPLOSION 0486 STA ELO ;POSITION = TO 0487 LDA BUGL+1 ;BUG'S LAST 0488 STA ELO+1 ;POSITION 0489 JSR EXPLOD ;BOOM!!! 0490 DEC LIVES ;1 LESS LIFE 0491 BMI GAMOVR ;GAME OVER IF <0 0492 JSR SHOLIV ;SHOW LIVES 0493 JSR INIT3 ;RE-INIT LEVEL 0494 JMP NEWLVL ;AND RESTART! 0495 ; 0496 ;GAME OVER! 0497 ; 0498 GAMOVR 0499 JSR INIT3 ;RE-INIT 0500 JMP IGNITE ;AND SHOW TITLE 0501 ; 0502 ;ENEMY MOVER 0503 ; 0504 ENMOVE LDA #0 ;ZERO... 0505 STA ECOUNT ;ENEMY COUNT 0506 LDX #29 ;30 ENEMIES MAX 0507 ENLP STX ENIX ;SAVE INDEX 0508 LDA EACT,X ;ACTIVE? 0509 BNE ACTIVE ;YES! 0510 JMP NXTEN ;NO, NEXT ENEMY 0511 ACTIVE LDA EADL,X ;GET... 0512 STA ADL ;ENEMY'S... 0513 LDA EADH,X ;ADDRESS... 0514 STA ADL+1 ;IN POINTER 0515 LDY #0 ;GET THE CHAR... 0516 LDA (ADL),Y ;FROM DISPLAY 0517 CMP ETYP,X ;ENEMY OK? 0518 BEQ ENMYOK ;YES! 0519 LDA #0 ;UH-OH, HE'S NO 0520 STA EACT,X ;LONGER ACTIVE! 0521 LDA #12 ;GET ENEMY'S 0522 SEC ;SCORE VALUE 0523 SBC ETYP,X 0524 AND #$06 0525 ASL A 0526 ASL A 0527 ASL A ;AND PUT IN... 0528 STA SCOADD+2 ;ADD VALUE 0529 JSR ADDSCO ;ADD TO SCORE 0530 JMP NXTEN ;NEXT ENEMY! 0531 ENMYOK LDA #0 ;RESET MOVEMENT 0532 STA OK+8 ;TO CHARS 8 0533 STA OK+10 ;AND 10 0534 LDA GENFLG ;MATING SEASON? 0535 BNE GENDUN ;NO! 0536 LDA #1 ;SET... 0537 LDY ETYP,X ;ENEMY TYPE'S... 0538 STA OK,Y ;OK FLAG 0539 ; 0540 ;PRIORITY MOVE CHECK 0541 ; 0542 GENDUN LDA #3 ;TRY 4 DIRS. 0543 STA GNEWIX ;SAVE IN INDEX 0544 PRILP LDY GNEWIX ;GET INDEX 0545 LDA EADL,X ;ADD... 0546 CLC ;DIRECTION... 0547 ADC DIRADL,Y ;OFFSET... 0548 STA ADL ;TO... 0549 LDA EADH,X ;ENEMY'S... 0550 ADC DIRADH,Y ;ADDRESS 0551 STA ADL+1 0552 LDY #0 ;LOAD THE BYTE.. 0553 LDA (ADL),Y ;IN THAT DIR. 0554 AND #$7F ;MASK HI BIT 0555 STA OLDVAL ;SAVE OLD VALUE 0556 TAY ;CHAR # IN Y 0557 LDA OK,Y ;CAN WE GO THERE? 0558 BEQ NOPRI ;NO! 0559 LDA CHANCE,Y ;GET CHANCE 0560 CMP #$FF ;100% CHANCE? 0561 BNE NOPRI ;NO! 0562 LDA GNEWIX ;GET DIRECTION, 0563 STA EDIR,X ;SAVE DIRECTION, 0564 JSR EXMOVE ;MOVE ENEMY! 0565 JMP NXTEN ;NEXT ENEMY 0566 NOPRI DEC GNEWIX ;NEXT DIRECTION 0567 BPL PRILP ;KEEP CHECKIN' 0568 ; 0569 ;NO PRIORITY MOVE, SO LET'S TRY 0570 ;A RANDOM DIRECTION! 0571 ; 0572 ETRYLP LDA #4 ;TRY 5 DIRS. 0573 STA ETRY ;SAVE INDEX 0574 GETDIR LDA EDIR,X ;GET OLD DIR. 0575 BPL SETDIR ;IT'S MOVING! 0576 LDA RANDOM ;RANDOMIZE A 0577 AND #3 ;DIRECTION 0578 SETDIR STA EDIR,X ;SAVE DIR. 0579 JSR DIRCHK ;IS THAT DIR OK? 0580 BPL NXTEN ;YES! 0581 DEC ETRY ;NEXT DIR. 0582 BPL GETDIR ;AND LOOP BACK 0583 LDA #$FF ;DIDN'T MOVE! 0584 STA EDIR,X 0585 NXTEN LDX ENIX ;GET ENEMY INDEX 0586 LDA EACT,X ;ACTIVE? 0587 BEQ EDEAD ;NO! 0588 INC ECOUNT ;1 MORE ENEMY 0589 EDEAD DEX ;NEXT ENEMY 0590 BMI ENDONE ;IF <0, FINISHED 0591 JMP ENLP ;LOOP BACK. 0592 ENDONE RTS ;ALL DONE! 0593 ; 0594 ;DIRECTION CHECK SUBROUTINE 0595 ; 0596 DIRCHK TAY ;MOVE DIR. TO Y 0597 LDA EADL,X ;NOW ADD... 0598 CLC ;DIRECTION... 0599 ADC DIRADL,Y ;OFFSET... 0600 STA ADL ;TO ENEMY'S... 0601 LDA EADH,X ;POSITION 0602 ADC DIRADH,Y 0603 STA ADL+1 0604 LDY #0 ;GET THE BYTE... 0605 LDA (ADL),Y ;FROM DISPLAY 0606 AND #$7F ;MASK HI BIT 0607 STA OLDVAL ;SAVE OLD CHAR 0608 TAY ;GET CHAR IN Y 0609 LDA OK,Y ;CAN ENEMY MOVE? 0610 BNE OKMOVE ;YES! 0611 NOMOVE LDA #$FF ;NO! 0612 RTS ;RETURN 0613 OKMOVE LDA CHANCE,Y ;GET CHANCE 0614 CMP RANDOM ;MOVE OK? 0615 BCC NOMOVE ;NO! 0616 EXMOVE LDA EADL,X ;GET ENEMY'S 0617 STA HLO ;OLD ADDRESS 0618 LDA EADH,X 0619 STA HLO+1 0620 LDA #0 ;ERASE OLD... 0621 TAY ;ENEMY IMAGE 0622 STA (HLO),Y 0623 INY 0624 STA (HLO),Y 0625 DEY 0626 LDA ETYP,X ;GET ENEMY CHAR, 0627 STA (ADL),Y ;PUT ON SCREEN 0628 INY 0629 CLC 0630 ADC #1 0631 STA (ADL),Y 0632 LDA ADL ;UPDATE ENEMY... 0633 STA EADL,X ;ADDRESS TABLE 0634 LDA ADL+1 0635 STA EADH,X 0636 LDA OLDVAL ;GET OLD CHAR 0637 CMP ETYP,X ;SAME AS ENEMY? 0638 BEQ GENIT ;YES, GENERATE!! 0639 JMP NOGEN ;NO, DON'T GEN. 0640 GENIT LDA #0 ;ENEMY NOT... 0641 STA EACT,X ;ACTIVE ANYMORE 0642 ; 0643 ;THIS CODE GENERATES A NEW 0644 ;GROUP OF ENEMY OBJECTS 0645 ; 0646 LDA ETYP,X ;GET ENEMY TYPE 0647 CMP #8 ;TYPE 8? 0648 BNE TYP10 ;NO, TYPE 10! 0649 LDA #7 ;TURN ON... 0650 STA CHANGE1 ;CHANGE SOUND 1 0651 LDA #10 ;GEN TYPE 10 0652 BNE GNEW ;GENERATE 'EM! 0653 TYP10 LDA #7 ;TURN ON... 0654 STA CHANGE2 ;CHANGE SOUND 2 0655 LDA #8 ;GEN TYPE 8 0656 GNEW STA NEWTYP ;SAVE NEW TYPE 0657 LDA #3 ;GEN. 4 ENEMIES 0658 STA GNEWIX ;SAVE IN INDEX 0659 GNEWLP LDY GNEWIX ;GET INDEX 0660 LDA ADL ;GET ENEMY ADDR, 0661 CLC ;ADD... 0662 ADC DIRADL,Y ;DIRECTION... 0663 STA HLO ;ADDRESS... 0664 LDA ADL+1 ;OFFSET 0665 ADC DIRADH,Y 0666 STA HLO+1 0667 LDY #0 ;GET THE CHAR... 0668 LDA (HLO),Y ;FROM DISPLAY 0669 AND #$7F ;MASK HI BIT 0670 CMP #1 ;BORDER? 0671 BEQ NONEW ;CAN'T GEN IT! 0672 CMP #6 ;FIREBUG? 0673 BEQ KILL ;KILL HIM! 0674 CMP #8 ;ENEMY TYPE 8? 0675 BEQ NONEW ;CAN'T GEN! 0676 CMP #10 ;ENEMY TYPE 10? 0677 BEQ NONEW ;CAN'T GEN! 0678 CMP #12 ;BABY BUG? 0679 BEQ KILL ;KILL IT! 0680 CMP #15 ;BOMB? 0681 BEQ NONEW ;CAN'T GENERATE 0682 LDX #29 ;SCAN FOR... 0683 SCANEW LDA EACT,X ;INACTIVE ENEMY 0684 BEQ GOTNEW ;GOT ONE! 0685 DEX ;TRY NEXT SLOT 0686 BPL SCANEW ;KEEP TRYING 0687 LDA #1 ;NONE AVAILABLE! 0688 STA GENFLG ;MATING OVER 0689 LDA #100 ;WAIT 100... 0690 STA GENTIM ;SECONDS. 0691 JMP MOVEOK ;PROCEED 0692 GOTNEW LDA #1 ;SET ENEMY AS... 0693 STA EACT,X ;ACTIVE 0694 LDA #$FF ;SET UP FOR... 0695 STA EDIR,X ;NO DIRECTION 0696 LDA HLO ;SAVE ENEMY... 0697 STA EADL,X ;ADDRESS 0698 LDA HLO+1 0699 STA EADH,X 0700 LDA NEWTYP ;GET NEW TYPE 0701 STA ETYP,X ;SAVE IN TABLE 0702 STA (HLO),Y ;PUT ENEMY... 0703 CLC ;ON SCREEN! 0704 ADC #1 0705 INY 0706 STA (HLO),Y 0707 NONEW DEC GNEWIX ;NEXT GEN. 0708 BMI MOVEOK ;ALL DONE! 0709 JMP GNEWLP ;LOOP IF MORE 0710 MOVEOK LDA #0 ;STATUS=0 (OK) 0711 RTS ;RETURN! 0712 NOGEN CMP #6 ;HIT FIREBUG? 0713 BNE MOVEOK ;NO, MOVE OK. 0714 KILL PLA ;REMOVE... 0715 PLA ;OLD... 0716 PLA ;STACK... 0717 PLA ;ENTRIES, 0718 JMP DEAD ;KILL BUG!!! 0719 ; 0720 ; **************************** 0721 ; * FIREBUG MOVEMENT ROUTINE * 0722 ; * BY Tom Hudson * 0723 ; **************************** 0724 ; 0725 MOVBUG LDA BUGL ;GET AND SAVE... 0726 STA HLO ;FIREBUG ADDRESS 0727 LDA BUGL+1 0728 STA HLO+1 0729 LDY #0 ;GET THAT... 0730 LDA (HLO),Y ;DISPLAY BYTE 0731 CMP #6 ;BUG OK? 0732 BEQ BUGLIV ;YUP! 0733 BNE KILBUG ;UH-OH! KILL HIM 0734 BUGLIV 0735 LDX STICK0 ;GET STICK 0736 LDY SDIR,X ;AND DIRECTION 0737 BPL TRYBMV ;TRY TO MOVE 0738 NOBMV RTS ;NO MOVE! 0739 TRYBMV LDA BUGL ;ADD... 0740 CLC ;DIRECTION... 0741 ADC DIRADL,Y ;OFFSET... 0742 STA ADL ;TO... 0743 LDA BUGL+1 ;BUG'S... 0744 ADC DIRADH,Y ;ADDRESS 0745 STA ADL+1 0746 LDY #0 ;GET THAT... 0747 LDA (ADL),Y ;DISPLAY BYTE 0748 CMP #1 ;BORDER? 0749 BEQ NOBMV ;CAN'T GO THERE! 0750 CMP #12 ;BABY? 0751 BEQ NOBMV ;CAN'T GO THERE! 0752 CMP #15 ;BOMB? 0753 BCS NOBMV ;CAN'T GO THERE! 0754 CMP #6 ;DIRT/TRAIL? 0755 BCC OKBMV ;GO AHEAD! 0756 CMP #14 ;BUG TRAIL? 0757 BEQ OKBMV ;GO AHEAD! 0758 KILBUG PLA ;MUST BE ENEMY! 0759 PLA ;CLEAR STACK, 0760 JMP DEAD ;KILL BUG! 0761 OKBMV CMP #0 ;ENEMY TRAIL? 0762 BEQ NOTDIG ;NO DIGGING! 0763 CMP #14 ;BUG TRAIL? 0764 BEQ NOTDIG ;NO DIGGING! 0765 LDA #1 ;SET DIGGING... 0766 STA DIGGIN ;SOUND FLAG 0767 BNE DRWBUG ;AND DRAW BUG 0768 NOTDIG LDA #0 ;TURN OFF... 0769 STA DIGGIN ;DIGGING SOUND 0770 DRWBUG LDA #14 ;ERASE BUG... 0771 STA (HLO),Y ;WITH BUG TRAIL 0772 INY 0773 STA (HLO),Y 0774 DEY 0775 LDA #6 ;DRAW BUG... 0776 STA (ADL),Y ;IN NEW... 0777 INY ;LOCATION 0778 CLC 0779 ADC #1 0780 STA (ADL),Y 0781 LDA ADL ;UPDATE BUG'S 0782 STA BUGL ;ADDRESS 0783 LDA ADL+1 0784 STA BUGL+1 0785 RTS ;ALL DONE! 0786 ; ****************************** 0787 ; * FIREBUG INTERRUPTS & SOUND * 0788 ; * BY Kyle Peacock * 0789 ; ****************************** 0790 ; 0791 .LOCAL 0792 ; 0793 VBLANK 0794 CLD ;CHILL DECIMAL. 0795 ; 0796 ; RANDOMIZE DETONATION 0797 ; 0798 LDX #7 ;CHANGE 8 BYTES. 0799 ?JUNKIT 0800 LDA RANDOM ;RANDOM # 0801 AND #$55 ;MASK FOR PF#0. 0802 STA GAMESET+[8*17],X ;SAVE. 0803 DEX ;HANDLE NEXT. 0804 BPL ?JUNKIT ;NOT DONE-BRANCH 0805 ; 0806 ; SET UP CORRECT DISPLAY LIST 0807 ; 0808 LDA LISTPOINT ;D-LIST PNTR. 0809 ASL A ;MULTIPLY BY 2. 0810 TAX ;MOVE A TO X. 0811 LDA ?DLISTBASE,X ;LET'S 0812 STA SDLSTL ;PAINT THE 0813 LDA ?DLISTBASE+1,X ;GANG- 0814 STA SDLSTL+1 ;GREEN, & EAT 0815 LDA #GAMEDLI1&255 ;FRANKS & 0816 STA VDSLST ;BEANS. 0817 LDA #GAMEDLI1/256 ;C.B.I. IS 0818 STA VDSLST+1 ;ON THE MOVE. 0819 ; 0820 ; CHANGE TITLE SCREEN 0821 ; 0822 DEC ?SWITCHTIME ;DEC TIMER. 0823 BPL ?SWITCHDONE ;>0 BRANCH! 0824 LDA RANDOM ;RANDOM # 0825 AND #$3F ;MASK BITS 7 & 6 0826 ORA #$0F ;ADD BITS 0-3. 0827 STA ?SWITCHTIME ;SAVE TIMER. 0828 INC ?FLOPFLIP ;INC NAME 0829 LDA ?FLOPFLIP ;TOGGLE FLAG. 0830 AND #$01 ;EXAMINE BIT 0. 0831 ASL A ;MULTIPLY BY 2. 0832 ASL A ;MULTIPLY BY 4. 0833 TAX ;MOVE A TO X. 0834 LDA ?SWITCHBASE,X ;GET ADDR 0835 STA SWITCH1 ;OF NAME DATA 0836 LDA ?SWITCHBASE+1,X ;AND 0837 STA SWITCH1+1 ;PLACE INTO 0838 LDA ?SWITCHBASE+2,X ;PROPER 0839 STA SWITCH2 ;AREA OF DISPLAY 0840 LDA ?SWITCHBASE+3,X ;LIST. 0841 STA SWITCH2+1 0842 ?SWITCHDONE 0843 ; 0844 ; HALT ATTRACT MODE? 0845 ; 0846 LDA VSTOP ;VBLANK HALTED? 0847 BNE ?VDONE ;YES! 0848 STA ATRACT ;ATTRACT MODE. 0849 ; 0850 ; SPARK REGENERATION 0851 ; 0852 DEC ?REGEN ;TIME UP? 0853 BPL ?REGEND ;IF >0 BRANCH! 0854 LDA STICK0 ;GET JOYSTICK. 0855 CMP #15 ;CENTERED? 0856 BNE ?GENSET1 ;NO! BRANCH! 0857 LDX #$00 ;CLEAR INDEX. 0858 BEQ ?GENSET2 ;BRANCH! 0859 ?GENSET1 0860 LDX DIGGIN ;BUG IN DIRT? 0861 ?GENSET2 0862 LDA ?GENSET,X ;REGENERATION RATE. 0863 STA ?REGEN ;SAVE TIMER. 0864 INC ?FLIPFLOP ;INC TOGGLE 0865 LDA ?FLIPFLOP ;FLAG. 0866 AND #$01 ;EXAMINE BIT 0. 0867 BEQ ?REGEND ;IF EVEN-BRANCH! 0868 LDX BULLPNT ;GET POINTER. 0869 LDA BULLETLINE,X ;DETERMINE 0870 CMP #20 ;IF WE SHOULD 0871 BNE ?BULLSET ;MODIFY THIS 0872 CPX #29 ;CHARACTER OR 0873 BEQ ?REGEND ;MOVE TO NEXT. 0874 INC BULLPNT ;MOVE TO NEXT 0875 INX ;CHARACTER. 0876 ?BULLSET 0877 DEC BULLETLINE,X ;MODIFY. 0878 ?REGEND 0879 ; 0880 ; DECREMENT COUNT DOWN TIMERS 0881 ; 0882 LDA GENCTR 0883 BEQ ?NOGENT 0884 DEC GENCTR 0885 ?NOGENT 0886 LDA BULTIM ;TIMER = 0? 0887 BEQ ?NOBUL ;YES. BRANCH! 0888 DEC BULTIM ;NO. DECREMENT. 0889 ?NOBUL 0890 LDA ARMTIM ;TIMER = 0? 0891 BEQ ?NOAT ;YES. BRANCH! 0892 DEC ARMTIM ;NO. DECREMENT. 0893 ?NOAT 0894 LDA TIMER ;TIMER = 0? 0895 BEQ ?NOTIME ;YES. BRANCH! 0896 DEC TIMER ;NO. DECREMENT. 0897 ?NOTIME 0898 LDA BUGTIM ;TIMER = 0? 0899 BEQ ?NOBTIM ;YES. BRANCH! 0900 DEC BUGTIM ;NO. DECREMENT. 0901 ?NOBTIM 0902 ; 0903 ; FINE SCROLLING (REVISITED) 0904 ; 0905 JSR SCROLL 0906 ?VDONE 0907 ; 0908 ; UPDATE LMS POINTERS 0909 ; 0910 JSR SHIFTER 0911 ; 0912 ; VERTICAL BLANK DONE 0913 ; 0914 JMP SYSVBV 0915 ; 0916 ; *************************** 0917 ; * DEFERRED VERTICAL BLANK * 0918 ; *************************** 0919 ; 0920 DBLANK 0921 CLD ;CHILL DECIMAL 0922 ; 0923 ; UPDATE CHARACTER SET 0924 ; 0925 JSR DRAW 0926 LDA VSTOP ;DBLANK HALTED? 0927 BNE ?DDONE ;IF <>0 BRANCH! 0928 ; 0929 ; DIGGING SOUND 0930 ; 0931 JSR DIGSOUND 0932 ; 0933 ; BUG TRANSFORMATION SOUNDs 0934 ; 0935 JSR TRANSFORM 0936 ; 0937 ; FIRE EGG EATEN SOUND 0938 ; 0939 JSR CHOMP 0940 ; 0941 ; SPARK FIRING SOUND 0942 ; 0943 JSR POPGUN 0944 ; 0945 ; DETONATION SOUND 0946 ; 0947 JSR KABOOM 0948 ; 0949 ; BOMB DETONATION SOUND 0950 ; 0951 JSR BOOMBOX 0952 ; 0953 ; DEF. VERTICAL BLANK DONE 0954 ; 0955 ?DDONE 0956 JMP XITVBV 0957 ; 0958 ; POINTERS' DATABASES 0959 ; 0960 ?DLISTBASE 0961 .WORD GAMELIST 0962 .WORD TITLELIST 0963 ?SWITCHBASE 0964 .WORD TITLE2 0965 .WORD TITLE4 0966 .WORD TITLE4 0967 .WORD TITLE2 0968 ; 0969 ; **************** 0970 ; * FIREBUG DLIs * 0971 ; **************** 0972 ; 0973 GAMEDLI1 0974 PHA ;SAVE ACC. 0975 TXA ;MOVE X TO A. 0976 PHA ;SAVE ACC. 0977 TYA ;MOVE Y TO A. 0978 PHA ;SAVE ACC. 0979 LDA #GAMESET/256 ;BUG CHRs 0980 LDX #$3F ;DMA CONTROL. 0981 LDY NEWBACK ;BACKGROUND. 0982 STA WSYNC ;SAVE IT. 0983 STX DMACTL ;SAVE IT. 0984 STY COLBK ;SAVE IT. 0985 STA CHBASE ;SAVE IT. 0986 LDA #GAMEDLI2&255 ;LOAD UP 0987 STA VDSLST ;FOR NEXT DLI. 0988 LDA #GAMEDLI2/256 ;SAVE NEXT 0989 STA VDSLST+1 ;DLI ADDRESS. 0990 PLA ;RESTORE ACC. 0991 TAY ;MOVE A TO Y. 0992 PLA ;RESTORE ACC. 0993 TAX ;MOVE A TO X. 0994 PLA ;RESTORE ACC. 0995 RTI ;BOGGIE BABY... 0996 GAMEDLI2 0997 PHA ;SAVE ACC. 0998 LDA COLOR4 ;BACKGROUND. 0999 STA WSYNC ;SAVE IT. 1000 STA COLBK ;SAVE IT. 1001 LDA SDMCTL ;OLD DMA CONTROL 1002 STA DMACTL ;IS RESTORED. 1003 LDA #GAMEDLI3&255 ;SET UP 1004 STA VDSLST ;FOR NEXT 1005 LDA #GAMEDLI3/256 ;DLI ADDR. 1006 STA VDSLST+1 ;SAVE IT. 1007 PLA ;RESTORE ACC. 1008 RTI ;BOGGIE BABY... 1009 GAMEDLI3 1010 PHA ;SAVE ACC. 1011 LDA #$E0 ;OLD CHR SET. 1012 STA WSYNC ;SAVE IT. 1013 STA CHBASE ;SAVE IT. 1014 PLA ;RESTORE ACC. 1015 RTI ;BOGGIE BABY... 1016 ; 1017 ; DIGGING SOUND ROUTINE 1018 ; 1019 DIGSOUND 1020 LDA DIGGIN ;BUG IN DIRT? 1021 BEQ ?DIGOFF ;IF = 0 BRANCH! 1022 DEC ?DIGTIME ;DEC TIMER. 1023 BPL ?DIGDONE ;IF >0 BRANCH! 1024 LDA #$03 ;RESET DIGGING 1025 STA ?DIGTIME ;TIMER. 1026 LDX PLAYNO ;PLAYER NUMBER. 1027 LDA STICK0,X ;READ JOYSTICK. 1028 CMP #15 ;CENTERED? 1029 BNE ?DIGON ;<> 15 - BRANCH! 1030 ?DIGOFF 1031 LDA #$00 ;CLEAR. 1032 STA AUDC1 ;SOUND CHANNEL. 1033 BEQ ?DIGDONE ;BRANCH! 1034 ?DIGON 1035 LDA #$46 ;SET UP 1036 STA AUDC1 ;SOUND CHANNEL 1 1037 LDA #220 ;SET UP 1038 STA AUDF1 ;SOUND FREQ 1. 1039 ?DIGDONE 1040 RTS ;BEAM ME UP... 1041 ; 1042 ; BUG TRANSFORMATION SOUND 1043 ; 1044 TRANSFORM 1045 LDX CHANGE1 ;1st SOUND ON? 1046 BPL TRAN1 ;IF >0 BRANCH! 1047 LDA #$00 ;SOUND OFF. 1048 STA AUDC2 ;CHANNEL 2. 1049 BEQ TRAN2 ;BRANCH! 1050 TRAN1 1051 LDA ?CHANGE1,X ;GET CORRECT 1052 STA AUDF2 ;FREQ & SAVE. 1053 LDA #$A4 ;SET UP CORRECT 1054 STA AUDC2 ;SOUND CHANNEL. 1055 DEC CHANGE1 ;DEC POINTER. 1056 TRAN2 1057 LDX CHANGE2 ;2nd SOUND ON? 1058 BPL TRAN3 ;IF >0 BRANCH! 1059 LDA CHANGE1 ;SOUND 1 OFF? 1060 BPL TRAN4 ;IF >0 BRANCH! 1061 ?DEACT2 1062 LDA #$00 ;SOUND OFF. 1063 STA AUDC2 ;CHANNEL 2. 1064 BEQ TRAN4 ;BRANCH! 1065 TRAN3 1066 LDA ?CHANGE2,X ;GET CORRECT 1067 STA AUDF2 ;FREQ & SAVE. 1068 LDA #$A4 ;SET UP CORRECT 1069 STA AUDC2 ;SOUND CHANNEL. 1070 DEC CHANGE2 ;DEC POINTER. 1071 TRAN4 1072 RTS ;BAMF! 1073 ?CHANGE1 1074 .BYTE 240,160,80,0 1075 .BYTE 15,95,175,255 1076 ?CHANGE2 1077 .BYTE 210,140,70,0 1078 .BYTE 45,115,185,255 1079 ; 1080 ; FIRE EGG EATEN SOUND 1081 ; 1082 CHOMP 1083 LDX EATNOISE ;SOUND ON? 1084 BPL ?CHOMPON ;IF >0 BRANCH! 1085 LDA CHANGE1 ;CHANGE 1 ON? 1086 BPL ?CHOMPOFF ;IF >0 BRANCH! 1087 LDA CHANGE2 ;CHANGE 2 ON? 1088 BMI ?DEACT2 ;IF >0 BRANCH! 1089 ?CHOMPOFF 1090 RTS ;BOGGIE... 1091 ?CHOMPON 1092 LDA ?CHOMPF,X ;GET SOUND 1093 STA AUDF2 ;FREQ & SAVE. 1094 LDA #$A6 ;SET CORRECT 1095 STA AUDC2 ;SOUND CHANNEL. 1096 DEC EATNOISE ;DEC POINTER. 1097 RTS ;LATER Y'ALL! 1098 ?CHOMPF 1099 .BYTE 0,8,16,24,32 1100 .BYTE 40,47,55,63,71 1101 ; 1102 ; SPARK FIRING SOUND 1103 ; 1104 POPGUN 1105 LDX BULLNOISE ;SOUND ON? 1106 BPL ?SHOOTIT ;IF >0 BRANCH! 1107 ?CHILLOUT 1108 LDA #$00 ;CLEAR SOUND 1109 STA AUDC3 ;CHANNEL 3. 1110 RTS ;LATER... 1111 ?SHOOTIT 1112 LDA ?SHOOTF,X ;GET CORRECT 1113 STA AUDF3 ;FREQ & SAVE. 1114 LDA #$AA ;SET UP CORRECT 1115 STA AUDC3 ;SOUND CHANNEL. 1116 DEC BULLNOISE ;DEC POINTER. 1117 ?SHOTIT 1118 RTS ;LATER... 1119 ?SHOOTF 1120 .BYTE 18,57,97,136 1121 .BYTE 176,215,255 1122 ; 1123 ; DETONATION SOUND 1124 ; 1125 KABOOM 1126 LDX BOOMNOISE ;SOUND ON? 1127 BPL ?BOOMIT ;IF >0 BRANCH! 1128 LDA BULLNOISE ;BULLET ON? 1129 BMI ?CHILLOUT ;IF <0 BRANCH! 1130 RTS ;LATER... 1131 ?BOOMIT 1132 LDA ?BOOMF,X ;GET CORRECT 1133 STA AUDF3 ;FREQ & SAVE. 1134 LDA #$8C ;GET CORRECT 1135 STA AUDC3 ;SOUND CHANNEL. 1136 DEC BOOMNOISE ;DEC POINTER. 1137 ?BOOMED 1138 RTS ;LATER (MUCH!) 1139 ?BOOMF 1140 .BYTE 244,232,220,209 1141 .BYTE 197,186,174,162 1142 .BYTE 151,139,128,116 1143 .BYTE 104,93,81,70,58 1144 .BYTE 46,35,23,12,0 1145 ; 1146 ; BOMB DETONATION SOUND 1147 ; 1148 BOOMBOX 1149 LDX EXNOISE ;SOUND ON? 1150 BPL ?ZAPON ;IF >0 BRANCH! 1151 LDA #$30 ;ADJUST DISPLAY 1152 JSR ?DSET ;LIST. 1153 LDA BOOMNOISE ;EXPLOSION? 1154 BPL ?ZAPOFF ;IF >0 BRANCH! 1155 LDA BULLNOISE ;BULLET? 1156 BPL ?ZAPOFF ;IF >0 BRANCH! 1157 JMP ?CHILLOUT ;CHILLY BE. 1158 ?ZAPOFF 1159 RTS ;CHILL OUT. 1160 ?ZAPON 1161 LDA EXF,X ;GET CORRECT 1162 STA AUDF3 ;FREQ & SAVE. 1163 LDA #$8A ;GET CORRECT 1164 STA AUDC3 ;SOUND CHANNEL. 1165 DEC EXNOISE ;DEC POINTER. 1166 LDA RANDOM ;RANDOM # 1167 AND #$70 ;MASK 4,5,6. 1168 ?DSET 1169 STA GAMELIST ;SAVE INTO DIS- 1170 STA GAMELIST+1 ;PLAY LIST. 1171 RTS ;CHILLY BE Y'ALL 1172 EXF 1173 .BYTE 0,253,249,245,241,237 1174 .BYTE 234,230,226,222,218 1175 .BYTE 214,211,207,203,199 1176 .BYTE 195,191,188,184,180 1177 .BYTE 176,172,168,165,161 1178 .BYTE 157,153,149,145,142 1179 .BYTE 138,134,130,126,123 1180 .BYTE 119,115,111,107,103 1181 .BYTE 100,96,92,88,84,80 1182 .BYTE 77,73,69,65,61,57,54 1183 .BYTE 50,46,42,38,34,31,27 1184 .BYTE 23,19,15,11,8,4 1185 ?GENSET 1186 .BYTE 120,60 1187 ?DIGTIME .BYTE 0 1188 ?REGEN .BYTE 0 1189 ?FLIPFLOP .BYTE 0 1190 ?FLOPFLIP .BYTE 0 1191 ?SWITCHTIME .BYTE 0