;;; $8000: Debug constants ;;;
;;; $800A..8110: APU upload ;;;
    ;;; $800A: Upload to APU (hardcoded parameter) ;;;
    ;;; $8024: Upload to APU (from [$00]) (external) ;;;
    ;;; $8028: Upload to APU (from [$00]) ;;;
    ;;; $8059: Send APU data ;;;
    ;;; $8100: Increment Y twice, bank overflow check ;;;
    ;;; $8103: Increment Y, bank overflow check ;;;
    ;;; $8107: Handle bank overflow ;;;
;;; $8111: Generate random number ;;;
;;; $8146: Update held input ;;;
;;; $818E: Change bit index to byte index and bitmask ;;;
;;; $81A6: Set boss bits in A for current area ;;;
;;; $81C0: Unused. Clear boss bits in A for current area ;;;
;;; $81DC: Checks if the boss bits for the current area match any bits in A ;;;
;;; $81FA: Mark event [A] ;;;
;;; $8212: Unmark event [A] ;;;
;;; $8233: Checks event [A] has happened ;;;
;;; $824F: Write 'supermetroid' to SRAM  ;;;
;;; $8261: Determine number of demo sets ;;;
;;; $82C5: Wait until the end of a v-blank ;;;
;;; $82D6: $05F1 = [A] * [Y] (16-bit unsigned multiplication) ;;;
;;; $8338: Wait for NMI ;;;
;;; $834B: Enable NMI ;;;
;;; $835D: Disable NMI ;;;
;;; $836F: Set force blank and wait for NMI ;;;
;;; $8382: Clear force blank and wait for NMI ;;;
;;; $8395: Unused. Update CGRAM ;;;
;;; $83BD: Unused. Write [Y] bytes of [A] to $00:0000 + [X] - 8-bit ;;;
;;; $83D0: Unused. Write [Y] bytes of [A] to $00:0000 + [X] - 16-bit ;;;
;;; $83E3: Unused. Write [Y] bytes of [A] to $7E:0000 + [X] - 8-bit ;;;
;;; $83F6: Write [Y] bytes of [A] to $7E:0000 + [X] - 16-bit ;;;
;;; $8409: Write [Y] bytes of [A] to $7F:0000 + [X] - 16-bit ;;;
;;; $841C: Boot ;;;
;;; $8462: Soft reset ;;;
;;; $8482: Common boot section ;;;
;;; $8572: Unused. BRK ;;;
;;; $8573: Infinite loop; pointed to by misc. error handling ;;;
;;; $8577: Unused. Block for [A] frames ;;;
;;; $858C: Load map explored ;;;
;;; $85B6: Unused. Generic bitmasks ;;;
;;; $85C6: Save map explored ;;;
;;; $85F6: NTSC/PAL and SRAM mapping check ;;;
;;; $875D: Initialise CPU IO registers ;;;
;;; $8792: Initialise PPU registers ;;;
;;; $88B4: Unused. Clear high RAM ;;;
;;; $88D1: Write a load of 1C2Fh ;;;
;;; $88EB: Write 800h bytes of [A] to $7E:3000 ;;;
;;; $88FE: Write 800h bytes of [A] to $7E:4000 ;;;
;;; $8911: Write 800h bytes of [A] to $7E:6000 ;;;
;;; $8924: Handle fading out ;;;
;;; $894D: Handle fading in ;;;
;;; $896E: Finalise OAM ;;;
;;; $8B1A: Clear high OAM ;;;
;;; $8B4F: Queue mode 7 transfers ;;;
;;; $8BBA: Handle mode 7 transfers ;;;
;;; $8BD3: Process mode 7 transfers ;;;
;;; $8C83: Handle VRAM write table and scrolling DMAs ;;;
;;; $8CD8: Execute horizontal scrolling DMAs ;;;
;;; $8DAC: Execute vertical scrolling DMAs ;;;
;;; $8EA2: Handle VRAM read table ;;;
;;; $8EF4: Check if music is queued ;;;
;;; $8F0C: Handle music queue ;;;
;;; $8FA3: Unused. Queue music data or music track, 16 frame delay, can overwrite old entries, doesn't check for demo ;;;
;;; $8FC1: Queue music data or music track, 8 frame delay, cannot set last queue entry ;;;
;;; $8FF7: Queue music data or music track, max([Y], 8) frame delay, can overwrite old entries ;;;
;;; $9021..91A6: Queue sound ;;;
    ;;; $9021: Queue sound, sound library 1, max queued sounds allowed = 15 ;;;
    ;;; $902B: Queue sound, sound library 1, max queued sounds allowed = 9 ;;;
    ;;; $9035: Queue sound, sound library 1, max queued sounds allowed = 3 ;;;
    ;;; $903F: Queue sound, sound library 1, max queued sounds allowed = 1 ;;;
    ;;; $9049: Queue sound, sound library 1, max queued sounds allowed = 6 ;;;
    ;;; $9051: Queue sound, sound library 1 ;;;
    ;;; $90A3: Queue sound, sound library 2, max queued sounds allowed = 15 ;;;
    ;;; $90AD: Queue sound, sound library 2, max queued sounds allowed = 9 ;;;
    ;;; $90B7: Queue sound, sound library 2, max queued sounds allowed = 3 ;;;
    ;;; $90C1: Queue sound, sound library 2, max queued sounds allowed = 1 ;;;
    ;;; $90CB: Queue sound, sound library 2, max queued sounds allowed = 6 ;;;
    ;;; $90D3: Queue sound, sound library 2 ;;;
    ;;; $9125: Queue sound, sound library 3, max queued sounds allowed = 15 ;;;
    ;;; $912F: Queue sound, sound library 3, max queued sounds allowed = 9 ;;;
    ;;; $9139: Queue sound, sound library 3, max queued sounds allowed = 3 ;;;
    ;;; $9143: Queue sound, sound library 3, max queued sounds allowed = 1 ;;;
    ;;; $914D: Queue sound, sound library 3, max queued sounds allowed = 6 ;;;
    ;;; $9155: Queue sound, sound library 3 ;;;
