This shows you the differences between two versions of the page.
metroid:asm:brinstar_page [2015/02/28 22:59] – external edit 127.0.0.1 | metroid:asm:brinstar_page [2015/04/20 23:05] (current) – removed gf_kennon | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | The Brinstar bank includes code and data for Brinstar. | ||
- | < | ||
- | ; METROID source code | ||
- | ; ------------------- | ||
- | ; MAIN PROGRAMMERS | ||
- | ; HAI YUKAMI | ||
- | ; ZARU SOBAJIMA | ||
- | ; GPZ SENGOKU | ||
- | ; N.SHIOTANI | ||
- | ; | ||
- | ; (C) 1986 NINTENDO | ||
- | ; | ||
- | ;Commented by Dirty McDingus (nmikstas@yahoo.com) | ||
- | ; | ||
- | ;Can be reassembled using Ophis. | ||
- | ;Last updated: 3/9/2010 | ||
- | ;Hosted on wiki.metroidconstruction.com, | ||
- | |||
- | ;Brinstar (memory page 1) | ||
- | |||
- | .org $8000 | ||
- | |||
- | .include " | ||
- | |||
- | ; | ||
- | |||
- | .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 | ||
- | |||
- | ; | ||
- | |||
- | L8000: JMP $F410 | ||
- | L8003: JMP $F438 | ||
- | L8006: JMP $F416 | ||
- | L8009: JMP $F852 | ||
- | L800C: JMP UpdateEnemyAnim ; | ||
- | L800F: JMP $F68D | ||
- | L8012: JMP $F83E | ||
- | L8015: JMP $F85A | ||
- | L8018: JMP $FBB9 | ||
- | L801B: JMP $FB88 | ||
- | L801E: JMP $FBCA | ||
- | L8021: JMP $F870 | ||
- | L8024: JMP ChooseRoutine ; | ||
- | 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 ; | ||
- | L8045: JMP Base10Subtract ; | ||
- | |||
- | L8048: | ||
- | |||
- | L8058: LDX PageIndex | ||
- | L805A: LDA $0405,X | ||
- | L805D: | ||
- | L805E: BMI ++++++++ | ||
- | L8060: LDA EnStatus,X | ||
- | L8063: CMP #$02 | ||
- | L8065: BNE ++++++++ | ||
- | L8067: JSR $8244 | ||
- | L806A: LDA $00 | ||
- | L806C: BPL ++ | ||
- | L806E: JSR TwosCompliment ; | ||
- | 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 ; | ||
- | 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, | ||
- | L80B3: LDA $977B,Y | ||
- | L80B6: | ||
- | 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: | ||
- | 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: | ||
- | L80EE: | ||
- | 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: | ||
- | L8117: ROR $0402,X | ||
- | L811A: ROR EnCounter,X | ||
- | L811D: JMP $812F | ||
- | L8120: JSR $81B1 | ||
- | L8123: LDA $977B,Y | ||
- | L8126: | ||
- | L8127: | ||
- | 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: | ||
- | L8150: ROR $0403,X | ||
- | L8153: ROR $0407,X | ||
- | L8156: JMP $8169 | ||
- | L8159: JSR $81C0 | ||
- | L815C: BEQ $8169 | ||
- | L815E: LDA $977B,Y | ||
- | L8161: | ||
- | 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: | ||
- | 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: | ||
- | L81A4: | ||
- | 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: | ||
- | 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: | ||
- | 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: | ||
- | |||
- | L822B: LDA $0405,X | ||
- | L822E: BPL $8232 | ||
- | L8230: | ||
- | L8231: | ||
- | L8232: | ||
- | L8233: LDA $0408,X | ||
- | L8236: | ||
- | L8237: | ||
- | L8238: | ||
- | 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: | ||
- | L8280: SBC EnDelay,X | ||
- | L8283: BNE $8290 | ||
- | L8285: STA EnDelay,X | ||
- | L8288: | ||
- | L8289: | ||
- | L828A: | ||
- | L828B: STA EnCounter,X | ||
- | L828E: BNE $825B | ||
- | L8290: INC EnDelay,X | ||
- | L8293: | ||
- | L8294: LDA ($81),Y | ||
- | L8296: | ||
- | L8297: | ||
- | L8298: JSR Adiv32 ; | ||
- | L829B: | ||
- | L829C: BCC $82A2 | ||
- | L829E: EOR #$FF | ||
- | L82A0: ADC #$00 | ||
- | L82A2: STA $00 | ||
- | L82A4: RTS | ||
- | |||
- | L82A5: INC EnCounter,X | ||
- | L82A8: | ||
- | L82A9: LDA #$00 | ||
- | L82AB: STA $6B01,X | ||
- | L82AE: BEQ $825B | ||
- | L82B0: | ||
- | L82B1: | ||
- | 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: | ||
- | L82CB: LDA #$00 | ||
- | L82CD: STA $6B03,X | ||
- | L82D0: BEQ $82D7 | ||
- | L82D2: LDY EnCounter,X | ||
- | L82D5: | ||
- | L82D6: | ||
- | L82D7: | ||
- | L82D8: STA EnCounter,X | ||
- | L82DB: JMP $825B | ||
- | L82DE: | ||
- | L82DF: | ||
- | L82E0: | ||
- | 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, | ||
- | 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: | ||
- | L832D: LDA ($81),Y | ||
- | L832F: | ||
- | L8330: AND #$08 | ||
- | L8332: | ||
- | L8333: | ||
- | L8334: AND #$07 | ||
- | L8336: | ||
- | L8337: BEQ $833C | ||
- | L8339: JSR $C3D4 | ||
- | L833C: STA $00 | ||
- | L833E: RTS | ||
- | |||
- | L833F: LDY #$0E | ||
- | L8341: LDA $6AFE,X | ||
- | L8344: BMI $835E | ||
- | L8346: | ||
- | 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: | ||
- | 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: | ||
- | L8380: STA $0402,X | ||
- | L8383: LDA $6AFC,X | ||
- | L8386: | ||
- | 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: | ||
- | 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: | ||
- | L83BD: BPL $83D0 | ||
- | L83BF: LDA #$00 | ||
- | L83C1: | ||
- | L83C2: SBC $0407,X | ||
- | L83C5: STA $04 | ||
- | L83C7: LDA #$00 | ||
- | L83C9: SBC $0403,X | ||
- | L83CC: | ||
- | L83CD: JSR $E449 | ||
- | L83D0: LDA $04 | ||
- | L83D2: CMP $02 | ||
- | L83D4: | ||
- | 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: | ||
- | 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, | ||
- | L83FA: | ||
- | L83FB: SBC EnRadY,X | ||
- | L83FE: AND #$07 | ||
- | L8400: | ||
- | L8401: BNE $8406 | ||
- | L8403: JSR $E770 | ||
- | L8406: LDY #$00 | ||
- | L8408: STY $00 | ||
- | L840A: LDX PageIndex | ||
- | L840C: BCC $844A | ||
- | L840E: INC $00 | ||
- | L8410: LDY EnYRoomPos, | ||
- | 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: | ||
- | L842A: | ||
- | L842B: STA EnYRoomPos, | ||
- | L842E: CMP EnRadY,X | ||
- | L8431: BNE $8441 | ||
- | L8433: LDA $FC | ||
- | L8435: BEQ $843C | ||
- | L8437: JSR $8563 | ||
- | L843A: BNE $8441 | ||
- | L843C: INC EnYRoomPos, | ||
- | L843F: | ||
- | L8440: RTS | ||
- | |||
- | L8441: LDA $0405,X | ||
- | L8444: BMI $8449 | ||
- | L8446: INC $6B01,X | ||
- | L8449: | ||
- | L844A: RTS | ||
- | |||
- | L844B: LDX PageIndex | ||
- | L844D: LDA EnYRoomPos, | ||
- | L8450: | ||
- | L8451: ADC EnRadY,X | ||
- | L8454: AND #$07 | ||
- | L8456: | ||
- | L8457: BNE $845C | ||
- | L8459: JSR $E77B | ||
- | L845C: LDY #$00 | ||
- | L845E: STY $00 | ||
- | L8460: LDX PageIndex | ||
- | L8462: BCC $84A6 | ||
- | L8464: INC $00 | ||
- | L8466: LDY EnYRoomPos, | ||
- | 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: | ||
- | L8482: | ||
- | L8483: STA EnYRoomPos, | ||
- | L8486: | ||
- | 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, | ||
- | L849A: | ||
- | L849B: BCC $84A6 | ||
- | L849D: LDA $0405,X | ||
- | L84A0: BMI $84A5 | ||
- | L84A2: DEC $6B01,X | ||
- | L84A5: | ||
- | L84A6: RTS | ||
- | |||
- | L84A7: LDX PageIndex | ||
- | L84A9: LDA EnXRoomPos, | ||
- | L84AC: | ||
- | L84AD: SBC EnRadX,X | ||
- | L84B0: AND #$07 | ||
- | L84B2: | ||
- | L84B3: BNE $84B8 | ||
- | L84B5: JSR $E8F1 | ||
- | L84B8: LDY #$00 | ||
- | L84BA: STY $00 | ||
- | L84BC: LDX PageIndex | ||
- | L84BE: BCC $84FD | ||
- | L84C0: INC $00 | ||
- | L84C2: LDY EnXRoomPos, | ||
- | L84C5: BNE $84DA | ||
- | L84C7: LDA $49 | ||
- | L84C9: CMP #$02 | ||
- | L84CB: BCC $84DA | ||
- | L84CD: LDA $FD | ||
- | L84CF: BEQ $84D4 | ||
- | L84D1: JSR $8563 | ||
- | L84D4: | ||
- | L84D5: BEQ $84FD | ||
- | L84D7: JSR $855A | ||
- | L84DA: DEC EnXRoomPos, | ||
- | L84DD: LDA EnXRoomPos, | ||
- | L84E0: CMP EnRadX,X | ||
- | L84E3: BNE $84F4 | ||
- | L84E5: LDA $FD | ||
- | L84E7: BEQ $84EE | ||
- | L84E9: JSR $8563 | ||
- | L84EC: BNE $84F4 | ||
- | L84EE: INC EnXRoomPos, | ||
- | L84F1: | ||
- | L84F2: BCC $84FD | ||
- | L84F4: LDA $0405,X | ||
- | L84F7: BPL $84FC | ||
- | L84F9: INC $6B01,X | ||
- | L84FC: | ||
- | L84FD: RTS | ||
- | |||
- | L84FE: LDX PageIndex | ||
- | L8500: LDA EnXRoomPos, | ||
- | L8503: | ||
- | L8504: ADC EnRadX,X | ||
- | L8507: AND #$07 | ||
- | L8509: | ||
- | L850A: BNE $850F | ||
- | L850C: JSR $E8FC | ||
- | L850F: LDY #$00 | ||
- | L8511: STY $00 | ||
- | L8513: LDX PageIndex | ||
- | L8515: BCC $8559 | ||
- | L8517: INC $00 | ||
- | L8519: INC EnXRoomPos, | ||
- | 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, | ||
- | L8530: | ||
- | L8531: BCC $8559 | ||
- | L8533: JSR $855A | ||
- | L8536: LDA EnXRoomPos, | ||
- | L8539: | ||
- | 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, | ||
- | L854D: | ||
- | L854E: BCC $8559 | ||
- | L8550: LDA $0405,X | ||
- | L8553: BPL $8558 | ||
- | L8555: DEC $6B01,X | ||
- | L8558: | ||
- | L8559: RTS | ||
- | |||
- | L855A: LDA EnNameTable, | ||
- | L855D: EOR #$01 | ||
- | L855F: STA EnNameTable, | ||
- | L8562: RTS | ||
- | |||
- | L8563: LDA EnNameTable, | ||
- | L8566: EOR $FF | ||
- | L8568: AND #$01 | ||
- | L856A: RTS | ||
- | |||
- | L856B: EOR $0405,X | ||
- | L856E: STA $0405,X | ||
- | L8571: | ||
- | |||
- | ; | ||
- | |||
- | ;The following tables are indices into the FramePtrTable that correspond to various animations. The | ||
- | ; | ||
- | ;frames responsible for animaton Samus, her weapons and other objects. | ||
- | |||
- | ObjectAnimIndexTbl: | ||
- | |||
- | ;Samus run animation. | ||
- | L8572: | ||
- | |||
- | ;Samus front animation. | ||
- | L8576: | ||
- | |||
- | ;Samus jump out of ball animation. | ||
- | L8578: | ||
- | |||
- | ;Samus Stand animation. | ||
- | L8579: | ||
- | |||
- | ;Samus stand and fire animation. | ||
- | L857B: | ||
- | |||
- | ;Samus stand and jump animation. | ||
- | L857D: | ||
- | |||
- | ;Samus Jump animation. | ||
- | L857E: | ||
- | |||
- | ;Samus summersault animation. | ||
- | L8580: | ||
- | |||
- | ;Samus run and jump animation. | ||
- | L8585: | ||
- | |||
- | ;Samus roll animation. | ||
- | L8588: | ||
- | |||
- | ;Bullet animation. | ||
- | L858D: | ||
- | |||
- | ;Bullet hit animation. | ||
- | L858F: | ||
- | |||
- | ;Samus jump and fire animation. | ||
- | L8592: | ||
- | |||
- | ;Samus run and fire animation. | ||
- | L8594: | ||
- | |||
- | ;Samus point up and shoot animation. | ||
- | L8598: | ||
- | |||
- | ;Samus point up animation. | ||
- | L8599: | ||
- | |||
- | ;Door open animation. | ||
- | L859B: | ||
- | |||
- | ;Door close animation. | ||
- | L85A0: | ||
- | |||
- | ;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: | ||
- | |||
- | ;Samus run, point up and shoot animation 1. | ||
- | L85AD: | ||
- | |||
- | ;Samus run, point up and shoot animation 2. | ||
- | L85AF: | ||
- | |||
- | ;Samus run, point up and shoot animation 3. | ||
- | L85B1: | ||
- | |||
- | ;Samus on elevator animation 1. | ||
- | L85B3: | ||
- | |||
- | ;Samus on elevator animation 2. | ||
- | L85C2: | ||
- | |||
- | ;Samus on elevator animation 3. | ||
- | L85D1: | ||
- | |||
- | ;Samus on elevator animation 4. | ||
- | L85E0: | ||
- | |||
- | ;Wave beam animation. | ||
- | L85EF: | ||
- | |||
- | ;Bomb tick animation. | ||
- | L85F1: | ||
- | |||
- | ;Bomb explode animation. | ||
- | L85F4: | ||
- | |||
- | ;Missile left animation. | ||
- | L85FD: | ||
- | |||
- | ;Missile right animation. | ||
- | L85FF: | ||
- | |||
- | ;Missile up animation. | ||
- | L8601: | ||
- | |||
- | ;Missile explode animation. | ||
- | L8603: | ||
- | |||
- | ; | ||
- | |||
- | ;The above animation pointers provide an index into the following table | ||
- | ;for the animation sequences. | ||
- | |||
- | FramePtrTable: | ||
- | L860B: | ||
- | L861B: | ||
- | L862B: | ||
- | L863B: | ||
- | L864B: | ||
- | L865B: | ||
- | L866B: | ||
- | L867B: | ||
- | L868B: | ||
- | L869B: | ||
- | L86AB: | ||
- | L86BB: | ||
- | L86CB: | ||
- | L86DB: | ||
- | |||
- | ;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: | ||
- | L86EF: | ||
- | |||
- | ; | ||
- | |||
- | ;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. | ||
- | ;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--+ | ||
- | L86FD: | ||
- | |||
- | ;Several Samus frames. | ||
- | ; +-------+ < | ||
- | ; +-------+ < | ||
- | ; | | | ||
- | ; | | ||
- | ; | | ||
- | ; +-------+ | ||
- | ; +-------+ | ||
- | ; | | ||
- | ; +----+-+-+----+-+-+--------+ | ||
- | ; | | | | | | | | | ||
- | ; | | | | | | | | | ||
- | ; | | | | | | | | | ||
- | ; | | |2| | ||
- | ; +----+-+-+----+-+-*--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+ | ||
- | ; +--0--+ | ||
- | L8701: | ||
- | ; +--8--+ | ||
- | L8711: | ||
- | |||
- | ;Samus summersault and roll frames. | ||
- | ; +--------+--------+ | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | ||
- | ; +--------+--------+ | ||
- | ; | | | | ||
- | ; +--------+--------+ | ||
- | ; | * | | ||
- | ; | | ||
- | ; +--------+--------+ | ||
- | ; | | ||
- | ; +--------+--------+ | ||
- | ; +--0--+ | ||
- | L871F: | ||
- | |||
- | ;Samus summersault frame. | ||
- | ; +--------+--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+-*------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+ | ||
- | ; +--0--+ | ||
- | L872B: | ||
- | |||
- | ;Elevator frame. | ||
- | ; +--------+--------+--------+--------+--------+--------+--------+--------+ | ||
- | ; | | | | | | | | | | ||
- | ; | | | | | | | | | | ||
- | ; | | * | | | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+--------+--------+--------+--------+--------+ | ||
- | ; +--0--+ | ||
- | L8737: | ||
- | |||
- | ;Several projectile frames. | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | * | | ||
- | ; | 0| | ||
- | ; +--------+ | ||
- | ; +--0--+ | ||
- | L8747: | ||
- | |||
- | ;Power-up items and bomb explode frames. | ||
- | ; +--------+--------+ | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | ||
- | ; +--------*--------+ | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | | | ||
- | ; | | ||
- | ; +--------+--------+ | ||
- | ; +--0--+ | ||
- | L8749: | ||
- | |||
- | ;Door frames. | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 0| | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 1| | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 2| | ||
- | ; *--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 3| | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 4| | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 5| | ||
- | ; +--------+ | ||
- | ; +--0--+ | ||
- | L8751: | ||
- | |||
- | ;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. | ||
- | ;bytes start at $8769. | ||
- | ;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--+ | ||
- | L875D: | ||
- | ; +--2--+ | ||
- | L876D: | ||
- | |||
- | ;Bomb explode frame. | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; | | | | | | ||
- | ; | | | | | | ||
- | ; | | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; | | | | | | ||
- | ; | | | | | | ||
- | ; | | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; +--0--+ | ||
- | L8775: | ||
- | ; +--8--+ | ||
- | L8785: | ||
- | |||
- | ;Missile up frame. | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 0| | ||
- | ; +----*---+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | 1| | ||
- | ; +--------+ | ||
- | ; +--0--+ | ||
- | L878D: | ||
- | |||
- | ;Missile left/right and missile explode frames. | ||
- | ; +--------+--------+ | ||
- | ; | | | | | | | ||
- | ; | | | | | | | ||
- | ; | * | | | | | ||
- | ; | | ||
- | ; +--------+--------+ | ||
- | ; +--0--+ | ||
- | L8791: | ||
- | |||
- | ;Missile explode frame. | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | * | | | ||
- | ; | | ||
- | ; +--------+--------+--------+--------+ | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; +--0--+ | ||
- | L8799: | ||
- | |||
- | ;Missile explode frame. | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | ||
- | ; +--------+ | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | * | | | ||
- | ; | | ||
- | ; +--------+ | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; +--------+ | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | | ||
- | ; | | ||
- | ; +--------+ | ||
- | ; +--0--+ | ||
- | L87A5: | ||
- | |||
- | ;Statue frames. | ||
- | ; +--------+--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------+--------+ | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | | | | ||
- | ; | | ||
- | ; +--------+--------*--------+ | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; | ||
- | ; +--0--+ | ||
- | L87B1: | ||
- | ; +--8--+ | ||
- | L87C1: | ||
- | |||
- | ; | ||
- | |||
- | ;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. | ||
- | ;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. | ||
- | ;bytes until the next control byte is reached. | ||
- | ; | ||
- | ;#$FF ends the frame drawing data segment. | ||
- | ; | ||
- | ;The first 3 bytes are unique. | ||
- | ;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. | ||
- | ;as the object' | ||
- | |||
- | ;Samus run. | ||
- | L87CB: | ||
- | L87DB: | ||
- | |||
- | ;Samus run. | ||
- | L87DD: | ||
- | L87ED: | ||
- | |||
- | ;Samus run. | ||
- | L87F0: | ||
- | L8800: | ||
- | |||
- | ;Samus facing forward. | ||
- | L8802: | ||
- | L8812: | ||
- | |||
- | ;Samus stand. | ||
- | L8818: | ||
- | L8828: | ||
- | |||
- | ;Samus run and fire. | ||
- | L882C: | ||
- | L883C: | ||
- | |||
- | ;Samus run and fire. | ||
- | L883E: | ||
- | L884E: | ||
- | |||
- | ;Samus run and fire. | ||
- | L8851: | ||
- | L8861: | ||
- | |||
- | ;Samus stand and jump. | ||
- | L8863: | ||
- | L8873: | ||
- | |||
- | ;Samus jump and fire. | ||
- | L8874: | ||
- | L8884: | ||
- | |||
- | ;Samus summersault. | ||
- | L8885: | ||
- | |||
- | ;Samus summersault. | ||
- | L888F: | ||
- | |||
- | ;Samus summersault. | ||
- | L8899: | ||
- | |||
- | ;Samus summersault. | ||
- | L88A3: | ||
- | |||
- | ;Samus roll. | ||
- | L88AD: | ||
- | |||
- | ;Samus roll. | ||
- | L88B8: | ||
- | |||
- | ;Samus roll. | ||
- | L88C3: | ||
- | |||
- | ;Samus roll. | ||
- | L88CE: | ||
- | |||
- | ;Samus stand and fire. | ||
- | L88D9: | ||
- | L88E9: | ||
- | |||
- | ;Elevator. | ||
- | L88EE: | ||
- | |||
- | ;Missile right. | ||
- | L88F8: | ||
- | |||
- | ;Missile left. | ||
- | L88FE: | ||
- | |||
- | ;Missile up. | ||
- | L8904: | ||
- | |||
- | ;Bullet fire. | ||
- | L890A: | ||
- | |||
- | ;Bullet hit. | ||
- | L890F: | ||
- | |||
- | ;Samus stand and point up. | ||
- | L8914: | ||
- | L8924: | ||
- | |||
- | ;Samus from ball to pointing up. | ||
- | L8928: | ||
- | L8938: | ||
- | |||
- | ;Door closed. | ||
- | L893C: | ||
- | |||
- | ;Door open/close. | ||
- | L8948: | ||
- | |||
- | ;Samus explode. | ||
- | L8954: | ||
- | |||
- | ;Samus jump and point up. | ||
- | L8961: | ||
- | L8971: | ||
- | |||
- | ;Samus jump and point up. | ||
- | L8974: | ||
- | L8984: | ||
- | |||
- | ;Bomb explode. | ||
- | L8987: | ||
- | |||
- | ;Samus run and point up. | ||
- | L8995: | ||
- | L89A5: | ||
- | |||
- | ;Samus run and point up. | ||
- | L89A9: | ||
- | L89B9: | ||
- | |||
- | ;Samus run and point up. | ||
- | L89BE: | ||
- | L89CE: | ||
- | |||
- | ;Samus run and point up. | ||
- | L89D2: | ||
- | L89E2: | ||
- | |||
- | ;Samus point up, run and fire. | ||
- | L89E6: | ||
- | L89F6: | ||
- | |||
- | ;Samus point up, run and fire. | ||
- | L89FB: | ||
- | L8A0B: | ||
- | |||
- | ;Bomb explode. | ||
- | L8A0F: | ||
- | |||
- | ;Bomb explode. | ||
- | L8A1D: | ||
- | |||
- | ;Wave beam. | ||
- | L8A21: | ||
- | |||
- | ;Bomb explode. | ||
- | L8A26: | ||
- | L8A36: | ||
- | |||
- | ;Bomb tick. | ||
- | L8A3C: | ||
- | |||
- | ;Bomb tick. | ||
- | L8A41: | ||
- | |||
- | ;Bomb item. | ||
- | L8A46: | ||
- | |||
- | ;High jump item. | ||
- | L8A4E: | ||
- | |||
- | ;Long beam item. | ||
- | L8A56: | ||
- | |||
- | ;Screw attack item. | ||
- | L8A5E: | ||
- | |||
- | ;Maru Mari item. | ||
- | L8A66: | ||
- | |||
- | ;Varia item. | ||
- | L8A6E: | ||
- | |||
- | ;Wave beam item. | ||
- | L8A76: | ||
- | |||
- | ;Ice beam item. | ||
- | L8A7E: | ||
- | |||
- | ;Energy tank item. | ||
- | L8A86: | ||
- | |||
- | ;Missile item. | ||
- | L8A8E: | ||
- | |||
- | ;Skree burrow. | ||
- | L8A9C: | ||
- | |||
- | ;Not used. | ||
- | L8AA1: | ||
- | L8AB1: | ||
- | L8AC1: | ||
- | |||
- | ;Kraid statue. | ||
- | L8AC4: | ||
- | L8AD4: | ||
- | |||
- | ;Ridley statue. | ||
- | L8AD8: | ||
- | L8AE8: | ||
- | |||
- | ;Missile explode. | ||
- | L8AE9: | ||
- | |||
- | ;Missile explode. | ||
- | L8AF3: | ||
- | |||
- | ;Missile explode. | ||
- | L8B03: | ||
- | |||
- | ; | ||
- | |||
- | ;This function is called once when Samus first enters a door. | ||
- | |||
- | SamusEnterDoor: | ||
- | L8B13: LDA DoorStatus ; | ||
- | L8B15: BNE ++++ ; | ||
- | L8B17: LDY SamusDoorData ; | ||
- | L8B19: BEQ ++++ ; | ||
- | L8B1B: STA CurrentMissilePickups ; | ||
- | L8B1D: STA CurrentEnergyPickups ; | ||
- | L8B1F: LDA RandomNumber1 ; | ||
- | L8B21: AND # | ||
- | L8B23: STA MaxMissilePickup ; | ||
- | L8B25: | ||
- | 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 # | ||
- | L8B30: | ||
- | L8B31: | ||
- | L8B32: STA $006C,Y ; | ||
- | L8B35: LDA ScrollDir ; | ||
- | L8B37: AND #$02 ;Is Samus scrolling horizontally? | ||
- | L8B39: BNE + ;If so, branch. | ||
- | L8B3B: LDX # | ||
- | L8B3D: LDA ScrollY ; | ||
- | L8B3F: BEQ +++++ ;If so, branch. | ||
- | L8B41: LDA $FF ; | ||
- | L8B43: EOR ObjectHi ; | ||
- | L8B46: | ||
- | L8B47: BCC +++ ;If Samus is on nametable 3, branch. | ||
- | L8B49: BCS ++ ;If Samus is on nametable 0, branch to decrement x. | ||
- | |||
- | L8B4B:* LDX # | ||
- | L8B4D: LDA ObjectX ; | ||
- | L8B50: BPL ++ ;If so, branch. | ||
- | L8B52: | ||
- | |||
- | SetDoorEntryInfo: | ||
- | L8B53: | ||
- | L8B54: STA DoorScrollStatus ; | ||
- | L8B56: JSR SamusInDoor ; | ||
- | L8B59: LDA #$12 ; | ||
- | L8B5B: STA DoorDelay ; | ||
- | L8B5D: LDA SamusDoorData ; | ||
- | L8B5F: JSR Amul16 ; | ||
- | L8B62: ORA ObjAction ; | ||
- | L8B65: STA SamusDoorData ; | ||
- | L8B67: LDA #$05 ; | ||
- | L8B69: STA ObjAction ; | ||
- | L8B6C: | ||
- | |||
- | L8B6D:* JSR SetDoorEntryInfo ; | ||
- | L8B70: JSR VerticalRoomCentered ; | ||
- | |||
- | L8B73: | ||
- | |||
- | SamusInDoor: | ||
- | L8B74: ORA #$80 ;Set MSB of DoorStatus to indicate Samus has just--> | ||
- | L8B76: STA DoorStatus ; | ||
- | L8B78: | ||
- | |||
- | ; | ||
- | |||
- | L8B79: LDX #$B0 | ||
- | L8B7B:* JSR $8B87 | ||
- | L8B7E: LDA PageIndex | ||
- | L8B80: | ||
- | L8B81: SBC #$10 | ||
- | L8B83: | ||
- | L8B84: BMI - | ||
- | L8B86: RTS | ||
- | |||
- | L8B87: STX PageIndex | ||
- | L8B89: LDA ObjAction,X | ||
- | L8B8C: JSR ChooseRoutine ; | ||
- | |||
- | L8B8F: | ||
- | L8B91: | ||
- | L8B93: | ||
- | L8B95: | ||
- | L8B97: | ||
- | L8B99: | ||
- | L8B9B: | ||
- | |||
- | L8B9D: INC $0300,X | ||
- | L8BA0: LDA #$30 | ||
- | L8BA2: JSR SetProjectileAnim ; | ||
- | 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: | ||
- | L8BC4: AND #$10 | ||
- | L8BC6: EOR #$10 | ||
- | L8BC8: ORA $6B | ||
- | L8BCA: STA $6B | ||
- | L8BCC: LDA #$06 | ||
- | L8BCE: JMP $DE47 | ||
- | |||
- | L8BD1: | ||
- | |||
- | 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: | ||
- | L8BEC: BNE $8BB1 | ||
- | L8BEE: STA $0300,X | ||
- | L8BF1: LDA #$50 | ||
- | L8BF3: STA $030F,X | ||
- | L8BF6: LDA #$2C | ||
- | L8BF8: STA $0305,X | ||
- | L8BFB: | ||
- | L8BFC: SBC #$03 | ||
- | L8BFE: JMP $8C7E | ||
- | L8C01: LDA DoorStatus | ||
- | L8C03: BEQ $8C1D | ||
- | L8C05: LDA $030C | ||
- | L8C08: EOR $030C,X | ||
- | L8C0B: | ||
- | 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: | ||
- | L8C46: JSR $C2C5 | ||
- | L8C49: BCC $8C4C | ||
- | L8C4B: | ||
- | L8C4C: | ||
- | L8C4D: JSR $DC1E | ||
- | L8C50: LDA #$00 | ||
- | L8C52: STA $0300,X | ||
- | L8C55: BEQ $8C73 | ||
- | L8C57: LDA $2D | ||
- | L8C59: | ||
- | 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: | ||
- | 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: | ||
- | L8C97: JSR $C2BF | ||
- | L8C9A: EOR $91 | ||
- | L8C9C: | ||
- | 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: | ||
- | 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: | ||
- | L8CCD: EOR #$10 | ||
- | L8CCF: | ||
- | L8CD0: LDA #$06 | ||
- | L8CD2: STA $0300,X | ||
- | L8CD5: LDA #$2C | ||
- | L8CD7: STA $0305,X | ||
- | L8CDA: | ||
- | 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: | ||
- | L8CFE: LDA #$50 | ||
- | L8D00: STA $02 | ||
- | L8D02: | ||
- | L8D03: JSR $C2BF | ||
- | L8D06: AND #$01 | ||
- | L8D08: | ||
- | L8D09: LDA $8D3A,Y | ||
- | L8D0C: STA $03 | ||
- | L8D0E: LDA $030C,X | ||
- | L8D11: STA $0B | ||
- | L8D13: JSR $E96A | ||
- | L8D16: LDY #$00 | ||
- | L8D18: | ||
- | L8D19: STA ($04),Y | ||
- | L8D1B: | ||
- | L8D1C: | ||
- | L8D1D: | ||
- | L8D1E: ADC #$20 | ||
- | L8D20: | ||
- | L8D21: | ||
- | L8D22: CPY #$C0 | ||
- | L8D24: BNE $8D19 | ||
- | L8D26: LDX PageIndex | ||
- | L8D28: | ||
- | L8D29: JSR $C2C0 | ||
- | L8D2C: AND #$06 | ||
- | L8D2E: | ||
- | L8D2F: LDA $04 | ||
- | L8D31: STA $005C,Y | ||
- | L8D34: LDA $05 | ||
- | L8D36: STA $005D,Y | ||
- | L8D39: RTS | ||
- | |||
- | L8D3A: | ||
- | L8D4A: | ||
- | L8D5A: | ||
- | |||
- | ; | ||
- | |||
- | ;Partial font, "THE END". | ||
- | L8D60: | ||
- | L8D70: | ||
- | L8D80: | ||
- | L8D90: | ||
- | L8DA0: | ||
- | L8DB0: | ||
- | L8DC0: | ||
- | L8DD0: | ||
- | L8DE0: | ||
- | L8DF0: | ||
- | L8E00: | ||
- | L8E10: | ||
- | L8E20: | ||
- | L8E30: | ||
- | L8E40: | ||
- | L8E50: | ||
- | L8E60: | ||
- | L8E70: | ||
- | L8E80: | ||
- | L8E90: | ||
- | L8EA0: | ||
- | L8EB0: | ||
- | L8EC0: | ||
- | L8ED0: | ||
- | L8EE0: | ||
- | L8EF0: | ||
- | L8F00: | ||
- | L8F10: | ||
- | L8F20: | ||
- | L8F30: | ||
- | L8F40: | ||
- | L8F50: | ||
- | L8F60: | ||
- | L8F70: | ||
- | L8F80: | ||
- | L8F90: | ||
- | L8FA0: | ||
- | L8FB0: | ||
- | L8FC0: | ||
- | L8FD0: | ||
- | L8FE0: | ||
- | L8FF0: | ||
- | L9000: | ||
- | L9010: | ||
- | L9020: | ||
- | L9030: | ||
- | L9040: | ||
- | L9050: | ||
- | L9060: | ||
- | L9070: | ||
- | L9080: | ||
- | L9090: | ||
- | L90A0: | ||
- | L90B0: | ||
- | L90C0: | ||
- | L90D0: | ||
- | L90E0: | ||
- | L90F0: | ||
- | L9100: | ||
- | L9110: | ||
- | L9120: | ||
- | L9130: | ||
- | L9140: | ||
- | L9150: | ||
- | |||
- | ;Brinstar enemy tile patterns. | ||
- | L9160: | ||
- | L9170: | ||
- | L9180: | ||
- | L9190: | ||
- | L91A0: | ||
- | L91B0: | ||
- | L91C0: | ||
- | L91D0: | ||
- | L91E0: | ||
- | L91F0: | ||
- | L9200: | ||
- | L9210: | ||
- | L9220: | ||
- | L9230: | ||
- | L9240: | ||
- | L9250: | ||
- | L9260: | ||
- | L9270: | ||
- | L9280: | ||
- | L9290: | ||
- | L92A0: | ||
- | L92B0: | ||
- | L92C0: | ||
- | L92D0: | ||
- | L92E0: | ||
- | L92F0: | ||
- | L9300: | ||
- | L9310: | ||
- | L9320: | ||
- | L9330: | ||
- | L9340: | ||
- | L9350: | ||
- | L9360: | ||
- | L9370: | ||
- | L9380: | ||
- | L9390: | ||
- | L93A0: | ||
- | L93B0: | ||
- | L93C0: | ||
- | L93D0: | ||
- | L93E0: | ||
- | L93F0: | ||
- | L9400: | ||
- | L9410: | ||
- | L9420: | ||
- | L9430: | ||
- | L9440: | ||
- | L9450: | ||
- | L9460: | ||
- | L9470: | ||
- | L9480: | ||
- | L9490: | ||
- | L94A0: | ||
- | L94B0: | ||
- | L94C0: | ||
- | L94D0: | ||
- | L94E0: | ||
- | L94F0: | ||
- | L9500: | ||
- | L9510: | ||
- | L9520: | ||
- | L9530: | ||
- | L9540: | ||
- | L9550: | ||
- | |||
- | ; | ||
- | |||
- | PalPntrTbl: | ||
- | L9560: | ||
- | L9562: | ||
- | L9564: | ||
- | L9566: | ||
- | L9568: | ||
- | L956A: | ||
- | L956C: | ||
- | L956E: | ||
- | L9570: | ||
- | L9572: | ||
- | L9574: | ||
- | L9576: | ||
- | L9578: | ||
- | L957A: | ||
- | L957C: | ||
- | L957E: | ||
- | L9580: | ||
- | L9582: | ||
- | L9584: | ||
- | L9586: | ||
- | L9588: | ||
- | L958A: | ||
- | L958C: | ||
- | L958E: | ||
- | L9590: | ||
- | L9592: | ||
- | L9594: | ||
- | L9596: | ||
- | |||
- | AreaPointers: | ||
- | L9598: | ||
- | L959A: | ||
- | L959C: | ||
- | L959E: | ||
- | L95A0: | ||
- | L95A2: | ||
- | L95A4: | ||
- | L95A6: | ||
- | |||
- | L95A8: | ||
- | L95B8: | ||
- | |||
- | AreaRoutine: | ||
- | L95C3: JMP $9D35 ; | ||
- | |||
- | TwosCompliment_: | ||
- | L95C6: EOR #$FF ; | ||
- | L95C8: | ||
- | L95C9: ADC # | ||
- | L95CB: | ||
- | |||
- | L95CC: | ||
- | |||
- | L95CD: | ||
- | |||
- | L95CE: | ||
- | L95CF: | ||
- | |||
- | ;Special room numbers(used to start item room music). | ||
- | L95D0: | ||
- | |||
- | L95D7: | ||
- | L95D8: | ||
- | L95D9: | ||
- | |||
- | L95DA: | ||
- | |||
- | L95E5: LDA EnDataIndex, | ||
- | L95E8: JSR $8024 | ||
- | |||
- | L95EB: | ||
- | L95ED: | ||
- | L95EF: | ||
- | L95F1: | ||
- | L95F3: | ||
- | L95F5: | ||
- | L95F7: | ||
- | L95F9: | ||
- | L95FB: | ||
- | L95FD: | ||
- | L95FF: | ||
- | L9601: | ||
- | L9603: | ||
- | L9605: | ||
- | L9607: | ||
- | L9609: | ||
- | |||
- | L960B: | ||
- | |||
- | L961B: | ||
- | |||
- | EnemyHitPointTbl: | ||
- | L962B: | ||
- | |||
- | L963B: | ||
- | |||
- | L964B: | ||
- | |||
- | L965B: | ||
- | |||
- | L966B: | ||
- | |||
- | L967B: | ||
- | |||
- | L968B: | ||
- | |||
- | L969B: | ||
- | |||
- | L96AB: | ||
- | |||
- | EnemyInitDelayTbl: | ||
- | L96BB: | ||
- | |||
- | L96CB: | ||
- | |||
- | L96DB: | ||
- | L96EB: | ||
- | L96FB: | ||
- | L970B: | ||
- | L971B: | ||
- | |||
- | L9723: | ||
- | L9733: | ||
- | L9743: | ||
- | L9753: | ||
- | L9763: | ||
- | L9773: | ||
- | |||
- | L977B: | ||
- | |||
- | L978B: | ||
- | L979B: | ||
- | |||
- | L97A7: | ||
- | L97B7: | ||
- | L97C7: | ||
- | |||
- | L97D1: | ||
- | L97E1: | ||
- | |||
- | L97EF: | ||
- | |||
- | L97F2: | ||
- | |||
- | L97F5: | ||
- | L9805: | ||
- | L9815: | ||
- | L9825: | ||
- | L9835: | ||
- | |||
- | L9840: | ||
- | L9850: | ||
- | L9860: | ||
- | L9870: | ||
- | L9880: | ||
- | |||
- | L988B: | ||
- | |||
- | L988E: | ||
- | |||
- | L9891: | ||
- | L98A1: | ||
- | |||
- | L98A5: | ||
- | L98B5: | ||
- | |||
- | L98B9: | ||
- | |||
- | L98C0: | ||
- | |||
- | L98C7: | ||
- | |||
- | L98CE: | ||
- | |||
- | L98D5: | ||
- | |||
- | L98D8: | ||
- | |||
- | L98DB: | ||
- | L98EB: | ||
- | |||
- | L98F2: | ||
- | L9902: | ||
- | |||
- | L9909: | ||
- | L9919: | ||
- | |||
- | L9920: | ||
- | L9930: | ||
- | |||
- | L9937: | ||
- | L9947: | ||
- | |||
- | L994E: | ||
- | L995E: | ||
- | |||
- | L9965: | ||
- | |||
- | L9974: | ||
- | |||
- | L9983: | ||
- | |||
- | L9992: | ||
- | |||
- | L99A1: LDA $81 | ||
- | L99A3: CMP #$01 | ||
- | L99A5: BEQ $99B0 | ||
- | L99A7: CMP #$03 | ||
- | L99A9: BEQ $99B5 | ||
- | L99AB: LDA $00 | ||
- | L99AD: JMP $8000 | ||
- | L99B0: LDA $01 | ||
- | L99B2: JMP $8003 | ||
- | L99B5: JMP $8006 | ||
- | |||
- | L99B8: LDA #$09 | ||
- | L99BA: STA $85 | ||
- | L99BC: STA $86 | ||
- | L99BE: LDA EnStatus,X | ||
- | L99C1: CMP #$03 | ||
- | L99C3: BEQ $99C8 | ||
- | L99C5: JSR $801B | ||
- | L99C8: LDA #$06 | ||
- | L99CA: STA $00 | ||
- | L99CC: LDA #$08 | ||
- | L99CE: STA $01 | ||
- | L99D0: JMP $99A1 | ||
- | |||
- | L99D3: LDA #$0F | ||
- | L99D5: JMP $99BA | ||
- | L99D8: LDA EnStatus,X | ||
- | L99DB: CMP #$03 | ||
- | L99DD: BEQ $99E2 | ||
- | L99DF: JSR $801E | ||
- | L99E2: JMP $99C8 | ||
- | L99E5: LDA #$21 | ||
- | L99E7: STA $85 | ||
- | L99E9: LDA #$1E | ||
- | L99EB: STA $86 | ||
- | L99ED: LDA EnStatus,X | ||
- | L99F0: CMP #$03 | ||
- | L99F2: BEQ $99F7 | ||
- | L99F4: JSR $801B | ||
- | L99F7: JMP $99C8 | ||
- | L99FA: LDA $81 | ||
- | L99FC: CMP #$01 | ||
- | L99FE: BEQ $9A44 | ||
- | L9A00: CMP #$03 | ||
- | L9A02: BEQ $9A49 | ||
- | L9A04: LDA EnCounter,X | ||
- | L9A07: CMP #$0F | ||
- | L9A09: BCC $9A3F | ||
- | L9A0B: CMP #$11 | ||
- | L9A0D: BCS $9A16 | ||
- | L9A0F: LDA #$3A | ||
- | L9A11: STA $6B01,X | ||
- | L9A14: BNE $9A3F | ||
- | L9A16: DEC $6B01,X | ||
- | L9A19: BNE $9A3F | ||
- | L9A1B: LDA #$00 | ||
- | L9A1D: STA EnStatus,X | ||
- | L9A20: LDY #$0C | ||
- | L9A22: LDA #$0A | ||
- | L9A24: STA $00A0,Y | ||
- | L9A27: LDA EnYRoomPos, | ||
- | L9A2A: STA $00A1,Y | ||
- | L9A2D: LDA EnXRoomPos, | ||
- | L9A30: STA $00A2,Y | ||
- | L9A33: LDA EnNameTable, | ||
- | L9A36: STA $00A3,Y | ||
- | L9A39: | ||
- | L9A3A: | ||
- | L9A3B: | ||
- | L9A3C: | ||
- | L9A3D: BPL $9A22 | ||
- | L9A3F: LDA #$02 | ||
- | L9A41: JMP $8000 | ||
- | L9A44: LDA #$08 | ||
- | L9A46: JMP $8003 | ||
- | L9A49: JMP $8006 | ||
- | |||
- | L9A4C: JSR $8009 | ||
- | L9A4F: AND #$03 | ||
- | L9A51: BEQ $9A87 | ||
- | L9A53: LDA $81 | ||
- | L9A55: CMP #$01 | ||
- | L9A57: BEQ $9A44 | ||
- | L9A59: CMP #$03 | ||
- | L9A5B: BEQ $9A49 | ||
- | L9A5D: LDA EnStatus,X | ||
- | L9A60: CMP #$03 | ||
- | L9A62: BEQ $9A87 | ||
- | L9A64: LDA $040A,X | ||
- | L9A67: AND #$03 | ||
- | L9A69: CMP #$01 | ||
- | L9A6B: BNE $9A7E | ||
- | L9A6D: LDY EnYRoomPos, | ||
- | L9A70: CPY #$E4 | ||
- | L9A72: BNE $9A7E | ||
- | L9A74: JSR $9ABD | ||
- | L9A77: LDA #$03 | ||
- | L9A79: STA $040A,X | ||
- | L9A7C: BNE $9A84 | ||
- | L9A7E: JSR $9AE2 | ||
- | L9A81: JSR $9AA8 | ||
- | L9A84: JSR $9AC6 | ||
- | L9A87: LDA #$03 | ||
- | L9A89: JSR $800C | ||
- | L9A8C: JMP $8006 | ||
- | L9A8F: LDA $0405,X | ||
- | L9A92: | ||
- | L9A93: LDA $040A,X | ||
- | L9A96: AND #$03 | ||
- | L9A98: | ||
- | L9A99: | ||
- | L9A9A: LDA $9AA0,Y | ||
- | L9A9D: JMP $800F | ||
- | |||
- | L9AA0: | ||
- | |||
- | L9AA8: LDX PageIndex | ||
- | L9AAA: BCS $9AC5 | ||
- | L9AAC: LDA $00 | ||
- | L9AAE: BNE $9ABD | ||
- | L9AB0: LDY $040A,X | ||
- | L9AB3: | ||
- | L9AB4: | ||
- | L9AB5: AND #$03 | ||
- | L9AB7: STA $040A,X | ||
- | L9ABA: JMP $9A8F | ||
- | L9ABD: LDA $0405,X | ||
- | L9AC0: EOR #$01 | ||
- | L9AC2: STA $0405,X | ||
- | L9AC5: RTS | ||
- | |||
- | L9AC6: JSR $9ADA | ||
- | L9AC9: JSR $9AE2 | ||
- | L9ACC: LDX PageIndex | ||
- | L9ACE: BCC $9AD9 | ||
- | L9AD0: JSR $9ADA | ||
- | L9AD3: STA $040A,X | ||
- | L9AD6: JSR $9A8F | ||
- | L9AD9: RTS | ||
- | |||
- | L9ADA: LDY $040A,X | ||
- | L9ADD: | ||
- | L9ADE: | ||
- | L9ADF: AND #$03 | ||
- | L9AE1: RTS | ||
- | |||
- | L9AE2: LDY $0405,X | ||
- | L9AE5: STY $00 | ||
- | L9AE7: LSR $00 | ||
- | L9AE9: | ||
- | L9AEA: | ||
- | L9AEB: | ||
- | L9AEC: LDA $8049,Y | ||
- | L9AEF: | ||
- | L9AF0: LDA $8048,Y | ||
- | L9AF3: | ||
- | L9AF4: RTS | ||
- | |||
- | L9AF5: LDA $81 | ||
- | L9AF7: CMP #$01 | ||
- | L9AF9: BEQ $9B2D | ||
- | L9AFB: CMP #$03 | ||
- | L9AFD: BEQ $9B2A | ||
- | L9AFF: LDA #$80 | ||
- | L9B01: STA $6AFE,X | ||
- | L9B04: LDA $0402,X | ||
- | L9B07: BMI $9B25 | ||
- | L9B09: LDA $0405,X | ||
- | L9B0C: AND #$10 | ||
- | L9B0E: BEQ $9B25 | ||
- | L9B10: LDA EnYRoomPos, | ||
- | L9B13: | ||
- | L9B14: SBC $030D | ||
- | L9B17: BPL $9B1C | ||
- | L9B19: JSR $95C6 | ||
- | L9B1C: CMP #$10 | ||
- | L9B1E: BCS $9B25 | ||
- | L9B20: LDA #$00 | ||
- | L9B22: STA $6AFE,X | ||
- | L9B25: LDA #$03 | ||
- | L9B27: JMP $8000 | ||
- | L9B2A: JMP $8006 | ||
- | L9B2D: LDA #$08 | ||
- | L9B2F: JMP $8003 | ||
- | L9B32: LDA EnStatus,X | ||
- | L9B35: CMP #$02 | ||
- | L9B37: BNE $9B71 | ||
- | L9B39: LDA $0403,X | ||
- | L9B3C: BNE $9B71 | ||
- | L9B3E: LDA $6AFE,X | ||
- | L9B41: BNE $9B55 | ||
- | L9B43: LDA $030D | ||
- | L9B46: | ||
- | L9B47: SBC EnYRoomPos, | ||
- | L9B4A: CMP #$40 | ||
- | L9B4C: BCS $9B71 | ||
- | L9B4E: LDA #$7F | ||
- | L9B50: STA $6AFE,X | ||
- | L9B53: BNE $9B71 | ||
- | L9B55: LDA $0402,X | ||
- | L9B58: BMI $9B71 | ||
- | L9B5A: LDA #$00 | ||
- | L9B5C: STA $0402,X | ||
- | L9B5F: STA EnCounter,X | ||
- | L9B62: STA $6AFE,X | ||
- | L9B65: LDA $0405,X | ||
- | L9B68: AND #$01 | ||
- | L9B6A: | ||
- | L9B6B: LDA $9BA0,Y | ||
- | L9B6E: STA $0403,X | ||
- | L9B71: LDA $0405,X | ||
- | L9B74: | ||
- | L9B75: BMI $9B95 | ||
- | L9B77: LDA EnStatus,X | ||
- | L9B7A: CMP #$02 | ||
- | L9B7C: BNE $9B95 | ||
- | L9B7E: JSR $8036 | ||
- | L9B81: | ||
- | L9B82: JSR $8039 | ||
- | L9B85: STA $05 | ||
- | L9B87: | ||
- | L9B88: STA $04 | ||
- | L9B8A: JSR $9CA8 | ||
- | L9B8D: JSR $8027 | ||
- | L9B90: BCC $9B9A | ||
- | L9B92: JSR $9C96 | ||
- | L9B95: LDA #$03 | ||
- | L9B97: JMP $8003 | ||
- | L9B9A: LDA #$00 | ||
- | L9B9C: STA EnStatus,X | ||
- | L9B9F: RTS | ||
- | |||
- | L9BA0: | ||
- | |||
- | L9BA2: LDA EnStatus,X | ||
- | L9BA5: CMP #$03 | ||
- | L9BA7: BCC $9BC2 | ||
- | L9BA9: BEQ $9BAF | ||
- | L9BAB: CMP #$05 | ||
- | L9BAD: BNE $9BCB | ||
- | L9BAF: LDA #$00 | ||
- | L9BB1: STA $6B04 | ||
- | L9BB4: STA $6B14 | ||
- | L9BB7: STA $6B24 | ||
- | L9BBA: STA $6B34 | ||
- | L9BBD: STA $6B44 | ||
- | L9BC0: BEQ $9BCB | ||
- | L9BC2: JSR $9C1D | ||
- | L9BC5: JSR $9CCC | ||
- | L9BC8: JSR $9D05 | ||
- | L9BCB: LDA #$0A | ||
- | L9BCD: STA $00 | ||
- | L9BCF: JMP $99CC | ||
- | L9BD2: LDA $0405,X | ||
- | L9BD5: AND #$02 | ||
- | L9BD7: BEQ $9BE0 | ||
- | L9BD9: LDA EnStatus,X | ||
- | L9BDC: CMP #$03 | ||
- | L9BDE: BNE $9BE7 | ||
- | L9BE0: LDA #$00 | ||
- | L9BE2: STA EnStatus,X | ||
- | L9BE5: BEQ $9C12 | ||
- | L9BE7: LDA $0405,X | ||
- | L9BEA: | ||
- | L9BEB: BMI $9C12 | ||
- | L9BED: LDA EnStatus,X | ||
- | L9BF0: CMP #$02 | ||
- | L9BF2: BNE $9C12 | ||
- | L9BF4: JSR $802D | ||
- | L9BF7: LDX PageIndex | ||
- | L9BF9: LDA $00 | ||
- | L9BFB: STA $0402,X | ||
- | L9BFE: JSR $8030 | ||
- | L9C01: LDX PageIndex | ||
- | L9C03: LDA $00 | ||
- | L9C05: STA $0403,X | ||
- | L9C08: JSR $8033 | ||
- | L9C0B: BCS $9C12 | ||
- | L9C0D: LDA #$03 | ||
- | L9C0F: STA EnStatus,X | ||
- | L9C12: LDA #$01 | ||
- | L9C14: JSR $800C | ||
- | L9C17: JMP $8006 | ||
- | L9C1A: JMP $9BD2 | ||
- | L9C1D: LDX #$50 | ||
- | L9C1F: JSR $9C2A | ||
- | L9C22: | ||
- | L9C23: | ||
- | L9C24: SBC #$10 | ||
- | L9C26: | ||
- | L9C27: BNE $9C1F | ||
- | L9C29: RTS | ||
- | |||
- | L9C2A: LDY EnStatus,X | ||
- | L9C2D: BEQ $9C55 | ||
- | L9C2F: LDA EnDataIndex, | ||
- | L9C32: CMP #$0A | ||
- | L9C34: BEQ $9C3A | ||
- | L9C36: CMP #$09 | ||
- | L9C38: BNE $9CA7 | ||
- | L9C3A: LDA $0405,X | ||
- | L9C3D: AND #$02 | ||
- | L9C3F: BEQ $9C55 | ||
- | L9C41: | ||
- | L9C42: BEQ $9C60 | ||
- | L9C44: CPY #$02 | ||
- | L9C46: BEQ $9C55 | ||
- | L9C48: CPY #$03 | ||
- | L9C4A: BNE $9CA7 | ||
- | L9C4C: LDA $040C,X | ||
- | L9C4F: CMP #$01 | ||
- | L9C51: BNE $9CA7 | ||
- | L9C53: BEQ $9C60 | ||
- | L9C55: LDA #$00 | ||
- | L9C57: STA EnStatus,X | ||
- | L9C5A: STA EnSpecialAttribs, | ||
- | L9C5D: JSR $802A | ||
- | L9C60: LDA $0405 | ||
- | L9C63: STA $0405,X | ||
- | L9C66: | ||
- | L9C67: | ||
- | L9C68: | ||
- | L9C69: | ||
- | L9C6A: | ||
- | L9C6B: | ||
- | L9C6C: | ||
- | L9C6D: | ||
- | L9C6E: LDA $9CB7,Y | ||
- | L9C71: STA $04 | ||
- | L9C73: LDA $9CC6,Y | ||
- | L9C76: STA EnDataIndex, | ||
- | L9C79: | ||
- | L9C7A: | ||
- | L9C7B: | ||
- | L9C7C: | ||
- | L9C7D: LDA $9CBB,Y | ||
- | L9C80: STA $05 | ||
- | L9C82: LDX #$00 | ||
- | L9C84: JSR $9CA8 | ||
- | L9C87: JSR $8027 | ||
- | L9C8A: LDX PageIndex | ||
- | L9C8C: BCC $9CA7 | ||
- | L9C8E: LDA EnStatus,X | ||
- | L9C91: BNE $9C96 | ||
- | L9C93: INC EnStatus,X | ||
- | L9C96: LDA $08 | ||
- | L9C98: STA EnYRoomPos, | ||
- | L9C9B: LDA $09 | ||
- | L9C9D: STA EnXRoomPos, | ||
- | L9CA0: LDA $0B | ||
- | L9CA2: AND #$01 | ||
- | L9CA4: STA EnNameTable, | ||
- | L9CA7: RTS | ||
- | |||
- | L9CA8: LDA EnYRoomPos, | ||
- | L9CAB: STA $08 | ||
- | L9CAD: LDA EnXRoomPos, | ||
- | L9CB0: STA $09 | ||
- | L9CB2: LDA EnNameTable, | ||
- | L9CB5: STA $0B | ||
- | L9CB7: RTS | ||
- | |||
- | L9CB8: | ||
- | L9CC8: | ||
- | |||
- | L9CCC: LDY $7E | ||
- | L9CCE: BNE $9CD2 | ||
- | L9CD0: LDY #$80 | ||
- | L9CD2: LDA $2D | ||
- | L9CD4: AND #$02 | ||
- | L9CD6: BNE $9D04 | ||
- | L9CD8: | ||
- | L9CD9: STY $7E | ||
- | L9CDB: | ||
- | L9CDC: | ||
- | L9CDD: BMI $9D04 | ||
- | L9CDF: AND #$0F | ||
- | L9CE1: CMP #$0A | ||
- | L9CE3: BNE $9D04 | ||
- | L9CE5: LDA #$01 | ||
- | L9CE7: LDX #$10 | ||
- | L9CE9: CMP EnStatus,X | ||
- | L9CEC: BEQ $9CFF | ||
- | L9CEE: LDX #$20 | ||
- | L9CF0: CMP EnStatus,X | ||
- | L9CF3: BEQ $9CFF | ||
- | L9CF5: LDX #$30 | ||
- | L9CF7: CMP EnStatus,X | ||
- | L9CFA: BEQ $9CFF | ||
- | L9CFC: INC $7E | ||
- | L9CFE: RTS | ||
- | |||
- | L9CFF: LDA #$08 | ||
- | L9D01: STA EnDelay,X | ||
- | L9D04: RTS | ||
- | |||
- | L9D05: LDY $7F | ||
- | L9D07: BNE $9D0B | ||
- | L9D09: LDY #$60 | ||
- | L9D0B: LDA $2D | ||
- | L9D0D: AND #$02 | ||
- | L9D0F: BNE $9D34 | ||
- | L9D11: | ||
- | L9D12: STY $7F | ||
- | L9D14: | ||
- | L9D15: | ||
- | L9D16: BMI $9D34 | ||
- | L9D18: AND #$0F | ||
- | L9D1A: BNE $9D34 | ||
- | L9D1C: LDA #$01 | ||
- | L9D1E: LDX #$40 | ||
- | L9D20: CMP EnStatus,X | ||
- | L9D23: BEQ $9D2F | ||
- | L9D25: LDX #$50 | ||
- | L9D27: CMP EnStatus,X | ||
- | L9D2A: BEQ $9D2F | ||
- | L9D2C: INC $7F | ||
- | L9D2E: RTS | ||
- | |||
- | L9D2F: LDA #$08 | ||
- | L9D31: STA EnDelay,X | ||
- | L9D34: RTS | ||
- | |||
- | L9D35: | ||
- | L9D45: | ||
- | L9D55: | ||
- | L9D65: | ||
- | |||
- | ; | ||
- | |||
- | EnemyAnimIndexTbl: | ||
- | |||
- | L9D6A: | ||
- | |||
- | L9D6D: | ||
- | |||
- | L9D6F: | ||
- | |||
- | L9D72: | ||
- | |||
- | L9D75: | ||
- | |||
- | L9D78: | ||
- | |||
- | L9D7B: | ||
- | |||
- | L9D7F: | ||
- | |||
- | L9D83: | ||
- | |||
- | L9D85: | ||
- | |||
- | L9D87: | ||
- | |||
- | L9D8A: | ||
- | |||
- | L9D8D: | ||
- | |||
- | L9D91: | ||
- | |||
- | L9D93: | ||
- | |||
- | L9D95: | ||
- | |||
- | L9D97: | ||
- | |||
- | L9D99: | ||
- | |||
- | L9D9B: | ||
- | |||
- | L9D9D: | ||
- | |||
- | L9D9F: | ||
- | |||
- | L9DA2: | ||
- | |||
- | L9DA5: | ||
- | |||
- | L9DA8: | ||
- | |||
- | L9DAB: | ||
- | |||
- | L9DAD: | ||
- | |||
- | L9DB2: | ||
- | |||
- | L9DB5: | ||
- | |||
- | L9DB7: | ||
- | |||
- | L9DBA: | ||
- | |||
- | L9DBD: | ||
- | |||
- | L9DBF: | ||
- | |||
- | L9DC1: | ||
- | |||
- | L9DC3: | ||
- | |||
- | L9DC5: | ||
- | |||
- | L9DC7: | ||
- | |||
- | L9DC9: | ||
- | |||
- | L9DCE: | ||
- | |||
- | L9DD3: | ||
- | |||
- | L9DD6: | ||
- | |||
- | L9DD9: | ||
- | |||
- | L9DDC: | ||
- | |||
- | L9DDE: | ||
- | |||
- | ; | ||
- | |||
- | EnemyFramePtrTbl1: | ||
- | L9DE0: | ||
- | L9DF0: | ||
- | L9E00: | ||
- | L9E10: | ||
- | L9E20: | ||
- | L9E30: | ||
- | L9E40: | ||
- | L9E50: | ||
- | L9E60: | ||
- | L9E70: | ||
- | L9E80: | ||
- | L9E90: | ||
- | L9EA0: | ||
- | L9EB0: | ||
- | L9EC0: | ||
- | L9ED0: | ||
- | |||
- | EnemyFramePtrTbl2: | ||
- | L9EE0: | ||
- | L9EF0: | ||
- | L9F00: | ||
- | |||
- | EnemyPlacePtrTbl: | ||
- | L9F0E: | ||
- | L9F1E: | ||
- | |||
- | ; | ||
- | |||
- | L9F2E: | ||
- | |||
- | ;Enemy explode. | ||
- | L9F30: | ||
- | L9F40: | ||
- | |||
- | L9F48: | ||
- | L9F58: | ||
- | |||
- | L9F60: | ||
- | |||
- | L9F70: | ||
- | |||
- | L9F7C: | ||
- | |||
- | L9F84: | ||
- | |||
- | L9F90: | ||
- | L9FA0: | ||
- | |||
- | L9FB0: | ||
- | |||
- | L9FBE: | ||
- | |||
- | ;Enemy frame drawing data. | ||
- | |||
- | L9FC2: | ||
- | |||
- | L9FC7: | ||
- | |||
- | L9FCC: | ||
- | |||
- | L9FD1: | ||
- | |||
- | L9FDA: | ||
- | |||
- | L9FE3: | ||
- | |||
- | L9FF1: | ||
- | |||
- | L9FFF: | ||
- | |||
- | LA00B: | ||
- | |||
- | LA019: | ||
- | |||
- | LA027: | ||
- | |||
- | LA033: | ||
- | |||
- | LA03C: | ||
- | |||
- | LA046: | ||
- | |||
- | LA050: | ||
- | |||
- | LA059: | ||
- | |||
- | LA063: | ||
- | |||
- | LA06D: | ||
- | |||
- | LA07B: | ||
- | |||
- | LA082: | ||
- | |||
- | LA08B: | ||
- | LA09B: | ||
- | |||
- | LA09F: | ||
- | LA0AF: | ||
- | |||
- | LA0B3: | ||
- | |||
- | LA0BE: | ||
- | |||
- | LA0C9: | ||
- | |||
- | LA0D2: | ||
- | |||
- | LA0DB: | ||
- | |||
- | LA0E6: | ||
- | |||
- | LA0EE: | ||
- | |||
- | LA0F6: | ||
- | |||
- | LA0FE: | ||
- | |||
- | LA106: | ||
- | |||
- | LA10E: | ||
- | |||
- | LA116: | ||
- | |||
- | LA11E: | ||
- | |||
- | LA126: | ||
- | |||
- | LA12E: | ||
- | |||
- | LA13C: | ||
- | LA14C: | ||
- | |||
- | LA156: | ||
- | |||
- | LA162: | ||
- | |||
- | LA16F: | ||
- | |||
- | LA177: | ||
- | |||
- | LA17F: | ||
- | |||
- | LA187: | ||
- | |||
- | LA18F: | ||
- | |||
- | LA197: | ||
- | |||
- | LA19F: | ||
- | |||
- | LA1A7: | ||
- | |||
- | LA1AC: | ||
- | |||
- | LA1AF: | ||
- | |||
- | LA1B4: | ||
- | |||
- | LA1B7: | ||
- | |||
- | LA1BF: | ||
- | |||
- | LA1C7: | ||
- | |||
- | LA1CF: | ||
- | |||
- | LA1D7: | ||
- | |||
- | LA1DF: | ||
- | |||
- | LA1E7: | ||
- | |||
- | LA1EF: | ||
- | |||
- | LA1F7: | ||
- | |||
- | LA1FF: | ||
- | |||
- | LA204: | ||
- | |||
- | LA209: | ||
- | |||
- | LA213: | ||
- | |||
- | LA21D: | ||
- | |||
- | LA22D: | ||
- | |||
- | LA23D: | ||
- | |||
- | LA24D: | ||
- | |||
- | LA25D: | ||
- | |||
- | LA267: | ||
- | |||
- | ; | ||
- | |||
- | Palette00: | ||
- | LA271: | ||
- | LA272: | ||
- | LA273: | ||
- | ;The following values are written to the background palette: | ||
- | LA274: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA284: | ||
- | |||
- | LA294: | ||
- | |||
- | Palette01: | ||
- | LA295: | ||
- | LA296: | ||
- | LA297: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA298: | ||
- | |||
- | LA29A: | ||
- | |||
- | Palette03: | ||
- | LA29B: | ||
- | LA29C: | ||
- | LA29D: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA29E: | ||
- | |||
- | LA2A0: | ||
- | |||
- | Palette02: | ||
- | LA2A1: | ||
- | LA2A2: | ||
- | LA2A3: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2A4: | ||
- | |||
- | LA2A6: | ||
- | |||
- | Palette04: | ||
- | LA2A7: | ||
- | LA2A8: | ||
- | LA2A9: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2AA: | ||
- | |||
- | LA2AC: | ||
- | |||
- | Palette05: | ||
- | LA2AD: | ||
- | LA2AE: | ||
- | LA2AF: | ||
- | ;The following values are written to the background palette: | ||
- | LA2B0: | ||
- | LA2C0: | ||
- | LA2C1: | ||
- | LA2C2: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2C3: | ||
- | |||
- | LA2CF: | ||
- | |||
- | Palette06: | ||
- | LA2D0: | ||
- | LA2D1: | ||
- | LA2D2: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2D3: | ||
- | |||
- | LA2D6: | ||
- | |||
- | Palette07: | ||
- | LA2D7: | ||
- | LA2D8: | ||
- | LA2D9: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2DA: | ||
- | |||
- | LA2DD: | ||
- | |||
- | Palette08: | ||
- | LA2DE: | ||
- | LA2DF: | ||
- | LA2E0: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2E1: | ||
- | |||
- | LA2E4: | ||
- | |||
- | Palette09: | ||
- | LA2E5: | ||
- | LA2E6: | ||
- | LA2E7: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2E8: | ||
- | |||
- | LA2EB: | ||
- | |||
- | Palette0A: | ||
- | LA2EC: | ||
- | LA2ED: | ||
- | LA2EE: | ||
- | ;The following values are written to the background palette: | ||
- | LA2EF: | ||
- | |||
- | LA2F3: | ||
- | |||
- | Palette0B: | ||
- | LA2F4: | ||
- | LA2F5: | ||
- | LA2F6: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2F7: | ||
- | |||
- | LA2FB: | ||
- | |||
- | Palette0C: | ||
- | LA2FC: | ||
- | LA2FD: | ||
- | LA2FE: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA2FF: | ||
- | |||
- | LA303: | ||
- | |||
- | Palette0D: | ||
- | LA304: | ||
- | LA305: | ||
- | LA306: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA307: | ||
- | |||
- | LA30B: | ||
- | |||
- | Palette0E: | ||
- | LA30C: | ||
- | LA30D: | ||
- | LA30E: | ||
- | ;The following values are written to the sprite palette: | ||
- | LA30F: | ||
- | |||
- | LA313: | ||
- | |||
- | ; | ||
- | |||
- | RmPtrTbl: | ||
- | LA314: | ||
- | LA324: | ||
- | LA334: | ||
- | LA344: | ||
- | LA354: | ||
- | LA364: | ||
- | |||
- | StrctPtrTbl: | ||
- | LA372: | ||
- | LA382: | ||
- | LA392: | ||
- | LA3A2: | ||
- | LA3B2: | ||
- | LA3C2: | ||
- | LA3D2: | ||
- | |||
- | ; | ||
- | |||
- | ;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--> | ||
- | ; | ||
- | ;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--> | ||
- | ; | ||
- | ;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: | ||
- | ;# | ||
- | ;#$02=Power up. | ||
- | ;# | ||
- | ;# | ||
- | ;# | ||
- | ;# | ||
- | ;# | ||
- | ;# | ||
- | ;#$09=Door. | ||
- | ;# | ||
- | |||
- | SpecItmsTbl: | ||
- | |||
- | ;Elevator to Tourian. | ||
- | LA3D6: | ||
- | LA3D7: | ||
- | LA3D9: | ||
- | |||
- | ;Varia suit. | ||
- | LA3DE: | ||
- | |||
- | ;Missiles. | ||
- | LA3E4: | ||
- | LA3E5: | ||
- | LA3E7: | ||
- | |||
- | ;Energy tank. | ||
- | LA3ED: | ||
- | |||
- | ;Long beam. | ||
- | LA3F3: | ||
- | LA3F4: | ||
- | LA3F6: | ||
- | |||
- | ;Bombs. | ||
- | LA3FC: | ||
- | |||
- | ;Palette change room. | ||
- | LA402: | ||
- | LA403: | ||
- | LA405: | ||
- | |||
- | ;Energy tank. | ||
- | LA409: | ||
- | |||
- | ;Ice beam. | ||
- | LA40F: | ||
- | LA410: | ||
- | LA412: | ||
- | |||
- | ;Mellows. | ||
- | LA418: | ||
- | |||
- | ;Missiles. | ||
- | LA41C: | ||
- | LA41D: | ||
- | LA41F: | ||
- | |||
- | ;Elevator to Norfair. | ||
- | LA425: | ||
- | |||
- | ;Maru Mari. | ||
- | LA42A: | ||
- | LA42B: | ||
- | LA42D: | ||
- | |||
- | ;Energy tank. | ||
- | LA433: | ||
- | |||
- | ;Elevator to Kraid. | ||
- | LA439: | ||
- | LA43A: | ||
- | LA43C: | ||
- | |||
- | ; | ||
- | |||
- | ;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. | ||
- | ;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 | ||
- | LA441: | ||
- | ;Room object data: | ||
- | LAA42: | ||
- | ;Room enemy/door data: | ||
- | LAA4F: | ||
- | |||
- | ;Room #$01 | ||
- | LA454: | ||
- | ;Room object data: | ||
- | LA455: | ||
- | |||
- | ;Room #$02 | ||
- | LA45C: | ||
- | ;Room object data: | ||
- | LA45D: | ||
- | LA46D: | ||
- | ;Room enemy/door data: | ||
- | LA470: | ||
- | |||
- | ;Room #$03 | ||
- | LA480: | ||
- | ;Room object data: | ||
- | LA481: | ||
- | LA491: | ||
- | LA4A1: | ||
- | ;Room enemy/door data: | ||
- | LA4A6: | ||
- | LA4B6: | ||
- | |||
- | ;Room #$04 | ||
- | LA4BB: | ||
- | ;Room object data: | ||
- | LA4BC: | ||
- | LA4CC: | ||
- | LA4DC: | ||
- | ;Room enemy/door data: | ||
- | LA4E1: | ||
- | |||
- | ;Room #$05 | ||
- | LA4ED: | ||
- | ;Room object data: | ||
- | LA4EE: | ||
- | LA4FE: | ||
- | LA50E: | ||
- | ;Room enemy/door data: | ||
- | LA516: | ||
- | |||
- | ;Room #$06 | ||
- | LA524: | ||
- | ;Room object data: | ||
- | LA525: | ||
- | LA535: | ||
- | LA545: | ||
- | ;Room enemy/door data: | ||
- | LA547: | ||
- | LA557: | ||
- | |||
- | ;Room #$07 | ||
- | LA55A: | ||
- | ;Room object data: | ||
- | LA55B: | ||
- | LA56B: | ||
- | LA57B: | ||
- | ;Room enemy/door data: | ||
- | LA57D: | ||
- | |||
- | ;Room #$08 | ||
- | LA587: | ||
- | ;Room object data: | ||
- | LA588: | ||
- | LA598: | ||
- | LA5A8: | ||
- | LA5B8: | ||
- | |||
- | ;Room # | ||
- | LA5B9: | ||
- | ;Room object data: | ||
- | LA5BA: | ||
- | LA5CA: | ||
- | ;Room enemy/door data: | ||
- | LA5D6: | ||
- | |||
- | ;Room #$0A | ||
- | LA5DD: | ||
- | ;Room object data: | ||
- | LA5DE: | ||
- | LA5EE: | ||
- | LA5FE: | ||
- | LA60E: | ||
- | ;Room enemy/door data: | ||
- | LA612: | ||
- | |||
- | ;Room #$0B | ||
- | LA615: | ||
- | ;Room object data: | ||
- | LA616: | ||
- | LA626: | ||
- | ;Room enemy/door data: | ||
- | LA632: | ||
- | |||
- | ;Room #$0C | ||
- | LA635: | ||
- | ;Room object data: | ||
- | LA636: | ||
- | LA646: | ||
- | LA656: | ||
- | ;Room enemy/door data: | ||
- | LA658: | ||
- | |||
- | ;Room #$0D | ||
- | LA661: | ||
- | ;Room object data: | ||
- | LA662: | ||
- | LA672: | ||
- | LA682: | ||
- | ;Room enemy/door data: | ||
- | LA684: | ||
- | |||
- | ;Room #$0E | ||
- | LA68D: | ||
- | ;Room object data: | ||
- | LA68E: | ||
- | LA69E: | ||
- | ;Room enemy/door data: | ||
- | LA6A4: | ||
- | |||
- | ;Room #$0F | ||
- | LA6B1: | ||
- | ;Room object data: | ||
- | LA6B2: | ||
- | LA6C2: | ||
- | ;Room enemy/door data: | ||
- | LA6CE: | ||
- | |||
- | ;Room #$10 | ||
- | LA6DB: | ||
- | ;Room object data: | ||
- | LA6DC: | ||
- | LA6EC: | ||
- | LA6FC: | ||
- | ;Room enemy/door data: | ||
- | LA70A: | ||
- | |||
- | ;Room #$11 | ||
- | LA715: | ||
- | ;Room object data: | ||
- | LA716: | ||
- | LA726: | ||
- | ;Room enemy/door data: | ||
- | LA732: | ||
- | |||
- | ;Room #$12 | ||
- | LA73C: | ||
- | ;Room object data: | ||
- | LA73D: | ||
- | LA74D: | ||
- | ;Room enemy/door data: | ||
- | LA756: | ||
- | LA766: | ||
- | |||
- | ;Room #$13 | ||
- | LA768: | ||
- | ;Room object data: | ||
- | LA769: | ||
- | LA779: | ||
- | ;Room enemy/door data: | ||
- | LA782: | ||
- | |||
- | ;Room #$14 | ||
- | LA78B: | ||
- | ;Room object data: | ||
- | LA78C: | ||
- | ;Room enemy/door data: | ||
- | LA799: | ||
- | |||
- | ;Room #$15 | ||
- | LA7A3: | ||
- | ;Room object data: | ||
- | LA7A4: | ||
- | LA7B4: | ||
- | ;Room enemy/door data: | ||
- | LA7C3: | ||
- | |||
- | ;Room #$16 | ||
- | LA7D0: | ||
- | ;Room object data: | ||
- | LA7D1: | ||
- | LA7E1: | ||
- | ;Room enemy/door data: | ||
- | LA7EA: | ||
- | |||
- | ;Room #$17 | ||
- | LA7F1: | ||
- | ;Room object data: | ||
- | LA7F2: | ||
- | LA802: | ||
- | LA812: | ||
- | ;Room enemy/door data: | ||
- | LA817: | ||
- | |||
- | ;Room #$18 | ||
- | LA81B: | ||
- | ;Room object data: | ||
- | LA81C: | ||
- | LA82C: | ||
- | LA83C: | ||
- | LA84C: | ||
- | ;Room enemy/door data: | ||
- | LA84D: | ||
- | |||
- | ;Room #$19 | ||
- | LA85B: | ||
- | ;Room object data: | ||
- | LA85C: | ||
- | LA86C: | ||
- | LA87C: | ||
- | ;Room enemy/door data: | ||
- | LA881: | ||
- | |||
- | ;Room #$1A | ||
- | LA88B: | ||
- | ;Room object data: | ||
- | LA88C: | ||
- | LA89C: | ||
- | ;Room enemy/door data: | ||
- | LA8A8: | ||
- | |||
- | ;Room #$1B | ||
- | LA8B1: | ||
- | ;Room object data: | ||
- | LA8B2: | ||
- | LA8C2: | ||
- | LA8D2: | ||
- | ;Room enemy/door data: | ||
- | LA8DD: | ||
- | |||
- | ;Room #$1C | ||
- | LA8E7: | ||
- | ;Room object data: | ||
- | LA8E8: | ||
- | LA8F8: | ||
- | LA908: | ||
- | ;Room enemy/door data: | ||
- | LA90D: | ||
- | |||
- | ;Room #$1D | ||
- | LA910: | ||
- | ;Room object data: | ||
- | LA911: | ||
- | LA921: | ||
- | ;Room enemy/door data: | ||
- | LA927: | ||
- | |||
- | ;Room #$1E | ||
- | LA92B: | ||
- | ;Room object data: | ||
- | LA92C: | ||
- | LA93c: | ||
- | LA94C: | ||
- | LA95C: | ||
- | ;Room enemy/door data: | ||
- | LA960: | ||
- | |||
- | ;Room #$1F | ||
- | LA96B: | ||
- | ;Room object data: | ||
- | LA96C: | ||
- | LA97C: | ||
- | ;Room enemy/door data: | ||
- | LA988: | ||
- | |||
- | ;Room #$20 | ||
- | LA997: | ||
- | ;Room object data: | ||
- | LA998: | ||
- | LA9A8: | ||
- | ;Room enemy/door data: | ||
- | LA9B7: | ||
- | |||
- | ;Room #$21 | ||
- | LA9C6: | ||
- | ;Room object data: | ||
- | LA9C7: | ||
- | LA9D7: | ||
- | LA9E7: | ||
- | ;Room enemy/door data: | ||
- | LA9E9: | ||
- | |||
- | ;Room #$22 | ||
- | LA9F6: | ||
- | ;Room object data: | ||
- | LA9F7: | ||
- | LAA07: | ||
- | LAA17: | ||
- | ;Room enemy/door data: | ||
- | LAA19: | ||
- | |||
- | ;Room #$23 | ||
- | LAA20: | ||
- | ;Room object data: | ||
- | LAA21: | ||
- | LAA31: | ||
- | LAA41: | ||
- | ;Room enemy/door data: | ||
- | LAA46: | ||
- | |||
- | ;Room #$24 | ||
- | LAA56: | ||
- | ;Room object data: | ||
- | LAA57: | ||
- | LAA67: | ||
- | LAA77: | ||
- | LAA87: | ||
- | ;Room enemy/door data: | ||
- | LAA94: | ||
- | |||
- | ;Room #$25 | ||
- | LAAA4: | ||
- | ;Room object data: | ||
- | LAAA5: | ||
- | LAAB5: | ||
- | LAAC5: | ||
- | LAAD5: | ||
- | ;Room enemy/door data: | ||
- | LAAD9: | ||
- | |||
- | ;Room #$26 | ||
- | LAAE6: | ||
- | ;Room object data: | ||
- | LAAE7: | ||
- | LAAF7: | ||
- | LAB07: | ||
- | ;Room enemy/door data: | ||
- | LAB09: | ||
- | |||
- | ;Room #$27 | ||
- | LAB19: | ||
- | ;Room object data: | ||
- | LAB1A: | ||
- | LAB2A: | ||
- | LAB3A: | ||
- | ;Room enemy/door data: | ||
- | LAB3F: | ||
- | |||
- | ;Room #$28 | ||
- | LAB48: | ||
- | ;Room object data: | ||
- | LAB49: | ||
- | LAB59: | ||
- | ;Room enemy/door data: | ||
- | LAB68: | ||
- | |||
- | ;Room #$29 | ||
- | LAB71: | ||
- | ;Room object data: | ||
- | LAB72: | ||
- | LAB82: | ||
- | ;Room enemy/door data: | ||
- | LAB88: | ||
- | |||
- | ;Room #$2A | ||
- | LAB92: | ||
- | ;Room object data: | ||
- | LAB93: | ||
- | LABA3: | ||
- | LABB3: | ||
- | ;Room enemy/door data: | ||
- | LABB5: | ||
- | |||
- | ;Room #$2B(Bridge to Tourian). | ||
- | LABBF: | ||
- | ;Room object data: | ||
- | LABC0: | ||
- | LABD0: | ||
- | LABE0: | ||
- | LABF0: | ||
- | LAC00: | ||
- | LAC10: | ||
- | ;Room enemy/door data: | ||
- | LAC1E: | ||
- | |||
- | ;Room #$2C | ||
- | LAC24: | ||
- | ;Room object data: | ||
- | LAC25: | ||
- | LAC35: | ||
- | LAC45: | ||
- | ;Room enemy/door data: | ||
- | LAC4A: | ||
- | |||
- | ;Room #$2D | ||
- | LAC4D: | ||
- | ;Room object data: | ||
- | LAC4E: | ||
- | LAC5E: | ||
- | ;Room enemy/door data: | ||
- | LAC67: | ||
- | |||
- | ;Room #$2E | ||
- | LAC6A: | ||
- | ;Room object data: | ||
- | LAC6B: | ||
- | LAC7B: | ||
- | ;Room enemy/door data: | ||
- | LAC81: | ||
- | |||
- | ; | ||
- | |||
- | ;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. | ||
- | ;the structure definition represent the next rows. #$FF marks the end of the structure definition. | ||
- | |||
- | ;Structure #$00 | ||
- | LAC84: | ||
- | LAC94: | ||
- | |||
- | ;Structure #$01 | ||
- | LAC97: | ||
- | LACA7: | ||
- | |||
- | ;Structure #$02 | ||
- | LACB0: | ||
- | LACC0: | ||
- | |||
- | ;Structure #$03 | ||
- | LACC9: | ||
- | |||
- | ;Structure #$04 | ||
- | LACD0: | ||
- | |||
- | ;Structure #$05 | ||
- | LACD7: | ||
- | |||
- | ;Structure #$06 | ||
- | LACDB: | ||
- | |||
- | ;Structure #$07 | ||
- | LACE6: | ||
- | |||
- | ;Structure #$08 | ||
- | LACF3: | ||
- | |||
- | ;Structure #$09 | ||
- | LACFF: | ||
- | |||
- | ;Structure #$0A | ||
- | LAD05: | ||
- | |||
- | ;Structure #$0B | ||
- | LAD0A: | ||
- | |||
- | ;Structure #$0C | ||
- | LAD1A: | ||
- | |||
- | ;Structure #$0D | ||
- | LAD1E: | ||
- | |||
- | ;Structure #$0E | ||
- | LAD28: | ||
- | LAD38: | ||
- | LAD48: | ||
- | |||
- | ;Structure #$0F | ||
- | LAD4D: | ||
- | |||
- | ;Structure #$10 | ||
- | LAD57: | ||
- | LAD67: | ||
- | |||
- | ;Structure #$11 | ||
- | LAD6A: | ||
- | LAD7A: | ||
- | |||
- | ;Structure #$12 | ||
- | LAD7F: | ||
- | |||
- | ;Structure #$13 | ||
- | LAD8E: | ||
- | |||
- | ;Structure #$14 | ||
- | LAD98: | ||
- | |||
- | ;Structure #$15 | ||
- | LADA2: | ||
- | |||
- | ;Structure #$16 | ||
- | LADAD: | ||
- | LADBD: | ||
- | |||
- | ;Structure #$17 | ||
- | LADBE: | ||
- | LADCE: | ||
- | LADDE: | ||
- | |||
- | ;Structure #$18 | ||
- | LADE3: | ||
- | |||
- | ;Structure #$19 | ||
- | LADE6: | ||
- | |||
- | ;Structure #$1A | ||
- | LADEC: | ||
- | |||
- | ;Structure #$1B | ||
- | LADF9: | ||
- | |||
- | ;Structure #$1C | ||
- | LAE09: | ||
- | |||
- | ;Structure #$1D | ||
- | LAE13: | ||
- | |||
- | ;Structure #$1E | ||
- | LAE18: | ||
- | LAE28: | ||
- | |||
- | ;Structure #$1F | ||
- | LAE2D: | ||
- | LAE3D: | ||
- | |||
- | ;Structure #$20 | ||
- | LAE42: | ||
- | |||
- | ;Structure #$21 | ||
- | LAE48: | ||
- | |||
- | ;Structure #$22 | ||
- | LAE4B: | ||
- | LAE5B: | ||
- | |||
- | ;Structure #$23 | ||
- | LAE5F: | ||
- | LAE6F: | ||
- | |||
- | ;Structure #$24 | ||
- | LAE70: | ||
- | LAE80: | ||
- | |||
- | ;Structure #$25 | ||
- | LAE85: | ||
- | |||
- | ;Structure #$26 | ||
- | LAE8E: | ||
- | |||
- | ;Structure #$27 | ||
- | LAE92: | ||
- | LAEA2: | ||
- | |||
- | ;Structure #$28 | ||
- | LAEA5: | ||
- | |||
- | ;Structure #$29 | ||
- | LAEB0: | ||
- | |||
- | ;Structure #$2A | ||
- | LAEB3: | ||
- | |||
- | ;Structure #$2B | ||
- | LAEBE: | ||
- | |||
- | ;Structure #$2C | ||
- | LAEC8: | ||
- | |||
- | ;Structure #$2D | ||
- | LAECB: | ||
- | LAEDB: | ||
- | |||
- | ;Structure #$2E | ||
- | LAEDE: | ||
- | |||
- | ;Structure #$2F | ||
- | LAEE1: | ||
- | |||
- | ;Structure #$30 | ||
- | LAEE4: | ||
- | |||
- | ;Structure #$31 | ||
- | LAEED: | ||
- | |||
- | ; | ||
- | |||
- | ;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: | ||
- | |||
- | LAEF0: | ||
- | LAEF4: | ||
- | LAEF8: | ||
- | LAEFC: | ||
- | LAF00: | ||
- | LAF04: | ||
- | LAF08: | ||
- | LAF0C: | ||
- | LAF10: | ||
- | LAF14: | ||
- | LAF18: | ||
- | LAF1C: | ||
- | LAF20: | ||
- | LAF24: | ||
- | LAF28: | ||
- | LAF2C: | ||
- | LAF30: | ||
- | LAF34: | ||
- | LAF38: | ||
- | LAF3C: | ||
- | LAF40: | ||
- | LAF44: | ||
- | LAF48: | ||
- | LAF4C: | ||
- | LAF50: | ||
- | LAF54: | ||
- | LAF58: | ||
- | LAF5C: | ||
- | LAF60: | ||
- | LAF64: | ||
- | LAF68: | ||
- | LAF6C: | ||
- | LAF70: | ||
- | LAF74: | ||
- | LAF78: | ||
- | LAF7C: | ||
- | LAF80: | ||
- | LAF84: | ||
- | LAF88: | ||
- | LAF8C: | ||
- | LAF90: | ||
- | LAF94: | ||
- | LAF98: | ||
- | LAF9C: | ||
- | LAFA0: | ||
- | LAFA4: | ||
- | LAFA8: | ||
- | LAFAC: | ||
- | LAFB0: | ||
- | LAFB4: | ||
- | LAFB8: | ||
- | LAFBC: | ||
- | LAFC0: | ||
- | LAFC4: | ||
- | LAFC8: | ||
- | LAFCC: | ||
- | LAFD0: | ||
- | LAFD4: | ||
- | LAFD8: | ||
- | LAFDC: | ||
- | LAFE0: | ||
- | LAFE4: | ||
- | LAFE8: | ||
- | LAFEC: | ||
- | LAFF0: | ||
- | |||
- | ;Not used. | ||
- | LAFF4: | ||
- | |||
- | ; | ||
- | |||
- | ;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. | ||
- | |||
- | BrinstarSQ1IndexData: | ||
- | LB000: | ||
- | LB001: | ||
- | LB002: | ||
- | LB003: | ||
- | LB004: | ||
- | LB005: | ||
- | LB006: | ||
- | LB007: | ||
- | LB008: | ||
- | LB009: | ||
- | LB00A: | ||
- | LB00B: | ||
- | LB00C: | ||
- | LB00d: | ||
- | LB00E: | ||
- | LB00F: | ||
- | LB010: | ||
- | LB011: | ||
- | LB012: | ||
- | LB013: | ||
- | LB014: | ||
- | LB015: | ||
- | LB016: | ||
- | LB017: | ||
- | LB018: | ||
- | LB019: | ||
- | LB01A: | ||
- | LB01B: | ||
- | LB01C: | ||
- | LB01D: | ||
- | LB01E: | ||
- | LB01F: | ||
- | LB020: | ||
- | LB021: | ||
- | LB022: | ||
- | LB023: | ||
- | LB024: | ||
- | LB025: | ||
- | LB026: | ||
- | LB027: | ||
- | LB028: | ||
- | LB029: | ||
- | LB02A: | ||
- | LB02B: | ||
- | LB02C: | ||
- | LB02D: | ||
- | LB02E: | ||
- | LB02F: | ||
- | LB030: | ||
- | LB031: | ||
- | LB032: | ||
- | LB033: | ||
- | LB034: | ||
- | LB035: | ||
- | LB036: | ||
- | LB037: | ||
- | LB038: | ||
- | LB039: | ||
- | LB03A: | ||
- | LB03B: | ||
- | LB03C: | ||
- | LB03D: | ||
- | LB03E: | ||
- | LB03F: | ||
- | LB040: | ||
- | LB041: | ||
- | LB042: | ||
- | LB043: | ||
- | LB044: | ||
- | LB045: | ||
- | LB046: | ||
- | LB047: | ||
- | LB048: | ||
- | LB049: | ||
- | LB04A: | ||
- | LB04B: | ||
- | LB04C: | ||
- | LB04D: | ||
- | LB04E: | ||
- | LB04F: | ||
- | LB050: | ||
- | LB051: | ||
- | LB052: | ||
- | LB053: | ||
- | LB054: | ||
- | LB055: | ||
- | LB056: | ||
- | |||
- | BrinstarSQ2IndexData: | ||
- | LB057: | ||
- | LB058: | ||
- | LB059: | ||
- | LB05A: | ||
- | LB05B: | ||
- | LB05C: | ||
- | LB05D: | ||
- | LB05E: | ||
- | LB05F: | ||
- | LB060: | ||
- | LB061: | ||
- | LB062: | ||
- | LB063: | ||
- | LB064: | ||
- | LB065: | ||
- | LB066: | ||
- | LB067: | ||
- | LB068: | ||
- | LB069: | ||
- | LB06A: | ||
- | LB06B: | ||
- | LB06C: | ||
- | LB06D: | ||
- | LB06E: | ||
- | LB06F: | ||
- | LB070: | ||
- | LB071: | ||
- | LB072: | ||
- | LB073: | ||
- | LB074: | ||
- | LB075: | ||
- | LB076: | ||
- | LB077: | ||
- | LB078: | ||
- | LB079: | ||
- | LB07A: | ||
- | LB07B: | ||
- | LB07C: | ||
- | LB07D: | ||
- | LB07E: | ||
- | LB07F: | ||
- | LB080: | ||
- | LB081: | ||
- | LB082: | ||
- | LB083: | ||
- | LB084: | ||
- | LB085: | ||
- | LB086: | ||
- | LB087: | ||
- | LB088: | ||
- | LB089: | ||
- | LB08A: | ||
- | LB08B: | ||
- | LB08C: | ||
- | LB08D: | ||
- | LB08E: | ||
- | LB08F: | ||
- | LB090: | ||
- | LB091: | ||
- | LB092: | ||
- | LB093: | ||
- | LB094: | ||
- | LB095: | ||
- | LB096: | ||
- | LB097: | ||
- | LB098: | ||
- | LB099: | ||
- | LB09A: | ||
- | LB09B: | ||
- | LB09C: | ||
- | LB09D: | ||
- | LB09E: | ||
- | LB09F: | ||
- | LB0A0: | ||
- | LB0A1: | ||
- | LB0A2: | ||
- | LB0A3: | ||
- | LB0A4: | ||
- | LB0A5: | ||
- | LB0A6: | ||
- | LB0A7: | ||
- | LB0A8: | ||
- | LB0A9: | ||
- | LB0AA: | ||
- | LB0AB: | ||
- | LB0AC: | ||
- | LB0AD: | ||
- | LB0AE: | ||
- | LB0AF: | ||
- | LB0B0: | ||
- | LB0B1: | ||
- | LB0B2: | ||
- | LB0B3: | ||
- | LB0B4: | ||
- | LB0B5: | ||
- | LB0B6: | ||
- | LB0B7: | ||
- | LB0B8: | ||
- | LB0B9: | ||
- | LB0BA: | ||
- | LB0BB: | ||
- | LB0BC: | ||
- | LB0BD: | ||
- | LB0BE: | ||
- | LB0BF: | ||
- | LB0C0: | ||
- | |||
- | BrinstarTriangleIndexData: | ||
- | LB0C1: | ||
- | LB0C2: | ||
- | LB0C3: | ||
- | LB0C4: | ||
- | LB0C5: | ||
- | LB0C6: | ||
- | LB0C7: | ||
- | LB0C8: | ||
- | LB0C9: | ||
- | LB0CA: | ||
- | LB0CB: | ||
- | LB0CC: | ||
- | LB0CD: | ||
- | LB0CE: | ||
- | LB0CF: | ||
- | LB0D0: | ||
- | LB0D1: | ||
- | LB0D2: | ||
- | LB0D3: | ||
- | LB0D4: | ||
- | LB0D5: | ||
- | LB0D6: | ||
- | LB0D7: | ||
- | LB0D8: | ||
- | LB0D9: | ||
- | LB0DA: | ||
- | LB0DB: | ||
- | LBoDC: | ||
- | LB0DD: | ||
- | LB0DE: | ||
- | LB0DF: | ||
- | LB0E0: | ||
- | LB0E1: | ||
- | LB0E2: | ||
- | LB0E3: | ||
- | LB0E4: | ||
- | LB0E5: | ||
- | LB0E6: | ||
- | LB0E7: | ||
- | LB0E8: | ||
- | LB0E9: | ||
- | LB0EA: | ||
- | LB0EB: | ||
- | LB0EC: | ||
- | LB0ED: | ||
- | LB0EE: | ||
- | LB0EF: | ||
- | LB0F0: | ||
- | LB0F1: | ||
- | LB0F2: | ||
- | LB0F3: | ||
- | LB0F4: | ||
- | LB0F5: | ||
- | LB0F6: | ||
- | LB0F7: | ||
- | LB0F8: | ||
- | LB0F9: | ||
- | LB0FA: | ||
- | LB0FB: | ||
- | LB0FC: | ||
- | LB0FD: | ||
- | LB0FE: | ||
- | LB0FF: | ||
- | LB100: | ||
- | LB101: | ||
- | LB102: | ||
- | LB103: | ||
- | LB104: | ||
- | LB105: | ||
- | LB106: | ||
- | LB107: | ||
- | LB108: | ||
- | LB109: | ||
- | LB10A: | ||
- | LB10B: | ||
- | LB10C: | ||
- | LB10D: | ||
- | LB10E: | ||
- | LB10F: | ||
- | LB110: | ||
- | LB111: | ||
- | LB112: | ||
- | LB113: | ||
- | LB114: | ||
- | LB115: | ||
- | LB116: | ||
- | LB117: | ||
- | LB118: | ||
- | LB119: | ||
- | LB11A: | ||
- | LB11B: | ||
- | LB11C: | ||
- | LB11D: | ||
- | LB11E: | ||
- | LB11F: | ||
- | LB120: | ||
- | LB121: | ||
- | LB122: | ||
- | LB123: | ||
- | LB124: | ||
- | LB125: | ||
- | LB126: | ||
- | LB127: | ||
- | LB128: | ||
- | LB129: | ||
- | LB12A: | ||
- | |||
- | BrinstarNoiseIndexData: | ||
- | LB12B: | ||
- | LB12C: | ||
- | LB12D: | ||
- | LB12E: | ||
- | LB12F: | ||
- | LB130: | ||
- | LB131: | ||
- | LB132: | ||
- | LB133: | ||
- | LB134: | ||
- | |||
- | ;Unused tile patterns. | ||
- | LB135: | ||
- | LB145: | ||
- | LB155: | ||
- | LB165: | ||
- | LB175: | ||
- | LB185: | ||
- | LB195: | ||
- | LB1A5: | ||
- | LB1B5: | ||
- | LB1C5: | ||
- | LB1D5: | ||
- | LB1E5: | ||
- | LB1F5: | ||
- | |||
- | ; | ||
- | |||
- | ;SFXdata. The top four entries are used by the noise music player for drum beats. | ||
- | LB200: | ||
- | |||
- | DrumBeat00SFXData: | ||
- | LB201: | ||
- | DrumBeat01SFXData: | ||
- | LB204: | ||
- | DrumBeat02SFXData: | ||
- | LB207: | ||
- | DrumBeat03SFXData: | ||
- | LB20A: | ||
- | GamePausedSFXData: | ||
- | LB20D: | ||
- | ScrewAttSFXData: | ||
- | LB211: | ||
- | MissileLaunchSFXData: | ||
- | LB215: | ||
- | BombExplodeSFXData: | ||
- | LB219: | ||
- | SamusWalkSFXData: | ||
- | LB21D: | ||
- | SpitFlameSFXData: | ||
- | LB221: | ||
- | SamusHitSQ1SQ2SFXData: | ||
- | LC225: | ||
- | BossHitSQ2SFXData: | ||
- | LB229: | ||
- | BossHitSQ1SFXData: | ||
- | LB22D: | ||
- | IncorrectPasswordSQ1SFXData: | ||
- | LB231: | ||
- | IncorrectPasswordSQ2SFXData: | ||
- | LB235: | ||
- | TimeBombTickSFXData: | ||
- | LB239: | ||
- | EnergyPickupSFXData: | ||
- | LB23D: | ||
- | MissilePickupSFXData: | ||
- | LB241: | ||
- | MetalSFXData: | ||
- | LB245: | ||
- | LongRangeShotSFXData: | ||
- | LB249: | ||
- | ShortRangeShotSFXData: | ||
- | LB24D: | ||
- | JumpSFXData: | ||
- | LB251: | ||
- | EnemyHitSFXData: | ||
- | LB255: | ||
- | BugOutOFHoleSFXData: | ||
- | LB259: | ||
- | WaveBeamSFXData: | ||
- | LB25D: | ||
- | IceBeamSFXData: | ||
- | LB261: | ||
- | BombLaunch1SFXData: | ||
- | LB265: | ||
- | BombLaunch2SFXData: | ||
- | LB269: | ||
- | SamusToBallSFXData: | ||
- | LB26D: | ||
- | MetroidHitSFXData: | ||
- | LB26E: | ||
- | SamusDieSFXData: | ||
- | LB275: | ||
- | SamusBeepSFXData: | ||
- | LB279: | ||
- | BigEnemyHitSFXData: | ||
- | LB27D: | ||
- | StatueRaiseSFXData: | ||
- | LB281: | ||
- | DoorSFXData: | ||
- | LB285: | ||
- | |||
- | ;The following table is used by the CheckSFXFlag routine. | ||
- | ;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. | ||
- | ;processed: 0=Noise, 1=SQ1, 3=Triangle, 4=Multiple channels. | ||
- | |||
- | ChooseNextSFXRoutineTbl: | ||
- | |||
- | LB289: | ||
- | LB28D: | ||
- | |||
- | LB28E: | ||
- | LB292: | ||
- | |||
- | LB293: | ||
- | LB297: | ||
- | |||
- | LB298: | ||
- | LB29C: | ||
- | |||
- | LB29D: | ||
- | LB2A1: | ||
- | |||
- | LB2A2: | ||
- | LB2A6: | ||
- | |||
- | LB2A7: | ||
- | LB2AB: | ||
- | |||
- | LB2AC: | ||
- | LB2B0: | ||
- | |||
- | LB2B1: | ||
- | LB2B5: | ||
- | |||
- | LB2B6: | ||
- | LB2BA: | ||
- | |||
- | ;The tables below contain addresses for SFX handling routines. | ||
- | |||
- | ;Noise Init SFX handling routine addresses: | ||
- | LB2BB: | ||
- | LB2BD: | ||
- | LB2BF: | ||
- | LB2C1: | ||
- | LB2C3: | ||
- | LB2C5: | ||
- | LB2C7: | ||
- | LB2C9: | ||
- | |||
- | ;Noise Continue SFX handling routine addresses: | ||
- | |||
- | LB2CB: | ||
- | LB2CD: | ||
- | LB2CF: | ||
- | LB2D1: | ||
- | LB2D3: | ||
- | LB2D5: | ||
- | LB2D7: | ||
- | LB2D9: | ||
- | |||
- | ;SQ1 Init SFX handling routine addresses: | ||
- | |||
- | LB2DB: | ||
- | LB2DD: | ||
- | LB2DF: | ||
- | LB2E1: | ||
- | LB2E3: | ||
- | LB2E5: | ||
- | LB2E7: | ||
- | LB2E9: | ||
- | |||
- | ;SQ1 Continue SFX handling routine addresses: | ||
- | |||
- | LB2EB: | ||
- | LB2ED: | ||
- | LB2EF: | ||
- | LB2F1: | ||
- | LB2F3: | ||
- | LB2F5: | ||
- | LB2F7: | ||
- | LB2F9: | ||
- | |||
- | ;Triangle init handling routine addresses: | ||
- | |||
- | LB2FB: | ||
- | LB2FD: | ||
- | LB2FF: | ||
- | LB301: | ||
- | LB303: | ||
- | LB305: | ||
- | LB307: | ||
- | LB309: | ||
- | |||
- | ;Triangle continue handling routine addresses: | ||
- | |||
- | LB30B: | ||
- | LB30E: | ||
- | LB30F: | ||
- | LB311: | ||
- | LB313: | ||
- | LB315: | ||
- | LB317: | ||
- | LB319: | ||
- | |||
- | LoadNoiseSFXInitFlags: | ||
- | LB31B: LDA NoiseSFXFlag ; | ||
- | LB31E: LDX # | ||
- | LB320: BNE GotoSFXCheckFlags ; | ||
- | |||
- | LoadNoiseSFXContFlags: | ||
- | LB322: LDA NoiseContSFX ; | ||
- | LB325: LDX # | ||
- | LB327: BNE GotoSFXCheckFlags ; | ||
- | |||
- | LoadSQ1SFXInitFlags: | ||
- | LB329: LDA SQ1SFXFlag ; | ||
- | LB32C: LDX # | ||
- | LB32E: BNE GotoSFXCheckFlags ; | ||
- | |||
- | LoadSQ1SFXContFlags: | ||
- | LB330: LDA SQ1ContSFX ; | ||
- | LB333: LDX # | ||
- | LB335: BNE GotoSFXCheckFlags ; | ||
- | |||
- | GotoSFXCheckFlags: | ||
- | LB337: JSR CheckSFXFlag ; | ||
- | LB33A: JMP ($00E2) ; | ||
- | ;else jump to specific SFX handling routine. | ||
- | LoadSTriangleSFXInitFlags: | ||
- | LB33D: LDA TriangleSFXFlag ; | ||
- | LB340: LDX # | ||
- | LB342: BNE GotoSFXCheckFlags ; | ||
- | |||
- | LoadTriangleSFXContFlags: | ||
- | LB344: LDA TriangleContSFX ; | ||
- | LB347: LDX # | ||
- | LB349: BNE GotoSFXCheckFlags ; | ||
- | |||
- | LoadMultiSFXInitFlags: | ||
- | LB34B: LDA MultiSFXFlag ; | ||
- | LB34E: LDX # | ||
- | LB350: JSR CheckSFXFlag ; | ||
- | LB353: JSR FindMusicInitIndex ; | ||
- | LB356: JSR Add8 ; | ||
- | LB359: JMP ($00E2) ; | ||
- | ;else jump to specific SFX handling subroutine. | ||
- | LoadMultiSFXContFlags: | ||
- | LB35C: LDA MultiContSFX ; | ||
- | LB35F: LDX # | ||
- | LB361: JMP GotoSFXCheckFlags ; | ||
- | |||
- | LoadSQ1Flags: | ||
- | LB364: JSR LoadSQ1SFXInitFlags ; | ||
- | LB367: | ||
- | |||
- | LoadSQ1ChannelSFX: | ||
- | LB368: LDA # | ||
- | LB36A: BEQ + ; | ||
- | |||
- | LoadTriangleChannelSFX: | ||
- | LB36C: LDA # | ||
- | LB36E: BNE + ; | ||
- | |||
- | LoadNoiseChannelSFX: | ||
- | LB370: LDA # | ||
- | LB372: BNE + ; | ||
- | |||
- | LoadSQ2ChannelSFX: | ||
- | LB374: LDA # | ||
- | |||
- | LoadSFXData: | ||
- | LB376:* STA $E0 ; | ||
- | LB378: LDA #$40 ; | ||
- | LB37A: STA $E1 ; | ||
- | LB37C: STY $E2 ; | ||
- | LB37E: LDA #$B2 ; | ||
- | LB380: STA $E3 ; | ||
- | LB382: LDY # | ||
- | |||
- | LoadSFXRegisters: | ||
- | LB384:* LDA ($E2), | ||
- | LB386: STA ($E0), | ||
- | LB388: INY ; | ||
- | LB389: TYA ;The four registers associated with each sound--> | ||
- | LB38A: CMP # | ||
- | LB38C: BNE - ; | ||
- | LB38E: RTS ; | ||
- | |||
- | PauseSFX: | ||
- | LB38F:* INC SFXPaused ; | ||
- | LB392: JSR ClearSounds ; | ||
- | LB395: STA PauseSFXStatus ; | ||
- | LB398: | ||
- | |||
- | LB399:* LDA SFXPaused ; | ||
- | LB39C: BEQ -- ; | ||
- | LB39E: LDA PauseSFXStatus ; | ||
- | LB3A1: CMP # | ||
- | LB3A3: BEQ ++ ; | ||
- | LB3A5: AND #$03 ; | ||
- | LB3A7: CMP # | ||
- | LB3A9: BNE + ; | ||
- | LB3AB: LDY # | ||
- | LB3AD: JSR LoadSQ1ChannelSFX ; | ||
- | LB3B0:* INC PauseSFXStatus ; | ||
- | LB3B3: | ||
- | |||
- | ; | ||
- | ; | ||
- | ;SFX take priority over music. | ||
- | ; | ||
- | ;There are 10 SFX cycles run every time the sound engine subroutine is called. | ||
- | ;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. | ||
- | ;Noise=0, sq1=1, sq2=2, triangle=3, Multi=4 | ||
- | ;The sound channels are assigned music numbers. | ||
- | ;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 ; | ||
- | LB3BC: LSR ; | ||
- | LB3BD: BCS ++ ; | ||
- | LB3BF: LDA MainRoutine ; | ||
- | LB3C1: CMP #$05 ;Is game paused? | ||
- | LB3C3: BEQ --- ; | ||
- | LB3C5: LDA # | ||
- | LB3C7: STA SFXPaused ; | ||
- | LB3CA: JSR LoadNoiseSFXInitFlags ; | ||
- | LB3CD: JSR LoadMultiSFXInitFlags ; | ||
- | LB3D0: JSR LoadSTriangleSFXInitFlags ; | ||
- | LB3D3: JSR LoadMusicTempFlags ; | ||
- | |||
- | ClearSFXFlags: | ||
- | LB3D6:* LDA #$00 ; | ||
- | LB3D8: STA NoiseSFXFlag ; | ||
- | LB3DB: STA SQ1SFXFlag ; | ||
- | LB3DE: STA SQ2SFXFlag ; | ||
- | LB3E1: STA TriangleSFXFlag ; | ||
- | LB3E4: STA MultiSFXFlag ; | ||
- | LB3E7: STA MusicInitFlag ; | ||
- | LB3EA: | ||
- | |||
- | LB3EB:* JSR InitializeSoundAddresses ; | ||
- | LB3EE: BEQ -- ; | ||
- | |||
- | CheckRepeatMusic: | ||
- | LB3F0: LDA MusicRepeat ; | ||
- | LB3F3: BEQ + ;If music is supposed to repeat, reset music, | ||
- | LB3F5: LDA CurrentMusic ; | ||
- | LB3F8: STA CurrentMusicRepeat ; | ||
- | LB3FB: | ||
- | |||
- | CheckMusicFlags: | ||
- | LB3FC: LDA CurrentMusic ; | ||
- | LB3FF: CMP CurrentSFXFlags ; | ||
- | LB402: BEQ ++ ;just clear music counters, else clear everything. | ||
- | |||
- | InitializeSoundAddresses: | ||
- | LB404:* JSR ClearMusicAndSFXAddresses ; | ||
- | LB407: JSR ClearSounds ; | ||
- | LB40A:* JSR ClearSpecialAddresses ; | ||
- | LB40D: RTS ; | ||
- | |||
- | ClearSpecialAddresses: | ||
- | LB40E: LDA #$00 ; | ||
- | LB410: STA TriangleCounterCntrl ; | ||
- | LB413: STA SFXPaused ; | ||
- | LB416: STA CurrentMusicRepeat ; | ||
- | LB419: STA MusicRepeat ; | ||
- | LB41C: | ||
- | |||
- | ClearMusicAndSFXAddresses: | ||
- | LB41D: LDA #$00 ; | ||
- | LB41F: STA SQ1InUse ; | ||
- | LB422: STA SQ2InUse ; | ||
- | LB425: STA TriangleInUse ; | ||
- | LB428: STA WriteMultiChannelData ; | ||
- | LB42B: STA NoiseContSFX ; | ||
- | LB42E: STA SQ1ContSFX ; | ||
- | 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 ; | ||
- | LB449: LDA #$00 ;The sound channel registers. | ||
- | LB44B: STA TriangleCntrl0 ; | ||
- | LB44E: STA DMCCntrl1 ; | ||
- | LB451: RTS ; | ||
- | |||
- | SelectSFXRoutine: | ||
- | LB452: LDX ChannelType ; | ||
- | LB455: STA NoiseSFXLength, | ||
- | LB458: | ||
- | LB459: BEQ ++ ; | ||
- | LB45B: CMP #$01 ; | ||
- | LB45D: BEQ + ; | ||
- | LB45F: CMP #$02 ; | ||
- | LB461: BEQ MusicBranch00 ; | ||
- | LB463: CMP #$03 ; | ||
- | LB465: BEQ MusicBranch01 ; | ||
- | LB467: | ||
- | |||
- | LB468:* JSR LoadSQ1ChannelSFX ; | ||
- | LB46B: BEQ ++ ; | ||
- | MusicBranch00: | ||
- | LB46D: JSR LoadSQ2ChannelSFX ; | ||
- | LB470: BEQ ++ ; | ||
- | MusicBranch01: | ||
- | LB472: JSR LoadTriangleChannelSFX ; | ||
- | LB475: BEQ ++ ; | ||
- | LB477:* JSR LoadNoiseChannelSFX ; | ||
- | LB47A:* JSR UpdateContFlags ; | ||
- | LB47D: | ||
- | LB47E: STA NoiseInUse, | ||
- | LB481: LDA #$00 ; | ||
- | LB483: STA ThisNoiseFrame, | ||
- | LB486: STA NoiseSFXData, | ||
- | LB489: STA MultiSFXData, | ||
- | LB48C: STA ScrewAttackSFXData, | ||
- | LB48F: STA WriteMultiChannelData ; | ||
- | LB492: | ||
- | |||
- | UpdateContFlags: | ||
- | LB493:* LDX ChannelType ; | ||
- | LB496: LDA NoiseContSFX, | ||
- | LB499: AND # | ||
- | LB49B: ORA CurrentSFXFlags ; | ||
- | LB49E: STA NoiseContSFX, | ||
- | LB4A1: | ||
- | |||
- | ClearCurrentSFXFlags: | ||
- | LB4A2: LDA # | ||
- | LB4A4: STA CurrentSFXFlags ; | ||
- | LB4A7: BEQ - ; | ||
- | |||
- | IncrementSFXFrame: | ||
- | LB4A9: LDX ChannelType ; | ||
- | LB4AC: INC ThisNoiseFrame, | ||
- | LB4AF: LDA ThisNoiseFrame, | ||
- | LB4B2: CMP NoiseSFXLength, | ||
- | LB4B5: BNE + ; | ||
- | LB4B7: LDA #$00 ;If current frame is last frame, | ||
- | LB4B9: STA ThisNoiseFrame, | ||
- | LB4BC:* RTS ; | ||
- | |||
- | ;The CheckSFXFlag routine loads E0 thru E3 with the below values: | ||
- | ;1st SFX cycle $E0=#$BB, $E1=#$B2, $E2=#$22, $E3=# | ||
- | ;2nd SFX cycle $E0=#$CB, $E1=#$B2, $E2=#$EE, $E3=# | ||
- | ;3rd SFX cycle $E0=#$06, $E1=#$BC, $E2=#$5C, $E3=# | ||
- | ;4th SFX cycle $E0=#$16, $E1=#$BC, $E2=#$64, $E3=# | ||
- | ;5th SFX cycle $E0=#$DB, $E1=#$B2, $E2=#$30, $E3=# | ||
- | ;6th SFX cycle $E0=#$EB, $E1=#$B2, $E2=#$EE, $E3=# | ||
- | ;7th SFX cycle $E0=#$FB, $E1=#$B2, $E2=#$44, $E3=# | ||
- | ;8th SFX cycle $E0=#$0B, $E1=#$B3, $E2=#$EE, $E3=# | ||
- | ;9th SFX cycle $E0=#$26, $E1=#$BC, $E2=#$3D, $E3=# | ||
- | ;10th SFX cycle $E0=#$26, $E1=#$BC, $E2=#$4B, $E3=# | ||
- | |||
- | CheckSFXFlag: | ||
- | LB4BD: STA CurrentSFXFlags ; | ||
- | 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, | ||
- | LB4CD: INY ;thru $E3 during this loop. | ||
- | LB4CE: TYA ; | ||
- | LB4CF: CMP # | ||
- | LB4D1: BNE - ; | ||
- | LB4D3: LDA ($E4),Y ; | ||
- | LB4D5: STA ChannelType ;# | ||
- | 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: | ||
- | LB4E4: INY ;been set in the current SFX cycle. | ||
- | LB4E5: TYA ;is found, Branch to SFXFlagFound for further--> | ||
- | LB4E6: CMP # | ||
- | LB4E8: BNE - ;next SFX cycle. | ||
- | |||
- | RestoreSFXFlags: | ||
- | LB4EA: | ||
- | LB4EB: STA CurrentSFXFlags ; | ||
- | LB4EE: | ||
- | |||
- | SFXFlagFound: | ||
- | LB4EF:* LDA ($E0), | ||
- | LB4F1: STA $E2 ; | ||
- | LB4F3: INY ; | ||
- | LB4F4: LDA ($E0), | ||
- | LB4F6: STA $E3 ; | ||
- | LB4F8: JMP RestoreSFXFlags ; | ||
- | |||
- | ; | ||
- | |||
- | ;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: | ||
- | LB50B: | ||
- | |||
- | SpitFlameSFXStart: | ||
- | LB50F: LDA # | ||
- | LB511: LDY # | ||
- | LB513: JMP SelectSFXRoutine ; | ||
- | |||
- | SpitFlameSFXContinue: | ||
- | LB516: JSR IncrementSFXFrame ; | ||
- | LB519: BNE + ;If more frames to process, branch. | ||
- | LB51B: JMP EndNoiseSFX ; | ||
- | LB51E:* LDY NoiseSFXData ; | ||
- | LB521: LDA $B4FB, | ||
- | LB524: STA NoiseCntrl0 ; | ||
- | LB527: INC NoiseSFXData ; | ||
- | LB52A: | ||
- | |||
- | ScrewAttackSFXStart: | ||
- | LB52B: LDA # | ||
- | LB52D: LDY # | ||
- | LB52F: JSR SelectSFXRoutine ; | ||
- | LB532: LDA $B213 ;# | ||
- | LB535: STA NoiseSFXData ; | ||
- | LB538: | ||
- | |||
- | ScrewAttackSFXContinue: | ||
- | LB539: LDA ScrewAttackSFXData ; | ||
- | LB53C: CMP # | ||
- | LB53E: BEQ + ; | ||
- | LB540: JSR IncrementSFXFrame ; | ||
- | LB543: BNE - ; | ||
- | LB545: INC ScrewAttackSFXData ; | ||
- | LB548: | ||
- | |||
- | LB549:* JSR IncrementSFXFrame ; | ||
- | LB54C: BNE IncrementPeriodIndex ; | ||
- | LB54E: DEC NoiseSFXData ; | ||
- | LB551: DEC NoiseSFXData ; | ||
- | LB554: DEC NoiseSFXData ; | ||
- | LB557: INC MultiSFXData ; | ||
- | LB55A: LDA MultiSFXData ; | ||
- | LB55D: CMP # | ||
- | LB55F: BNE -- ;this routine. | ||
- | LB561: JMP EndNoiseSFX ; | ||
- | |||
- | IncrementPeriodIndex: | ||
- | LB564: INC NoiseSFXData ; | ||
- | LB567: LDA NoiseSFXData ; | ||
- | LB56A: STA NoiseCntrl2 ; | ||
- | LB56D: | ||
- | |||
- | MissileLaunchSFXStart: | ||
- | LB56E: LDA # | ||
- | LB570: LDY # | ||
- | LB572: JSR GotoSelectSFXRoutine ; | ||
- | LB575: LDA #$0A ; | ||
- | LB577: STA NoiseSFXData ; | ||
- | LB57A: | ||
- | |||
- | MissileLaunchSFXContine: | ||
- | LB57B: JSR IncrementSFXFrame ; | ||
- | LB57E: BNE IncrementPeriodIndex ; | ||
- | LB580: JMP EndNoiseSFX ; | ||
- | |||
- | BombExplodeSFXStart: | ||
- | LB583: LDA # | ||
- | LB585: LDY # | ||
- | |||
- | GotoSelectSFXRoutine: | ||
- | LB587:* JMP SelectSFXRoutine ; | ||
- | |||
- | ;The following routine is used to continue BombExplode and SamusWalk SFX. | ||
- | |||
- | NoiseSFXContinue: | ||
- | LB58A: JSR IncrementSFXFrame ; | ||
- | LB58D: BNE MusicBranch02 ; | ||
- | |||
- | EndNoiseSFX: | ||
- | LB58F: JSR ClearCurrentSFXFlags ; | ||
- | LB592: LDA #$10 ; | ||
- | LB594: STA NoiseCntrl0 ; | ||
- | |||
- | MusicBranch02: | ||
- | LB597: | ||
- | |||
- | SamusWalkSFXStart: | ||
- | LB598: LDA NoiseContSFX ; | ||
- | LB59B: AND # | ||
- | LB59D: BNE MusicBranch02 ; | ||
- | LB59F: LDA # | ||
- | LB5A1: LDY # | ||
- | LB5A3: BNE - ; | ||
- | |||
- | MultiSFXInit: | ||
- | LB5A5: STA MultiSFXLength ; | ||
- | LB5A8: JSR LoadSQ2ChannelSFX ; | ||
- | LB5AB: JSR UpdateContFlags ; | ||
- | LB5AE: LDA #$01 ; | ||
- | LB5B0: STA SQ1InUse ; | ||
- | LB5B3: LDA #$02 ;SFX are playing. | ||
- | LB5B5: STA SQ2InUse ; | ||
- | LB5B8: LDA #$00 ; | ||
- | LB5BA: STA SQ1ContSFX ; | ||
- | LB5BD: STA SQ1SFXData ; | ||
- | LB5C0: STA SQ1SQ2SFXData ; | ||
- | LB5C3: STA SQ1SFXPeriodLow ; | ||
- | LB5C6: STA ThisMultiFrame ; | ||
- | LB5C9: STA WriteMultiChannelData ; | ||
- | LB5CC: | ||
- | |||
- | EndMultiSFX: | ||
- | LB5CD: LDA #$10 ; | ||
- | LB5CF: STA SQ1Cntrl0 ; | ||
- | LB5D2: STA SQ2Cntrl0 ; | ||
- | LB5D5: LDA #$7F ; | ||
- | LB5D7: STA SQ1Cntrl1 ; | ||
- | LB5DA: STA SQ2Cntrl1 ; | ||
- | LB5DD: JSR ClearCurrentSFXFlags ; | ||
- | LB5E0: LDA #$00 ; | ||
- | LB5E2: STA SQ1InUse ; | ||
- | LB5E5: STA SQ2InUse ; | ||
- | LB5E8: INC WriteMultiChannelData ; | ||
- | LB5EB: | ||
- | |||
- | BossHitSFXStart: | ||
- | LB5EC: LDY #$2D ;Low byte of SQ1 sound data start address(base=$B200). | ||
- | LB5EE: JSR LoadSQ1ChannelSFX ; | ||
- | LB5F1: LDY #$29 ;Low byte of SQ2 sound data start address(base=$B200). | ||
- | LB5F3: JMP MultiSFXInit ; | ||
- | |||
- | BossHitSFXContinue: | ||
- | LB5F6: INC SQ1SFXData ; | ||
- | LB5F9: LDY SQ1SFXData ; | ||
- | LB5FC: LDA $B63C,Y ; | ||
- | LB5FF: STA SQ1Cntrl0 ; | ||
- | LB602: STA SQ2Cntrl0 ; | ||
- | LB605: LDA SQ1SFXData ; | ||
- | LB608: CMP # | ||
- | LB60A: BEQ ++ ; | ||
- | LB60C: CMP # | ||
- | LB60E: BCC + ; | ||
- | LB610: LDA RandomNumber1 ; | ||
- | LB612: ORA #$10 ;Set bit 5. | ||
- | LB614: AND # | ||
- | LB616: STA SQ1SFXPeriodLow ; | ||
- | LB619: | ||
- | LB61A: STA SQ1SQ2SFXData ; | ||
- | LB61D: JMP WriteSQ1SQ2PeriodLow ; | ||
- | LB620:* INC SQ1SQ2SFXData ; | ||
- | LB623: INC SQ1SQ2SFXData ; | ||
- | LB626: INC SQ1SFXPeriodLow ; | ||
- | LB629: INC SQ1SFXPeriodLow ; | ||
- | |||
- | WriteSQ1SQ2PeriodLow: | ||
- | LB62C: LDA SQ1SQ2SFXData ; | ||
- | LB62F: STA SQ2Cntrl2 ; | ||
- | LB632: LDA SQ1SFXPeriodLow ; | ||
- | LB635: STA SQ1Cntrl2 ; | ||
- | LB638: | ||
- | |||
- | LB639:* JMP EndMultiSFX ; | ||
- | |||
- | BossHitSFXDataTbl: | ||
- | LB63C: | ||
- | LB64C: | ||
- | |||
- | SamusHitSFXContinue: | ||
- | LB650: JSR IncrementSFXFrame ; | ||
- | LB653: BNE + ;If more SFX frames to process, branch. | ||
- | LB655: JMP EndMultiSFX ; | ||
- | LB658:* LDY #$25 ;Low byte of SQ1 sound data start address(base=$B200). | ||
- | LB65A: JSR LoadSQ1ChannelSFX ; | ||
- | LB65D: LDA RandomNumber1 ; | ||
- | LB65F: AND # | ||
- | LB661: STA SQ1Cntrl2 ; | ||
- | LB664: LDY #$25 ;Low byte of SQ2 sound data start address(base=$B200). | ||
- | LB666: JSR LoadSQ2ChannelSFX ; | ||
- | LB669: LDA RandomNumber1 ; | ||
- | LB66B: | ||
- | LB66C: | ||
- | LB66D: AND #$0F ; | ||
- | LB66F: STA SQ2Cntrl2 ; | ||
- | LB672: | ||
- | |||
- | SamusHitSFXStart: | ||
- | LB673: LDY #$25 ;Low byte of SQ1 sound data start address(base=$B200). | ||
- | LB675: JSR LoadSQ1ChannelSFX ; | ||
- | LB678: LDA RandomNumber1 ; | ||
- | LB67A: AND # | ||
- | LB67C: STA SQ1Cntrl2 ; | ||
- | LB67F: | ||
- | LB680: LDA RandomNumber1 ; | ||
- | LB682: AND #$03 ; | ||
- | LB684: ADC # | ||
- | LB686: LDY #$25 ;Low byte of SQ2 sound data start address(base=$B200). | ||
- | LB688: JSR MultiSFXInit ; | ||
- | LB68B: LDA RandomNumber1 ; | ||
- | LB68D: | ||
- | LB68E: | ||
- | LB68F: AND #$0F ; | ||
- | LB691: STA SQ2Cntrl2 ; | ||
- | LB694: | ||
- | |||
- | IncorrectPasswordSFXStart: | ||
- | LB695: LDY #$31 ;Low byte of SQ1 sound data start address(base=$B200). | ||
- | LB697: JSR LoadSQ1ChannelSFX ; | ||
- | LB69A: LDA # | ||
- | LB69C: LDY #$35 ;Low byte of SQ2 sound data start address(base=$B200). | ||
- | LB69E: JMP MultiSFXInit ; | ||
- | |||
- | IncorrectPasswordSFXContinue: | ||
- | LB6A1: JSR IncrementSFXFrame ; | ||
- | LB6A4: BNE - ;If more frames to process, branch to exit. | ||
- | LB6A6: JMP EndMultiSFX ; | ||
- | |||
- | ;The following table is used by the below routine to load SQ1Cntrl2 data in the--> | ||
- | ; | ||
- | |||
- | MissilePickupSFXTbl: | ||
- | LB6A9: | ||
- | |||
- | MissilePickupSFXContinue: | ||
- | LB6B0: JSR IncrementSFXFrame ; | ||
- | LB6B3: BNE MusicBranch03 ; | ||
- | LB6B5: LDY SQ1SFXData ; | ||
- | LB6B8: LDA MissilePickupSFXTbl, | ||
- | LB6BB: BNE + ; | ||
- | LB6BD: JMP EndSQ1SFX ; | ||
- | LB6C0:* STA SQ1Cntrl2 ; | ||
- | LB6C3: LDA $B244 ;# | ||
- | LB6C6: STA SQ1Cntrl3 ; | ||
- | LB6C9: INC SQ1SFXData ; | ||
- | |||
- | MusicBranch03: | ||
- | LB6CC: | ||
- | |||
- | MissilePickupSFXStart: | ||
- | LB6CD: LDA # | ||
- | LB6CF: LDY # | ||
- | LB6D1: BNE +++ ; | ||
- | |||
- | EnergyPickupSFXContinue: | ||
- | LB6D3: JSR IncrementSFXFrame ; | ||
- | LB6D6: BNE MusicBranch03 ; | ||
- | LB6D8: INC SQ1SFXData ; | ||
- | LB6DB: LDA SQ1SFXData ; | ||
- | LB6DE: CMP # | ||
- | LB6E0: BEQ + ; | ||
- | LB6E2: LDY #$3D ; | ||
- | LB6E4: JMP LoadSQ1ChannelSFX ; | ||
- | |||
- | EnergyPickupSFXStart: | ||
- | LB6E7: LDA # | ||
- | LB6E9: LDY # | ||
- | LB6EB: BNE +++ ; | ||
- | |||
- | ;The following continue routine is used by the metal, bird out of hole, | ||
- | ;enemy hit and the Samus jump SFXs. | ||
- | |||
- | SQ1SFXContinue: | ||
- | LB6ED: JSR IncrementSFXFrame ; | ||
- | LB6F0: BNE MusicBranch03 ; | ||
- | |||
- | EndSQ1SFX: | ||
- | LB6F2:* LDA #$10 ; | ||
- | LB6F4: STA SQ1Cntrl0 ; | ||
- | LB6F7: LDA #$00 ; | ||
- | LB6F9: STA SQ1InUse ; | ||
- | LB6FC: JSR ClearCurrentSFXFlags ; | ||
- | LB6FF: INC WriteMultiChannelData ; | ||
- | LB702: | ||
- | |||
- | SamusJumpSFXStart: | ||
- | LB703: LDA CurrentMusic ; | ||
- | LB706: CMP # | ||
- | LB708: BEQ MusicBranch03 ; | ||
- | LB70A: LDA # | ||
- | LB70C: LDY # | ||
- | LB70E: BNE SelectSFX1 ; | ||
- | |||
- | EnemyHitSFXStart: | ||
- | LB710: LDA # | ||
- | LB712: LDY # | ||
- | LB714: BNE SelectSFX1 ; | ||
- | |||
- | BulletFireSFXStart: | ||
- | LB716: LDA HasBeamSFX ; | ||
- | LB719: | ||
- | LB71A: BCS +++++ ; | ||
- | LB71C: LDA SQ1ContSFX ; | ||
- | LB71F: AND #$CC ;or EnemyHit SFX already playing, branch to exit. | ||
- | LB721: BNE MusicBranch03 ; | ||
- | LB723: LDA HasBeamSFX ; | ||
- | LB726: | ||
- | LB727: BCS + ; | ||
- | LB729: LDA # | ||
- | LB72B: LDY # | ||
- | LB72D: BNE SelectSFX1 ; | ||
- | |||
- | HasLongBeamSFXStart: | ||
- | LB72F:* LDA # | ||
- | LB731: LDY # | ||
- | LB733: BNE SelectSFX1 ; | ||
- | |||
- | MetalSFXStart: | ||
- | LB735: LDA # | ||
- | LB737: LDY # | ||
- | |||
- | SelectSFX1: | ||
- | LB739:* JMP SelectSFXRoutine ; | ||
- | |||
- | BirdOutOfHoleSFXStart: | ||
- | LB73C: LDA CurrentMusic ; | ||
- | LB73F: CMP #$04 ;the bomb ticking sound, else play regular SFX. | ||
- | LB741: BEQ + ; | ||
- | LB743: LDA # | ||
- | LB745: LDY # | ||
- | LB747: BNE SelectSFX1 ; | ||
- | LB749:* LDA # | ||
- | LB74B: LDY # | ||
- | LB74D: BNE SelectSFX1 ; | ||
- | |||
- | BulletFireSFXContinue: | ||
- | LB74F: LDA HasBeamSFX ; | ||
- | LB752: | ||
- | LB753: BCS +++ ; | ||
- | LB755: JSR IncrementSFXFrame ; | ||
- | LB758: BNE + ;If more frames to process, branch to exit. | ||
- | LB75A: JMP EndSQ1SFX ; | ||
- | LB75D: | ||
- | |||
- | HasIceBeamSFXStart: | ||
- | LB75E:* LDA # | ||
- | LB760: LDY # | ||
- | LB762: JMP SelectSFXRoutine ; | ||
- | |||
- | HasIceBeamSFXContinue: | ||
- | LB765:* JSR IncrementSFXFrame ; | ||
- | LB768: BNE + ;If more frames to process, branch. | ||
- | LB76A: JMP EndSQ1SFX ; | ||
- | LB76D:* LDA SQ1SFXData ; | ||
- | LB770: AND # | ||
- | LB772: | ||
- | LB773: LDA IceBeamSFXDataTbl, | ||
- | LB776: BNE ++ ; | ||
- | |||
- | IceBeamSFXDataTbl: | ||
- | LB778: | ||
- | LB779: | ||
- | |||
- | WaveBeamSFXStart: | ||
- | LB77A: LDA # | ||
- | LB77C: LDY # | ||
- | LB77E: JMP SelectSFXRoutine ; | ||
- | |||
- | WaveBeamSFXContinue: | ||
- | LB781: JSR IncrementSFXFrame ; | ||
- | LB784: BNE + ;If more frames to process, branch. | ||
- | LB786: LDY SQ1SQ2SFXData ; | ||
- | LB789: INC SQ1SQ2SFXData ; | ||
- | LB78C: LDA WaveBeamSFXDisLngthTbl, | ||
- | LB78F: STA SQ1Cntrl0 ; | ||
- | LB792: BNE MusicBranch10 ; | ||
- | LB794: JMP EndSQ1SFX ; | ||
- | LB797:* LDA SQ1SFXData | ||
- | LB79A: AND #$01 ; | ||
- | LB79C: | ||
- | LB79D: LDA WaveBeamSFXPeriodLowTbl, | ||
- | |||
- | LoadSQ1PeriodLow: | ||
- | LB7A0:* STA SQ1Cntrl2 ; | ||
- | LB7A3: INC SQ1SFXData ; | ||
- | |||
- | MusicBranch10: | ||
- | LB7A6: | ||
- | |||
- | WaveBeamSFXPeriodLowTbl: | ||
- | LB7A7: | ||
- | LB7A8: | ||
- | |||
- | WaveBeamSFXDisLngthTbl: | ||
- | LB7A9: | ||
- | LB7AA: | ||
- | LB7AB: | ||
- | |||
- | DoorOpenCloseSFXStart: | ||
- | LB7AC: LDA $B287 ;# | ||
- | LB7AF: STA TrianglePeriodLow ; | ||
- | LB7B2: LDA $B288 ;# | ||
- | LB7B5: AND #$07 ;Set triangle period high data byte. | ||
- | LB7B7: STA TrianglePeriodHigh ;# | ||
- | LB7BA: LDA #$0F ; | ||
- | LB7BC: STA TriangleChangeLow ; | ||
- | LB7BF: LDA #$00 ; | ||
- | LB7C1: STA TriangleChangeHigh ; | ||
- | LB7C4: LDA # | ||
- | LB7C6: LDY # | ||
- | LB7C8: JMP SelectSFXRoutine ; | ||
- | |||
- | DoorOpenCloseSFXContinue: | ||
- | LB7CB: JSR IncrementSFXFrame ; | ||
- | LB7CE: BNE + ; | ||
- | LB7D0: JMP EndTriangleSFX ; | ||
- | LB7D3:* JSR DecreaseTrianglePeriods ; | ||
- | LB7D6: JMP WriteTrianglePeriods ; | ||
- | |||
- | BeepSFXStart: | ||
- | LB7D9: LDA TriangleContSFX ; | ||
- | LB7DC: AND # | ||
- | LB7DE: BNE MusicBranch10 ; | ||
- | LB7E0: LDA # | ||
- | LB7E2: LDY # | ||
- | LB7E4: JMP SelectSFXRoutine ; | ||
- | |||
- | BeepSFXContinue: | ||
- | LB7E7: JSR IncrementSFXFrame ; | ||
- | LB7EA: BNE MusicBranch10 ; | ||
- | LB7EC: JMP EndTriangleSFX ; | ||
- | |||
- | BigEnemyHitSFXStart: | ||
- | LB7EF: LDA # | ||
- | LB7F1: STA TriangleChangeLow ; | ||
- | LB7F4: LDA #$00 ; | ||
- | LB7F6: STA TriangleChangeHigh ; | ||
- | LB7F9: LDA $B27F ;# | ||
- | LB7FC: STA TrianglePeriodLow ; | ||
- | LB7FF: LDA $B280 ;# | ||
- | LB802: AND # | ||
- | LB804: STA TrianglePeriodHigh ; | ||
- | LB807: LDA # | ||
- | LB809: LDY # | ||
- | LB80B: JMP SelectSFXRoutine ; | ||
- | |||
- | BigEnemyHitSFXContinue: | ||
- | LB80E: JSR IncrementSFXFrame ; | ||
- | LB811: BNE + ;If more frames to process, branch | ||
- | LB813: JMP EndTriangleSFX ; | ||
- | LB816:* JSR IncreaseTrianglePeriods ; | ||
- | LB819: LDA RandomNumber1 ; | ||
- | LB81B: AND #$3C ; | ||
- | LB81D: STA TriangleSFXData ; | ||
- | LB820: LDA TrianglePeriodLow ; | ||
- | LB823: AND # | ||
- | LB825: ORA TriangleSFXData ; | ||
- | LB828: STA TriangleCntrl2 ; | ||
- | LB82B: LDA TrianglePeriodHigh ; | ||
- | LB82E: ORA #$40 ;Set 4th bit in triangle channel period high. | ||
- | LB830: STA TriangleCntrl3 ; | ||
- | LB833: | ||
- | |||
- | SamusToBallSFXStart: | ||
- | LB834: LDA # | ||
- | LB836: LDY # | ||
- | LB838: JSR SelectSFXRoutine ; | ||
- | LB83B: LDA #$05 ; | ||
- | LB83D: STA PercentDifference ; | ||
- | LB840: LDA $B26F ;# | ||
- | LB843: STA TrianglePeriodLow ; | ||
- | LB846: LDA $B270 ;# | ||
- | LB849: AND # | ||
- | LB84B: STA TrianglePeriodHigh ; | ||
- | LB84E: | ||
- | |||
- | SamusToBallSFXContinue: | ||
- | LB84F: JSR IncrementSFXFrame ; | ||
- | LB852: BNE + ;If more frames to process, branch. | ||
- | LB854: JMP EndTriangleSFX ; | ||
- | LB857:* JSR DivideTrianglePeriods ; | ||
- | LB85A: LDA TriangleLowPercentage ; | ||
- | LB85D: STA TriangleChangeLow ; | ||
- | LB860: LDA TriangleHighPercentage ; | ||
- | LB863: STA TriangleChangeHigh ; | ||
- | LB866: JSR DecreaseTrianglePeriods ; | ||
- | |||
- | WriteTrianglePeriods: | ||
- | LB869: LDA TrianglePeriodLow ; | ||
- | LB86C: STA TriangleCntrl2 ; | ||
- | LB86F: LDA TrianglePeriodHigh ; | ||
- | LB872: ORA # | ||
- | LB874: STA TriangleCntrl3 ; | ||
- | LB877: | ||
- | |||
- | BombLaunchSFXStart: | ||
- | LB878: LDA # | ||
- | LB87A: LDY # | ||
- | LB87C: JMP SelectSFXRoutine ; | ||
- | |||
- | BombLaunchSFXContinue: | ||
- | LB87F: JSR IncrementSFXFrame ; | ||
- | LB882: BNE MusicBranch04 ; | ||
- | LB884: INC TriangleSFXData ; | ||
- | LB887: LDA TriangleSFXData ; | ||
- | LB88A: CMP #$02 ; | ||
- | LB88C: BNE + ; | ||
- | LB88E: JMP EndTriangleSFX ; | ||
- | LB891:* LDY # | ||
- | LB893: JMP LoadTriangleChannelSFX ; | ||
- | |||
- | EndTriangleSFX: | ||
- | LB896: LDA #$00 ; | ||
- | LB898: STA TriangleCntrl0 ; | ||
- | LB89B: STA TriangleInUse ; | ||
- | LB89E: LDA #$18 ; | ||
- | LB8A0: STA TriangleCntrl3 ; | ||
- | LB8A3: JSR ClearCurrentSFXFlags ; | ||
- | |||
- | MusicBranch04: | ||
- | LB8A6: | ||
- | |||
- | MetroidHitSFXStart: | ||
- | LB8A7: LDA # | ||
- | LB8A9: LDY # | ||
- | LB8AB: JSR SelectSFXRoutine ; | ||
- | LB8AE: JMP RndTrianglePeriods ; | ||
- | |||
- | MetroiHitSFXContinue: | ||
- | LB8B1: JSR IncrementSFXFrame ; | ||
- | LB8B4: BEQ + ; | ||
- | LB8B6: INC TriangleSFXData ; | ||
- | LB8B9: LDA TriangleSFXData ; | ||
- | LB8BC: CMP #$09 ;the course of the SFX. | ||
- | LB8BE: BNE MusicBranch04 ; | ||
- | LB8C0: JMP EndTriangleSFX ; | ||
- | |||
- | RndTrianglePeriods: | ||
- | LB8C3:* LDA RandomNumber1 ; | ||
- | LB8C5: ORA # | ||
- | LB8C7: STA TriangleCntrl2 ; | ||
- | LB8CA: AND #$01 ; | ||
- | LB8CC: ORA # | ||
- | LB8CE: STA TriangleCntrl3 ; | ||
- | LB8D1: | ||
- | |||
- | SamusDieSFXStart: | ||
- | LB8D2: JSR InitializeSoundAddresses ; | ||
- | LB8D5: LDA # | ||
- | LB8D7: LDY # | ||
- | LB8D9: JSR SelectSFXRoutine ; | ||
- | LB8DC: LDA # | ||
- | LB8DE: STA PercentDifference ; | ||
- | LB8E1: LDA $B277 ;# | ||
- | LB8E4: STA TrianglePeriodLow ; | ||
- | LB8E7: LDA # | ||
- | LB8E9: STA TrianglePeriodHigh ; | ||
- | LB8EC: | ||
- | |||
- | SamusDieSFXContinue: | ||
- | LB8ED: JSR IncrementSFXFrame ; | ||
- | LB8F0: BNE + ; | ||
- | LB8F2: LDA # | ||
- | LB8F4: STA TriangleChangeLow ; | ||
- | LB8F7: LDA #$00 ; | ||
- | LB8F9: STA TriangleChangeHigh ; | ||
- | LB8FC: JSR DecreaseTrianglePeriods ; | ||
- | LB8FF: INC TriangleSFXData ; | ||
- | LB902: LDA TriangleSFXData ; | ||
- | LB905: CMP #$06 ; | ||
- | LB907: BNE - ;If more frames to process, branch to exit. | ||
- | LB909: JMP EndTriangleSFX ; | ||
- | LB90C:* JSR DivideTrianglePeriods ; | ||
- | LB90F: LDA TriangleLowPercentage ; | ||
- | LB912: STA TriangleChangeLow ; | ||
- | LB915: LDA TriangleHighPercentage ; | ||
- | LB918: STA TriangleChangeHigh ; | ||
- | LB91B: JSR IncreaseTrianglePeriods ; | ||
- | LB91E: JMP WriteTrianglePeriods ; | ||
- | |||
- | StatueRaiseSFXStart: | ||
- | LB921: LDA $B283 ;# | ||
- | LB924: STA TrianglePeriodLow ; | ||
- | LB927: LDA $B284 ;# | ||
- | LB92A: AND #$07 ; | ||
- | LB92C: STA TrianglePeriodHigh ; | ||
- | LB92F: LDA #$00 ; | ||
- | LB931: STA TriangleChangeHigh ; | ||
- | LB934: LDA #$0B ; | ||
- | LB936: STA TriangleChangeLow ; | ||
- | LB939: LDA # | ||
- | LB93B: LDY # | ||
- | LB93D: JMP SelectSFXroutine ; | ||
- | |||
- | StatueRaiseSFXContinue: | ||
- | LB940: JSR IncrementSFXFrame ; | ||
- | LB943: BNE ++ ; | ||
- | LB945: INC TriangleSFXData ; | ||
- | LB948: LDA TriangleSFXData ; | ||
- | LB94B: CMP # | ||
- | LB94D: BNE + ; | ||
- | LB94F: JMP EndTriangleSFX ; | ||
- | LB952:* LDA TriangleChangeLow ; | ||
- | LB955: | ||
- | LB956: LDA TriangleChangeHigh ; | ||
- | LB959: | ||
- | LB95A: LDA #$25 ; | ||
- | LB95C: STA TriangleChangeLow ; | ||
- | LB95F: LDA #$00 ;No change in triangle period high. | ||
- | LB961: STA TriangleChangeHigh ; | ||
- | LB964: JSR IncreaseTrianglePeriods ; | ||
- | LB967: | ||
- | LB968: STA TriangleChangeHigh ; | ||
- | LB96B: | ||
- | LB96C: STA TriangleChangeLow ; | ||
- | LB96F: JMP WriteTrianglePeriods ; | ||
- | LB972:* JSR DecreaseTrianglePeriods ; | ||
- | LB975: JMP WriteTrianglePeriods ; | ||
- | |||
- | IncreaseTrianglePeriods: | ||
- | LB978: | ||
- | LB979: LDA TrianglePeriodLow ; | ||
- | LB97C: ADC TriangleChangeLow ; | ||
- | LB97F: STA TrianglePeriodLow ; | ||
- | LB982: LDA TrianglePeriodHigh ; | ||
- | LB985: ADC TriangleChangeHigh ; | ||
- | LB988: STA TrianglePeriodHigh ; | ||
- | LB98B: | ||
- | |||
- | DecreaseTrianglePeriods: | ||
- | LB98C: | ||
- | LB98D: LDA TrianglePeriodLow ; | ||
- | LB990: SBC TriangleChangeLow ; | ||
- | LB993: STA TrianglePeriodLow ; | ||
- | LB996: LDA TrianglePeriodHigh ; | ||
- | LB999: SBC TriangleChangeHigh ; | ||
- | LB99C: STA TrianglePeriodHigh ; | ||
- | LB99F: | ||
- | |||
- | DivideTrianglePeriods: | ||
- | LB9A0: LDA TrianglePeriodLow ; | ||
- | LB9A3: | ||
- | LB9A4: LDA TrianglePeriodHigh ; | ||
- | LB9A7: | ||
- | LB9A8: LDA #$00 ; | ||
- | LB9AA: STA DivideData ; | ||
- | LB9AD: LDX #$10 ; | ||
- | LB9AF: ROL TrianglePeriodLow ; | ||
- | LB9B2: ROL TrianglePeriodHigh ; | ||
- | LB9B5:* ROL DivideData ; | ||
- | LB9B8: LDA DivideData ; | ||
- | LB9BB: CMP PercentDifference ; | ||
- | LB9BE: BCC + ; | ||
- | LB9C0: SBC PercentDifference ; | ||
- | LB9C3: STA DivideData ; | ||
- | LB9C6:* ROL TrianglePeriodLow ; | ||
- | LB9C9: ROL TrianglePeriodHigh ; | ||
- | LB9CC: | ||
- | LB9CD: BNE -- ; | ||
- | LB9CF: LDA TrianglePeriodLow ; | ||
- | LB9D2: STA TriangleLowPercentage ; | ||
- | LB9D5: LDA TrianglePeriodHigh ; | ||
- | LB9D8: STA TriangleHighPercentage ; | ||
- | LB9DB: | ||
- | LB9DC: STA TrianglePeriodHigh ; | ||
- | LB9DF: | ||
- | LB9E0: STA TrianglePeriodLow ; | ||
- | LB9E3: | ||
- | |||
- | ; | ||
- | |||
- | SetVolumeAndDisableSweep: | ||
- | LB9E4: LDA #$7F ; | ||
- | LB9E6: STA MusicSQ1Sweep ; | ||
- | LB9E9: STA MusicSQ2Sweep ; | ||
- | LB9EC: STX SQ1DutyEnvelope ; | ||
- | LB9EF: STY SQ2DutyEnvelope ; | ||
- | LB9F2: | ||
- | |||
- | ResetVolumeIndex: | ||
- | LB9F3: LDA SQ1MusicFrameCount ; | ||
- | LB9F6: CMP # | ||
- | LB9F8: BNE + ; | ||
- | LB9FA: STA SQ1VolumeIndex ; | ||
- | LB9FD:* LDA SQ2MusicFrameCount ; | ||
- | LBA00: CMP #$01 ;If at the beginning of a new SQ2 note, set--> | ||
- | LBA02: BNE + ; | ||
- | LBA04: STA SQ2VolumeIndex ; | ||
- | LBA07:* RTS ; | ||
- | |||
- | LoadSQ1SQ2Periods: | ||
- | LBA08: LDA WriteMultiChannelData ; | ||
- | LBA0B: BEQ + ; | ||
- | LBA0D: LDA #$00 ; | ||
- | LBA0F: STA WriteMultiChannelData ; | ||
- | LBA12: LDA MusicSQ1Sweep ; | ||
- | LBA15: STA SQ1Cntrl1 ; | ||
- | LBA18: LDA MusicSQ1PeriodLow ; | ||
- | LBA1B: STA SQ1Cntrl2 ; | ||
- | LBA1E: LDA MusicSQ1PeriodHigh ; | ||
- | LBA21: STA SQ1Cntrl3 ; | ||
- | LBA24: LDA MusicSQ2Sweep ; | ||
- | LBA27: STA SQ2Cntrl1 ; | ||
- | LBA2A: LDA MusicSQ2PeriodLow ; | ||
- | LBA2D: STA SQ2Cntrl2 ; | ||
- | LBA30: LDA MusicSQ2PeriodHigh ; | ||
- | LBA33: STA SQ2Cntrl3 ; | ||
- | LBA36: | ||
- | |||
- | LoadSQ1SQ2Channels: | ||
- | LBA37: LDX # | ||
- | LBA39: JSR WriteSQCntrl0 ; | ||
- | LBA3C: | ||
- | LBA3D: JSR WriteSQCntrl0 ; | ||
- | LBA40: | ||
- | |||
- | WriteSQCntrl0: | ||
- | LBA41: LDA SQ1VolumeCntrl, | ||
- | LBA44: BEQ +++++ ; | ||
- | LBA46: STA VolumeCntrlAddress ; | ||
- | LBA48: JSR LoadSQ1SQ2Periods ; | ||
- | LBA4B: LDA SQ1VolumeData, | ||
- | LBA4E: CMP #$10 ;If sound channel is not currently--> | ||
- | LBA50: BEQ +++++++ ; | ||
- | LBA52: LDY #$00 ; | ||
- | LBA54:* DEC VolumeCntrlAddress ; | ||
- | LBA56: BEQ + ; | ||
- | LBA58: | ||
- | LBA59: | ||
- | LBA5A: BNE - ;Keep decrementing until desired address is found. | ||
- | LBA5C:* LDA VolumeCntrlAddressTbl, | ||
- | LBA5F: STA $EC ; | ||
- | LBA61: LDA VolumeCntrlAddressTbl+1, | ||
- | LBA64: STA $ED ; | ||
- | LBA66: LDY SQ1VolumeIndex, | ||
- | LBA69: LDA ($EC), | ||
- | LBA6B: STA Cntrl0Data ; | ||
- | LBA6D: CMP #$FF ;If last entry in volume table is #$FF, restore--> | ||
- | LBA6F: BEQ MusicBranch05 ; | ||
- | LBA71: CMP # | ||
- | LBA73: BEQ MusicBranch06 ; | ||
- | LBA75: LDA SQ1DutyEnvelope, | ||
- | LBA78: AND #$F0 ;add this frame of volume data and store results--> | ||
- | LBA7A: ORA Cntrl0Data ; | ||
- | LBA7C: | ||
- | LBA7D:* INC SQ1VolumeIndex, | ||
- | LBA80:* LDA SQ1InUse, | ||
- | LBA83: BNE + ; | ||
- | LBA85: | ||
- | LBA86: BEQ ++ ;If currently on SQ1, branch to write SQ1 data. | ||
- | |||
- | WriteSQ2Cntrl0: | ||
- | LBA88: STY SQ2Cntrl0 ; | ||
- | LBA8B: | ||
- | |||
- | WriteSQ1Cntrl0: | ||
- | LBA8C:* STY SQ1Cntrl0 ; | ||
- | LBA8F: | ||
- | |||
- | MusicBranch05: | ||
- | LBA90: LDY SQ1DutyEnvelope, | ||
- | LBA93: BNE --- ; | ||
- | |||
- | MusicBranch06: | ||
- | LBA95: LDY # | ||
- | LBA97: BNE --- ; | ||
- | LBA99:* LDY # | ||
- | LBA9B: BNE ----- ; | ||
- | |||
- | GotoCheckRepeatMusic: | ||
- | LBA9D:* JSR CheckRepeatMusic ; | ||
- | LBAA0: | ||
- | |||
- | GotoLoadSQ1SQ2Channels: | ||
- | LBAA1:* JSR LoadSQ1SQ2Channels ; | ||
- | LBAA4: | ||
- | |||
- | LoadCurrentMusicFrameData: | ||
- | LBAA5: JSR ResetVolumeIndex ; | ||
- | LBAA8: LDA #$00 ; | ||
- | LBAAA: | ||
- | LBAAB: STA ThisSoundChannel ; | ||
- | LBAAE: BEQ ++ ; | ||
- | LBAB0: | ||
- | LBAB1: | ||
- | LBAB2: | ||
- | ; | ||
- | IncrementToNextChannel: | ||
- | LBAB3: | ||
- | LBAB4: | ||
- | LBAB5: CMP #$04 ;If done with four sound channels, branch to load--> | ||
- | LBAB7: BEQ -- ; | ||
- | LBAB9: LDA ThisSoundChannel ; | ||
- | LBABC: CLC ;sound channel start address. | ||
- | LBABD: ADC # | ||
- | LBABF: STA ThisSoundChannel ; | ||
- | LBAC2: | ||
- | LBAC3: | ||
- | LBAC4: | ||
- | LBAC5: LDA SQ1LowBaseByte, | ||
- | LBAC8: STA $E6 ; | ||
- | LBACA: LDA SQ1HighBaseByte, | ||
- | LBACD: STA $E7 ; | ||
- | LBACF: LDA SQ1HighBaseByte, | ||
- | LBAD2: BEQ -- ;to find data for next sound channel. | ||
- | LBAD4: | ||
- | LBAD5: | ||
- | LBAD6: | ||
- | LBAD7: DEC SQ1MusicFrameCount, | ||
- | LBADA: BNE IncrementToNextChannel ; | ||
- | ;load the next set of sound channel data. | ||
- | LoadNextChannelIndexData: | ||
- | LBADC: LDY SQ1MusicIndexIndex, | ||
- | LBADF: INC SQ1MusicIndexIndex, | ||
- | LBAE2: LDA ($E6),Y ; | ||
- | LBAE4: BEQ ---- ; | ||
- | LBAE6: | ||
- | 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 ; | ||
- | |||
- | RepeatMusicLoop: | ||
- | LBAF4:* LDA SQ1RepeatCounter, | ||
- | LBAF7: BEQ ++ ; | ||
- | LBAF9: DEC SQ1RepeatCounter, | ||
- | LBAFC: LDA SQ1LoopIndex, | ||
- | LBAFF: STA SQ1MusicIndexIndex, | ||
- | LBB02: BNE ++ ; | ||
- | |||
- | StartNewMusicLoop: | ||
- | LBB04: | ||
- | LBB05: AND # | ||
- | LBB07: STA SQ1RepeatCounter, | ||
- | LBB0A: DEC SQ1RepeatCounter, | ||
- | LBB0D: LDA SQ1MusicIndexIndex, | ||
- | LBB10: STA SQ1LoopIndex, | ||
- | LBB13:* JMP LoadNextChannelIndexData ; | ||
- | |||
- | LBB16:* JMP LoadNoiseChannelMusic ; | ||
- | |||
- | LBB19:* JMP LoadTriangleCntrl0 ; | ||
- | |||
- | LoadMusicChannel: | ||
- | LBB1C: | ||
- | LBB1D: AND #$B0 ; | ||
- | LBB1F: CMP #$B0 ;Is data byte music note length data? If not, branch. | ||
- | LBB21: BNE + ; | ||
- | LBB23: | ||
- | LBB24: AND # | ||
- | LBB26: | ||
- | LBB27: ADC NoteLengthTblOffset ; | ||
- | LBB2A: | ||
- | LBB2B: LDA NoteLengths0Tbl, | ||
- | LBB2E: STA SQ1FrameCountInit, | ||
- | LBB31: | ||
- | LBB32: | ||
- | LBB33: CMP #$02 ;If loading Triangle channel data, branch. | ||
- | LBB35: BEQ - ; | ||
- | |||
- | LoadSoundDataIndexIndex: | ||
- | LBB37: LDY SQ1MusicIndexIndex, | ||
- | LBB3A: INC SQ1MusicIndexIndex, | ||
- | LBB3D: LDA ($E6), | ||
- | LBB3F: | ||
- | LBB40: | ||
- | LBB41: CMP #$03 ;If loading Noise channel data, branch. | ||
- | LBB43: BEQ --- ; | ||
- | LBB45: | ||
- | LBB46: LDX ThisSoundChannel ; | ||
- | LBB49: LDA MusicNotesTbl+1, | ||
- | LBB4C: BEQ + ;If data is #$00, skip period high and low loading. | ||
- | LBB4E: STA MusicSQ1PeriodLow, | ||
- | LBB51: LDA MusicNotesTbl, | ||
- | LBB54: ORA # | ||
- | LBB56: STA MusicSQ1PeriodHigh, | ||
- | LBB59: | ||
- | LBB5A: | ||
- | LBB5B: | ||
- | LBB5C: | ||
- | LBB5D: BNE + ;If period information was present, branch. | ||
- | |||
- | NoPeriodInformation: | ||
- | LBB5F: LDA # | ||
- | LBB61: STA Cntrl0Data ; | ||
- | LBB63: | ||
- | LBB64: CMP #$02 ;If loading triangle channel data, branch. | ||
- | LBB66: BEQ ++ ; | ||
- | LBB68: LDA # | ||
- | LBB6A: STA Cntrl0Data ; | ||
- | LBB6C: BNE ++ ; | ||
- | |||
- | PeriodInformationFound: | ||
- | LBB6E:* LDA SQ1DutyEnvelope, | ||
- | LBB71: STA Cntrl0Data ; | ||
- | LBB73: | ||
- | LBB74: DEC SQ1InUse, | ||
- | LBB77: CMP SQ1InUse, | ||
- | LBB7A: BEQ +++ ; | ||
- | LBB7C: INC SQ1InUse, | ||
- | LBB7F: LDY ThisSoundChannel ; | ||
- | LBB82: | ||
- | LBB83: CMP #$02 ;If loading triangle channel data, branch. | ||
- | LBB85: BEQ + ; | ||
- | LBB87: LDA SQ1VolumeCntrl, | ||
- | LBB8A: BNE ++ ; | ||
- | LBB8C:* LDA Cntrl0Data ; | ||
- | LBB8E: STA SQ1Cntrl0, | ||
- | LBB91:* LDA Cntrl0Data ; | ||
- | LBB93: STA SQ1VolumeData, | ||
- | LBB96: LDA MusicSQ1PeriodLow, | ||
- | LBB99: STA SQ1Cntrl2, | ||
- | LBB9C: LDA MusicSQ1PeriodHigh, | ||
- | LBB9F: STA SQ1Cntrl3, | ||
- | LBBA2: LDA MusicSQ1Sweep, | ||
- | LBBA5: STA SQ1Cntrl1, | ||
- | |||
- | LoadNewMusicFrameCount: | ||
- | LBBA8: LDA SQ1FrameCountInit, | ||
- | LBBAB: STA SQ1MusicFrameCount, | ||
- | LBBAE: JMP IncrementToNextChannel ; | ||
- | |||
- | SQ1SQ2InUse: | ||
- | LBBB1:* INC SQ1InUse, | ||
- | LBBB4: JMP LoadNewMusicFrameCount ; | ||
- | |||
- | 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: | ||
- | LBBC6: JMP AddTriangleLength ; | ||
- | LBBC9:* LDA # | ||
- | LBBCB: BNE + ; | ||
- | |||
- | AddTriangleLength: | ||
- | LBBCD: CLC ; | ||
- | LBBCE: ADC #$FF ;Add # | ||
- | LBBD0: | ||
- | LBBD1: | ||
- | LBBD2: CMP #$3C ; | ||
- | LBBD4: BCC + ;If result is greater than #$3C, store # | ||
- | LBBD6: LDA # | ||
- | LBBD8:* STA TriLinearCount ; | ||
- | LBBDB:* JMP LoadSoundDataIndexIndex ; | ||
- | |||
- | LoadNoiseChannelMusic: | ||
- | LBBDE: LDA NoiseContSFX ; | ||
- | LBBE1: AND #$FC ;If playing any Noise SFX, branch to exit. | ||
- | LBBE3: BNE + ; | ||
- | LBBE5: LDA $B200,Y ; | ||
- | LBBE8: STA NoiseCntrl0 ; | ||
- | LBBEB: LDA $B201, | ||
- | LBBEE: STA NoiseCntrl2 ;# | ||
- | LBBF1: LDA $B202,Y ; | ||
- | LBBF4: STA NoiseCntrl3 ; | ||
- | LBBF7:* JMP LoadNewMusicFrameCount ; | ||
- | |||
- | ;The following table is used by the InitializeMusic routine to find the index for loading | ||
- | ;addresses $062B thru $0637. | ||
- | |||
- | InitMusicIndexTbl: | ||
- | LBBFA: | ||
- | LBBFB: | ||
- | LBBFC: | ||
- | LBBFD: | ||
- | LBBFE: | ||
- | LBBFF: | ||
- | LBC00: | ||
- | LBC01: | ||
- | LBC02: | ||
- | LBC03: | ||
- | LBC04: | ||
- | LBC05: | ||
- | |||
- | ;The tables below contain addresses for SFX and music handling routines. | ||
- | ;Multi channel Init SFX and music handling routine addresses: | ||
- | |||
- | LBC06: | ||
- | LBC08: | ||
- | LBC0A: | ||
- | LBC0C: | ||
- | LBC0E: | ||
- | LBC10: | ||
- | LBC12: | ||
- | LBC14: | ||
- | |||
- | ;Multi channel continue SFX handling routine addresses: | ||
- | |||
- | LBC16: | ||
- | LBC18: | ||
- | LBC1A: | ||
- | LBC1C: | ||
- | LBC1E: | ||
- | LBC20: | ||
- | LBC22: | ||
- | LBC24: | ||
- | |||
- | ;Music handling routine addresses: | ||
- | |||
- | LBC26: | ||
- | LBC28: | ||
- | LBC2A: | ||
- | LBC2C: | ||
- | LBC2E: | ||
- | LBC30: | ||
- | LBC32: | ||
- | LBC34: | ||
- | |||
- | ; | ||
- | |||
- | LoadMusicTempFlags: | ||
- | LBC36: LDA CurrentMusicRepeat ; | ||
- | LBC39: LDX # | ||
- | LBC3B: BNE + ; | ||
- | |||
- | LoadMusicInitFlags: | ||
- | LBC3D: LDA MusicInitFlag ; | ||
- | LBC40: LDX # | ||
- | LBC42:* JSR CheckSFXFlag ; | ||
- | LBC45: JSR FindMusicInitIndex ; | ||
- | LBC48: JMP ($00E2) ; | ||
- | ;else jump to specific SFX handling subroutine. | ||
- | |||
- | ContinueMusic: | ||
- | LBC4B: LDA CurrentMusic ; | ||
- | LBC4E: BEQ +++ ; | ||
- | LBC50: JMP LoadCurrentMusicFrameData ; | ||
- | |||
- | ; | ||
- | ;# | ||
- | ;# | ||
- | ;#$08=Fade in music, #$09=Power up music, #$0A=End game music, #$0B=Intro music. | ||
- | |||
- | FindMusicInitIndex: | ||
- | LBC53: LDA # | ||
- | LBC55: STA MusicInitIndex ; | ||
- | LBC58: LDA CurrentSFXFlags ; | ||
- | LBC5B: BEQ ++ ; | ||
- | LBC5D:* INC MusicInitIndex ; | ||
- | LBC60: | ||
- | LBC61: BCC - ;Loop until SFX flag found. | ||
- | LBC63: | ||
- | |||
- | ;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: | ||
- | LBC68: ADC #$08 ;Add #$08 to MusicInitIndex. | ||
- | LBC6A: STA MusicInitIndex ; | ||
- | LBC6D: | ||
- | |||
- | LBC6E: LDA CurrentMusic ; | ||
- | LBC71: ORA # | ||
- | LBC73: STA CurrentMusic ; | ||
- | LBC76: | ||
- | |||
- | Music00Start: | ||
- | LBC77: JMP Music00Init ; | ||
- | |||
- | Music01Start: | ||
- | LBC7A: JMP Music01Init ; | ||
- | |||
- | Music02Start: | ||
- | LBC7D: JMP Music02Init ; | ||
- | |||
- | Msic03Start: | ||
- | LBC80: JMP Music03Init ; | ||
- | |||
- | Music04Start: | ||
- | LBC83: JMP Music04Init ; | ||
- | |||
- | Music05Start: | ||
- | LBC86: JMP Music05Init ; | ||
- | |||
- | Music04Init: | ||
- | LBC89: LDA # | ||
- | |||
- | XYMusicInit: | ||
- | LBC8B: | ||
- | LBC8C: | ||
- | |||
- | LBC8D:* JSR SetVolumeAndDisableSweep ; | ||
- | LBC90: JSR InitializeMusic ; | ||
- | LBC93: JMP LoadCurrentMusicFrameData ; | ||
- | |||
- | Music03Init: | ||
- | LBC96: LDA # | ||
- | LBC98: BNE -- ; | ||
- | |||
- | Music02Init: | ||
- | LBC9A: LDA # | ||
- | LBC9C: BNE -- ; | ||
- | |||
- | Music05Init: | ||
- | LBC9E: LDX # | ||
- | LBCA0: LDY # | ||
- | LBCA2: BNE - ; | ||
- | |||
- | Music01Init: | ||
- | LBCA4: LDX # | ||
- | LBCA6: LDY # | ||
- | LBCA8: BNE - ; | ||
- | |||
- | Music00Init: | ||
- | LBCAA: LDX # | ||
- | LBCAC: LDY # | ||
- | LBCAE: BNE - ; | ||
- | |||
- | ;The following address table provides starting addresses of the volume data tables below: | ||
- | VolumeCntrlAddressTbl: | ||
- | LBCB0: | ||
- | |||
- | VolumeDataTbl1: | ||
- | LBCBA: | ||
- | |||
- | VolumeDataTbl2: | ||
- | LBCC5: | ||
- | |||
- | VolumeDataTbl3: | ||
- | LBCCF: | ||
- | |||
- | VolumeDataTbl4: | ||
- | LBCDA: | ||
- | LBCEA: | ||
- | LBCFA: | ||
- | |||
- | VolumeDataTbl5: | ||
- | LBD03: | ||
- | LBD13: | ||
- | LBD23: | ||
- | |||
- | ;The init music table loads addresses $062B thru $0637 with the initial data needed to play the | ||
- | ;selected music. | ||
- | ;.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. | ||
- | ;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(not used this memory page). | ||
- | LBD31: | ||
- | LBD36: | ||
- | |||
- | ;Escape music(not used this memory page). | ||
- | LBD3E: | ||
- | LBD43: | ||
- | |||
- | ;Norfair music(not used this memory page). | ||
- | LBD4B: | ||
- | LBD50: | ||
- | |||
- | ;Kraid area music(not used this memory page). | ||
- | LBD58: | ||
- | LBD5D: | ||
- | |||
- | ;Item room music. | ||
- | LBD65: | ||
- | LBD6A: | ||
- | |||
- | ;Ridley area music(not used this memory page). | ||
- | LBD72: | ||
- | LBD77: | ||
- | |||
- | ;End game music(not used this memory page). | ||
- | LBD7F: | ||
- | LBD84: | ||
- | |||
- | ;Intro music(not used this memory page). | ||
- | LBD8C: | ||
- | LBD91: | ||
- | |||
- | ;Fade in music | ||
- | LBD99: | ||
- | LBD9E: | ||
- | |||
- | ;Power up music | ||
- | LBDA6: | ||
- | LBDAB: | ||
- | |||
- | ;Brinstar music | ||
- | LBDB3: | ||
- | LBDB8: | ||
- | |||
- | ;Tourian music | ||
- | LBDC0: | ||
- | LBDC5: | ||
- | |||
- | ItemRoomTriangleIndexData: | ||
- | LBDCD: | ||
- | LBDCE: | ||
- | LBDCF: | ||
- | LBDD0: | ||
- | LBDD1: | ||
- | LBDD2: | ||
- | LBDD3: | ||
- | LBDD4: | ||
- | LBDD5: | ||
- | LBDD6: | ||
- | LBDD7: | ||
- | LBDD8: | ||
- | LBDD9: | ||
- | |||
- | ItemRoomSQ1IndexData: | ||
- | LBDDA: | ||
- | LBDDB: | ||
- | |||
- | ItemRoomSQ2IndexData: | ||
- | LBDDC: | ||
- | LBDDD: | ||
- | LBDDE: | ||
- | LBDDF: | ||
- | LBDE0: | ||
- | LBDE1: | ||
- | LBDE2: | ||
- | LBDE3: | ||
- | LBDE4: | ||
- | LBDE5: | ||
- | LBDE6: | ||
- | LBDE7: | ||
- | LBDE8: | ||
- | LBDE9: | ||
- | LBDEA: | ||
- | LBDEB: | ||
- | LBDEC: | ||
- | LBDED: | ||
- | LBDEE: | ||
- | LBDEF: | ||
- | LBDF0: | ||
- | LBDF1: | ||
- | LBDF2: | ||
- | LBDF3: | ||
- | LBDF4: | ||
- | LBDF5: | ||
- | LBDF6: | ||
- | |||
- | PowerUpSQ1IndexData: | ||
- | LBDF7: | ||
- | LBDF8: | ||
- | LBDF9: | ||
- | LBDFA: | ||
- | LBDFB: | ||
- | LBDFC: | ||
- | LBDFD: | ||
- | LBDFE: | ||
- | LBDFF: | ||
- | LBE00: | ||
- | LBE01: | ||
- | LBE02: | ||
- | LBE03: | ||
- | LBE04: | ||
- | LBE05: | ||
- | LBE06: | ||
- | LBE07: | ||
- | |||
- | PowerUpTriangleIndexData: | ||
- | LBE08: | ||
- | LBE09: | ||
- | LBE0A: | ||
- | LBE0B: | ||
- | LBE0C: | ||
- | |||
- | PowerUpSQ2IndexData: | ||
- | LBE0D: | ||
- | LBE0E: | ||
- | LBE0F: | ||
- | LBE10: | ||
- | LBE11: | ||
- | LBE12: | ||
- | LBE13: | ||
- | LBE14: | ||
- | LBE15: | ||
- | LBE16: | ||
- | LBE17: | ||
- | LBE18: | ||
- | LBE19: | ||
- | LBE1A: .byte $B4 ;1 second | ||
- | LBE1B: | ||
- | LBE1C: | ||
- | |||
- | FadeInSQ2IndexData: | ||
- | LBE1D: | ||
- | LBE1E: | ||
- | LBE1F: | ||
- | LBE20: | ||
- | LBE21: | ||
- | LBE22: | ||
- | LBE23: | ||
- | LBE24: | ||
- | LBE25: | ||
- | LBE26: | ||
- | LBE27: | ||
- | LBE28: | ||
- | LBE29: | ||
- | LBE2A: | ||
- | LBE2B: | ||
- | LBE2C: | ||
- | LBE2D: | ||
- | LBE2E: | ||
- | LBE2F: | ||
- | LBE30: | ||
- | LBE31: | ||
- | LBE32: | ||
- | LBE33: | ||
- | LBE34: | ||
- | LBE35: | ||
- | |||
- | FadeInTriangleIndexData: | ||
- | LBE36: | ||
- | LBE37: | ||
- | LBE38: | ||
- | LBE39: | ||
- | LBE3A: | ||
- | LBE3B: | ||
- | LBE3C: | ||
- | LBE3D: | ||
- | |||
- | FadeInSQ1IndexData: | ||
- | LBE3E: | ||
- | LBE3F: | ||
- | LBE40: | ||
- | LBE41: | ||
- | LBE42: | ||
- | LBE43: | ||
- | LBE44: | ||
- | LBE45: | ||
- | LBE46: | ||
- | |||
- | TourianSQ2IndexData: | ||
- | LBE47: | ||
- | LBE48: | ||
- | LBE49: | ||
- | LBE4A: | ||
- | LBE4B: | ||
- | LBE4C: | ||
- | LBE4D: | ||
- | LBE4E: | ||
- | LBE4F: | ||
- | LBE50: | ||
- | LBE51: | ||
- | LBE52: | ||
- | LBE53: | ||
- | LBE54: | ||
- | LBE55: | ||
- | LBE56: | ||
- | LBE57: | ||
- | LBE58: | ||
- | |||
- | TourianSQ1IndexData: | ||
- | LBE59: | ||
- | LBE5A: | ||
- | LBE5B: | ||
- | LBE5C: | ||
- | LBE5D: | ||
- | LBE5E: | ||
- | LBE5F: | ||
- | LBE60: | ||
- | LBE61: | ||
- | |||
- | TourianTriangleIndexData: | ||
- | LBE62: | ||
- | LBE63: | ||
- | LBE64: | ||
- | LBE65: | ||
- | LBE66: | ||
- | LBE67: | ||
- | LBE68: | ||
- | LBE69: | ||
- | LBE6A: | ||
- | LBE6B: | ||
- | LBE6C: | ||
- | LBE6D: | ||
- | LBE6E: | ||
- | LBE6F: | ||
- | LBE70: | ||
- | LBE71: | ||
- | LBE72: | ||
- | LBE73: | ||
- | LBE74: | ||
- | LBE75: | ||
- | LBE76: | ||
- | |||
- | ;The following table contains the musical notes used by the music player. | ||
- | ;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/ | ||
- | |||
- | MusicNotesTbl: | ||
- | LBE77: | ||
- | LBE78: | ||
- | |||
- | LBE79: | ||
- | LBE7A: | ||
- | |||
- | LBE7B: | ||
- | LBE7C: | ||
- | |||
- | LBE7D: | ||
- | LBE7E: | ||
- | |||
- | LBE7F: | ||
- | LBE80: | ||
- | |||
- | LBE81: | ||
- | LBE82: | ||
- | |||
- | LBE83: | ||
- | LBE84: | ||
- | |||
- | LBE85: | ||
- | LBE86: | ||
- | |||
- | LBE87: | ||
- | LBE88: | ||
- | |||
- | LBE89: | ||
- | LBE8A: | ||
- | |||
- | LBE8B: | ||
- | LBE8C: | ||
- | |||
- | LBE8D: | ||
- | LBE8E: | ||
- | |||
- | LBE8F: | ||
- | LBE90: | ||
- | |||
- | LBE91: | ||
- | LBE92: | ||
- | |||
- | LBE93: | ||
- | LBE94: | ||
- | |||
- | LBE95: | ||
- | LBE96: | ||
- | |||
- | LBE97: | ||
- | LBE98: | ||
- | |||
- | LBE99: | ||
- | LBE9A: | ||
- | |||
- | LBE9B: | ||
- | LBE9C: | ||
- | |||
- | LBE9D: | ||
- | LBE9E: | ||
- | |||
- | LBE9F: | ||
- | LBEA0: | ||
- | |||
- | LBEA1: | ||
- | LBEA2: | ||
- | |||
- | LBEA3: | ||
- | LBEA4: | ||
- | |||
- | LBEA5: | ||
- | LBEA6: | ||
- | |||
- | LBEA7: | ||
- | LBEA8: | ||
- | |||
- | LBEA9: | ||
- | LBEAA: | ||
- | |||
- | LBEAB: | ||
- | LBEAC: | ||
- | |||
- | LBEAD: | ||
- | LBEAE: | ||
- | |||
- | LBEAF: | ||
- | LBEB0: | ||
- | |||
- | LBEB1: | ||
- | LBEB2: | ||
- | |||
- | LBEB3: | ||
- | LBEB4: | ||
- | |||
- | LBEB5: | ||
- | LBEB6: | ||
- | |||
- | LBEB7: | ||
- | LBEB8: | ||
- | |||
- | LBEB9: | ||
- | LBEBA: | ||
- | |||
- | LBEBB: | ||
- | LBEBC: | ||
- | |||
- | LBEBD: | ||
- | LBEBE: | ||
- | |||
- | LBEBF: | ||
- | LBEC0: | ||
- | |||
- | LBEC1: | ||
- | LBEC2: | ||
- | |||
- | LBEC3: | ||
- | LBEC4: | ||
- | |||
- | LBEC5: | ||
- | LBEC6: | ||
- | |||
- | LBEC7: | ||
- | LBEC8: | ||
- | |||
- | LBEC9: | ||
- | LBECA: | ||
- | |||
- | LBECB: | ||
- | LBECC: | ||
- | |||
- | LBECD: | ||
- | LBECE: | ||
- | |||
- | LBECF: | ||
- | LBED0: | ||
- | |||
- | LBED1: | ||
- | LBED2: | ||
- | |||
- | LBED3: | ||
- | LBED4: | ||
- | |||
- | LBED5: | ||
- | LBED6: | ||
- | |||
- | LBED7: | ||
- | LBED8: | ||
- | |||
- | LBED9: | ||
- | LBEDA: | ||
- | |||
- | LBEDB: .byte $00 ; | ||
- | LBEDC: | ||
- | |||
- | LBEDD: | ||
- | LBEDE: | ||
- | |||
- | LBEDF: | ||
- | LBEE0: | ||
- | |||
- | LBEE1: | ||
- | LBEE2: | ||
- | |||
- | LBEE3: | ||
- | LBEE4: | ||
- | |||
- | LBEE5: | ||
- | LBEE6: | ||
- | |||
- | LBEE7: | ||
- | LBEE8: | ||
- | |||
- | LBEE9: | ||
- | LBEEA: | ||
- | |||
- | LBEEB: | ||
- | LBEEC: | ||
- | |||
- | LBEED: | ||
- | LBEEE: | ||
- | |||
- | LBEEF: | ||
- | LBEF0: | ||
- | |||
- | LBEF1: | ||
- | LBEF2: | ||
- | |||
- | LBEF3: | ||
- | LBEF4: | ||
- | |||
- | LBEF5: | ||
- | LBEF6: | ||
- | |||
- | ;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: | ||
- | LBEF8: | ||
- | LBEF9: | ||
- | LBEFA: | ||
- | LBEFB: | ||
- | LBEFC: | ||
- | LBEFD: | ||
- | LBEFE: | ||
- | LBEFF: | ||
- | LBF00: | ||
- | LBF01: | ||
- | |||
- | ;Used by item room, fade in, Brinstar music, Ridley area music, Mother brain music, | ||
- | ;escape music, Norfair music and Tourian music. | ||
- | |||
- | NoteLengths1Tbl: | ||
- | LBF02: | ||
- | LBF03: | ||
- | LBF04: | ||
- | LBF05: | ||
- | LBF06: | ||
- | LBF07: | ||
- | LBF08: | ||
- | LBF09: | ||
- | LBF0A: | ||
- | LBF0B: | ||
- | LBF0C: | ||
- | |||
- | ;Used by intro and end game music. | ||
- | |||
- | NoteLengths2Tbl: | ||
- | LBF0D: | ||
- | LBF0E: | ||
- | LBF0F: | ||
- | LBF10: | ||
- | LBF11: | ||
- | LBF12: | ||
- | LBF13: | ||
- | LBF14: | ||
- | LBF15: | ||
- | LBF16: | ||
- | LBF17: | ||
- | LBF18: | ||
- | |||
- | InitializeMusic: | ||
- | LBF19: JSR CheckMusicFlags ; | ||
- | LBF1C: LDA CurrentSFXFlags ; | ||
- | LBF1F: STA CurrentMusic ; | ||
- | LBF22: LDA MusicInitIndex ; | ||
- | LBF25: | ||
- | LBF26: LDA InitMusicIndexTbl, | ||
- | LBF29: | ||
- | LBF2A: LDX #$00 ; | ||
- | |||
- | LBF2C:* LDA InitMusicTbl, | ||
- | LBF2F: STA NoteLengthTblOffset, | ||
- | LBF32: INY ;The following loop repeats 13 times to--> | ||
- | LBF33: INX ;load the initial music addresses --> | ||
- | LBF34: TXA ; | ||
- | LBF35: CMP #$0D ; | ||
- | LBF37: BNE - ; | ||
- | |||
- | LBF39: LDA # | ||
- | LBF3B: STA SQ1MusicFrameCount ; | ||
- | LBF3E: STA SQ2MusicFrameCount ; | ||
- | LBF41: STA TriangleMusicFrameCount ; | ||
- | LBF44: STA NoiseMusicFrameCount ; | ||
- | LBF47: LDA #$00 ; | ||
- | LBF49: STA SQ1MusicIndexIndex ; | ||
- | LBF4C: STA SQ2MusicIndexIndex ; | ||
- | LBF4F: STA TriangleMusicIndexIndex ; | ||
- | LBF52: STA NoiseMusicIndexIndex ; | ||
- | LBF55: | ||
- | |||
- | ;Not used. | ||
- | LBF56: | ||
- | LBF66: | ||
- | LBF76: | ||
- | LBF86: | ||
- | LBF96: | ||
- | LBFA6: | ||
- | |||
- | ; | ||
- | |||
- | RESET: | ||
- | LBFB0: | ||
- | LBFB1: | ||
- | LBFB2: LDX #$00 ; | ||
- | LBFB4: STX PPUControl0 ; | ||
- | LBFB7: STX PPUControl1 ; | ||
- | LBFBA:* LDA PPUStatus ; | ||
- | LBFBD: BPL - ;Wait for VBlank. | ||
- | LBFBF:* LDA PPUStatus ; | ||
- | LBFC2: BPL - ; | ||
- | LBFC4: ORA #$FF ; | ||
- | LBFC6: STA MMC1Reg0 ; | ||
- | LBFC9: STA MMC1Reg1 ; | ||
- | LBFCC: STA MMC1Reg2 ; | ||
- | LBFCF: STA MMC1Reg3 ; | ||
- | LBFD2: JMP Startup ; | ||
- | |||
- | ;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: | ||
- | |||
- | ; | ||
- | |||
- | LBFFA: .word NMI ; | ||
- | LBFFC: | ||
- | LBFFE: .word RESET ; | ||
- | </ |