User Tools

Site Tools


m1:disassembly:tourian_page

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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