;;; $91A7: NOP : RTS ;;;
;;; $91A9: Set up a (H)DMA transfer ;;;
;;; $91EE: Update IO registers ;;;
;;; $933A: Update OAM & CGRAM ;;;
;;; $9376: Transfer Samus tiles to VRAM ;;;
;;; $9416: Process animated tiles object VRAM transfers ;;;
;;; $9459: Read controller input. Also a debug branch ;;;
;;; $9583: NMI ;;;
;;; $9616: Interrupt command pointers ;;;
;;; $9632: Execute door transition VRAM update ;;;
;;; $966E..9829: Interrupt commands ;;;
    ;;; $966E: Interrupt command 0 - nothing ;;;
    ;;; $9680: Interrupt command 2 - disable h/v-counter interrupts ;;;
    ;;; $968B: Interrupt command 4 - main gameplay - begin HUD drawing ;;;
    ;;; $96A9: Interrupt command 6 - main gameplay - end HUD drawing ;;;
    ;;; $96D3: Interrupt command 8 - start of door transition - begin HUD drawing ;;;
    ;;; $96F1: Interrupt command Ah - start of door transition - end HUD drawing ;;;
    ;;; $971A: Interrupt command Ch - Draygon's room - begin HUD drawing ;;;
    ;;; $9733: Interrupt command Eh - Draygon's room - end HUD drawing ;;;
    ;;; $9758: Interrupt command 10h - vertical door transition - begin HUD drawing ;;;
    ;;; $9771: Interrupt command 12h - vertical door transition - end HUD drawing ;;;
    ;;; $97A9: Interrupt command 14h - vertical door transition - end drawing ;;;
    ;;; $97C1: Interrupt command 16h - horizontal door transition - begin HUD drawing ;;;
    ;;; $97DA: Interrupt command 18h - horizontal door transition - end HUD drawing ;;;
    ;;; $980A: Interrupt command 1Ah - horizontal door transition - end drawing ;;;
;;; $982A: Enable h/v-counter interrupts ;;;
;;; $9841: Enable h/v-counter interrupts now ;;;
;;; $985F: Disable h/v-counter interrupts ;;;
;;; $986A: IRQ ;;;
;;; $988B..9DE6: HUD ;;;
    ;;; $988B: HUD tilemaps ;;;
    ;;; $99CF: Add missiles to HUD tilemap ;;;
    ;;; $9A0E: Add super missiles to HUD tilemap ;;;
    ;;; $9A1E: Add power bombs to HUD tilemap ;;;
    ;;; $9A2E: Add grapple to HUD tilemap ;;;
    ;;; $9A3E: Add x-ray to HUD tilemap ;;;
    ;;; $9A4C: Write 2x2 tile icon to HUD tilemap ;;;
    ;;; $9A79: Initialise HUD (HUD routine when game is loading) ;;;
    ;;; $9B44: Handle HUD tilemap (HUD routine when game is paused/running) ;;;
    ;;; $9CEA: Toggle HUD item highlight ;;;
    ;;; $9D78: Draw three HUD digits ;;;
    ;;; $9D98: Draw two HUD digits ;;;
    ;;; $9DBF: HUD digits tilemap ;;;
