Split bank 0 audio functions into home/audio.asm.

This commit is contained in:
yenatch 2014-05-21 16:26:28 -04:00
parent 2cb3f8e1b9
commit 3624794599
2 changed files with 599 additions and 596 deletions

597
home.asm
View File

@ -2518,602 +2518,7 @@ Function3b3c:: ; 3b3c
; 3b4e
SoundRestart:: ; 3b4e
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_SoundRestart)
ld [hROMBank], a
ld [MBC3RomBank], a
call _SoundRestart
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3b6a
UpdateSound:: ; 3b6a
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_UpdateSound)
ld [hROMBank], a
ld [MBC3RomBank], a
call _UpdateSound
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3b86
_LoadMusicByte:: ; 3b86
; CurMusicByte = [a:de]
GLOBAL LoadMusicByte
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, [de]
ld [CurMusicByte], a
ld a, BANK(LoadMusicByte)
ld [hROMBank], a
ld [MBC3RomBank], a
ret
; 3b97
PlayMusic:: ; 3b97
; Play music de.
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_PlayMusic) ; and BANK(_SoundRestart)
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, e
and a
jr z, .nomusic
call _PlayMusic
jr .end
.nomusic
call _SoundRestart
.end
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3bbc
PlayMusic2:: ; 3bbc
; Stop playing music, then play music de.
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_PlayMusic)
ld [hROMBank], a
ld [MBC3RomBank], a
push de
ld de, MUSIC_NONE
call _PlayMusic
call DelayFrame
pop de
call _PlayMusic
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3be3
PlayCryHeader:: ; 3be3
; Play a cry given parameters at header de
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
; Cry headers are stuck in one bank.
ld a, BANK(CryHeaders)
ld [hROMBank], a
ld [MBC3RomBank], a
ld hl, CryHeaders
add hl, de
add hl, de
add hl, de
add hl, de
add hl, de
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
inc hl
ld a, [hli]
ld [CryPitch], a
ld a, [hli]
ld [CryEcho], a
ld a, [hli]
ld [CryLength], a
ld a, [hl]
ld [CryLength + 1], a
ld a, BANK(PlayCry)
ld [hROMBank], a
ld [MBC3RomBank], a
call PlayCry
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3c23
PlaySFX:: ; 3c23
; Play sound effect de.
; Sound effects are ordered by priority (lowest to highest)
push hl
push de
push bc
push af
; Is something already playing?
call CheckSFX
jr nc, .play
; Does it have priority?
ld a, [CurSFX]
cp e
jr c, .done
.play
ld a, [hROMBank]
push af
ld a, BANK(_PlaySFX)
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, e
ld [CurSFX], a
call _PlaySFX
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
.done
pop af
pop bc
pop de
pop hl
ret
; 3c4e
WaitPlaySFX:: ; 3c4e
call WaitSFX
call PlaySFX
ret
; 3c55
WaitSFX:: ; 3c55
; infinite loop until sfx is done playing
push hl
.wait
ld hl, Channel5Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel6Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel7Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel8Flags
bit 0, [hl]
jr nz, .wait
pop hl
ret
; 3c74
IsSFXPlaying:: ; 3c74
; Return carry if no sound effect is playing.
; The inverse of CheckSFX.
push hl
ld hl, Channel5Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel6Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel7Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel8Flags
bit 0, [hl]
jr nz, .playing
pop hl
scf
ret
.playing
pop hl
and a
ret
; 3c97
MaxVolume:: ; 3c97
ld a, $77 ; max
ld [Volume], a
ret
; 3c9d
LowVolume:: ; 3c9d
ld a, $33 ; 40%
ld [Volume], a
ret
; 3ca3
VolumeOff:: ; 3ca3
xor a
ld [Volume], a
ret
; 3ca8
Function3ca8:: ; 3ca8
ld a, 4
ld [MusicFade], a
ret
; 3cae
Function3cae:: ; 3cae
ld a, 4 | 1 << 7
ld [MusicFade], a
ret
; 3cb4
SkipMusic:: ; 3cb4
; Skip a frames of music.
and a
ret z
dec a
call UpdateSound
jr SkipMusic
; 3cbc
FadeToMapMusic:: ; 3cbc
push hl
push de
push bc
push af
call GetMapMusic
ld a, [wMapMusic]
cp e
jr z, .done
ld a, 8
ld [MusicFade], a
ld a, e
ld [MusicFadeIDLo], a
ld a, d
ld [MusicFadeIDHi], a
ld a, e
ld [wMapMusic], a
.done
pop af
pop bc
pop de
pop hl
ret
; 3cdf
PlayMapMusic:: ; 3cdf
push hl
push de
push bc
push af
call GetMapMusic
ld a, [wMapMusic]
cp e
jr z, .done
push de
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
pop de
ld a, e
ld [wMapMusic], a
call PlayMusic
.done
pop af
pop bc
pop de
pop hl
ret
; 3d03
EnterMapMusic:: ; 3d03
push hl
push de
push bc
push af
xor a
ld [$c2c1], a
ld de, MUSIC_BICYCLE
ld a, [PlayerState]
cp PLAYER_BIKE
jr z, .play
call GetMapMusic
.play
push de
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
pop de
ld a, e
ld [wMapMusic], a
call PlayMusic
pop af
pop bc
pop de
pop hl
ret
; 3d2f
Function3d2f:: ; 3d2f
ld a, [$c2c1]
and a
jr z, RestartMapMusic
xor a
ld [wMapMusic], a
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
xor a
ld [$c2c1], a
ret
; 3d47
RestartMapMusic:: ; 3d47
push hl
push de
push bc
push af
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
ld a, [wMapMusic]
ld e, a
ld d, 0
call PlayMusic
pop af
pop bc
pop de
pop hl
ret
; 3d62
SpecialMapMusic:: ; 3d62
ld a, [PlayerState]
cp PLAYER_SURF
jr z, .surf
cp PLAYER_SURF_PIKA
jr z, .surf
ld a, [StatusFlags2]
bit 2, a
jr nz, .contest
.no
and a
ret
.bike
ld de, MUSIC_BICYCLE
scf
ret
.surf
ld de, MUSIC_SURF
scf
ret
.contest
ld a, [MapGroup]
cp GROUP_ROUTE_35_NATIONAL_PARK_GATE
jr nz, .no
ld a, [MapNumber]
cp MAP_ROUTE_35_NATIONAL_PARK_GATE
jr z, .ranking
cp MAP_ROUTE_36_NATIONAL_PARK_GATE
jr nz, .no
.ranking
ld de, MUSIC_BUG_CATCHING_CONTEST_RANKING
scf
ret
; 3d97
GetMapMusic:: ; 3d97
call SpecialMapMusic
ret c
call GetMapHeaderMusic
ret
; 3d9f
Function3d9f:: ; 3d9f
; Places a BCD number at the
; upper center of the screen.
; Unreferenced.
ld a, $20
ld [$c498], a
ld [$c49c], a
ld a, $50
ld [$c499], a
ld a, $58
ld [$c49d], a
xor a
ld [$c49b], a
ld [$c49f], a
ld a, [$c296]
cp $64
jr nc, .max
add 1
daa
ld b, a
swap a
and $f
add "0"
ld [$c49a], a
ld a, b
and $f
add "0"
ld [$c49e], a
ret
.max
ld a, "9"
ld [$c49a], a
ld [$c49e], a
ret
; 3dde
CheckSFX:: ; 3dde
; Return carry if any SFX channels are active.
ld a, [Channel5Flags]
bit 0, a
jr nz, .playing
ld a, [Channel6Flags]
bit 0, a
jr nz, .playing
ld a, [Channel7Flags]
bit 0, a
jr nz, .playing
ld a, [Channel8Flags]
bit 0, a
jr nz, .playing
and a
ret
.playing
scf
ret
; 3dfe
Function3dfe:: ; 3dfe
xor a
ld [$c1cc], a
ld [SoundInput], a
ld [rNR10], a
ld [rNR11], a
ld [rNR12], a
ld [rNR13], a
ld [rNR14], a
ret
; 3e10
ChannelsOff:: ; 3e10
; Quickly turn off music channels
xor a
ld [Channel1Flags], a
ld [Channel2Flags], a
ld [Channel3Flags], a
ld [Channel4Flags], a
ld [SoundInput], a
ret
; 3e21
SFXChannelsOff:: ; 3e21
; Quickly turn off sound effect channels
xor a
ld [Channel5Flags], a
ld [Channel6Flags], a
ld [Channel7Flags], a
ld [Channel8Flags], a
ld [SoundInput], a
ret
; 3e32
INCLUDE "home/audio.asm"
Function3e32:: ; 3e32

