Files
oracle-of-secrets/Music/song_of_healing.asm
2024-12-20 18:29:32 -05:00

252 lines
5.5 KiB
NASM

;=====================================================================================
; The Legend of Zelda: A Link to the Past (Custom Music Track)
; The Legend of Zelda: Majora's Mask - Song of Healing Theme v1.00
; Original Song by Koji Kondo
; Midi by RSD and Chris Lakatos
; ASM Framework by Zarby89
; Ported by Letterbomb
; Size 0x0275 (629 Decimal)
;=====================================================================================
org $1BA308; Sections?
SongOfHealingTheme:
!ARAMAddr = $F304
dw !ARAMAddr+$08
dw $00FF
dw !ARAMAddr
dw $0000
.Channels
!ARAMC = !ARAMAddr-SongOfHealingTheme
dw .Channel0+!ARAMC
dw .Channel1+!ARAMC
dw .Channel2+!ARAMC
dw .Channel3+!ARAMC
dw .Channel4+!ARAMC
dw .Channel5+!ARAMC
dw $0000
dw $0000
.Channel0
%SetMasterVolume($98)
%SetTempo(56)
%SetInstrument($18) ; Guitar
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub0101+!ARAMC, 2)
%CallSubroutine(.sub0102+!ARAMC, 1)
%CallSubroutine(.sub0103+!ARAMC, 1)
%CallSubroutine(.sub0102+!ARAMC, 1)
%CallSubroutine(.sub0104+!ARAMC, 1)
%CallSubroutine(.sub0105+!ARAMC, 1)
%CallSubroutine(.sub0106+!ARAMC, 1)
%CallSubroutine(.sub0105+!ARAMC, 1)
%CallSubroutine(.sub0107+!ARAMC, 1)
db $00 ; End of the channel
.Channel1
%SetInstrument($09) ; Strings
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub0101+!ARAMC, 2)
%CallSubroutine(.sub0102+!ARAMC, 1)
%CallSubroutine(.sub0103+!ARAMC, 1)
%CallSubroutine(.sub0102+!ARAMC, 1)
%CallSubroutine(.sub0104+!ARAMC, 1)
%CallSubroutine(.sub0105+!ARAMC, 1)
%CallSubroutine(.sub0106+!ARAMC, 1)
%CallSubroutine(.sub0105+!ARAMC, 1)
%CallSubroutine(.sub0107+!ARAMC, 1)
db $00 ; End of the channel
.sub0101
db B4, A4, F4, B4, A4, F4, B4, A4, $24, E4, D4, $48, E4, Tie, Tie
db $00 ; End
.sub0102
db F4, C4, B3, F4, C4, B3, F4
db $00 ; End
.sub0103
db E4, $24, B3, A3, $48, B3, Tie, Tie
db $00 ; End
.sub0104
db E4, B4, G4, Tie, Tie, A4, A4, A4, D5, D5, D5
db $00 ; End
.sub0105
db G4, G4, G4, C5, G4, Tie
db $00 ; End
.sub0106
db F4, F4, F4, A4s, A4s, A4s, E4, D4, A4, E4, Tie, Tie, A4, A4, A4, D5, D5, D5
db $00 ; End
.sub0107
db F4, G4, A4, A4s, C5, D5, A4, B4, D5, E5, Tie, Tie, Tie
db $00 ; End
.Channel2
%SetInstrument($18) ; Guitar
%SetDurationN($24, $7F) ; 1/8
%CallSubroutine(.sub201+!ARAMC, 3)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub201+!ARAMC, 3)
%CallSubroutine(.sub202+!ARAMC, 1)
%CallSubroutine(.sub203+!ARAMC, 2)
%CallSubroutine(.sub204+!ARAMC, 2)
%CallSubroutine(.sub203+!ARAMC, 2)
%CallSubroutine(.sub204+!ARAMC, 2)
%CallSubroutine(.sub205+!ARAMC, 1)
%CallSubroutine(.sub206+!ARAMC, 1)
%CallSubroutine(.sub207+!ARAMC, 1)
%CallSubroutine(.sub208+!ARAMC, 1)
%CallSubroutine(.sub205+!ARAMC, 1)
%CallSubroutine(.sub206+!ARAMC, 1)
db A2s, F3, A3s, F3, D4, F3, A2s, F3, A3s, F3, D4, F3, B2, F3, A3, F3, D4, A3, E3, Tie, B3, Tie, E4, Tie
db $00 ; End of the channel
.sub201
db F3, C4, Tie, C4, Tie, C4
db $00 ; End
.sub202
db E3, B3, Tie, B3, Tie, B3
db $00 ; End
.sub203
db D3, A3, Tie, A3, Tie, A3
db $00 ; End
.sub204
db C3, G3, Tie, G3, Tie, G3
db $00 ; End
.sub205
db A2s, F3, A3s, F3, D4, F3, A2s, F3, A3s, F3, D4, Tie
db $00 ; End
.sub206
db A2, E3, A3, E3, C4, E3, A2, E3, A3, E3, C4, Tie
db $00 ; End
.sub207
db G2, D3, G3, D3, A3s, D3, G2, D3, G3, D3, A3s, Tie
db $00 ; End
.sub208
db F2, C3, F3, C3, A3, C3, F2, C3, F3, C3, A3, Tie
db $00 ; End
.Channel3
%SetInstrument($09) ; Strings
%SetDurationN($48, $7F) ; 1/4
db Rest
%CallSubroutine(.sub301+!ARAMC, 2)
%CallSubroutine(.sub302+!ARAMC, 2)
%CallSubroutine(.sub303+!ARAMC, 1)
%CallSubroutine(.sub304+!ARAMC, 1)
%CallSubroutine(.sub303+!ARAMC, 1)
db F3
%CallSubroutine(.subA01+!ARAMC, 5)
db F3, Tie, Tie, E3, Tie
db $00 ; End of the channel
.sub301
db F3, Tie, Tie, Tie, Tie, Tie, F3, Tie, Tie, E3, Tie, Tie
db $00 ; End
.sub302
db A3, Tie, Tie, Tie, Tie, Tie, G3, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub303
db F3, Tie, Tie, Tie, Tie, Tie, E3, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub304
db D3, Tie, Tie, Tie, Tie, Tie, C3, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.Channel4
%SetInstrument($09) ; Strings
%SetDurationN($24, $7F) ; 1/8
db Rest, $48
%CallSubroutine(.sub401+!ARAMC, 2)
%CallSubroutine(.sub402+!ARAMC, 2)
%CallSubroutine(.sub403+!ARAMC, 1)
%CallSubroutine(.sub404+!ARAMC, 1)
%CallSubroutine(.sub403+!ARAMC, 1)
db A2
%CallSubroutine(.subA01+!ARAMC, 5)
db A2s, Tie, Tie, A2s, Tie, $24, Tie
db $00 ; End of the channel
.sub401
db C3, Tie, Tie, Tie, Tie, Tie, C3, Tie, Tie, B2, Tie, Tie
db $00 ; End
.sub402
db D3, Tie, Tie, Tie, Tie, Tie, C3, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub403
db A2, Tie, Tie, Tie, Tie, Tie, G2s, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub404
db F2s, Tie, Tie, Tie, Tie, Tie, E2, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.Channel5
%SetInstrument($09) ; Strings
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub501+!ARAMC, 2)
%CallSubroutine(.sub502+!ARAMC, 2)
%CallSubroutine(.sub503+!ARAMC, 1)
%CallSubroutine(.sub504+!ARAMC, 1)
%CallSubroutine(.sub503+!ARAMC, 1)
db F2
%CallSubroutine(.subA01+!ARAMC, 5)
db F2, Tie, Tie, E2, Tie, Tie
db $00 ; End of the channel
.sub501
db F2, Tie, Tie, Tie, Tie, Tie, F2, Tie, Tie, E2, Tie, Tie
db $00 ; End
.sub502
db A2, Tie, Tie, Tie, Tie, Tie, G2, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub503
db F2, Tie, Tie, Tie, Tie, Tie, E2, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.sub504
db D2, Tie, Tie, Tie, Tie, Tie, C2, Tie, Tie, Tie, Tie, Tie
db $00 ; End
.subA01
db Tie
db $00 ; End