;;; $9DE7..A07A: Timer ;;;
    ;;; $9DE7: Process timer ;;;
    ;;; $9E09: Process timer - Ceres start ;;;
    ;;; $9E1A: Clear carry. Process timer - inactive ;;;
    ;;; $9E1C: Process timer - Mother Brain start ;;;
    ;;; $9E2F: Process timer - initial delay ;;;
    ;;; $9E41: Process timer - timer running, movement delayed ;;;
    ;;; $9E58: Process timer - timer running, moving into place ;;;
    ;;; $9E89: Process timer - timer running, moved into place ;;;
    ;;; $9E8C: Timer = [A high] minutes, [A low] seconds ;;;
    ;;; $9E93: Clear timer RAM ;;;
    ;;; $9EA9: Decrement timer ;;;
    ;;; $9F6C: Draw timer ;;;
    ;;; $9F95: Draw two timer digits ;;;
    ;;; $9FB3: Draw timer spritemap ;;;
    ;;; $9FD4: Timer spritemap data ;;;
;;; $A07B: Start gameplay ;;;
;;; $A12B: Handle music queue for 20 frames ;;;
;;; $A149: Resume gameplay ;;;
;;; $A176: Display the viewable part of the room ;;;
;;; $A1E3: Unused. Queue clearing of BG2 tilemap ;;;
;;; $A211: Queue clearing of FX tilemap ;;;
;;; $A23F: Clear BG2 tilemap ;;;
;;; $A29C: Clear FX tilemap ;;;
;;; $A2F9..B031: Scrolling ;;;
    ;;; $A2F9: Calculate layer 2 X position ;;;
    ;;; $A33A: Calculate layer 2 Y position ;;;
    ;;; $A37B: Calculate BG scrolls ;;;
    ;;; $A3A0: Calculate BG scrolls and update BG graphics when scrolling ;;;
    ;;; $A3AB: Calculate layer 2 position and BG scrolls and update BG graphics when scrolling ;;;
    ;;; $A3DF: Update BG graphics when scrolling ;;;
    ;;; $A4BB: Calculate BG scroll and layer position blocks ;;;
    ;;; $A528: Handle scroll zones - horizontal autoscrolling ;;;
    ;;; $A641: Handle scroll zones - scrolling right ;;;
    ;;; $A6BB: Handle scroll zones - scrolling left ;;;
    ;;; $A731: Handle scroll zones - vertical autoscrolling ;;;
    ;;; $A893: Handle scroll zones - scrolling down ;;;
    ;;; $A936: Handle scroll zones - scrolling up ;;;
    ;;; $A9AC: Debug layer 1 position save/loading ;;;
    ;;; $A9D6: Update background data column ;;;
    ;;; $A9DB: Update level data column ;;;
    ;;; $A9DE: Update level/background data column ;;;
    ;;; $AB70: Update background data row ;;;
    ;;; $AB75: Update level data row ;;;
    ;;; $AB78: Update level/background data row ;;;
    ;;; $AD1D: Draw top row of screen for upwards door transition ;;;
    ;;; $AD30: Door transition scrolling setup ;;;
    ;;; $AD4A: Door transition scrolling setup - right ;;;
    ;;; $AD74: Door transition scrolling setup - left ;;;
    ;;; $AD9E: Door transition scrolling setup - down ;;;
    ;;; $ADC8: Door transition scrolling setup - up ;;;
    ;;; $AE08: Pointers to door transition scrolling setup code ;;;
    ;;; $AE10: Update previous layer blocks ;;;
    ;;; $AE29: Update BG scroll offsets ;;;
    ;;; $AE4E: Door transition scrolling ;;;
    ;;; $AE7E: Door transition scrolling - right ;;;
    ;;; $AEC2: Door transition scrolling - left ;;;
    ;;; $AF02: Door transition scrolling - down ;;;
    ;;; $AF89: Door transition scrolling - up ;;;
;;; $B032: Unused. Set up rotating mode 7 background ;;;
;;; $B0C2: Unused. Configure mode 7 rotation matrix ;;;
;;; $B0FF: Decompression - hardcoded destination ;;;
;;; $B119: Decompression - variable destination ;;;
;;; $B266: Source bank overflow correction ;;;
;;; $B271: Decompression to VRAM ;;;
;;; $B437: Tilemap - failed NTSC/PAL check ;;;
;;; $BC37: Tilemap - failed SRAM mapping check ;;;
;;; $C437: Load from load station ;;;
;;; $C4B5: Load station lists ;;;
;;; $CD07: Debug. Set debug elevators as used ;;;
;;; $CD8E: Free space ;;;
;;; $FFC0: Game header ;;;