598
home/audio.asm Normal file
View File

@ -0,0 +1,598 @@
; Audio interfaces.
SoundRestart:: ; 3b4e
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_SoundRestart)
ld [hROMBank], a
ld [MBC3RomBank], a
call _SoundRestart
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3b6a
UpdateSound:: ; 3b6a
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_UpdateSound)
ld [hROMBank], a
ld [MBC3RomBank], a
call _UpdateSound
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3b86
_LoadMusicByte:: ; 3b86
; CurMusicByte = [a:de]
GLOBAL LoadMusicByte
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, [de]
ld [CurMusicByte], a
ld a, BANK(LoadMusicByte)
ld [hROMBank], a
ld [MBC3RomBank], a
ret
; 3b97
PlayMusic:: ; 3b97
; Play music de.
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_PlayMusic) ; and BANK(_SoundRestart)
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, e
and a
jr z, .nomusic
call _PlayMusic
jr .end
.nomusic
call _SoundRestart
.end
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3bbc
PlayMusic2:: ; 3bbc
; Stop playing music, then play music de.
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
ld a, BANK(_PlayMusic)
ld [hROMBank], a
ld [MBC3RomBank], a
push de
ld de, MUSIC_NONE
call _PlayMusic
call DelayFrame
pop de
call _PlayMusic
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3be3
PlayCryHeader:: ; 3be3
; Play a cry given parameters at header de
push hl
push de
push bc
push af
ld a, [hROMBank]
push af
; Cry headers are stuck in one bank.
ld a, BANK(CryHeaders)
ld [hROMBank], a
ld [MBC3RomBank], a
ld hl, CryHeaders
add hl, de
add hl, de
add hl, de
add hl, de
add hl, de
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
inc hl
ld a, [hli]
ld [CryPitch], a
ld a, [hli]
ld [CryEcho], a
ld a, [hli]
ld [CryLength], a
ld a, [hl]
ld [CryLength + 1], a
ld a, BANK(PlayCry)
ld [hROMBank], a
ld [MBC3RomBank], a
call PlayCry
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
pop af
pop bc
pop de
pop hl
ret
; 3c23
PlaySFX:: ; 3c23
; Play sound effect de.
; Sound effects are ordered by priority (lowest to highest)
push hl
push de
push bc
push af
; Is something already playing?
call CheckSFX
jr nc, .play
; Does it have priority?
ld a, [CurSFX]
cp e
jr c, .done
.play
ld a, [hROMBank]
push af
ld a, BANK(_PlaySFX)
ld [hROMBank], a
ld [MBC3RomBank], a
ld a, e
ld [CurSFX], a
call _PlaySFX
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
.done
pop af
pop bc
pop de
pop hl
ret
; 3c4e
WaitPlaySFX:: ; 3c4e
call WaitSFX
call PlaySFX
ret
; 3c55
WaitSFX:: ; 3c55
; infinite loop until sfx is done playing
push hl
.wait
ld hl, Channel5Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel6Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel7Flags
bit 0, [hl]
jr nz, .wait
ld hl, Channel8Flags
bit 0, [hl]
jr nz, .wait
pop hl
ret
; 3c74
IsSFXPlaying:: ; 3c74
; Return carry if no sound effect is playing.
; The inverse of CheckSFX.
push hl
ld hl, Channel5Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel6Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel7Flags
bit 0, [hl]
jr nz, .playing
ld hl, Channel8Flags
bit 0, [hl]
jr nz, .playing
pop hl
scf
ret
.playing
pop hl
and a
ret
; 3c97
MaxVolume:: ; 3c97
ld a, $77 ; max
ld [Volume], a
ret
; 3c9d
LowVolume:: ; 3c9d
ld a, $33 ; 40%
ld [Volume], a
ret
; 3ca3
VolumeOff:: ; 3ca3
xor a
ld [Volume], a
ret
; 3ca8
Function3ca8:: ; 3ca8
ld a, 4
ld [MusicFade], a
ret
; 3cae
Function3cae:: ; 3cae
ld a, 4 | 1 << 7
ld [MusicFade], a
ret
; 3cb4
SkipMusic:: ; 3cb4
; Skip a frames of music.
and a
ret z
dec a
call UpdateSound
jr SkipMusic
; 3cbc
FadeToMapMusic:: ; 3cbc
push hl
push de
push bc
push af
call GetMapMusic
ld a, [wMapMusic]
cp e
jr z, .done
ld a, 8
ld [MusicFade], a
ld a, e
ld [MusicFadeIDLo], a
ld a, d
ld [MusicFadeIDHi], a
ld a, e
ld [wMapMusic], a
.done
pop af
pop bc
pop de
pop hl
ret
; 3cdf
PlayMapMusic:: ; 3cdf
push hl
push de
push bc
push af
call GetMapMusic
ld a, [wMapMusic]
cp e
jr z, .done
push de
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
pop de
ld a, e
ld [wMapMusic], a
call PlayMusic
.done
pop af
pop bc
pop de
pop hl
ret
; 3d03
EnterMapMusic:: ; 3d03
push hl
push de
push bc
push af
xor a
ld [$c2c1], a
ld de, MUSIC_BICYCLE
ld a, [PlayerState]
cp PLAYER_BIKE
jr z, .play
call GetMapMusic
.play
push de
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
pop de
ld a, e
ld [wMapMusic], a
call PlayMusic
pop af
pop bc
pop de
pop hl
ret
; 3d2f
Function3d2f:: ; 3d2f
ld a, [$c2c1]
and a
jr z, RestartMapMusic
xor a
ld [wMapMusic], a
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
xor a
ld [$c2c1], a
ret
; 3d47
RestartMapMusic:: ; 3d47
push hl
push de
push bc
push af
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
ld a, [wMapMusic]
ld e, a
ld d, 0
call PlayMusic
pop af
pop bc
pop de
pop hl
ret
; 3d62
SpecialMapMusic:: ; 3d62
ld a, [PlayerState]
cp PLAYER_SURF
jr z, .surf
cp PLAYER_SURF_PIKA
jr z, .surf
ld a, [StatusFlags2]
bit 2, a
jr nz, .contest
.no
and a
ret
.bike
ld de, MUSIC_BICYCLE
scf
ret
.surf
ld de, MUSIC_SURF
scf
ret
.contest
ld a, [MapGroup]
cp GROUP_ROUTE_35_NATIONAL_PARK_GATE
jr nz, .no
ld a, [MapNumber]
cp MAP_ROUTE_35_NATIONAL_PARK_GATE
jr z, .ranking
cp MAP_ROUTE_36_NATIONAL_PARK_GATE
jr nz, .no
.ranking
ld de, MUSIC_BUG_CATCHING_CONTEST_RANKING
scf
ret
; 3d97
GetMapMusic:: ; 3d97
call SpecialMapMusic
ret c
call GetMapHeaderMusic
ret
; 3d9f
Function3d9f:: ; 3d9f
; Places a BCD number at the
; upper center of the screen.
; Unreferenced.
ld a, $20
ld [$c498], a
ld [$c49c], a
ld a, $50
ld [$c499], a
ld a, $58
ld [$c49d], a
xor a
ld [$c49b], a
ld [$c49f], a
ld a, [$c296]
cp $64
jr nc, .max
add 1
daa
ld b, a
swap a
and $f
add "0"
ld [$c49a], a
ld a, b
and $f
add "0"
ld [$c49e], a
ret
.max
ld a, "9"
ld [$c49a], a
ld [$c49e], a
ret
; 3dde
CheckSFX:: ; 3dde
; Return carry if any SFX channels are active.
ld a, [Channel5Flags]
bit 0, a
jr nz, .playing
ld a, [Channel6Flags]
bit 0, a
jr nz, .playing
ld a, [Channel7Flags]
bit 0, a
jr nz, .playing
ld a, [Channel8Flags]
bit 0, a
jr nz, .playing
and a
ret
.playing
scf
ret
; 3dfe
Function3dfe:: ; 3dfe
xor a
ld [$c1cc], a
ld [SoundInput], a
ld [rNR10], a
ld [rNR11], a
ld [rNR12], a
ld [rNR13], a
ld [rNR14], a
ret
; 3e10
ChannelsOff:: ; 3e10
; Quickly turn off music channels
xor a
ld [Channel1Flags], a
ld [Channel2Flags], a
ld [Channel3Flags], a
ld [Channel4Flags], a
ld [SoundInput], a
ret
; 3e21
SFXChannelsOff:: ; 3e21
; Quickly turn off sound effect channels
xor a
ld [Channel5Flags], a
ld [Channel6Flags], a
ld [Channel7Flags], a
ld [Channel8Flags], a
ld [SoundInput], a
ret
; 3e32