| |
m1:disassembly:tourian_page [2015/06/07 12:15] – created - external edit 127.0.0.1 | m1:disassembly:tourian_page [2025/06/18 09:27] (current) – felixwright |
---|
The Tourian page contains data and code for Tourian. | ~~REDIRECT>m1:docs:disasm:tourian~~ |
<code> | |
; ------------------- | |
; METROID source code | |
; ------------------- | |
; MAIN PROGRAMMERS | |
; HAI YUKAMI | |
; ZARU SOBAJIMA | |
; GPZ SENGOKU | |
; N.SHIOTANI | |
; M.HOUDAI | |
; (C) 1986 NINTENDO | |
; | |
;Commented by Dirty McDingus (nmikstas@yahoo.com) | |
;Disassembled using TRaCER by YOSHi | |
;Can be reassembled using Ophis. | |
;Last updated: 3/9/2010 | |
| |
;Hosted on wiki.metroidconstruction.com, with possible additions by wiki contributors. | |
| |
;Tourian (memory page 3) | |
| |
.org $8000 | |
| |
.include "MetroidDefines.txt" | |
| |
;--------------------------------------[ Forward declarations ]-------------------------------------- | |
| |
.alias startup $C01A | |
.alias NMI $C0D9 | |
.alias ChooseRoutine $C27C | |
.alias Adiv32 $C2BE | |
.alias Amul16 $C2C5 | |
.alias TwosCompliment $C3D4 | |
.alias Base10Subtract $C3FB | |
.alias SubtractHealth $CE92 | |
.alias SetProjectileAnim $D2FA | |
.alias UpdateEnemyAnim $E094 | |
.alias VerticalRoomCentered $E21B | |
| |
;-----------------------------------------[ Start of code ]------------------------------------------ | |
| |
L8000: JMP $F410 | |
L8003: JMP $F438 | |
L8006: JMP $F416 | |
L8009: JMP $F852 | |
L800C: JMP UpdateEnemyAnim ;($E094) | |
L800F: JMP $F68D | |
L8012: JMP $F83E | |
L8015: JMP $F85A | |
L8018: JMP $FBB9 | |
L801B: JMP $FB88 | |
L801E: JMP $FBCA | |
L8021: JMP $F870 | |
L8024: JMP ChooseRoutine ;($C27C) | |
L8027: JMP $FD8F | |
L802A: JMP $EB6E | |
L802D: JMP $8244 | |
L8030: JMP $8318 | |
L8033: JMP $FA1E | |
L8036: JMP $833F | |
L8039: JMP $8395 | |
L803C: JMP $DD8B | |
L803F: JMP $FEDC | |
L8042: JMP SubtractHealth ;($CE92) | |
L8045: JMP Base10Subtract ;($C3FB) | |
| |
L8048: .word $84FD, $84A6, $844A, $844A, $84A6, $84FD, $83F4, $83F4 | |
| |
L8058: LDX PageIndex | |
L805A: LDA $0405,X | |
L805D: ASL | |
L805E: BMI ++++++++ | |
L8060: LDA EnStatus,X | |
L8063: CMP #$02 | |
L8065: BNE ++++++++ | |
L8067: JSR $8244 | |
L806A: LDA $00 | |
L806C: BPL ++ | |
L806E: JSR TwosCompliment ;($C3D4) | |
L8071: STA $66 | |
L8073:* JSR $83F5 | |
L8076: JSR $80B8 | |
L8079: DEC $66 | |
L807B: BNE - | |
L807D:* BEQ ++ | |
L807F: STA $66 | |
L8081:* JSR $844B | |
L8084: JSR $80FB | |
L8087: DEC $66 | |
L8089: BNE - | |
L808B:* JSR $8318 | |
L808E: LDA $00 | |
L8090: BPL ++ | |
L8092: JSR TwosCompliment ;($C3D4) | |
L8095: STA $66 | |
L8097:* JSR $84A7 | |
L809A: JSR $816E | |
L809D: DEC $66 | |
L809F: BNE - | |
L80A1:* BEQ ++ | |
L80A3: STA $66 | |
L80A5:* JSR $84FE | |
L80A8: JSR $8134 | |
L80AB: DEC $66 | |
L80AD: BNE - | |
L80AF:* RTS | |
| |
L80B0: LDY EnDataIndex,X | |
L80B3: LDA $977B,Y | |
L80B6: ASL ;*2 | |
L80B7: RTS | |
| |
L80B8: LDX PageIndex | |
L80BA: BCS $80FA | |
L80BC: LDA $0405,X | |
L80BF: BPL $80C7 | |
L80C1: JSR $81FC | |
L80C4: JMP $80F6 | |
L80C7: JSR $80B0 | |
L80CA: BPL $80EA | |
L80CC: LDA $6B03,X | |
L80CF: BEQ $80C1 | |
L80D1: BPL $80D8 | |
L80D3: JSR $81B1 | |
L80D6: BEQ $80E2 | |
L80D8: SEC | |
L80D9: ROR $0402,X | |
L80DC: ROR EnCounter,X | |
L80DF: JMP $80F6 | |
L80E2: STA $0402,X | |
L80E5: STA EnCounter,X | |
L80E8: BEQ $80F6 | |
L80EA: LDA $977B,Y | |
L80ED: LSR | |
L80EE: LSR | |
L80EF: BCC $80F6 | |
L80F1: LDA #$04 | |
L80F3: JSR $856B | |
L80F6: LDA #$01 | |
L80F8: STA $66 | |
L80FA: RTS | |
| |
L80FB: LDX PageIndex | |
L80FD: BCS $8133 | |
L80FF: LDA $0405,X | |
L8102: BPL $810A | |
L8104: JSR $81FC | |
L8107: JMP $812F | |
L810A: JSR $80B0 | |
L810D: BPL $8123 | |
L810F: LDA $6B03,X | |
L8112: BEQ $8104 | |
L8114: BPL $8120 | |
L8116: CLC | |
L8117: ROR $0402,X | |
L811A: ROR EnCounter,X | |
L811D: JMP $812F | |
L8120: JSR $81B1 | |
L8123: LDA $977B,Y | |
L8126: LSR | |
L8127: LSR | |
L8128: BCC $812F | |
L812A: LDA #$04 | |
L812C: JSR $856B | |
L812F: LDA #$01 | |
L8131: STA $66 | |
L8133: RTS | |
| |
L8134: LDX PageIndex | |
L8136: BCS $816D | |
L8138: JSR $80B0 | |
L813B: BPL $815E | |
L813D: LDA $0405,X | |
L8140: BMI $8148 | |
L8142: JSR $81C7 | |
L8145: JMP $8169 | |
L8148: LDA $6B03,X | |
L814B: BEQ $8142 | |
L814D: BPL $8159 | |
L814F: CLC | |
L8150: ROR $0403,X | |
L8153: ROR $0407,X | |
L8156: JMP $8169 | |
L8159: JSR $81C0 | |
L815C: BEQ $8169 | |
L815E: LDA $977B,Y | |
L8161: LSR | |
L8162: BCC $8169 | |
L8164: LDA #$01 | |
L8166: JSR $856B | |
L8169: LDA #$01 | |
L816B: STA $66 | |
L816D: RTS | |
| |
L816E: LDX PageIndex | |
L8170: BCS $81B0 | |
L8172: JSR $80B0 | |
L8175: BPL $81A0 | |
L8177: LDA $0405,X | |
L817A: BMI $8182 | |
L817C: JSR $81C7 | |
L817F: JMP $81AC | |
L8182: LDA $6B03,X | |
L8185: BEQ $817C | |
L8187: BPL $818E | |
L8189: JSR $81C0 | |
L818C: BEQ $8198 | |
L818E: SEC | |
L818F: ROR $0403,X | |
L8192: ROR $0407,X | |
L8195: JMP $81AC | |
L8198: STA $0403,X | |
L819B: STA $0407,X | |
L819E: BEQ $81AC | |
L81A0: JSR $80B0 | |
L81A3: LSR | |
L81A4: LSR | |
L81A5: BCC $81AC | |
L81A7: LDA #$01 | |
L81A9: JSR $856B | |
L81AC: LDA #$01 | |
L81AE: STA $66 | |
L81B0: RTS | |
| |
L81B1: JSR $81B8 | |
L81B4: STA $6AFE,X | |
L81B7: RTS | |
| |
L81B8: LDA #$20 | |
L81BA: JSR $F744 | |
L81BD: LDA #$00 | |
L81BF: RTS | |
| |
L81C0: JSR $81B8 | |
L81C3: STA $6AFF,X | |
L81C6: RTS | |
| |
L81C7: JSR $81F6 | |
L81CA: BNE $81F5 | |
L81CC: LDA #$01 | |
L81CE: JSR $856B | |
L81D1: LDA $6AFF,X | |
L81D4: JSR $C3D4 | |
L81D7: STA $6AFF,X | |
| |
L81DA: JSR $81F6 | |
L81DD: BNE $81F5 | |
L81DF: JSR $80B0 | |
L81E2: SEC | |
L81E3: BPL $81ED | |
L81E5: LDA #$00 | |
L81E7: SBC $0407,X | |
L81EA: STA $0407,X | |
L81ED: LDA #$00 | |
L81EF: SBC $0403,X | |
L81F2: STA $0403,X | |
L81F5: RTS | |
| |
L81F6: JSR $F74B | |
L81F9: AND #$20 | |
L81FB: RTS | |
| |
L81FC: JSR $81F6 | |
L81FF: BNE $81F5 | |
L8201: LDA #$04 | |
L8203: JSR $856B | |
L8206: LDA $6AFE,X | |
L8209: JSR $C3D4 | |
L820C: STA $6AFE,X | |
| |
L820F: JSR $81F6 | |
L8212: BNE $822A | |
L8214: JSR $80B0 | |
L8217: SEC | |
L8218: BPL $8222 | |
L821A: LDA #$00 | |
L821C: SBC EnCounter,X | |
L821F: STA EnCounter,X | |
L8222: LDA #$00 | |
L8224: SBC $0402,X | |
L8227: STA $0402,X | |
L822A: RTS | |
| |
L822B: LDA $0405,X | |
L822E: BPL $8232 | |
L8230: LSR | |
L8231: LSR | |
L8232: LSR | |
L8233: LDA $0408,X | |
L8236: ROL | |
L8237: ASL | |
L8238: TAY | |
L8239: LDA $96DB,Y | |
L823C: STA $81 | |
L823E: LDA $96DC,Y | |
L8241: STA $82 | |
L8243: RTS | |
| |
L8244: JSR $80B0 | |
L8247: BPL $824C | |
L8249: JMP $833F | |
L824C: LDA $0405,X | |
L824F: AND #$20 | |
L8251: EOR #$20 | |
L8253: BEQ $82A2 | |
L8255: JSR $822B | |
L8258: LDY EnCounter,X | |
L825B: LDA ($81),Y | |
L825D: CMP #$F0 | |
L825F: BCC $827F | |
L8261: CMP #$FA | |
L8263: BEQ $827C | |
L8265: CMP #$FB | |
L8267: BEQ $82B0 | |
L8269: CMP #$FC | |
L826B: BEQ $82B3 | |
L826D: CMP #$FD | |
L826F: BEQ $82A5 | |
L8271: CMP #$FE | |
L8273: BEQ $82DE | |
L8275: LDA #$00 | |
L8277: STA EnCounter,X | |
L827A: BEQ $8258 | |
L827C: JMP $8312 | |
L827F: SEC | |
L8280: SBC EnDelay,X | |
L8283: BNE $8290 | |
L8285: STA EnDelay,X | |
L8288: INY | |
L8289: INY | |
L828A: TYA | |
L828B: STA EnCounter,X | |
L828E: BNE $825B | |
L8290: INC EnDelay,X | |
L8293: INY | |
L8294: LDA ($81),Y | |
L8296: ASL | |
L8297: PHP | |
L8298: JSR Adiv32 ;($C2BE)Divide by 32. | |
L829B: PLP | |
L829C: BCC $82A2 | |
L829E: EOR #$FF | |
L82A0: ADC #$00 | |
L82A2: STA $00 | |
L82A4: RTS | |
| |
L82A5: INC EnCounter,X | |
L82A8: INY | |
L82A9: LDA #$00 | |
L82AB: STA $6B01,X | |
L82AE: BEQ $825B | |
L82B0: PLA | |
L82B1: PLA | |
L82B2: RTS | |
| |
L82B3: LDA $6B03,X | |
L82B6: BPL $82BE | |
L82B8: JSR $E770 | |
L82BB: JMP $82C3 | |
L82BE: BEQ $82D2 | |
L82C0: JSR $E77B | |
L82C3: LDX PageIndex | |
L82C5: BCS $82D2 | |
L82C7: LDY EnCounter,X | |
L82CA: INY | |
L82CB: LDA #$00 | |
L82CD: STA $6B03,X | |
L82D0: BEQ $82D7 | |
L82D2: LDY EnCounter,X | |
L82D5: DEY | |
L82D6: DEY | |
L82D7: TYA | |
L82D8: STA EnCounter,X | |
L82DB: JMP $825B | |
L82DE: DEY | |
L82DF: DEY | |
L82E0: TYA | |
L82E1: STA EnCounter,X | |
L82E4: LDA $6B03,X | |
L82E7: BPL $82EF | |
L82E9: JSR $E770 | |
L82EC: JMP $82F4 | |
L82EF: BEQ $82FB | |
L82F1: JSR $E77B | |
L82F4: LDX PageIndex | |
L82F6: BCC $82FB | |
L82F8: JMP $8258 | |
L82FB: LDY EnDataIndex,X | |
L82FE: LDA $968B,Y | |
L8301: AND #$20 | |
L8303: BEQ $8312 | |
L8305: LDA $0405,X | |
L8308: EOR #$05 | |
L830A: ORA $968B,Y | |
L830D: AND #$1F | |
L830F: STA $0405,X | |
L8312: JSR $81B1 | |
L8315: JMP $82A2 | |
L8318: JSR $80B0 | |
L831B: BPL $8320 | |
L831D: JMP $8395 | |
L8320: LDA $0405,X | |
L8323: AND #$20 | |
L8325: EOR #$20 | |
L8327: BEQ $833C | |
L8329: LDY EnCounter,X | |
L832C: INY | |
L832D: LDA ($81),Y | |
L832F: TAX | |
L8330: AND #$08 | |
L8332: PHP | |
L8333: TXA | |
L8334: AND #$07 | |
L8336: PLP | |
L8337: BEQ $833C | |
L8339: JSR $C3D4 | |
L833C: STA $00 | |
L833E: RTS | |
| |
L833F: LDY #$0E | |
L8341: LDA $6AFE,X | |
L8344: BMI $835E | |
L8346: CLC | |
L8347: ADC EnCounter,X | |
L834A: STA EnCounter,X | |
L834D: LDA $0402,X | |
L8350: ADC #$00 | |
L8352: STA $0402,X | |
L8355: BPL $8376 | |
L8357: JSR $C3D4 | |
L835A: LDY #$F2 | |
L835C: BNE $8376 | |
L835E: JSR $C3D4 | |
L8361: SEC | |
L8362: STA $00 | |
L8364: LDA EnCounter,X | |
L8367: SBC $00 | |
L8369: STA EnCounter,X | |
L836C: LDA $0402,X | |
L836F: SBC #$00 | |
L8371: STA $0402,X | |
L8374: BMI $8357 | |
L8376: CMP #$0E | |
L8378: BCC $8383 | |
L837A: LDA #$00 | |
L837C: STA EnCounter,X | |
L837F: TYA | |
L8380: STA $0402,X | |
L8383: LDA $6AFC,X | |
L8386: CLC | |
L8387: ADC EnCounter,X | |
L838A: STA $6AFC,X | |
L838D: LDA #$00 | |
L838F: ADC $0402,X | |
L8392: STA $00 | |
L8394: RTS | |
| |
L8395: LDA #$00 | |
L8397: STA $00 | |
L8399: STA $02 | |
L839B: LDA #$0E | |
L839D: STA $01 | |
L839F: STA $03 | |
L83A1: LDA $0407,X | |
L83A4: CLC | |
L83A5: ADC $6AFF,X | |
L83A8: STA $0407,X | |
L83AB: STA $04 | |
L83AD: LDA #$00 | |
L83AF: LDY $6AFF,X | |
L83B2: BPL $83B6 | |
L83B4: LDA #$FF | |
L83B6: ADC $0403,X | |
L83B9: STA $0403,X | |
L83BC: TAY | |
L83BD: BPL $83D0 | |
L83BF: LDA #$00 | |
L83C1: SEC | |
L83C2: SBC $0407,X | |
L83C5: STA $04 | |
L83C7: LDA #$00 | |
L83C9: SBC $0403,X | |
L83CC: TAY | |
L83CD: JSR $E449 | |
L83D0: LDA $04 | |
L83D2: CMP $02 | |
L83D4: TYA | |
L83D5: SBC $03 | |
L83D7: BCC $83E3 | |
L83D9: LDA $00 | |
L83DB: STA $0407,X | |
L83DE: LDA $01 | |
L83E0: STA $0403,X | |
L83E3: LDA $6AFD,X | |
L83E6: CLC | |
L83E7: ADC $0407,X | |
L83EA: STA $6AFD,X | |
L83ED: LDA #$00 | |
L83EF: ADC $0403,X | |
L83F2: STA $00 | |
L83F4: RTS | |
| |
L83F5: LDX PageIndex | |
L83F7: LDA EnYRoomPos,X | |
L83FA: SEC | |
L83FB: SBC EnRadY,X | |
L83FE: AND #$07 | |
L8400: SEC | |
L8401: BNE $8406 | |
L8403: JSR $E770 | |
L8406: LDY #$00 | |
L8408: STY $00 | |
L840A: LDX PageIndex | |
L840C: BCC $844A | |
L840E: INC $00 | |
L8410: LDY EnYRoomPos,X | |
L8413: BNE $8429 | |
L8415: LDY #$F0 | |
L8417: LDA $49 | |
L8419: CMP #$02 | |
L841B: BCS $8429 | |
L841D: LDA $FC | |
L841F: BEQ $844A | |
L8421: JSR $8563 | |
L8424: BEQ $844A | |
L8426: JSR $855A | |
L8429: DEY | |
L842A: TYA | |
L842B: STA EnYRoomPos,X | |
L842E: CMP EnRadY,X | |
L8431: BNE $8441 | |
L8433: LDA $FC | |
L8435: BEQ $843C | |
L8437: JSR $8563 | |
L843A: BNE $8441 | |
L843C: INC EnYRoomPos,X | |
L843F: CLC | |
L8440: RTS | |
| |
L8441: LDA $0405,X | |
L8444: BMI $8449 | |
L8446: INC $6B01,X | |
L8449: SEC | |
L844A: RTS | |
| |
L844B: LDX PageIndex | |
L844D: LDA EnYRoomPos,X | |
L8450: CLC | |
L8451: ADC EnRadY,X | |
L8454: AND #$07 | |
L8456: SEC | |
L8457: BNE $845C | |
L8459: JSR $E77B | |
L845C: LDY #$00 | |
L845E: STY $00 | |
L8460: LDX PageIndex | |
L8462: BCC $84A6 | |
L8464: INC $00 | |
L8466: LDY EnYRoomPos,X | |
L8469: CPY #$EF | |
L846B: BNE $8481 | |
L846D: LDY #$FF | |
L846F: LDA $49 | |
L8471: CMP #$02 | |
L8473: BCS $8481 | |
L8475: LDA $FC | |
L8477: BEQ $84A6 | |
L8479: JSR $8563 | |
L847C: BNE $84A6 | |
L847E: JSR $855A | |
L8481: INY | |
L8482: TYA | |
L8483: STA EnYRoomPos,X | |
L8486: CLC | |
L8487: ADC EnRadY,X | |
L848A: CMP #$EF | |
L848C: BNE $849D | |
L848E: LDA $FC | |
L8490: BEQ $8497 | |
L8492: JSR $8563 | |
L8495: BEQ $849D | |
L8497: DEC EnYRoomPos,X | |
L849A: CLC | |
L849B: BCC $84A6 | |
L849D: LDA $0405,X | |
L84A0: BMI $84A5 | |
L84A2: DEC $6B01,X | |
L84A5: SEC | |
L84A6: RTS | |
| |
L84A7: LDX PageIndex | |
L84A9: LDA EnXRoomPos,X | |
L84AC: SEC | |
L84AD: SBC EnRadX,X | |
L84B0: AND #$07 | |
L84B2: SEC | |
L84B3: BNE $84B8 | |
L84B5: JSR $E8F1 | |
L84B8: LDY #$00 | |
L84BA: STY $00 | |
L84BC: LDX PageIndex | |
L84BE: BCC $84FD | |
L84C0: INC $00 | |
L84C2: LDY EnXRoomPos,X | |
L84C5: BNE $84DA | |
L84C7: LDA $49 | |
L84C9: CMP #$02 | |
L84CB: BCC $84DA | |
L84CD: LDA $FD | |
L84CF: BEQ $84D4 | |
L84D1: JSR $8563 | |
L84D4: CLC | |
L84D5: BEQ $84FD | |
L84D7: JSR $855A | |
L84DA: DEC EnXRoomPos,X | |
L84DD: LDA EnXRoomPos,X | |
L84E0: CMP EnRadX,X | |
L84E3: BNE $84F4 | |
L84E5: LDA $FD | |
L84E7: BEQ $84EE | |
L84E9: JSR $8563 | |
L84EC: BNE $84F4 | |
L84EE: INC EnXRoomPos,X | |
L84F1: CLC | |
L84F2: BCC $84FD | |
L84F4: LDA $0405,X | |
L84F7: BPL $84FC | |
L84F9: INC $6B01,X | |
L84FC: SEC | |
L84FD: RTS | |
| |
L84FE: LDX PageIndex | |
L8500: LDA EnXRoomPos,X | |
L8503: CLC | |
L8504: ADC EnRadX,X | |
L8507: AND #$07 | |
L8509: SEC | |
L850A: BNE $850F | |
L850C: JSR $E8FC | |
L850F: LDY #$00 | |
L8511: STY $00 | |
L8513: LDX PageIndex | |
L8515: BCC $8559 | |
L8517: INC $00 | |
L8519: INC EnXRoomPos,X | |
L851C: BNE $8536 | |
L851E: LDA $49 | |
L8520: CMP #$02 | |
L8522: BCC $8536 | |
L8524: LDA $FD | |
L8526: BEQ $852D | |
L8528: JSR $8563 | |
L852B: BEQ $8533 | |
L852D: DEC EnXRoomPos,X | |
L8530: CLC | |
L8531: BCC $8559 | |
L8533: JSR $855A | |
L8536: LDA EnXRoomPos,X | |
L8539: CLC | |
L853A: ADC EnRadX,X | |
L853D: CMP #$FF | |
L853F: BNE $8550 | |
L8541: LDA $FD | |
L8543: BEQ $854A | |
L8545: JSR $8563 | |
L8548: BEQ $8550 | |
L854A: DEC EnXRoomPos,X | |
L854D: CLC | |
L854E: BCC $8559 | |
L8550: LDA $0405,X | |
L8553: BPL $8558 | |
L8555: DEC $6B01,X | |
L8558: SEC | |
L8559: RTS | |
| |
L855A: LDA EnNameTable,X | |
L855D: EOR #$01 | |
L855F: STA EnNameTable,X | |
L8562: RTS | |
| |
L8563: LDA EnNameTable,X | |
L8566: EOR $FF | |
L8568: AND #$01 | |
L856A: RTS | |
| |
L856B: EOR $0405,X | |
L856E: STA $0405,X | |
L8571: RTS | |
| |
;---------------------------------[ Object animation data tables ]---------------------------------- | |
| |
;The following tables are indices into the FramePtrTable that correspond to various animations. The | |
;FramePtrTable represents individual frames and the entries in ObjectAnimIndexTbl are the groups of | |
;frames responsible for animaton Samus, her weapons and other objects. | |
| |
ObjectAnimIndexTbl: | |
| |
;Samus run animation. | |
L8572: .byte $03, $04, $05, $FF | |
| |
;Samus front animation. | |
L8576: .byte $07, $FF | |
| |
;Samus jump out of ball animation. | |
L8578: .byte $17 | |
| |
;Samus Stand animation. | |
L8579: .byte $08, $FF | |
| |
;Samus stand and fire animation. | |
L857B: .byte $22, $FF | |
| |
;Samus stand and jump animation. | |
L857D: .byte $04 | |
| |
;Samus Jump animation. | |
L857E: .byte $10, $FF | |
| |
;Samus summersault animation. | |
L8580: .byte $17, $18, $19, $1A, $FF | |
| |
;Samus run and jump animation. | |
L8585: .byte $03, $17, $FF | |
| |
;Samus roll animation. | |
L8588: .byte $1E, $1D, $1C, $1B, $FF | |
| |
;Bullet animation. | |
L858D: .byte $28, $FF | |
| |
;Bullet hit animation. | |
L858F: .byte $2A, $F7, $FF | |
| |
;Samus jump and fire animation. | |
L8592: .byte $12, $FF | |
| |
;Samus run and fire animation. | |
L8594: .byte $0C, $0D, $0E, $FF | |
| |
;Samus point up and shoot animation. | |
L8598: .byte $30 | |
| |
;Samus point up animation. | |
L8599: .byte $2B, $FF | |
| |
;Door open animation. | |
L859B: .byte $31, $31, $33, $F7, $FF | |
| |
;Door close animation. | |
L85A0: .byte $33, $33, $31, $FF | |
| |
;Samus explode animation. | |
L85A4: .byte $35, $FF | |
| |
;Samus jump and point up animation. | |
L85A6: .byte $39, $38, $FF | |
| |
;Samus run and point up animation. | |
L85A9: .byte $40, $41, $42, $FF | |
| |
;Samus run, point up and shoot animation 1. | |
L85AD: .byte $46, $FF | |
| |
;Samus run, point up and shoot animation 2. | |
L85AF: .byte $47, $FF | |
| |
;Samus run, point up and shoot animation 3. | |
L85B1: .byte $48, $FF | |
| |
;Samus on elevator animation 1. | |
L85B3: .byte $07, $F7, $F7, $07, $F7, $F7, $F7, $07, $F7, $F7, $F7, $F7, $07, $F7, $FF | |
| |
;Samus on elevator animation 2. | |
L85C2: .byte $23, $F7, $F7, $23, $F7, $F7, $F7, $23, $F7, $F7, $F7, $F7, $23, $F7, $FF | |
| |
;Samus on elevator animation 3. | |
L85D1: .byte $07, $F7, $F7, $F7, $F7, $07, $F7, $F7, $F7, $07, $F7, $F7, $07, $F7, $FF | |
| |
;Samus on elevator animation 4. | |
L85E0: .byte $23, $F7, $F7, $F7, $F7, $23, $F7, $F7, $F7, $23, $F7, $F7, $23, $F7, $FF | |
| |
;Wave beam animation. | |
L85EF: .byte $4B, $FF | |
| |
;Bomb tick animation. | |
L85F1: .byte $4E, $4F, $FF | |
| |
;Bomb explode animation. | |
L85F4: .byte $3C, $4A, $49, $4A, $4D, $4A, $4D, $F7, $FF | |
| |
;Missile left animation. | |
L85FD: .byte $26, $FF | |
| |
;Missile right animation. | |
L85FF: .byte $25, $FF | |
| |
;Missile up animation. | |
L8601: .byte $27, $FF | |
| |
;Missile explode animation. | |
L8603: .byte $67, $67, $67, $68, $68, $69, $F7, $FF | |
| |
;----------------------------[ Sprite drawing pointer tables ]-------------------------------------- | |
| |
;The above animation pointers provide an index into the following table | |
;for the animation sequences. | |
| |
FramePtrTable: | |
L860B: .word $87CB, $87CB, $87CB, $87CB, $87DD, $87F0, $8802, $8802 | |
L861B: .word $8818, $882C, $882C, $882C, $882C, $883E, $8851, $8863 | |
L862B: .word $8863, $8874, $8874, $8885, $8885, $8885, $8885, $8885 | |
L863B: .word $888F, $8899, $88A3, $88AD, $88B8, $88C3, $88CE, $88D9 | |
L864B: .word $88D9, $88D9, $88D9, $88EE, $88F8, $88F8, $88FE, $8904 | |
L865B: .word $890A, $890F, $890F, $8914, $8928, $8928, $8928, $8928 | |
L866B: .word $8928, $893C, $8948, $8948, $8954, $8954, $8961, $8961 | |
L867B: .word $8961, $8974, $8987, $8987, $8987, $8995, $8995, $8995 | |
L868B: .word $8995, $89A9, $89BE, $89D2, $89D2, $89D2, $89D2, $89E6 | |
L869B: .word $89FB, $8A0F, $8A1D, $8A21, $8A26, $8A26, $8A3C, $8A41 | |
L86AB: .word $8A46, $8A4E, $8A56, $8A5E, $8A66, $8A6E, $8A76, $8A7E | |
L86BB: .word $8A86, $8A8E, $8A9C, $8AA1, $8AA6, $8AAE, $8ABA, $8AC4 | |
L86CB: .word $8AC4, $8AC4, $8AC4, $8AC4, $8AC4, $8AC4, $8AD8, $8AE9 | |
L86DB: .word $8AF3, $8B03 | |
| |
;The following table provides pointers to data used for the placement of the sprites that make up | |
;Samus and other non-enemy objects. | |
| |
PlacePtrTable: | |
L86DF: .word $8701, $871F, $872B, $8737, $8747, $8751, $86FD, $875D | |
L86EF: .word $8775, $878D, $8791, $8799, $87A5, $8749, $87B1 | |
| |
;------------------------------[ Sprite placement data tables ]------------------------------------- | |
| |
;Sprite placement data. The placement data is grouped into two byte segments. The first byte is the | |
;y placement byte and the second is the x placement byte. If the MSB is set in the byte, the byte | |
;is in twos compliment format so when it is added to the object position, the end result is to | |
;decrease the x or y position of the sprite. The Samus explode table is a special case with special | |
;data bytes. The format of those data bytes is listed just above the Samus explode data. Each data | |
;table has a graphical representation above it to show how the sprites are laid out with respect to | |
;the object position, which is represented by a * in the table. The numbers in the lower right corner | |
;of the boxes indicates which segment of the data table represents which box in the graphic. Each box | |
;is filled with an 8x8 sprite. | |
| |
;Samus pointing up frames. Added to the main Samus animation table below. | |
; +--------+ <----0 | |
; +--------+ <----1 | |
; | | | |
; | | | |
; | | | |
; +--------+ | |
; +--------+ | |
; | |
; | |
; | |
; | |
; | |
; | |
; | |
; | |
; * | |
; +--0--+ +--1--+ | |
L86FD: .byte $E8, $FC, $EA, $FC | |
| |
;Several Samus frames. | |
; +-------+ <---------------D | |
; +-------+ <---------------E | |
; | | | |
; | +---+----+--------+ | |
; | | | | | | |
; +-------+ | | | |
; +-------+ | | | |
; | 0| 1| | |
; +----+-+-+----+-+-+--------+ | |
; | | | | | | | | | |
; | | | | | | | | | |
; | | | | | | | | | |
; | | |2| B|C|3| 4| | |
; +----+-+-+----+-+-*--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 5| 6| 7| | |
; +--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 8| 9| A| | |
; +--------+--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ +--6--+ +--7--+ | |
L8701: .byte $F0, $F8, $F0, $00, $F8, $F0, $F8, $F8, $F8, $00, $00, $F8, $00, $00, $00, $08 | |
; +--8--+ +--9--+ +--A--+ +--B--+ +--C--+ +--D--+ +--E--+ | |
L8711: .byte $08, $F8, $08, $00, $08, $08, $F8, $F4, $F8, $F6, $EC, $F4, $EE, $F4 | |
| |
;Samus summersault and roll frames. | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 0| 1| | |
; +--------+--------+ | |
; | | | | |
; +--------+--------+ | |
; | * | | |
; | 2| 3| | |
; +--------+--------+ | |
; | 4| 5| | |
; +--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ | |
L871F: .byte $F3, $F8, $F3, $00, $FB, $F8, $FB, $00, $03, $F8, $03, $00 | |
| |
;Samus summersault frame. | |
; +--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 0| 1| 2| | |
; +--------+-*------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 3| 4| 5| | |
; +--------+--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ | |
L872B: .byte $F8, $F6, $F8, $FE, $F8, $06, $00, $F6, $00, $FE, $00, $06 | |
| |
;Elevator frame. | |
; +--------+--------+--------+--------+--------+--------+--------+--------+ | |
; | | | | | | | | | | |
; | | | | | | | | | | |
; | | * | | | | | | | |
; | 0| 1| 2| 3| 4| 5| 6| 7| | |
; +--------+--------+--------+--------+--------+--------+--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ +--6--+ +--7--+ | |
L8737: .byte $FC, $F0, $FC, $F8, $FC, $00, $FC, $08, $FC, $10, $FC, $18, $FC, $20, $FC, $28 | |
| |
;Several projectile frames. | |
; +--------+ | |
; | | | |
; | | | |
; | * | | |
; | 0| | |
; +--------+ | |
; +--0--+ | |
L8747: .byte $FC, $FC | |
| |
;Power-up items and bomb explode frames. | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 0| 1| | |
; +--------*--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 2| 3| | |
; +--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ | |
L8749: .byte $F8, $F8, $F8, $00, $00, $F8, $00, $00 | |
| |
;Door frames. | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 0| | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 1| | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 2| | |
; *--------+ | |
; | | | |
; | | | |
; | | | |
; | 3| | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 4| | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 5| | |
; +--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ | |
L8751: .byte $E8, $00, $F0, $00, $F8, $00, $00, $00, $08, $00, $10, $00 | |
| |
;Samus explode. Special case. The bytes that are #$8X indicate displacement data will be loaded | |
;from a table for the y direction and from a counter for the x direction. The initial displacement | |
;bytes start at $8769. If the LSB is clear in the bytes where the upper nibble is #$8, those | |
;data bytes will be used to decrease the x position of the sprite each frame. If the LSB is set, | |
;the data bytes will increase the x position of the sprite each frame. | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 0| 1| | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | * | | |
; | 2| 3| | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 4| 5| | |
; +--------+--------+ | |
; +--0--+ +--1--+ | |
L875D: .byte $80, $80, $81, $81, $82, $82, $83, $83, $84, $84, $85, $85, $F4, $F8, $F4, $00 | |
; +--2--+ +--3--+ +--4--+ +--5--+ | |
L876D: .byte $FC, $F8, $FC, $00, $04, $F8, $04, $00 | |
| |
;Bomb explode frame. | |
; +--------+--------+--------+--------+ | |
; | | | | | | |
; | | | | | | |
; | | | | | | |
; | 3| 4| 0| 1| | |
; +--------+--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 5| | 2| | |
; +--------+ * +--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 6| | 9| | |
; +--------+--------+--------+--------+ | |
; | | | | | | |
; | | | | | | |
; | | | | | | |
; | 7| 8| A| B| | |
; +--------+--------+--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ +--6--+ +--7--+ | |
L8775: .byte $F0, $00, $F0, $08, $F8, $08, $F0, $F0, $F0, $F8, $F8, $F0, $00, $F0, $08, $F0 | |
; +--8--+ +--9--+ +--A--+ +--B--+ | |
L8785: .byte $08, $F8, $00, $08, $08, $00, $08, $08 | |
| |
;Missile up frame. | |
; +--------+ | |
; | | | |
; | | | |
; | | | |
; | 0| | |
; +----*---+ | |
; | | | |
; | | | |
; | | | |
; | 1| | |
; +--------+ | |
; +--0--+ +--1--+ | |
L878D: .byte $F8, $FC, $00, $FC | |
| |
;Missile left/right and missile explode frames. | |
; +--------+--------+ +--------+--------+ | |
; | | | | | | | |
; | | | | | | | |
; | * | | | | | |
; | 0| 1| | 2| 3| | |
; +--------+--------+ +--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ | |
L8791: .byte $FC, $F8, $FC, $00, $FC, $10, $FC, $18 | |
| |
;Missile explode frame. | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 1| 2| | |
; +--------+--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | * | | | |
; | 0| | 3| | |
; +--------+--------+--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 4| 5| | |
; +--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ | |
L8799: .byte $FC, $F0, $F4, $F8, $F4, $00, $FC, $08, $04, $F8, $04, $00 | |
| |
;Missile explode frame. | |
; +--------+ +--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 1| | 2| | |
; +--------+ +--------+ | |
; | |
; | |
; | |
; | |
; +--------+ +--------+ | |
; | | | | | |
; | | | | | |
; | | * | | | |
; | 0| | 3| | |
; +--------+ +--------+ | |
; | |
; | |
; | |
; | |
; +--------+ +--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 4| | 5| | |
; +--------+ +--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ | |
L87A5: .byte $FC, $E8, $EC, $F0, $EC, $08, $FC, $10, $0C, $F0, $0C, $08 | |
| |
;Statue frames. | |
; +--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 4| 5| 6| | |
; +--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | 7| 8| 9| | |
; +--------+--------+--------+ | |
; | | | | | |
; | | | | | |
; | | | | | |
; | A| B| C| | |
; +--------+--------*--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 0| 1| | |
; +--------+--------+ | |
; | | | | |
; | | | | |
; | | | | |
; | 2| 3| | |
; +--------+--------+ | |
; +--0--+ +--1--+ +--2--+ +--3--+ +--4--+ +--5--+ +--6--+ +--7--+ | |
L87B1: .byte $00, $F8, $00, $00, $08, $F8, $08, $00, $E8, $F0, $E8, $F8, $E8, $00, $F0, $F0 | |
; +--8--+ +--9--+ +--A--+ +--B--+ +--C--+ | |
L87C1: .byte $F0, $F8, $F0, $00, $F8, $F0, $F8, $F8, $F8, $00 | |
| |
;-------------------------------[ Sprite frame data tables ]--------------------------------------- | |
| |
;Frame drawing data. The format for the frame drawing data is as follows: | |
;There are 4 control bytes associated with the frame data and they are #$FC, #$FD, #$FE and #$FF. | |
; | |
;#$FC displaces the location of the object in the x and y direction. The first byte following #$FC | |
;is the y displacement of the object and the second byte is the x displacement. any further bytes | |
;are pattern table index bytes until the next control byte is reached. | |
; | |
;#$FD tells the program to change the sprite control byte. The next byte after #$FD is the new | |
;control byte. Only the 4 upper bits are used. Any further bytes are pattern table index bytes | |
;until the next control byte is reached. | |
; | |
;#$FE causes the next placement position to be skipped. Any further bytes are pattern table index | |
;bytes until the next control byte is reached. | |
; | |
;#$FF ends the frame drawing data segment. | |
; | |
;The first 3 bytes are unique. The first byte contains two parts: AAAABBBB. The upper 4 bits | |
;are sprite control data which control mirroring and color bits. The lower 4 bits are multiplied | |
;by 2 and used as an index into the PlacePtrTable to find the proper placement data for the | |
;current frame. The second byte is saved as the object's y radius and the third byte is saved | |
;as the object's x radius. | |
| |
;Samus run. | |
L87CB: .byte $40, $0F, $04, $00, $01, $FD, $20, $FE, $41, $40, $FD, $60, $20, $21, $FE, $FE | |
L87DB: .byte $31, $FF | |
| |
;Samus run. | |
L87DD: .byte $40, $0F, $04, $02, $03, $FD, $20, $FE, $43, $42, $FD, $60, $22, $23, $FE, $32 | |
L87ED: .byte $33, $34, $FF | |
| |
;Samus run. | |
L87F0: .byte $40, $0F, $04, $05, $06, $FD, $20, $FE, $45, $44, $FD, $60, $25, $26, $27, $35 | |
L8800: .byte $36, $FF | |
| |
;Samus facing forward. | |
L8802: .byte $00, $0F, $04, $09, $FD, $60, $09, $FD, $20, $FE, $19, $1A, $FD, $20, $29, $2A | |
L8812: .byte $FE, $39, $FD, $60, $39, $FF | |
| |
;Samus stand. | |
L8818: .byte $40, $0F, $04, $FD, $20, $0E, $0D, $FE, $1E, $1D, $2E, $2D, $FE, $FD, $60, $3B | |
L8828: .byte $3C, $FE, $17, $FF | |
| |
;Samus run and fire. | |
L882C: .byte $40, $0F, $04, $00, $01, $FD, $20, $4B, $4A, $49, $FD, $60, $20, $21, $FE, $FE | |
L883C: .byte $31, $FF | |
| |
;Samus run and fire. | |
L883E: .byte $40, $0F, $04, $00, $01, $FD, $20, $4B, $4A, $49, $FD, $60, $22, $23, $FE, $32 | |
L884E: .byte $33, $34, $FF | |
| |
;Samus run and fire. | |
L8851: .byte $40, $0F, $04, $00, $01, $FD, $20, $4B, $4A, $49, $FD, $60, $25, $26, $27, $35 | |
L8861: .byte $36, $FF | |
| |
;Samus stand and jump. | |
L8863: .byte $40, $0F, $04, $00, $01, $FD, $20, $FE, $41, $40, $FD, $60, $22, $07, $08, $32 | |
L8873: .byte $FF | |
| |
;Samus jump and fire. | |
L8874: .byte $40, $0F, $04, $00, $01, $FD, $20, $4B, $4A, $49, $FD, $60, $22, $07, $08, $32 | |
L8884: .byte $FF | |
| |
;Samus summersault. | |
L8885: .byte $41, $0F, $04, $52, $53, $62, $63, $72, $73, $FF | |
| |
;Samus summersault. | |
L888F: .byte $42, $0F, $04, $54, $55, $56, $64, $65, $66, $FF | |
| |
;Samus summersault. | |
L8899: .byte $81, $0F, $04, $52, $53, $62, $63, $72, $73, $FF | |
| |
;Samus summersault. | |
L88A3: .byte $82, $0F, $04, $54, $55, $56, $64, $65, $66, $FF | |
| |
;Samus roll. | |
L88AD: .byte $01, $08, $04, $FC, $03, $00, $50, $51, $60, $61, $FF | |
| |
;Samus roll. | |
L88B8: .byte $81, $08, $04, $FC, $FD, $00, $50, $51, $60, $61, $FF | |
| |
;Samus roll. | |
L88C3: .byte $C1, $08, $04, $FC, $FD, $00, $50, $51, $60, $61, $FF | |
| |
;Samus roll. | |
L88CE: .byte $41, $08, $04, $FC, $03, $00, $50, $51, $60, $61, $FF | |
| |
;Samus stand and fire. | |
L88D9: .byte $40, $0F, $04, $FD, $20, $0E, $0D, $FE, $1E, $1D, $2E, $2D, $FE, $FD, $60, $3B | |
L88E9: .byte $3C, $FE, $FE, $17, $FF | |
| |
;Elevator. | |
L88EE: .byte $03, $04, $10, $28, $38, $38, $FD, $60, $28, $FF | |
| |
;Missile right. | |
L88F8: .byte $4A, $04, $08, $5E, $5F, $FF | |
| |
;Missile left. | |
L88FE: .byte $0A, $04, $08, $5E, $5F, $FF | |
| |
;Missile up. | |
L8904: .byte $09, $08, $04, $14, $24, $FF | |
| |
;Bullet fire. | |
L890A: .byte $04, $02, $02, $30, $FF | |
| |
;Bullet hit. | |
L890F: .byte $04, $00, $00, $04, $FF | |
| |
;Samus stand and point up. | |
L8914: .byte $46, $0F, $04, $69, $FE, $FD, $20, $7A, $79, $FE, $78, $77, $2E, $2D, $FE, $FD | |
L8924: .byte $60, $3B, $3C, $FF | |
| |
;Samus from ball to pointing up. | |
L8928: .byte $46, $0F, $04, $FE, $69, $FD, $20, $7A, $79, $FE, $78, $77, $2E, $2D, $FE, $FD | |
L8938: .byte $60, $3B, $3C, $FF | |
| |
;Door closed. | |
L893C: .byte $35, $18, $08, $0F, $1F, $2F, $FD, $A3, $2F, $1F, $0F, $FF | |
| |
;Door open/close. | |
L8948: .byte $35, $18, $04, $6A, $6B, $6C, $FD, $A3, $6C, $6B, $6A, $FF | |
| |
;Samus explode. | |
L8954: .byte $07, $00, $00, $FC, $FC, $00, $0B, $0C, $1B, $1C, $2B, $2C, $FF | |
| |
;Samus jump and point up. | |
L8961: .byte $46, $0F, $04, $69, $FD, $20, $FE, $7A, $79, $FE, $78, $77, $FD, $60, $22, $07 | |
L8971: .byte $08, $32, $FF | |
| |
;Samus jump and point up. | |
L8974: .byte $46, $0F, $04, $FE, $69, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $22, $07 | |
L8984: .byte $08, $32, $FF | |
| |
;Bomb explode. | |
L8987: .byte $0D, $0C, $0C, $74, $FD, $60, $74, $FD, $A0, $74, $FD, $E0, $74, $FF | |
| |
;Samus run and point up. | |
L8995: .byte $46, $0F, $04, $69, $FE, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $20, $21 | |
L89A5: .byte $FE, $FE, $31, $FF | |
| |
;Samus run and point up. | |
L89A9: .byte $46, $0F, $04, $69, $FE, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $22, $23 | |
L89B9: .byte $FE, $32, $33, $34, $FF | |
| |
;Samus run and point up. | |
L89BE: .byte $46, $0F, $04, $69, $FE, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $25, $26 | |
L89CE: .byte $27, $35, $36, $FF | |
| |
;Samus run and point up. | |
L89D2: .byte $46, $0F, $04, $FE, $69, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $20, $21 | |
L89E2: .byte $FE, $FE, $31, $FF | |
| |
;Samus point up, run and fire. | |
L89E6: .byte $46, $0F, $04, $FE, $69, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $22, $23 | |
L89F6: .byte $FE, $32, $33, $34, $FF | |
| |
;Samus point up, run and fire. | |
L89FB: .byte $46, $0F, $04, $FE, $69, $FD, $20, $7A, $79, $FE, $78, $77, $FD, $60, $25, $26 | |
L8A0B: .byte $27, $35, $36, $FF | |
| |
;Bomb explode. | |
L8A0F: .byte $0D, $0C, $0C, $75, $FD, $60, $75, $FD, $A0, $75, $FD, $E0, $75, $FF | |
| |
;Bomb explode. | |
L8A1D: .byte $00, $00, $00, $FF | |
| |
;Wave beam. | |
L8A21: .byte $04, $04, $04, $4C, $FF | |
| |
;Bomb explode. | |
L8A26: .byte $08, $10, $10, $3D, $3E, $4E, $FD, $60, $3E, $3D, $4E, $FD, $E0, $4E, $3E, $3D | |
L8A36: .byte $FD, $A0, $4E, $3D, $3E, $FF | |
| |
;Bomb tick. | |
L8A3C: .byte $04, $04, $04, $70, $FF | |
| |
;Bomb tick. | |
L8A41: .byte $04, $04, $04, $71, $FF | |
| |
;Bomb item. | |
L8A46: .byte $0D, $03, $03, $86, $87, $96, $97, $FF | |
| |
;High jump item. | |
L8A4E: .byte $0D, $03, $03, $7B, $7C, $8B, $8C, $FF | |
| |
;Long beam item. | |
L8A56: .byte $0D, $03, $03, $88, $67, $98, $99, $FF | |
| |
;Screw attack item. | |
L8A5E: .byte $0D, $03, $03, $80, $81, $90, $91, $FF | |
| |
;Maru Mari item. | |
L8A66: .byte $0D, $03, $03, $7D, $7E, $8D, $8E, $FF | |
| |
;Varia item. | |
L8A6E: .byte $0D, $03, $03, $82, $83, $92, $93, $FF | |
| |
;Wave beam item. | |
L8A76: .byte $0D, $03, $03, $88, $89, $98, $99, $FF | |
| |
;Ice beam item. | |
L8A7E: .byte $0D, $03, $03, $88, $68, $98, $99, $FF | |
| |
;Energy tank item. | |
L8A86: .byte $0D, $03, $03, $84, $85, $94, $95, $FF | |
| |
;Missile item. | |
L8A8E: .byte $0D, $03, $03, $3F, $FD, $40, $3F, $FD, $00, $4F, $FD, $40, $4F, $FF | |
| |
;Skree burrow. | |
L8A9C: .byte $34, $04, $04, $F2, $FF | |
| |
;Not used. | |
L8AA1: .byte $04, $00, $00, $5A, $FF, $13, $00, $00, $B0, $B1, $B2, $B3, $FF, $13, $00, $00 | |
L8AB1: .byte $B4, $B5, $B6, $B7, $B8, $B6, $B9, $B3, $FF, $13, $00, $00, $B3, $BA, $BA, $FE | |
L8AC1: .byte $80, $80, $FF | |
| |
;Kraid statue. | |
L8AC4: .byte $1E, $00, $08, $FA, $FB, $FA, $FB, $FC, $00, $04, $C5, $C6, $C7, $D5, $D6, $D7 | |
L8AD4: .byte $E5, $E6, $E7, $FF | |
| |
;Ridley statue. | |
L8AD8: .byte $1E, $00, $08, $FA, $FB, $FA, $FB, $FE, $C8, $C9, $EB, $D8, $D9, $EA, $E8, $E9 | |
L8AE8: .byte $FF | |
| |
;Missile explode. | |
L8AE9: .byte $0A, $04, $08, $FD, $00, $57, $FD, $40, $57, $FF | |
| |
;Missile explode. | |
L8AF3: .byte $0B, $04, $0C, $FD, $00, $57, $18, $FD, $40, $18, $57, $FD, $C0, $18, $18, $FF | |
| |
;Missile explode. | |
L8B03: .byte $0C, $04, $10, $FD, $00, $57, $18, $FD, $40, $18, $57, $FD, $C0, $18, $18, $FF | |
| |
;------------------------------------[ Samus enter door routines ]----------------------------------- | |
| |
;This function is called once when Samus first enters a door. | |
| |
SamusEnterDoor: | |
L8B13: LDA DoorStatus ;The code determines if Samus has entered a door if the--> | |
L8B15: BNE ++++ ;door status is 0, but door data information has been--> | |
L8B17: LDY SamusDoorData ;written. If both conditions are met, Samus has just--> | |
L8B19: BEQ ++++ ;entered a door. | |
L8B1B: STA CurrentMissilePickups ; | |
L8B1D: STA CurrentEnergyPickups ;Reset current missile and energy power-up counters. | |
L8B1F: LDA RandomNumber1 ; | |
L8B21: AND #$0F ;Randomly recalculate max missile pickups(16 max, 0 min). | |
L8B23: STA MaxMissilePickup ; | |
L8B25: ASL ; | |
L8B26: ORA #$40 ;*2 for energy pickups and set bit 6(128 max, 64 min). | |
L8B28: STA MaxEnergyPickup ; | |
L8B2A: LDA PPUCNT0ZP ; | |
L8B2C: EOR #$01 ; | |
L8B2E: AND #$01 ;Erase name table door data for new room. | |
L8B30: TAY ; | |
L8B31: LSR ; | |
L8B32: STA $006C,Y ; | |
L8B35: LDA ScrollDir ; | |
L8B37: AND #$02 ;Is Samus scrolling horizontally?--> | |
L8B39: BNE + ;If so, branch. | |
L8B3B: LDX #$04 ;Samus currently scrolling vertically. | |
L8B3D: LDA ScrollY ;Is room centered on screen?--> | |
L8B3F: BEQ +++++ ;If so, branch. | |
L8B41: LDA $FF ; | |
L8B43: EOR ObjectHi ;Get inverse of Samus' current nametable. | |
L8B46: LSR ; | |
L8B47: BCC +++ ;If Samus is on nametable 3, branch. | |
L8B49: BCS ++ ;If Samus is on nametable 0, branch to decrement x. | |
| |
L8B4B:* LDX #$02 ;Samus is currently scrolling horizontally. | |
L8B4D: LDA ObjectX ;Is Samus entering a left hand door?--> | |
L8B50: BPL ++ ;If so, branch. | |
L8B52:* DEX ; | |
| |
SetDoorEntryInfo: | |
L8B53:* TXA ;X contains door scroll status and is transferred to A. | |
L8B54: STA DoorScrollStatus ;Save door scroll status. | |
L8B56: JSR SamusInDoor ;($8B74)Indicate Samus just entered a door. | |
L8B59: LDA #$12 ; | |
L8B5B: STA DoorDelay ;Set DoorDelay to 18 frames(going into door). | |
L8B5D: LDA SamusDoorData ; | |
L8B5F: JSR Amul16 ;($C2C5)*16. Move scroll toggle data to upper 4 bits. | |
L8B62: ORA ObjAction ;Keep Samus action so she will appear the same comming--> | |
L8B65: STA SamusDoorData ;out of the door as she did going in. | |
L8B67: LDA #$05 ; | |
L8B69: STA ObjAction ;Indicate Samus is in a door. | |
L8B6C:* RTS ; | |
| |
L8B6D:* JSR SetDoorEntryInfo ;($8B53)Save Samus action and set door entry timer. | |
L8B70: JSR VerticalRoomCentered ;($E21B)Room is centered. Toggle scroll. | |
| |
L8B73: TXA ;X=#$01 or #$02(depending on which door Samus is in). | |
| |
SamusInDoor: | |
L8B74: ORA #$80 ;Set MSB of DoorStatus to indicate Samus has just--> | |
L8B76: STA DoorStatus ;entered a door. | |
L8B78: RTS ; | |
| |
;---------------------------------------------------------------------------------------------------- | |
| |
L8B79: LDX #$B0 | |
L8B7B:* JSR $8B87 | |
L8B7E: LDA PageIndex | |
L8B80: SEC | |
L8B81: SBC #$10 | |
L8B83: TAX | |
L8B84: BMI - | |
L8B86: RTS | |
| |
L8B87: STX PageIndex | |
L8B89: LDA ObjAction,X | |
L8B8C: JSR ChooseRoutine ;($C27C) | |
| |
L8B8F: .word $C45C | |
L8B91: .word $8B9D | |
L8B93: .word $8BD5 | |
L8B95: .word $8C01 | |
L8B97: .word $8C84 | |
L8B99: .word $8CC6 | |
L8B9B: .word $8CF0 | |
| |
L8B9D: INC $0300,X | |
L8BA0: LDA #$30 | |
L8BA2: JSR SetProjectileAnim ;($D2FA) | |
L8BA5: JSR $8CFB | |
L8BA8: LDY $0307,X | |
L8BAB: LDA $8BD1,Y | |
L8BAE: STA $030F,X | |
L8BB1: LDA $0307,X | |
L8BB4: CMP #$03 | |
L8BB6: BNE $8BBA | |
L8BB8: LDA #$01 | |
L8BBA: ORA #$A0 | |
L8BBC: STA $6B | |
L8BBE: LDA #$00 | |
L8BC0: STA $030A,X | |
L8BC3: TXA | |
L8BC4: AND #$10 | |
L8BC6: EOR #$10 | |
L8BC8: ORA $6B | |
L8BCA: STA $6B | |
L8BCC: LDA #$06 | |
L8BCE: JMP $DE47 | |
| |
L8BD1: .byte $05, $01, $0A, $01 | |
| |
L8BD5: LDA $030A,X | |
L8BD8: AND #$04 | |
L8BDA: BEQ $8BB1 | |
L8BDC: DEC $030F,X | |
L8BDF: BNE $8BB1 | |
L8BE1: LDA #$03 | |
L8BE3: CMP $0307,X | |
L8BE6: BNE $8BEE | |
L8BE8: LDY $010B | |
L8BEB: INY | |
L8BEC: BNE $8BB1 | |
L8BEE: STA $0300,X | |
L8BF1: LDA #$50 | |
L8BF3: STA $030F,X | |
L8BF6: LDA #$2C | |
L8BF8: STA $0305,X | |
L8BFB: SEC | |
L8BFC: SBC #$03 | |
L8BFE: JMP $8C7E | |
L8C01: LDA DoorStatus | |
L8C03: BEQ $8C1D | |
L8C05: LDA $030C | |
L8C08: EOR $030C,X | |
L8C0B: LSR | |
L8C0C: BCS $8C1D | |
L8C0E: LDA $030E | |
L8C11: EOR $030E,X | |
L8C14: BMI $8C1D | |
L8C16: LDA #$04 | |
L8C18: STA $0300,X | |
L8C1B: BNE $8C73 | |
L8C1D: LDA $0306,X | |
L8C20: CMP $0305,X | |
L8C23: BCC $8C73 | |
L8C25: LDA $030F,X | |
L8C28: CMP #$50 | |
L8C2A: BNE $8C57 | |
L8C2C: JSR $8CF7 | |
L8C2F: LDA $0307,X | |
L8C32: CMP #$01 | |
L8C34: BEQ $8C57 | |
L8C36: CMP #$03 | |
L8C38: BEQ $8C57 | |
L8C3A: LDA #$0A | |
L8C3C: STA $09 | |
L8C3E: LDA $030C,X | |
L8C41: STA $08 | |
L8C43: LDY $50 | |
L8C45: TXA | |
L8C46: JSR $C2C5 | |
L8C49: BCC $8C4C | |
L8C4B: DEY | |
L8C4C: TYA | |
L8C4D: JSR $DC1E | |
L8C50: LDA #$00 | |
L8C52: STA $0300,X | |
L8C55: BEQ $8C73 | |
L8C57: LDA $2D | |
L8C59: LSR | |
L8C5A: BCS $8C73 | |
L8C5C: DEC $030F,X | |
L8C5F: BNE $8C73 | |
L8C61: LDA #$01 | |
L8C63: STA $030F,X | |
L8C66: JSR $8CFB | |
L8C69: LDA #$02 | |
L8C6B: STA $0300,X | |
L8C6E: JSR $8C76 | |
L8C71: LDX PageIndex | |
L8C73: JMP $8BB1 | |
L8C76: LDA #$30 | |
L8C78: STA $0305,X | |
L8C7B: SEC | |
L8C7C: SBC #$02 | |
L8C7E: JSR $D2FD | |
L8C81: JMP $CBDA | |
L8C84: LDA DoorStatus | |
L8C86: CMP #$05 | |
L8C88: BCS $8CC3 | |
L8C8A: JSR $8CFB | |
L8C8D: JSR $8C76 | |
L8C90: LDX PageIndex | |
L8C92: LDA $91 | |
L8C94: BEQ $8CA7 | |
L8C96: TXA | |
L8C97: JSR $C2BF | |
L8C9A: EOR $91 | |
L8C9C: LSR | |
L8C9D: BCC $8CA7 | |
L8C9F: LDA $76 | |
L8CA1: EOR #$07 | |
L8CA3: STA $76 | |
L8CA5: STA $1C | |
L8CA7: INC $0300,X | |
L8CAA: LDA #$00 | |
L8CAC: STA $91 | |
L8CAE: LDA $0307,X | |
L8CB1: CMP #$03 | |
L8CB3: BNE $8CC3 | |
L8CB5: TXA | |
L8CB6: JSR $C2C5 | |
L8CB9: BCS $8CC0 | |
L8CBB: JSR $CC07 | |
L8CBE: BNE $8CC3 | |
L8CC0: JSR $CC03 | |
L8CC3: JMP $8C71 | |
L8CC6: LDA DoorStatus | |
L8CC8: CMP #$05 | |
L8CCA: BNE $8CED | |
L8CCC: TXA | |
L8CCD: EOR #$10 | |
L8CCF: TAX | |
L8CD0: LDA #$06 | |
L8CD2: STA $0300,X | |
L8CD5: LDA #$2C | |
L8CD7: STA $0305,X | |
L8CDA: SEC | |
L8CDB: SBC #$03 | |
L8CDD: JSR $D2FD | |
L8CE0: JSR $CBDA | |
L8CE3: JSR $CB73 | |
L8CE6: LDX PageIndex | |
L8CE8: LDA #$02 | |
L8CEA: STA $0300,X | |
L8CED: JMP $8BB1 | |
L8CF0: LDA DoorStatus | |
L8CF2: BNE $8CED | |
L8CF4: JMP $8C61 | |
L8CF7: LDA #$FF | |
L8CF9: BNE $8CFD | |
L8CFB: LDA #$4E | |
L8CFD: PHA | |
L8CFE: LDA #$50 | |
L8D00: STA $02 | |
L8D02: TXA | |
L8D03: JSR $C2BF | |
L8D06: AND #$01 | |
L8D08: TAY | |
L8D09: LDA $8D3A,Y | |
L8D0C: STA $03 | |
L8D0E: LDA $030C,X | |
L8D11: STA $0B | |
L8D13: JSR $E96A | |
L8D16: LDY #$00 | |
L8D18: PLA | |
L8D19: STA ($04),Y | |
L8D1B: TAX | |
L8D1C: TYA | |
L8D1D: CLC | |
L8D1E: ADC #$20 | |
L8D20: TAY | |
L8D21: TXA | |
L8D22: CPY #$C0 | |
L8D24: BNE $8D19 | |
L8D26: LDX PageIndex | |
L8D28: TXA | |
L8D29: JSR $C2C0 | |
L8D2C: AND #$06 | |
L8D2E: TAY | |
L8D2F: LDA $04 | |
L8D31: STA $005C,Y | |
L8D34: LDA $05 | |
L8D36: STA $005D,Y | |
L8D39: RTS | |
| |
L8D3A: .byte $E8, $10, $60, $AD, $91, $69, $8D, $78, $68, $AD, $92, $69, $8D, $79, $68, $A9 | |
L8D4A: .byte $00, $85, $00, $85, $02, $AD, $97, $69, $29, $80, $F0, $06, $A5, $00, $09, $80 | |
L8D5A: .byte $85, $00, $AD, $97, $69, $29 | |
| |
;------------------------------------------[ Graphics data ]----------------------------------------- | |
| |
;Kraid hideout enemy tile patterns. | |
L8D60: .byte $03, $0F, $05, $32, $D1, $48, $12, $24, $01, $02, $02, $11, $48, $20, $00, $00 | |
L8D70: .byte $E0, $F0, $EC, $DE, $92, $8D, $A0, $3C, $C0, $00, $0C, $02, $01, $0C, $02, $00 | |
L8D80: .byte $00, $80, $58, $38, $70, $23, $83, $CD, $00, $00, $18, $3C, $7C, $38, $30, $00 | |
L8D90: .byte $0E, $59, $B0, $60, $C0, $00, $00, $80, $0E, $59, $B7, $6C, $DE, $2F, $56, $28 | |
L8DA0: .byte $00, $00, $00, $00, $00, $38, $48, $90, $00, $00, $00, $00, $00, $38, $7C, $FA | |
L8DB0: .byte $00, $01, $00, $03, $0C, $08, $10, $03, $00, $00, $00, $03, $0F, $0C, $58, $3F | |
L8DC0: .byte $48, $28, $AF, $3D, $78, $CD, $B6, $6F, $00, $07, $1C, $70, $4A, $01, $32, $00 | |
L8DD0: .byte $00, $00, $B0, $E8, $74, $BC, $18, $18, $00, $50, $B0, $20, $00, $88, $88, $20 | |
L8DE0: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L8DF0: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L8E00: .byte $00, $07, $0F, $0A, $00, $02, $00, $38, $00, $07, $0F, $1A, $18, $1F, $0F, $3B | |
L8E10: .byte $24, $18, $95, $95, $39, $31, $29, $24, $24, $1C, $9C, $D8, $F4, $EC, $B4, $38 | |
L8E20: .byte $38, $7C, $D4, $C4, $78, $00, $00, $00, $38, $7C, $D6, $C6, $FE, $7C, $38, $00 | |
L8E30: .byte $00, $00, $38, $7C, $D6, $44, $38, $00, $00, $00, $38, $7C, $D6, $C6, $FE, $7C | |
L8E40: .byte $81, $A5, $E7, $24, $00, $24, $18, $24, $81, $A5, $E7, $66, $66, $C3, $66, $18 | |
L8E50: .byte $00, $24, $1B, $1F, $3B, $44, $5B, $3F, $BD, $9B, $E4, $C0, $C4, $98, $83, $C7 | |
L8E60: .byte $00, $20, $60, $D1, $D4, $60, $20, $00, $02, $17, $1F, $1F, $1F, $1F, $17, $02 | |
L8E70: .byte $00, $00, $00, $00, $60, $00, $00, $00, $80, $D0, $F4, $FE, $FE, $F4, $D0, $80 | |
L8E80: .byte $76, $02, $02, $04, $38, $00, $00, $00, $00, $50, $00, $28, $00, $01, $02, $00 | |
L8E90: .byte $C4, $CE, $7F, $7B, $79, $02, $02, $00, $10, $00, $80, $00, $00, $50, $A4, $00 | |
L8EA0: .byte $60, $A0, $C2, $E7, $71, $46, $98, $20, $6E, $3C, $18, $08, $00, $50, $D0, $04 | |
L8EB0: .byte $04, $30, $48, $00, $80, $11, $30, $21, $07, $32, $78, $7E, $F0, $C1, $5C, $3C | |
L8EC0: .byte $61, $32, $1E, $81, $F8, $FF, $FF, $F9, $00, $02, $00, $00, $D0, $00, $00, $08 | |
L8ED0: .byte $FC, $FC, $7E, $36, $BE, $0C, $E0, $F8, $44, $2C, $12, $00, $20, $00, $20, $10 | |
L8EE0: .byte $00, $80, $C2, $E7, $7F, $7F, $3E, $0C, $00, $00, $80, $C1, $43, $77, $3E, $0C | |
L8EF0: .byte $0E, $3C, $78, $70, $F0, $F8, $7C, $38, $0C, $38, $60, $60, $C0, $E0, $70, $38 | |
L8F00: .byte $7C, $7C, $38, $10, $00, $00, $00, $00, $7C, $FE, $FE, $D6, $46, $3C, $00, $00 | |
L8F10: .byte $28, $30, $E8, $E4, $14, $30, $28, $44, $34, $2C, $F4, $38, $1C, $3C, $2C, $44 | |
L8F20: .byte $8C, $6C, $2F, $35, $4A, $91, $00, $3E, $88, $68, $2F, $7B, $75, $CE, $00, $00 | |
L8F30: .byte $00, $17, $FC, $5E, $A2, $53, $00, $00, $38, $07, $E4, $BE, $5E, $E7, $00, $00 | |
L8F40: .byte $00, $02, $0D, $17, $2D, $62, $6D, $2E, $83, $C5, $F2, $E0, $C2, $81, $8C, $CE | |
L8F50: .byte $00, $40, $B0, $E8, $B4, $46, $B6, $74, $C1, $A3, $4F, $07, $43, $81, $31, $73 | |
L8F60: .byte $00, $00, $00, $00, $00, $20, $73, $DF, $00, $00, $02, $17, $1F, $14, $11, $18 | |
L8F70: .byte $00, $00, $00, $00, $00, $00, $12, $C0, $00, $00, $80, $D0, $F4, $FE, $70, $00 | |
L8F80: .byte $00, $00, $00, $00, $18, $3C, $3A, $17, $00, $00, $00, $00, $00, $10, $02, $07 | |
L8F90: .byte $00, $00, $08, $00, $00, $81, $81, $DB, $00, $00, $24, $76, $6E, $76, $24, $00 | |
L8FA0: .byte $00, $00, $00, $18, $3D, $3B, $10, $00, $00, $00, $00, $00, $11, $03, $00, $00 | |
L8FB0: .byte $40, $82, $05, $23, $40, $03, $1E, $10, $78, $F0, $C0, $50, $30, $68, $3C, $5E | |
L8FC0: .byte $E3, $F0, $7E, $09, $05, $E8, $31, $9E, $20, $10, $02, $00, $06, $0C, $01, $00 | |
L8FD0: .byte $F0, $E8, $1C, $9E, $42, $9A, $3C, $7E, $00, $00, $00, $02, $42, $C2, $80, $00 | |
L8FE0: .byte $01, $03, $0D, $09, $13, $07, $03, $00, $38, $10, $10, $36, $24, $40, $00, $00 | |
L8FF0: .byte $F8, $EE, $9F, $7F, $9F, $E0, $80, $00, $00, $0E, $00, $70, $10, $00, $00, $00 | |
L9000: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9010: .byte $00, $00, $80, $80, $0C, $0E, $13, $10, $C0, $20, $90, $90, $3C, $E2, $D1, $90 | |
L9020: .byte $F0, $38, $11, $01, $00, $00, $08, $08, $F3, $0C, $09, $09, $0C, $07, $0B, $09 | |
L9030: .byte $00, $00, $01, $01, $30, $70, $C8, $08, $03, $04, $09, $09, $3C, $47, $8B, $09 | |
L9040: .byte $26, $31, $10, $1C, $18, $0C, $00, $00, $C6, $C0, $60, $60, $20, $30, $18, $08 | |
L9050: .byte $5E, $2C, $20, $3C, $24, $18, $00, $00, $87, $C3, $42, $42, $42, $66, $24, $24 | |
L9060: .byte $00, $00, $00, $00, $0B, $27, $73, $DF, $02, $17, $1F, $34, $0B, $07, $11, $18 | |
L9070: .byte $00, $00, $00, $00, $00, $8C, $F2, $E0, $80, $D0, $F4, $FE, $60, $80, $30, $00 | |
L9080: .byte $18, $18, $98, $98, $64, $18, $7E, $E6, $18, $18, $18, $00, $00, $00, $00, $E6 | |
L9090: .byte $BD, $DB, $18, $24, $3C, $66, $66, $24, $00, $00, $00, $42, $00, $00, $42, $24 | |
L90A0: .byte $03, $1A, $3C, $38, $10, $08, $18, $18, $03, $02, $10, $00, $00, $08, $18, $18 | |
L90B0: .byte $20, $01, $03, $07, $01, $03, $07, $02, $38, $10, $B0, $60, $7C, $28, $00, $00 | |
L90C0: .byte $EF, $F7, $C5, $90, $FC, $FF, $3E, $E3, $00, $00, $00, $20, $0C, $03, $00, $E0 | |
L90D0: .byte $FC, $F8, $F2, $C0, $01, $60, $90, $D0, $00, $00, $02, $0E, $01, $60, $F0, $10 | |
L90E0: .byte $00, $00, $00, $F8, $00, $F8, $00, $00, $00, $00, $00, $F8, $07, $00, $00, $00 | |
L90F0: .byte $7C, $F8, $10, $84, $3E, $7F, $19, $00, $60, $F0, $10, $00, $02, $07, $01, $00 | |
L9100: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9110: .byte $0F, $1C, $88, $80, $00, $00, $10, $10, $CF, $30, $90, $90, $30, $E0, $D0, $90 | |
L9120: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
L9130: .byte $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
L9140: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9150: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
;Ridley hideout enemy tile patterns. | |
L9160: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9170: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9180: .byte $00, $00, $08, $31, $7A, $DA, $19, $FD, $00, $00, $00, $21, $5A, $DA, $99, $FD | |
L9190: .byte $8C, $9C, $BC, $78, $E0, $D8, $A2, $48, $8C, $98, $B0, $60, $C0, $9E, $3D, $77 | |
L91A0: .byte $00, $00, $00, $40, $E0, $E0, $F0, $78, $00, $00, $00, $40, $E0, $C0, $40, $60 | |
L91B0: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L91C0: .byte $18, $0C, $04, $02, $01, $0E, $18, $2C, $06, $02, $03, $01, $00, $00, $07, $13 | |
L91D0: .byte $19, $00, $40, $18, $0C, $96, $56, $00, $DE, $6E, $DE, $C6, $E3, $61, $25, $B9 | |
L91E0: .byte $00, $00, $00, $03, $2E, $2E, $12, $33, $3C, $7F, $FF, $FC, $D1, $50, $69, $0E | |
L91F0: .byte $00, $00, $00, $80, $40, $70, $7C, $35, $00, $00, $C0, $60, $B0, $68, $73, $B2 | |
L9200: .byte $00, $05, $0C, $5F, $34, $19, $33, $BE, $00, $05, $0C, $5F, $34, $19, $31, $B6 | |
L9210: .byte $40, $20, $B4, $48, $DA, $66, $63, $03, $40, $20, $B4, $48, $9A, $66, $4B, $11 | |
L9220: .byte $00, $09, $02, $1A, $3D, $6F, $55, $2A, $00, $09, $02, $1A, $3D, $6F, $55, $2E | |
L9230: .byte $40, $40, $20, $E8, $A4, $9C, $D6, $CA, $40, $40, $20, $E8, $A4, $1C, $96, $CA | |
L9240: .byte $80, $C1, $63, $78, $3E, $3E, $1E, $0E, $80, $40, $20, $18, $04, $00, $00, $00 | |
L9250: .byte $5A, $DB, $DB, $FF, $7E, $18, $81, $81, $50, $00, $00, $00, $00, $00, $00, $24 | |
L9260: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9270: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9280: .byte $F2, $64, $0F, $DA, $8D, $5B, $10, $10, $FB, $70, $01, $C0, $8D, $58, $10, $10 | |
L9290: .byte $90, $40, $20, $80, $B0, $70, $5C, $60, $EF, $3E, $18, $80, $00, $10, $5C, $60 | |
L92A0: .byte $B8, $38, $30, $80, $80, $60, $20, $18, $A0, $A4, $66, $C6, $3E, $0C, $20, $18 | |
L92B0: .byte $30, $27, $2D, $38, $2A, $5E, $70, $40, $10, $00, $01, $00, $12, $20, $00, $00 | |
L92C0: .byte $0A, $40, $40, $51, $78, $C4, $C2, $90, $31, $3D, $3B, $2C, $06, $3B, $3D, $6F | |
L92D0: .byte $00, $08, $10, $80, $42, $00, $2E, $5A, $F9, $B1, $40, $60, $3E, $0E, $82, $92 | |
L92E0: .byte $00, $00, $00, $00, $00, $0C, $0E, $0C, $00, $00, $00, $0C, $1E, $13, $15, $16 | |
L92F0: .byte $00, $01, $01, $00, $00, $08, $04, $12, $00, $00, $00, $06, $0F, $07, $03, $09 | |
L9300: .byte $5D, $23, $54, $2B, $24, $1E, $0F, $04, $5D, $23, $55, $2B, $20, $1C, $0F, $04 | |
L9310: .byte $01, $A7, $06, $0B, $4A, $D6, $2C, $F0, $59, $F1, $52, $FB, $6A, $D6, $2C, $F0 | |
L9320: .byte $EC, $F5, $7C, $99, $42, $60, $38, $0F, $CE, $D5, $70, $9D, $47, $68, $38, $0F | |
L9330: .byte $AF, $73, $36, $26, $0C, $1C, $78, $C0, $AF, $73, $76, $A6, $4C, $1C, $78, $C0 | |
L9340: .byte $69, $2C, $0E, $77, $D4, $B4, $E2, $00, $03, $01, $00, $70, $F0, $F0, $E0, $00 | |
L9350: .byte $69, $2C, $0E, $37, $14, $04, $02, $00, $03, $01, $00, $30, $10, $00, $00, $00 | |
L9360: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9370: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9380: .byte $00, $00, $00, $00, $10, $20, $00, $00, $00, $00, $18, $3C, $3C, $FE, $7D, $FF | |
L9390: .byte $81, $42, $24, $24, $3C, $7E, $C3, $A5, $00, $00, $00, $00, $00, $00, $00, $24 | |
L93A0: .byte $00, $00, $00, $00, $10, $20, $00, $00, $00, $00, $18, $3C, $3F, $FF, $7C, $FE | |
L93B0: .byte $00, $00, $80, $00, $00, $08, $04, $82, $00, $00, $00, $86, $8F, $87, $83, $41 | |
L93C0: .byte $D1, $E4, $88, $00, $00, $30, $88, $70, $2E, $18, $73, $FF, $7F, $8F, $47, $8F | |
L93D0: .byte $80, $00, $00, $20, $00, $10, $30, $70, $00, $00, $C0, $C0, $F0, $E0, $C0, $80 | |
L93E0: .byte $0C, $0C, $0C, $18, $18, $10, $10, $00, $30, $34, $3C, $28, $38, $30, $30, $20 | |
L93F0: .byte $01, $05, $1D, $20, $01, $00, $00, $00, $3C, $38, $20, $40, $40, $40, $40, $80 | |
L9400: .byte $00, $03, $1C, $90, $80, $80, $40, $20, $FF, $FC, $E0, $60, $78, $7C, $3C, $1E | |
L9410: .byte $20, $C0, $00, $00, $00, $00, $00, $00, $C0, $00, $00, $00, $00, $00, $00, $00 | |
L9420: .byte $38, $4C, $86, $36, $7E, $7E, $6C, $38, $00, $08, $04, $14, $3C, $38, $00, $00 | |
L9430: .byte $9E, $7F, $3F, $07, $4E, $3D, $03, $0A, $F0, $68, $30, $3C, $5A, $3F, $07, $0B | |
L9440: .byte $12, $04, $2F, $2F, $3F, $3F, $5F, $2F, $13, $0F, $3D, $3E, $34, $78, $70, $68 | |
L9450: .byte $00, $80, $60, $F0, $E8, $F8, $F0, $FC, $C0, $70, $98, $0C, $14, $06, $0E, $02 | |
L9460: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9470: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9480: .byte $00, $18, $20, $00, $00, $00, $00, $00, $64, $C0, $1C, $78, $3C, $12, $22, $20 | |
L9490: .byte $E7, $5A, $3C, $5A, $81, $81, $42, $00, $66, $42, $00, $00, $00, $00, $00, $00 | |
L94A0: .byte $00, $00, $00, $00, $10, $20, $00, $00, $01, $03, $1B, $3E, $3C, $FE, $7C, $FE | |
L94B0: .byte $41, $21, $10, $04, $00, $00, $00, $00, $20, $1C, $0E, $03, $00, $00, $00, $00 | |
L94C0: .byte $00, $00, $00, $00, $00, $01, $3E, $00, $FF, $FC, $F8, $73, $7F, $7E, $00, $00 | |
L94D0: .byte $00, $00, $00, $00, $08, $97, $59, $08, $E0, $00, $00, $EC, $F6, $73, $39, $08 | |
L94E0: .byte $00, $00, $01, $07, $0F, $0D, $1B, $10, $00, $01, $06, $09, $15, $1F, $2B, $30 | |
L94F0: .byte $00, $40, $E0, $D8, $D8, $BC, $3E, $0C, $60, $B0, $D8, $E4, $F6, $FB, $39, $0A | |
L9500: .byte $30, $26, $08, $18, $33, $06, $00, $00, $0E, $19, $13, $1B, $32, $06, $00, $00 | |
L9510: .byte $04, $02, $31, $5B, $7B, $7E, $3E, $18, $00, $00, $00, $1A, $3A, $1C, $00, $00 | |
L9520: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
L9530: .byte $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
L9540: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9550: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
;---------------------------------------------------------------------------------------------------- | |
| |
PalPntrTbl: | |
L9560: .word Palette00 ;($A718) | |
L9562: .word Palette01 ;($A73C) | |
L9564: .word Palette02 ;($A748) | |
L9566: .word Palette03 ;($A742) | |
L9568: .word Palette04 ;($A74E) | |
L956A: .word Palette05 ;($A754) | |
L956C: .word Palette05 ;($A754) | |
L956E: .word Palette06 ;($A759) | |
L9570: .word Palette07 ;($A75E) | |
L9572: .word Palette08 ;($A773) | |
L9574: .word Palette09 ;($A788) | |
L9576: .word Palette0A ;($A78D) | |
L9578: .word Palette0A ;($A78D) | |
L957A: .word Palette0A ;($A78D) | |
L957C: .word Palette0A ;($A78D) | |
L957E: .word Palette0A ;($A78D) | |
L9580: .word Palette0A ;($A78D) | |
L9582: .word Palette0A ;($A78D) | |
L9584: .word Palette0A ;($A78D) | |
L9586: .word Palette0A ;($A78D) | |
L9588: .word Palette0B ;($A794) | |
L958A: .word Palette0C ;($A79B) | |
L958C: .word Palette0D ;($A7A2) | |
L958E: .word Palette0E ;($A7A9) | |
L9590: .word Palette0F ;($A7B1) | |
L9592: .word Palette10 ;($A7B9) | |
L9594: .word Palette11 ;($A7C1) | |
L9596: .word Palette12 ;($A7C9) | |
| |
AreaPointers: | |
L9598: .word SpecItmsTbl ;($A83B)Beginning of special items table. | |
L959A: .word RmPtrTbl ;($A7D1)Beginning of room pointer table. | |
L959C: .word StrctPtrTbl ;($A7FB)Beginning of structure pointer table. | |
L959E: .word MacroDefs ;($AE49)Beginning of macro definitions. | |
L95A0: .word EnemyFramePtrTbl1 ;($A42C)Address table into enemy animation data. Two--> | |
L95A2: .word EnemyFramePtrTbl2 ;($A52C)tables needed to accommodate all entries. | |
L95A4: .word EnemyPlacePtrTbl ;($A540)Pointers to enemy frame placement data. | |
L95A6: .word EnemyAnimIndexTbl ;($A406)Index to values in addr tables for enemy animations. | |
| |
L95A8: JMP $A320 | |
L95AB: JMP $A315 | |
L95AE: JMP $9C6F | |
L95B1: JMP $9CE6 | |
L95B4: JMP $9D21 | |
L95B7: JMP $9D3D | |
L95BA: JMP $9D6C | |
L95BD: JMP $A0C6 | |
L95C0: JMP $A142 | |
| |
AreaRoutine: | |
L95C3: JMP $9B25 ;Area specific routine. | |
| |
TwosCompliment_: | |
L95C6: EOR #$FF ; | |
L95C8: CLC ;The following routine returns the twos--> | |
L95C9: ADC #$01 ;compliment of the value stored in A. | |
L95CB: RTS ; | |
| |
L95CC: .byte $FF ;Not used. | |
| |
L95CD: .byte $40 ;Tourian music init flag. | |
| |
L95CE: .byte $00 ;Base damage caused by area enemies to lower health byte. | |
L95CF: .byte $03 ;Base damage caused by area enemies to upper health byte. | |
| |
;Special room numbers(used to start item room music). | |
L95D0: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
| |
L95D7: .byte $03 ;Samus start x coord on world map. | |
L95D8: .byte $04 ;Samus start y coord on world map. | |
L95D9: .byte $6E ;Samus start verticle screen position. | |
| |
L95DA: .byte $06, $00, $03, $21, $00, $00, $00, $00, $00, $10, $00 | |
| |
L95E5: LDA $6B02,X | |
L95E8: JSR $8024 | |
| |
L95EB: .word $97F9 | |
L95ED: .word $97F9 | |
L95EF: .word $9A27 | |
L95F1: .word $97DC | |
L95F3: .word $9A2C | |
L95F5: .word $97DC | |
L95F7: .word $97DC | |
L95F9: .word $97DC | |
L95FB: .word $97DC | |
L95FD: .word $97DC | |
L95FF: .word $97DC | |
L9601: .word $97DC | |
L9603: .word $97DC | |
L9605: .word $97DC | |
L9607: .word $97DC | |
L9609: .word $97DC | |
| |
| |
L960B: .byte $08, $08, $08, $08, $16, $16, $18, $18, $1F, $1F, $00, $00, $00, $00, $00, $00 | |
| |
L961B: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L962B: .byte $FF, $FF, $01, $FF, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L963B: .byte $05, $05, $05, $05, $16, $16, $18, $18, $1B, $1B, $00, $00, $00, $00, $00, $00 | |
| |
L964B: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L965B: .byte $05, $05, $05, $05, $16, $16, $18, $18, $1D, $1D, $00, $00, $00, $00, $00, $00 | |
| |
L966B: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L967B: .byte $00, $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L968B: .byte $FE, $FE, $00, $00, $C0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L969B: .byte $01, $01, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L96AB: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L96BB: .byte $01, $01, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L96CB: .byte $00, $02, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L96DB: .word $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5 | |
L96EB: .word $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5 | |
L96FB: .word $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5 | |
L970B: .word $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5, $97D5 | |
L971B: .word $97D5, $97D5, $97D5, $97D5 | |
| |
L9723: .byte $00, $00, $00, $00, $00, $00, $00, $00, $18, $30, $00, $C0, $D0, $00, $00, $7F | |
L9733: .byte $80, $58, $54, $70, $00, $00, $00, $00, $00, $00, $00, $00, $18, $30, $00, $00 | |
L9743: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L9753: .byte $00, $00, $00, $04, $02, $00, $00, $00, $0C, $FC, $FC, $00, $00, $00, $00, $00 | |
L9763: .byte $00, $00, $00, $00, $00, $00, $00, $02, $02, $00, $00, $00, $02, $02, $02, $02 | |
L9773: .byte $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L977B: .byte $50, $50, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
L978B: .byte $00, $00, $26, $26, $26, $26, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
L979B: .byte $0C, $F4, $00, $00, $00, $00, $00, $00, $F4, $00, $00, $00 | |
| |
L97A7: .word $97D5, $97D5, $97D8, $97DB, $A32B, $A330, $A337, $A348 | |
L97B7: .word $A359, $A36A, $A37B, $A388, $A391, $A3A2, $A3B3, $A3C4 | |
L97C7: .word $A3D5, $A3DE, $A3E7, $A3F0, $A3F9 | |
| |
L97D1: .byte $00, $00, $00, $01 | |
| |
L97D5: .byte $50, $22, $FF | |
| |
L97D8: .byte $50, $30, $FF | |
| |
L97DB: .byte $FF | |
| |
L97DC: LDA #$00 | |
L97DE: STA $6AF4,X | |
L97E1: RTS | |
| |
L97E2: LDA $81 | |
L97E4: CMP #$01 | |
L97E6: BEQ $97F1 | |
L97E8: CMP #$03 | |
L97EA: BEQ $97F6 | |
L97EC: LDA $00 | |
L97EE: JMP $8000 | |
L97F1: LDA $01 | |
L97F3: JMP $8003 | |
L97F6: JMP $8006 | |
L97F9: LDY $010B | |
L97FC: INY | |
L97FD: BEQ $9804 | |
L97FF: LDA #$00 | |
L9801: STA $6AF4,X | |
L9804: LDA #$0F | |
L9806: STA $00 | |
L9808: STA $01 | |
L980A: LDA $0405,X | |
L980D: ASL | |
L980E: BMI $97E2 | |
L9810: LDA $6AF4,X | |
L9813: CMP #$03 | |
L9815: BEQ $97E2 | |
L9817: JSR $99B7 | |
L981A: LDA $77F8,Y | |
L981D: BEQ $9822 | |
L981F: JMP $9899 | |
L9822: LDY $0408,X | |
L9825: LDA $77F6,Y | |
L9828: PHA | |
L9829: LDA $0402,X | |
L982C: BPL $983B | |
L982E: PLA | |
L982F: JSR $95C6 | |
L9832: PHA | |
L9833: LDA #$00 | |
L9835: CMP $0406,X | |
L9838: SBC $0402,X | |
L983B: CMP $77F6,Y | |
L983E: PLA | |
L983F: BCC $9849 | |
L9841: STA $0402,X | |
L9844: LDA #$00 | |
L9846: STA $0406,X | |
L9849: LDA $77F6,Y | |
L984C: PHA | |
L984D: LDA $0403,X | |
L9850: BPL $985F | |
L9852: PLA | |
L9853: JSR $95C6 | |
L9856: PHA | |
L9857: LDA #$00 | |
L9859: CMP $0407,X | |
L985C: SBC $0403,X | |
L985F: CMP $77F6,Y | |
L9862: PLA | |
L9863: BCC $986D | |
L9865: STA $0403,X | |
L9868: LDA #$00 | |
L986A: STA $0407,X | |
L986D: LDA $0405,X | |
L9870: PHA | |
L9871: JSR $9A06 | |
L9874: STA $6AFF,X | |
L9877: PLA | |
L9878: LSR | |
L9879: LSR | |
L987A: JSR $9A06 | |
L987D: STA $6AFE,X | |
L9880: LDA $6AF4,X | |
L9883: CMP #$04 | |
L9885: BNE $9894 | |
L9887: LDY $040B,X | |
L988A: INY | |
L988B: BNE $9899 | |
L988D: LDA #$05 | |
L988F: STA $040B,X | |
L9892: BNE $9899 | |
L9894: LDA #$FF | |
L9896: STA $040B,X | |
L9899: LDA $81 | |
L989B: CMP #$06 | |
L989D: BNE $98A9 | |
L989F: CMP $6AF4,X | |
L98A2: BEQ $98A9 | |
L98A4: LDA #$04 | |
L98A6: STA $6AF4,X | |
L98A9: LDA $0404,X | |
L98AC: AND #$20 | |
L98AE: BEQ $990F | |
L98B0: JSR $99B7 | |
L98B3: LDA $77F8,Y | |
L98B6: BEQ $98EF | |
L98B8: LDA $040E,X | |
L98BB: CMP #$07 | |
L98BD: BEQ $98C3 | |
L98BF: CMP #$0A | |
L98C1: BNE $9932 | |
L98C3: LDA $2D | |
L98C5: AND #$02 | |
L98C7: BNE $9932 | |
L98C9: LDA $77F8,Y | |
L98CC: CLC | |
L98CD: ADC #$10 | |
L98CF: STA $77F8,Y | |
L98D2: AND #$70 | |
L98D4: CMP #$50 | |
L98D6: BNE $9932 | |
L98D8: LDA #$02 | |
L98DA: ORA $040F,X | |
L98DD: STA $040C,X | |
L98E0: LDA #$06 | |
L98E2: STA $6AF4,X | |
L98E5: LDA #$20 | |
L98E7: STA $040F,X | |
L98EA: LDA #$01 | |
L98EC: STA $040D,X | |
L98EF: LDA #$00 | |
L98F1: STA $0404,X | |
L98F4: STA $77F8,Y | |
L98F7: STA $0406,X | |
L98FA: STA $0407,X | |
L98FD: LDA $6AFE,X | |
L9900: JSR $9A10 | |
L9903: STA $0402,X | |
L9906: LDA $6AFF,X | |
L9909: JSR $9A10 | |
L990C: STA $0403,X | |
L990F: JSR $99B7 | |
L9912: LDA $77F8,Y | |
L9915: BNE $9932 | |
L9917: LDA $0404,X | |
L991A: AND #$04 | |
L991C: BEQ $9964 | |
L991E: LDA $0403,X | |
L9921: AND #$80 | |
L9923: ORA #$01 | |
L9925: TAY | |
L9926: JSR $99C3 | |
L9929: JSR $99BD | |
L992C: TYA | |
L992D: STA $77F8,X | |
L9930: TXA | |
L9931: TAY | |
L9932: TYA | |
L9933: TAX | |
L9934: LDA $77F8,X | |
L9937: PHP | |
L9938: AND #$0F | |
L993A: CMP #$0C | |
L993C: BEQ $9941 | |
L993E: INC $77F8,X | |
L9941: TAY | |
L9942: LDA $99D7,Y | |
L9945: STA $04 | |
L9947: STY $05 | |
L9949: LDA #$0C | |
L994B: SEC | |
L994C: SBC $05 | |
L994E: LDX $4B | |
L9950: PLP | |
L9951: BMI $9956 | |
L9953: JSR $95C6 | |
L9956: STA $05 | |
L9958: JSR $99E4 | |
L995B: JSR $8027 | |
L995E: JSR $99F4 | |
L9961: JMP $9967 | |
L9964: JSR $99AE | |
L9967: LDA $6AF4,X | |
L996A: CMP #$03 | |
L996C: BNE $9971 | |
L996E: JSR $99AE | |
L9971: LDY #$00 | |
L9973: LDA $77F8 | |
L9976: ORA $77F9 | |
L9979: ORA $77FA | |
L997C: ORA $77FB | |
L997F: ORA $77FC | |
L9982: ORA $77FD | |
L9985: AND #$0C | |
L9987: CMP #$0C | |
L9989: BNE $999E | |
L998B: LDA $0106 | |
L998E: ORA $0107 | |
L9991: BEQ $999E | |
L9993: STY $6F | |
L9995: LDY #$04 | |
L9997: STY $6E | |
L9999: JSR $8042 | |
L999C: LDY #$01 | |
L999E: STY $92 | |
L99A0: LDA $6B | |
L99A2: BMI $99AB | |
L99A4: LDA $6B02,X | |
L99A7: ORA #$A2 | |
L99A9: STA $6B | |
L99AB: JMP $97E2 | |
L99AE: JSR $99B7 | |
L99B1: LDA #$00 | |
L99B3: STA $77F8,Y | |
L99B6: RTS | |
| |
L99B7: TXA | |
L99B8: JSR $9B1B | |
L99BB: TAY | |
L99BC: RTS | |
L99BD: TXA | |
L99BE: JSR $9B1B | |
L99C1: TAX | |
L99C2: RTS | |
| |
L99C3: LDA #$00 | |
L99C5: STA $0402,X | |
L99C8: STA $0403,X | |
L99CB: STA $0407,X | |
L99CE: STA $0406,X | |
L99D1: STA $6AFF,X | |
L99D4: STA $6AFE,X | |
L99D7: RTS | |
| |
L99D8: .byte $00, $FC, $F9, $F7, $F6, $F6, $F5, $F5, $F5, $F6, $F6, $F8 | |
| |
L99E4: LDA $030E | |
L99E7: STA $09 | |
L99E9: LDA $030D | |
L99EC: STA $08 | |
L99EE: LDA $030C | |
L99F1: STA $0B | |
L99F3: RTS | |
| |
L99F4: LDA $09 | |
L99F6: STA $0401,X | |
L99F9: LDA $08 | |
L99FB: STA $0400,X | |
L99FE: LDA $0B | |
L9A00: AND #$01 | |
L9A02: STA $6AFB,X | |
L9A05: RTS | |
| |
L9A06: LSR | |
L9A07: LDA $0408,X | |
L9A0A: ROL | |
L9A0B: TAY | |
L9A0C: LDA $77F2,Y | |
L9A0F: RTS | |
| |
L9A10: ASL | |
L9A11: ROL | |
L9A12: AND #$01 | |
L9A14: TAY | |
L9A15: LDA $77F0,Y | |
L9A18: RTS | |
| |
L9A19: .byte $F8, $08, $30, $D0, $60, $A0, $02, $04, $00, $00, $00, $00, $00, $00 | |
| |
L9A27: LDA #$01 | |
L9A29: JMP $8003 | |
L9A2C: LDY $6AF4,X | |
L9A2F: CPY #$02 | |
L9A31: BNE $9AB0 | |
L9A33: DEY | |
L9A34: CPY $81 | |
L9A36: BNE $9AB0 | |
L9A38: LDA #$00 | |
L9A3A: JSR $99D1 | |
L9A3D: STA $6AFC,X | |
L9A40: STA $6AFD,X | |
L9A43: LDA $030E | |
L9A46: SEC | |
L9A47: SBC $0401,X | |
L9A4A: STA $01 | |
L9A4C: LDA $0405,X | |
L9A4F: PHA | |
L9A50: LSR | |
L9A51: PHA | |
L9A52: BCC $9A5A | |
L9A54: LDA #$00 | |
L9A56: SBC $01 | |
L9A58: STA $01 | |
L9A5A: LDA $030D | |
L9A5D: SEC | |
L9A5E: SBC $0400,X | |
L9A61: STA $00 | |
L9A63: PLA | |
L9A64: LSR | |
L9A65: LSR | |
L9A66: BCC $9A6E | |
L9A68: LDA #$00 | |
L9A6A: SBC $00 | |
L9A6C: STA $00 | |
L9A6E: LDA $00 | |
L9A70: ORA $01 | |
L9A72: LDY #$03 | |
L9A74: ASL | |
L9A75: BCS $9A7A | |
L9A77: DEY | |
L9A78: BNE $9A74 | |
L9A7A: DEY | |
L9A7B: BMI $9A83 | |
L9A7D: LSR $00 | |
L9A7F: LSR $01 | |
L9A81: BPL $9A7A | |
L9A83: JSR $9AF9 | |
L9A86: PLA | |
L9A87: LSR | |
L9A88: PHA | |
L9A89: BCC $9A9B | |
L9A8B: LDA #$00 | |
L9A8D: SBC $0407,X | |
L9A90: STA $0407,X | |
L9A93: LDA #$00 | |
L9A95: SBC $0403,X | |
L9A98: STA $0403,X | |
L9A9B: PLA | |
L9A9C: LSR | |
L9A9D: LSR | |
L9A9E: BCC $9AB0 | |
L9AA0: LDA #$00 | |
L9AA2: SBC $0406,X | |
L9AA5: STA $0406,X | |
L9AA8: LDA #$00 | |
L9AAA: SBC $0402,X | |
L9AAD: STA $0402,X | |
L9AB0: LDA $0405,X | |
L9AB3: ASL | |
L9AB4: BMI $9AF4 | |
L9AB6: LDA $0406,X | |
L9AB9: CLC | |
L9ABA: ADC $6AFC,X | |
L9ABD: STA $6AFC,X | |
L9AC0: LDA $0402,X | |
L9AC3: ADC #$00 | |
L9AC5: STA $04 | |
L9AC7: LDA $0407,X | |
L9ACA: CLC | |
L9ACB: ADC $6AFD,X | |
L9ACE: STA $6AFD,X | |
L9AD1: LDA $0403,X | |
L9AD4: ADC #$00 | |
L9AD6: STA $05 | |
L9AD8: LDA $0400,X | |
L9ADB: STA $08 | |
L9ADD: LDA $0401,X | |
L9AE0: STA $09 | |
L9AE2: LDA $6AFB,X | |
L9AE5: STA $0B | |
L9AE7: JSR $8027 | |
L9AEA: BCS $9AF1 | |
L9AEC: LDA #$00 | |
L9AEE: STA $6AF4,X | |
L9AF1: JSR $99F4 | |
L9AF4: LDA #$08 | |
L9AF6: JMP $8003 | |
L9AF9: LDA $00 | |
L9AFB: PHA | |
L9AFC: JSR $9B1B | |
L9AFF: STA $0402,X | |
L9B02: PLA | |
L9B03: JSR $9B20 | |
L9B06: STA $0406,X | |
L9B09: LDA $01 | |
L9B0B: PHA | |
L9B0C: JSR $9B1B | |
L9B0F: STA $0403,X | |
L9B12: PLA | |
L9B13: JSR $9B20 | |
L9B16: STA $0407,X | |
L9B19: RTS | |
| |
L9B1A: LSR | |
L9B1B: LSR | |
L9B1C: LSR | |
L9B1D: LSR | |
L9B1E: LSR | |
L9B1F: RTS | |
| |
L9B20: ASL | |
L9B21: ASL | |
L9B22: ASL | |
L9B23: ASL | |
L9B24: RTS | |
| |
L9B25: JSR $9B37 | |
L9B28: JSR $9DD4 | |
L9B2B: JSR $A1E7 | |
L9B2E: JSR $A238 | |
L9B31: JSR $A28B | |
L9B34: JMP $A15E | |
L9B37: LDX #$78 | |
L9B39: JSR $9B44 | |
L9B3C: LDA $97 | |
L9B3E: SEC | |
L9B3F: SBC #$08 | |
L9B41: TAX | |
L9B42: BNE $9B39 | |
L9B44: STX $97 | |
L9B46: LDY $6BF4,X | |
L9B49: BNE $9B4C | |
L9B4B: RTS | |
| |
L9B4C: JSR $9C4D | |
L9B4F: TYA | |
L9B50: BNE $9B4B | |
L9B52: LDY $010B | |
L9B55: INY | |
L9B56: BNE $9B65 | |
L9B58: LDA $6BF8,X | |
L9B5B: CMP #$05 | |
L9B5D: BEQ $9B4B | |
L9B5F: JSR $9B70 | |
L9B62: JMP $9C2B | |
L9B65: LDA $2D | |
L9B67: AND #$02 | |
L9B69: BNE $9B4B | |
L9B6B: LDA #$19 | |
L9B6D: JMP $9C31 | |
L9B70: LDY $6BF8,X | |
L9B73: LDA $6BFA,X | |
L9B76: BNE $9B81 | |
L9B78: LDA $9D8F,Y | |
L9B7B: STA $6BFA,X | |
L9B7E: INC $6BFB,X | |
L9B81: DEC $6BFA,X | |
L9B84: LDA $9D94,Y | |
L9B87: CLC | |
L9B88: ADC $6BFB,X | |
L9B8B: TAY | |
L9B8C: LDA $9D99,Y | |
L9B8F: BPL $9BAB | |
L9B91: CMP #$FF | |
L9B93: BNE $9B9F | |
L9B95: LDY $6BF8,X | |
L9B98: LDA #$00 | |
L9B9A: STA $6BFB,X | |
L9B9D: BEQ $9B84 | |
L9B9F: INC $6BFB,X | |
L9BA2: JSR $9BAF | |
L9BA5: LDY $6BF8,X | |
L9BA8: JMP $9B84 | |
L9BAB: STA $6BF9,X | |
L9BAE: RTS | |
| |
L9BAF: PHA | |
L9BB0: LDA MotherBrainStatus | |
L9BB2: CMP #$04 | |
L9BB4: BCS $9BC6 | |
L9BB6: LDY #$60 | |
L9BB8: LDA $6AF4,Y | |
L9BBB: BEQ $9BC8 | |
L9BBD: TYA | |
L9BBE: CLC | |
L9BBF: ADC #$10 | |
L9BC1: TAY | |
L9BC2: CMP #$A0 | |
L9BC4: BNE $9BB8 | |
L9BC6: PLA | |
L9BC7: RTS | |
| |
L9BC8: STY $4B | |
L9BCA: LDA $6BF5,X | |
L9BCD: STA $0400,Y | |
L9BD0: LDA $6BF6,X | |
L9BD3: STA $0401,Y | |
L9BD6: LDA $6BF7,X | |
L9BD9: STA $6AFB,Y | |
L9BDC: LDA #$02 | |
L9BDE: STA $6AF4,Y | |
L9BE1: LDA #$00 | |
L9BE3: STA $0409,Y | |
L9BE6: STA $6AF8,Y | |
L9BE9: STA $0408,Y | |
L9BEC: PLA | |
L9BED: JSR $95C6 | |
L9BF0: TAX | |
L9BF1: STA $040A,Y | |
L9BF4: ORA #$02 | |
L9BF6: STA $0405,Y | |
L9BF9: LDA $9C26,X | |
L9BFC: STA $6AF9,Y | |
L9BFF: STA $6AFA,Y | |
L9C02: LDA $9DCC,X | |
L9C05: STA $05 | |
L9C07: LDA $9DCF,X | |
L9C0A: STA $04 | |
L9C0C: LDX $97 | |
L9C0E: LDA $6BF5,X | |
L9C11: STA $08 | |
L9C13: LDA $6BF6,X | |
L9C16: STA $09 | |
L9C18: LDA $6BF7,X | |
L9C1B: STA $0B | |
L9C1D: TYA | |
L9C1E: TAX | |
L9C1F: JSR $8027 | |
L9C22: JSR $99F4 | |
L9C25: LDX $97 | |
L9C27: RTS | |
| |
L9C28: .byte $0C, $0A, $0E | |
| |
L9c2B: LDY $6BF9,X | |
L9C2E: LDA $9DC6,Y | |
L9C31: STA $6BD7 | |
L9C34: LDA $6BF5,X | |
L9C37: STA $04E0 | |
L9C3A: LDA $6BF6,X | |
L9C3D: STA $04E1 | |
L9C40: LDA $6BF7,X | |
L9C43: STA $6BDB | |
L9C46: LDA #$E0 | |
L9C48: STA $4B | |
L9C4A: JMP $803C | |
L9C4D: LDY #$00 | |
L9C4F: LDA $6BF6,X | |
L9C52: CMP $FD | |
L9C54: LDA $49 | |
L9C56: AND #$02 | |
L9C58: BNE $9C5F | |
L9C5A: LDA $6BF5,X | |
L9C5D: CMP $FC | |
L9C5F: LDA $6BF7,X | |
L9C62: EOR $FF | |
L9C64: AND #$01 | |
L9C66: BEQ $9C6B | |
L9C68: BCS $9C6D | |
L9C6A: SEC | |
L9C6B: BCS $9C6E | |
L9C6D: INY | |
L9C6E: RTS | |
| |
L9C6F: STY $02 | |
L9C71: LDY #$00 | |
L9C73: LDA $6BF7,Y | |
L9C76: EOR $02 | |
L9C78: LSR | |
L9C79: BCS $9C80 | |
L9C7B: LDA #$00 | |
L9C7D: STA $6BF4,Y | |
L9C80: TYA | |
L9C81: CLC | |
L9C82: ADC #$08 | |
L9C84: TAY | |
L9C85: BPL $9C73 | |
L9C87: LDX #$00 | |
L9C89: LDA $0758,X | |
L9C8C: BEQ $9C99 | |
L9C8E: JSR $9D64 | |
L9C91: EOR $075A,X | |
L9C94: BNE $9C99 | |
L9C96: STA $0758,X | |
L9C99: TXA | |
L9C9A: CLC | |
L9C9B: ADC #$08 | |
L9C9D: TAX | |
L9C9E: CMP #$28 | |
L9CA0: BNE $9C89 | |
L9CA2: LDX #$00 | |
L9CA4: JSR $9CD6 | |
L9CA7: LDX #$03 | |
L9CA9: JSR $9CD6 | |
L9CAC: LDA MotherBrainStatus | |
L9CAE: BEQ $9CC3 | |
L9CB0: CMP #$07 | |
L9CB2: BEQ $9CC3 | |
L9CB4: CMP #$0A | |
L9CB6: BEQ $9CC3 | |
L9CB8: LDA $9D | |
L9CBA: EOR $02 | |
L9CBC: LSR | |
L9CBD: BCS $9CC3 | |
L9CBF: LDA #$00 | |
L9CC1: STA MotherBrainStatus | |
L9CC3: LDA $010D | |
L9CC6: BEQ $9CD5 | |
L9CC8: LDA $010C | |
L9CCB: EOR $02 | |
L9CCD: LSR | |
L9CCE: BCS $9CD5 | |
L9CD0: LDA #$00 | |
L9CD2: STA $010D | |
L9CD5: RTS | |
| |
L9CD6: LDA $8B,X | |
L9CD8: BMI $9CE5 | |
L9CDA: LDA $8C,X | |
L9CDC: EOR $02 | |
L9CDE: LSR | |
L9CDF: BCS $9CE5 | |
L9CE1: LDA #$FF | |
L9CE3: STA $8B,X | |
L9CE5: RTS | |
| |
L9CE6: LDX #$00 | |
L9CE8: LDA $6BF4,X | |
L9CEB: BEQ $9CF6 | |
L9CED: TXA | |
L9CEE: CLC | |
L9CEF: ADC #$08 | |
L9CF1: TAX | |
L9CF2: BPL $9CE8 | |
L9CF4: BMI $9D20 | |
L9CF6: LDA ($00),Y | |
L9CF8: JSR $9B1B | |
L9CFB: STA $6BF8,X | |
L9CFE: LDA #$01 | |
L9D00: STA $6BF4,X | |
L9D03: STA $6BFB,X | |
L9D06: INY | |
L9D07: LDA ($00),Y | |
L9D09: PHA | |
L9D0A: AND #$F0 | |
L9D0C: ORA #$07 | |
L9D0E: STA $6BF5,X | |
L9D11: PLA | |
L9D12: JSR $9B20 | |
L9D15: ORA #$07 | |
L9D17: STA $6BF6,X | |
L9D1A: JSR $9D88 | |
L9D1D: STA $6BF7,X | |
L9D20: RTS | |
| |
L9D21: LDA #$01 | |
L9D23: STA MotherBrainStatus | |
L9D25: JSR $9D88 | |
L9D28: STA $9D | |
L9D2A: EOR #$01 | |
L9D2C: TAX | |
L9D2D: LDA $9D3C | |
L9D30: ORA $6C,X | |
L9D32: STA $6C,X | |
L9D34: LDA #$20 | |
L9D36: STA $9A | |
L9D38: STA $9B | |
L9D3A: RTS | |
| |
L9D3B: .byte $02, $01 | |
| |
L9D3D: LDA ($00),Y | |
L9D3F: AND #$F0 | |
L9D41: LSR | |
L9D42: TAX | |
L9D43: ASL | |
L9D44: AND #$10 | |
L9D46: EOR #$10 | |
L9D48: ORA #$84 | |
L9D4A: STA $0759,X | |
L9D4D: JSR $9D64 | |
L9D50: STA $075A,X | |
L9D53: LDA #$01 | |
L9D55: STA $0758,X | |
L9D58: LDA #$00 | |
L9D5A: STA $075B,X | |
L9D5D: STA $075C,X | |
L9D60: STA $075D,X | |
L9D63: RTS | |
| |
L9D64: JSR $9D88 | |
L9D67: ASL | |
L9D68: ASL | |
L9D69: ORA #$61 | |
L9D6B: RTS | |
| |
L9D6C: LDX #$03 | |
L9D6E: JSR $9D75 | |
L9D71: BMI $9D87 | |
L9D73: LDX #$00 | |
L9D75: LDA $8B,X | |
L9D77: BPL $9D87 | |
L9D79: LDA ($00),Y | |
L9D7B: JSR $9B1B | |
L9D7E: STA $8B,X | |
L9D80: JSR $9D88 | |
L9D83: STA $8C,X | |
L9D85: LDA #$FF | |
L9D87: RTS | |
| |
L9D88: LDA $FF | |
L9D8A: EOR $49 | |
L9D8C: AND #$01 | |
L9D8E: RTS | |
| |
L9D8F: .byte $28, $28, $28, $28, $28, $00, $0B, $16, $21, $27, $00, $01, $02, $FD, $03, $04 | |
L9D9F: .byte $FD, $03, $02, $01, $FF, $00, $07, $06, $FE, $05, $04, $FE, $05, $06, $07, $FF | |
L9DAF: .byte $02, $03, $FC, $04, $05, $06, $05, $FC, $04, $03, $FF, $02, $03, $FC, $04, $03 | |
L9DBF: .byte $FF, $06, $05, $FC, $04, $05, $FF, $06, $07, $08, $09, $0A, $0B, $0C, $0D, $09 | |
| |
L9DCF: .byte $F7, $00, $09, $09, $0B, $A5, $98, $F0, $19, $20, $24, $80, $CB, $95, $22, $9E | |
L9DDF: .byte $36, $9E, $52, $9E, $86, $9E, $02, $9F, $49, $9F, $C0, $9F, $02, $9F, $DA, $9F | |
L9DEF: .byte $CB, $95, $60 | |
| |
L9DF2: LDA $030C | |
L9DF5: EOR $9D | |
L9DF7: BNE $9DF1 | |
L9DF9: LDA $030E | |
L9DFC: SEC | |
L9DFD: SBC #$48 | |
L9DFF: CMP #$2F | |
L9E01: BCS $9DF1 | |
L9E03: LDA $030D | |
L9E06: SEC | |
L9E07: SBC #$80 | |
L9E09: BPL $9E0E | |
L9E0B: JSR $95C6 | |
L9E0E: CMP #$20 | |
L9E10: BCS $9DF1 | |
L9E12: LDA #$00 | |
L9E14: STA $6E | |
L9E16: LDA #$02 | |
L9E18: STA $6F | |
L9E1A: LDA #$38 | |
L9E1C: STA $030A | |
L9E1F: JMP $8042 | |
L9E22: JSR $9DF2 | |
L9E25: JSR $9FED | |
L9E28: JSR $A01B | |
L9E2B: JSR $A02E | |
L9E2E: JSR $A041 | |
L9E31: LDA #$00 | |
L9E33: STA $9E | |
L9E35: RTS | |
| |
L9E36: JSR $9E43 | |
L9E39: LDA $9E41,Y | |
L9E3C: STA $1C | |
L9E3E: JMP $9E31 | |
| |
L9E41: .byte $08, $07 | |
| |
L9E43: DEC $9F | |
L9E45: BNE $9E4B | |
L9E47: LDA #$01 | |
L9E49: STA MotherBrainStatus | |
L9E4B: LDA $9F | |
L9E4D: AND #$02 | |
L9E4F: LSR | |
L9E50: TAY | |
L9E51: RTS | |
| |
L9E52: JSR $9E43 | |
L9E55: LDA $9E41,Y | |
L9E58: STA $1C | |
L9E5A: TYA | |
L9E5B: ASL | |
L9E5C: ASL | |
L9E5D: STA $FC | |
L9E5F: LDY MotherBrainStatus | |
L9E61: DEY | |
L9E62: BNE $9E83 | |
L9E64: STY MotherBrainHits | |
L9E66: TYA | |
L9E67: TAX | |
L9E68: TYA | |
L9E69: STA $6AF4,X | |
L9E6C: JSR $9EF9 | |
L9E6F: CPX #$C0 | |
L9E71: BNE $9E68 | |
L9E73: LDA #$04 | |
L9E75: STA MotherBrainStatus | |
L9E77: LDA #$28 | |
L9E79: STA $9F | |
L9E7B: LDA $0680 | |
L9E7E: ORA #$01 | |
L9E80: STA $0680 | |
L9E83: JMP $9E2E | |
L9E86: LDA #$10 | |
L9E88: ORA $0680 | |
L9E8B: STA $0680 | |
L9E8E: JSR $A072 | |
L9E91: INC $9A | |
L9E93: JSR $9E43 | |
L9E96: LDX #$00 | |
L9E98: LDA $6AF4,X | |
L9E9B: CMP #$05 | |
L9E9D: BNE $9EA4 | |
L9E9F: LDA #$00 | |
L9EA1: STA $6AF4,X | |
L9EA4: JSR $9EF9 | |
L9EA7: CMP #$40 | |
L9EA9: BNE $9E98 | |
L9EAB: LDA $07A0 | |
L9EAE: BNE $9EB5 | |
L9EB0: LDA $9F00,Y | |
L9EB3: STA $1C | |
L9EB5: LDY MotherBrainStatus | |
L9EB7: DEY | |
L9EB8: BNE $9ED5 | |
L9EBA: STY $9A | |
L9EBC: LDA #$04 | |
L9EBE: STA MotherBrainStatus | |
L9EC0: LDA #$1C | |
L9EC2: STA $9F | |
L9EC4: LDY MotherBrainHits | |
L9EC6: INC MotherBrainHits | |
L9EC8: CPY #$04 | |
L9ECA: BEQ $9ED3 | |
L9ECC: LDX #$00 | |
L9ECE: BCC $9ED5 | |
L9ED0: JMP $9ED6 | |
L9ED3: LSR $9F | |
L9ED5: RTS | |
| |
L9ED6: LDA $0685 | |
L9ED9: ORA #$04 | |
L9EDB: STA $0685 | |
L9EDE: LDA #$05 | |
L9EE0: STA MotherBrainStatus | |
L9EE2: LDA #$80 | |
L9EE4: STA MotherBrainHits | |
L9EE6: RTS | |
| |
L9EE7: PHA | |
L9EE8: AND #$F0 | |
L9EEA: ORA #$07 | |
L9EEC: STA $0400,X | |
L9EEF: PLA | |
L9EF0: JSR $9B20 | |
L9EF3: ORA #$07 | |
L9EF5: STA $0401,X | |
L9EF8: RTS | |
| |
L9EF9: TXA | |
L9EFA: CLC | |
L9EFB: ADC #$10 | |
L9EFD: TAX | |
L9EFE: RTS | |
| |
L9EFF: .byte $60 | |
| |
L9F00: ORA #$0A | |
L9F02: LDA MotherBrainHits | |
L9F04: BMI $9F33 | |
L9F06: CMP #$08 | |
L9F08: BEQ $9F36 | |
L9F0A: TAY | |
L9F0B: LDA $9F41,Y | |
L9F0E: STA $0503 | |
L9F11: LDA $9F39,Y | |
L9F14: CLC | |
L9F15: ADC #$42 | |
L9F17: STA $0508 | |
L9F1A: PHP | |
L9F1B: LDA $9D | |
L9F1D: ASL | |
L9F1E: ASL | |
L9F1F: PLP | |
L9F20: ADC #$61 | |
L9F22: STA $0509 | |
L9F25: LDA #$00 | |
L9F27: STA $4B | |
L9F29: LDA $07A0 | |
L9F2C: BNE $9F38 | |
L9F2E: JSR $803F | |
L9F31: BCS $9F38 | |
L9F33: INC MotherBrainHits | |
L9F35: RTS | |
| |
L9F36: INC MotherBrainStatus | |
L9F38: RTS | |
| |
L9F39: .byte $00, $40, $08, $48, $80, $C0, $88, $C8, $08, $02, $09, $03, $0A, $04, $0B | |
| |
L9F48: ORA $20 | |
L9F4A: ADC #$9F | |
L9F4C: BCS $9F64 | |
L9F4E: LDA #$00 | |
L9F50: STA MotherBrainStatus | |
L9F52: LDA #$99 | |
L9F54: STA $010A | |
L9F57: STA $010B | |
L9F5A: LDA #$01 | |
L9F5C: STA $010D | |
L9F5F: LDA $9D | |
L9F61: STA $010C | |
L9F64: RTS | |
| |
L9F65: .byte $80, $B0, $A0, $90 | |
| |
L9F69: LDA $50 | |
L9F6B: CLC | |
L9F6C: ADC $4F | |
L9F6E: SEC | |
L9F6F: ROL | |
L9F70: AND #$03 | |
L9F72: TAY | |
L9F73: LDX $9F65,Y | |
L9F76: LDA #$01 | |
L9F78: STA $030F,X | |
L9F7B: LDA #$01 | |
L9F7D: STA $0307,X | |
L9F80: LDA #$03 | |
L9F82: STA $0300,X | |
L9F85: LDA $9D | |
L9F87: STA $030C,X | |
L9F8A: LDA #$10 | |
L9F8C: STA $030E,X | |
L9F8F: LDA #$68 | |
L9F91: STA $030D,X | |
L9F94: LDA #$55 | |
L9F96: STA $0305,X | |
L9F99: STA $0306,X | |
L9F9C: LDA #$00 | |
L9F9E: STA $0304,X | |
L9FA1: LDA #$F7 | |
L9FA3: STA $0303,X | |
L9FA6: LDA #$10 | |
L9FA8: STA $0503 | |
L9FAB: LDA #$40 | |
L9FAD: STA $0508 | |
L9FB0: LDA $9D | |
L9FB2: ASL | |
L9FB3: ASL | |
L9FB4: ORA #$61 | |
L9FB6: STA $0509 | |
L9FB9: LDA #$00 | |
L9FBB: STA $4B | |
L9FBD: JMP $803F | |
L9FC0: LDA #$10 | |
L9FC2: ORA $0680 | |
L9FC5: STA $0680 | |
L9FC8: LDA $2C | |
L9FCA: BNE $9FD9 | |
L9FCC: LDA #$08 | |
L9FCE: STA $0300 | |
L9FD1: LDA #$0A | |
L9FD3: STA MotherBrainStatus | |
L9FD5: LDA #$01 | |
L9FD7: STA $1C | |
L9FD9: RTS | |
| |
L9FDA: JSR $9F69 | |
L9FDD: BCS $9FEC | |
L9FDF: LDA $9D | |
L9FE1: STA $010C | |
L9FE4: LDY #$01 | |
L9FE6: STY $010D | |
L9FE9: DEY | |
L9FEA: STY MotherBrainStatus | |
L9FEC: RTS | |
| |
L9FED: LDA $9E | |
L9FEF: BEQ $A01A | |
L9FF1: LDA $0684 | |
L9FF4: ORA #$02 | |
L9FF6: STA $0684 | |
L9FF9: INC MotherBrainHits | |
L9FFB: LDA MotherBrainHits | |
L9FFD: CMP #$20 | |
L9FFF: LDY #$02 | |
LA001: LDA #$10 | |
LA003: BCC $A016 | |
LA005: LDX #$00 | |
LA007: LDA #$00 | |
LA009: STA $0500,X | |
LA00C: JSR $9EF9 | |
LA00F: CMP #$D0 | |
LA011: BNE $A007 | |
LA013: INY | |
LA014: LDA #$80 | |
LA016: STY MotherBrainStatus | |
LA018: STA $9F | |
LA01A: RTS | |
| |
LA01B: DEC $9A | |
LA01D: BNE $A02D | |
LA01F: LDA $2E | |
LA021: AND #$03 | |
LA023: STA $9C | |
LA025: LDA #$20 | |
LA027: SEC | |
LA028: SBC MotherBrainHits | |
LA02A: LSR | |
LA02B: STA $9A | |
LA02D: RTS | |
| |
LA02E: DEC $9B | |
LA030: LDA $9B | |
LA032: ASL | |
LA033: BNE $A040 | |
LA035: LDA #$20 | |
LA037: SEC | |
LA038: SBC MotherBrainHits | |
LA03A: ORA #$80 | |
LA03C: EOR $9B | |
LA03E: STA $9B | |
LA040: RTS | |
| |
LA041: LDA #$E0 | |
LA043: STA $4B | |
LA045: LDA $9D | |
LA047: STA $6BDB | |
LA04A: LDA #$70 | |
LA04C: STA $04E0 | |
LA04F: LDA #$48 | |
LA051: STA $04E1 | |
LA054: LDY $9C | |
LA056: LDA $A06D,Y | |
LA059: STA $6BD7 | |
LA05C: JSR $803C | |
LA05F: LDA $9B | |
LA061: BMI $A06C | |
LA063: LDA $A071 | |
LA066: STA $6BD7 | |
LA069: JSR $803C | |
LA06C: RTS | |
| |
LA06D: .byte $13, $14, $15, $16, $17 | |
| |
LA072: LDY MotherBrainHits | |
LA074: BEQ $A086 | |
LA076: LDA $A0C0,Y | |
LA079: CLC | |
LA07A: ADC $9A | |
LA07C: TAY | |
LA07D: LDA $A0A3,Y | |
LA080: CMP #$FF | |
LA082: BNE $A087 | |
LA084: DEC $9A | |
LA086: RTS | |
| |
LA087: ADC #$44 | |
LA089: STA $0508 | |
LA08C: PHP | |
LA08D: LDA $9D | |
LA08F: ASL | |
LA090: ASL | |
LA091: ORA #$61 | |
LA093: PLP | |
LA094: ADC #$00 | |
LA096: STA $0509 | |
LA099: LDA #$00 | |
LA09B: STA $0503 | |
LA09E: STA $4B | |
LA0A0: JMP $803F | |
| |
LA0A3: .byte $00, $02, $04, $06, $08, $40, $80, $C0, $48, $88, $C8, $FF, $42, $81, $C1, $27 | |
LA0B3: .byte $FF, $82, $43, $25, $47, $FF, $C2, $C4, $C6, $FF, $84, $45, $86, $FF, $00, $0C | |
LA0C3: .byte $11, $16, $1A | |
| |
LA0C6: LDA $71 | |
LA0C8: BEQ $A13E | |
LA0CA: LDX $4B | |
LA0CC: LDA $0300,X | |
LA0CF: CMP #$0B | |
LA0D1: BNE $A13E | |
LA0D3: CPY #$98 | |
LA0D5: BNE $A103 | |
LA0D7: LDX #$00 | |
LA0D9: LDA $0500,X | |
LA0DC: BEQ $A0E7 | |
LA0DE: JSR $9EF9 | |
LA0E1: CMP #$D0 | |
LA0E3: BNE $A0D9 | |
LA0E5: BEQ $A13E | |
LA0E7: LDA #$8C | |
LA0E9: STA $0508,X | |
LA0EC: LDA $05 | |
LA0EE: STA $0509,X | |
LA0F1: LDA #$01 | |
LA0F3: STA $0503,X | |
LA0F6: LDA $4B | |
LA0F8: PHA | |
LA0F9: STX $4B | |
LA0FB: JSR $803F | |
LA0FE: PLA | |
LA0FF: STA $4B | |
LA101: BNE $A13E | |
LA103: LDA $04 | |
LA105: LSR | |
LA106: BCC $A10A | |
LA108: DEC $04 | |
LA10A: LDY #$00 | |
LA10C: LDA ($04),Y | |
LA10E: LSR | |
LA10F: BCS $A13E | |
LA111: CMP #$48 | |
LA113: BCC $A13E | |
LA115: CMP #$4C | |
LA117: BCS $A13E | |
LA119: LDA $0758,Y | |
LA11C: BEQ $A12E | |
LA11E: LDA $04 | |
LA120: AND #$9E | |
LA122: CMP $0759,Y | |
LA125: BNE $A12E | |
LA127: LDA $05 | |
LA129: CMP $075A,Y | |
LA12C: BEQ $A139 | |
LA12E: TYA | |
LA12F: CLC | |
LA130: ADC #$08 | |
LA132: TAY | |
LA133: CMP #$28 | |
LA135: BNE $A119 | |
LA137: BEQ $A13E | |
LA139: LDA #$01 | |
LA13B: STA $075D,Y | |
LA13E: PLA | |
LA13F: PLA | |
LA140: CLC | |
LA141: RTS | |
| |
LA142: TAY | |
LA143: LDA $71 | |
LA145: BEQ $A15C | |
LA147: LDX $4B | |
LA149: LDA $0300,X | |
LA14C: CMP #$0B | |
LA14E: BNE $A15C | |
LA150: CPY #$5E | |
LA152: BCC $A15C | |
LA154: CPY #$72 | |
LA156: BCS $A15C | |
LA158: LDA #$01 | |
LA15A: STA $9E | |
LA15C: TYA | |
LA15D: RTS | |
| |
LA15E: LDY $010B | |
LA161: INY | |
LA162: BNE $A1DA | |
LA164: LDY #$03 | |
LA166: JSR $A16B | |
LA169: LDY #$00 | |
LA16B: STY $4B | |
LA16D: LDA $008B,Y | |
LA170: BMI $A15D | |
LA172: LDA $008C,Y | |
LA175: EOR $2D | |
LA177: LSR | |
LA178: BCC $A15D | |
LA17A: LDA MotherBrainStatus | |
LA17C: CMP #$04 | |
LA17E: BCS $A15D | |
LA180: LDA $2D | |
LA182: AND #$06 | |
LA184: BNE $A15D | |
LA186: LDX #$20 | |
LA188: LDA $6AF4,X | |
LA18B: BEQ $A19C | |
LA18D: LDA $0405,X | |
LA190: AND #$02 | |
LA192: BEQ $A19C | |
LA194: TXA | |
LA195: SEC | |
LA196: SBC #$10 | |
LA198: TAX | |
LA199: BPL $A188 | |
LA19B: RTS | |
| |
LA19C: LDA #$01 | |
LA19E: STA $6AF4,X | |
LA1A1: LDA #$04 | |
LA1A3: STA $6B02,X | |
LA1A6: LDA #$00 | |
LA1A8: STA $040F,X | |
LA1AB: STA $0404,X | |
LA1AE: JSR $802A | |
LA1B1: LDA #$F7 | |
LA1B3: STA $6AF7,X | |
LA1B6: LDY $4B | |
LA1B8: LDA $008C,Y | |
LA1BB: STA $6AFB,X | |
LA1BE: LDA $008D,Y | |
LA1C1: ASL | |
LA1C2: ORA $008B,Y | |
LA1C5: TAY | |
LA1C6: LDA $A1DB,Y | |
LA1C9: JSR $9EE7 | |
LA1CC: LDX $4B | |
LA1CE: INC $8D,X | |
LA1D0: LDA $8D,X | |
LA1D2: CMP #$06 | |
LA1D4: BNE $A1DA | |
LA1D6: LDA #$00 | |
LA1D8: STA $8D,X | |
LA1DA: RTS | |
| |
LA1DB: .byte $22, $2A, $2A, $BA, $B2, $2A, $C4, $2A, $C8, $BA, $BA, $BA | |
| |
LA1E7: LDY $010B | |
LA1EA: INY | |
LA1EB: BEQ $A237 | |
LA1ED: LDA $010A | |
LA1F0: STA $03 | |
LA1F2: LDA #$01 | |
LA1F4: SEC | |
LA1F5: JSR $8045 | |
LA1F8: STA $010A | |
LA1FB: LDA $010B | |
LA1FE: STA $03 | |
LA200: LDA #$00 | |
LA202: JSR $8045 | |
LA205: STA $010B | |
LA208: LDA $2D | |
LA20A: AND #$1F | |
LA20C: BNE $A216 | |
LA20E: LDA $0681 | |
LA211: ORA #$08 | |
LA213: STA $0681 | |
LA216: LDA $010A | |
LA219: ORA $010B | |
LA21C: BNE $A237 | |
LA21E: DEC $010B | |
LA221: STA MotherBrainHits | |
LA223: LDA #$07 | |
LA225: STA MotherBrainStatus | |
LA227: LDA $0680 | |
LA22A: ORA #$01 | |
LA22C: STA $0680 | |
LA22F: LDA #$0C | |
LA231: STA $2C | |
LA233: LDA #$0B | |
LA235: STA $1C | |
LA237: RTS | |
| |
LA238: LDA $010D | |
LA23B: BEQ $A28A | |
LA23D: LDA $010C | |
LA240: STA $6BDB | |
LA243: LDA #$84 | |
LA245: STA $04E0 | |
LA248: LDA #$64 | |
LA24A: STA $04E1 | |
LA24D: LDA #$1A | |
LA24F: STA $6BD7 | |
LA252: LDA #$E0 | |
LA254: STA $4B | |
LA256: LDA $5B | |
LA258: PHA | |
LA259: JSR $803C | |
LA25C: PLA | |
LA25D: CMP $5B | |
LA25F: BEQ $A28A | |
LA261: TAX | |
LA262: LDA $010B | |
LA265: LSR | |
LA266: LSR | |
LA267: LSR | |
LA268: SEC | |
LA269: ROR | |
LA26A: AND #$0F | |
LA26C: ORA #$A0 | |
LA26E: STA $0201,X | |
LA271: LDA $010B | |
LA274: AND #$0F | |
LA276: ORA #$A0 | |
LA278: STA $0205,X | |
LA27B: LDA $010A | |
LA27E: LSR | |
LA27F: LSR | |
LA280: LSR | |
LA281: SEC | |
LA282: ROR | |
LA283: AND #$0F | |
LA285: ORA #$A0 | |
LA287: STA $0209,X | |
LA28A: RTS | |
| |
LA28B: LDA #$10 | |
LA28D: STA $4B | |
LA28F: LDX #$20 | |
LA291: JSR $A29B | |
LA294: TXA | |
LA295: SEC | |
LA296: SBC #$08 | |
LA298: TAX | |
LA299: BNE $A291 | |
LA29B: LDA $0758,X | |
LA29E: AND #$0F | |
LA2A0: CMP #$01 | |
LA2A2: BNE $A28A | |
LA2A4: LDA $075D,X | |
LA2A7: BEQ $A2F2 | |
LA2A9: INC $075B,X | |
LA2AC: LDA $075B,X | |
LA2AF: LSR | |
LA2B0: BCS $A2F2 | |
LA2B2: TAY | |
LA2B3: SBC #$03 | |
LA2B5: BNE $A2BA | |
LA2B7: INC $0758,X | |
LA2BA: LDA $A310,Y | |
LA2BD: STA $0513 | |
LA2C0: LDA $0759,X | |
LA2C3: STA $0518 | |
LA2C6: LDA $075A,X | |
LA2C9: STA $0519 | |
LA2CC: LDA $07A0 | |
LA2CF: BNE $A2DA | |
LA2D1: TXA | |
LA2D2: PHA | |
LA2D3: JSR $803F | |
LA2D6: PLA | |
LA2D7: TAX | |
LA2D8: BCC $A2EB | |
LA2DA: LDA $0758,X | |
LA2DD: AND #$80 | |
LA2DF: ORA #$01 | |
LA2E1: STA $0758,X | |
LA2E4: STA $075D,X | |
LA2E7: DEC $075B,X | |
LA2EA: RTS | |
| |
LA2EB: LDA #$40 | |
LA2ED: STA $075C,X | |
LA2F0: BNE $A30A | |
LA2F2: LDY $075B,X | |
LA2F5: BEQ $A30A | |
LA2F7: DEC $075C,X | |
LA2FA: BNE $A30A | |
LA2FC: LDA #$40 | |
LA2FE: STA $075C,X | |
LA301: DEY | |
LA302: TYA | |
LA303: STA $075B,X | |
LA306: LSR | |
LA307: TAY | |
LA308: BCC $A2BA | |
LA30A: LDA #$00 | |
LA30C: STA $075D,X | |
LA30F: RTS | |
| |
LA310: .byte $0C, $0D, $0E, $0F, $07 | |
| |
LA315: LDY #$05 | |
LA317: JSR $99B1 | |
LA31A: DEY | |
LA31B: BPL $A317 | |
LA31D: STA $92 | |
LA31F: RTS | |
| |
LA320: TXA | |
LA321: JSR $9B1B | |
LA324: TAY | |
LA325: JSR $99B1 | |
LA328: STA $92 | |
LA32A: RTS | |
| |
LA32B: .byte $22, $FF, $FF, $FF, $FF | |
| |
LA330: .byte $32, $FF, $FF, $FF, $FF, $FF, $FF | |
| |
LA337: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $E0, $DE, $ED, $FF, $E8 | |
LA347: .byte $EE | |
| |
LA348: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $ED, $FF, $DF, $DA, $EC, $ED, $F4 | |
LA358: .byte $FF | |
| |
LA359: .byte $28, $FF, $FF, $FF, $FF, $ED, $E2, $E6, $DE, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
LA369: .byte $FF | |
| |
LA36A: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
LA37A: .byte $FF | |
| |
LA37B: .byte $62, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
| |
LA388: .byte $42, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
| |
LA391: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $ED, $E2, $E6, $DE, $FF | |
LA3A1: .byte $DB | |
| |
LA3A2: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $E8, $E6, $DB, $FF, $EC, $DE, $ED | |
LA3B2: .byte $FF | |
| |
LA3B3: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
LA3C3: .byte $FF | |
| |
LA3C4: .byte $28, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF | |
LA3D4: .byte $FF | |
| |
LA3D5: .byte $42, $90, $91, $90, $91, $90, $91, $90, $91 | |
| |
LA3DE: .byte $42, $92, $93, $92, $93, $92, $93, $92, $93 | |
| |
LA3E7: .byte $42, $94, $95, $94, $95, $94, $95, $94, $95 | |
| |
LA3F0: .byte $42, $96, $97, $96, $97, $96, $97, $96, $97 | |
| |
LA3F9: .byte $62, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0 | |
| |
;-----------------------------------[ Enemy animation data tables ]---------------------------------- | |
| |
EnemyAnimIndexTbl: | |
LA406: .byte $00, $01, $FF | |
| |
LA409: .byte $02, $FF | |
| |
LA40B: .byte $03, $04, $FF | |
| |
LA40E: .byte $05, $FF | |
| |
LA410: .byte $0E, $FF | |
| |
LA412: .byte $0F, $FF | |
| |
LA414: .byte $10, $FF | |
| |
LA416: .byte $11, $11, $12, $12, $F7, $FF | |
| |
LA41C: .byte $18, $FF | |
| |
LA41E: .byte $19, $F7, $FF | |
| |
LA421: .byte $1B, $1C, $1D, $FF | |
| |
LA425: .byte $1E, $FF | |
| |
LA427: .byte $61, $F7, $62, $F7, $FF | |
| |
;----------------------------[ Enemy sprite drawing pointer tables ]--------------------------------- | |
| |
EnemyFramePtrTbl1: | |
LA42C: .word $A5C8, $A5CD, $A5D2, $A5D7, $A5E4, $A5F1, $A5FB, $A600 | |
LA43C: .word $A606, $A60D, $A613, $A618, $A61E, $A625, $A62B, $A630 | |
LA44C: .word $A635, $A63A, $A641, $A651, $A65F, $A66B, $A678, $A687 | |
LA45C: .word $A691, $A69C, $A6A3, $A6AC, $A6BC, $A6CC, $A6DC, $A6E0 | |
LA46C: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA47C: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA48C: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA49C: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA4AC: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA4BC: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA4CC: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA4DC: .word $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0, $A6E0 | |
LA4EC: .word $A6E0, $A6E0, $A6EE, $A708, $A708, $A708, $A708, $A708 | |
LA4FC: .word $A708, $A708, $A708, $A708, $A708, $A708, $A708, $A708 | |
LA50C: .word $A708, $A708, $A708, $A708, $A708, $A708, $A708, $A708 | |
LA51C: .word $A708, $A708, $A708, $A708, $A708, $A708, $A708, $A708 | |
| |
EnemyFramePtrTbl2: | |
LA52C: .word $A708, $A70E, $A713, $A713, $A713, $A713, $A713, $A713 | |
LA53C: .word $A713, $A713 | |
| |
EnemyPlacePtrTbl: | |
LA540: .word $A560, $A562, $A57A, $A58C, $A592, $A59E, $A5A4, $A5A4 | |
LA550: .word $A5A4, $A5A4, $A5A4, $A5C4, $A5C4, $A5C8, $A5C8, $A5C8 | |
| |
;------------------------------[ Enemy sprite placement data tables ]-------------------------------- | |
| |
LA560: .byte $FC, $FC | |
| |
LA562: .byte $80, $80, $81, $81, $82, $82, $83, $83, $84, $84, $85, $85, $F4, $F8, $F4, $00 | |
LA572: .byte $FC, $F8, $FC, $00, $04, $F8, $04, $00 | |
| |
LA57A: .byte $F4, $F4, $F4, $FC, $F4, $04, $FC, $F4, $FC, $FC, $FC, $04, $04, $F4, $04, $FC | |
LA58A: .byte $04, $04 | |
| |
LA58C: .byte $F1, $FC, $F3, $F3, $FC, $F1 | |
| |
LA592: .byte $F4, $F8, $F4, $00, $FC, $F8, $FC, $00, $04, $F8, $04, $00 | |
| |
LA59E: .byte $FC, $F4, $FC, $FC, $FC, $04 | |
| |
LA5A4: .byte $F8, $F8, $F8, $00, $00, $F8, $00, $00, $F0, $00, $F0, $08, $F8, $08, $F0, $F0 | |
LA5B4: .byte $F0, $F8, $F8, $F0, $00, $F0, $08, $F0, $08, $F8, $00, $08, $08, $00, $08, $08 | |
| |
LA5C4: .byte $F8, $FC, $00, $FC | |
| |
;Enemy frame drawing data. | |
| |
LA5C8: .byte $00, $02, $02, $14, $FF | |
| |
LA5CD: .byte $00, $02, $02, $24, $FF | |
| |
LA5D2: .byte $00, $00, $00, $04, $FF | |
| |
LA5D7: .byte $32, $0C, $0C, $C0, $C1, $C2, $D0, $D1, $D2, $E0, $E1, $E2, $FF | |
| |
LA5E4: .byte $32, $0C, $0C, $C3, $C4, $C5, $D3, $D4, $D5, $E3, $E4, $E5, $FF | |
| |
LA5F1: .byte $31, $00, $00, $C0, $C2, $D0, $D2, $E0, $E2, $FF | |
| |
LA5FB: .byte $23, $07, $07, $EA, $FF | |
| |
LA600: .byte $23, $07, $07, $FE, $EB, $FF | |
| |
LA606: .byte $23, $07, $07, $FE, $FE, $EC, $FF | |
| |
LA60D: .byte $A3, $07, $07, $FE, $EB, $FF | |
| |
LA613: .byte $A3, $07, $07, $EA, $FF | |
| |
LA618: .byte $E3, $07, $07, $FE, $EB, $FF | |
| |
LA61E: .byte $63, $07, $07, $FE, $FE, $EC, $FF | |
| |
LA625: .byte $63, $07, $07, $FE, $EB, $FF | |
| |
LA62B: .byte $30, $04, $04, $F1, $FF | |
| |
LA630: .byte $70, $04, $04, $F1, $FF | |
| |
LA635: .byte $30, $04, $04, $F2, $FF | |
| |
LA63A: .byte $30, $00, $00, $FD, $03, $F3, $FF | |
| |
LA641: .byte $0A, $00, $00, $FD, $00, $F4, $FD, $40, $F4, $FD, $80, $F4, $FD, $C0, $F4, $FF | |
| |
LA651: .byte $24, $08, $14, $FD, $02, $FC, $04, $F0, $D8, $D9, $E8, $E9, $F8, $FF | |
| |
LA65F: .byte $24, $14, $0C, $FD, $02, $FC, $F4, $F8, $DA, $FE, $C9, $FF | |
| |
LA66B: .byte $24, $20, $04, $FD, $02, $FC, $EC, $00, $CB, $CC, $DB, $DC, $FF | |
| |
LA678: .byte $24, $18, $14, $FD, $02, $FC, $F4, $10, $DD, $CE, $FE, $DE, $FE, $DD, $FF | |
| |
LA687: .byte $24, $08, $0C, $FD, $02, $FC, $0C, $10, $CD, $FF | |
| |
LA691: .byte $21, $00, $00, $FE, $F5, $F5, $F5, $F5, $F5, $F5, $FF | |
| |
LA69C: .byte $30, $00, $00, $FD, $03, $ED, $FF | |
| |
LA6A3: .byte $05, $04, $08, $FD, $00, $00, $00, $00, $FF | |
| |
LA6AC: .byte $3A, $08, $08, $FD, $03, $EF, $FD, $43, $EF, $FD, $83, $EF, $FD, $C3, $EF, $FF | |
| |
LA6BC: .byte $3A, $08, $08, $FD, $03, $DF, $FD, $43, $DF, $FD, $83, $DF, $FD, $C3, $DF, $FF | |
| |
LA6CC: .byte $2A, $08, $08, $FD, $03, $CF, $FD, $43, $CF, $FD, $83, $CF, $FD, $C3, $CF, $FF | |
| |
LA6DC: .byte $01, $00, $00, $FF | |
| |
LA6E0: .byte $0A, $00, $00, $75, $FD, $60, $75, $FD, $A0, $75, $FD, $E0, $75, $FF | |
| |
LA6EE: .byte $0A, $00, $00, $FE, $FE, $FE, $FE, $3D, $3E, $4E, $FD, $60, $3E, $3D, $4E, $FD | |
LA6FE: .byte $E0, $4E, $3E, $3D, $FD, $A0, $4E, $3D, $3E, $FF | |
| |
LA708: .byte $0C, $08, $04, $14, $24, $FF | |
| |
LA70E: .byte $00, $04, $04, $8A, $FF | |
| |
LA713: .byte $00, $04, $04, $8A, $FF | |
| |
;-----------------------------------------[ Palette data ]------------------------------------------- | |
| |
Palette00: | |
LA718: .byte $3F ;Upper byte of PPU palette adress. | |
LA719: .byte $00 ;Lower byte of PPU palette adress. | |
LA71A: .byte $20 ;Palette data length. | |
;The following values are written to the background palette: | |
LA71B: .byte $0F, $20, $16, $00, $0F, $20, $11, $00, $0F, $16, $20, $00, $0F, $20, $10, $00 | |
;The following values are written to the sprite palette: | |
LA72B: .byte $0F, $16, $19, $27, $0F, $12, $30, $21, $0F, $27, $16, $30, $0F, $16, $2A, $37 | |
| |
LA73B: .byte $00 ;End Palette00 info. | |
| |
Palette01: | |
LA73C: .byte $3F ;Upper byte of PPU palette adress. | |
LA73D: .byte $12 ;Lower byte of PPU palette adress. | |
LA73E: .byte $02 ;Palette data length. | |
;The following values are written to the sprite palette: | |
LA73F: .byte $19, $27 | |
| |
LA741: .byte $00 ;End Palette01 info. | |
| |
Palette03: | |
LA742: .byte $3F ;Upper byte of PPU palette adress. | |
LA743: .byte $12 ;Lower byte of PPU palette adress. | |
LA744: .byte $02 ;Palette data length. | |
;The following values are written to the sprite palette: | |
LA745: .byte $2C, $27 | |
| |
LA747: .byte $00 ;End Palette03 info. | |
| |
Palette02: | |
LA748: .byte $3F ;Upper byte of PPU palette adress. | |
LA749: .byte $12 ;Lower byte of PPU palette adress. | |
LA74A: .byte $02 ;Palette data length. | |
;The following values are written to the sprite palette: | |
LA74B: .byte $19, $35 | |
| |
LA74D: .byte $00 ;End Palette02 info. | |
| |
Palette04: | |
LA74E: .byte $3F ;Upper byte of PPU palette adress. | |
LA74F: .byte $12 ;Lower byte of PPU palette adress. | |
LA750: .byte $02 ;Palette data length. | |
;The following values are written to the sprite palette: | |
LA751: .byte $2C, $24 | |
| |
LA753: .byte $00 ;End Palette04 info. | |
| |
Palette05: | |
LA754: .byte $3F ;Upper byte of PPU palette adress. | |
LA755: .byte $0A ;Lower byte of PPU palette adress. | |
LA756: .byte $01 ;Palette data length. | |
;The following values are written to the background palette: | |
LA757: .byte $27 | |
| |
LA758: .byte $00 ;End Palette05 info. | |
| |
Palette06: | |
LA759: .byte $3F ;Upper byte of PPU palette adress. | |
LA75A: .byte $0A ;Lower byte of PPU palette adress. | |
LA75B: .byte $01 ;Palette data length. | |
;The following values are written to the background palette: | |
LA75C: .byte $20 | |
| |
LA75D: .byte $00 ;End Palette06 info. | |
| |
Palette07: | |
LA75E: .byte $3F ;Upper byte of PPU palette adress. | |
LA75F: .byte $00 ;Lower byte of PPU palette adress. | |
LA760: .byte $11 ;Palette data length. | |
;The following values are written to the background palette: | |
LA761: .byte $0F, $20, $16, $00, $0F, $20, $11, $00, $0F, $20, $16, $00, $0F, $20, $10, $00 | |
LA771: .byte $0F | |
| |
LA772: .byte $00 ;End Palette07 info. | |
| |
Palette08: | |
LA773: .byte $3F ;Upper byte of PPU palette adress. | |
LA774: .byte $00 ;Lower byte of PPU palette adress. | |
LA775: .byte $11 ;Palette data length. | |
;The following values are written to the background palette: | |
LA776: .byte $20, $02, $16, $00, $20, $02, $11, $00, $20, $02, $16, $00, $20, $02, $10, $00 | |
LA786: .byte $20 | |
| |
LA787: .byte $00 ;End Palette08 info. | |
| |
Palette09: | |
LA788: .byte $3F ;Upper byte of PPU palette adress. | |
LA789: .byte $00 ;Lower byte of PPU palette adress. | |
LA78A: .byte $60 ;Lower byte of PPU palette adress. | |
LA78B: .byte $20 ;Repeat bit set. Fill sprite and background palette with #$20. | |
| |
LA78C: .byte $00 ;End Palette09 info. | |
| |
Palette0A: | |
LA78D: .byte $3F ;Upper byte of PPU palette adress. | |
LA78E: .byte $11 ;Lower byte of PPU palette adress. | |
LA78F: .byte $03 | |
;The following values are written to the sprite palette: | |
LA790: .byte $04, $09, $07 | |
| |
LA793: .byte $00 ;End Palette0A info. | |
| |
Palette0B: | |
LA794: .byte $3F ;Upper byte of PPU palette adress. | |
LA795: .byte $11 ;Lower byte of PPU palette adress. | |
LA796: .byte $03 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA797: .byte $05, $09, $17 | |
| |
LA79A: .byte $00 ;End Palette0B info. | |
| |
Palette0C: | |
LA79B: .byte $3F ;Upper byte of PPU palette adress. | |
LA79C: .byte $11 ;Lower byte of PPU palette adress. | |
LA79D: .byte $03 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA79E: .byte $06, $0A, $26 | |
| |
LA7A1: .byte $00 ;End Palette0C info. | |
| |
Palette0D: | |
LA7A2: .byte $3F ;Upper byte of PPU palette adress. | |
LA7A3: .byte $11 ;Lower byte of PPU palette adress. | |
LA7A4: .byte $03 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA7A5: .byte $16, $19, $27 | |
| |
LA7A8: .byte $00 ;End Palette0D info. | |
| |
Palette0E: | |
LA7A9: .byte $3F ;Upper byte of PPU palette adress. | |
LA7AA: .byte $00 ;Lower byte of PPU palette adress. | |
LA7AB: .byte $04 ;Lower byte of PPU palette adress. | |
;The following values are written to the background palette: | |
LA7AC: .byte $0F, $30, $30, $21 | |
| |
LA7B0: .byte $00 ;End Palette0E info. | |
| |
Palette0F: | |
LA7B1: .byte $3F ;Upper byte of PPU palette adress. | |
LA7B2: .byte $10 ;Lower byte of PPU palette adress. | |
LA7B3: .byte $04 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA7B4: .byte $0F, $15, $34, $17 | |
| |
LA7B8: .byte $00 ;End Palette0F info. | |
| |
Palette10: | |
LA7B9: .byte $3F ;Upper byte of PPU palette adress. | |
LA7BA: .byte $10 ;Lower byte of PPU palette adress. | |
LA7BB: .byte $04 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA7BC: .byte $0F, $15, $34, $19 | |
| |
LA7C0: .byte $00 ;End Palette10 info. | |
| |
Palette11: | |
LA7C1: .byte $3F ;Upper byte of PPU palette adress. | |
LA7C2: .byte $10 ;Lower byte of PPU palette adress. | |
LA7C3: .byte $04 ;Lower byte of PPU palette adress. | |
;The following values are written to the sprite palette: | |
LA7C4: .byte $0F, $15, $34, $28 | |
| |
LA7C8: .byte $00 ;End Palette11 info. | |
| |
Palette12: | |
LA7C9: .byte $3F ;Upper byte of PPU palette adress. | |
LA7CA: .byte $10 ;Lower byte of PPU palette adress. | |
LA7CB: .byte $04 ;Palette data length. | |
;The following values are written to the sprite palette: | |
LA7CC: .byte $0F, $15, $34, $29 | |
| |
LA7D0: .byte $00 ;End Palette12 info. | |
| |
;----------------------------[ Room and structure pointer tables ]----------------------------------- | |
| |
RmPtrTbl: | |
LA7D1: .word $A8AF, $A8BD, $A8C5, $A8FA, $A929, $A95E, $A975, $A990 | |
LA7E1: .word $A9AB, $A9CF, $A9F2, $AA33, $AA75, $AAAE, $AAE3, $AB12 | |
LA7F1: .word $AB4A, $AB7C, $ABA5, $ABCE, $ABEF | |
| |
StrctPtrTbl: | |
LA7FB: .word $AC16, $AC29, $AC50, $AC69, $AC70, $AC77, $AC7A, $AC8B | |
LA80B: .word $ACA4, $ACB5, $ACC6, $ACD0, $ACF9, $AD26, $AD2D, $AD3C | |
LA81B: .word $AD3F, $AD48, $AD61, $AD66, $AD6B, $AD99, $ADAC, $ADC8 | |
LA82B: .word $ADDD, $ADFE, $AE0F, $AE1A, $AE1E, $AE21, $AE2C, $AE36 | |
| |
;------------------------------------[ Special items table ]----------------------------------------- | |
| |
;The way the bytes work int the special items table is as follows: | |
;Long entry(one with a data word in it): | |
;Byte 0=Y coordinate of room on the world map. | |
;Word 0=Address of next entry in the table that has a different Y coordinate.--> | |
; $FFFF=No more items with different Y coordinates. | |
;Byte 1=X coordinate of room in the world map. | |
;Byte 2=byte offset-1 of next special item in the table that has the same--> | |
; Y coordinate(short entry). $FF=No more items with different X--> | |
; coordinates until next long entry. | |
;Byte 3=Item type. See list below for special item types. | |
;Bytes 4 to end of entry(ends with #$00)=Data bytes for special item(s).--> | |
; It is possible to have multiple special items in one room. | |
;Short entry(one without a data word in it): | |
;Byte 0=X coordinate of room in the world map(Y coordinate is the same--> | |
; as the last long item entry in the table). | |
;Byte 1=byte offset-1 of next special item in the table that has the same--> | |
; Y coordinate(short entry). $FF=No more items with different X--> | |
; coordinates until next long entry. | |
;Byte 2=Item type. See list below for special item types. | |
;Bytes 3 to end of entry(ends with #$00)=Data bytes for special item(s).--> | |
; It is possible to have multiple special items in one room. | |
; | |
;Special item types: | |
;#$01=Squeept. | |
;#$02=Power up. | |
;#$03=Mellows, Memus or Melias. | |
;#$04=Elevator. | |
;#$05=Mother brain room cannon. | |
;#$06=Mother brain. | |
;#$07=Zeebetite. | |
;#$08=Rinka. | |
;#$09=Door. | |
;#$0A=Palette change room. | |
| |
SpecItmsTbl: | |
| |
;Elevator to end. | |
LA83B: .byte $03 | |
LA83C: .word $A843 | |
LA83E: .byte $01, $FF, $04, $8F, $00 | |
| |
;Elevator to Brinstar. | |
LA843: .byte $04 | |
LA844: .word $A84B | |
LA846: .byte $03, $FF, $04, $83, $00 | |
| |
;10 missile door. | |
LA84B: .byte $07 | |
LA84C: .word $A85B | |
LA84E: .byte $03, $05, $09, $A2, $00 | |
| |
;Rinkas | |
LA853: .byte $04, $04, $08, $00 | |
| |
;Rinkas | |
LA857: .byte $09, $FF, $08, $00 | |
| |
;Rinkas | |
LA85B: .byte $08 | |
LA85C: .word $A862 | |
LA85E: .byte $0A, $FF, $18, $00 | |
| |
;Rinkas | |
LA862: .byte $09 | |
LA863: .word $A869 | |
LA865: .byte $0A, $FF, $08, $00 | |
| |
;Rinkas | |
LA869: .byte $0A | |
LA86A: .word $A870 | |
LA86C: .byte $0A, $FF, $18, $00 | |
| |
;Door at bottom of escape shaft. | |
LA870: .byte $0B | |
LA871: .word $FFFF | |
LA873: .byte $01, $05, $09, $A3, $00 | |
| |
;Mother brain, Zeebetite, 3 cannons and Rinkas. | |
LA878: .byte $02, $0C, $06, $47, $18, $05, $49, $15, $4B, $25, $3E, $00 | |
| |
;2 Zeebetites, 6 cannons and Rinkas. | |
LA884: .byte $03, $12, $37, $27, $08, $05, $41, $15, $43, $25, $36, $05, $49, $15, $4B, $35 | |
LA894: .byte $3E, $00 | |
| |
;Right door, 2 Zeebetites, 6 cannons and Rinkas. | |
LA896: .byte $04, $14, $09, $A3, $17, $07, $08, $05, $41, $15, $43, $25, $36, $05, $49, $15 | |
LA8A6: .byte $4B, $35, $3E, $00 | |
| |
;Left door. | |
LA8AA: .byte $05, $FF, $09, $B3, $00 | |
| |
;-----------------------------------------[ Room definitions ]--------------------------------------- | |
| |
;The first byte of the room definitions is attribute table data and is used to set the base color of | |
;the room. The object data is grouped into 3 byte segments and represents a structure in the room. | |
;The first byte of the structure data has the format yyyyxxxx and contains the y, x location of the | |
;structure in the room(measured in tiles). The second byte is an index into the StrctPtrTbl and | |
;identifies which structure to use. The third byte is an attribute table byte and determines the | |
;color of the structure. Most of the time, this byte will have the same value as the attribute byte | |
;for the base color of the room. Having a room base color byte reduces the calculations required to | |
;find the proper color for each structure as the structure attribute byte is skipped if it is the same | |
;as the room attribute byte. #$FD marks the end of the room objects portion of the room definition. | |
;Using the byte #$FE can be used as an empty place holder in the room data. For example, if you | |
;wanted to remove a structure from a room, simply replace the three bytes associated with the structure | |
;with #$FE. The next portion of the room definition describes the enemies and doors in the room. The | |
;number of data bytes and their functions vary depending on what type of item is being loaded. | |
| |
;Room #$00 | |
LA8AF: .byte $02 ;Attribute table data. | |
;Room object data: | |
LA8B0: .byte $40, $01, $03, $48, $01, $03, $50, $03, $02, $5F, $03, $02, $FF | |
| |
;Room #$01 | |
LA8BD: .byte $02 ;Attribute table data. | |
;Room object data: | |
LA8BE: .byte $07, $02, $02, $87, $02, $02, $FF | |
| |
;Room #$02 | |
LA8C5: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA8C6: .byte $00, $0C, $03, $08, $0C, $03, $0F, $09, $03, $5F, $04, $02, $62, $13, $02, $6A | |
LA8D6: .byte $13, $02, $82, $0E, $02, $85, $12, $01, $8A, $0E, $02, $8D, $12, $01, $8F, $09 | |
LA8E6: .byte $03, $C4, $0F, $03, $C8, $0F, $03, $D3, $10, $03, $DB, $0A, $03, $E0, $0A, $03 | |
LA8F6: .byte $E8, $0A, $03, $FF | |
| |
;Room #$03 | |
LA8FA: .byte $00 ;Attribute table data. | |
;Room object data: | |
LA8FB: .byte $00, $0C, $03, $08, $0C, $03, $62, $13, $02, $6A, $13, $02, $82, $0E, $02, $85 | |
LA90B: .byte $12, $01, $8A, $0E, $02, $8D, $12, $01, $C4, $0F, $03, $C8, $0F, $03, $D0, $0D | |
LA91B: .byte $02, $D3, $10, $03, $DB, $0A, $03, $E2, $0A, $03, $EA, $0A, $03, $FF | |
| |
;Room #$04 | |
LA929: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA92A: .byte $00, $09, $03, $01, $0A, $03, $03, $11, $03, $08, $0C, $03, $0E, $1C, $03, $52 | |
LA93A: .byte $07, $01, $53, $08, $02, $6A, $13, $02, $80, $09, $03, $8A, $0E, $02, $8D, $12 | |
LA94A: .byte $01, $91, $0B, $03, $CB, $1C, $03, $CC, $1C, $03, $D8, $0D, $02, $DB, $00, $02 | |
LA95A: .byte $E0, $0A, $03, $FF | |
| |
;Room #$05 | |
LA95E: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA95F: .byte $00, $14, $03, $08, $14, $03, $50, $04, $02, $80, $14, $03, $88, $14, $03, $D0 | |
LA96F: .byte $14, $03, $D8, $14, $03, $FF | |
| |
;Room #$06 | |
LA975: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA976: .byte $00, $14, $03, $08, $14, $03, $95, $14, $03, $D0, $14, $03, $D8, $14, $03, $FD | |
;Room enemy/door data: | |
LA986: .byte $01, $01, $45, $11, $00, $89, $21, $01, $B3, $FF | |
| |
;Room #$07 | |
LA990: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA991: .byte $00, $16, $03, $08, $16, $03, $30, $15, $03, $38, $15, $03, $D0, $15, $03, $D8 | |
LA9A1: .byte $15, $03, $FD | |
;Room enemy/door data: | |
LA9A4: .byte $31, $01, $69, $41, $00, $B5, $FF | |
| |
;Room #$08 | |
LA9AB: .byte $01 ;Attribute table data. | |
;Room object data: | |
LA9AC: .byte $00, $16, $03, $08, $16, $03, $30, $15, $03, $38, $15, $03, $D0, $17, $03, $D4 | |
LA9BC: .byte $00, $02, $D7, $17, $03, $DC, $17, $03, $FD | |
;Room enemy/door data: | |
LA9C5: .byte $01, $01, $45, $11, $00, $89, $21, $01, $D4, $FF | |
| |
;Room #$09 | |
LA9CF: .byte $01 ;Attribute table data. | |
;Room object data: | |
LA9D0: .byte $00, $16, $03, $08, $16, $03, $30, $15, $03, $38, $15, $03, $5F, $03, $02, $8C | |
LA9E0: .byte $17, $03, $B8, $17, $03, $CC, $17, $03, $D0, $00, $02, $D2, $17, $03, $FD | |
;Room enemy/door data: | |
LA9EF: .byte $02, $A0, $FF | |
| |
;Room #$0A | |
LA9F2: .byte $03 ;Attribute table data. | |
;Room object data: | |
LA9F3: .byte $00, $19, $03, $01, $1A, $03, $04, $1B, $01, $09, $12, $01, $0E, $1A, $03, $0F | |
LAA03: .byte $19, $03, $34, $12, $01, $4B, $1B, $01, $50, $03, $02, $5E, $1A, $03, $80, $19 | |
LAA13: .byte $03, $81, $1A, $03, $82, $1B, $01, $88, $18, $03, $8F, $19, $03, $B1, $18, $03 | |
LAA23: .byte $B8, $18, $03, $FD | |
;Room enemy/door data: | |
LAA27: .byte $02, $B0, $31, $01, $A5, $41, $00, $48, $51, $01, $6A, $FF | |
| |
;Room #$0B | |
LAA33: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAA34: .byte $00, $19, $03, $01, $1A, $03, $09, $12, $01, $0E, $1A, $03, $0F, $19, $03, $23 | |
LAA44: .byte $12, $01, $4B, $12, $01, $51, $1A, $03, $5E, $1A, $03, $66, $1B, $01, $80, $19 | |
LAA54: .byte $03, $82, $12, $01, $8F, $19, $03, $98, $12, $01, $A1, $1A, $03, $AE, $1A, $03 | |
LAA64: .byte $CB, $1B, $01, $D5, $12, $01, $FD | |
;Room enemy/door data: | |
LAA6B: .byte $01, $01, $45, $11, $00, $89, $21, $01, $D4, $FF | |
| |
;Room #$0C | |
LAA75: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAA76: .byte $00, $19, $03, $01, $1A, $03, $02, $1E, $03, $0E, $1A, $03, $0F, $19, $03, $36 | |
LAA86: .byte $1E, $03, $3E, $1C, $03, $51, $1A, $03, $5E, $1A, $03, $71, $1C, $03, $72, $1E | |
LAA96: .byte $03, $80, $19, $03, $8F, $19, $03, $A1, $1A, $03, $A6, $1E, $03, $AE, $1A, $03 | |
LAAA6: .byte $FD | |
;Room enemy/door data: | |
LAAA7: .byte $01, $01, $45, $51, $00, $CB, $FF | |
| |
;Room #$0D | |
LAAAE: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAAAF: .byte $00, $19, $03, $01, $18, $03, $08, $18, $03, $0F, $19, $03, $11, $18, $03, $18 | |
LAABF: .byte $18, $03, $50, $03, $02, $5E, $1A, $03, $80, $19, $03, $81, $1A, $03, $82, $1E | |
LAACF: .byte $03, $8F, $19, $03, $AE, $1A, $03, $B6, $1E, $03, $BE, $1C, $03, $D1, $1A, $03 | |
LAADF: .byte $FD | |
;Room enemy/door data: | |
LAAE0: .byte $02, $B0, $FF | |
| |
;Room #$0E | |
LAAE3: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAAE4: .byte $00, $19, $03, $01, $18, $03, $08, $18, $03, $0F, $19, $03, $41, $1A, $03, $4E | |
LAAF4: .byte $1A, $03, $80, $19, $03, $86, $1D, $03, $8F, $19, $03, $91, $1A, $03, $9E, $1A | |
LAB04: .byte $03, $BB, $1B, $01, $C3, $1B, $01, $E1, $1A, $03, $EE, $1A, $03, $FF | |
| |
;Room #$0F | |
LAB12: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAB13: .byte $00, $19, $03, $01, $1A, $03, $0E, $1A, $03, $0F, $19, $03, $12, $12, $01, $28 | |
LAB23: .byte $12, $01, $4C, $1B, $01, $51, $1A, $03, $55, $1B, $01, $5F, $03, $02, $80, $19 | |
LAB33: .byte $03, $83, $1B, $01, $8B, $12, $01, $8E, $1A, $03, $8F, $19, $03, $A1, $1A, $03 | |
LAB43: .byte $B1, $18, $03, $B8, $18, $03, $FF | |
| |
;Room #$10 | |
LAB4A: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAB4B: .byte $00, $19, $03, $01, $1A, $03, $0E, $1A, $03, $0F, $19, $03, $1A, $05, $01, $4D | |
LAB5B: .byte $05, $01, $51, $1A, $03, $5E, $1A, $03, $80, $19, $03, $8A, $05, $01, $8F, $19 | |
LAB6B: .byte $03, $95, $05, $01, $A1, $1A, $03, $AE, $1A, $03, $CA, $05, $01, $E7, $05, $01 | |
LAB7B: .byte $FF | |
| |
;Room #$11 | |
LAB7C: .byte $03 ;Attribute table data. | |
;Room object data: | |
LAB7D: .byte $00, $19, $03, $01, $1F, $01, $09, $1F, $01, $11, $1E, $03, $19, $1E, $03, $50 | |
LAB8D: .byte $03, $02, $80, $19, $03, $81, $1F, $01, $A1, $1E, $03, $B8, $1A, $03, $D1, $1F | |
LAB9D: .byte $01, $D9, $1F, $01, $FD | |
;Room enemy/door data: | |
LABA2: .byte $02, $B2, $FF | |
| |
;Room #$12 | |
LABA5: .byte $01 ;Attribute table data. | |
;Room object data: | |
LABA6: .byte $00, $1F, $01, $08, $1F, $01, $0F, $19, $03, $10, $1E, $03, $17, $1E, $03, $5F | |
LABB6: .byte $03, $02, $87, $1F, $01, $8F, $19, $03, $A7, $1A, $03, $C5, $1F, $01, $D0, $1F | |
LABC6: .byte $01, $D7, $1F, $01, $FD | |
;Room enemy/door data: | |
LABCB: .byte $02, $A0, $FF | |
| |
;Room #$13 | |
LABCE: .byte $00 ;Attribute table data. | |
;Room object data: | |
LABCF: .byte $00, $1F, $01, $08, $1F, $01, $10, $1E, $03, $18, $1E, $03, $D0, $00, $02, $D3 | |
LABDF: .byte $1F, $01, $D8, $00, $02, $DC, $1F, $01, $FD | |
;Room enemy/door data: | |
LABE8: .byte $01, $01, $45, $11, $00, $89, $FF | |
| |
;Room #$14 | |
LABEF: .byte $00 ;Attribute table data. | |
;Room object data: | |
LABF0: .byte $00, $1F, $01, $08, $1F, $01, $10, $1E, $03, $18, $1E, $03, $94, $06, $03, $98 | |
LAC00: .byte $06, $03, $9C, $06, $03, $D0, $1F, $01, $D3, $00, $02, $DB, $00, $02, $FD | |
;Room enemy/door data: | |
LAC0F: .byte $21, $00, $47, $31, $01, $6A, $FF | |
| |
;---------------------------------------[ Structure definitions ]------------------------------------ | |
| |
;The first byte of the structure definition states how many macros are in the first row of the | |
;structure. The the number of bytes after the macro number byte is equal to the value of the macro | |
;number byte and those bytes define what each macro in the row are. For example, if the macro number | |
;byte is #$08, the next 8 bytes represent 8 macros. The macro description bytes are the macro numbers | |
;and are multiplied by 4 to find the index to the desired macro in MacroDefs. Any further bytes in | |
;the structure definition represent the next rows. #$FF marks the end of the structure definition. | |
| |
;Structure #$00 | |
LAC16: .byte $08, $01, $01, $01, $01, $01, $01, $01, $01, $08, $00, $00, $00, $00, $00, $00 | |
LAC26: .byte $00, $00, $FF | |
| |
;Structure #$01 | |
LAC29: .byte $08, $0A, $0A, $0A, $0A, $0A, $0A, $0A, $0A, $08, $02, $02, $02, $02, $02, $02 | |
LAC39: .byte $02, $02, $01, $1C, $08, $03, $03, $03, $03, $03, $03, $03, $03, $08, $0A, $0A | |
LAC49: .byte $0A, $0A, $0A, $0A, $0A, $0A, $FF | |
| |
;Structure #$02 | |
LAC50: .byte $02, $04, $05, $02, $04, $05, $02, $04, $05, $02, $04, $05, $02, $04, $05, $02 | |
LAC60: .byte $04, $05, $02, $04, $05, $02, $04, $05, $FF | |
| |
;Structure #$03 | |
LAC69: .byte $01, $08, $01, $08, $01, $08, $FF | |
| |
;Structure #$04 | |
LAC70: .byte $01, $09, $01, $09, $01, $09, $FF | |
| |
;Structure #$05 | |
LAC77: .byte $01, $13, $FF | |
| |
;Structure #$06 | |
LAC7A: .byte $03, $1D, $17, $1E, $03, $21, $1C, $21, $03, $21, $1C, $21, $03, $1F, $17, $20 | |
LAC8A: .byte $FF | |
| |
;Structure #$07 | |
LAC8B: .byte $05, $25, $1C, $1C, $1C, $31, $05, $26, $1C, $1C, $1C, $32, $05, $26, $1C, $1C | |
LAC9B: .byte $1C, $32, $05, $27, $1C, $1C, $1C, $33, $FF | |
| |
;Structure #$08 | |
LACA4: .byte $03, $28, $29, $2A, $03, $2B, $2C, $2D, $03, $2E, $2F, $30, $03, $06, $12, $35 | |
LACB4: .byte $FF | |
| |
;Structure #$09 | |
LACB5: .byte $01, $0B, $01, $0B, $01, $0B, $01, $0B, $01, $0B, $01, $0B, $01, $0B, $01, $0B | |
LACC5: .byte $FF | |
| |
;Structure #$0A | |
LACC6: .byte $08, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $FF | |
| |
;Structure #$0B | |
LACD0: .byte $07, $1D, $0D, $16, $16, $16, $0D, $1E, $07, $21, $1D, $0D, $0D, $0D, $1E, $21 | |
LACE0: .byte $07, $21, $21, $15, $14, $15, $21, $21, $07, $0D, $21, $16, $10, $16, $21, $0D | |
LACF0: .byte $07, $1F, $0D, $20, $10, $1F, $0D, $20, $FF | |
| |
;Structure #$0C | |
LACF9: .byte $08, $22, $22, $0D, $22, $22, $1E, $1C, $1D, $08, $1C, $1C, $21, $1C, $1C, $21 | |
LAD09: .byte $1C, $21, $08, $1C, $1C, $0C, $1C, $1C, $1F, $0D, $20, $07, $1C, $1C, $21, $1C | |
LAD19: .byte $1C, $1C, $14, $04, $1C, $14, $0D, $14, $03, $1C, $1C, $15, $FF | |
| |
;Structure #$0D | |
LAD26: .byte $02, $01, $01, $02, $00, $00, $FF | |
| |
;Structure #$0E | |
LAD2D: .byte $01, $16, $01, $21, $01, $21, $01, $0C, $01, $21, $01, $0D, $01, $21, $FF | |
| |
;Structure #$0F | |
LAD3C: .byte $01, $0C, $FF | |
| |
;Structure #$10 | |
LAD3F: .byte $07, $22, $22, $22, $22, $22, $22, $22, $FF | |
| |
;Structure #$11 | |
LAD48: .byte $05, $0B, $1D, $22, $0D, $22, $04, $11, $21, $11, $21, $04, $11, $21, $11, $0D | |
LAD58: .byte $03, $11, $21, $11, $03, $23, $23, $23, $FF | |
| |
;Structure #$12 | |
LAD61: .byte $03, $19, $1B, $1A, $FF | |
| |
;Structure #$13 | |
LAD66: .byte $01, $34, $01, $34, $FF | |
| |
;Structure #$14 | |
LAD6B: .byte $08, $1D, $22, $17, $0D, $1E, $0D, $17, $0D, $08, $0D, $22, $17, $20, $21, $14 | |
LAD7B: .byte $0D, $11, $08, $21, $1D, $22, $17, $20, $10, $10, $21, $08, $21, $1F, $17, $0D | |
LAD8B: .byte $22, $0D, $1E, $11, $08, $0D, $14, $10, $1F, $22, $22, $20, $11, $FF | |
| |
;Structure #$15 | |
LAD99: .byte $08, $17, $17, $0D, $17, $17, $0D, $17, $17, $08, $0D, $17, $17, $17, $17, $17 | |
LADA9: .byte $17, $0D, $FF | |
| |
;Structure #$16 | |
LADAC: .byte $08, $18, $1D, $17, $1E, $1D, $17, $17, $1E, $08, $18, $21, $1C, $21, $21, $1C | |
LADBC: .byte $1C, $21, $08, $0D, $20, $1C, $1F, $20, $1C, $1C, $1F, $FF | |
| |
;Structure #$17 | |
LADC8: .byte $04, $0D, $0D, $0D, $0D, $04, $18, $18, $18, $18, $04, $18, $18, $18, $18, $04 | |
LADD8: .byte $18, $18, $18, $18, $FF | |
| |
;Structure #$18 | |
LADDD: .byte $07, $0A, $0A, $0A, $0A, $0A, $0A, $0A, $07, $0D, $17, $17, $17, $17, $17, $0D | |
LADED: .byte $07, $18, $0A, $10, $0A, $0A, $10, $18, $07, $0D, $17, $17, $17, $17, $17, $0D | |
LADFD: .byte $FF | |
| |
;Structure #$19 | |
LADFE: .byte $01, $0A, $01, $0A, $01, $0A, $01, $0A, $01, $0A, $01, $0A, $01, $0A, $01, $0A | |
LAE0E: .byte $FF | |
| |
;Structure #$1A | |
LAE0F: .byte $01, $0D, $01, $18, $01, $18, $01, $18, $01, $18, $FF | |
| |
;Structure #$1B | |
LAE1A: .byte $02, $19, $1A, $FF | |
| |
;Structure #$1C | |
LAE1E: .byte $01, $0D, $FF | |
| |
;Structure #$1D | |
LAE21: .byte $04, $14, $1C, $1C, $14, $04, $0A, $0A, $0A, $0A, $FF | |
| |
;Structure #$1E | |
LAE2C: .byte $08, $0D, $22, $22, $22, $22, $22, $22, $0D, $FF | |
| |
;Structure #$1F | |
LAE36: .byte $08, $0E, $0E, $0E, $0E, $0E, $0E, $0E, $0E, $08, $0E, $10, $0E, $0E, $10, $10 | |
LAE46: .byte $0E, $10, $FF | |
| |
;----------------------------------------[ Macro definitions ]--------------------------------------- | |
| |
;The macro definitions are simply index numbers into the pattern tables that represent the 4 quadrants | |
;of the macro definition. The bytes correspond to the following position in order: lower right tile, | |
;lower left tile, upper right tile, upper left tile. | |
| |
MacroDefs: | |
| |
LAE49: .byte $A7, $A7, $A7, $A7 | |
LAE4D: .byte $FF, $FF, $A6, $A6 | |
LAE51: .byte $A2, $A2, $FF, $FF | |
LAE55: .byte $FF, $FF, $A3, $A3 | |
LAE59: .byte $A4, $FF, $A4, $FF | |
LAE5D: .byte $FF, $A5, $FF, $A5 | |
LAE61: .byte $FF, $79, $FF, $7E | |
LAE65: .byte $4F, $4F, $4F, $4F | |
LAE69: .byte $A0, $A0, $A0, $A0 | |
LAE6D: .byte $A1, $A1, $A1, $A1 | |
LAE71: .byte $04, $05, $06, $07 | |
LAE75: .byte $10, $11, $12, $13 | |
LAE79: .byte $00, $01, $02, $03 | |
LAE7D: .byte $08, $08, $08, $08 | |
LAE81: .byte $18, $19, $1A, $1B | |
LAE85: .byte $1C, $1D, $1E, $1F | |
LAE89: .byte $0C, $0D, $0E, $0F | |
LAE8D: .byte $09, $09, $09, $09 | |
LAE91: .byte $7A, $7B, $7F, $5A | |
LAE95: .byte $2A, $2C, $FF, $FF | |
LAE99: .byte $14, $15, $16, $17 | |
LAE9D: .byte $20, $21, $22, $23 | |
LAEA1: .byte $24, $25, $20, $21 | |
LAEA5: .byte $28, $28, $29, $29 | |
LAEA9: .byte $26, $27, $26, $27 | |
LAEAD: .byte $2A, $2B, $FF, $FF | |
LAEB1: .byte $2B, $2C, $FF, $FF | |
LAEB5: .byte $2B, $2B, $FF, $FF | |
LAEB9: .byte $FF, $FF, $FF, $FF | |
LAEBD: .byte $31, $32, $33, $34 | |
LAEC1: .byte $35, $36, $37, $38 | |
LAEC5: .byte $3D, $3E, $3F, $40 | |
LAEC9: .byte $41, $42, $43, $44 | |
LAECD: .byte $39, $3A, $39, $3A | |
LAED1: .byte $3B, $3B, $3C, $3C | |
LAED5: .byte $0B, $0B, $2D, $2E | |
LAED9: .byte $2F, $30, $0B, $0B | |
LAEDD: .byte $50, $51, $52, $53 | |
LAEE1: .byte $54, $55, $54, $55 | |
LAEE5: .byte $56, $57, $58, $59 | |
LAEE9: .byte $FF, $FF, $FF, $5E | |
LAEED: .byte $5B, $5C, $5F, $60 | |
LAEF1: .byte $FF, $FF, $61, $FF | |
LAEF5: .byte $5D, $62, $67, $68 | |
LAEF9: .byte $63, $64, $69, $6A | |
LAEFD: .byte $65, $66, $6B, $6C | |
LAF01: .byte $6D, $6E, $73, $74 | |
LAF05: .byte $6F, $70, $75, $76 | |
LAF09: .byte $71, $72, $77, $78 | |
LAF0D: .byte $45, $46, $47, $48 | |
LAF11: .byte $FF, $98, $FF, $98 | |
LAF15: .byte $49, $4A, $4B, $4C | |
LAF19: .byte $90, $91, $90, $91 | |
LAF1D: .byte $7C, $7D, $4D, $FF | |
| |
;Not used. | |
LAF21: .byte $1C, $1D, $1E, $17, $18, $19, $1A, $1F, $20, $21, $22, $60, $61, $62, $63, $0E | |
LAF31: .byte $0F, $FF, $FF, $0C, $0D, $0D, $0D, $10, $0D, $FF, $10, $10, $FF, $FF, $FF, $FF | |
LAF41: .byte $FF, $FF, $30, $FF, $33, $FF, $36, $FF, $39, $FF, $3D, $FF, $FF, $31, $32, $34 | |
LAF51: .byte $35, $37, $38, $3A, $3B, $3E, $3F, $3C, $41, $40, $42, $84, $85, $86, $87, $80 | |
LAF61: .byte $81, $82, $83, $88, $89, $8A, $8B, $45, $46, $45, $46, $47, $48, $48, $47, $5C | |
LAF71: .byte $5D, $5E, $5F, $B8, $B8, $B9, $B9, $74, $75, $75, $74, $C1, $13, $13, $13, $36 | |
LAF81: .byte $BE, $BC, $BD, $BF, $14, $15, $14, $C0, $14, $C0, $16, $FF, $C1, $FF, $FF, $C2 | |
LAF91: .byte $14, $FF, $FF, $30, $13, $BC, $BD, $13, $14, $15, $16, $D7, $D7, $D7, $D7, $76 | |
LAFA1: .byte $76, $76, $76, $FF, $FF, $BA, $BA, $BB, $BB, $BB, $BB, $00, $01, $02, $03, $04 | |
LAFB1: .byte $05, $06, $07, $FF, $FF, $08, $09, $FF, $FF, $09, $0A, $55, $56, $57, $58, $90 | |
LAFC1: .byte $91, $92, $93, $4B, $4C, $4D, $50, $51, $52, $53, $54, $70, $71, $72, $73, $8C | |
LAFD1: .byte $8D, $8E, $8F, $11, $12, $FF, $11, $11, $12, $12, $11, $11, $12, $12, $FF, $C3 | |
LAFE1: .byte $C4, $C5, $C6, $30, $00, $BC, $BD, $CD, $CE, $CF, $D0, $D1, $D2, $D3, $D4, $90 | |
LAFF1: .byte $91, $92, $93, $20, $20, $20, $20, $C0, $C0, $C0, $C0, $C0, $C0, $C0, $C0 | |
| |
;------------------------------------------[ Area music data ]--------------------------------------- | |
| |
;There are 3 control bytes associated with the music data and the rest are musical note indexes. | |
;If the byte has the binary format 1011xxxx ($Bx), then the byte is an index into the corresponding | |
;musical notes table and is used to set the note length until it is set by another note length | |
;byte. The lower 4 bits are the index into the note length table. Another control byte is the loop | |
;and counter btye. The loop and counter byte has the format 11xxxxxx. Bits 0 thru 6 contain the | |
;number of times to loop. The third control byte is #$FF. This control byte marks the end of a loop | |
;and decrements the loop counter. If #$00 is found in the music data, the music has reached the end. | |
;A #$00 in any of the different music channel data segments will mark the end of the music. The | |
;remaining bytes are indexes into the MusicNotesTbl and should only be even numbers as there are 2 | |
;bytes of data per musical note. | |
| |
EscapeSQ2Data: | |
LB000: .byte $C4 ; | |
LB001: .byte $B3 ;3/4 seconds + | |
LB002: .byte $3E ;G4 | | |
LB003: .byte $44 ;A#4 | Repeat 4 times | |
LB004: .byte $B4 ;1 1/2 seconds | | |
LB005: .byte $42 ;A4 + | |
LB006: .byte $FF ; | |
LB007: .byte $C2 ; | |
LB008: .byte $B6 ;1 3/16 seconds + | |
LB009: .byte $30 ;C4 | | |
LB00A: .byte $B9 ;1/8 seconds | | |
LB00B: .byte $26 ;G3 | | |
LB00C: .byte $30 ;C4 | | |
LB00D: .byte $36 ;D#4 | | |
LB00E: .byte $B4 ;1 1/2 seconds | | |
LB00F: .byte $34 ;D4 | | |
LB010: .byte $B6 ;1 3/16 seconds | | |
LB011: .byte $30 ;C4 | | |
LB012: .byte $B9 ;1/8 seconds | | |
LB013: .byte $26 ;G3 | | |
LB014: .byte $30 ;C4 | | |
LB015: .byte $36 ;D#4 | | |
LB016: .byte $B4 ;1 1/2 seconds | Repeat 2 times | |
LB017: .byte $34 ;D4 | | |
LB018: .byte $B6 ;1 3/16 seconds | | |
LB019: .byte $30 ;C4 | | |
LB01A: .byte $B9 ;1/8 seconds | | |
LB01B: .byte $26 ;G3 | | |
LB01C: .byte $30 ;C4 | | |
LB01D: .byte $38 ;E4 | | |
LB01E: .byte $B4 ;1 1/2 seconds | | |
LB01F: .byte $34 ;D4 | | |
LB020: .byte $B6 ;1 3/16 seconds | | |
LB021: .byte $30 ;C4 | | |
LB022: .byte $B9 ;1/8 seconds | | |
LB023: .byte $26 ;G3 | | |
LB024: .byte $30 ;C4 | | |
LB025: .byte $38 ;E4 | | |
LB026: .byte $B4 ;1 1/2 seconds | | |
LB027: .byte $34 ;D4 + | |
LB028: .byte $FF ; | |
LB029: .byte $C2 ; | |
LB02A: .byte $B6 ;1 3/16 seconds + | |
LB02B: .byte $48 ;C5 | | |
LB02C: .byte $B9 ;1/8 seconds | | |
LB02D: .byte $46 ;B4 | | |
LB02E: .byte $02 ;No sound | | |
LB02F: .byte $48 ;C5 | | |
LB030: .byte $B6 ;1 3/16 seconds | | |
LB031: .byte $4C ;D5 | | |
LB032: .byte $B2 ;3/8 seconds | | |
LB033: .byte $48 ;C5 | | |
LB034: .byte $B6 ;1 3/16 seconds | | |
LB035: .byte $46 ;B4 | | |
LB036: .byte $B9 ;1/8 second | | |
LB037: .byte $42 ;A4 | | |
LB038: .byte $02 ;No sound | | |
LB039: .byte $46 ;B4 | Repeat 2 times | |
LB03A: .byte $B3 ;3/4 seconds | | |
LB03B: .byte $48 ;C5 | | |
LB03C: .byte $3E ;G4 | | |
LB03D: .byte $B6 ;1 3/16 seconds | | |
LB03E: .byte $3A ;F4 | | |
LB03F: .byte $B9 ;1/8 seconds | | |
LB040: .byte $3E ;G4 | | |
LB041: .byte $02 ;No sound | | |
LB042: .byte $3A ;F4 | | |
LB043: .byte $B3 ;3/4 seconds | | |
LB044: .byte $38 ;E4 | | |
LB045: .byte $30 ;C4 | | |
LB046: .byte $B4 ;1 1/2 seconds | | |
LB047: .byte $36 ;D#4 | | |
LB048: .byte $B3 ;3/4 seconds | | |
LB049: .byte $30 ;C4 | | |
LB04A: .byte $2E ;B3 + | |
LB04B: .byte $FF ; | |
LB04C: .byte $00 ;End escape music. | |
| |
EscapeSQ1Data: | |
LB04D: .byte $C4 ; | |
LB04E: .byte $B3 ;3/4 seconds + | |
LB04F: .byte $34 ;D4 | | |
LB050: .byte $3A ;F4 | Repeat 4 times | |
LB051: .byte $B4 ;1 1/2 seconds | | |
LB052: .byte $32 ;C#4 + | |
LB053: .byte $FF ; | |
LB054: .byte $C2 ; | |
LB055: .byte $B4 ;1 1/2 seconds + | |
LB056: .byte $2A ;A3 | | |
LB057: .byte $28 ;Ab3 | | |
LB058: .byte $2A ;A3 | | |
LB059: .byte $B6 ;1 3/16 seconds | | |
LB05A: .byte $28 ;Ab3 | | |
LB05B: .byte $B9 ;1/8 seconds | | |
LB05C: .byte $26 ;G3 | | |
LB05D: .byte $24 ;F#3 | | |
LB05E: .byte $22 ;F3 | | |
LB05F: .byte $B6 ;1 3/16 seconds | | |
LB060: .byte $20 ;E3 | | |
LB061: .byte $B2 ;3/8 seconds | | |
LB062: .byte $22 ;F3 | | |
LB063: .byte $B6 ;1 3/16 seconds | Repeat 2 times | |
LB064: .byte $28 ;Ab3 | | |
LB065: .byte $B9 ;1/8 seconds | | |
LB066: .byte $26 ;G3 | | |
LB067: .byte $24 ;F#3 | | |
LB068: .byte $22 ;F3 | | |
LB069: .byte $B4 ;1 1/2 seconds | | |
LB06A: .byte $26 ;G3 | | |
LB06B: .byte $B9 ;1/8 seconds | | |
LB06C: .byte $22 ;F3 | | |
LB06D: .byte $20 ;E3 | | |
LB06E: .byte $22 ;F3 | | |
LB06F: .byte $26 ;G3 | | |
LB070: .byte $22 ;F3 | | |
LB071: .byte $26 ;G3 | | |
LB072: .byte $2A ;A3 | | |
LB073: .byte $26 ;G3 | | |
LB074: .byte $2A ;A3 | | |
LB075: .byte $2E ;B3 | | |
LB076: .byte $2A ;A3 | | |
LB077: .byte $2E ;B3 + | |
LB078: .byte $FF ; | |
LB079: .byte $C2 ; | |
LB07A: .byte $B9 ;1/8 seconds + | |
LB07B: .byte $20 ;E3 | | |
LB07C: .byte $1E ;D#3 | | |
LB07D: .byte $20 ;E3 | | |
LB07E: .byte $26 ;G3 | | |
LB07F: .byte $30 ;C4 | | |
LB080: .byte $38 ;E4 | | |
LB081: .byte $B2 ;3/8 seconds | | |
LB082: .byte $3E ;G4 | | |
LB083: .byte $38 ;E4 | | |
LB084: .byte $B0 ;3/32 seconds | | |
LB085: .byte $24 ;F#3 | | |
LB086: .byte $20 ;E3 | | |
LB087: .byte $24 ;F#3 | | |
LB088: .byte $2A ;A3 | | |
LB089: .byte $B9 ;1/8 seconds | | |
LB08A: .byte $34 ;D4 | | |
LB08B: .byte $3A ;F4 | | |
LB08C: .byte $3C ;F#4 | | |
LB08D: .byte $B2 ;3/8 seconds | | |
LB08E: .byte $42 ;A4 | | |
LB08F: .byte $3C ;F#4 | | |
LB090: .byte $B2 ;3/8 seconds | | |
LB091: .byte $3E ;G4 | | |
LB092: .byte $B9 ;1/8 seconds | | |
LB093: .byte $34 ;D4 | | |
LB094: .byte $02 ;No sound | | |
LB095: .byte $2E ;B3 | | |
LB096: .byte $B3 ;3/4 seconds | | |
LB097: .byte $34 ;D4 | | |
LB098: .byte $B2 ;3/8 seconds | | |
LB099: .byte $3E ;G4 | | |
LB09A: .byte $3A ;F4 | | |
LB09B: .byte $38 ;E4 | | |
LB09C: .byte $34 ;D4 | | |
LB09D: .byte $B9 ;1/8 seconds | | |
LB09E: .byte $30 ;C4 | | |
LB09F: .byte $26 ;G3 | | |
LB0A0: .byte $30 ;C4 | | |
LB0A1: .byte $B9 ;1/8 seconds | | |
LB0A2: .byte $34 ;D4 | | |
LB0A3: .byte $02 ;No sound | | |
LB0A4: .byte $26 ;G3 | | |
LB0A5: .byte $B3 ;3/4 seconds | Repeat 2 times | |
LB0A6: .byte $30 ;C4 | | |
LB0A7: .byte $B9 ;1/8 seconds | | |
LB0A8: .byte $30 ;C4 | | |
LB0A9: .byte $20 ;E3 | | |
LB0AA: .byte $3E ;G4 | | |
LB0AB: .byte $B9 ;1/8 seconds | | |
LB0AC: .byte $34 ;D4 | | |
LB0AD: .byte $02 ;No sound | | |
LB0AE: .byte $26 ;G3 | | |
LB0AF: .byte $3A ;F4 | | |
LB0B0: .byte $38 ;E4 | | |
LB0B1: .byte $34 ;D4 | | |
LB0B2: .byte $30 ;C4 | | |
LB0B3: .byte $26 ;G3 | | |
LB0B4: .byte $24 ;F#3 | | |
LB0B5: .byte $22 ;F3 | | |
LB0B6: .byte $20 ;E3 | | |
LB0B7: .byte $22 ;F3 | | |
LB0B8: .byte $26 ;G3 | | |
LB0B9: .byte $22 ;F3 | | |
LB0BA: .byte $26 ;G3 | | |
LB0BB: .byte $28 ;Ab3 | | |
LB0BC: .byte $26 ;G3 | | |
LB0BD: .byte $28 ;Ab3 | | |
LB0BE: .byte $2C ;A#3 | | |
LB0BF: .byte $28 ;Ab3 | | |
LB0C0: .byte $2C ;A#3 | | |
LB0C1: .byte $B9 ;1/8 seconds | | |
LB0C2: .byte $22 ;F3 | | |
LB0C3: .byte $20 ;E3 | | |
LB0C4: .byte $22 ;F3 | | |
LB0C5: .byte $20 ;E3 | | |
LB0C6: .byte $22 ;F3 | | |
LB0C7: .byte $20 ;E3 | | |
LB0C8: .byte $22 ;F3 | | |
LB0C9: .byte $1C ;D3 | | |
LB0CA: .byte $22 ;F3 | | |
LB0CB: .byte $1C ;D3 | | |
LB0CC: .byte $22 ;F3 | | |
LB0CD: .byte $1C ;D3 + | |
LB0CE: .byte $FF ; | |
| |
EscapeTriData: | |
LB0CF: .byte $D0 ; | |
LB0D0: .byte $B2 ;3/8 seconds + | |
LB0D1: .byte $3E ;G4 | | |
LB0D2: .byte $B9 ;1/8 seconds | Repeat 16 times | |
LB0D3: .byte $3E ;G4 | | |
LB0D4: .byte $3E ;G4 | | |
LB0D5: .byte $3E ;G4 + | |
LB0D6: .byte $FF ; | |
LB0D7: .byte $C2 ; | |
LB0D8: .byte $B2 ;3/8 seconds + | |
LB0D9: .byte $2A ;A3 | | |
LB0DA: .byte $B9 ;1/8 seconds | | |
LB0DB: .byte $2A ;A3 | | |
LB0DC: .byte $12 ;A2 | | |
LB0DD: .byte $2A ;A3 | | |
LB0DE: .byte $B2 ;3/8 seconds | | |
LB0DF: .byte $2A ;A3 | | |
LB0E0: .byte $2A ;A3 | | |
LB0E1: .byte $2A ;A3 | | |
LB0E2: .byte $B9 ;1/8 seconds | | |
LB0E3: .byte $2A ;A3 | | |
LB0E4: .byte $2A ;A3 | | |
LB0E5: .byte $2A ;A3 | | |
LB0E6: .byte $B2 ;3/8 seconds | | |
LB0E7: .byte $2A ;A3 | | |
LB0E8: .byte $2A ;A3 | | |
LB0E9: .byte $2A ;A3 | | |
LB0EA: .byte $B9 ;1/8 seconds | | |
LB0EB: .byte $2A ;A3 | | |
LB0EC: .byte $2A ;A3 | | |
LB0ED: .byte $2A ;A3 | | |
LB0EE: .byte $B2 ;3/8 seconds | | |
LB0EF: .byte $2A ;A3 | | |
LB0F0: .byte $2A ;A3 | | |
LB0F1: .byte $2A ;A3 | | |
LB0F2: .byte $2A ;A3 | | |
LB0F3: .byte $2A ;A3 | | |
LB0F4: .byte $B9 ;1/8 seconds | | |
LB0F5: .byte $2A ;A3 | | |
LB0F6: .byte $12 ;A2 | | |
LB0F7: .byte $2A ;A3 | | |
LB0F8: .byte $B2 ;3/8 seconds | | |
LB0F9: .byte $26 ;G3 | | |
LB0FA: .byte $B9 ;1/8 seconds | Repeat 2 times | |
LB0FB: .byte $0E ;G2 | | |
LB0FC: .byte $26 ;G3 | | |
LB0FD: .byte $26 ;G3 | | |
LB0FE: .byte $B2 ;3/8 seconds | | |
LB0FF: .byte $26 ;G3 | | |
LB100: .byte $B9 ;1/8 seconds | | |
LB101: .byte $0E ;G2 | | |
LB102: .byte $26 ;G3 | | |
LB103: .byte $26 ;G3 | | |
LB104: .byte $B2 ;3/8 seconds | | |
LB105: .byte $22 ;F3 | | |
LB106: .byte $B9 ;1/8 seconds | | |
LB107: .byte $0A ;F2 | | |
LB108: .byte $22 ;F3 | | |
LB109: .byte $22 ;F3 | | |
LB10A: .byte $B2 ;3/8 seconds | | |
LB10B: .byte $22 ;F3 | | |
LB10C: .byte $B9 ;1/8 seconds | | |
LB10D: .byte $0A ;F2 | | |
LB10E: .byte $22 ;F3 | | |
LB10F: .byte $22 ;F3 | | |
LB110: .byte $B2 ;3/8 seconds | | |
LB111: .byte $20 ;E3 | | |
LB112: .byte $20 ;E3 | | |
LB113: .byte $B9 ;1/8 seconds | | |
LB114: .byte $20 ;E3 | | |
LB115: .byte $20 ;E3 | | |
LB116: .byte $20 ;E3 | | |
LB117: .byte $B2 ;3/8 seconds | | |
LB118: .byte $20 ;E3 | | |
LB119: .byte $B9 ;1/8 seconds | | |
LB11A: .byte $34 ;D4 | | |
LB11B: .byte $30 ;C4 | | |
LB11C: .byte $34 ;D4 | | |
LB11D: .byte $38 ;E4 | | |
LB11E: .byte $34 ;D4 | | |
LB11F: .byte $38 ;E4 | | |
LB120: .byte $3A ;F4 | | |
LB121: .byte $38 ;E4 | | |
LB122: .byte $3A ;F4 | | |
LB123: .byte $3E ;G4 | | |
LB124: .byte $3A ;F4 | | |
LB125: .byte $3E ;G4 + | |
LB126: .byte $FF ; | |
LB127: .byte $C2 ; | |
LB128: .byte $B2 ;3/8 seconds + | |
LB129: .byte $18 ;C3 | | |
LB12A: .byte $30 ;C4 | | |
LB12B: .byte $18 ;C3 | | |
LB12C: .byte $30 ;C4 | | |
LB12D: .byte $18 ;C3 | | |
LB12E: .byte $30 ;C4 | | |
LB12F: .byte $18 ;C3 | | |
LB130: .byte $30 ;C4 | | |
LB131: .byte $22 ;F3 | | |
LB132: .byte $22 ;F3 | | |
LB133: .byte $B1 ;3/16 seconds | | |
LB134: .byte $22 ;F3 | | |
LB135: .byte $22 ;F3 | | |
LB136: .byte $B2 ;3/8 seconds | | |
LB137: .byte $22 ;F3 | | |
LB138: .byte $20 ;E3 | | |
LB139: .byte $1C ;D3 | | |
LB13A: .byte $18 ;C3 | | |
LB13B: .byte $16 ;B2 | | |
LB13C: .byte $14 ;A#2 | | |
LB13D: .byte $14 ;A#2 | | |
LB13E: .byte $14 ;A#2 | | |
LB13F: .byte $2C ;A#3 | Repeat 2 times | |
LB140: .byte $2A ;A3 | | |
LB141: .byte $2A ;A3 | | |
LB142: .byte $B9 ;1/8 seconds | | |
LB143: .byte $2A ;A3 | | |
LB144: .byte $2A ;A3 | | |
LB145: .byte $2A ;A3 | | |
LB146: .byte $B2 ;3/8 seconds | | |
LB147: .byte $2A ;A3 | | |
LB148: .byte $28 ;Ab3 | | |
LB149: .byte $28 ;Ab3 | | |
LB14A: .byte $B9 ;1/8 seconds | | |
LB14B: .byte $28 ;Ab3 | | |
LB14C: .byte $28 ;Ab3 | | |
LB14D: .byte $28 ;Ab3 | | |
LB14E: .byte $B2 ;3/8 seconds | | |
LB14F: .byte $28 ;Ab3 | | |
LB150: .byte $26 ;G3 | | |
LB151: .byte $26 ;G3 | | |
LB152: .byte $B9 ;1/8 seconds | | |
LB153: .byte $26 ;G3 | | |
LB154: .byte $26 ;G3 | | |
LB155: .byte $3E ;G4 | | |
LB156: .byte $26 ;G3 | | |
LB157: .byte $26 ;G3 | | |
LB158: .byte $3E ;G4 + | |
LB159: .byte $FF ; | |
| |
EscapeNoiseData: | |
LB15A: .byte $F0 ; | |
LB15B: .byte $B2 ;3/8 seconds + | |
LB15C: .byte $01 ;Drumbeat 00 | | |
LB15D: .byte $04 ;Drumbeat 01 | Repeat 48 times | |
LB15E: .byte $01 ;Drumbeat 00 | | |
LB15F: .byte $04 ;Drumbeat 01 + | |
LB160: .byte $FF ; | |
| |
MthrBrnRoomTriData: | |
LB161: .byte $E0 ; | |
LB162: .byte $BA ;3/64 seconds + | |
LB163: .byte $2A ;A3 | | |
LB164: .byte $1A ;C#3 | | |
LB165: .byte $02 ;No sound | | |
LB166: .byte $3A ;F4 | | |
LB167: .byte $40 ;Ab4 | | |
LB168: .byte $02 ;No sound | | |
LB169: .byte $1C ;D3 | | |
LB16A: .byte $2E ;B3 | | |
LB16B: .byte $38 ;E4 | | |
LB16C: .byte $2C ;A#3 | | |
LB16D: .byte $3C ;F#4 | | |
LB16E: .byte $38 ;E4 | | |
LB16F: .byte $02 ;No sound | | |
LB170: .byte $40 ;Ab4 | | |
LB171: .byte $44 ;A#4 | | |
LB172: .byte $46 ;B4 | | |
LB173: .byte $02 ;No sound | | |
LB174: .byte $1E ;D#3 | | |
LB175: .byte $02 ;No sound | Repeat 32 times | |
LB176: .byte $2C ;A#3 | | |
LB177: .byte $38 ;E4 | | |
LB178: .byte $46 ;B4 | | |
LB179: .byte $26 ;G3 | | |
LB17A: .byte $02 ;No sound | | |
LB17B: .byte $3A ;F4 | | |
LB17C: .byte $20 ;E3 | | |
LB17D: .byte $02 ;No sound | | |
LB17E: .byte $28 ;Ab3 | | |
LB17F: .byte $2E ;B3 | | |
LB180: .byte $02 ;No sound | | |
LB181: .byte $18 ;C3 | | |
LB182: .byte $44 ;A#4 | | |
LB183: .byte $02 ;No sound | | |
LB184: .byte $46 ;B4 | | |
LB185: .byte $48 ;C5 | | |
LB186: .byte $4A ;C#5 | | |
LB187: .byte $4C ;D5 | | |
LB188: .byte $02 ;No sound | | |
LB189: .byte $18 ;C3 | | |
LB18A: .byte $1E ;D#3 + | |
LB18B: .byte $FF ; | |
| |
MthrBrnRoomSQ1Data: | |
LB18C: .byte $B8 ;1/4 seconds | |
LB18D: .byte $02 ;No sound | |
| |
;SQ1 music data runs down into the SQ2 music data. | |
MthrBrnRoomSQ2Data: | |
LB18E: .byte $C8 ; | |
LB18F: .byte $B0 ;3/32 seconds + | |
LB190: .byte $0A ;F2 | Repeat 8 times | |
LB191: .byte $0C ;F#2 + | |
LB192: .byte $FF ; | |
LB193: .byte $C8 ; | |
LB194: .byte $0E ;G2 + Repeat 8 times | |
LB195: .byte $0C ;F#2 + | |
LB196: .byte $FF ; | |
LB197: .byte $C8 ; | |
LB198: .byte $10 ;Ab2 + Repeat 8 times | |
LB199: .byte $0E ;G2 + | |
LB19A: .byte $FF ; | |
LB19B: .byte $C8 ; | |
LB19C: .byte $0E ;G2 + Repeat 8 times | |
LB19D: .byte $0C ;F#2 + | |
LB19E: .byte $FF ; | |
LB19F: .byte $00 ;End mother brain room music. | |
| |
;Unused tile patterns. | |
LB1A0: .byte $2B, $3B, $1B, $5A, $D0, $D1, $C3, $C3, $3B, $3B, $9B, $DA, $D0, $D0, $C0, $C0 | |
LB1B0: .byte $2C, $23, $20, $20, $30, $98, $CF, $C7, $00, $00, $00, $00, $00, $00, $00, $30 | |
LB1C0: .byte $1F, $80, $C0, $C0, $60, $70, $FC, $C0, $00, $00, $00, $00, $00, $00, $00, $00 | |
LB1D0: .byte $01, $00, $00, $00, $00, $00, $00, $00, $80, $80, $C0, $78, $4C, $C7, $80, $80 | |
LB1E0: .byte $C4, $A5, $45, $0B, $1B, $03, $03, $00, $3A, $13, $31, $63, $C3, $83, $03, $04 | |
LB1F0: .byte $E6, $E6, $C4, $8E, $1C, $3C, $18, $30, $E8, $E8, $C8, $90, $60, $00, $00, $00 | |
| |
;-----------------------------------------[ Sound engine ]------------------------------------------- | |
| |
;SFXdata. The top four entries are used by the noise music player for drum beats. | |
LB200: .byte $00 ;Base for drum beat music data. | |
| |
DrumBeat00SFXData: | |
LB201: .byte $10, $01, $18 ;Noise channel music data #$01. | |
DrumBeat01SFXData: | |
LB204: .byte $00, $01, $38 ;Noise channel music data #$04. | |
DrumBeat02SFXData: | |
LB207: .byte $01, $02, $40 ;Noise channel music data #$07. | |
DrumBeat03SFXData: | |
LB20A: .byte $00, $09, $58 ;Noise channel music data #$0A. | |
GamePausedSFXData: | |
LB20D: .byte $80, $7F, $80, $48 | |
ScrewAttSFXData: | |
LB211: .byte $35, $7F, $00, $B0 | |
MissileLaunchSFXData: | |
LB215: .byte $19, $7F, $0E, $A0 | |
BombExplodeSFXData: | |
LB219: .byte $0D, $7F, $0F, $08 | |
SamusWalkSFXData: | |
LB21D: .byte $16, $7F, $0B, $18 | |
SpitFlameSFXData: | |
LB221: .byte $13, $7F, $0E, $F8 | |
SamusHitSQ1SQ2SFXData: | |
LC225: .byte $C1, $89, $02, $0F | |
BossHitSQ2SFXData: | |
LB229: .byte $34, $BA, $E0, $05 | |
BossHitSQ1SFXData: | |
LB22D: .byte $34, $BB, $CE, $05 | |
IncorrectPasswordSQ1SFXData: | |
LB231: .byte $B6, $7F, $00, $C2 | |
IncorrectPasswordSQ2SFXData: | |
LB235: .byte $B6, $7F, $04, $C2 | |
TimeBombTickSFXData: | |
LB239: .byte $17, $7F, $66, $89 | |
EnergyPickupSFXData: | |
LB23D: .byte $89, $7F, $67, $18 | |
MissilePickupSFXData: | |
LB241: .byte $8B, $7F, $FD, $28 | |
MetalSFXData: | |
LB245: .byte $02, $7F, $A8, $F8 | |
LongRangeShotSFXData: | |
LB249: .byte $D7, $83, $58, $F8 | |
ShortRangeShotSFXData: | |
LB24D: .byte $D6, $82, $58, $F8 | |
JumpSFXData: | |
LB251: .byte $95, $8C, $40, $B9 | |
EnemyHitSFXData: | |
LB255: .byte $1D, $9A, $20, $8F | |
BugOutOFHoleSFXData: | |
LB259: .byte $16, $8D, $E0, $42 | |
WaveBeamSFXData: | |
LB25D: .byte $19, $7F, $6F, $40 | |
IceBeamSFXData: | |
LB261: .byte $18, $7F, $80, $40 | |
BombLaunch1SFXData: | |
LB265: .byte $07, $7F, $40, $28 | |
BombLaunch2SFXData: | |
LB269: .byte $07, $7F, $45, $28 | |
SamusToBallSFXData: | |
LB26D: .byte $7F, $7F, $DD, $3B | |
MetroidHitSFXData: | |
LB26E: .byte $7F, $7F, $FF, $98 | |
SamusDieSFXData: | |
LB275: .byte $7F, $7F, $40, $08 | |
SamusBeepSFXData: | |
LB279: .byte $09, $7F, $30, $48 | |
BigEnemyHitSFXData: | |
LB27D: .byte $03, $7F, $42, $18 | |
StatueRaiseSFXData: | |
LB281: .byte $03, $7F, $11, $09 | |
DoorSFXData: | |
LB285: .byte $7F, $7F, $30, $B2 | |
| |
;The following table is used by the CheckSFXFlag routine. The first two bytes of each row | |
;are the address of the pointer table used for handling SFX and music routines for set flags. | |
;The second pair of bytes is the address of the routine to next jump to if no SFX or music | |
;flags were found. The final byte represents what type of channel is currently being | |
;processed: 0=Noise, 1=SQ1, 3=Triangle, 4=Multiple channels. | |
| |
ChooseNextSFXRoutineTbl: | |
| |
LB289: .word $B2BB, $B322 ;Noise init SFX (1st). | |
LB28D: .byte $00 | |
| |
LB28E: .word $B2CB, $B4EE ;Noise continue SFX (2nd). | |
LB292: .byte $00 | |
| |
LB293: .word $B2DB, $B330 ;SQ1 init SFX (5th). | |
LB297: .byte $01 | |
| |
LB298: .word $B2EB, $B4EE ;SQ2 continue SFX (6th). | |
LB29C: .byte $01 | |
| |
LB29D: .word $B2FB, $B344 ;Triangle init SFX (7th). | |
LB2A1: .byte $03 | |
| |
LB2A2: .word $B30B, $B4EE ;Triangle continue SFX (8th). | |
LB2A6: .byte $03 | |
| |
LB2A7: .word $BC06, $B35C ;Multi init SFX (3rd). | |
LB2AB: .byte $04 | |
| |
LB2AC: .word $BC16, $B364 ;Multi continue SFX (4th). | |
LB2B0: .byte $04 | |
| |
LB2B1: .word $BC26, $BC4B ;temp flag Music (10th). | |
LB2B5: .byte $00 | |
| |
LB2B6: .word $BC26, $BC3D ;Music (9th). | |
LB2BA: .byte $00 | |
| |
;The tables below contain addresses for SFX handling routines. | |
| |
;Noise Init SFX handling routine addresses: | |
LB2BB: .word $B4EE ;No sound. | |
LB2BD: .word $B52B ;Screw attack init SFX. | |
LB2BF: .word $B56E ;Missile launch init SFX. | |
LB2C1: .word $B583 ;Bomb explode init SFX. | |
LB2C3: .word $B598 ;Samus walk init SFX. | |
LB2C5: .word $B50F ;Spit flame init SFX. | |
LB2C7: .word $B4EE ;No sound. | |
LB2C9: .word $B4EE ;No sound. | |
| |
;Noise Continue SFX handling routine addresses: | |
| |
LB2CB: .word $B4EE ;No sound. | |
LB2CD: .word $B539 ;Screw attack continue SFX. | |
LB2CF: .word $B57B ;Missile launch continue SFX. | |
LB2D1: .word $B58A ;Bomb explode continue SFX. | |
LB2D3: .word $B58A ;Samus walk continue SFX. | |
LB2D5: .word $B516 ;Spit flame continue SFX. | |
LB2D7: .word $B4EE ;No sound. | |
LB2D9: .word $B4EE ;No sound. | |
| |
;SQ1 Init SFX handling routine addresses: | |
| |
LB2DB: .word $B6CD ;Missile pickup init SFX. | |
LB2DD: .word $B6E7 ;Energy pickup init SFX. | |
LB2DF: .word $B735 ;Metal init SFX. | |
LB2E1: .word $B716 ;Bullet fire init SFX. | |
LB2E3: .word $B73C ;Bird out of hole init SFX. | |
LB2E5: .word $B710 ;Enemy hit init SFX. | |
LB2E7: .word $B703 ;Samus jump init SFX. | |
LB2E9: .word $B77A ;Wave beam init SFX. | |
| |
;SQ1 Continue SFX handling routine addresses: | |
| |
LB2EB: .word $B6B0 ;Missile pickup continue SFX. | |
LB2ED: .word $B6D3 ;Energy pickup continue SFX. | |
LB2EF: .word $B6ED ;Metal continue SFX. | |
LB2F1: .word $B74F ;Bullet fire continue SFX. | |
LB2F3: .word $B6ED ;Bird out of hole continue SFX. | |
LB2F5: .word $B6ED ;Enemy hit continue SFX. | |
LB2F7: .word $B6ED ;Samus jump continue SFX. | |
LB2F9: .word $B781 ;Wave beam continue SFX. | |
| |
;Triangle init handling routine addresses: | |
| |
LB2FB: .word $B8D2 ;Samus die init SFX. | |
LB2FD: .word $B7AC ;Door open close init SFX. | |
LB2FF: .word $B8A7 ;Metroid hit init SFX. | |
LB301: .word $B921 ;Statue raise init SFX. | |
LB303: .word $B7D9 ;Beep init SFX. | |
LB305: .word $B7EF ;Big enemy hit init SFX. | |
LB307: .word $B834 ;Samus to ball init SFX. | |
LB309: .word $B878 ;Bomb launch init SFX. | |
| |
;Triangle continue handling routine addresses: | |
| |
LB30B: .word $B8ED ;Samus die continue SFX. | |
LB30E: .word $B7CB ;Door open close continue SFX. | |
LB30F: .word $B8B1 ;Metroid hit continue SFX. | |
LB311: .word $B940 ;Statue raise continue SFX. | |
LB313: .word $B7E7 ;Beep continue SFX. | |
LB315: .word $B80E ;Big enemy hit continue SFX. | |
LB317: .word $B84F ;Samus to ball continue SFX. | |
LB319: .word $B87F ;Bomb launch continue SFX. | |
| |
LoadNoiseSFXInitFlags: | |
LB31B: LDA NoiseSFXFlag ;Load A with Noise init SFX flags, (1st SFX cycle). | |
LB31E: LDX #$89 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB320: BNE GotoSFXCheckFlags ;Branch always. | |
| |
LoadNoiseSFXContFlags: | |
LB322: LDA NoiseContSFX ;Load A with Noise continue flags, (2nd SFX cycle). | |
LB325: LDX #$8E ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB327: BNE GotoSFXCheckFlags ;Branch always. | |
| |
LoadSQ1SFXInitFlags: | |
LB329: LDA SQ1SFXFlag ;Load A with SQ1 init flags, (5th SFX cycle). | |
LB32C: LDX #$93 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB32E: BNE GotoSFXCheckFlags ;Branch always. | |
| |
LoadSQ1SFXContFlags: | |
LB330: LDA SQ1ContSFX ;Load A with SQ1 continue flags, (6th SFX cycle). | |
LB333: LDX #$98 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB335: BNE GotoSFXCheckFlags ;Branch always. | |
| |
GotoSFXCheckFlags: | |
LB337: JSR CheckSFXFlag ;($B4BD)Checks to see if SFX flags set. | |
LB33A: JMP ($00E2) ;if no flag found, Jump to next SFX cycle,--> | |
;else jump to specific SFX handling routine. | |
LoadSTriangleSFXInitFlags: | |
LB33D: LDA TriangleSFXFlag ;Load A with Triangle init flags, (7th SFX cycle). | |
LB340: LDX #$9D ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB342: BNE GotoSFXCheckFlags ;Brach always. | |
| |
LoadTriangleSFXContFlags: | |
LB344: LDA TriangleContSFX ;Load A with Triangle continue flags, (8th SFX cycle). | |
LB347: LDX #$A2 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB349: BNE GotoSFXCheckFlags ;Branch always. | |
| |
LoadMultiSFXInitFlags: | |
LB34B: LDA MultiSFXFlag ;Load A with Multi init flags, (3rd SFX cycle). | |
LB34E: LDX #$A7 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB350: JSR CheckSFXFlag ;($B4BD)Checks to see if SFX or music flags set. | |
LB353: JSR FindMusicInitIndex ;($BC53)Find bit containing music init flag. | |
LB356: JSR Add8 ;($BC64)Add 8 to MusicInitIndex. | |
LB359: JMP ($00E2) ;If no flag found, Jump to next SFX cycle,--> | |
;else jump to specific SFX handling subroutine. | |
LoadMultiSFXContFlags: | |
LB35C: LDA MultiContSFX ;Load A with $68C flags (4th SFX cycle). | |
LB35F: LDX #$AC ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LB361: JMP GotoSFXCheckFlags ;($B337)Checks to see if SFX or music flags set. | |
| |
LoadSQ1Flags: | |
LB364: JSR LoadSQ1SFXInitFlags ;($B329)Check for SQ1 init flags. | |
LB367: RTS ; | |
| |
LoadSQ1ChannelSFX: ;Used to determine which sound registers to change--> | |
LB368: LDA #$00 ;($4000 - $4003) - SQ1. | |
LB36A: BEQ + ;Branch always. | |
| |
LoadTriangleChannelSFX: ;Used to determine which sound registers to change--> | |
LB36C: LDA #$08 ;($4008 - $400B) - Triangle. | |
LB36E: BNE + ;Branch always. | |
| |
LoadNoiseChannelSFX: ;Used to determine which sound registers to change--> | |
LB370: LDA #$0C ;($400C - $400F) - Noise. | |
LB372: BNE + ;Branch always. | |
| |
LoadSQ2ChannelSFX: ;Used to determine which sound registers to change--> | |
LB374: LDA #$04 ;($4004 - $4007) - SQ2. | |
| |
LoadSFXData: | |
LB376:* STA $E0 ;Lower address byte of desired APU control register. | |
LB378: LDA #$40 ; | |
LB37A: STA $E1 ;Upper address byte of desired APU control register. | |
LB37C: STY $E2 ;Lower address byte of data to load into sound channel. | |
LB37E: LDA #$B2 ; | |
LB380: STA $E3 ;Upper address byte of data to load into sound channel. | |
LB382: LDY #$00 ;Starting index for loading four byte sound data. | |
| |
LoadSFXRegisters: | |
LB384:* LDA ($E2),Y ;Load A with SFX data byte. | |
LB386: STA ($E0),Y ;Store A in SFX register. | |
LB388: INY ; | |
LB389: TYA ;The four registers associated with each sound--> | |
LB38A: CMP #$04 ;channel are loaded one after the other (the loop--> | |
LB38C: BNE - ;repeats four times). | |
LB38E: RTS ; | |
| |
PauseSFX: | |
LB38F:* INC SFXPaused ;SFXPaused=#$01 | |
LB392: JSR ClearSounds ;($B43E)Clear sound registers of data. | |
LB395: STA PauseSFXStatus ;PauseSFXStatus=#$00 | |
LB398: RTS ; | |
| |
LB399:* LDA SFXPaused ;Has SFXPaused been set? if not, branch | |
LB39C: BEQ -- ; | |
LB39E: LDA PauseSFXStatus ;For the first #$12 frames after the game has been--> | |
LB3A1: CMP #$12 ;paused, play GamePaused SFX. If paused for #$12--> | |
LB3A3: BEQ ++ ;frames or more, branch to exit. | |
LB3A5: AND #$03 ; | |
LB3A7: CMP #$03 ;Every fourth frame, repeat GamePaused SFX | |
LB3A9: BNE + ; | |
LB3AB: LDY #$0D ;Lower address byte of GamePaused SFX data(Base=$B200) | |
LB3AD: JSR LoadSQ1ChannelSFX ;($B368) Load GamePaused SFX data. | |
LB3B0:* INC PauseSFXStatus ; | |
LB3B3:* RTS ; | |
| |
;----------------------------------[ Sound Engine Entry Point ]----------------------------------- | |
;NOTES: | |
;SFX take priority over music. | |
; | |
;There are 10 SFX cycles run every time the sound engine subroutine is called. The cycles | |
;search for set sound flags in the following registers in order: | |
;$680, $688, $684, $68C, $681, $689, $683, $68B, $65D, $685 | |
; | |
;The sound channels are assigned SFX numbers. Those SFX numbers are: | |
;Noise=0, sq1=1, sq2=2, triangle=3, Multi=4 | |
;The sound channels are assigned music numbers. Those music numbers are: | |
;SQ1=0, SQ2=1, Triangle=2, Noise=3 | |
| |
SoundEngine: | |
LB3B4: LDA #$C0 ;Set APU to 5 frame cycle, disable frame interrupt. | |
LB3B6: STA APUCommonCntrl1 ; | |
LB3B9: LDA NoiseSFXFlag ;is bit zero is set in NoiseSFXFlag(Silence--> | |
LB3BC: LSR ;music)? If yes, branch. | |
LB3BD: BCS ++ ; | |
LB3BF: LDA MainRoutine ; | |
LB3C1: CMP #$05 ;Is game paused? If yes, branch. | |
LB3C3: BEQ --- ; | |
LB3C5: LDA #$00 ;Clear SFXPaused when game is running. | |
LB3C7: STA SFXPaused ; | |
LB3CA: JSR LoadNoiseSFXInitFlags ;($B31B)Check noise SFX flags. | |
LB3CD: JSR LoadMultiSFXInitFlags ;($B34B)Check multichannel SFX flags. | |
LB3D0: JSR LoadSTriangleSFXInitFlags ;($B33D)Check triangle SFX flags. | |
LB3D3: JSR LoadMusicTempFlags ;($BC36)Check music flags. | |
| |
ClearSFXFlags: | |
LB3D6:* LDA #$00 ; | |
LB3D8: STA NoiseSFXFlag ; | |
LB3DB: STA SQ1SFXFlag ; | |
LB3DE: STA SQ2SFXFlag ;Clear all SFX flags. | |
LB3E1: STA TriangleSFXFlag ; | |
LB3E4: STA MultiSFXFlag ; | |
LB3E7: STA MusicInitFlag ; | |
LB3EA: RTS ; | |
| |
LB3EB:* JSR InitializeSoundAddresses ;($B404)Prepare to start playing music. | |
LB3EE: BEQ -- ;Branch always. | |
| |
CheckRepeatMusic: | |
LB3F0: LDA MusicRepeat ; | |
LB3F3: BEQ + ;If music is supposed to repeat, reset music,--> | |
LB3F5: LDA CurrentMusic ;flags else branch to exit. | |
LB3F8: STA CurrentMusicRepeat ; | |
LB3FB: RTS ; | |
| |
CheckMusicFlags: | |
LB3FC: LDA CurrentMusic ;Loads A with current music flags and compares it--> | |
LB3FF: CMP CurrentSFXFlags ;with current SFX flags. If both are equal,--> | |
LB402: BEQ ++ ;just clear music counters, else clear everything. | |
| |
InitializeSoundAddresses: ; | |
LB404:* JSR ClearMusicAndSFXAddresses ;($B41D)Jumps to all subroutines needed to reset--> | |
LB407: JSR ClearSounds ;($B43E)all sound addresses in order to start--> | |
LB40A:* JSR ClearSpecialAddresses ;($B40E)playing music. | |
LB40D: RTS ; | |
| |
ClearSpecialAddresses: | |
LB40E: LDA #$00 ; | |
LB410: STA TriangleCounterCntrl ;Clears addresses used for repeating music,--> | |
LB413: STA SFXPaused ;pausing music and controlling triangle length. | |
LB416: STA CurrentMusicRepeat ; | |
LB419: STA MusicRepeat ; | |
LB41C: RTS ; | |
| |
ClearMusicAndSFXAddresses: ; | |
LB41D: LDA #$00 ; | |
LB41F: STA SQ1InUse ; | |
LB422: STA SQ2InUse ; | |
LB425: STA TriangleInUse ; | |
LB428: STA WriteMultiChannelData ; | |
LB42B: STA NoiseContSFX ;Clears any SFX or music--> | |
LB42E: STA SQ1ContSFX ;currently being played. | |
LB431: STA SQ2ContSFX ; | |
LB434: STA TriangleContSFX ; | |
LB437: STA MultiContSFX ; | |
LB43A: STA CurrentMusic ; | |
LB43D: RTS ; | |
| |
ClearSounds: ; | |
LB43E: LDA #$10 ; | |
LB440: STA SQ1Cntrl0 ; | |
LB443: STA SQ2Cntrl0 ; | |
LB446: STA NoiseCntrl0 ;Clears all sounds that might be in--> | |
LB449: LDA #$00 ;The sound channel registers. | |
LB44B: STA TriangleCntrl0 ; | |
LB44E: STA DMCCntrl1 ; | |
LB451: RTS ; | |
| |
SelectSFXRoutine: | |
LB452: LDX ChannelType ; | |
LB455: STA NoiseSFXLength,X ;Stores frame length of SFX in corresponding address. | |
LB458: TXA ; | |
LB459: BEQ ++ ;Branch if SFX uses noise channel. | |
LB45B: CMP #$01 ; | |
LB45D: BEQ + ;Branch if SFX uses SQ1 channel. | |
LB45F: CMP #$02 ; | |
LB461: BEQ MusicBranch00 ;Branch if SFX uses SQ2 channel. | |
LB463: CMP #$03 ; | |
LB465: BEQ MusicBranch01 ;Branch if SFX uses triangle wave. | |
LB467: RTS ;Exit if SFX routine uses no channels. | |
| |
LB468:* JSR LoadSQ1ChannelSFX ;($B368)Prepare to load SQ1 channel with data. | |
LB46B: BEQ ++ ;Branch always. | |
MusicBranch00: ; | |
LB46D: JSR LoadSQ2ChannelSFX ;($B374)Prepare to load SQ2 channel with data. | |
LB470: BEQ ++ ;Branch always. | |
MusicBranch01: ; | |
LB472: JSR LoadTriangleChannelSFX ;($B36C)Prepare to load triangle channel with data. | |
LB475: BEQ ++ ;Branch always. | |
LB477:* JSR LoadNoiseChannelSFX ;($B370)Prepare to load noise channel with data. | |
LB47A:* JSR UpdateContFlags ;($B493)Set continuation flags for this SFX. | |
LB47D: TXA ; | |
LB47E: STA NoiseInUse,X ;Indicate sound channel is in use. | |
LB481: LDA #$00 ; | |
LB483: STA ThisNoiseFrame,X ; | |
LB486: STA NoiseSFXData,X ;Clears all the following addresses before going--> | |
LB489: STA MultiSFXData,X ;to the proper SFX handling routine. | |
LB48C: STA ScrewAttackSFXData,X ; | |
LB48F: STA WriteMultiChannelData ; | |
LB492: RTS ; | |
| |
UpdateContFlags: | |
LB493:* LDX ChannelType ;Loads X register with sound channel just changed. | |
LB496: LDA NoiseContSFX,X ;Clear existing continuation SFX--> | |
LB499: AND #$00 ;flags for that channel. | |
LB49B: ORA CurrentSFXFlags ;Load new continuation flags. | |
LB49E: STA NoiseContSFX,X ;Save results. | |
LB4A1: RTS ; | |
| |
ClearCurrentSFXFlags: | |
LB4A2: LDA #$00 ;Once SFX has completed, this block clears the--> | |
LB4A4: STA CurrentSFXFlags ;SFX flag from the current flag register. | |
LB4A7: BEQ - ; | |
| |
IncrementSFXFrame: | |
LB4A9: LDX ChannelType ;Load SFX channel number. | |
LB4AC: INC ThisNoiseFrame,X ;increment current frame to play on given channel. | |
LB4AF: LDA ThisNoiseFrame,X ;Load current frame to play on given channel. | |
LB4B2: CMP NoiseSFXLength,X ;Check to see if current frame is last frame to play. | |
LB4B5: BNE + ; | |
LB4B7: LDA #$00 ;If current frame is last frame,--> | |
LB4B9: STA ThisNoiseFrame,X ;reset current frame to 0. | |
LB4BC:* RTS ; | |
| |
;The CheckSFXFlag routine loads E0 thru E3 with the below values: | |
;1st SFX cycle $E0=#$BB, $E1=#$B2, $E2=#$22, $E3=#$B3. Base address=$B289 | |
;2nd SFX cycle $E0=#$CB, $E1=#$B2, $E2=#$EE, $E3=#$B4. Base address=$B28E | |
;3rd SFX cycle $E0=#$06, $E1=#$BC, $E2=#$5C, $E3=#$B3. Base address=$B2A7 | |
;4th SFX cycle $E0=#$16, $E1=#$BC, $E2=#$64, $E3=#$B3. Base address=$B2AC | |
;5th SFX cycle $E0=#$DB, $E1=#$B2, $E2=#$30, $E3=#$B3. Base address=$B293 | |
;6th SFX cycle $E0=#$EB, $E1=#$B2, $E2=#$EE, $E3=#$B4. Base address=$B298 | |
;7th SFX cycle $E0=#$FB, $E1=#$B2, $E2=#$44, $E3=#$B3. Base address=$B29D | |
;8th SFX cycle $E0=#$0B, $E1=#$B3, $E2=#$EE, $E3=#$B4. Base address=$B2A2 | |
;9th SFX cycle $E0=#$26, $E1=#$BC, $E2=#$3D, $E3=#$BC. Base address=$B2B6 | |
;10th SFX cycle $E0=#$26, $E1=#$BC, $E2=#$4B, $E3=#$BC. Base address=$B2B1 | |
| |
CheckSFXFlag: | |
LB4BD: STA CurrentSFXFlags ;Store any set flags in $064D. | |
LB4C0: STX $E4 ; | |
LB4C2: LDY #$B2 ; | |
LB4C4: STY $E5 ; | |
LB4C6: LDY #$00 ;Y=0 for counting loop ahead. | |
LB4C8:* LDA ($E4),Y ; | |
LB4CA: STA $00E0,Y ;See table above for values loaded into $E0--> | |
LB4CD: INY ;thru $E3 during this loop. | |
LB4CE: TYA ; | |
LB4CF: CMP #$04 ;Loop repeats four times to load the values. | |
LB4D1: BNE - ; | |
LB4D3: LDA ($E4),Y ; | |
LB4D5: STA ChannelType ;#$00=SQ1,#$01=SQ2,#$02=Triangle,#$03=Noise | |
LB4D8: LDY #$00 ;Set y to 0 for counting loop ahead. | |
LB4DA: LDA CurrentSFXFlags ; | |
LB4DD: PHA ;Push current SFX flags on stack. | |
LB4DE:* ASL CurrentSFXFlags ; | |
LB4E1: BCS + ;This portion of the routine loops a maximum of--> | |
LB4E3: INY ;eight times looking for any SFX flags that have--> | |
LB4E4: INY ;been set in the current SFX cycle. If a flag--> | |
LB4E5: TYA ;is found, Branch to SFXFlagFound for further--> | |
LB4E6: CMP #$10 ;processing, if no flags are set, continue to--> | |
LB4E8: BNE - ;next SFX cycle. | |
| |
RestoreSFXFlags: | |
LB4EA: PLA ; | |
LB4EB: STA CurrentSFXFlags ;Restore original data in CurrentSFXFlags. | |
LB4EE: RTS ; | |
| |
SFXFlagFound: ; | |
LB4EF:* LDA ($E0),Y ;This routine stores the starting address of the--> | |
LB4F1: STA $E2 ;specific SFX handling routine for the SFX flag--> | |
LB4F3: INY ;found. The address is stored in registers--> | |
LB4F4: LDA ($E0),Y ;$E2 and $E3. | |
LB4F6: STA $E3 ; | |
LB4F8: JMP RestoreSFXFlags ;($B4EA)Restore original data in CurrentSFXFlags. | |
| |
;-----------------------------------[ SFX Handling Routines ]--------------------------------------- | |
| |
;The following table is used by the SpitFlamesSFXContinue routine to change the volume--> | |
;on the SFX. It starts out quiet, then becomes louder then goes quiet again. | |
SpitFlamesTbl: | |
LB4FB: .byte $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $1B, $1A, $19, $17 | |
LB50B: .byte $16, $15, $14, $12 | |
| |
SpitFlameSFXStart: | |
LB50F: LDA #$14 ;Number of frames to play sound before a change. | |
LB511: LDY #$21 ;Lower byte of sound data start address(base=$B200). | |
LB513: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
SpitFlameSFXContinue: | |
LB516: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB519: BNE + ;If more frames to process, branch. | |
LB51B: JMP EndNoiseSFX ;($B58F)End SFX. | |
LB51E:* LDY NoiseSFXData ; | |
LB521: LDA $B4FB,Y ;Load data from table above and store in NoiseCntrl0. | |
LB524: STA NoiseCntrl0 ; | |
LB527: INC NoiseSFXData ;Increment to next entry in data table. | |
LB52A: RTS | |
| |
ScrewAttackSFXStart: | |
LB52B: LDA #$05 ;Number of frames to play sound before a change. | |
LB52D: LDY #$11 ;Lower byte of sound data start address(base=$B200). | |
LB52F: JSR SelectSFXRoutine ;($B452)Setup registers for SFX. | |
LB532: LDA $B213 ;#$00. | |
LB535: STA NoiseSFXData ;Clear NoiseSFXData. | |
LB538:* RTS ; | |
| |
ScrewAttackSFXContinue: | |
LB539: LDA ScrewAttackSFXData ;Prevents period index from being incremented until--> | |
LB53C: CMP #$02 ;after the tenth frame of the SFX. | |
LB53E: BEQ + ;Branch if not ready to increment. | |
LB540: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB543: BNE - ; | |
LB545: INC ScrewAttackSFXData ;Increment every fifth frame. | |
LB548: RTS ; | |
| |
LB549:* JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB54C: BNE IncrementPeriodIndex ;Start increasing period index after first ten frames. | |
LB54E: DEC NoiseSFXData ; | |
LB551: DEC NoiseSFXData ;Decrement NoiseSFXData by three every fifth frame. | |
LB554: DEC NoiseSFXData ; | |
LB557: INC MultiSFXData ;Increment MultiSFXData. When it is equal to #$0F--> | |
LB55A: LDA MultiSFXData ;end screw attack SFX. MultiSFXData does not--> | |
LB55D: CMP #$0F ;appear to be linked to multi SFX channels in--> | |
LB55F: BNE -- ;this routine. | |
LB561: JMP EndNoiseSFX ;($B58F)End SFX. | |
| |
IncrementPeriodIndex: | |
LB564: INC NoiseSFXData ;Incrementing the period index has the effect of--> | |
LB567: LDA NoiseSFXData ;lowering the frequency of the noise SFX. | |
LB56A: STA NoiseCntrl2 ; | |
LB56D: RTS ; | |
| |
MissileLaunchSFXStart: | |
LB56E: LDA #$18 ;Number of frames to play sound before a change. | |
LB570: LDY #$15 ;Lower byte of sound data start address(base=$B200). | |
LB572: JSR GotoSelectSFXRoutine ;($B587)Prepare to setup registers for SFX. | |
LB575: LDA #$0A ; | |
LB577: STA NoiseSFXData ;Start increment index for noise channel at #$0A. | |
LB57A: RTS ; | |
| |
MissileLaunchSFXContine: | |
LB57B: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB57E: BNE IncrementPeriodIndex ; | |
LB580: JMP EndNoiseSFX ;($B58F)End SFX. | |
| |
BombExplodeSFXStart: | |
LB583: LDA #$30 ;Number of frames to play sound before a change. | |
LB585: LDY #$19 ;Lower byte of sound data start address(base=$B200). | |
| |
GotoSelectSFXRoutine: | |
LB587:* JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
;The following routine is used to continue BombExplode and SamusWalk SFX. | |
| |
NoiseSFXContinue: | |
LB58A: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB58D: BNE MusicBranch02 ;If more frames to process, branch to exit. | |
| |
EndNoiseSFX: | |
LB58F: JSR ClearCurrentSFXFlags ;($B4A2)Clear all SFX flags. | |
LB592: LDA #$10 ; | |
LB594: STA NoiseCntrl0 ;disable envelope generator(sound off). | |
| |
MusicBranch02: | |
LB597: RTS ;Exit for multiple routines. | |
| |
SamusWalkSFXStart: | |
LB598: LDA NoiseContSFX ;If MissileLaunch, SamusWalk or SpitFire SFX are--> | |
LB59B: AND #$34 ;already being played, branch to exit. | |
LB59D: BNE MusicBranch02 ; | |
LB59F: LDA #$03 ;Number of frames to play sound before a change. | |
LB5A1: LDY #$1D ;Lower byte of sound data start address(base=$B200). | |
LB5A3: BNE - ;Branch always. | |
| |
MultiSFXInit: | |
LB5A5: STA MultiSFXLength ; | |
LB5A8: JSR LoadSQ2ChannelSFX ;($B374)Set SQ2 SFX data. | |
LB5AB: JSR UpdateContFlags ;($B493)Set continue SFX flag. | |
LB5AE: LDA #$01 ; | |
LB5B0: STA SQ1InUse ;Disable music from using SQ1 and SQ2 while--> | |
LB5B3: LDA #$02 ;SFX are playing. | |
LB5B5: STA SQ2InUse ; | |
LB5B8: LDA #$00 ; | |
LB5BA: STA SQ1ContSFX ; | |
LB5BD: STA SQ1SFXData ; | |
LB5C0: STA SQ1SQ2SFXData ;Clear all listed memory addresses. | |
LB5C3: STA SQ1SFXPeriodLow ; | |
LB5C6: STA ThisMultiFrame ; | |
LB5C9: STA WriteMultiChannelData ; | |
LB5CC: RTS ; | |
| |
EndMultiSFX: | |
LB5CD: LDA #$10 ; | |
LB5CF: STA SQ1Cntrl0 ;Disable SQ1 envelope generator(sound off). | |
LB5D2: STA SQ2Cntrl0 ;Disable SQ2 envelope generator(sound off). | |
LB5D5: LDA #$7F ; | |
LB5D7: STA SQ1Cntrl1 ;Disable SQ1 sweep. | |
LB5DA: STA SQ2Cntrl1 ;Disable SQ2 sweep. | |
LB5DD: JSR ClearCurrentSFXFlags ;($B4A2)Clear all SFX flags. | |
LB5E0: LDA #$00 ; | |
LB5E2: STA SQ1InUse ; | |
LB5E5: STA SQ2InUse ;Allows music player to use SQ1 and SQ2 channels. | |
LB5E8: INC WriteMultiChannelData ; | |
LB5EB: RTS ; | |
| |
BossHitSFXStart: | |
LB5EC: LDY #$2D ;Low byte of SQ1 sound data start address(base=$B200). | |
LB5EE: JSR LoadSQ1ChannelSFX ;($B368)Set SQ1 SFX data. | |
LB5F1: LDY #$29 ;Low byte of SQ2 sound data start address(base=$B200). | |
LB5F3: JMP MultiSFXInit ;($B5A5)Initiate multi channel SFX. | |
| |
BossHitSFXContinue: | |
LB5F6: INC SQ1SFXData ;Increment index to data in table below. | |
LB5F9: LDY SQ1SFXData ; | |
LB5FC: LDA $B63C,Y ; | |
LB5FF: STA SQ1Cntrl0 ;Load SQ1Cntrl0 and SQ2Cntrl0 from table below. | |
LB602: STA SQ2Cntrl0 ; | |
LB605: LDA SQ1SFXData ; | |
LB608: CMP #$14 ;After #$14 frames, end SFX. | |
LB60A: BEQ ++ ; | |
LB60C: CMP #$06 ;After six or more frames of SFX, branch. | |
LB60E: BCC + ; | |
LB610: LDA RandomNumber1 ; | |
LB612: ORA #$10 ;Set bit 5. | |
LB614: AND #$7F ;Randomly set bits 7, 3, 2, 1 and 0. | |
LB616: STA SQ1SFXPeriodLow ;Store in SQ1 period low. | |
LB619: ROL ; | |
LB61A: STA SQ1SQ2SFXData ; | |
LB61D: JMP WriteSQ1SQ2PeriodLow ;($B62C)Write period low data to SQ1 and SQ2. | |
LB620:* INC SQ1SQ2SFXData ; | |
LB623: INC SQ1SQ2SFXData ;Increment SQ1 and SQ2 period low by two. | |
LB626: INC SQ1SFXPeriodLow ; | |
LB629: INC SQ1SFXPeriodLow ; | |
| |
WriteSQ1SQ2PeriodLow: | |
LB62C: LDA SQ1SQ2SFXData ; | |
LB62F: STA SQ2Cntrl2 ;Write new SQ1 and SQ2 period lows to SQ1 and SQ2--> | |
LB632: LDA SQ1SFXPeriodLow ;channels. | |
LB635: STA SQ1Cntrl2 ; | |
LB638: RTS ; | |
| |
LB639:* JMP EndMultiSFX ;($B5CD)End SFX. | |
| |
BossHitSFXDataTbl: | |
LB63C: .byte $38, $3D, $3F, $3F, $3F, $3F, $3F, $3D, $3B, $39, $3B, $3D, $3F, $3D, $3B, $39 | |
LB64C: .byte $3B, $3D, $3F, $39 | |
| |
SamusHitSFXContinue: | |
LB650: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB653: BNE + ;If more SFX frames to process, branch. | |
LB655: JMP EndMultiSFX ;($B5CD)End SFX. | |
LB658:* LDY #$25 ;Low byte of SQ1 sound data start address(base=$B200). | |
LB65A: JSR LoadSQ1ChannelSFX ;($B368)Set SQ1 SFX data. | |
LB65D: LDA RandomNumber1 ; | |
LB65F: AND #$0F ;Randomly set last four bits of SQ1 period low. | |
LB661: STA SQ1Cntrl2 ; | |
LB664: LDY #$25 ;Low byte of SQ2 sound data start address(base=$B200). | |
LB666: JSR LoadSQ2ChannelSFX ;($B374)Set SQ2 SFX data. | |
LB669: LDA RandomNumber1 ; | |
LB66B: LSR ;Multiply random number by 4. | |
LB66C: LSR ; | |
LB66D: AND #$0F ; | |
LB66F: STA SQ2Cntrl2 ;Randomly set bits 2 and 3 of SQ2 period low. | |
LB672: RTS ; | |
| |
SamusHitSFXStart: | |
LB673: LDY #$25 ;Low byte of SQ1 sound data start address(base=$B200). | |
LB675: JSR LoadSQ1ChannelSFX ;($B368)Set SQ1 SFX data. | |
LB678: LDA RandomNumber1 ; | |
LB67A: AND #$0F ;Randomly set last four bits of SQ1 period low. | |
LB67C: STA SQ1Cntrl2 ; | |
LB67F: CLC ; | |
LB680: LDA RandomNumber1 ;Randomly set last three bits of SQ2 period low+1. | |
LB682: AND #$03 ; | |
LB684: ADC #$01 ;Number of frames to play sound before a change. | |
LB686: LDY #$25 ;Low byte of SQ2 sound data start address(base=$B200). | |
LB688: JSR MultiSFXInit ;($B5A5)Initiate multi channel SFX. | |
LB68B: LDA RandomNumber1 ; | |
LB68D: LSR ;Multiply random number by 4. | |
LB68E: LSR ; | |
LB68F: AND #$0F ; | |
LB691: STA SQ2Cntrl2 ;Randomly set bits 2 and 3 of SQ2 period low. | |
LB694:* RTS ; | |
| |
IncorrectPasswordSFXStart: | |
LB695: LDY #$31 ;Low byte of SQ1 sound data start address(base=$B200). | |
LB697: JSR LoadSQ1ChannelSFX ;($B368)Set SQ1 SFX data. | |
LB69A: LDA #$20 ;Number of frames to play sound before a change. | |
LB69C: LDY #$35 ;Low byte of SQ2 sound data start address(base=$B200). | |
LB69E: JMP MultiSFXInit ;($B5A5)Initiate multi channel SFX. | |
| |
IncorrectPasswordSFXContinue: | |
LB6A1: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB6A4: BNE - ;If more frames to process, branch to exit. | |
LB6A6: JMP EndMultiSFX ;($B5CD)End SFX. | |
| |
;The following table is used by the below routine to load SQ1Cntrl2 data in the--> | |
;MissilePickupSFXContinue routine. | |
| |
MissilePickupSFXTbl: | |
LB6A9: .byte $BD, $8D, $7E, $5E, $46, $3E, $00 | |
| |
MissilePickupSFXContinue: | |
LB6B0: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB6B3: BNE MusicBranch03 ;If more frames to process, branch to exit. | |
LB6B5: LDY SQ1SFXData ; | |
LB6B8: LDA MissilePickupSFXTbl,Y ;Load SFX data from table above. | |
LB6BB: BNE + ; | |
LB6BD: JMP EndSQ1SFX ;($B6F2)SFX completed. | |
LB6C0:* STA SQ1Cntrl2 ; | |
LB6C3: LDA $B244 ;#$28. | |
LB6C6: STA SQ1Cntrl3 ;load SQ1Cntrl3 with #$28. | |
LB6C9: INC SQ1SFXData ;Increment index to data table above every 5 frames. | |
| |
MusicBranch03: | |
LB6CC: RTS ;Exit from multiple routines. | |
| |
MissilePickupSFXStart: | |
LB6CD: LDA #$05 ;Number of frames to play sound before a change. | |
LB6CF: LDY #$41 ;Lower byte of sound data start address(base=$B200). | |
LB6D1: BNE +++ ;Branch always. | |
| |
EnergyPickupSFXContinue: | |
LB6D3: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB6D6: BNE MusicBranch03 ;If more frames to process, branch to exit. | |
LB6D8: INC SQ1SFXData ; | |
LB6DB: LDA SQ1SFXData ;Every six frames, reload SFX info. Does it--> | |
LB6DE: CMP #$03 ;three times for a total of 18 frames. | |
LB6E0: BEQ + ; | |
LB6E2: LDY #$3D ; | |
LB6E4: JMP LoadSQ1ChannelSFX ;($B368)Set SQ1 SFX data. | |
| |
EnergyPickupSFXStart: | |
LB6E7: LDA #$06 ;Number of frames to play sound before a change. | |
LB6E9: LDY #$3D ;Lower byte of sound data start address(base=$B200). | |
LB6EB: BNE +++ ;Branch always. | |
| |
;The following continue routine is used by the metal, bird out of hole, | |
;enemy hit and the Samus jump SFXs. | |
| |
SQ1SFXContinue: | |
LB6ED: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB6F0: BNE MusicBranch03 ; | |
| |
EndSQ1SFX: | |
LB6F2:* LDA #$10 ; | |
LB6F4: STA SQ1Cntrl0 ;Disable envelope generator(sound off). | |
LB6F7: LDA #$00 ; | |
LB6F9: STA SQ1InUse ;Allows music to use SQ1 channel. | |
LB6FC: JSR ClearCurrentSFXFlags ;($B4A2)Clear all SFX flags. | |
LB6FF: INC WriteMultiChannelData ;Allows music routines to load SQ1 and SQ2 music. | |
LB702: RTS ; | |
| |
SamusJumpSFXStart: | |
LB703: LDA CurrentMusic ;If escape music is playing, exit without playing--> | |
LB706: CMP #$04 ;Samus jump SFX. | |
LB708: BEQ MusicBranch03 ; | |
LB70A: LDA #$0C ;Number of frames to play sound before a change. | |
LB70C: LDY #$51 ;Lower byte of sound data start address(base=$B200). | |
LB70E: BNE SelectSFX1 ;Branch always. | |
| |
EnemyHitSFXStart: | |
LB710: LDA #$08 ;Number of frames to play sound before a change. | |
LB712: LDY #$55 ;Lower byte of sound data start address(base=$B200). | |
LB714: BNE SelectSFX1 ;Branch always. | |
| |
BulletFireSFXStart: | |
LB716: LDA HasBeamSFX ; | |
LB719: LSR ;If Samus has ice beam, branch. | |
LB71A: BCS +++++ ; | |
LB71C: LDA SQ1ContSFX ;If MissilePickup, EnergyPickup, BirdOutOfHole--> | |
LB71F: AND #$CC ;or EnemyHit SFX already playing, branch to exit. | |
LB721: BNE MusicBranch03 ; | |
LB723: LDA HasBeamSFX ; | |
LB726: ASL ;If Samus has long beam, branch. | |
LB727: BCS + ; | |
LB729: LDA #$03 ;Number of frames to play sound before a change. | |
LB72B: LDY #$4D ;Lower byte of sound data start address(base=$B200). | |
LB72D: BNE SelectSFX1 ;Branch always (Plays ShortBeamSFX). | |
| |
HasLongBeamSFXStart: | |
LB72F:* LDA #$07 ;Number of frames to play sound before a change. | |
LB731: LDY #$49 ;Lower byte of sound data start address(base=$B200). | |
LB733: BNE SelectSFX1 ;Branch always. | |
| |
MetalSFXStart: | |
LB735: LDA #$0B ;Number of frames to play sound before a change. | |
LB737: LDY #$45 ;Lower byte of sound data start address(base=$B200). | |
| |
SelectSFX1: | |
LB739:* JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
BirdOutOfHoleSFXStart: | |
LB73C: LDA CurrentMusic ;If escape music is playing, use this SFX to make--> | |
LB73F: CMP #$04 ;the bomb ticking sound, else play regular SFX. | |
LB741: BEQ + ; | |
LB743: LDA #$16 ;Number of frames to play sound before a change. | |
LB745: LDY #$59 ;Lower byte of sound data start address(base=$B200). | |
LB747: BNE SelectSFX1 ;Branch always. | |
LB749:* LDA #$07 ;Number of frames to play sound before a change. | |
LB74B: LDY #$39 ;Lower byte of sound data start address(base=$B200). | |
LB74D: BNE SelectSFX1 ;Branch always. | |
| |
BulletFireSFXContinue: | |
LB74F: LDA HasBeamSFX ; | |
LB752: LSR ;If Samus has ice beam, branch. | |
LB753: BCS +++ ; | |
LB755: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB758: BNE + ;If more frames to process, branch to exit. | |
LB75A: JMP EndSQ1SFX ;($B6F2)If SFX finished, jump. | |
LB75D:* RTS ; | |
| |
HasIceBeamSFXStart: | |
LB75E:* LDA #$07 ;Number of frames to play sound before a change. | |
LB760: LDY #$61 ;Lower byte of sound data start address(base=$B200). | |
LB762: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
HasIceBeamSFXContinue: | |
LB765:* JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB768: BNE + ;If more frames to process, branch. | |
LB76A: JMP EndSQ1SFX ;($B6F2)If SFX finished, jump. | |
LB76D:* LDA SQ1SFXData ; | |
LB770: AND #$01 ;Determine index for IceBeamSFXDataTbl below. | |
LB772: TAY ; | |
LB773: LDA IceBeamSFXDataTbl,Y ;Loads A with value from IceBeamSFXDataTbl below. | |
LB776: BNE ++ ; | |
| |
IceBeamSFXDataTbl: | |
LB778: .byte $93 ;Ice beam SFX period low data. | |
LB779: .byte $81 ; | |
| |
WaveBeamSFXStart: | |
LB77A: LDA #$08 ;Number of frames to play sound before a change. | |
LB77C: LDY #$5D ;Lower byte of sound data start address(base=$B200). | |
LB77E: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
WaveBeamSFXContinue: | |
LB781: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB784: BNE + ;If more frames to process, branch. | |
LB786: LDY SQ1SQ2SFXData ; | |
LB789: INC SQ1SQ2SFXData ;Load wave beam SFXDisable/enable envelope length--> | |
LB78C: LDA WaveBeamSFXDisLngthTbl,Y ;data from WaveBeamSFXDisableLengthTbl. | |
LB78F: STA SQ1Cntrl0 ; | |
LB792: BNE MusicBranch10 ;If at end of WaveBeamSFXDisableLengthTbl, end SFX. | |
LB794: JMP EndSQ1SFX ;($B6F2)If SFX finished, jump. | |
LB797:* LDA SQ1SFXData | |
LB79A: AND #$01 ; | |
LB79C: TAY ;Load wave beam SFX period low data from--> | |
LB79D: LDA WaveBeamSFXPeriodLowTbl,Y ;WaveBeamSFXPeriodLowTbl. | |
| |
LoadSQ1PeriodLow: | |
LB7A0:* STA SQ1Cntrl2 ;Change the period low data for SQ1 channel. | |
LB7A3: INC SQ1SFXData ; | |
| |
MusicBranch10: | |
LB7A6: RTS ;Exit for multiple routines. | |
| |
WaveBeamSFXPeriodLowTbl: | |
LB7A7: .byte $58 ;Wave beam SFX period low data. | |
LB7A8: .byte $6F ; | |
| |
WaveBeamSFXDisLngthTbl: | |
LB7A9: .byte $93 ; | |
LB7AA: .byte $91 ;Wave beam SFX Disable/enable envelope length data. | |
LB7AB: .byte $00 ; | |
| |
DoorOpenCloseSFXStart: | |
LB7AC: LDA $B287 ;#$30. | |
LB7AF: STA TrianglePeriodLow ;Set triangle period low data byte. | |
LB7B2: LDA $B288 ;#$B2. | |
LB7B5: AND #$07 ;Set triangle period high data byte. | |
LB7B7: STA TrianglePeriodHigh ;#$B7. | |
LB7BA: LDA #$0F ; | |
LB7BC: STA TriangleChangeLow ;Change triangle channel period low every frame by #$0F. | |
LB7BF: LDA #$00 ; | |
LB7C1: STA TriangleChangeHigh ;No change in triangle channel period high. | |
LB7C4: LDA #$1F ;Number of frames to play sound before a change. | |
LB7C6: LDY #$85 ;Lower byte of sound data start address(base=$B200). | |
LB7C8: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
DoorOpenCloseSFXContinue: | |
LB7CB: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB7CE: BNE + ; | |
LB7D0: JMP EndTriangleSFX ;($B896)End SFX. | |
LB7D3:* JSR DecreaseTrianglePeriods ;($B98C)Decrease periods. | |
LB7D6: JMP WriteTrianglePeriods ;($B869)Save new periods. | |
| |
BeepSFXStart: | |
LB7D9: LDA TriangleContSFX ;If BombLaunchSFX is already playing, branch--> | |
LB7DC: AND #$80 ;without playing BeepSFX. | |
LB7DE: BNE MusicBranch10 ; | |
LB7E0: LDA #$03 ;Number of frames to play sound before a change. | |
LB7E2: LDY #$79 ;Lower byte of sound data start address(base=$B200). | |
LB7E4: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
BeepSFXContinue: | |
LB7E7: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB7EA: BNE MusicBranch10 ;If more frames to process, branch to exit. | |
LB7EC: JMP EndTriangleSFX ;($B896)End SFX. | |
| |
BigEnemyHitSFXStart: | |
LB7EF: LDA #$12 ;Increase triangle low period by #$12 every frame. | |
LB7F1: STA TriangleChangeLow ; | |
LB7F4: LDA #$00 ; | |
LB7F6: STA TriangleChangeHigh ;Does not change triangle period high. | |
LB7F9: LDA $B27F ;#$42. | |
LB7FC: STA TrianglePeriodLow ;Save new triangle period low data. | |
LB7FF: LDA $B280 ;#$18. | |
LB802: AND #$07 ;#$1F. | |
LB804: STA TrianglePeriodHigh ;Save new triangle period high data. | |
LB807: LDA #$0A ;Number of frames to play sound before a change. | |
LB809: LDY #$7D ;Lower byte of sound data start address(base=$B200). | |
LB80B: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
BigEnemyHitSFXContinue: | |
LB80E: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB811: BNE + ;If more frames to process, branch | |
LB813: JMP EndTriangleSFX ;($B896)End SFX | |
LB816:* JSR IncreaseTrianglePeriods ;($B978)Increase periods. | |
LB819: LDA RandomNumber1 ; | |
LB81B: AND #$3C ; | |
LB81D: STA TriangleSFXData ; | |
LB820: LDA TrianglePeriodLow ;Randomly set or clear bits 2, 3, 4 and 5 in--> | |
LB823: AND #$C3 ;triangle channel period low. | |
LB825: ORA TriangleSFXData ; | |
LB828: STA TriangleCntrl2 ; | |
LB82B: LDA TrianglePeriodHigh ; | |
LB82E: ORA #$40 ;Set 4th bit in triangle channel period high. | |
LB830: STA TriangleCntrl3 ; | |
LB833: RTS ; | |
| |
SamusToBallSFXStart: | |
LB834: LDA #$08 ;Number of frames to play sound before a change. | |
LB836: LDY #$6D ;Lower byte of sound data start address(base=$B200). | |
LB838: JSR SelectSFXRoutine ;($B452)Setup registers for SFX. | |
LB83B: LDA #$05 ; | |
LB83D: STA PercentDifference ;Stores percent difference. In this case 5 = 1/5 = 20%. | |
LB840: LDA $B26F ;#$DD. | |
LB843: STA TrianglePeriodLow ;Save new triangle period low data. | |
LB846: LDA $B270 ;#$3B. | |
LB849: AND #$07 ;#$02. | |
LB84B: STA TrianglePeriodHigh ;Save new triangle period high data. | |
LB84E: RTS ; | |
| |
SamusToBallSFXContinue: | |
LB84F: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB852: BNE + ;If more frames to process, branch. | |
LB854: JMP EndTriangleSFX ;($B896)End SFX. | |
LB857:* JSR DivideTrianglePeriods ;($B9A0)reduces triangle period low by 20% each frame. | |
LB85A: LDA TriangleLowPercentage ; | |
LB85D: STA TriangleChangeLow ;Store new values to change triangle periods. | |
LB860: LDA TriangleHighPercentage ; | |
LB863: STA TriangleChangeHigh ; | |
LB866: JSR DecreaseTrianglePeriods ;($B98C)Decrease periods. | |
| |
WriteTrianglePeriods: | |
LB869: LDA TrianglePeriodLow ;Write TrianglePeriodLow to triangle channel. | |
LB86C: STA TriangleCntrl2 ; | |
LB86F: LDA TrianglePeriodHigh ; | |
LB872: ORA #$08 ;Write TrianglePeriodHigh to triangle channel. | |
LB874: STA TriangleCntrl3 ; | |
LB877: RTS ; | |
| |
BombLaunchSFXStart: | |
LB878: LDA #$04 ;Number of frames to play sound before a change. | |
LB87A: LDY #$65 ;Lower byte of sound data start address(base=$B200). | |
LB87C: JMP SelectSFXRoutine ;($B452)Setup registers for SFX. | |
| |
BombLaunchSFXContinue: | |
LB87F: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB882: BNE MusicBranch04 ;If more frames to process, branch to exit. | |
LB884: INC TriangleSFXData ; | |
LB887: LDA TriangleSFXData ;After four frames, load second part of SFX. | |
LB88A: CMP #$02 ; | |
LB88C: BNE + ; | |
LB88E: JMP EndTriangleSFX ;($B896)End SFX. | |
LB891:* LDY #$69 ;Lower byte of sound data start address(base=$B200). | |
LB893: JMP LoadTriangleChannelSFX ;($B36C)Prepare to load triangle channel with data. | |
| |
EndTriangleSFX: | |
LB896: LDA #$00 ; | |
LB898: STA TriangleCntrl0 ;clear TriangleCntr0(sound off). | |
LB89B: STA TriangleInUse ;Allows music to use triangle channel. | |
LB89E: LDA #$18 ; | |
LB8A0: STA TriangleCntrl3 ;Set length index to #$03. | |
LB8A3: JSR ClearCurrentSFXFlags ;($B4A2)Clear all SFX flags. | |
| |
MusicBranch04: | |
LB8A6: RTS ;Exit from for multiple routines. | |
| |
MetroidHitSFXStart: | |
LB8A7: LDA #$03 ;Number of frames to play sound before a change. | |
LB8A9: LDY #$71 ;Lower byte of sound data start address(base=$B200). | |
LB8AB: JSR SelectSFXRoutine ;($B452)Setup registers for SFX. | |
LB8AE: JMP RndTrianglePeriods ;($B8C3)MetroidHit SFX has several different sounds. | |
| |
MetroiHitSFXContinue: | |
LB8B1: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB8B4: BEQ + ; | |
LB8B6: INC TriangleSFXData ; | |
LB8B9: LDA TriangleSFXData ;Randomize triangle periods nine times throughout--> | |
LB8BC: CMP #$09 ;the course of the SFX. | |
LB8BE: BNE MusicBranch04 ;If SFX not done, branch. | |
LB8C0: JMP EndTriangleSFX ;($B896)End SFX. | |
| |
RndTrianglePeriods: | |
LB8C3:* LDA RandomNumber1 ;Randomly set or reset bits 7, 4, 2 and 1 of--> | |
LB8C5: ORA #$6C ;triangle channel period low. | |
LB8C7: STA TriangleCntrl2 ; | |
LB8CA: AND #$01 ; | |
LB8CC: ORA #$F8 ;Randomly set or reset last bit of triangle--> | |
LB8CE: STA TriangleCntrl3 ;channel period high. | |
LB8D1: RTS ; | |
| |
SamusDieSFXStart: | |
LB8D2: JSR InitializeSoundAddresses ;($B404)Clear all sound addresses. | |
LB8D5: LDA #$0E ;Number of frames to play sound before a change. | |
LB8D7: LDY #$75 ;Lower byte of sound data start address(base=$B200). | |
LB8D9: JSR SelectSFXRoutine ;($B452)Setup registers for SFX. | |
LB8DC: LDA #$15 ;Decrease triangle SFX periods by 4.8% every frame. | |
LB8DE: STA PercentDifference ; | |
LB8E1: LDA $B277 ;#$40. | |
LB8E4: STA TrianglePeriodLow ; | |
LB8E7: LDA #$00 ;Initial values of triangle periods. | |
LB8E9: STA TrianglePeriodHigh ; | |
LB8EC:* RTS ; | |
| |
SamusDieSFXContinue: | |
LB8ED: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB8F0: BNE + ; | |
LB8F2: LDA #$20 ;Store change in triangle period low. | |
LB8F4: STA TriangleChangeLow ; | |
LB8F7: LDA #$00 ; | |
LB8F9: STA TriangleChangeHigh ;No change in triangle period high. | |
LB8FC: JSR DecreaseTrianglePeriods ;($B98C)Decrease periods. | |
LB8FF: INC TriangleSFXData ; | |
LB902: LDA TriangleSFXData ; | |
LB905: CMP #$06 ; | |
LB907: BNE - ;If more frames to process, branch to exit. | |
LB909: JMP EndTriangleSFX ;($B896)End SFX. | |
LB90C:* JSR DivideTrianglePeriods ;($B9A0)reduces triangle period low. | |
LB90F: LDA TriangleLowPercentage ; | |
LB912: STA TriangleChangeLow ;Update triangle periods. | |
LB915: LDA TriangleHighPercentage ; | |
LB918: STA TriangleChangeHigh ; | |
LB91B: JSR IncreaseTrianglePeriods ;($B978)Increase periods. | |
LB91E: JMP WriteTrianglePeriods ;($B869)Save new periods. | |
| |
StatueRaiseSFXStart: | |
LB921: LDA $B283 ;#$11. | |
LB924: STA TrianglePeriodLow ;Save period low data. | |
LB927: LDA $B284 ;#$09. | |
LB92A: AND #$07 ; | |
LB92C: STA TrianglePeriodHigh ;Store last three bits in $B284. | |
LB92F: LDA #$00 ; | |
LB931: STA TriangleChangeHigh ;No change in Triangle period high. | |
LB934: LDA #$0B ; | |
LB936: STA TriangleChangeLow ; | |
LB939: LDA #$06 ;Number of frames to play sound before a change. | |
LB93B: LDY #$81 ;Lower byte of sound data start address(base=$B200). | |
LB93D: JMP SelectSFXroutine ;($B452)Setup registers for SFX. | |
| |
StatueRaiseSFXContinue: | |
LB940: JSR IncrementSFXFrame ;($B4A9)Get next databyte to process in SFX. | |
LB943: BNE ++ ; | |
LB945: INC TriangleSFXData ;Increment TriangleSFXData every 6 frames. | |
LB948: LDA TriangleSFXData ; | |
LB94B: CMP #$09 ;When TriangleSFXData = #$09, end SFX. | |
LB94D: BNE + ; | |
LB94F: JMP EndTriangleSFX ;($B896)End SFX. | |
LB952:* LDA TriangleChangeLow ; | |
LB955: PHA ;Save triangle periods. | |
LB956: LDA TriangleChangeHigh ; | |
LB959: PHA ; | |
LB95A: LDA #$25 ; | |
LB95C: STA TriangleChangeLow ; | |
LB95F: LDA #$00 ;No change in triangle period high. | |
LB961: STA TriangleChangeHigh ; | |
LB964: JSR IncreaseTrianglePeriods ;($B978)Increase periods. | |
LB967: PLA ; | |
LB968: STA TriangleChangeHigh ;Restore triangle periods. | |
LB96B: PLA ; | |
LB96C: STA TriangleChangeLow ; | |
LB96F: JMP WriteTrianglePeriods ;($B869)Save new periods. | |
LB972:* JSR DecreaseTrianglePeriods ;($B98C)Decrease periods. | |
LB975: JMP WriteTrianglePeriods ;($B869)Save new periods. | |
| |
IncreaseTrianglePeriods: | |
LB978: CLC | |
LB979: LDA TrianglePeriodLow ; | |
LB97C: ADC TriangleChangeLow ;Calculate new TrianglePeriodLow. | |
LB97F: STA TrianglePeriodLow ; | |
LB982: LDA TrianglePeriodHigh ; | |
LB985: ADC TriangleChangeHigh ;Calculate new TrianglePeriodHigh. | |
LB988: STA TrianglePeriodHigh ; | |
LB98B: RTS ; | |
| |
DecreaseTrianglePeriods: | |
LB98C: SEC | |
LB98D: LDA TrianglePeriodLow ; | |
LB990: SBC TriangleChangeLow ;Calculate new TrianglePeriodLow. | |
LB993: STA TrianglePeriodLow ; | |
LB996: LDA TrianglePeriodHigh ; | |
LB999: SBC TriangleChangeHigh ;Calculate new TrianglePeriodHigh. | |
LB99C: STA TrianglePeriodHigh ; | |
LB99F: RTS ; | |
| |
DivideTrianglePeriods: | |
LB9A0: LDA TrianglePeriodLow ; | |
LB9A3: PHA ;Store TrianglePeriodLow and TrianglePeriodHigh. | |
LB9A4: LDA TrianglePeriodHigh ; | |
LB9A7: PHA ; | |
LB9A8: LDA #$00 ; | |
LB9AA: STA DivideData ; | |
LB9AD: LDX #$10 ; | |
LB9AF: ROL TrianglePeriodLow ; | |
LB9B2: ROL TrianglePeriodHigh ; | |
LB9B5:* ROL DivideData ;The following routine takes the triangle period--> | |
LB9B8: LDA DivideData ;high and triangle period low values and reduces--> | |
LB9BB: CMP PercentDifference ;them by a certain percent. The percent is--> | |
LB9BE: BCC + ;determined by the value stored in--> | |
LB9C0: SBC PercentDifference ;PercentDifference. If PercentDifference=#$05,--> | |
LB9C3: STA DivideData ;then the values will be reduced by 20%(1/5).--> | |
LB9C6:* ROL TrianglePeriodLow ;If PercentDifference=#$0A,Then the value will--> | |
LB9C9: ROL TrianglePeriodHigh ;be reduced by 10%(1/10), etc. This function is--> | |
LB9CC: DEX ;basically a software emulation of a sweep function. | |
LB9CD: BNE -- ; | |
LB9CF: LDA TrianglePeriodLow ; | |
LB9D2: STA TriangleLowPercentage ; | |
LB9D5: LDA TrianglePeriodHigh ; | |
LB9D8: STA TriangleHighPercentage ; | |
LB9DB: PLA ; | |
LB9DC: STA TrianglePeriodHigh ;Restore TrianglePerodLow and TrianglePeriodHigh. | |
LB9DF: PLA ; | |
LB9E0: STA TrianglePeriodLow ; | |
LB9E3: RTS ; | |
| |
;--------------------------------------[ End SFX routines ]------------------------------------- | |
| |
SetVolumeAndDisableSweep: | |
LB9E4: LDA #$7F ; | |
LB9E6: STA MusicSQ1Sweep ;Disable sweep generator on SQ1 and SQ2. | |
LB9E9: STA MusicSQ2Sweep ; | |
LB9EC: STX SQ1DutyEnvelope ;Store duty cycle and volume data for SQ1 and SQ2. | |
LB9EF: STY SQ2DutyEnvelope ; | |
LB9F2: RTS ; | |
| |
ResetVolumeIndex: | |
LB9F3: LDA SQ1MusicFrameCount ;If at the beginning of a new SQ1 note, set--> | |
LB9F6: CMP #$01 ;SQ1VolumeIndex = #$01. | |
LB9F8: BNE + ; | |
LB9FA: STA SQ1VolumeIndex ; | |
LB9FD:* LDA SQ2MusicFrameCount ; | |
LBA00: CMP #$01 ;If at the beginning of a new SQ2 note, set--> | |
LBA02: BNE + ;SQ2VolumeIndex = #$01. | |
LBA04: STA SQ2VolumeIndex ; | |
LBA07:* RTS ; | |
| |
LoadSQ1SQ2Periods: | |
LBA08: LDA WriteMultiChannelData ;If a Multi channel data does not need to be--> | |
LBA0B: BEQ + ;loaded, branch to exit. | |
LBA0D: LDA #$00 ; | |
LBA0F: STA WriteMultiChannelData ;Clear multi channel data write flag. | |
LBA12: LDA MusicSQ1Sweep ; | |
LBA15: STA SQ1Cntrl1 ; | |
LBA18: LDA MusicSQ1PeriodLow ; | |
LBA1B: STA SQ1Cntrl2 ;Loads SQ1 channel addresses $4001, $4002, $4003. | |
LBA1E: LDA MusicSQ1PeriodHigh ; | |
LBA21: STA SQ1Cntrl3 ; | |
LBA24: LDA MusicSQ2Sweep ; | |
LBA27: STA SQ2Cntrl1 ; | |
LBA2A: LDA MusicSQ2PeriodLow ; | |
LBA2D: STA SQ2Cntrl2 ;Loads SQ2 channel addresses $4005, $4006, $4007. | |
LBA30: LDA MusicSQ2PeriodHigh ; | |
LBA33: STA SQ2Cntrl3 ; | |
LBA36:* RTS ; | |
| |
LoadSQ1SQ2Channels: | |
LBA37: LDX #$00 ;Load SQ1 channel data. | |
LBA39: JSR WriteSQCntrl0 ;($BA41)Write Cntrl0 data. | |
LBA3C: INX ;Load SQ2 channel data. | |
LBA3D: JSR WriteSQCntrl0 ;($BA41)Write Cntrl0 data. | |
LBA40: RTS ; | |
| |
WriteSQCntrl0: | |
LBA41: LDA SQ1VolumeCntrl,X ;Load SQ channel volume data. If zero, branch to exit. | |
LBA44: BEQ +++++ ; | |
LBA46: STA VolumeCntrlAddress ; | |
LBA48: JSR LoadSQ1SQ2Periods ;($BA08)Load SQ1 and SQ2 control information. | |
LBA4B: LDA SQ1VolumeData,X ; | |
LBA4E: CMP #$10 ;If sound channel is not currently--> | |
LBA50: BEQ +++++++ ;playing sound, branch. | |
LBA52: LDY #$00 ; | |
LBA54:* DEC VolumeCntrlAddress ;Desired entry in VolumeCntrlAdressTbl. | |
LBA56: BEQ + ; | |
LBA58: INY ;*2(2 byte address to find voulume control data). | |
LBA59: INY ; | |
LBA5A: BNE - ;Keep decrementing until desired address is found. | |
LBA5C:* LDA VolumeCntrlAddressTbl,Y ;Base is $BCB0. | |
LBA5F: STA $EC ;Volume data address low byte. | |
LBA61: LDA VolumeCntrlAddressTbl+1,Y ;Base is $BCB1. | |
LBA64: STA $ED ;Volume data address high byte. | |
LBA66: LDY SQ1VolumeIndex,X ;Index to desired volume data. | |
LBA69: LDA ($EC),Y ;Load desired volume for current channel into--> | |
LBA6B: STA Cntrl0Data ;Cntrl0Data. | |
LBA6D: CMP #$FF ;If last entry in volume table is #$FF, restore--> | |
LBA6F: BEQ MusicBranch05 ;volume to its original level after done reading--> | |
LBA71: CMP #$F0 ;Volume data. If #$F0 is last entry, turn sound--> | |
LBA73: BEQ MusicBranch06 ;off on current channel until next note. | |
LBA75: LDA SQ1DutyEnvelope,X ;Remove duty cycle data For current channel and--> | |
LBA78: AND #$F0 ;add this frame of volume data and store results--> | |
LBA7A: ORA Cntrl0Data ;in Cntrl0Data. | |
LBA7C: TAY ; | |
LBA7D:* INC SQ1VolumeIndex,X ;Increment Index to volume data. | |
LBA80:* LDA SQ1InUse,X ;If SQ1 or SQ2(depends on loop iteration) in use,--> | |
LBA83: BNE + ;branch to exit, else write SQ(1 or 2)Cntrl0. | |
LBA85: TXA ; | |
LBA86: BEQ ++ ;If currently on SQ1, branch to write SQ1 data. | |
| |
WriteSQ2Cntrl0: ; | |
LBA88: STY SQ2Cntrl0 ;Write SQ2Cntrl0 data. | |
LBA8B:* RTS ; | |
| |
WriteSQ1Cntrl0: ; | |
LBA8C:* STY SQ1Cntrl0 ;Write SQ1Cntrl0 data. | |
LBA8F: RTS ; | |
| |
MusicBranch05: | |
LBA90: LDY SQ1DutyEnvelope,X ;Restore original volume of sound channel. | |
LBA93: BNE --- ;Branch always. | |
| |
MusicBranch06: | |
LBA95: LDY #$10 ;Disable envelope generator and set volume to 0. | |
LBA97: BNE --- ;Branch always. | |
LBA99:* LDY #$10 ;Disable envelope generator and set volume to 0. | |
LBA9B: BNE ----- ;Branch always. | |
| |
GotoCheckRepeatMusic: | |
LBA9D:* JSR CheckRepeatMusic ;($B3F0)Resets music flags if music repeats. | |
LBAA0: RTS ; | |
| |
GotoLoadSQ1SQ2Channels: | |
LBAA1:* JSR LoadSQ1SQ2Channels ;($BA37)Load SQ1 and SQ2 channel data. | |
LBAA4: RTS ; | |
| |
LoadCurrentMusicFrameData: | |
LBAA5: JSR ResetVolumeIndex ;($B9F3)Reset index if at the beginning of a new note. | |
LBAA8: LDA #$00 ; | |
LBAAA: TAX ;X = #$00. | |
LBAAB: STA ThisSoundChannel ;(#$00, #$04, #$08 or #$0C). | |
LBAAE: BEQ ++ ; | |
LBAB0:* TXA ; | |
LBAB1: LSR ; | |
LBAB2: TAX ;Increment to next sound channel(1,2 or 3). | |
; | |
IncrementToNextChannel: ; | |
LBAB3: INX ; | |
LBAB4: TXA ; | |
LBAB5: CMP #$04 ;If done with four sound channels, branch to load--> | |
LBAB7: BEQ -- ;sound channel SQ1 SQ2 data. | |
LBAB9: LDA ThisSoundChannel ;Add 4 to the least significant byte of the current--> | |
LBABC: CLC ;sound channel start address. This moves to next--> | |
LBABD: ADC #$04 ;sound channel address ranges to process. | |
LBABF: STA ThisSoundChannel ; | |
LBAC2:* TXA ; | |
LBAC3: ASL ;*2(two bytes for sound channel info base address). | |
LBAC4: TAX ; | |
LBAC5: LDA SQ1LowBaseByte,X ; | |
LBAC8: STA $E6 ;Load sound channel info base address into $E6--> | |
LBACA: LDA SQ1HighBaseByte,X ;and $E7. ($E6=low byte, $E7=high byte). | |
LBACD: STA $E7 ; | |
LBACF: LDA SQ1HighBaseByte,X ;If no data for this sound channel, branch--> | |
LBAD2: BEQ -- ;to find data for next sound channel. | |
LBAD4: TXA ; | |
LBAD5: LSR ;/2. Determine current sound channel (0,1,2 or3). | |
LBAD6: TAX ; | |
LBAD7: DEC SQ1MusicFrameCount,X ;Decrement the current sound channel frame count--> | |
LBADA: BNE IncrementToNextChannel ;If not zero, branch to check next channel, else--> | |
;load the next set of sound channel data. | |
LoadNextChannelIndexData: | |
LBADC: LDY SQ1MusicIndexIndex,X ;Load current channel index to music data index. | |
LBADF: INC SQ1MusicIndexIndex,X ;Increment current channel index to music data index. | |
LBAE2: LDA ($E6),Y ; | |
LBAE4: BEQ ---- ;Branch if music has reached the end. | |
LBAE6: TAY ;Transfer music data index to Y (base=$BE77) . | |
LBAE7: CMP #$FF ; | |
LBAE9: BEQ + ;At end of loop? If yes, branch. | |
LBAEB: AND #$C0 ; | |
LBAED: CMP #$C0 ;At beginnig of new loop? if yes, branch. | |
LBAEF: BEQ ++ ; | |
LBAF1: JMP LoadMusicChannel ;($BB1C)Load music data into channel. | |
| |
RepeatMusicLoop: | |
LBAF4:* LDA SQ1RepeatCounter,X ;If loop counter has reached zero, branch to exit. | |
LBAF7: BEQ ++ ; | |
LBAF9: DEC SQ1RepeatCounter,X ;Decrement loop counter. | |
LBAFC: LDA SQ1LoopIndex,X ;Load loop index for proper channel and store it in--> | |
LBAFF: STA SQ1MusicIndexIndex,X ;music index index address. | |
LBB02: BNE ++ ;Branch unless music has reached the end. | |
| |
StartNewMusicLoop: | |
LBB04:* TYA ; | |
LBB05: AND #$3F ;Remove last six bits of loop controller and save--> | |
LBB07: STA SQ1RepeatCounter,X ;in repeat counter addresses. # of times to loop. | |
LBB0A: DEC SQ1RepeatCounter,X ;Decrement loop counter. | |
LBB0D: LDA SQ1MusicIndexIndex,X ;Store location of loop start in loop index address. | |
LBB10: STA SQ1LoopIndex,X ; | |
LBB13:* JMP LoadNextChannelIndexData ;($BADC)Load next channel index data. | |
| |
LBB16:* JMP LoadNoiseChannelMusic ;($BBDE)Load data for noise channel music. | |
| |
LBB19:* JMP LoadTriangleCntrl0 ;($BBB7)Load Cntrl0 byte of triangle channel. | |
| |
LoadMusicChannel: | |
LBB1C: TYA ; | |
LBB1D: AND #$B0 ; | |
LBB1F: CMP #$B0 ;Is data byte music note length data? If not, branch. | |
LBB21: BNE + ; | |
LBB23: TYA ; | |
LBB24: AND #$0F ;Separate note length data. | |
LBB26: CLC ; | |
LBB27: ADC NoteLengthTblOffset ;Find proper note lengths table for current music. | |
LBB2A: TAY ; | |
LBB2B: LDA NoteLengths0Tbl,Y ;(Base is $BEF7)Load note length and store in--> | |
LBB2E: STA SQ1FrameCountInit,X ;frame count init address. | |
LBB31: TAY ;Y now contains note length. | |
LBB32: TXA ; | |
LBB33: CMP #$02 ;If loading Triangle channel data, branch. | |
LBB35: BEQ - ; | |
| |
LoadSoundDataIndexIndex: | |
LBB37: LDY SQ1MusicIndexIndex,X ;Load current index to sound data index. | |
LBB3A: INC SQ1MusicIndexIndex,X ;Increment music index index address. | |
LBB3D: LDA ($E6),Y ;Load index to sound channel music data. | |
LBB3F: TAY ; | |
LBB40:* TXA ; | |
LBB41: CMP #$03 ;If loading Noise channel data, branch. | |
LBB43: BEQ --- ; | |
LBB45: PHA ;Push music channel number on stack(0, 1 or 2). | |
LBB46: LDX ThisSoundChannel ; | |
LBB49: LDA MusicNotesTbl+1,Y ;(Base=$BE78)Load A with music channel period low data. | |
LBB4C: BEQ + ;If data is #$00, skip period high and low loading. | |
LBB4E: STA MusicSQ1PeriodLow,X ;Store period low data in proper period low address. | |
LBB51: LDA MusicNotesTbl,Y ;(Base=$BE77)Load A with music channel period high data. | |
LBB54: ORA #$08 ;Ensure minimum index length of 1. | |
LBB56: STA MusicSQ1PeriodHigh,X ;Store period high data in proper period high address. | |
LBB59:* TAY ; | |
LBB5A: PLA ;Pull stack and restore channel number to X. | |
LBB5B: TAX ; | |
LBB5C: TYA ; | |
LBB5D: BNE + ;If period information was present, branch. | |
| |
NoPeriodInformation: | |
LBB5F: LDA #$00 ;Turn off channel volume since no period data present. | |
LBB61: STA Cntrl0Data ; | |
LBB63: TXA ; | |
LBB64: CMP #$02 ;If loading triangle channel data, branch. | |
LBB66: BEQ ++ ; | |
LBB68: LDA #$10 ;Turn off volume and disable env. generator(SQ1,SQ2). | |
LBB6A: STA Cntrl0Data ; | |
LBB6C: BNE ++ ;Branch always. | |
| |
PeriodInformationFound: | |
LBB6E:* LDA SQ1DutyEnvelope,X ;Store channel duty cycle and volume info in $EA. | |
LBB71: STA Cntrl0Data ; | |
LBB73:* TXA ; | |
LBB74: DEC SQ1InUse,X ; | |
LBB77: CMP SQ1InUse,X ;If SQ1 or SQ2 are being used by SFX routines, branch. | |
LBB7A: BEQ +++ ; | |
LBB7C: INC SQ1InUse,X ;Restore not in use status of SQ1 or SQ2. | |
LBB7F: LDY ThisSoundChannel ; | |
LBB82: TXA ; | |
LBB83: CMP #$02 ;If loading triangle channel data, branch. | |
LBB85: BEQ + ; | |
LBB87: LDA SQ1VolumeCntrl,X ;If $062E or $062F has volume data, skip writing--> | |
LBB8A: BNE ++ ;Cntrl0Data to SQ1 or SQ2. | |
LBB8C:* LDA Cntrl0Data ; | |
LBB8E: STA SQ1Cntrl0,Y ;Write Cntrl0Data. | |
LBB91:* LDA Cntrl0Data ; | |
LBB93: STA SQ1VolumeData,X ;Store volume data index to volume data. | |
LBB96: LDA MusicSQ1PeriodLow,Y ; | |
LBB99: STA SQ1Cntrl2,Y ; | |
LBB9C: LDA MusicSQ1PeriodHigh,Y ;Write data to three sound channel addresses. | |
LBB9F: STA SQ1Cntrl3,Y ; | |
LBBA2: LDA MusicSQ1Sweep,X ; | |
LBBA5: STA SQ1Cntrl1,Y ; | |
| |
LoadNewMusicFrameCount: | |
LBBA8: LDA SQ1FrameCountInit,X ;Load new music frame count and store it in music--> | |
LBBAB: STA SQ1MusicFrameCount,X ;frame count address. | |
LBBAE: JMP IncrementToNextChannel ;($BAB3)Move to next sound channel. | |
| |
SQ1SQ2InUse: | |
LBBB1:* INC SQ1InUse,X ;Restore in use status of SQ1 or SQ1. | |
LBBB4: JMP LoadNewMusicFrameCount ;($BBA8)Load new music frame count. | |
| |
LoadTriangleCntrl0: | |
LBBB7: LDA TriangleCounterCntrl ; | |
LBBBA: AND #$0F ;If lower bits set, branch to play shorter note. | |
LBBBC: BNE ++ ; | |
LBBBE: LDA TriangleCounterCntrl ; | |
LBBC1: AND #$F0 ;If upper bits are set, branch to play longer note. | |
LBBC3: BNE + ; | |
LBBC5: TYA ; | |
LBBC6: JMP AddTriangleLength ;($BBCD)Calculate length to play note. | |
LBBC9:* LDA #$FF ;Disable length cntr(play until triangle data changes). | |
LBBCB: BNE + ;Branch always. | |
| |
AddTriangleLength: | |
LBBCD: CLC ; | |
LBBCE: ADC #$FF ;Add #$FF(Effectively subtracts 1 from A). | |
LBBD0: ASL ;*2. | |
LBBD1: ASL ;*2. | |
LBBD2: CMP #$3C ; | |
LBBD4: BCC + ;If result is greater than #$3C, store #$3C(highest--> | |
LBBD6: LDA #$3C ;triangle linear count allowed). | |
LBBD8:* STA TriLinearCount ; | |
LBBDB:* JMP LoadSoundDataIndexIndex ;($BB37)Load index to sound data index. | |
| |
LoadNoiseChannelMusic: | |
LBBDE: LDA NoiseContSFX ; | |
LBBE1: AND #$FC ;If playing any Noise SFX, branch to exit. | |
LBBE3: BNE + ; | |
LBBE5: LDA $B200,Y ; | |
LBBE8: STA NoiseCntrl0 ;Load noise channel with drum beat SFX starting--> | |
LBBEB: LDA $B201,Y ;at address B201. The possible values of Y are--> | |
LBBEE: STA NoiseCntrl2 ;#$01, #$04, #$07 or #$0A. | |
LBBF1: LDA $B202,Y ; | |
LBBF4: STA NoiseCntrl3 ; | |
LBBF7:* JMP LoadNewMusicFrameCount ;($BBA8)Load new music frame count. | |
| |
;The following table is used by the InitializeMusic routine to find the index for loading | |
;addresses $062B thru $0637. Base is $BD31. | |
| |
InitMusicIndexTbl: | |
LBBFA: .byte $41 ;Ridley area music. | |
LBBFB: .byte $8F ;Tourian music. | |
LBBFC: .byte $34 ;Item room music. | |
LBBFD: .byte $27 ;Kraid area music. | |
LBBFE: .byte $1A ;Norfair music. | |
LBBFF: .byte $0D ;Escape music. | |
LBC00: .byte $00 ;Mother brain music. | |
LBC01: .byte $82 ;Brinstar music. | |
LBC02: .byte $68 ;Fade in music. | |
LBC03: .byte $75 ;Power up music. | |
LBC04: .byte $4E ;End music. | |
LBC05: .byte $5B ;Intro music. | |
| |
;The tables below contain addresses for SFX and music handling routines. | |
;Multi channel Init SFX and music handling routine addresses: | |
| |
LBC06: .word $BC80 ;Fade in music. | |
LBC08: .word $BC7A ;Power up music. | |
LBC0A: .word $BC86 ;End game music. | |
LBC0C: .word $BC7A ;Intro music. | |
LBC0E: .word $B4EE ;No sound. | |
LBC10: .word $B673 ;Samus hit init SFX. | |
LBC12: .word $B5EC ;Boss hit init SFX. | |
LBC14: .word $B695 ;Incorrect password init SFX. | |
| |
;Multi channel continue SFX handling routine addresses: | |
| |
LBC16: .word $B4EE ;No sound. | |
LBC18: .word $B4EE ;No sound. | |
LBC1A: .word $B4EE ;No sound. | |
LBC1C: .word $B4EE ;No sound. | |
LBC1E: .word $B4EE ;No sound. | |
LBC20: .word $B650 ;Samus hit continue SFX. | |
LBC22: .word $B5F6 ;Boss hit continue SFX. | |
LBC24: .word $B6A1 ;Incorrect password continue SFX. | |
| |
;Music handling routine addresses: | |
| |
LBC26: .word $BC83 ;Ridley area music. | |
LBC28: .word $BC77 ;Tourian music. | |
LBC2A: .word $BC77 ;Item room music. | |
LBC2C: .word $BC77 ;Kraid area music. | |
LBC2E: .word $BC80 ;Norfair music. | |
LBC30: .word $BC7D ;Escape music. | |
LBC32: .word $BC77 ;Mother brain music. | |
LBC34: .word $BC80 ;Brinstar music. | |
| |
;-----------------------------------[ Entry point for music routines ]-------------------------------- | |
| |
LoadMusicTempFlags: | |
LBC36: LDA CurrentMusicRepeat ;Load A with temp music flags, (9th SFX cycle). | |
LBC39: LDX #$B6 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LBC3B: BNE + ;Branch always. | |
| |
LoadMusicInitFlags: | |
LBC3D: LDA MusicInitFlag ;Load A with Music flags, (10th SFX cycle). | |
LBC40: LDX #$B1 ;Lower address byte in ChooseNextSFXRoutineTbl. | |
LBC42:* JSR CheckSFXFlag ;($B4BD)Checks to see if SFX or music flags set. | |
LBC45: JSR FindMusicInitIndex ;($BC53)Find bit containing music init flag. | |
LBC48: JMP ($00E2) ;If no flag found, Jump to next SFX cycle,--> | |
;else jump to specific SFX handling subroutine. | |
| |
ContinueMusic: ;11th and last SFX cycle. | |
LBC4B: LDA CurrentMusic ; | |
LBC4E: BEQ +++ ;Branch to exit of no music playing. | |
LBC50: JMP LoadCurrentMusicFrameData ;($BAA5)Load info for current frame of music data. | |
| |
;MusicInitIndex values correspond to the following music: | |
;#$00=Ridley area music, #$01=Tourian music, #$02=Item room music, #$03=Kraid area music, | |
;#$04=Norfair music, #$05=Escape music, #$06=Mother brain music, #$07=Brinstar music, | |
;#$08=Fade in music, #$09=Power up music, #$0A=End game music, #$0B=Intro music. | |
| |
FindMusicInitIndex: | |
LBC53: LDA #$FF ;Load MusicInitIndex with #$FF. | |
LBC55: STA MusicInitIndex ; | |
LBC58: LDA CurrentSFXFlags ; | |
LBC5B: BEQ ++ ;Branch to exit if no SFX flags set for Multi SFX. | |
LBC5D:* INC MusicInitIndex ; | |
LBC60: ASL ;Shift left until bit flag is in carry bit. | |
LBC61: BCC - ;Loop until SFX flag found. Store bit--> | |
LBC63:* RTS ;number of music in MusicInitIndex. | |
| |
;The following routine is used to add eight to the music index when looking for music flags | |
;in the MultiSFX address. | |
Add8: | |
LBC64: LDA MusicInitIndex ; | |
LBC67: CLC ; | |
LBC68: ADC #$08 ;Add #$08 to MusicInitIndex. | |
LBC6A: STA MusicInitIndex ; | |
LBC6D: RTS ; | |
| |
LBC6E: LDA CurrentMusic ; | |
LBC71: ORA #$F0 ;This code does not appear to be used in this page. | |
LBC73: STA CurrentMusic ; | |
LBC76:* RTS ; | |
| |
Music00Start: | |
LBC77: JMP Music00Init ;($BCAA)Initialize music 00. | |
| |
Music01Start: | |
LBC7A: JMP Music01Init ;($BCA4)Initialize music 01. | |
| |
Music02Start: | |
LBC7D: JMP Music02Init ;($BC9A)Initialize music 02. | |
| |
Msic03Start: | |
LBC80: JMP Music03Init ;($BC96)Initialize music 03. | |
| |
Music04Start: | |
LBC83: JMP Music04Init ;($BC89)Initialize music 04. | |
| |
Music05Start: | |
LBC86: JMP Music05Init ;($BC9E)Initialize music 05. | |
| |
Music04Init: | |
LBC89: LDA #$B3 ;Duty cycle and volume data for SQ1 and SQ2. | |
| |
XYMusicInit: | |
LBC8B:* TAX ;Duty cycle and volume data for SQ1. | |
LBC8C: TAY ;Duty cycle and volume data for SQ2. | |
| |
LBC8D:* JSR SetVolumeAndDisableSweep ;($B9E4)Set duty cycle and volume data for SQ1 and SQ2. | |
LBC90: JSR InitializeMusic ;($BF19)Setup music registers. | |
LBC93: JMP LoadCurrentMusicFrameData ;($BAA5)Load info for current frame of music data. | |
| |
Music03Init: | |
LBC96: LDA #$34 ;Duty cycle and volume data for SQ1 and SQ2. | |
LBC98: BNE -- ;Branch always | |
| |
Music02Init: | |
LBC9A: LDA #$F4 ;Duty cycle and volume data for SQ1 and SQ2. | |
LBC9C: BNE -- ;Branch always | |
| |
Music05Init: | |
LBC9E: LDX #$F5 ;Duty cycle and volume data for SQ1. | |
LBCA0: LDY #$F6 ;Duty cycle and volume data for SQ2. | |
LBCA2: BNE - ;Branch always | |
| |
Music01Init: | |
LBCA4: LDX #$B6 ;Duty cycle and volume data for SQ1. | |
LBCA6: LDY #$F6 ;Duty cycle and volume data for SQ2. | |
LBCA8: BNE - ;Branch always | |
| |
Music00Init: | |
LBCAA: LDX #$92 ;Duty cycle and volume data for SQ1. | |
LBCAC: LDY #$96 ;Duty cycle and volume data for SQ2. | |
LBCAE: BNE - ;Branch always | |
| |
;The following address table provides starting addresses of the volume data tables below: | |
VolumeCntrlAddressTbl: | |
LBCB0: .word $BCBA, $BCC5, $BCCF, $BCDA, $BD03 | |
| |
VolumeDataTbl1: | |
LBCBA: .byte $01, $02, $02, $03, $03, $04, $05, $06, $07, $08, $FF | |
| |
VolumeDataTbl2: | |
LBCC5: .byte $02, $04, $05, $06, $07, $08, $07, $06, $05, $FF | |
| |
VolumeDataTbl3: | |
LBCCF: .byte $00, $0D, $09, $07, $06, $05, $05, $05, $04, $04, $FF | |
| |
VolumeDataTbl4: | |
LBCDA: .byte $02, $06, $07, $07, $07, $06, $06, $06, $06, $05, $05, $05, $04, $04, $04, $03 | |
LBCEA: .byte $03, $03, $03, $02, $03, $03, $03, $03, $03, $02, $02, $02, $02, $02, $02, $02 | |
LBCFA: .byte $02, $02, $02, $01, $01, $01, $01, $01, $F0 | |
| |
VolumeDataTbl5: | |
LBD03: .byte $0A, $0A, $09, $08, $07, $06, $05, $04, $03, $02, $07, $07, $06, $05, $04, $04 | |
LBD13: .byte $03, $02, $02, $02, $05, $05, $05, $04, $03, $02, $02, $02, $01, $01, $04, $04 | |
LBD23: .byte $03, $02, $01, $02, $02, $01, $01, $01, $02, $02, $02, $01, $01, $F0 | |
| |
;The init music table loads addresses $062B thru $0637 with the initial data needed to play the | |
;selected music. The data for each entry in the table have the following format: | |
;.byte $xx, $xx, $xx, $xx, $xx : .word $xxxx, $xxxx, $xxxx, $xxxx. | |
;The first five bytes have the following functions: | |
;Byte 0=index to proper note length table. Will be either #$00, #$0B or #$17. | |
;Byte 1=Repeat music byte. #$00=no repeat, any other value and the music repeats. | |
;Byte 2=Controls length counter for triangle channel. | |
;Byte 3=Volume control byte for SQ1. | |
;Byte 4=Volume control byte for SQ2. | |
;Address 0=Base address of SQ1 music data. | |
;Address 1=Base address of SQ2 music data. | |
;Address 2=Base address of triangle music data. | |
;Address 3=Base address of noise music data. | |
| |
InitMusicTbl: | |
| |
;Mother brain music. | |
LBD31: .byte $0B, $FF, $F5, $00, $00 | |
LBD36: .word $B18C, $B18E, $B161, $0000 | |
| |
;Escape music. | |
LBD3E: .byte $0B, $FF, $00, $02, $02 | |
LBD43: .word $B04D, $B000, $B0CF, $B15A | |
| |
;Norfair music(not used this memory page). | |
LBD4B: .byte $0B, $FF, $F0, $04, $04 | |
LBD50: .word $0100, $0300, $0500, $0700 | |
| |
;Kraid area music(not used this memory page). | |
LBD58: .byte $00, $FF, $F0, $00, $00 | |
LBD5D: .word $0100, $0300, $0500, $0000 | |
| |
;Item room music. | |
LBD65: .byte $0B, $FF, $03, $00, $00 | |
LBD6A: .word $BDDA, $BDDC, $BDCD, $0000 | |
| |
;Ridley area music(not used this memory page). | |
LBD72: .byte $0B, $FF, $F0, $01, $01 | |
LBD77: .word $0100, $0300, $0500, $0000 | |
| |
;End game music(not used this memory page). | |
LBD7F: .byte $17, $00, $00, $02, $01 | |
LBD84: .word $0100, $0300, $0500, $0700 | |
| |
;Intro music(not used this memory page). | |
LBD8C: .byte $17, $00, $F0, $02, $05 | |
LBD91: .word $0100, $0300, $0500, $0700 | |
| |
;Fade in music | |
LBD99: .byte $0B, $00, $F0, $02, $00 | |
LBD9E: .word $BE3E, $BE1D, $BE36, $0000 | |
| |
;Power up music | |
LBDA6: .byte $00, $00, $F0, $01, $00 | |
LBDAB: .word $BDF7, $BE0D, $BE08, $0000 | |
| |
;Brinstar music(not used this memory page). | |
LBDB3: .byte $0B, $FF, $00, $02, $03 | |
LBDB8: .word $0100, $0300, $0500, $0700 | |
| |
;Tourian music | |
LBDC0: .byte $0B, $FF, $03, $00, $00 | |
LBDC5: .word $BE59, $BE47, $BE62, $0000 | |
| |
ItemRoomTriangleIndexData: | |
LBDCD: .byte $C8 ; | |
LBDCE: .byte $B0 ;3/32 seconds + | |
LBDCF: .byte $38 ;E3 | | |
LBDD0: .byte $3A ;F3 | | |
LBDD1: .byte $3C ;F#3 | | |
LBDD2: .byte $3E ;G3 | | |
LBDD3: .byte $40 ;Ab3 | Repeat 8 times | |
LBDD4: .byte $3E ;G3 | | |
LBDD5: .byte $3C ;F#3 | | |
LBDD6: .byte $3A ;F3 | | |
LBDD7: .byte $B6 ;1 3/16 seconds | | |
LBDD8: .byte $02 ;no sound + | |
LBDD9: .byte $FF ; | |
| |
ItemRoomSQ1IndexData: | |
LBDDA: .byte $B8 ;1/4 seconds | |
LBDDB: .byte $02 ;No sound | |
| |
ItemRoomSQ2IndexData: | |
LBDDC: .byte $B3 ;3/4 seconds | |
LBDDD: .byte $02 ;No sound | |
LBDDE: .byte $B2 ;3/8 seconds | |
LBDDF: .byte $74 ;A#6 | |
LBDE0: .byte $02 ;No sound | |
LBDE1: .byte $6A ;F5 | |
LBDE2: .byte $02 ;No sound | |
LBDE3: .byte $72 ;A6 | |
LBDE4: .byte $02 ;No sound | |
LBDE5: .byte $62 ;C#5 | |
LBDE6: .byte $B4 ;1 1/2 seconds | |
LBDE7: .byte $02 ;No sound | |
LBDE8: .byte $B2 ;3/8 seconds | |
LBDE9: .byte $60 ;C5 | |
LBDEA: .byte $02 ;No sound | |
LBDEB: .byte $6C ;F#5 | |
LBDEC: .byte $02 ;No sound | |
LBDED: .byte $76 ;B6 | |
LBDEE: .byte $B3 ;3/4 seconds | |
LBDEF: .byte $02 ;No sound | |
LBDF0: .byte $B2 ;3/8 seconds | |
LBDF1: .byte $7E ;F6 | |
LBDF2: .byte $02 ;No sound | |
LBDF3: .byte $7C ;D6 | |
LBDF4: .byte $B3 ;3/4 seconds | |
LBDF5: .byte $02 ;No sound | |
LBDF6: .byte $00 ;End item room music. | |
| |
PowerUpSQ1IndexData: | |
LBDF7: .byte $B3 ;1/2 seconds | |
LBDF8: .byte $48 ;C4 | |
LBDF9: .byte $42 ;A4 | |
LBDFA: .byte $B2 ;1/4 seconds | |
LBDFB: .byte $3E ;G3 | |
LBDFC: .byte $38 ;E3 | |
LBDFD: .byte $30 ;C3 | |
LBDFE: .byte $38 ;E3 | |
LBDFF: .byte $4C ;D4 | |
LBE00: .byte $44 ;A#4 | |
LBE01: .byte $3E ;G3 | |
LBE02: .byte $36 ;D#3 | |
LBE03: .byte $C8 ; | |
LBE04: .byte $B0 ;1/16 seconds + | |
LBE05: .byte $38 ;E3 | Repeat 8 times | |
LBE06: .byte $3C ;F#3 + | |
LBE07: .byte $FF | |
| |
PowerUpTriangleIndexData: | |
LBE08: .byte $B4 ;1 second | |
LBE09: .byte $2C ;A#3 | |
LBE0A: .byte $2A ;A3 | |
LBE0B: .byte $1E ;D#2 | |
LBE0C: .byte $1C ;D2 | |
| |
PowerUpSQ2IndexData: | |
LBE0D: .byte $B2 ;1/4 seconds | |
LBE0E: .byte $22 ;F2 | |
LBE0F: .byte $2C ;A#3 | |
LBE10: .byte $30 ;C3 | |
LBE11: .byte $34 ;D3 | |
LBE12: .byte $38 ;E3 | |
LBE13: .byte $30 ;C3 | |
LBE14: .byte $26 ;G2 | |
LBE15: .byte $30 ;C3 | |
LBE16: .byte $3A ;F3 | |
LBE17: .byte $34 ;D3 | |
LBE18: .byte $2C ;A#3 | |
LBE19: .byte $26 ;G2 | |
LBE1A: .byte $B4 ;1 second | |
LBE1B: .byte $2A ;A3 | |
LBE1C: .byte $00 ;End power up music. | |
| |
FadeInSQ2IndexData: | |
LBE1D: .byte $C4 | |
LBE1E: .byte $B0 ;3/32 seconds + | |
LBE1F: .byte $3E ;G3 | Repeat 4 times | |
LBE20: .byte $30 ;C3 + | |
LBE21: .byte $FF ; | |
LBE22: .byte $C4 ; | |
LBE23: .byte $42 ;A4 + Repeat 4 times | |
LBE24: .byte $30 ;C3 + | |
LBE25: .byte $FF ; | |
LBE26: .byte $C4 ; | |
LBE27: .byte $3A ;F3 + Repeat 4 times | |
LBE28: .byte $2C ;A#3 + | |
LBE29: .byte $FF ; | |
LBE2A: .byte $C4 ; | |
LBE2B: .byte $38 ;E3 + Repeat 4 times | |
LBE2C: .byte $26 ;G2 + | |
LBE2D: .byte $FF ; | |
LBE2E: .byte $C4 ; | |
LBE2F: .byte $34 ;D3 + Repeat 4 times | |
LBE30: .byte $20 ;E2 + | |
LBE31: .byte $FF ; | |
LBE32: .byte $E0 ; | |
LBE33: .byte $34 ;D3 + Repeat 32 times | |
LBE34: .byte $24 ;F#2 + | |
LBE35: .byte $FF ; | |
| |
FadeInTriangleIndexData: | |
LBE36: .byte $B3 ;3/4 seconds | |
LBE37: .byte $36 ;D#3 | |
LBE38: .byte $34 ;D3 | |
LBE39: .byte $30 ;C3 | |
LBE3A: .byte $2A ;A3 | |
LBE3B: .byte $B4 ;1 1/2 seconds | |
LBE3C: .byte $1C ;D2 | |
LBE3D: .byte $1C ;D2 | |
| |
FadeInSQ1IndexData: | |
LBE3E: .byte $B3 ;3/4 seconds | |
LBE3F: .byte $34 ;D3 | |
LBE40: .byte $3A ;F3 | |
LBE41: .byte $34 ;D3 | |
LBE42: .byte $30 ;C3 | |
LBE43: .byte $B4 ;1 1/2 seconds | |
LBE44: .byte $2A ;A3 | |
LBE45: .byte $2A ;A3 | |
LBE46: .byte $00 ;End fade in music. | |
| |
TourianSQ2IndexData: | |
LBE47: .byte $B4 ;1 1/2 seconds | |
LBE48: .byte $12 ;A2 | |
LBE49: .byte $B3 ;3/4 seconds | |
LBE4A: .byte $10 ;Ab1 | |
LBE4B: .byte $18 ;C2 | |
LBE4C: .byte $16 ;B2 | |
LBE4D: .byte $0A ;F1 | |
LBE4E: .byte $B4 ;1 1/2 seconds | |
LBE4F: .byte $14 ;A#2 | |
LBE50: .byte $12 ;A2 | |
LBE51: .byte $B3 ;3/4 seconds | |
LBE52: .byte $10 ;Ab1 | |
LBE53: .byte $06 ;D1 | |
LBE54: .byte $0E ;G1 | |
LBE55: .byte $04 ;C#1 | |
LBE56: .byte $B4 ;1 1/2 seconds | |
LBE57: .byte $0C ;F#1 | |
LBE58: .byte $00 ;End Tourian music. | |
| |
TourianSQ1IndexData: | |
LBE59: .byte $E0 ; | |
LBE5A: .byte $B0 ;3/32 seconds + | |
LBE5B: .byte $54 ;F#4 | | |
LBE5C: .byte $4E ;D#4 | | |
LBE5D: .byte $48 ;C4 | Repeat 32 times | |
LBE5E: .byte $42 ;A4 | | |
LBE5F: .byte $48 ;C4 | | |
LBE60: .byte $4E ;D#4 + | |
LBE61: .byte $FF ; | |
| |
TourianTriangleIndexData: | |
LBE62: .byte $E0 ; | |
LBE63: .byte $B3 ;3/4 seconds + | |
LBE64: .byte $02 ;No sound | | |
LBE65: .byte $B0 ;3/32 seconds | | |
LBE66: .byte $3C ;F#3 | | |
LBE67: .byte $40 ;Ab3 | | |
LBE68: .byte $44 ;A#4 | | |
LBE69: .byte $4A ;C#4 | | |
LBE6A: .byte $4E ;D#4 | | |
LBE6B: .byte $54 ;F#4 | | |
LBE6C: .byte $58 ;Ab4 | Repeat 32 times | |
LBE6D: .byte $5C ;A#5 | | |
LBE6E: .byte $62 ;C#5 | | |
LBE6F: .byte $66 ;D#5 | | |
LBE70: .byte $6C ;F#5 | | |
LBE71: .byte $70 ;Ab5 | | |
LBE72: .byte $74 ;A#6 | | |
LBE73: .byte $7A ;C#6 | | |
LBE74: .byte $B3 ;3/4 seconds | | |
LBE75: .byte $02 ;No sound + | |
LBE76: .byte $FF | |
| |
;The following table contains the musical notes used by the music player. The first byte is | |
;the period high information(3 bits) and the second byte is the period low information(8 bits). | |
;The formula for figuring out the frequency is as follows: 1790000/16/(hhhllllllll + 1) | |
| |
MusicNotesTbl: | |
LBE77: .byte $07 ;55.0Hz (A1) Index #$00 (Not used) | |
LBE78: .byte $F0 ; | |
| |
LBE79: .byte $00 ;No sound Index #$02 | |
LBE7A: .byte $00 ; | |
| |
LBE7B: .byte $06 ;69.3Hz (C#2) Index #$04 | |
LBE7C: .byte $4E ; | |
| |
LBE7D: .byte $05 ;73.4Hz (D2) Index #$06 | |
LBE7E: .byte $F3 ; | |
| |
LBE7F: .byte $05 ;82.4Hz (E2) Index #$08 | |
LBE80: .byte $4D ; | |
| |
LBE81: .byte $05 ;87.3Hz (F2) Index #$0A | |
LBE82: .byte $01 ; | |
| |
LBE83: .byte $04 ;92.5Hz (F#2) Index #$0C | |
LBE84: .byte $B9 ; | |
| |
LBE85: .byte $04 ;98.0Hz (G2) Index #$0E | |
LBE86: .byte $75 ; | |
| |
LBE87: .byte $04 ;103.8Hz (Ab2) Index #$10 | |
LBE88: .byte $35 ; | |
| |
LBE89: .byte $03 ;110.0Hz (A2) Index #$12 | |
LBE8A: .byte $F8 ; | |
| |
LBE8B: .byte $03 ;116.5Hz (A#2) Index #$14 | |
LBE8C: .byte $BF ; | |
| |
LBE8D: .byte $03 ;123.5Hz (B2) Index #$16 | |
LBE8E: .byte $89 ; | |
| |
LBE8F: .byte $03 ;130.7Hz (C3) Index #$18 | |
LBE90: .byte $57 ; | |
| |
LBE91: .byte $03 ;138.5Hz (C#3) Index #$1A | |
LBE92: .byte $27 ; | |
| |
LBE93: .byte $02 ;146.8Hz (D3) Index #$1C | |
LBE94: .byte $F9 ; | |
| |
LBE95: .byte $02 ;155.4Hz (D#3) Index #$1E | |
LBE96: .byte $CF ; | |
| |
LBE97: .byte $02 ;164.8Hz (E3) Index #$20 | |
LBE98: .byte $A6 ; | |
| |
LBE99: .byte $02 ;174.5Hz (F3) Index #$22 | |
LBE9A: .byte $80 ; | |
| |
LBE9B: .byte $02 ;184.9Hz (F#3) Index #$24 | |
LBE9C: .byte $5C ; | |
| |
LBE9D: .byte $02 ;196.0Hz (G3) Index #$26 | |
LBE9E: .byte $3A ; | |
| |
LBE9F: .byte $02 ;207.6Hz (Ab3) Index #$28 | |
LBEA0: .byte $1A ; | |
| |
LBEA1: .byte $01 ;219.8Hz (A3) Index #$2A | |
LBEA2: .byte $FC ; | |
| |
LBEA3: .byte $01 ;233.1Hz (A#3) Index #$2C | |
LBEA4: .byte $DF ; | |
| |
LBEA5: .byte $01 ;247.0Hz (B3) Index #$2E | |
LBEA6: .byte $C4 ; | |
| |
LBEA7: .byte $01 ;261.4Hz (C4) Index #$30 | |
LBEA8: .byte $AB ; | |
| |
LBEA9: .byte $01 ;276.9Hz (C#4) Index #$32 | |
LBEAA: .byte $93 ; | |
| |
LBEAB: .byte $01 ;293.6Hz (D4) Index #$34 | |
LBEAC: .byte $7C ; | |
| |
LBEAD: .byte $01 ;310.8Hz (D#4) Index #$36 | |
LBEAE: .byte $67 ; | |
| |
LBEAF: .byte $01 ;330.0Hz (E4) Index #$38 | |
LBEB0: .byte $52 ; | |
| |
LBEB1: .byte $01 ;349.6Hz (F4) Index #$3A | |
LBEB2: .byte $3F ; | |
| |
LBEB3: .byte $01 ;370.4Hz (F#4) Index #$3C | |
LBEB4: .byte $2D ; | |
| |
LBEB5: .byte $01 ;392.5Hz (G4) Index #$3E | |
LBEB6: .byte $1C ; | |
| |
LBEB7: .byte $01 ;415.9Hz (Ab4) Index #$40 | |
LBEB8: .byte $0C ; | |
| |
LBEB9: .byte $00 ;440.4Hz (A4) Index #$42 | |
LBEBA: .byte $FD ; | |
| |
LBEBB: .byte $00 ;468.1Hz (A#4) Index #$44 | |
LBEBC: .byte $EE ; | |
| |
LBEBD: .byte $00 ;495.0Hz (B4) Index #$46 | |
LBEBE: .byte $E1 ; | |
| |
LBEBF: .byte $00 ;525.2Hz (C5) Index #$48 | |
LBEC0: .byte $D4 ; | |
| |
LBEC1: .byte $00 ;556.6Hz (C#5) Index #$4A | |
LBEC2: .byte $C8 ; | |
| |
LBEC3: .byte $00 ;588.8Hz (D5) Index #$4C | |
LBEC4: .byte $BD ; | |
| |
LBEC5: .byte $00 ;625.0Hz (D#5) Index #$4E | |
LBEC6: .byte $B2 ; | |
| |
LBEC7: .byte $00 ;662.0Hz (E5) Index #$50 | |
LBEC8: .byte $A8 ; | |
| |
LBEC9: .byte $00 ;699.2Hz (F5) Index #$52 | |
LBECA: .byte $9F ; | |
| |
LBECB: .byte $00 ;740.9Hz (F#5) Index #$54 | |
LBECC: .byte $96 ; | |
| |
LBECD: .byte $00 ;787.9Hz (G5) Index #$56 | |
LBECE: .byte $8D ; | |
| |
LBECF: .byte $00 ;834.9Hz (Ab5) Index #$58 | |
LBED0: .byte $85 ; | |
| |
LBED1: .byte $00 ;880.9HZ (A5) Index #$5A | |
LBED2: .byte $7E ; | |
| |
LBED3: .byte $00 ;940.1Hz (A#5) Index #$5C | |
LBED4: .byte $76 ; | |
| |
LBED5: .byte $00 ;990.0Hz (B5) Index #$5E | |
LBED6: .byte $70 ; | |
| |
LBED7: .byte $00 ;1055Hz (C6) Index #$60 | |
LBED8: .byte $69 ; | |
| |
LBED9: .byte $00 ;1118Hz (C#6) Index #$62 | |
LBEDA: .byte $63 ; | |
| |
LBEDB: .byte $00 ;1178Hz (D6) Index #$64 | |
LBEDC: .byte $5E ; | |
| |
LBEDD: .byte $00 ;1257Hz (D#6) Index #$66 | |
LBEDE: .byte $58 ; | |
| |
LBEDF: .byte $00 ;1332Hz (E6) Index #$68 | |
LBEE0: .byte $53 ; | |
| |
LBEE1: .byte $00 ;1398Hz (F6) Index #$6A | |
LBEE2: .byte $4F ; | |
| |
LBEE3: .byte $00 ;1492Hz (F#6) Index #$6C | |
LBEE4: .byte $4A ; | |
| |
LBEE5: .byte $00 ;1576Hz (G6) Index #$6E | |
LBEE6: .byte $46 ; | |
| |
LBEE7: .byte $00 ;1670Hz (Ab6) Index #$70 | |
LBEE8: .byte $42 ; | |
| |
LBEE9: .byte $00 ;1776Hz (A6) Index #$72 | |
LBEEA: .byte $3E ; | |
| |
LBEEB: .byte $00 ;1896Hz (A#6) Index #$74 | |
LBEEC: .byte $3A ; | |
| |
LBEED: .byte $00 ;1998Hz (B6) Index #$76 | |
LBEEE: .byte $37 ; | |
| |
LBEEF: .byte $00 ;2111Hz (C7) Index #$78 | |
LBEF0: .byte $34 ; | |
| |
LBEF1: .byte $00 ;2238Hz (C#7) Index #$7A | |
LBEF2: .byte $31 ; | |
| |
LBEF3: .byte $00 ;2380Hz (D7) Index #$7C | |
LBEF4: .byte $2E ; | |
| |
LBEF5: .byte $00 ;2796Hz (F7) Index #$7E | |
LBEF6: .byte $27 ; | |
| |
;The following tables are used to load the music frame count addresses ($0640 thru $0643). The | |
;larger the number, the longer the music will play a solid note. The number represents how | |
;many frames the note will play. There is a small discrepancy in time length because the | |
;Nintendo runs at 60 frames pers second and I am using 64 frames per second to make the | |
;numbers below divide more evenly. | |
| |
;Used by power up music and Kraid area music. | |
| |
NoteLengths0Tbl: | |
LBEF7: .byte $04 ;About 1/16 seconds ($B0) | |
LBEF8: .byte $08 ;About 1/8 seconds ($B1) | |
LBEF9: .byte $10 ;About 1/4 seconds ($B2) | |
LBEFA: .byte $20 ;About 1/2 seconds ($B3) | |
LBEFB: .byte $40 ;About 1 seconds ($B4) | |
LBEFC: .byte $18 ;About 3/8 seconds ($B5) | |
LBEFD: .byte $30 ;About 3/4 seconds ($B6) | |
LBEFE: .byte $0C ;About 3/16 seconds ($B7) | |
LBEFF: .byte $0B ;About 11/64 seconds ($B8) | |
LBF00: .byte $05 ;About 5/64 seconds ($B9) | |
LBF01: .byte $02 ;About 1/32 seconds ($BA) | |
| |
;Used by item room, fade in, Brinstar music, Ridley area music, Mother brain music, | |
;escape music, Norfair music and Tourian music. | |
| |
NoteLengths1Tbl: | |
LBF02: .byte $06 ;About 3/32 seconds ($B0) | |
LBF03: .byte $0C ;About 3/16 seconds ($B1) | |
LBF04: .byte $18 ;About 3/8 seconds ($B2) | |
LBF05: .byte $30 ;About 3/4 seconds ($B3) | |
LBF06: .byte $60 ;About 1 1/2 seconds ($B4) | |
LBF07: .byte $24 ;About 9/16 seconds ($B5) | |
LBF08: .byte $48 ;About 1 3/16 seconds ($B6) | |
LBF09: .byte $12 ;About 9/32 seconds ($B7) | |
LBF0A: .byte $10 ;About 1/4 seconds ($B8) | |
LBF0B: .byte $08 ;About 1/8 seconds ($B9) | |
LBF0C: .byte $03 ;About 3/64 seconds ($BA) | |
| |
;Used by intro and end game music. | |
| |
NoteLengths2Tbl: | |
LBF0D: .byte $10 ;About 1/4 seconds ($B0) | |
LBF0E: .byte $07 ;About 7/64 seconds ($B1) | |
LBF0F: .byte $0E ;About 7/32 seconds ($B2) | |
LBF10: .byte $1C ;About 7/16 seconds ($B3) | |
LBF11: .byte $38 ;About 7/8 seconds ($B4) | |
LBF12: .byte $70 ;About 1 13/16 seconds ($B5) | |
LBF13: .byte $2A ;About 21/32 seconds ($B6) | |
LBF14: .byte $54 ;About 1 5/16 seconds ($B7) | |
LBF15: .byte $15 ;About 21/64 seconds ($B8) | |
LBF16: .byte $12 ;About 9/32 seconds ($B9) | |
LBF17: .byte $02 ;About 1/32 seconds ($BA) | |
LBF18: .byte $03 ;About 3/64 seconds ($BB) | |
| |
InitializeMusic: | |
LBF19: JSR CheckMusicFlags ;($B3FC)Check to see if restarting current music. | |
LBF1C: LDA CurrentSFXFlags ;Load current SFX flags and store CurrentMusic address. | |
LBF1F: STA CurrentMusic ; | |
LBF22: LDA MusicInitIndex ; | |
LBF25: TAY ; | |
LBF26: LDA InitMusicIndexTbl,Y ;($BBFA)Find index for music in InitMusicInitIndexTbl. | |
LBF29: TAY ; | |
LBF2A: LDX #$00 ; | |
| |
LBF2C:* LDA InitMusicTbl,Y ;Base is $BD31. | |
LBF2F: STA NoteLengthTblOffset,X ; | |
LBF32: INY ;The following loop repeats 13 times to--> | |
LBF33: INX ;load the initial music addresses --> | |
LBF34: TXA ;(registers $062B thru $0637). | |
LBF35: CMP #$0D ; | |
LBF37: BNE - ; | |
| |
LBF39: LDA #$01 ;Resets addresses $0640 thru $0643 to #$01.--> | |
LBF3B: STA SQ1MusicFrameCount ;These addresses are used for counting the--> | |
LBF3E: STA SQ2MusicFrameCount ;number of frames music channels have been playing. | |
LBF41: STA TriangleMusicFrameCount ; | |
LBF44: STA NoiseMusicFrameCount ; | |
LBF47: LDA #$00 ; | |
LBF49: STA SQ1MusicIndexIndex ; | |
LBF4C: STA SQ2MusicIndexIndex ;Resets addresses $0638 thru $063B to #$00.--> | |
LBF4F: STA TriangleMusicIndexIndex ;These are the index to find sound channel data index. | |
LBF52: STA NoiseMusicIndexIndex ; | |
LBF55: RTS ; | |
| |
;The following data is a repeat of the above routine and is not used. | |
| |
LBF56: .byte $10, $07, $0E, $1C, $38, $70, $2A, $54, $15, $12, $02, $03, $20, $2C, $B4, $AD | |
LBF66: .byte $4D, $06, $8D, $8D, $06, $AD, $5E, $06, $A8, $B9, $2A, $BC, $A8, $A2, $00, $B9 | |
LBF76: .byte $61, $BD, $9D, $2B, $06, $C8, $E8, $8A, $C9, $0D, $D0, $F3, $A9, $01, $8D, $40 | |
LBF86: .byte $06, $8D, $41, $06, $8D, $42, $06, $8D, $43, $06, $A9, $00, $8D, $38, $06, $8D | |
LBF96: .byte $39, $06, $8D, $3A, $06, $8D, $3B, $06, $60, $FF, $00, $00, $00, $00, $00, $00 | |
LBFA6: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
| |
;----------------------------------------------[ RESET ]-------------------------------------------- | |
| |
RESET: | |
LBFB0: SEI ;Disables interrupt. | |
LBFB1: CLD ;Sets processor to binary mode. | |
LBFB2: LDX #$00 ; | |
LBFB4: STX PPUControl0 ;Clear PPU control registers. | |
LBFB7: STX PPUControl1 ; | |
LBFBA:* LDA PPUStatus ; | |
LBFBD: BPL - ;Wait for VBlank. | |
LBFBF:* LDA PPUStatus ; | |
LBFC2: BPL - ; | |
LBFC4: ORA #$FF ; | |
LBFC6: STA MMC1Reg0 ;Reset MMC1 chip.--> | |
LBFC9: STA MMC1Reg1 ;(MSB is set). | |
LBFCC: STA MMC1Reg2 ; | |
LBFCF: STA MMC1Reg3 ; | |
LBFD2: JMP Startup ;($C01A)Does preliminry housekeeping. | |
| |
;The following data is not used. | |
| |
LBFD5: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00 | |
LBFE5: .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 | |
LBFF5: .byte $00, $00, $00, $00, $00 | |
| |
;----------------------------------------[ Interrupt vectors ]-------------------------------------- | |
| |
LBFFA: .word NMI ;($C0D9)NMI vector. | |
LBFFC: .word RESET ;($FFB0)Reset vector. | |
LBFFE: .word RESET ;($FFB0)IRQ vector. | |
</code> | |