Files
oracle-of-secrets/Music/stone_tower_temple_v2.asm
2024-09-18 18:21:55 -04:00

210 lines
4.7 KiB
NASM

;=====================================================================================
; The Legend of Zelda: A Link to the Past (Custom Music Track)
; The Legend of Zelda: Majora's Mask - Stone Tower Temple Theme v1.00
; Original Song by Koji Kondo
; Midi by Aaron Ritchie
; ASM Framework by Zarby89
; Ported by Letterbomb
; Size 0x01DC (476 Decimal)
;=====================================================================================
org $1AA763; Sections?
StoneTowerTempleTheme:
!ARAMAddr = $D86A
dw !ARAMAddr+$08
dw $00FF
dw !ARAMAddr
dw $0000
.Channels
!ARAMC = !ARAMAddr-StoneTowerTempleTheme
dw .Channel0+!ARAMC
dw .Channel1+!ARAMC
dw .Channel2+!ARAMC
dw .Channel3+!ARAMC
dw .Channel4+!ARAMC
dw .Channel5+!ARAMC
dw $0000
dw $0000
.Channel0
%SetMasterVolume($C8)
%SetChannelVolume($C4)
%SetTempo(62);
%SetInstrument($02) ; Tympani
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub001+!ARAMC, 24)
%CallSubroutine(.subA01+!ARAMC, 64)
db $00 ; End of the channel
.sub001
db B1, B1, $24, Tie, C2, $48, F3s
db $00 ; End
.Channel1
%SetInstrument($18) ; Guitar
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.subA01+!ARAMC, 8)
%CallSubroutine(.sub101+!ARAMC, 1)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 2)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 1)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 1)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 1)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 1)
%CallSubroutine(.sub102+!ARAMC, 1)
%CallSubroutine(.sub101+!ARAMC, 1)
db E2, Tie, Tie, Tie
%CallSubroutine(.subA01+!ARAMC, 4)
db $00 ; End of the channel
.sub101
db E2, Tie, Tie, Tie, F2, Tie, D2, Tie
db $00 ; End
.sub102
db E2, Tie, Tie, Tie, F2, Tie, E2, Tie
db $00 ; End
.Channel2
%SetChannelVolume($C4)
%SetInstrument($09) ; Strings
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.subA01+!ARAMC, 8)
%CallSubroutine(.sub201+!ARAMC, 1)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 2)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 1)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 1)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 1)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 1)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 1)
db E3, Tie, Tie, Tie
%CallSubroutine(.subA01+!ARAMC, 4)
db $00 ; End of the channel
.sub201
db E3, Tie, Tie, Tie, F3, Tie, D3, Tie
db $00 ; End
.sub202
db E3, Tie, Tie, Tie, F3, Tie, E3, Tie
db $00 ; End
.Channel3
%SetInstrument($09) ; Strings
%SetDurationN($24, $7F) ; 1/8
%CallSubroutine(.subA01+!ARAMC, 48)
%CallSubroutine(.sub301+!ARAMC, 5)
%CallSubroutine(.subA01+!ARAMC, 32)
%CallSubroutine(.sub301+!ARAMC, 4)
%CallSubroutine(.subA01+!ARAMC, 32)
db $00 ; End of the channel
.sub301
db A2, E3, A2, E3, A2, E3, F3, Tie, A2, E3, A2, E3, A2, E3, D3, Tie
db $00 ; End
.Channel4
%SetChannelVolume($C4)
%SetInstrument($0D) ; Ocarina
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.subA01+!ARAMC, 32)
%CallSubroutine(.sub401+!ARAMC, 1)
%CallSubroutine(.sub402+!ARAMC, 1)
%CallSubroutine(.sub401+!ARAMC, 1)
%CallSubroutine(.sub403+!ARAMC, 1)
%CallSubroutine(.sub401+!ARAMC, 1)
%CallSubroutine(.sub402+!ARAMC, 1)
%CallSubroutine(.sub401+!ARAMC, 1)
%CallSubroutine(.sub403+!ARAMC, 1)
%CallSubroutine(.subA01+!ARAMC, 16)
%CallSubroutine(.sub404+!ARAMC, 1)
db B4, E5, Tie
%CallSubroutine(.sub405+!ARAMC, 1)
%CallSubroutine(.sub404+!ARAMC, 1)
db C5, $48, B4, B4, A4, Tie
%CallSubroutine(.sub404+!ARAMC, 1)
db Tie, E5, Tie
%CallSubroutine(.sub405+!ARAMC, 1)
db $24, E5, F5, E5, D5, $48, C5, B4, A4, Tie, Tie, Tie
%CallSubroutine(.sub406+!ARAMC, 2)
db $00 ; End of the channel
.sub401
db A4, C5, B4, $24, Tie, G4, A4, C5
db $00 ; End
.sub402
db $12, B4, B4, $24, A4, $48, G4, E4
db $00 ; End
.sub403
db $12, B4, B4, G4, Tie, $48, A4, Tie
db $00 ; End
.sub404
db E5, E5, $24, D5, Tie, Tie
db $00 ; End
.sub405
db D5, C5, $48, B4, Tie
db $00 ; End
.sub406
db E5, $24, A5, C6, $12, B5, B5, $48, Tie, G5, $24, E5, A5, C6, $12, B5, B5, $24, Tie, $48, Tie
db $00 ; End
.Channel5
%SetChannelVolume($C4)
%SetInstrument($0F) ; Harp
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.subA01+!ARAMC, 48)
%CallSubroutine(.sub501+!ARAMC, 1)
db A4, Tie, $48, G4, E4
%CallSubroutine(.sub501+!ARAMC, 1)
db G4, Tie, $48, A4, Tie
%CallSubroutine(.subA01+!ARAMC, 64)
db $00 ; End of the channel
.sub501
db A4, C5, $12, B4, B4, $24, Tie, Tie, G4, A4, C5, $12, B4, B4
db $00 ; End
.subA01
db Rest
db $00 ; End
assert pc() <= $1AB4D5