ref: 2b018159997e3b580efd114ff4e3548a0de3cbc5
parent: 40c1ecb4374a83d9511fe2c5fa99704d9cfc521b
author: YamaArashi <shadow962@live.com>
date: Sat Aug 8 18:32:44 EDT 2015
commented audio code
--- a/audio.asm
+++ b/audio.asm
@@ -364,10 +364,10 @@
PlayBattleMusic:: ; 0x90c6
xor a
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld [wLowHealthAlarm], a
dec a
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound ; stop music
call DelayFrame
ld c, BANK(Music_GymLeaderBattle)
@@ -406,7 +406,7 @@
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b1a2
call Audio1_OverwriteChannelPointer
ld de, Music_MeetRival_branch_b21d
@@ -425,7 +425,7 @@
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b119
jp Audio1_OverwriteChannelPointer
@@ -432,23 +432,23 @@
; applies both the alternate start and alternate tempo
Music_RivalAlternateStartAndTempo:: ; 0x9b75
call Music_RivalAlternateStart
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b19b
jp Audio1_OverwriteChannelPointer
; an alternate tempo for Cities1 which is used for the Hall of Fame room
Music_Cities1AlternateTempo:: ; 0x9b81
- ld a, $a
- ld [wcfc8], a
- ld [wcfc9], a
- ld a, $ff
- ld [wMusicHeaderPointer], a
+ ld a, 10
+ ld [wAudioFadeOutCounterReloadValue], a
+ ld [wAudioFadeOutCounter], a
+ ld a, $ff ; stop playing music after the fade-out is finished
+ ld [wAudioFadeOutControl], a
ld c, 100
- call DelayFrames
+ call DelayFrames ; wait for the fade-out to finish
ld c, BANK(Music_Cities1)
ld a, MUSIC_CITIES1
call PlayMusic
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld de, Music_Cities1_branch_aa6f
jp Audio1_OverwriteChannelPointer
@@ -477,7 +477,7 @@
.asm_2138a
ld a, $86
- ld [wc02a], a ;disable sound channel?
+ ld [wChannelSoundIDs + CH4], a ;disable sound channel?
ld a, [wLowHealthAlarm]
and $7f ;decrement alarm timer.
dec a
@@ -491,7 +491,7 @@
.disableAlarm
xor a
ld [wLowHealthAlarm], a ;disable alarm
- ld [wc02a], a ;re-enable sound channel?
+ ld [wChannelSoundIDs + CH4], a ;re-enable sound channel?
ld de, .toneDataSilence
jr .playTone
@@ -542,7 +542,7 @@
ld a, SFX_CAUGHT_MON
call PlaySoundWaitForCurrent
; then immediately overwrtie the channel pointers
- ld hl, wc00e
+ ld hl, wChannelCommandPointers + CH4 * 2
ld de, SFX_08_PokeFlute_Ch1
call Audio2_OverwriteChannelPointer
ld de, SFX_08_PokeFlute_Ch2
@@ -572,7 +572,7 @@
.gotSfxPointer
push bc
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySoundWaitForCurrent
pop bc
ld b, $0
--- a/audio/engine_1.asm
+++ b/audio/engine_1.asm
@@ -3,8 +3,8 @@
Audio1_UpdateMusic:: ; 0x9103
ld c, CH0
.loop
- ld b, $0
- ld hl, wc026
+ ld b, 0
+ ld hl, wChannelSoundIDs
add hl, bc
ld a, [hl]
and a
@@ -11,21 +11,21 @@
jr z, .nextChannel
ld a, c
cp CH4
- jr nc, .asm_912e ; if sfx channel
- ld a, [wc002]
+ jr nc, .applyAffects ; if sfx channel
+ ld a, [wMuteAudioAndPauseMusic]
and a
- jr z, .asm_912e
+ jr z, .applyAffects
bit 7, a
jr nz, .nextChannel
set 7, a
- ld [wc002], a
- xor a
- ld [$ff25], a
- ld [$ff1a], a
+ ld [wMuteAudioAndPauseMusic], a
+ xor a ; disable all channels' output
+ ld [rNR51], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
jr .nextChannel
-.asm_912e
+.applyAffects
call Audio1_ApplyMusicAffects
.nextChannel
ld a, c
@@ -36,15 +36,9 @@
; this routine checks flags for music effects currently applied
; to the channel and calls certain functions based on flags.
-; known flags for wc02e:
-; 0: toggleperfectpitch has been used
-; 1: call has been used
-; 3: a toggle used only by this routine for vibrato
-; 4: pitchbend flag
-; 6: dutycycle flag
Audio1_ApplyMusicAffects: ; 0x9138
ld b, $0
- ld hl, wc0b6 ; delay until next note
+ ld hl, wChannelNoteDelayCounters ; delay until next note
add hl, bc
ld a, [hl]
cp $1 ; if the delay is 1, play next note
@@ -54,7 +48,7 @@
ld a, c
cp CH4
jr nc, .startChecks ; if a sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
@@ -61,38 +55,38 @@
jr z, .startChecks
ret
.startChecks
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 6, [hl] ; dutycycle
+ bit BIT_ROTATE_DUTY, [hl]
jr z, .checkForExecuteMusic
call Audio1_ApplyDutyCycle
.checkForExecuteMusic
- ld b, $0
- ld hl, wc036
+ ld b, 0
+ ld hl, wChannelFlags2
add hl, bc
- bit 0, [hl]
+ bit BIT_EXECUTE_MUSIC, [hl]
jr nz, .checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 2, [hl]
- jr nz, .disablePitchBendVibrato
+ bit BIT_NOISE_OR_SFX, [hl]
+ jr nz, .skipPitchBendVibrato
.checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 4, [hl] ; pitchbend
+ bit BIT_PITCH_BEND_ON, [hl]
jr z, .checkVibratoDelay
jp Audio1_ApplyPitchBend
.checkVibratoDelay
- ld hl, wc04e ; vibrato delay
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld a, [hl]
and a ; check if delay is over
jr z, .checkForVibrato
dec [hl] ; otherwise, dec delay
-.disablePitchBendVibrato
+.skipPitchBendVibrato
ret
.checkForVibrato
- ld hl, wc056 ; vibrato rate
+ ld hl, wChannelVibratoExtents
add hl, bc
ld a, [hl]
and a
@@ -100,27 +94,29 @@
ret ; no vibrato
.vibrato
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
ld a, [hl]
and $f
and a
- jr z, .vibratoAlreadyDone
- dec [hl] ; apply vibrato pitch change
+ jr z, .applyVibrato
+ dec [hl] ; decrement counter
ret
-.vibratoAlreadyDone
+.applyVibrato
ld a, [hl]
swap [hl]
or [hl]
- ld [hl], a ; reset the vibrato value and start again
- ld hl, wc066
+ ld [hl], a ; reload the counter
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld e, [hl] ; get note pitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 3, [hl] ; this is the only code that sets/resets bit three so
- jr z, .unset ; it continuously alternates which path it takes
- res 3, [hl]
+; This is the only code that sets/resets the vibrato direction bit, so it
+; continuously alternates which path it takes.
+ bit BIT_VIBRATO_DIRECTION, [hl]
+ jr z, .unset
+ res BIT_VIBRATO_DIRECTION, [hl]
ld a, d
and $f
ld d, a
@@ -127,11 +123,11 @@
ld a, e
sub d
jr nc, .noCarry
- ld a, $0
+ ld a, 0
.noCarry
jr .done
.unset
- set 3, [hl]
+ set BIT_VIBRATO_DIRECTION, [hl]
ld a, d
and $f0
swap a
@@ -140,8 +136,8 @@
ld a, $ff
.done
ld d, a
- ld b, $3
- call Audio1_9838
+ ld b, REG_FREQUENCY_LO
+ call Audio1_GetRegisterPointer
ld [hl], d
ret
@@ -149,16 +145,18 @@
; like tempo changes, duty changes etc. and doesn't return
; until the first note is reached
Audio1_PlayNextNote: ; 0x91d0
- ld hl, wc06e
+; reload the vibrato delay counter
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld a, [hl]
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc02e
+
+ ld hl, wChannelFlags1
add hl, bc
- res 4, [hl]
- res 5, [hl]
+ res BIT_PITCH_BEND_ON, [hl]
+ res BIT_PITCH_BEND_DECREASING, [hl]
call Audio1_endchannel
ret
@@ -167,34 +165,35 @@
ld d, a
cp $ff ; is this command an endchannel?
jp nz, Audio1_callchannel ; no
- ld b, $0 ; yes
- ld hl, wc02e
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
- bit 1, [hl]
+ bit BIT_CHANNEL_CALL, [hl]
jr nz, .returnFromCall
ld a, c
cp CH3
jr nc, .noiseOrSfxChannel
- jr .asm_923f
+ jr .disableChannelOutput
.noiseOrSfxChannel
- res 2, [hl]
- ld hl, wc036
+ res BIT_NOISE_OR_SFX, [hl]
+ ld hl, wChannelFlags2
add hl, bc
- res 0, [hl]
+ res BIT_EXECUTE_MUSIC, [hl]
cp CH6
- jr nz, .notSfxChannel3
+ jr nz, .skipSfxChannel3
+; restart hardware channel 3 (wave channel) output
ld a, $0
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
-.notSfxChannel3
+ ld [rNR30], a
+.skipSfxChannel3
jr nz, .asm_9222
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr z, .asm_9222
xor a
- ld [wc003], a
- jr .asm_923f
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ jr .disableChannelOutput
.asm_9222
jr .asm_9248
.returnFromCall
@@ -203,10 +202,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl ; store current channel address
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -217,36 +216,36 @@
ld a, [de]
ld [hl], a ; loads channel address to return to
jp Audio1_endchannel
-.asm_923f
- ld hl, Unknown_9b1f
+.disableChannelOutput
+ ld hl, Audio1_HWChannelDisableMasks
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a
.asm_9248
- ld a, [wc02a]
- cp $14
+ ld a, [wChannelSoundIDs + CH4]
+ cp CRY_SFX_START
jr nc, .asm_9251
- jr .asm_926e
+ jr .skipCry
.asm_9251
- ld a, [wc02a]
- cp $86
- jr z, .asm_926e
- jr c, .asm_925c
- jr .asm_926e
-.asm_925c
+ ld a, [wChannelSoundIDs + CH4]
+ cp CRY_SFX_END
+ jr z, .skipCry
+ jr c, .cry
+ jr .skipCry
+.cry
ld a, c
cp CH4
jr z, .asm_9265
- call Audio1_96c7
+ call Audio1_GoBackOneCommandIfCry
ret c
.asm_9265
- ld a, [wc005]
- ld [$ff24], a
+ ld a, [wSavedVolume]
+ ld [rNR50], a
xor a
- ld [wc005], a
-.asm_926e
- ld hl, wc026
+ ld [wSavedVolume], a
+.skipCry
+ ld hl, wChannelSoundIDs
add hl, bc
ld [hl], b
ret
@@ -254,7 +253,7 @@
Audio1_callchannel: ; 0x9274
cp $fd ; is this command a callchannel?
jp nz, Audio1_loopchannel ; no
- call Audio1_GetNextMusicByte ; yes
+ call Audio1_GetNextMusicByte
push af
call Audio1_GetNextMusicByte
ld d, a
@@ -265,10 +264,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -283,20 +282,20 @@
inc hl
ld [hl], d ; overwrite current address with pointer
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- set 1, [hl] ; set the call flag
+ set BIT_CHANNEL_CALL, [hl] ; set the call flag
jp Audio1_endchannel
Audio1_loopchannel: ; 0x92a9
cp $fe ; is this command a loopchannel?
jp nz, Audio1_notetype ; no
- call Audio1_GetNextMusicByte ; yes
+ call Audio1_GetNextMusicByte
ld e, a
and a
jr z, .infiniteLoop
- ld b, $0
- ld hl, wc0be
+ ld b, 0
+ ld hl, wChannelLoopCounters
add hl, bc
ld a, [hl]
cp e
@@ -319,7 +318,7 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
pop af
ld [hli], a
@@ -330,10 +329,10 @@
and $f0
cp $d0 ; is this command a notetype?
jp nz, Audio1_toggleperfectpitch ; no
- ld a, d ; yes
+ ld a, d
and $f
ld b, $0
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld [hl], a ; store low nibble as speed
ld a, c
@@ -345,15 +344,15 @@
cp CH2
jr z, .musicChannel3
cp CH6
- jr nz, .notChannel3
- ld hl, wc0e7
- jr .sfxChannel3
+ jr nz, .skipChannel3
+ ld hl, wSfxWaveInstrument
+ jr .channel3
.musicChannel3
- ld hl, wc0e6
-.sfxChannel3
+ ld hl, wMusicWaveInstrument
+.channel3
ld a, d
and $f
- ld [hl], a ; store low nibble of param as duty
+ ld [hl], a ; store low nibble of param as wave instrument
ld a, d
and $30
sla a
@@ -362,9 +361,9 @@
; if channel 3, store high nibble as volume
; else, store volume (high nibble) and fade (low nibble)
-.notChannel3
- ld b, $0
- ld hl, wc0de
+.skipChannel3
+ ld b, 0
+ ld hl, wChannelVolumes
add hl, bc
ld [hl], d
.noiseChannel
@@ -374,31 +373,38 @@
ld a, d
cp $e8 ; is this command a toggleperfectpitch?
jr nz, Audio1_vibrato ; no
- ld b, $0 ; yes
- ld hl, wc02e
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
ld a, [hl]
xor $1
- ld [hl], a ; flip bit 0 of wc02e
+ ld [hl], a ; flip bit 0 of wChannelFlags1
jp Audio1_endchannel
Audio1_vibrato: ; 0x9335
cp $ea ; is this command a vibrato?
jr nz, Audio1_pitchbend ; no
- call Audio1_GetNextMusicByte ; yes
- ld b, $0
- ld hl, wc04e
+ call Audio1_GetNextMusicByte
+ ld b, 0
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a ; store delay
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld [hl], a ; store delay
call Audio1_GetNextMusicByte
ld d, a
+
+; The high nybble of the command byte is the extent of the vibrato.
+; Let n be the extent.
+; The upper nybble of the channel's byte in the wChannelVibratoExtents
+; array will store the extent above the note: (n / 2) + (n % 2).
+; The lower nybble will store the extent below the note: (n / 2).
+; These two values add to the total extent, n.
and $f0
swap a
- ld b, $0
- ld hl, wc056
+ ld b, 0
+ ld hl, wChannelVibratoExtents
add hl, bc
srl a
ld e, a
@@ -405,25 +411,32 @@
adc b
swap a
or e
- ld [hl], a ; store rate as both high and low nibbles
+ ld [hl], a
+
+; The low nybble of the command byte is the rate of the vibrato.
+; The high and low nybbles of the channel's byte in the wChannelVibratoRates
+; array are both initialised to this value because the high nybble is the
+; counter reload value and the low nybble is the counter itself, which should
+; start at its value upon reload.
ld a, d
and $f
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
swap a
or d
- ld [hl], a ; store depth as both high and low nibbles
+ ld [hl], a
+
jp Audio1_endchannel
Audio1_pitchbend: ; 0x936d
cp $eb ; is this command a pitchbend?
jr nz, Audio1_duty ; no
- call Audio1_GetNextMusicByte ; yes
- ld b, $0
- ld hl, wc076
+ call Audio1_GetNextMusicByte
+ ld b, 0
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
- ld [hl], a ; store first param
+ ld [hl], a
call Audio1_GetNextMusicByte
ld d, a
and $f0
@@ -431,18 +444,18 @@
ld b, a
ld a, d
and $f
- call Audio1_9858
- ld b, $0
- ld hl, wc0a6
+ call Audio1_CalculateFrequency
+ ld b, 0
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
- ld [hl], d ; store unknown part of second param
- ld hl, wc0ae
+ ld [hl], d
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
- ld [hl], e ; store unknown part of second param
- ld b, $0
- ld hl, wc02e
+ ld [hl], e
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
- set 4, [hl] ; set pitchbend flag
+ set BIT_PITCH_BEND_ON, [hl]
call Audio1_GetNextMusicByte
ld d, a
jp Audio1_notelength
@@ -450,12 +463,12 @@
Audio1_duty: ; 0x93a5
cp $ec ; is this command a duty?
jr nz, Audio1_tempo ; no
- call Audio1_GetNextMusicByte ; yes
+ call Audio1_GetNextMusicByte
rrca
rrca
and $c0
- ld b, $0
- ld hl, wc03e
+ ld b, 0
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store duty
jp Audio1_endchannel
@@ -463,29 +476,29 @@
Audio1_tempo: ; 0x93ba
cp $ed ; is this command a tempo?
jr nz, Audio1_stereopanning ; no
- ld a, c ; yes
+ ld a, c
cp CH4
jr nc, .sfxChannel
call Audio1_GetNextMusicByte
- ld [wc0e8], a ; store first param
+ ld [wMusicTempo], a ; store first param
call Audio1_GetNextMusicByte
- ld [wc0e9], a ; store second param
+ ld [wMusicTempo + 1], a ; store second param
xor a
- ld [wc0ce], a ; clear RAM
- ld [wc0cf], a
- ld [wc0d0], a
- ld [wc0d1], a
+ ld [wChannelNoteDelayCountersFractionalPart], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 1], a
+ ld [wChannelNoteDelayCountersFractionalPart + 2], a
+ ld [wChannelNoteDelayCountersFractionalPart + 3], a
jr .musicChannelDone
.sfxChannel
call Audio1_GetNextMusicByte
- ld [wc0ea], a ; store first param
+ ld [wSfxTempo], a ; store first param
call Audio1_GetNextMusicByte
- ld [wc0eb], a ; store second param
+ ld [wSfxTempo + 1], a ; store second param
xor a
- ld [wc0d2], a ; clear RAM
- ld [wc0d3], a
- ld [wc0d4], a
- ld [wc0d5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 4], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 6], a
+ ld [wChannelNoteDelayCountersFractionalPart + 7], a
.musicChannelDone
jp Audio1_endchannel
@@ -492,8 +505,8 @@
Audio1_stereopanning: ; 0x93fa
cp $ee ; is this command a stereopanning?
jr nz, Audio1_unknownmusic0xef ; no
- call Audio1_GetNextMusicByte ; yes
- ld [wc004], a ; store panning
+ call Audio1_GetNextMusicByte
+ ld [wStereoPanning], a ; store panning
jp Audio1_endchannel
; this appears to never be used
@@ -500,17 +513,17 @@
Audio1_unknownmusic0xef: ; 0x9407
cp $ef ; is this command an unknownmusic0xef?
jr nz, Audio1_dutycycle ; no
- call Audio1_GetNextMusicByte ; yes
+ call Audio1_GetNextMusicByte
push bc
- call Audio1_9876
+ call Audio1_PlaySound
pop bc
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .skip
- ld a, [wc02d]
- ld [wc003], a
+ ld a, [wChannelSoundIDs + CH7]
+ ld [wDisableChannelOutputWhenSfxEnds], a
xor a
- ld [wc02d], a
+ ld [wChannelSoundIDs + CH7], a
.skip
jp Audio1_endchannel
@@ -517,34 +530,34 @@
Audio1_dutycycle: ; 0x9426
cp $fc ; is this command a dutycycle?
jr nz, Audio1_volume ; no
- call Audio1_GetNextMusicByte ; yes
- ld b, $0
- ld hl, wc046
+ call Audio1_GetNextMusicByte
+ ld b, 0
+ ld hl, wChannelDutyCycles
add hl, bc
ld [hl], a ; store full cycle
and $c0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store first duty
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- set 6, [hl] ; set dutycycle flag
+ set BIT_ROTATE_DUTY, [hl]
jp Audio1_endchannel
Audio1_volume: ; 0x9444
cp $f0 ; is this command a volume?
jr nz, Audio1_executemusic ; no
- call Audio1_GetNextMusicByte ; yes
- ld [$ff24], a ; store volume
+ call Audio1_GetNextMusicByte
+ ld [rNR50], a ; store volume
jp Audio1_endchannel
Audio1_executemusic: ; 0x9450
cp $f8 ; is this command an executemusic?
jr nz, Audio1_octave ; no
- ld b, $0 ; yes
- ld hl, wc036
+ ld b, $0
+ ld hl, wChannelFlags2
add hl, bc
- set 0, [hl]
+ set BIT_EXECUTE_MUSIC, [hl]
jp Audio1_endchannel
Audio1_octave: ; 0x945f
@@ -551,8 +564,8 @@
and $f0
cp $e0 ; is this command an octave?
jr nz, Audio1_unknownsfx0x20 ; no
- ld hl, wc0d6 ; yes
- ld b, $0
+ ld hl, wChannelOctaves
+ ld b, 0
add hl, bc
ld a, d
and $f
@@ -561,47 +574,54 @@
Audio1_unknownsfx0x20: ; 0x9472
cp $20 ; is this command an unknownsfx0x20?
- jr nz, Audio1_unknownsfx0x10 ; no
+ jr nz, Audio1_unknownsfx0x10
ld a, c
cp CH3 ; is this a noise or sfx channel?
jr c, Audio1_unknownsfx0x10 ; no
- ld b, $0
- ld hl, wc036
+ ld b, 0
+ ld hl, wChannelFlags2
add hl, bc
- bit 0, [hl]
- jr nz, Audio1_unknownsfx0x10 ; no
- call Audio1_notelength ; yes
+ bit BIT_EXECUTE_MUSIC, [hl] ; is executemusic being used?
+ jr nz, Audio1_unknownsfx0x10 ; yes
+ call Audio1_notelength
+
+; This code seems to do the same thing as what Audio1_ApplyDutyAndSoundLength
+; does below.
ld d, a
- ld b, $0
- ld hl, wc03e
+ ld b, 0
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
ld d, a
- ld b, $1
- call Audio1_9838
+ ld b, REG_DUTY_SOUND_LEN
+ call Audio1_GetRegisterPointer
ld [hl], d
+
call Audio1_GetNextMusicByte
ld d, a
- ld b, $2
- call Audio1_9838
+ ld b, REG_VOLUME_ENVELOPE
+ call Audio1_GetRegisterPointer
ld [hl], d
call Audio1_GetNextMusicByte
ld e, a
ld a, c
cp CH7
- ld a, $0
- jr z, .sfxNoiseChannel ; only two params for noise channel
+ ld a, 0
+ jr z, .skip
+; Channels 1 through 3 have 2 registers that control frequency, but the noise
+; channel a single register (the polynomial counter) that controls frequency,
+; so this command has one less byte on the noise channel.
push de
call Audio1_GetNextMusicByte
pop de
-.sfxNoiseChannel
+.skip
ld d, a
push de
- call Audio1_9629
- call Audio1_95f8
+ call Audio1_ApplyDutyAndSoundLength
+ call Audio1_EnableChannelOutput
pop de
- call Audio1_964b
+ call Audio1_ApplyWavePatternAndFrequency
ret
Audio1_unknownsfx0x10:
@@ -612,12 +632,12 @@
cp $10 ; is this command a unknownsfx0x10?
jr nz, Audio1_note ; no
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
- bit 0, [hl]
+ bit BIT_EXECUTE_MUSIC, [hl]
jr nz, Audio1_note ; no
- call Audio1_GetNextMusicByte ; yes
- ld [$ff10], a
+ call Audio1_GetNextMusicByte
+ ld [rNR10], a
jp Audio1_endchannel
Audio1_note:
@@ -627,7 +647,7 @@
ld a, d
and $f0
cp $b0 ; is this command a dnote?
- jr z, Audio1_dnote ; yes
+ jr z, Audio1_dnote
jr nc, Audio1_notelength ; no
swap a
ld b, a
@@ -647,11 +667,11 @@
call Audio1_GetNextMusicByte ; get dnote instrument
asm_94fd
ld d, a
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .asm_9508
ld a, d
- call Audio1_9876
+ call Audio1_PlaySound
.asm_9508
pop bc
pop de
@@ -661,20 +681,20 @@
push af
and $f
inc a
- ld b, $0
+ ld b, 0
ld e, a ; store note length (in 16ths)
ld d, b
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld a, [hl]
ld l, b
- call Audio1_9847
+ call Audio1_MultiplyAdd
ld a, c
cp CH4
jr nc, .sfxChannel
- ld a, [wc0e8]
+ ld a, [wMusicTempo]
ld d, a
- ld a, [wc0e9]
+ ld a, [wMusicTempo + 1]
ld e, a
jr .skip
.sfxChannel
@@ -682,34 +702,34 @@
ld e, $0
cp CH7
jr z, .skip ; if noise channel
- call Audio1_9693
- ld a, [wc0ea]
+ call Audio1_SetSfxTempo
+ ld a, [wSfxTempo]
ld d, a
- ld a, [wc0eb]
+ ld a, [wSfxTempo + 1]
ld e, a
.skip
- ld a, l
- ld b, $0
- ld hl, wc0ce
+ ld a, l ; a = note_length * note_speed
+ ld b, 0
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld l, [hl]
- call Audio1_9847
+ call Audio1_MultiplyAdd
ld e, l
- ld d, h
- ld hl, wc0ce
+ ld d, h ; de = note_delay_frac_part + (note_length * note_speed * tempo)
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld [hl], e
ld a, d
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
- bit 0, [hl]
+ bit BIT_EXECUTE_MUSIC, [hl]
jr nz, Audio1_notepitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 2, [hl]
+ bit BIT_NOISE_OR_SFX, [hl]
jr z, Audio1_notepitch
pop hl
ret
@@ -721,167 +741,173 @@
jr nz, .notRest
ld a, c
cp CH4
- jr nc, .sfxChannel
- ld hl, wc02a
+ jr nc, .next
+; If this isn't an SFX channel, try the corresponding SFX channel.
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
jr nz, .done
; fall through
-.sfxChannel
+.next
ld a, c
cp CH2
- jr z, .musicChannel3
+ jr z, .channel3
cp CH6
- jr nz, .notSfxChannel3
-.musicChannel3
- ld b, $0
- ld hl, Unknown_9b1f
+ jr nz, .notChannel3
+.channel3
+ ld b, 0
+ ld hl, Audio1_HWChannelDisableMasks
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a ; disable hardware channel 3's output
jr .done
-.notSfxChannel3
- ld b, $2
- call Audio1_9838
- ld a, $8
+.notChannel3
+ ld b, REG_VOLUME_ENVELOPE
+ call Audio1_GetRegisterPointer
+ ld a, $8 ; fade in sound
ld [hli], a
inc hl
- ld a, $80
+ ld a, $80 ; restart sound
ld [hl], a
.done
ret
.notRest
swap a
- ld b, $0
- ld hl, wc0d6
+ ld b, 0
+ ld hl, wChannelOctaves
add hl, bc
ld b, [hl]
- call Audio1_9858
- ld b, $0
- ld hl, wc02e
+ call Audio1_CalculateFrequency
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
- bit 4, [hl]
- jr z, .asm_95b8
- call Audio1_978f
-.asm_95b8
+ bit BIT_PITCH_BEND_ON, [hl]
+ jr z, .skipPitchBend
+ call Audio1_InitPitchBendVars
+.skipPitchBend
push de
ld a, c
cp CH4
- jr nc, .skip ; if sfx channel
- ld hl, wc02a
- ld d, $0
+ jr nc, .sfxChannel ; if sfx channel
+; If this isn't an SFX channel, try the corresponding SFX channel.
+ ld hl, wChannelSoundIDs + CH4
+ ld d, 0
ld e, a
add hl, de
ld a, [hl]
and a
- jr nz, .asm_95cb
- jr .skip
-.asm_95cb
+ jr nz, .noSfx
+ jr .sfxChannel
+.noSfx
pop de
ret
-.skip
- ld b, $0
- ld hl, wc0de
+.sfxChannel
+ ld b, 0
+ ld hl, wChannelVolumes
add hl, bc
ld d, [hl]
- ld b, $2
- call Audio1_9838
+ ld b, REG_VOLUME_ENVELOPE
+ call Audio1_GetRegisterPointer
ld [hl], d
- call Audio1_9629
- call Audio1_95f8
+ call Audio1_ApplyDutyAndSoundLength
+ call Audio1_EnableChannelOutput
pop de
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 0, [hl] ; has toggleperfectpitch been used?
- jr z, .skip2
- inc e ; if yes, increment the pitch by 1
- jr nc, .skip2
+ bit BIT_PERFECT_PITCH, [hl] ; has toggleperfectpitch been used?
+ jr z, .skipFrequencyInc
+ inc e ; if yes, increment the frequency by 1
+ jr nc, .skipFrequencyInc
inc d
-.skip2
- ld hl, wc066
+.skipFrequencyInc
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld [hl], e
- call Audio1_964b
+ call Audio1_ApplyWavePatternAndFrequency
ret
-Audio1_95f8: ; 0x95f8
- ld b, $0
- ld hl, Unknown_9b27
+Audio1_EnableChannelOutput: ; 0x95f8
+ ld b, 0
+ ld hl, Audio1_HWChannelEnableMasks
add hl, bc
- ld a, [$ff25]
- or [hl]
+ ld a, [rNR51]
+ or [hl] ; set this channel's bits
ld d, a
ld a, c
cp CH7
- jr z, .sfxNoiseChannel
+ jr z, .noiseChannelOrNoSfx
cp CH4
jr nc, .skip ; if sfx channel
- ld hl, wc02a
+; If this isn't an SFX channel, try the corresponding SFX channel.
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
jr nz, .skip
-.sfxNoiseChannel
- ld a, [wc004]
- ld hl, Unknown_9b27
+.noiseChannelOrNoSfx
+; If this is the SFX noise channel or a music channel whose corresponding
+; SFX channel is off, apply stereo panning.
+ ld a, [wStereoPanning]
+ ld hl, Audio1_HWChannelEnableMasks
add hl, bc
and [hl]
ld d, a
- ld a, [$ff25]
- ld hl, Unknown_9b1f
+ ld a, [rNR51]
+ ld hl, Audio1_HWChannelDisableMasks
add hl, bc
- and [hl]
- or d
+ and [hl] ; reset this channel's output bits
+ or d ; set this channel's output bits that enabled in [wStereoPanning]
ld d, a
.skip
ld a, d
- ld [$ff25], a
+ ld [rNR51], a
ret
-Audio1_9629: ; 0x9629
- ld b, $0
- ld hl, wc0b6
+Audio1_ApplyDutyAndSoundLength: ; 0x9629
+ ld b, 0
+ ld hl, wChannelNoteDelayCounters ; use the note delay as sound length
add hl, bc
ld d, [hl]
ld a, c
cp CH2
- jr z, .channel3 ; if music channel 3
+ jr z, .skipDuty ; if music channel 3
cp CH6
- jr z, .channel3 ; if sfx channel 3
+ jr z, .skipDuty ; if sfx channel 3
+; include duty (except on channel 3 which doesn't have it)
ld a, d
and $3f
ld d, a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
ld d, a
-.channel3
- ld b, $1
- call Audio1_9838
+.skipDuty
+ ld b, REG_DUTY_SOUND_LEN
+ call Audio1_GetRegisterPointer
ld [hl], d
ret
-Audio1_964b: ; 0x964b
+Audio1_ApplyWavePatternAndFrequency: ; 0x964b
ld a, c
cp CH2
jr z, .channel3
cp CH6
- jr nz, .notSfxChannel3
+ jr nz, .notChannel3
; fall through
.channel3
push de
- ld de, wc0e6
+ ld de, wMusicWaveInstrument
cp CH2
- jr z, .musicChannel3
- ld de, wc0e7
-.musicChannel3
+ jr z, .next
+ ld de, wSfxWaveInstrument
+.next
ld a, [de]
add a
- ld d, $0
+ ld d, 0
ld e, a
ld hl, Audio1_WavePointers
add hl, de
@@ -888,10 +914,10 @@
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $ff30
+ ld hl, $ff30 ; wave pattern RAM
ld b, $f
- ld a, $0
- ld [$ff1a], a
+ ld a, $0 ; stop hardware channel 3
+ ld [rNR30], a
.loop
ld a, [de]
inc de
@@ -900,111 +926,114 @@
dec b
and a
jr nz, .loop
- ld a, $80
- ld [$ff1a], a
+ ld a, $80 ; start hardware channel 3
+ ld [rNR30], a
pop de
-.notSfxChannel3
+.notChannel3
ld a, d
- or $80
- and $c7
+ or $80 ; use counter mode (i.e. disable output when the counter reaches 0)
+ and $c7 ; zero the unused bits in the register
ld d, a
- ld b, $3
- call Audio1_9838
- ld [hl], e
+ ld b, REG_FREQUENCY_LO
+ call Audio1_GetRegisterPointer
+ ld [hl], e ; store frequency low byte
inc hl
- ld [hl], d
- call Audio1_96b5
+ ld [hl], d ; store frequency high byte
+ call Audio1_ApplyFrequencyModifier
ret
-Audio1_9693: ; 0x9693
- call Audio1_96e5
- jr nc, .asm_96ab
- ld d, $0
- ld a, [wc0f2]
+Audio1_SetSfxTempo: ; 0x9693
+ call Audio1_IsCry
+ jr nc, .notCry
+ ld d, 0
+ ld a, [wTempoModifier]
add $80
- jr nc, .asm_96a2
+ jr nc, .next
inc d
-.asm_96a2
- ld [wc0eb], a
+.next
+ ld [wSfxTempo + 1], a
ld a, d
- ld [wc0ea], a
- jr .asm_96b4
-.asm_96ab
+ ld [wSfxTempo], a
+ jr .done
+.notCry
xor a
- ld [wc0eb], a
+ ld [wSfxTempo + 1], a
ld a, $1
- ld [wc0ea], a
-.asm_96b4
+ ld [wSfxTempo], a
+.done
ret
-Audio1_96b5: ; 0x96b5
- call Audio1_96e5
- jr nc, .asm_96c6
- ld a, [wc0f1]
+Audio1_ApplyFrequencyModifier: ; 0x96b5
+ call Audio1_IsCry
+ jr nc, .done
+; if playing a cry, add the cry's frequency modifier
+ ld a, [wFrequencyModifier]
add e
- jr nc, .asm_96c1
+ jr nc, .noCarry
inc d
-.asm_96c1
+.noCarry
dec hl
ld e, a
ld [hl], e
inc hl
ld [hl], d
-.asm_96c6
+.done
ret
-Audio1_96c7: ; 0x96c7
- call Audio1_96e5
- jr nc, .asm_96e2
- ld hl, wc006
+Audio1_GoBackOneCommandIfCry: ; 0x96c7
+ call Audio1_IsCry
+ jr nc, .done
+ ld hl, wChannelCommandPointers
ld e, c
- ld d, $0
+ ld d, 0
sla e
rl d
add hl, de
ld a, [hl]
- sub $1
+ sub 1
ld [hl], a
inc hl
ld a, [hl]
- sbc $0
+ sbc 0
ld [hl], a
scf
ret
-.asm_96e2
+.done
scf
ccf
ret
-Audio1_96e5: ; 0x96e5
- ld a, [wc02a]
- cp $14
- jr nc, .asm_96ee
- jr .asm_96f4
-.asm_96ee
- cp $86
- jr z, .asm_96f4
- jr c, .asm_96f7
-.asm_96f4
+Audio1_IsCry: ; 0x96e5
+; Returns whether the currently playing audio is a cry in carry.
+ ld a, [wChannelSoundIDs + CH4]
+ cp CRY_SFX_START
+ jr nc, .next
+ jr .no
+.next
+ cp CRY_SFX_END
+ jr z, .no
+ jr c, .yes
+.no
scf
ccf
ret
-.asm_96f7
+.yes
scf
ret
Audio1_ApplyPitchBend: ; 0x96f9
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
- bit 5, [hl]
- jp nz, .asm_9740
- ld hl, wc09e
+ bit BIT_PITCH_BEND_DECREASING, [hl]
+ jp nz, .frequencyDecreasing
+; frequency increasing
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld l, [hl]
ld h, b
@@ -1011,41 +1040,41 @@
add hl, de
ld d, h
ld e, l
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
push hl
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
pop hl
add [hl]
ld [hl], a
- ld a, $0
+ ld a, 0
adc e
ld e, a
- ld a, $0
+ ld a, 0
adc d
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
cp d
- jp c, .asm_9786
- jr nz, .asm_9773
- ld hl, wc0ae
+ jp c, .reachedTargetFrequency
+ jr nz, .applyUpdatedFrequency
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
cp e
- jp c, .asm_9786
- jr .asm_9773
-.asm_9740
- ld hl, wc09e
+ jp c, .reachedTargetFrequency
+ jr .applyUpdatedFrequency
+.frequencyDecreasing
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld a, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld e, [hl]
sub e
@@ -1053,7 +1082,7 @@
ld a, d
sbc b
ld d, a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
add a
@@ -1064,55 +1093,56 @@
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, d
cp [hl]
- jr c, .asm_9786
- jr nz, .asm_9773
- ld hl, wc0ae
+ jr c, .reachedTargetFrequency
+ jr nz, .applyUpdatedFrequency
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
cp [hl]
- jr c, .asm_9786
-.asm_9773
- ld hl, wc09e
+ jr c, .reachedTargetFrequency
+.applyUpdatedFrequency
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
- ld b, $3
- call Audio1_9838
+ ld b, REG_FREQUENCY_LO
+ call Audio1_GetRegisterPointer
ld a, e
ld [hli], a
ld [hl], d
ret
-.asm_9786
- ld hl, wc02e
+.reachedTargetFrequency
+; Turn off pitch bend when the target frequency has been reached.
+ ld hl, wChannelFlags1
add hl, bc
- res 4, [hl]
- res 5, [hl]
+ res BIT_PITCH_BEND_ON, [hl]
+ res BIT_PITCH_BEND_DECREASING, [hl]
ret
-Audio1_978f: ; 0x978f
- ld hl, wc096
+Audio1_InitPitchBendVars: ; 0x978f
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld a, [hl]
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
sub [hl]
- jr nc, .asm_97a7
- ld a, $1
-.asm_97a7
+ jr nc, .next
+ ld a, 1
+.next
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
sub [hl]
@@ -1119,74 +1149,84 @@
ld e, a
ld a, d
sbc b
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
sub [hl]
- jr c, .asm_97c3
+ jr c, .targetFrequencyGreater
ld d, a
- ld b, $0
- ld hl, wc02e
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
- set 5, [hl]
- jr .asm_97e6
-.asm_97c3
- ld hl, wc096
+ set BIT_PITCH_BEND_DECREASING, [hl]
+ jr .next2
+.targetFrequencyGreater
+; If the target frequency is greater, subtract the current frequency from
+; the target frequency to get the absolute difference.
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
sub e
ld e, a
+
+; Bug. Instead of borrowing from the high byte of the target frequency as it
+; should, it borrows from the high byte of the current frequency instead.
+; This means that the result will be 0x200 greater than it should be if the
+; low byte of the current frequency is greater than the low byte of the
+; target frequency.
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
sub d
ld d, a
- ld b, $0
- ld hl, wc02e
+ ld b, 0
+ ld hl, wChannelFlags1
add hl, bc
- res 5, [hl]
-.asm_97e6
- ld hl, wc076
+ res BIT_PITCH_BEND_DECREASING, [hl]
+
+.next2
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
-.asm_97ea
+.divideLoop
inc b
ld a, e
sub [hl]
ld e, a
- jr nc, .asm_97ea
+ jr nc, .divideLoop
ld a, d
and a
- jr z, .asm_97f8
+ jr z, .doneDividing
dec a
ld d, a
- jr .asm_97ea
-.asm_97f8
- ld a, e
+ jr .divideLoop
+.doneDividing
+ ld a, e ; a = remainder - dividend
add [hl]
- ld d, b
- ld b, $0
- ld hl, wc07e
+ ld d, b ; d = quotient + 1
+ ld b, 0
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
- ld [hl], d
- ld hl, wc086
+ ld [hl], d ; store quotient + 1
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
- ld [hl], a
- ld hl, wc08e
+ ld [hl], a ; store remainder - dividend
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
- ld [hl], a
+ ld [hl], a ; store remainder - dividend
ret
Audio1_ApplyDutyCycle: ; 0x980d
- ld b, $0
- ld hl, wc046
+ ld b, 0
+ ld hl, wChannelDutyCycles
add hl, bc
ld a, [hl]
rlca
@@ -1194,8 +1234,8 @@
ld [hl], a
and $c0
ld d, a
- ld b, $1
- call Audio1_9838
+ ld b, REG_DUTY_SOUND_LEN
+ call Audio1_GetRegisterPointer
ld a, [hl]
and $3f
or d
@@ -1203,11 +1243,11 @@
ret
Audio1_GetNextMusicByte: ; 0x9825
- ld d, $0
+ ld d, 0
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld a, [hli]
ld e, a
@@ -1220,9 +1260,10 @@
ld [hl], d
ret
-Audio1_9838: ; 0x9838
+Audio1_GetRegisterPointer: ; 0x9838
+; hl = address of hardware sound register b for software channel c
ld a, c
- ld hl, Unknown_9b17
+ ld hl, Audio1_HWChannelBaseAddresses
add l
jr nc, .noCarry
inc h
@@ -1234,13 +1275,14 @@
ld h, $ff
ret
-Audio1_9847: ; 0x9847
- ld h, $0
+Audio1_MultiplyAdd: ; 0x9847
+; hl = l + (a * de)
+ ld h, 0
.loop
srl a
- jr nc, .noCarry
+ jr nc, .skipAdd
add hl, de
-.noCarry
+.skipAdd
sla e
rl d
and a
@@ -1249,8 +1291,9 @@
.done
ret
-Audio1_9858: ; 0x9858
- ld h, $0
+Audio1_CalculateFrequency: ; 0x9858
+; return the frequency for note a, octave b in de
+ ld h, 0
ld l, a
add hl, hl
ld d, h
@@ -1262,7 +1305,7 @@
ld d, [hl]
ld a, b
.loop
- cp $7
+ cp 7
jr z, .done
sra d
rr e
@@ -1269,98 +1312,99 @@
inc a
jr .loop
.done
- ld a, $8
+ ld a, 8
add d
ld d, a
ret
-Audio1_9876:: ; 0x9876
- ld [wc001], a
+Audio1_PlaySound:: ; 0x9876
+ ld [wSoundID], a
cp $ff
- jp z, Audio1_9a34
- cp $b9
- jp z, Audio1_994e
- jp c, Audio1_994e
+ jp z, .stopAllAudio
+ cp MAX_SFX_ID
+ jp z, .playSfx
+ jp c, .playSfx
cp $fe
- jr z, .asm_988d
- jp nc, Audio1_994e
-.asm_988d
+ jr z, .playMusic
+ jp nc, .playSfx
+
+.playMusic
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc0e9], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMusicTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $8
- ld hl, wc016
- call FillAudioRAM1
- ld hl, wc006
- call FillAudioRAM1
+ ld hl, wChannelReturnAddresses
+ call .FillMem
+ ld hl, wChannelCommandPointers
+ call .FillMem
ld d, $4
- ld hl, wc026
- call FillAudioRAM1
- ld hl, wc02e
- call FillAudioRAM1
- ld hl, wc03e
- call FillAudioRAM1
- ld hl, wc046
- call FillAudioRAM1
- ld hl, wc04e
- call FillAudioRAM1
- ld hl, wc056
- call FillAudioRAM1
- ld hl, wc05e
- call FillAudioRAM1
- ld hl, wc066
- call FillAudioRAM1
- ld hl, wc06e
- call FillAudioRAM1
- ld hl, wc036
- call FillAudioRAM1
- ld hl, wc076
- call FillAudioRAM1
- ld hl, wc07e
- call FillAudioRAM1
- ld hl, wc086
- call FillAudioRAM1
- ld hl, wc08e
- call FillAudioRAM1
- ld hl, wc096
- call FillAudioRAM1
- ld hl, wc09e
- call FillAudioRAM1
- ld hl, wc0a6
- call FillAudioRAM1
- ld hl, wc0ae
- call FillAudioRAM1
+ ld hl, wChannelSoundIDs
+ call .FillMem
+ ld hl, wChannelFlags1
+ call .FillMem
+ ld hl, wChannelDuties
+ call .FillMem
+ ld hl, wChannelDutyCycles
+ call .FillMem
+ ld hl, wChannelVibratoDelayCounters
+ call .FillMem
+ ld hl, wChannelVibratoExtents
+ call .FillMem
+ ld hl, wChannelVibratoRates
+ call .FillMem
+ ld hl, wChannelFrequencyLowBytes
+ call .FillMem
+ ld hl, wChannelVibratoDelayCounterReloadValues
+ call .FillMem
+ ld hl, wChannelFlags2
+ call .FillMem
+ ld hl, wChannelPitchBendLengthModifiers
+ call .FillMem
+ ld hl, wChannelPitchBendFrequencySteps
+ call .FillMem
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
+ call .FillMem
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
+ call .FillMem
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
+ call .FillMem
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
+ call .FillMem
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
+ call .FillMem
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
+ call .FillMem
ld a, $1
- ld hl, wc0be
- call FillAudioRAM1
- ld hl, wc0b6
- call FillAudioRAM1
- ld hl, wc0c6
- call FillAudioRAM1
- ld [wc0e8], a
+ ld hl, wChannelLoopCounters
+ call .FillMem
+ ld hl, wChannelNoteDelayCounters
+ call .FillMem
+ ld hl, wChannelNoteSpeeds
+ call .FillMem
+ ld [wMusicTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
xor a
- ld [$ff24], a
+ ld [rNR50], a
ld a, $8
- ld [$ff10], a
- ld a, $0
- ld [$ff25], a
+ ld [rNR10], a
+ ld a, 0
+ ld [rNR51], a
xor a
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $77
- ld [$ff24], a
- jp Audio1_9a8f
+ ld [rNR50], a
+ jp .playSoundCommon
-Audio1_994e: ; 0x994e
+.playSfx
ld l, a
ld e, a
- ld h, $0
+ ld h, 0
ld d, h
add hl, hl
add hl, de
@@ -1367,32 +1411,32 @@
ld de, SFX_Headers_1
add hl, de
ld a, h
- ld [wc0ec], a
+ ld [wSfxHeaderPointer], a
ld a, l
- ld [wc0ed], a
+ ld [wSfxHeaderPointer + 1], a
ld a, [hl]
and $c0
rlca
rlca
ld c, a
-.asm_9967
+.sfxChannelLoop
ld d, c
ld a, c
add a
add c
ld c, a
- ld b, $0
- ld a, [wc0ec]
+ ld b, 0
+ ld a, [wSfxHeaderPointer]
ld h, a
- ld a, [wc0ed]
+ ld a, [wSfxHeaderPointer + 1]
ld l, a
add hl, bc
ld c, d
ld a, [hl]
and $f
- ld e, a
- ld d, $0
- ld hl, wc026
+ ld e, a ; software channel ID
+ ld d, 0
+ ld hl, wChannelSoundIDs
add hl, de
ld a, [hl]
and a
@@ -1400,7 +1444,7 @@
ld a, e
cp $7
jr nz, .asm_999a
- ld a, [wc001]
+ ld a, [wSoundID]
cp $14
jr nc, .asm_9993
ret
@@ -1410,7 +1454,7 @@
jr z, .asm_99a3
jr c, .asm_99a3
.asm_999a
- ld a, [wc001]
+ ld a, [wSoundID]
cp [hl]
jr z, .asm_99a3
jr c, .asm_99a3
@@ -1423,132 +1467,132 @@
add hl, hl
ld d, h
ld e, l
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld [hli], a
ld [hl], a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld [hli], a
ld [hl], a
pop de
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, de
ld [hl], a
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, de
ld [hl], a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, de
ld [hl], a
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, de
ld [hl], a
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, de
ld [hl], a
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
add hl, de
ld [hl], a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, de
ld [hl], a
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, de
ld [hl], a
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, de
ld [hl], a
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, de
ld [hl], a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, de
ld [hl], a
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, de
ld [hl], a
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, de
ld [hl], a
ld a, $1
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
add hl, de
ld [hl], a
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, de
ld [hl], a
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, de
ld [hl], a
ld a, e
- cp $4
+ cp CH4
jr nz, .asm_9a2b
ld a, $8
- ld [$ff10], a
+ ld [rNR10], a ; sweep off
.asm_9a2b
ld a, c
and a
- jp z, Audio1_9a8f
+ jp z, .playSoundCommon
dec c
- jp .asm_9967
+ jp .sfxChannelLoop
-Audio1_9a34: ; 0x9a34
+.stopAllAudio
ld a, $80
- ld [$ff26], a
- ld [$ff1a], a
+ ld [rNR52], a ; sound hardware on
+ ld [rNR30], a ; wave playback on
xor a
- ld [$ff25], a
- ld [$ff1c], a
+ ld [rNR51], a ; no sound output
+ ld [rNR32], a ; mute channel 3 (wave channel)
ld a, $8
- ld [$ff10], a
- ld [$ff12], a
- ld [$ff17], a
- ld [$ff21], a
+ ld [rNR10], a ; sweep off
+ ld [rNR12], a ; mute channel 1 (pulse channel 1)
+ ld [rNR22], a ; mute channel 2 (pulse channel 2)
+ ld [rNR42], a ; mute channel 4 (noise channel)
ld a, $40
- ld [$ff14], a
- ld [$ff19], a
- ld [$ff23], a
+ ld [rNR14], a ; counter mode
+ ld [rNR24], a
+ ld [rNR44], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a ; full volume
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc002], a
- ld [wc0e9], a
- ld [wc0eb], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMuteAudioAndPauseMusic], a
+ ld [wMusicTempo + 1], a
+ ld [wSfxTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $a0
- ld hl, wc006
- call FillAudioRAM1
+ ld hl, wChannelCommandPointers
+ call .FillMem
ld a, $1
ld d, $18
- ld hl, wc0b6
- call FillAudioRAM1
- ld [wc0e8], a
- ld [wc0ea], a
+ ld hl, wChannelNoteDelayCounters
+ call .FillMem
+ ld [wMusicTempo], a
+ ld [wSfxTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
ret
; fills d bytes at hl with a
-FillAudioRAM1: ; 0x9a89
+.FillMem
ld b, d
.loop
ld [hli], a
@@ -1556,11 +1600,11 @@
jr nz, .loop
ret
-Audio1_9a8f: ; 0x9a8f
- ld a, [wc001]
+.playSoundCommon
+ ld a, [wSoundID]
ld l, a
ld e, a
- ld h, $0
+ ld h, 0
ld d, h
add hl, hl
add hl, de
@@ -1568,7 +1612,7 @@
add hl, de
ld e, l
ld d, h
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld a, [de] ; get channel number
ld b, a
rlca
@@ -1580,31 +1624,31 @@
ld b, c
inc b
inc de
- ld c, $0
-.asm_9ab1
+ ld c, 0
+.commandPointerLoop
cp c
- jr z, .asm_9ab9
+ jr z, .next
inc c
inc hl
inc hl
- jr .asm_9ab1
-.asm_9ab9
+ jr .commandPointerLoop
+.next
push hl
push bc
push af
- ld b, $0
+ ld b, 0
ld c, a
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
- ld a, [wc001]
+ ld a, [wSoundID]
ld [hl], a
pop af
- cp $3
- jr c, .asm_9ad2
- ld hl, wc02e
+ cp CH3
+ jr c, .skipSettingFlag
+ ld hl, wChannelFlags1
add hl, bc
- set 2, [hl]
-.asm_9ad2
+ set BIT_NOISE_OR_SFX, [hl]
+.skipSettingFlag
pop bc
pop hl
ld a, [de] ; get channel pointer
@@ -1619,52 +1663,53 @@
and a
ld a, [de]
inc de
- jr nz, .asm_9ab1
- ld a, [wc001]
- cp $14
+ jr nz, .commandPointerLoop
+ ld a, [wSoundID]
+ cp CRY_SFX_START
jr nc, .asm_9aeb
- jr .asm_9b15
+ jr .done
.asm_9aeb
- ld a, [wc001]
- cp $86
- jr z, .asm_9b15
- jr c, .asm_9af6
- jr .asm_9b15
-.asm_9af6
- ld hl, wc02a
+ ld a, [wSoundID]
+ cp CRY_SFX_END
+ jr z, .done
+ jr c, .cry
+ jr .done
+.cry
+ ld hl, wChannelSoundIDs + CH4
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
- ld hl, wc012 ; sfx noise channel pointer
- ld de, Noise1_endchannel
+ ld hl, wChannelCommandPointers + CH6 * 2 ; sfx wave channel pointer
+ ld de, Audio1_CryEndchannel
ld [hl], e
inc hl
ld [hl], d ; overwrite pointer to point to endchannel
- ld a, [wc005]
+ ld a, [wSavedVolume]
and a
- jr nz, .asm_9b15
- ld a, [$ff24]
- ld [wc005], a
+ jr nz, .done
+ ld a, [rNR50]
+ ld [wSavedVolume], a
ld a, $77
- ld [$ff24], a
-.asm_9b15
+ ld [rNR50], a ; full volume
+.done
ret
-Noise1_endchannel: ; 0x9b16
+Audio1_CryEndchannel: ; 0x9b16
endchannel
-Unknown_9b17: ; 0x9b17
- db $10, $15, $1A, $1F ; channels 0-3
- db $10, $15, $1A, $1F ; channels 4-7
+Audio1_HWChannelBaseAddresses: ; 0x9b17
+; the low bytes of each HW channel's base address
+ db HW_CH1_BASE, HW_CH2_BASE, HW_CH3_BASE, HW_CH4_BASE ; channels 0-3
+ db HW_CH1_BASE, HW_CH2_BASE, HW_CH3_BASE, HW_CH4_BASE ; channels 4-7
-Unknown_9b1f: ; 0x9b1f
- db $EE, $DD, $BB, $77 ; channels 0-3
- db $EE, $DD, $BB, $77 ; channels 4-7
+Audio1_HWChannelDisableMasks: ; 0x9b1f
+ db HW_CH1_DISABLE_MASK, HW_CH2_DISABLE_MASK, HW_CH3_DISABLE_MASK, HW_CH4_DISABLE_MASK ; channels 0-3
+ db HW_CH1_DISABLE_MASK, HW_CH2_DISABLE_MASK, HW_CH3_DISABLE_MASK, HW_CH4_DISABLE_MASK ; channels 4-7
-Unknown_9b27: ; 0x9b27
- db $11, $22, $44, $88 ; channels 0-3
- db $11, $22, $44, $88 ; channels 4-7
+Audio1_HWChannelEnableMasks: ; 0x9b27
+ db HW_CH1_ENABLE_MASK, HW_CH2_ENABLE_MASK, HW_CH3_ENABLE_MASK, HW_CH4_ENABLE_MASK ; channels 0-3
+ db HW_CH1_ENABLE_MASK, HW_CH2_ENABLE_MASK, HW_CH3_ENABLE_MASK, HW_CH4_ENABLE_MASK ; channels 4-7
Audio1_Pitches: ; 0x9b2f
dw $F82C ; C_
--- a/audio/engine_2.asm
+++ b/audio/engine_2.asm
@@ -4,7 +4,7 @@
ld c, CH0
.loop
ld b, $0
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
ld a, [hl]
and a
@@ -12,18 +12,18 @@
ld a, c
cp CH4
jr nc, .applyAffects ; if sfx channel
- ld a, [wc002]
+ ld a, [wMuteAudioAndPauseMusic]
and a
jr z, .applyAffects
bit 7, a
jr nz, .nextChannel
set 7, a
- ld [wc002], a
+ ld [wMuteAudioAndPauseMusic], a
xor a
- ld [$ff25], a
- ld [$ff1a], a
+ ld [rNR51], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
jr .nextChannel
.applyAffects
call Audio2_ApplyMusicAffects
@@ -36,7 +36,7 @@
; this routine checks flags for music effects currently applied
; to the channel and calls certain functions based on flags.
-; known flags for wc02e:
+; known flags for wChannelFlags1:
; 0: toggleperfectpitch has been used
; 1: call has been used
; 3: a toggle used only by this routine for vibrato
@@ -44,7 +44,7 @@
; 6: dutycycle flag
Audio2_ApplyMusicAffects: ; 218ae (8:58ae)
ld b, $0
- ld hl, wc0b6 ; delay until next note
+ ld hl, wChannelNoteDelayCounters ; delay until next note
add hl, bc
ld a, [hl]
cp $1 ; if the delay is 1, play next note
@@ -54,7 +54,7 @@
ld a, c
cp CH4
jr nc, .startChecks ; if a sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
@@ -61,7 +61,7 @@
jr z, .startChecks
ret
.startChecks
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 6, [hl] ; dutycycle
jr z, .checkForExecuteMusic
@@ -68,22 +68,22 @@
call Audio2_ApplyDutyCycle
.checkForExecuteMusic
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, .checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 2, [hl]
jr nz, .disablePitchBendVibrato
.checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 4, [hl] ; pitchbend
jr z, .checkVibratoDelay
jp Audio2_ApplyPitchBend
.checkVibratoDelay
- ld hl, wc04e ; vibrato delay
+ ld hl, wChannelVibratoDelayCounters ; vibrato delay
add hl, bc
ld a, [hl]
and a ; check if delay is over
@@ -92,7 +92,7 @@
.disablePitchBendVibrato
ret
.checkForVibrato
- ld hl, wc056 ; vibrato rate
+ ld hl, wChannelVibratoExtents ; vibrato rate
add hl, bc
ld a, [hl]
and a
@@ -100,7 +100,7 @@
ret ; no vibrato
.vibrato
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
ld a, [hl]
and $f
@@ -113,10 +113,10 @@
swap [hl]
or [hl]
ld [hl], a ; reset the vibrato value and start again
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld e, [hl] ; get note pitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 3, [hl] ; this is the only code that sets/resets bit three so
jr z, .unset ; it continuously alternates which path it takes
@@ -149,13 +149,13 @@
; like tempo changes, duty changes etc. and doesn't return
; until the first note is reached
Audio2_PlayNextNote: ; 21946 (8:5946)
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld a, [hl]
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 4, [hl]
res 5, [hl]
@@ -175,7 +175,7 @@
cp $ff ; is this command an endchannel?
jp nz, Audio2_callchannel ; no
ld b, $0 ; yes
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 1, [hl]
jr nz, .returnFromCall
@@ -185,22 +185,22 @@
jr .asm_219c0
.noiseOrSfxChannel
res 2, [hl]
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
res 0, [hl]
cp CH6
jr nz, .notSfxChannel3
ld a, $0
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
.notSfxChannel3
jr nz, .asm_219a3
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr z, .asm_219a3
xor a
- ld [wc003], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
jr .asm_219c0
.asm_219a3
jr .asm_219c9
@@ -210,10 +210,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl ; store current channel address
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -227,16 +227,16 @@
.asm_219c0
ld hl, Unknown_222de
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a
.asm_219c9
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $14
jr nc, .asm_219d2
jr .asm_219ef
.asm_219d2
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $86
jr z, .asm_219ef
jr c, .asm_219dd
@@ -248,12 +248,12 @@
call Audio2_21e6d
ret c
.asm_219e6
- ld a, [wc005]
- ld [$ff24], a
+ ld a, [wSavedVolume]
+ ld [rNR50], a
xor a
- ld [wc005], a
+ ld [wSavedVolume], a
.asm_219ef
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
ld [hl], b
ret
@@ -272,10 +272,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -290,7 +290,7 @@
inc hl
ld [hl], d ; overwrite current address with pointer
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 1, [hl] ; set the call flag
jp Audio2_endchannel
@@ -303,7 +303,7 @@
and a
jr z, .infiniteLoop
ld b, $0
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
add hl, bc
ld a, [hl]
cp e
@@ -326,7 +326,7 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
pop af
ld [hli], a
@@ -340,7 +340,7 @@
ld a, d ; yes
and $f
ld b, $0
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld [hl], a ; store low nibble as speed
ld a, c
@@ -353,10 +353,10 @@
jr z, .musicChannel3
cp CH6
jr nz, .notChannel3
- ld hl, wc0e7
+ ld hl, wSfxWaveInstrument
jr .sfxChannel3
.musicChannel3
- ld hl, wc0e6
+ ld hl, wMusicWaveInstrument
.sfxChannel3
ld a, d
and $f
@@ -371,7 +371,7 @@
; else, store volume (high nibble) and fade (low nibble)
.notChannel3
ld b, $0
- ld hl, wc0de
+ ld hl, wChannelVolumes
add hl, bc
ld [hl], d
.noiseChannel
@@ -382,11 +382,11 @@
cp $e8 ; is this command a toggleperfectpitch?
jr nz, Audio2_vibrato ; no
ld b, $0 ; yes
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
ld a, [hl]
xor $1
- ld [hl], a ; flip bit 0 of wc02e
+ ld [hl], a ; flip bit 0 of wChannelFlags1
jp Audio2_endchannel
Audio2_vibrato: ; 21ab6 (8:5ab6)
@@ -394,10 +394,10 @@
jr nz, Audio2_pitchbend ; no
call Audio2_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a ; store delay
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld [hl], a ; store delay
call Audio2_GetNextMusicByte
@@ -405,7 +405,7 @@
and $f0
swap a
ld b, $0
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
add hl, bc
srl a
ld e, a
@@ -416,7 +416,7 @@
ld a, d
and $f
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
swap a
or d
@@ -428,7 +428,7 @@
jr nz, Audio2_duty ; no
call Audio2_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
ld [hl], a ; store first param
call Audio2_GetNextMusicByte
@@ -440,14 +440,14 @@
and $f
call Audio2_22017
ld b, $0
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld [hl], d ; store unknown part of second param
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld [hl], e ; store unknown part of second param
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 4, [hl] ; set pitchbend flag
call Audio2_GetNextMusicByte
@@ -462,7 +462,7 @@
rrca
and $c0
ld b, $0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store duty
jp Audio2_endchannel
@@ -474,25 +474,25 @@
cp CH4
jr nc, .sfxChannel
call Audio2_GetNextMusicByte
- ld [wc0e8], a ; store first param
+ ld [wMusicTempo], a ; store first param
call Audio2_GetNextMusicByte
- ld [wc0e9], a ; store second param
+ ld [wMusicTempo + 1], a ; store second param
xor a
- ld [wc0ce], a ; clear RAM
- ld [wc0cf], a
- ld [wc0d0], a
- ld [wc0d1], a
+ ld [wChannelNoteDelayCountersFractionalPart], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 1], a
+ ld [wChannelNoteDelayCountersFractionalPart + 2], a
+ ld [wChannelNoteDelayCountersFractionalPart + 3], a
jr .musicChannelDone
.sfxChannel
call Audio2_GetNextMusicByte
- ld [wc0ea], a ; store first param
+ ld [wSfxTempo], a ; store first param
call Audio2_GetNextMusicByte
- ld [wc0eb], a ; store second param
+ ld [wSfxTempo + 1], a ; store second param
xor a
- ld [wc0d2], a ; clear RAM
- ld [wc0d3], a
- ld [wc0d4], a
- ld [wc0d5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 4], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 6], a
+ ld [wChannelNoteDelayCountersFractionalPart + 7], a
.musicChannelDone
jp Audio2_endchannel
@@ -500,7 +500,7 @@
cp $ee ; is this command a stereopanning?
jr nz, Audio2_unknownmusic0xef ; no
call Audio2_GetNextMusicByte ; yes
- ld [wc004], a ; store panning
+ ld [wStereoPanning], a ; store panning
jp Audio2_endchannel
; this appears to never be used
@@ -509,15 +509,15 @@
jr nz, Audio2_dutycycle ; no
call Audio2_GetNextMusicByte ; yes
push bc
- call Audio2_22035
+ call Audio2_PlaySound
pop bc
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .skip
- ld a, [wc02d]
- ld [wc003], a
+ ld a, [wChannelSoundIDs + CH7]
+ ld [wDisableChannelOutputWhenSfxEnds], a
xor a
- ld [wc02d], a
+ ld [wChannelSoundIDs + CH7], a
.skip
jp Audio2_endchannel
@@ -526,14 +526,14 @@
jr nz, Audio2_volume ; no
call Audio2_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, bc
ld [hl], a ; store full cycle
and $c0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store first duty
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 6, [hl] ; set dutycycle flag
jp Audio2_endchannel
@@ -542,7 +542,7 @@
cp $f0 ; is this command a volume?
jr nz, Audio2_executemusic ; no
call Audio2_GetNextMusicByte ; yes
- ld [$ff24], a ; store volume
+ ld [rNR50], a ; store volume
jp Audio2_endchannel
Audio2_executemusic: ; 21bd1 (8:5bd1)
@@ -549,7 +549,7 @@
cp $f8 ; is this command an executemusic?
jr nz, Audio2_octave ; no
ld b, $0 ; yes
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
set 0, [hl]
jp Audio2_endchannel
@@ -558,7 +558,7 @@
and $f0
cp $e0 ; is this command an octave?
jr nz, Audio2_unknownsfx0x20 ; no
- ld hl, wc0d6 ; yes
+ ld hl, wChannelOctaves ; yes
ld b, $0
add hl, bc
ld a, d
@@ -573,7 +573,7 @@
cp CH3 ; is this a noise or sfx channel?
jr c, Audio2_unknownsfx0x10 ; no
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio2_unknownsfx0x10 ; no
@@ -580,7 +580,7 @@
call Audio2_notelength
ld d, a
ld b, $0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
@@ -619,12 +619,12 @@
cp $10 ; is this command a unknownsfx0x10?
jr nz, Audio2_note ; no
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio2_note ; no
call Audio2_GetNextMusicByte ; yes
- ld [$ff10], a
+ ld [rNR10], a
jp Audio2_endchannel
Audio2_note: ; 21c5c (8:5c5c)
@@ -654,11 +654,11 @@
call Audio2_GetNextMusicByte ; get dnote instrument
asm_21c7e
ld d, a
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .asm_21c89
ld a, d
- call Audio2_22035
+ call Audio2_PlaySound
.asm_21c89
pop bc
pop de
@@ -671,7 +671,7 @@
ld b, $0
ld e, a ; store note length (in 16ths)
ld d, b
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld a, [hl]
ld l, b
@@ -679,9 +679,9 @@
ld a, c
cp CH4
jr nc, .sfxChannel
- ld a, [wc0e8]
+ ld a, [wMusicTempo]
ld d, a
- ld a, [wc0e9]
+ ld a, [wMusicTempo + 1]
ld e, a
jr .skip
.sfxChannel
@@ -690,31 +690,31 @@
cp CH7
jr z, .skip ; if noise channel
call Audio2_21e2f
- ld a, [wc0ea]
+ ld a, [wSfxTempo]
ld d, a
- ld a, [wc0eb]
+ ld a, [wSfxTempo + 1]
ld e, a
.skip
ld a, l
ld b, $0
- ld hl, wc0ce
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld l, [hl]
call Audio2_22006
ld e, l
ld d, h
- ld hl, wc0ce
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld [hl], e
ld a, d
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio2_notepitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 2, [hl]
jr z, Audio2_notepitch
@@ -729,7 +729,7 @@
ld a, c
cp CH4
jr nc, .sfxChannel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
@@ -745,9 +745,9 @@
ld b, $0
ld hl, Unknown_222de
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a
jr .done
.notSfxChannel3
ld b, $2
@@ -762,12 +762,12 @@
.notRest
swap a
ld b, $0
- ld hl, wc0d6
+ ld hl, wChannelOctaves
add hl, bc
ld b, [hl]
call Audio2_22017
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 4, [hl]
jr z, .asm_21d39
@@ -777,7 +777,7 @@
ld a, c
cp CH4
jr nc, .skip ; if sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
ld d, $0
ld e, a
add hl, de
@@ -790,7 +790,7 @@
ret
.skip
ld b, $0
- ld hl, wc0de
+ ld hl, wChannelVolumes
add hl, bc
ld d, [hl]
ld b, $2
@@ -800,7 +800,7 @@
call Audio2_21d79
pop de
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 0, [hl] ; has toggleperfectpitch been used?
jr z, .skip2
@@ -808,7 +808,7 @@
jr nc, .skip2
inc d
.skip2
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld [hl], e
call Audio2_21dcc
@@ -818,7 +818,7 @@
ld b, $0
ld hl, Unknown_222e6
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
or [hl]
ld d, a
ld a, c
@@ -826,18 +826,18 @@
jr z, .sfxNoiseChannel
cp CH4
jr nc, .skip ; if sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
jr nz, .skip
.sfxNoiseChannel
- ld a, [wc004]
+ ld a, [wStereoPanning]
ld hl, Unknown_222e6
add hl, bc
and [hl]
ld d, a
- ld a, [$ff25]
+ ld a, [rNR51]
ld hl, Unknown_222de
add hl, bc
and [hl]
@@ -845,12 +845,12 @@
ld d, a
.skip
ld a, d
- ld [$ff25], a
+ ld [rNR51], a
ret
Audio2_21daa: ; 21daa (8:5daa)
ld b, $0
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld d, [hl]
ld a, c
@@ -861,7 +861,7 @@
ld a, d
and $3f
ld d, a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
@@ -881,10 +881,10 @@
; fall through
.channel3
push de
- ld de, wc0e6
+ ld de, wMusicWaveInstrument
cp CH2
jr z, .musicChannel3
- ld de, wc0e7
+ ld de, wSfxWaveInstrument
.musicChannel3
ld a, [de]
add a
@@ -898,7 +898,7 @@
ld hl, $ff30
ld b, $f
ld a, $0
- ld [$ff1a], a
+ ld [rNR30], a
.loop
ld a, [de]
inc de
@@ -908,7 +908,7 @@
and a
jr nz, .loop
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
pop de
.notSfxChannel3
ld a, d
@@ -935,9 +935,9 @@
bit 7, a
jr z, .asm_21e2e
xor a
- ld [wc0f1], a
+ ld [wFrequencyModifier], a
ld a, $80
- ld [wc0f2], a
+ ld [wTempoModifier], a
.asm_21e2e
ret
@@ -948,20 +948,20 @@
jr nc, .asm_21e4c
.asm_21e39
ld d, $0
- ld a, [wc0f2]
+ ld a, [wTempoModifier]
add $80
jr nc, .asm_21e43
inc d
.asm_21e43
- ld [wc0eb], a
+ ld [wSfxTempo + 1], a
ld a, d
- ld [wc0ea], a
+ ld [wSfxTempo], a
jr .asm_21e55
.asm_21e4c
xor a
- ld [wc0eb], a
+ ld [wSfxTempo + 1], a
ld a, $1
- ld [wc0ea], a
+ ld [wSfxTempo], a
.asm_21e55
ret
@@ -971,7 +971,7 @@
call Audio2_21e9f
jr nc, .asm_21e6c
.asm_21e60
- ld a, [wc0f1]
+ ld a, [wFrequencyModifier]
add e
jr nc, .asm_21e67
inc d
@@ -987,7 +987,7 @@
Audio2_21e6d: ; 21e6d (8:5e6d)
call Audio2_21e8b
jr nc, .asm_21e88
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld e, c
ld d, $0
sla e
@@ -1008,7 +1008,7 @@
ret
Audio2_21e8b: ; 21e8b (8:5e8b)
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $14
jr nc, .asm_21e94
jr .asm_21e9a
@@ -1025,9 +1025,9 @@
ret
Audio2_21e9f: ; 21e9f (8:5e9f)
- ld a, [wc02d]
+ ld a, [wChannelSoundIDs + CH7]
ld b, a
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
or b
cp $9d
jr nc, .asm_21ead
@@ -1045,17 +1045,17 @@
ret
Audio2_ApplyPitchBend: ; 21eb8 (8:5eb8)
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 5, [hl]
jp nz, .asm_21eff
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld l, [hl]
ld h, b
@@ -1062,10 +1062,10 @@
add hl, de
ld d, h
ld e, l
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
push hl
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
pop hl
@@ -1077,13 +1077,13 @@
ld a, $0
adc d
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
cp d
jp c, .asm_21f45
jr nz, .asm_21f32
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
cp e
@@ -1090,13 +1090,13 @@
jp c, .asm_21f45
jr .asm_21f32
.asm_21eff
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld a, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld e, [hl]
sub e
@@ -1104,7 +1104,7 @@
ld a, d
sbc b
ld d, a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
add a
@@ -1115,22 +1115,22 @@
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, d
cp [hl]
jr c, .asm_21f45
jr nz, .asm_21f32
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
cp [hl]
jr c, .asm_21f45
.asm_21f32
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
ld b, $3
@@ -1140,7 +1140,7 @@
ld [hl], d
ret
.asm_21f45
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 4, [hl]
res 5, [hl]
@@ -1147,16 +1147,16 @@
ret
Audio2_21f4e: ; 21f4e (8:5f4e)
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld a, [hl]
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
sub [hl]
jr nc, .asm_21f66
@@ -1163,7 +1163,7 @@
ld a, $1
.asm_21f66
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
sub [hl]
@@ -1170,24 +1170,24 @@
ld e, a
ld a, d
sbc b
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
sub [hl]
jr c, .asm_21f82
ld d, a
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 5, [hl]
jr .asm_21fa5
.asm_21f82
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
sub e
@@ -1195,17 +1195,17 @@
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
sub d
ld d, a
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 5, [hl]
.asm_21fa5
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
.asm_21fa9
inc b
@@ -1224,13 +1224,13 @@
add [hl]
ld d, b
ld b, $0
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld [hl], d
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld [hl], a
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
ld [hl], a
ret
@@ -1237,7 +1237,7 @@
Audio2_ApplyDutyCycle: ; 21fcc (8:5fcc)
ld b, $0
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, bc
ld a, [hl]
rlca
@@ -1258,7 +1258,7 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld a, [hli]
ld e, a
@@ -1325,8 +1325,8 @@
ld d, a
ret
-Audio2_22035:: ; 22035 (8:6035)
- ld [wc001], a
+Audio2_PlaySound:: ; 22035 (8:6035)
+ ld [wSoundID], a
cp $ff
jp z, Audio2_221f3
cp $e9
@@ -1337,75 +1337,75 @@
jp nc, Audio2_2210d
.asm_2204c
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc0e9], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMusicTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $8
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
call FillAudioRAM2
- ld hl, wc006
+ ld hl, wChannelCommandPointers
call FillAudioRAM2
ld d, $4
- ld hl, wc026
+ ld hl, wChannelSoundIDs
call FillAudioRAM2
- ld hl, wc02e
+ ld hl, wChannelFlags1
call FillAudioRAM2
- ld hl, wc03e
+ ld hl, wChannelDuties
call FillAudioRAM2
- ld hl, wc046
+ ld hl, wChannelDutyCycles
call FillAudioRAM2
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
call FillAudioRAM2
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
call FillAudioRAM2
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
call FillAudioRAM2
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
call FillAudioRAM2
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
call FillAudioRAM2
- ld hl, wc036
+ ld hl, wChannelFlags2
call FillAudioRAM2
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
call FillAudioRAM2
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
call FillAudioRAM2
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
call FillAudioRAM2
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
call FillAudioRAM2
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
call FillAudioRAM2
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
call FillAudioRAM2
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
call FillAudioRAM2
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
call FillAudioRAM2
ld a, $1
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
call FillAudioRAM2
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
call FillAudioRAM2
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
call FillAudioRAM2
- ld [wc0e8], a
+ ld [wMusicTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
xor a
- ld [$ff24], a
+ ld [rNR50], a
ld a, $8
- ld [$ff10], a
+ ld [rNR10], a
ld a, $0
- ld [$ff25], a
+ ld [rNR51], a
xor a
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
jp Audio2_2224e
Audio2_2210d: ; 2210d (8:610d)
@@ -1418,9 +1418,9 @@
ld de, SFX_Headers_2
add hl, de
ld a, h
- ld [wc0ec], a
+ ld [wSfxHeaderPointer], a
ld a, l
- ld [wc0ed], a
+ ld [wSfxHeaderPointer + 1], a
ld a, [hl]
and $c0
rlca
@@ -1433,9 +1433,9 @@
add c
ld c, a
ld b, $0
- ld a, [wc0ec]
+ ld a, [wSfxHeaderPointer]
ld h, a
- ld a, [wc0ed]
+ ld a, [wSfxHeaderPointer + 1]
ld l, a
add hl, bc
ld c, d
@@ -1443,7 +1443,7 @@
and $f
ld e, a
ld d, $0
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, de
ld a, [hl]
and a
@@ -1451,7 +1451,7 @@
ld a, e
cp $7
jr nz, .asm_22159
- ld a, [wc001]
+ ld a, [wSoundID]
cp $14
jr nc, .asm_22152
ret
@@ -1461,7 +1461,7 @@
jr z, .asm_22162
jr c, .asm_22162
.asm_22159
- ld a, [wc001]
+ ld a, [wSoundID]
cp [hl]
jr z, .asm_22162
jr c, .asm_22162
@@ -1474,77 +1474,77 @@
add hl, hl
ld d, h
ld e, l
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld [hli], a
ld [hl], a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld [hli], a
ld [hl], a
pop de
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, de
ld [hl], a
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, de
ld [hl], a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, de
ld [hl], a
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, de
ld [hl], a
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, de
ld [hl], a
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
add hl, de
ld [hl], a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, de
ld [hl], a
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, de
ld [hl], a
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, de
ld [hl], a
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, de
ld [hl], a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, de
ld [hl], a
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, de
ld [hl], a
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, de
ld [hl], a
ld a, $1
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
add hl, de
ld [hl], a
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, de
ld [hl], a
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, de
ld [hl], a
ld a, e
@@ -1551,7 +1551,7 @@
cp $4
jr nz, .asm_221ea
ld a, $8
- ld [$ff10], a
+ ld [rNR10], a
.asm_221ea
ld a, c
and a
@@ -1561,41 +1561,41 @@
Audio2_221f3: ; 221f3 (8:61f3)
ld a, $80
- ld [$ff26], a
- ld [$ff1a], a
+ ld [rNR52], a
+ ld [rNR30], a
xor a
- ld [$ff25], a
- ld [$ff1c], a
+ ld [rNR51], a
+ ld [rNR32], a
ld a, $8
- ld [$ff10], a
- ld [$ff12], a
- ld [$ff17], a
- ld [$ff21], a
+ ld [rNR10], a
+ ld [rNR12], a
+ ld [rNR22], a
+ ld [rNR42], a
ld a, $40
- ld [$ff14], a
- ld [$ff19], a
- ld [$ff23], a
+ ld [rNR14], a
+ ld [rNR24], a
+ ld [rNR44], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc002], a
- ld [wc0e9], a
- ld [wc0eb], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMuteAudioAndPauseMusic], a
+ ld [wMusicTempo + 1], a
+ ld [wSfxTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $a0
- ld hl, wc006
+ ld hl, wChannelCommandPointers
call FillAudioRAM2
ld a, $1
ld d, $18
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
call FillAudioRAM2
- ld [wc0e8], a
- ld [wc0ea], a
+ ld [wMusicTempo], a
+ ld [wSfxTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
ret
; fills d bytes at hl with a
@@ -1608,7 +1608,7 @@
ret
Audio2_2224e: ; 2224e (8:624e)
- ld a, [wc001]
+ ld a, [wSoundID]
ld l, a
ld e, a
ld h, $0
@@ -1619,7 +1619,7 @@
add hl, de
ld e, l
ld d, h
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld a, [de] ; get channel number
ld b, a
rlca
@@ -1645,14 +1645,14 @@
push af
ld b, $0
ld c, a
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
- ld a, [wc001]
+ ld a, [wSoundID]
ld [hl], a
pop af
cp $3
jr c, .asm_22291
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 2, [hl]
.asm_22291
@@ -1671,34 +1671,34 @@
ld a, [de]
inc de
jr nz, .asm_22270
- ld a, [wc001]
+ ld a, [wSoundID]
cp $14
jr nc, .asm_222aa
jr .asm_222d4
.asm_222aa
- ld a, [wc001]
+ ld a, [wSoundID]
cp $86
jr z, .asm_222d4
jr c, .asm_222b5
jr .asm_222d4
.asm_222b5
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
- ld hl, wc012 ; sfx noise channel pointer
+ ld hl, wChannelCommandPointers + CH6 * 2 ; sfx noise channel pointer
ld de, Noise2_endchannel
ld [hl], e
inc hl
ld [hl], d ; overwrite pointer to point to endchannel
- ld a, [wc005]
+ ld a, [wSavedVolume]
and a
jr nz, .asm_222d4
- ld a, [$ff24]
- ld [wc005], a
+ ld a, [rNR50]
+ ld [wSavedVolume], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
.asm_222d4
ret
--- a/audio/engine_3.asm
+++ b/audio/engine_3.asm
@@ -4,7 +4,7 @@
ld c, CH0
.loop
ld b, $0
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
ld a, [hl]
and a
@@ -12,18 +12,18 @@
ld a, c
cp CH4
jr nc, .applyAffects ; if sfx channel
- ld a, [wc002]
+ ld a, [wMuteAudioAndPauseMusic]
and a
jr z, .applyAffects
bit 7, a
jr nz, .nextChannel
set 7, a
- ld [wc002], a
+ ld [wMuteAudioAndPauseMusic], a
xor a
- ld [$ff25], a
- ld [$ff1a], a
+ ld [rNR51], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
jr .nextChannel
.applyAffects
call Audio3_ApplyMusicAffects
@@ -36,7 +36,7 @@
; this routine checks flags for music effects currently applied
; to the channel and calls certain functions based on flags.
-; known flags for wc02e:
+; known flags for wChannelFlags1:
; 0: toggleperfectpitch has been used
; 1: call has been used
; 3: a toggle used only by this routine for vibrato
@@ -44,7 +44,7 @@
; 6: dutycycle flag
Audio3_ApplyMusicAffects: ; 7d1ac (1f:51ac)
ld b, $0
- ld hl, wc0b6 ; delay until next note
+ ld hl, wChannelNoteDelayCounters ; delay until next note
add hl, bc
ld a, [hl]
cp $1 ; if delay is 1, play next note
@@ -54,7 +54,7 @@
ld a, c
cp CH4
jr nc, .startChecks ; if a sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
@@ -61,7 +61,7 @@
jr z, .startChecks
ret
.startChecks
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 6, [hl] ; dutycycle
jr z, .checkForExecuteMusic
@@ -68,22 +68,22 @@
call Audio3_ApplyDutyCycle
.checkForExecuteMusic
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, .checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 2, [hl]
jr nz, .disablePitchBendVibrato
.checkForPitchBend
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 4, [hl] ; pitchbend
jr z, .checkVibratoDelay
jp Audio3_ApplyPitchBend
.checkVibratoDelay
- ld hl, wc04e ; vibrato delay
+ ld hl, wChannelVibratoDelayCounters ; vibrato delay
add hl, bc
ld a, [hl]
and a ; check if delay is over
@@ -92,7 +92,7 @@
.disablePitchBendVibrato
ret
.checkForVibrato
- ld hl, wc056 ; vibrato rate
+ ld hl, wChannelVibratoExtents ; vibrato rate
add hl, bc
ld a, [hl]
and a
@@ -100,7 +100,7 @@
ret ; no vibrato
.vibrato
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
ld a, [hl]
and $f
@@ -113,10 +113,10 @@
swap [hl]
or [hl]
ld [hl], a ; reset the vibrato value and start again
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld e, [hl] ; get note pitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 3, [hl] ; this is the only code that sets/resets bit three so
jr z, .unset ; it continuously alternates which path it takes
@@ -149,13 +149,13 @@
; like tempo changes, duty changes etc. and doesn't return
; until the first note is reached
Audio3_PlayNextNote: ; 7d244 (1f:5244)
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld a, [hl]
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 4, [hl]
res 5, [hl]
@@ -168,7 +168,7 @@
cp $ff ; is this command an endchannel?
jp nz, Audio3_callchannel ; no
ld b, $0 ; yes
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 1, [hl]
jr nz, .returnFromCall
@@ -178,22 +178,22 @@
jr .asm_7d2b3
.noiseOrSfxChannel
res 2, [hl]
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
res 0, [hl]
cp CH6
jr nz, .notSfxChannel3
ld a, $0
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
.notSfxChannel3
jr nz, .asm_7d296
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr z, .asm_7d296
xor a
- ld [wc003], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
jr .asm_7d2b3
.asm_7d296
jr .asm_7d2bc
@@ -203,10 +203,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl ; store current channel address
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -220,16 +220,16 @@
.asm_7d2b3
ld hl, Unknown_7db93
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a
.asm_7d2bc
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $14
jr nc, .asm_7d2c5
jr .asm_7d2e2
.asm_7d2c5
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $86
jr z, .asm_7d2e2
jr c, .asm_7d2d0
@@ -241,12 +241,12 @@
call Audio3_7d73b
ret c
.asm_7d2d9
- ld a, [wc005]
- ld [$ff24], a
+ ld a, [wSavedVolume]
+ ld [rNR50], a
xor a
- ld [wc005], a
+ ld [wSavedVolume], a
.asm_7d2e2
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
ld [hl], b
ret
@@ -265,10 +265,10 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
push hl
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld e, l
ld d, h
@@ -283,7 +283,7 @@
inc hl
ld [hl], d ; overwrite current address with pointer
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 1, [hl] ; set the call flag
jp Audio3_endchannel
@@ -296,7 +296,7 @@
and a
jr z, .infiniteLoop
ld b, $0
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
add hl, bc
ld a, [hl]
cp e
@@ -319,7 +319,7 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
pop af
ld [hli], a
@@ -333,7 +333,7 @@
ld a, d ; yes
and $f
ld b, $0
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld [hl], a ; store low nibble as speed
ld a, c
@@ -346,10 +346,10 @@
jr z, .musicChannel3
cp CH6
jr nz, .notChannel3
- ld hl, wc0e7
+ ld hl, wSfxWaveInstrument
jr .sfxChannel3
.musicChannel3
- ld hl, wc0e6
+ ld hl, wMusicWaveInstrument
.sfxChannel3
ld a, d
and $f
@@ -364,7 +364,7 @@
; else, store volume (high nibble) and fade (low nibble)
.notChannel3
ld b, $0
- ld hl, wc0de
+ ld hl, wChannelVolumes
add hl, bc
ld [hl], d
.noiseChannel
@@ -375,11 +375,11 @@
cp $e8 ; is this command a toggleperfectpitch?
jr nz, Audio3_vibrato ; no
ld b, $0 ; yes
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
ld a, [hl]
xor $1
- ld [hl], a ; flip bit 0 of wc02e
+ ld [hl], a ; flip bit 0 of wChannelFlags1
jp Audio3_endchannel
Audio3_vibrato: ; 7d3a9 (1f:53a9)
@@ -387,10 +387,10 @@
jr nz, Audio3_pitchbend ; no
call Audio3_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, bc
ld [hl], a ; store delay
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, bc
ld [hl], a ; store delay
call Audio3_GetNextMusicByte
@@ -398,7 +398,7 @@
and $f0
swap a
ld b, $0
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
add hl, bc
srl a
ld e, a
@@ -409,7 +409,7 @@
ld a, d
and $f
ld d, a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, bc
swap a
or d
@@ -421,7 +421,7 @@
jr nz, Audio3_duty ; no
call Audio3_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
ld [hl], a ; store first param
call Audio3_GetNextMusicByte
@@ -433,14 +433,14 @@
and $f
call Audio3_7d8cc
ld b, $0
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld [hl], d ; store unknown part of second param
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld [hl], e ; store unknown part of second param
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 4, [hl] ; set pitchbend flag
call Audio3_GetNextMusicByte
@@ -455,7 +455,7 @@
rrca
and $c0
ld b, $0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store duty
jp Audio3_endchannel
@@ -467,25 +467,25 @@
cp CH4
jr nc, .sfxChannel
call Audio3_GetNextMusicByte
- ld [wc0e8], a ; store first param
+ ld [wMusicTempo], a ; store first param
call Audio3_GetNextMusicByte
- ld [wc0e9], a ; store second param
+ ld [wMusicTempo + 1], a ; store second param
xor a
- ld [wc0ce], a ; clear RAM
- ld [wc0cf], a
- ld [wc0d0], a
- ld [wc0d1], a
+ ld [wChannelNoteDelayCountersFractionalPart], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 1], a
+ ld [wChannelNoteDelayCountersFractionalPart + 2], a
+ ld [wChannelNoteDelayCountersFractionalPart + 3], a
jr .musicChannelDone
.sfxChannel
call Audio3_GetNextMusicByte
- ld [wc0ea], a ; store first param
+ ld [wSfxTempo], a ; store first param
call Audio3_GetNextMusicByte
- ld [wc0eb], a ; store second param
+ ld [wSfxTempo + 1], a ; store second param
xor a
- ld [wc0d2], a ; clear RAM
- ld [wc0d3], a
- ld [wc0d4], a
- ld [wc0d5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 4], a ; clear RAM
+ ld [wChannelNoteDelayCountersFractionalPart + 5], a
+ ld [wChannelNoteDelayCountersFractionalPart + 6], a
+ ld [wChannelNoteDelayCountersFractionalPart + 7], a
.musicChannelDone
jp Audio3_endchannel
@@ -493,7 +493,7 @@
cp $ee ; is this command a stereopanning?
jr nz, Audio3_unknownmusic0xef ; no
call Audio3_GetNextMusicByte ; yes
- ld [wc004], a ; store panning
+ ld [wStereoPanning], a ; store panning
jp Audio3_endchannel
; this appears to never be used
@@ -502,15 +502,15 @@
jr nz, Audio3_dutycycle ; no
call Audio3_GetNextMusicByte ; yes
push bc
- call Audio3_7d8ea
+ call Audio3_PlaySound
pop bc
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .skip
- ld a, [wc02d]
- ld [wc003], a
+ ld a, [wChannelSoundIDs + CH7]
+ ld [wDisableChannelOutputWhenSfxEnds], a
xor a
- ld [wc02d], a
+ ld [wChannelSoundIDs + CH7], a
.skip
jp Audio3_endchannel
@@ -519,14 +519,14 @@
jr nz, Audio3_volume ; no
call Audio3_GetNextMusicByte ; yes
ld b, $0
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, bc
ld [hl], a ; store full cycle
and $c0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld [hl], a ; store first duty
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 6, [hl] ; set duty flag
jp Audio3_endchannel
@@ -535,7 +535,7 @@
cp $f0 ; is this command a volume?
jr nz, Audio3_executemusic ; no
call Audio3_GetNextMusicByte ; yes
- ld [$ff24], a ; store volume
+ ld [rNR50], a ; store volume
jp Audio3_endchannel
Audio3_executemusic: ; 7d4c4 (1f:54c4)
@@ -542,7 +542,7 @@
cp $f8 ; is this command an executemusic?
jr nz, Audio3_octave ; no
ld b, $0 ; yes
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
set 0, [hl]
jp Audio3_endchannel
@@ -551,7 +551,7 @@
and $f0
cp $e0 ; is this command an octave?
jr nz, Audio3_unknownsfx0x20 ; no
- ld hl, wc0d6 ; yes
+ ld hl, wChannelOctaves ; yes
ld b, $0
add hl, bc
ld a, d
@@ -566,7 +566,7 @@
cp CH3 ; is this a noise or sfx channel?
jr c, Audio3_unknownsfx0x10 ; no
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio3_unknownsfx0x10 ; no
@@ -573,7 +573,7 @@
call Audio3_notelength ; yes
ld d, a
ld b, $0
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
@@ -612,12 +612,12 @@
cp $10 ; is this command an unknownsfx0x10?
jr nz, Audio3_note ; no
ld b, $0
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio3_note ; no
call Audio3_GetNextMusicByte ; yes
- ld [$ff10], a
+ ld [rNR10], a
jp Audio3_endchannel
Audio3_note: ; 7d54f (1f:554f)
@@ -647,11 +647,11 @@
call Audio3_GetNextMusicByte ; get dnote instrument
asm_7d571
ld d, a
- ld a, [wc003]
+ ld a, [wDisableChannelOutputWhenSfxEnds]
and a
jr nz, .asm_7d57c
ld a, d
- call Audio3_7d8ea
+ call Audio3_PlaySound
.asm_7d57c
pop bc
pop de
@@ -664,7 +664,7 @@
ld b, $0
ld e, a ; store note length (in 16ths)
ld d, b
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, bc
ld a, [hl]
ld l, b
@@ -672,9 +672,9 @@
ld a, c
cp CH4
jr nc, .sfxChannel
- ld a, [wc0e8]
+ ld a, [wMusicTempo]
ld d, a
- ld a, [wc0e9]
+ ld a, [wMusicTempo + 1]
ld e, a
jr .skip
.sfxChannel
@@ -683,31 +683,31 @@
cp CH7
jr z, .skip ; if noise channel
call Audio3_7d707
- ld a, [wc0ea]
+ ld a, [wSfxTempo]
ld d, a
- ld a, [wc0eb]
+ ld a, [wSfxTempo + 1]
ld e, a
.skip
ld a, l
ld b, $0
- ld hl, wc0ce
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld l, [hl]
call Audio3_7d8bb
ld e, l
ld d, h
- ld hl, wc0ce
+ ld hl, wChannelNoteDelayCountersFractionalPart
add hl, bc
ld [hl], e
ld a, d
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, bc
bit 0, [hl]
jr nz, Audio3_notepitch
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 2, [hl]
jr z, Audio3_notepitch
@@ -722,7 +722,7 @@
ld a, c
cp CH4
jr nc, .sfxChannel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
@@ -738,9 +738,9 @@
ld b, $0
ld hl, Unknown_7db93
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
and [hl]
- ld [$ff25], a
+ ld [rNR51], a
jr .quit
.notSfxChannel3
ld b, $2
@@ -755,12 +755,12 @@
.notRest
swap a
ld b, $0
- ld hl, wc0d6
+ ld hl, wChannelOctaves
add hl, bc
ld b, [hl]
call Audio3_7d8cc
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 4, [hl]
jr z, .asm_7d62c
@@ -770,7 +770,7 @@
ld a, c
cp CH4
jr nc, .skip ; if sfx Channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
ld d, $0
ld e, a
add hl, de
@@ -783,7 +783,7 @@
ret
.skip
ld b, $0
- ld hl, wc0de
+ ld hl, wChannelVolumes
add hl, bc
ld d, [hl]
ld b, $2
@@ -793,7 +793,7 @@
call Audio3_7d66c
pop de
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 0, [hl] ; has toggleperfectpitch been used?
jr z, .skip2
@@ -801,7 +801,7 @@
jr nc, .skip2
inc d
.skip2
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, bc
ld [hl], e
call Audio3_7d6bf
@@ -811,7 +811,7 @@
ld b, $0
ld hl, Unknown_7db9b
add hl, bc
- ld a, [$ff25]
+ ld a, [rNR51]
or [hl]
ld d, a
ld a, c
@@ -819,18 +819,18 @@
jr z, .sfxNoiseChannel
cp CH4
jr nc, .skip ; if sfx channel
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
add hl, bc
ld a, [hl]
and a
jr nz, .skip
.sfxNoiseChannel
- ld a, [wc004]
+ ld a, [wStereoPanning]
ld hl, Unknown_7db9b
add hl, bc
and [hl]
ld d, a
- ld a, [$ff25]
+ ld a, [rNR51]
ld hl, Unknown_7db93
add hl, bc
and [hl]
@@ -838,12 +838,12 @@
ld d, a
.skip
ld a, d
- ld [$ff25], a
+ ld [rNR51], a
ret
Audio3_7d69d: ; 7d69d (1f:569d)
ld b, $0
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld d, [hl]
ld a, c
@@ -854,7 +854,7 @@
ld a, d
and $3f
ld d, a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, bc
ld a, [hl]
or d
@@ -874,10 +874,10 @@
; fall through
.channel3
push de
- ld de, wc0e6
+ ld de, wMusicWaveInstrument
cp CH2
jr z, .musicChannel3
- ld de, wc0e7
+ ld de, wSfxWaveInstrument
.musicChannel3
ld a, [de]
add a
@@ -891,7 +891,7 @@
ld hl, $ff30
ld b, $f
ld a, $0
- ld [$ff1a], a
+ ld [rNR30], a
.loop
ld a, [de]
inc de
@@ -901,7 +901,7 @@
and a
jr nz, .loop
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
pop de
.notSfxChannel3
ld a, d
@@ -920,20 +920,20 @@
call Audio3_7d759
jr nc, .asm_7d71f
ld d, $0
- ld a, [wc0f2]
+ ld a, [wTempoModifier]
add $80
jr nc, .asm_7d716
inc d
.asm_7d716
- ld [wc0eb], a
+ ld [wSfxTempo + 1], a
ld a, d
- ld [wc0ea], a
+ ld [wSfxTempo], a
jr .asm_7d728
.asm_7d71f
xor a
- ld [wc0eb], a
+ ld [wSfxTempo + 1], a
ld a, $1
- ld [wc0ea], a
+ ld [wSfxTempo], a
.asm_7d728
ret
@@ -940,7 +940,7 @@
Audio3_7d729: ; 7d729 (1f:5729)
call Audio3_7d759
jr nc, .asm_7d73a
- ld a, [wc0f1]
+ ld a, [wFrequencyModifier]
add e
jr nc, .asm_7d735
inc d
@@ -956,7 +956,7 @@
Audio3_7d73b: ; 7d73b (1f:573b)
call Audio3_7d759
jr nc, .asm_7d756
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld e, c
ld d, $0
sla e
@@ -977,7 +977,7 @@
ret
Audio3_7d759: ; 7d759 (1f:5759)
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $14
jr nc, .asm_7d762
jr .asm_7d768
@@ -994,17 +994,17 @@
ret
Audio3_ApplyPitchBend: ; 7d76d (1f:576d)
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
bit 5, [hl]
jp nz, .asm_7d7b4
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld l, [hl]
ld h, b
@@ -1011,10 +1011,10 @@
add hl, de
ld d, h
ld e, l
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
push hl
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
pop hl
@@ -1026,13 +1026,13 @@
ld a, $0
adc d
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
cp d
jp c, .asm_7d7fa
jr nz, .asm_7d7e7
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
cp e
@@ -1039,13 +1039,13 @@
jp c, .asm_7d7fa
jr .asm_7d7e7
.asm_7d7b4
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld a, [hl]
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld e, [hl]
sub e
@@ -1053,7 +1053,7 @@
ld a, d
sbc b
ld d, a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld a, [hl]
add a
@@ -1064,22 +1064,22 @@
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, d
cp [hl]
jr c, .asm_7d7fa
jr nz, .asm_7d7e7
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
cp [hl]
jr c, .asm_7d7fa
.asm_7d7e7
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
ld b, $3
@@ -1089,7 +1089,7 @@
ld [hl], d
ret
.asm_7d7fa
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 4, [hl]
res 5, [hl]
@@ -1096,16 +1096,16 @@
ret
Audio3_7d803: ; 7d803 (1f:5803)
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld [hl], d
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld [hl], e
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, bc
ld a, [hl]
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
sub [hl]
jr nc, .asm_7d81b
@@ -1112,7 +1112,7 @@
ld a, $1
.asm_7d81b
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, e
sub [hl]
@@ -1119,24 +1119,24 @@
ld e, a
ld a, d
sbc b
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
sub [hl]
jr c, .asm_7d837
ld d, a
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 5, [hl]
jr .asm_7d85a
.asm_7d837
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, bc
ld d, [hl]
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, bc
ld e, [hl]
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, bc
ld a, [hl]
sub e
@@ -1144,17 +1144,17 @@
ld a, d
sbc b
ld d, a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, bc
ld a, [hl]
sub d
ld d, a
ld b, $0
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
res 5, [hl]
.asm_7d85a
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, bc
.asm_7d85e
inc b
@@ -1173,13 +1173,13 @@
add [hl]
ld d, b
ld b, $0
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, bc
ld [hl], d
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, bc
ld [hl], a
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, bc
ld [hl], a
ret
@@ -1186,7 +1186,7 @@
Audio3_ApplyDutyCycle: ; 7d881 (1f:5881)
ld b, $0
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, bc
ld a, [hl]
rlca
@@ -1207,7 +1207,7 @@
ld a, c
add a
ld e, a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld a, [hli]
ld e, a
@@ -1274,8 +1274,8 @@
ld d, a
ret
-Audio3_7d8ea:: ; 7d8ea (1f:58ea)
- ld [wc001], a
+Audio3_PlaySound:: ; 7d8ea (1f:58ea)
+ ld [wSoundID], a
cp $ff
jp z, Audio3_7daa8
cp $c2
@@ -1286,75 +1286,75 @@
jp nc, Audio3_7d9c2
.asm_7d901
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc0e9], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMusicTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $8
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
call FillAudioRAM3
- ld hl, wc006
+ ld hl, wChannelCommandPointers
call FillAudioRAM3
ld d, $4
- ld hl, wc026
+ ld hl, wChannelSoundIDs
call FillAudioRAM3
- ld hl, wc02e
+ ld hl, wChannelFlags1
call FillAudioRAM3
- ld hl, wc03e
+ ld hl, wChannelDuties
call FillAudioRAM3
- ld hl, wc046
+ ld hl, wChannelDutyCycles
call FillAudioRAM3
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
call FillAudioRAM3
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
call FillAudioRAM3
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
call FillAudioRAM3
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
call FillAudioRAM3
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
call FillAudioRAM3
- ld hl, wc036
+ ld hl, wChannelFlags2
call FillAudioRAM3
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
call FillAudioRAM3
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
call FillAudioRAM3
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
call FillAudioRAM3
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
call FillAudioRAM3
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
call FillAudioRAM3
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
call FillAudioRAM3
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
call FillAudioRAM3
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
call FillAudioRAM3
ld a, $1
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
call FillAudioRAM3
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
call FillAudioRAM3
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
call FillAudioRAM3
- ld [wc0e8], a
+ ld [wMusicTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
xor a
- ld [$ff24], a
+ ld [rNR50], a
ld a, $8
- ld [$ff10], a
+ ld [rNR10], a
ld a, $0
- ld [$ff25], a
+ ld [rNR51], a
xor a
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $80
- ld [$ff1a], a
+ ld [rNR30], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
jp Audio3_7db03
Audio3_7d9c2: ; 7d9c2 (1f:59c2)
@@ -1367,9 +1367,9 @@
ld de, SFX_Headers_3
add hl, de
ld a, h
- ld [wc0ec], a
+ ld [wSfxHeaderPointer], a
ld a, l
- ld [wc0ed], a
+ ld [wSfxHeaderPointer + 1], a
ld a, [hl]
and $c0
rlca
@@ -1382,9 +1382,9 @@
add c
ld c, a
ld b, $0
- ld a, [wc0ec]
+ ld a, [wSfxHeaderPointer]
ld h, a
- ld a, [wc0ed]
+ ld a, [wSfxHeaderPointer + 1]
ld l, a
add hl, bc
ld c, d
@@ -1392,7 +1392,7 @@
and $f
ld e, a
ld d, $0
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, de
ld a, [hl]
and a
@@ -1400,7 +1400,7 @@
ld a, e
cp $7
jr nz, .asm_7da0e
- ld a, [wc001]
+ ld a, [wSoundID]
cp $14
jr nc, .asm_7da07
ret
@@ -1410,7 +1410,7 @@
jr z, .asm_7da17
jr c, .asm_7da17
.asm_7da0e
- ld a, [wc001]
+ ld a, [wSoundID]
cp [hl]
jr z, .asm_7da17
jr c, .asm_7da17
@@ -1423,77 +1423,77 @@
add hl, hl
ld d, h
ld e, l
- ld hl, wc016
+ ld hl, wChannelReturnAddresses
add hl, de
ld [hli], a
ld [hl], a
- ld hl, wc006
+ ld hl, wChannelCommandPointers
add hl, de
ld [hli], a
ld [hl], a
pop de
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, de
ld [hl], a
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, de
ld [hl], a
- ld hl, wc03e
+ ld hl, wChannelDuties
add hl, de
ld [hl], a
- ld hl, wc046
+ ld hl, wChannelDutyCycles
add hl, de
ld [hl], a
- ld hl, wc04e
+ ld hl, wChannelVibratoDelayCounters
add hl, de
ld [hl], a
- ld hl, wc056
+ ld hl, wChannelVibratoExtents
add hl, de
ld [hl], a
- ld hl, wc05e
+ ld hl, wChannelVibratoRates
add hl, de
ld [hl], a
- ld hl, wc066
+ ld hl, wChannelFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc06e
+ ld hl, wChannelVibratoDelayCounterReloadValues
add hl, de
ld [hl], a
- ld hl, wc076
+ ld hl, wChannelPitchBendLengthModifiers
add hl, de
ld [hl], a
- ld hl, wc07e
+ ld hl, wChannelPitchBendFrequencySteps
add hl, de
ld [hl], a
- ld hl, wc086
+ ld hl, wChannelPitchBendFrequencyStepsFractionalPart
add hl, de
ld [hl], a
- ld hl, wc08e
+ ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
add hl, de
ld [hl], a
- ld hl, wc096
+ ld hl, wChannelPitchBendCurrentFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc09e
+ ld hl, wChannelPitchBendCurrentFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc0a6
+ ld hl, wChannelPitchBendTargetFrequencyHighBytes
add hl, de
ld [hl], a
- ld hl, wc0ae
+ ld hl, wChannelPitchBendTargetFrequencyLowBytes
add hl, de
ld [hl], a
- ld hl, wc036
+ ld hl, wChannelFlags2
add hl, de
ld [hl], a
ld a, $1
- ld hl, wc0be
+ ld hl, wChannelLoopCounters
add hl, de
ld [hl], a
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
add hl, de
ld [hl], a
- ld hl, wc0c6
+ ld hl, wChannelNoteSpeeds
add hl, de
ld [hl], a
ld a, e
@@ -1500,7 +1500,7 @@
cp $4
jr nz, .asm_7da9f
ld a, $8
- ld [$ff10], a
+ ld [rNR10], a
.asm_7da9f
ld a, c
and a
@@ -1510,41 +1510,41 @@
Audio3_7daa8: ; 7daa8 (1f:5aa8)
ld a, $80
- ld [$ff26], a
- ld [$ff1a], a
+ ld [rNR52], a
+ ld [rNR30], a
xor a
- ld [$ff25], a
- ld [$ff1c], a
+ ld [rNR51], a
+ ld [rNR32], a
ld a, $8
- ld [$ff10], a
- ld [$ff12], a
- ld [$ff17], a
- ld [$ff21], a
+ ld [rNR10], a
+ ld [rNR12], a
+ ld [rNR22], a
+ ld [rNR42], a
ld a, $40
- ld [$ff14], a
- ld [$ff19], a
- ld [$ff23], a
+ ld [rNR14], a
+ ld [rNR24], a
+ ld [rNR44], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
xor a
- ld [wc000], a
- ld [wc003], a
- ld [wc002], a
- ld [wc0e9], a
- ld [wc0eb], a
- ld [wc0e6], a
- ld [wc0e7], a
+ ld [wUnusedC000], a
+ ld [wDisableChannelOutputWhenSfxEnds], a
+ ld [wMuteAudioAndPauseMusic], a
+ ld [wMusicTempo + 1], a
+ ld [wSfxTempo + 1], a
+ ld [wMusicWaveInstrument], a
+ ld [wSfxWaveInstrument], a
ld d, $a0
- ld hl, wc006
+ ld hl, wChannelCommandPointers
call FillAudioRAM3
ld a, $1
ld d, $18
- ld hl, wc0b6
+ ld hl, wChannelNoteDelayCounters
call FillAudioRAM3
- ld [wc0e8], a
- ld [wc0ea], a
+ ld [wMusicTempo], a
+ ld [wSfxTempo], a
ld a, $ff
- ld [wc004], a
+ ld [wStereoPanning], a
ret
; fills d bytes at hl with a
@@ -1557,7 +1557,7 @@
ret
Audio3_7db03: ; 7db03 (1f:5b03)
- ld a, [wc001]
+ ld a, [wSoundID]
ld l, a
ld e, a
ld h, $0
@@ -1568,7 +1568,7 @@
add hl, de
ld e, l
ld d, h
- ld hl, wc006
+ ld hl, wChannelCommandPointers
ld a, [de] ; get channel number
ld b, a
rlca
@@ -1594,14 +1594,14 @@
push af
ld b, $0
ld c, a
- ld hl, wc026
+ ld hl, wChannelSoundIDs
add hl, bc
- ld a, [wc001]
+ ld a, [wSoundID]
ld [hl], a
pop af
cp $3
jr c, .asm_7db46
- ld hl, wc02e
+ ld hl, wChannelFlags1
add hl, bc
set 2, [hl]
.asm_7db46
@@ -1620,34 +1620,34 @@
ld a, [de]
inc de
jr nz, .asm_7db25
- ld a, [wc001]
+ ld a, [wSoundID]
cp $14
jr nc, .asm_7db5f
jr .asm_7db89
.asm_7db5f
- ld a, [wc001]
+ ld a, [wSoundID]
cp $86
jr z, .asm_7db89
jr c, .asm_7db6a
jr .asm_7db89
.asm_7db6a
- ld hl, wc02a
+ ld hl, wChannelSoundIDs + CH4
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
- ld hl, wc012 ; sfx noise channel pointer
+ ld hl, wChannelCommandPointers + CH6 * 2 ; sfx noise channel pointer
ld de, Noise3_endchannel
ld [hl], e
inc hl
ld [hl], d ; overwrite pointer to point to endchannel
- ld a, [wc005]
+ ld a, [wSavedVolume]
and a
jr nz, .asm_7db89
- ld a, [$ff24]
- ld [wc005], a
+ ld a, [rNR50]
+ ld [wSavedVolume], a
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
.asm_7db89
ret
--- a/constants/hardware_constants.asm
+++ b/constants/hardware_constants.asm
@@ -107,4 +107,3 @@
rUNKNOWN6 EQU $ff76 ; (00h) - Always 00h (Read Only)
rUNKNOWN7 EQU $ff77 ; (00h) - Always 00h (Read Only)
rIE EQU $ffff ; Interrupt Enable (R/W)
-
--- a/constants/music_constants.asm
+++ b/constants/music_constants.asm
@@ -1,3 +1,42 @@
+; HW sound channel register base addresses
+HW_CH1_BASE EQU (rNR10 % $100)
+HW_CH2_BASE EQU ((rNR21 % $100) - 1)
+HW_CH3_BASE EQU (rNR30 % $100)
+HW_CH4_BASE EQU ((rNR41 % $100) - 1)
+
+; HW sound channel enable bit masks
+HW_CH1_ENABLE_MASK EQU %00010001
+HW_CH2_ENABLE_MASK EQU %00100010
+HW_CH3_ENABLE_MASK EQU %01000100
+HW_CH4_ENABLE_MASK EQU %10001000
+
+; HW sound channel disable bit masks
+HW_CH1_DISABLE_MASK EQU (~HW_CH1_ENABLE_MASK & $ff)
+HW_CH2_DISABLE_MASK EQU (~HW_CH2_ENABLE_MASK & $ff)
+HW_CH3_DISABLE_MASK EQU (~HW_CH3_ENABLE_MASK & $ff)
+HW_CH4_DISABLE_MASK EQU (~HW_CH4_ENABLE_MASK & $ff)
+
+REG_DUTY_SOUND_LEN EQU 1
+REG_VOLUME_ENVELOPE EQU 2
+REG_FREQUENCY_LO EQU 3
+
+MAX_SFX_ID EQU $B9
+
+CRY_SFX_START EQU $14
+CRY_SFX_END EQU $86
+
+; wChannelFlags1 constants
+BIT_PERFECT_PITCH EQU 0 ; controlled by toggleperfectpitch command
+BIT_CHANNEL_CALL EQU 1 ; if in channel call
+BIT_NOISE_OR_SFX EQU 2 ; if channel is the music noise channel or an SFX channel
+BIT_VIBRATO_DIRECTION EQU 3 ; if the pitch is above or below normal (cycles)
+BIT_PITCH_BEND_ON EQU 4 ; if pitch bend is active
+BIT_PITCH_BEND_DECREASING EQU 5 ; if the pitch bend frequency is decreasing (instead of increasing)
+BIT_ROTATE_DUTY EQU 6 ; if rotating duty
+
+; wChannelFlags2 constant (only has one flag)
+BIT_EXECUTE_MUSIC EQU 0 ; if in execute music
+
; Song ids are calculated by address to save space.
music_const: MACRO
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -772,7 +772,7 @@
dec b
jr nz,.loop
ld a,%00001000
- ld [$ff10],a ; Channel 1 sweep register
+ ld [rNR10],a ; Channel 1 sweep register
ret
.isTrainerBattle ; if it's a trainer battle, shorten the animation by one frame
ld a,[W_SUBANIMCOUNTER]
@@ -2335,19 +2335,19 @@
call GetCryData
ld b,a
pop hl
- ld a,[wc0f1]
+ ld a,[wFrequencyModifier]
add [hl]
- ld [wc0f1],a
+ ld [wFrequencyModifier],a
inc hl
- ld a,[wc0f2]
+ ld a,[wTempoModifier]
add [hl]
- ld [wc0f2],a
+ ld [wTempoModifier],a
jr .done
.NotCryMove
ld a,[hli]
- ld [wc0f1],a
+ ld [wFrequencyModifier],a
ld a,[hli]
- ld [wc0f2],a
+ ld [wTempoModifier],a
.done
ld a,b
ret
@@ -3029,8 +3029,8 @@
ld b, $1
ld c, SFX_NOT_VERY_EFFECTIVE
.playSound
- ld [wc0f1], a
+ ld [wFrequencyModifier], a
ld a, b
- ld [wc0f2], a
+ ld [wTempoModifier], a
ld a, c
jp PlaySound
--- a/engine/battle/common_text.asm
+++ b/engine/battle/common_text.asm
@@ -61,9 +61,9 @@
.playSFX
xor a
- ld [wc0f1], a
+ ld [wFrequencyModifier], a
ld a, $80
- ld [wc0f2], a
+ ld [wTempoModifier], a
ld a, SFX_SILPH_SCOPE
call PlaySound
jp WaitForSoundToFinish
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -867,12 +867,12 @@
dec a
jr z, .wild_win
xor a
- ld [wc0f1], a
- ld [wc0f2], a
+ ld [wFrequencyModifier], a
+ ld [wTempoModifier], a
ld a, SFX_FAINT_FALL
call PlaySoundWaitForCurrent
.sfxwait
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp SFX_FAINT_FALL
jr z, .sfxwait
ld a, SFX_FAINT_THUD
@@ -952,7 +952,7 @@
EndLowHealthAlarm: ; 3c643 (f:4643)
xor a
ld [wLowHealthAlarm], a ;disable low health alarm
- ld [wc02a], a
+ ld [wChannelSoundIDs + CH4], a
inc a
ld [wccf6], a
ret
@@ -1045,7 +1045,7 @@
PlayBattleVictoryMusic: ; 3c6ee (f:46ee)
push af
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySoundWaitForCurrent
ld c, BANK(Music_DefeatedTrainer)
pop af
@@ -1944,7 +1944,7 @@
ld [hl], $0
ret z
xor a
- ld [wc02a], a
+ ld [wChannelSoundIDs + CH4], a
ret
.asm_3cde6
ld hl, wLowHealthAlarm
@@ -6993,8 +6993,8 @@
; unreferenced
ResetCryModifiers: ; 3f069 (f:7069)
xor a
- ld [wc0f1], a
- ld [wc0f2], a
+ ld [wFrequencyModifier], a
+ ld [wTempoModifier], a
jp PlaySound
; animates the mon "growing" out of the pokeball
--- a/engine/battle/end_of_battle.asm
+++ b/engine/battle/end_of_battle.asm
@@ -46,7 +46,7 @@
.resetVariables
xor a
ld [wLowHealthAlarm], a ;disable low health alarm
- ld [wc02a], a
+ ld [wChannelSoundIDs + CH4], a
ld [W_ISINBATTLE], a
ld [W_BATTLETYPE], a
ld [W_MOVEMISSED], a
--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -824,12 +824,12 @@
add hl, bc
ld a, [hl]
ld [wTradedEnemyMonSpecies], a
- ld a, $a
- ld [wMusicHeaderPointer], a
+ ld a, 10
+ ld [wAudioFadeOutControl], a
ld a, $2
- ld [wc0f0], a
+ ld [wAudioSavedROMBank], a
ld a, MUSIC_SAFARI_ZONE
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, 100
call DelayFrames
@@ -915,12 +915,12 @@
inc a ; LINK_STATE_IN_CABLE_CLUB
ld [wLinkState], a
ld [$ffb5], a
- ld a, $a
- ld [wMusicHeaderPointer], a
+ ld a, 10
+ ld [wAudioFadeOutControl], a
ld a, BANK(Music_Celadon)
- ld [wc0f0], a
+ ld [wAudioSavedROMBank], a
ld a, MUSIC_CELADON
- ld [wc0ee], a
+ ld [wNewSoundID], a
jp PlaySound
EmptyFunc3: ; 5aaf (1:5aaf)
--- a/engine/evolution.asm
+++ b/engine/evolution.asm
@@ -8,9 +8,9 @@
push af
xor a
ld [wLowHealthAlarm], a
- ld [wc02a], a
+ ld [wChannelSoundIDs + CH4], a
dec a
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
@@ -68,7 +68,7 @@
.done
ld [wcf1d], a
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, [wcf1d]
call PlayCry
--- a/engine/hall_of_fame.asm
+++ b/engine/hall_of_fame.asm
@@ -280,9 +280,9 @@
jp CopyData
HoFFadeOutScreenAndMusic: ; 70423 (1c:4423)
- ld a, $a
- ld [wcfc8], a
- ld [wcfc9], a
+ ld a, 10
+ ld [wAudioFadeOutCounterReloadValue], a
+ ld [wAudioFadeOutCounter], a
ld a, $ff
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
jp GBFadeOutToWhite
--- a/engine/hidden_object_functions7.asm
+++ b/engine/hidden_object_functions7.asm
@@ -63,7 +63,7 @@
SafariZoneGameOver: ; 1e9b0 (7:69b0)
call EnableAutoTextBoxDrawing
xor a
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
dec a
call PlaySound
ld c, BANK(SFX_Safari_Zone_PA)
@@ -70,7 +70,7 @@
ld a, SFX_SAFARI_ZONE_PA
call PlayMusic
.asm_1e9c2
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $b9
jr nz, .asm_1e9c2
ld a, TEXT_SAFARI_GAME_OVER
@@ -374,7 +374,7 @@
db $06
TX_ASM
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, 16
call DelayFrames
--- a/engine/intro.asm
+++ b/engine/intro.asm
@@ -325,10 +325,10 @@
call DelayFrames
.next
ld a, BANK(Music_IntroBattle)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, MUSIC_INTRO_BATTLE
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
call IntroClearMiddleOfScreen
call ClearSprites
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -856,7 +856,7 @@
.notFullHP ; if the pokemon's current HP doesn't equal its max HP
xor a
ld [wLowHealthAlarm],a ;disable low health alarm
- ld [wc02a],a
+ ld [wChannelSoundIDs + CH4],a
push hl
push de
ld bc,32
@@ -1643,7 +1643,7 @@
call WaitForSoundToFinish ; wait for sound to end
callba Music_PokeFluteInBattle ; play in-battle pokeflute music
.musicWaitLoop ; wait for music to finish playing
- ld a,[wc02c]
+ ld a,[wChannelSoundIDs + CH6]
and a ; music off?
jr nz,.musicWaitLoop
.skipMusic
@@ -1716,8 +1716,8 @@
ld c, BANK(SFX_Pokeflute)
call PlayMusic
.musicWaitLoop ; wait for music to finish playing
- ld a,[wc028]
- cp a,$b8
+ ld a,[wChannelSoundIDs + CH2]
+ cp a, SFX_POKEFLUE
jr z,.musicWaitLoop
call PlayDefaultMusic ; start playing normal music again
.done
--- a/engine/menu/pokedex.asm
+++ b/engine/menu/pokedex.asm
@@ -397,7 +397,7 @@
ld hl,wd72c
set 1,[hl]
ld a,$33 ; 3/7 volume
- ld [$ff24],a
+ ld [rNR50],a
call GBPalWhiteOut ; zero all palettes
call ClearScreen
ld a,[wd11e] ; pokemon ID
@@ -566,7 +566,7 @@
ld hl,wd72c
res 1,[hl]
ld a,$77 ; max volume
- ld [$ff24],a
+ ld [rNR50],a
ret
HeightWeightText: ; 40448 (10:4448)
--- a/engine/menu/status_screen.asm
+++ b/engine/menu/status_screen.asm
@@ -80,7 +80,7 @@
ld hl, wd72c
set 1, [hl]
ld a, $33
- ld [$ff24], a ; Reduce the volume
+ ld [rNR50], a ; Reduce the volume
call GBPalWhiteOutWithDelay3
call ClearScreen
call UpdateSprites
@@ -430,7 +430,7 @@
ld hl, wd72c
res 1, [hl]
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
call GBPalWhiteOut
jp ClearScreen
--- a/engine/oak_speech.asm
+++ b/engine/oak_speech.asm
@@ -129,12 +129,12 @@
ld a,[H_LOADEDROMBANK]
push af
ld a, BANK(Music_PalletTown)
- ld [wc0ef],a
- ld [wc0f0],a
- ld a,$A
- ld [wMusicHeaderPointer],a
+ ld [wAudioROMBank],a
+ ld [wAudioSavedROMBank],a
+ ld a, 10
+ ld [wAudioFadeOutControl],a
ld a,$FF
- ld [wc0ee],a
+ ld [wNewSoundID],a
call PlaySound ; stop music
pop af
ld [H_LOADEDROMBANK],a
--- a/engine/overworld/elevator.asm
+++ b/engine/overworld/elevator.asm
@@ -33,7 +33,7 @@
ld a, SFX_SAFARI_ZONE_PA
call PlayMusic
.musicLoop
- ld a, [wc02a]
+ ld a, [wChannelSoundIDs + CH4]
cp $b9
jr z, .musicLoop
call UpdateSprites
--- a/engine/overworld/healing_machine.asm
+++ b/engine/overworld/healing_machine.asm
@@ -15,18 +15,18 @@
ld hl, wOAMBuffer + $84
ld de, PokeCenterOAMData
call CopyHealingMachineOAM
- ld a, $4
- ld [wMusicHeaderPointer], a
+ ld a, 4
+ ld [wAudioFadeOutControl], a
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
-.asm_70464
- ld a, [wMusicHeaderPointer]
- and a
- jr nz, .asm_70464
+.waitLoop
+ ld a, [wAudioFadeOutControl]
+ and a ; is fade-out finished?
+ jr nz, .waitLoop ; if not, check again
ld a, [wPartyCount]
ld b, a
-.asm_7046e
+.partyLoop
call CopyHealingMachineOAM
ld a, SFX_HEALING_MACHINE
call PlaySound
@@ -33,26 +33,26 @@
ld c, 30
call DelayFrames
dec b
- jr nz, .asm_7046e
- ld a, [wc0ef]
+ jr nz, .partyLoop
+ ld a, [wAudioROMBank]
cp BANK(Audio3_UpdateMusic)
- ld [wc0f0], a
- jr nz, .asm_70495
+ ld [wAudioSavedROMBank], a
+ jr nz, .next
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, BANK(Music_PkmnHealed)
- ld [wc0ef], a
-.asm_70495
+ ld [wAudioROMBank], a
+.next
ld a, MUSIC_PKMN_HEALED
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld d, $28
call FlashSprite8Times
-.asm_704a2
- ld a, [wc026]
- cp MUSIC_PKMN_HEALED
- jr z, .asm_704a2
+.waitLoop2
+ ld a, [wChannelSoundIDs]
+ cp MUSIC_PKMN_HEALED ; is the healed music still playing?
+ jr z, .waitLoop2 ; if so, check gain
ld c, 32
call DelayFrames
pop af
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -163,10 +163,10 @@
PewterMovementScript_WalkToMuseum: ; 1a514 (6:6514)
ld a, BANK(Music_MuseumGuy)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, MUSIC_MUSEUM_GUY
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, [wSpriteIndex]
swap a
@@ -219,10 +219,10 @@
PewterMovementScript_WalkToGym: ; 1a581 (6:6581)
ld a, BANK(Music_MuseumGuy)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, MUSIC_MUSEUM_GUY
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, [wSpriteIndex]
swap a
--- a/engine/overworld/pokecenter.asm
+++ b/engine/overworld/pokecenter.asm
@@ -24,12 +24,12 @@
predef HealParty
callba AnimateHealingMachine ; do the healing machine animation
xor a
- ld [wMusicHeaderPointer], a
- ld a, [wc0f0]
- ld [wc0ef], a
- ld a, [wd35b]
- ld [wcfca], a
- ld [wc0ee], a
+ ld [wAudioFadeOutControl], a
+ ld a, [wAudioSavedROMBank]
+ ld [wAudioROMBank], a
+ ld a, [wMapMusicSoundID]
+ ld [wLastMusicSoundID], a
+ ld [wNewSoundID], a
call PlaySound
ld hl, PokemonFightingFitText
call PrintText
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -411,7 +411,7 @@
call PrintText
.done
xor a
- ld [wc002], a
+ ld [wMuteAudioAndPauseMusic], a
ret
.rollWheel3DownByOneSymbol
call SlotMachine_AnimWheel3
@@ -654,7 +654,7 @@
SlotMachine_PayCoinsToPlayer: ; 3776b (d:776b)
ld a, $1
- ld [wc002], a
+ ld [wMuteAudioAndPauseMusic], a
call WaitForSoundToFinish
; Put 1 in the temp coins variable. This value is added to the player's coins
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -18,8 +18,8 @@
ld [hli], a
ld [hl], a
ld a, BANK(Music_TitleScreen)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
DisplayTitleScreen: ; 42dd (1:42dd)
call GBPalWhiteOut
@@ -219,7 +219,7 @@
call Delay3
call WaitForSoundToFinish
ld a, MUSIC_TITLE_SCREEN
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
xor a
ld [wcc5b], a
--- a/home.asm
+++ b/home.asm
@@ -332,9 +332,9 @@
ld a, [hli]
ld b, a ; cry id
ld a, [hli]
- ld [wc0f1], a
+ ld [wFrequencyModifier], a
ld a, [hl]
- ld [wc0f2], a
+ ld [wTempoModifier], a
call BankswitchBack
; Cry headers have 3 channels,
@@ -998,8 +998,8 @@
xor a
jp FillMemory
-Func_28cb:: ; 28cb (0:28cb)
- ld a, [wMusicHeaderPointer]
+FadeOutAudio:: ; 28cb (0:28cb)
+ ld a, [wAudioFadeOutControl]
and a
jr nz, .asm_28dc
ld a, [wd72c]
@@ -1006,19 +1006,19 @@
bit 1, a
ret nz
ld a, $77
- ld [$ff24], a
+ ld [rNR50], a
ret
.asm_28dc
- ld a, [wcfc9]
+ ld a, [wAudioFadeOutCounter]
and a
- jr z, .asm_28e7
+ jr z, .counterReachedZero
dec a
- ld [wcfc9], a
+ ld [wAudioFadeOutCounter], a
ret
-.asm_28e7
- ld a, [wcfc8]
- ld [wcfc9], a
- ld a, [$ff24]
+.counterReachedZero
+ ld a, [wAudioFadeOutCounterReloadValue]
+ ld [wAudioFadeOutCounter], a
+ ld a, [rNR50]
and a
jr z, .asm_2903
ld b, a
@@ -1031,20 +1031,20 @@
dec a
swap a
or c
- ld [$ff24], a
+ ld [rNR50], a
ret
.asm_2903
- ld a, [wMusicHeaderPointer]
+ ld a, [wAudioFadeOutControl]
ld b, a
xor a
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
- ld a, [wc0f0]
- ld [wc0ef], a
+ ld a, [wAudioSavedROMBank]
+ ld [wAudioROMBank], a
ld a, b
- ld [wc0ee], a
+ ld [wNewSoundID], a
jp PlaySound
; this function is used to display sign messages, sprite dialog, etc.
@@ -2604,12 +2604,12 @@
and a
ret nz
xor a
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld a, $ff
call PlaySound
ld a, BANK(Music_MeetEvilTrainer)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, [wEngagedTrainerClass]
ld b, a
ld hl, EvilTrainerList
@@ -2634,7 +2634,7 @@
.maleTrainer
ld a, MUSIC_MEET_MALE_TRAINER
.PlaySound
- ld [wc0ee], a
+ ld [wNewSoundID], a
jp PlaySound
INCLUDE "data/trainer_types.asm"
@@ -3217,8 +3217,8 @@
and $80
ret nz
push hl
-.asm_374f
- ld hl, wc02a
+.waitLoop
+ ld hl, wChannelSoundIDs + CH4
xor a
or [hl]
inc hl
@@ -3226,7 +3226,7 @@
inc hl
inc hl
or [hl]
- jr nz, .asm_374f
+ jr nz, .waitLoop
pop hl
ret
--- a/home/audio.asm
+++ b/home/audio.asm
@@ -3,75 +3,95 @@
xor a
ld c, a
ld d, a
- ld [wcfca], a
- jr Func_2324
+ ld [wLastMusicSoundID], a
+ jr PlayDefaultMusicCommon
-Func_2312:: ; 2312 (0:2312)
- ld c, $a
- ld d, $0
+PlayDefaultMusicFadeOutCurrent:: ; 2312 (0:2312)
+; Fade out the current music and then play the default music.
+ ld c, 10
+ ld d, 0
ld a, [wd72e]
- bit 5, a
- jr z, Func_2324
+ bit 5, a ; has a battle just ended?
+ jr z, PlayDefaultMusicCommon
xor a
- ld [wcfca], a
- ld c, $8
+ ld [wLastMusicSoundID], a
+ ld c, 8
ld d, c
-Func_2324:: ; 2324 (0:2324)
+
+PlayDefaultMusicCommon:: ; 2324 (0:2324)
ld a, [wWalkBikeSurfState]
and a
- jr z, .asm_2343
+ jr z, .walking
cp $2
- jr z, .asm_2332
+ jr z, .surfing
ld a, MUSIC_BIKE_RIDING
- jr .asm_2334
-.asm_2332
+ jr .next
+
+.surfing
ld a, MUSIC_SURFING
-.asm_2334
+
+.next
ld b, a
ld a, d
- and a
+ and a ; should current music be faded out first?
ld a, BANK(Music_BikeRiding)
- jr nz, .asm_233e
- ld [wc0ef], a
-.asm_233e
- ld [wc0f0], a
- jr .asm_234c
-.asm_2343
- ld a, [wd35b]
+ jr nz, .next2
+
+; Only change the audio ROM bank if the current music isn't going to be faded
+; out before the default music begins.
+ ld [wAudioROMBank], a
+
+.next2
+; [wAudioSavedROMBank] will be copied to [wAudioROMBank] after fading out the
+; current music (if the current music is faded out).
+ ld [wAudioSavedROMBank], a
+ jr .next3
+
+.walking
+ ld a, [wMapMusicSoundID]
ld b, a
- call Func_2385
- jr c, .asm_2351
-.asm_234c
- ld a, [wcfca]
- cp b
- ret z
-.asm_2351
+ call CompareMapMusicBankWithCurrentBank
+ jr c, .next4
+
+.next3
+ ld a, [wLastMusicSoundID]
+ cp b ; is the default music already playing?
+ ret z ; if so, do nothing
+
+.next4
ld a, c
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld a, b
- ld [wcfca], a
- ld [wc0ee], a
+ ld [wLastMusicSoundID], a
+ ld [wNewSoundID], a
jp PlaySound
-Func_235f:: ; 235f (0:235f)
- ld a, [wc0ef]
+UpdateMusic6Times:: ; 235f (0:235f)
+; This is called when entering a map, before fading out the current music and
+; playing the default music (i.e. the map's music or biking/surfing music).
+ ld a, [wAudioROMBank]
ld b, a
cp BANK(Audio1_UpdateMusic)
jr nz, .checkForAudio2
-.audio1
+
+; audio 1
ld hl, Audio1_UpdateMusic
- jr .asm_2378
+ jr .next
+
.checkForAudio2
cp BANK(Audio2_UpdateMusic)
jr nz, .audio3
-.audio2
+
+; audio 2
ld hl, Audio2_UpdateMusic
- jr .asm_2378
+ jr .next
+
.audio3
ld hl, Audio3_UpdateMusic
-.asm_2378
- ld c, $6
-.asm_237a
+
+.next
+ ld c, 6
+.loop
push bc
push hl
call Bankswitch
@@ -78,37 +98,44 @@
pop hl
pop bc
dec c
- jr nz, .asm_237a
+ jr nz, .loop
ret
-Func_2385:: ; 2385 (0:2385)
- ld a, [wd35c]
+CompareMapMusicBankWithCurrentBank:: ; 2385 (0:2385)
+; Compares the map music's audio ROM bank with the current audio ROM bank
+; and updates the audio ROM bank variables.
+; Returns whether the banks are different in carry.
+ ld a, [wMapMusicROMBank]
ld e, a
- ld a, [wc0ef]
+ ld a, [wAudioROMBank]
cp e
- jr nz, .asm_2394
- ld [wc0f0], a
+ jr nz, .differentBanks
+ ld [wAudioSavedROMBank], a
and a
ret
-.asm_2394
- ld a, c
+.differentBanks
+ ld a, c ; this is a fade-out counter value and it's always non-zero
and a
ld a, e
- jr nz, .asm_239c
- ld [wc0ef], a
-.asm_239c
- ld [wc0f0], a
+ jr nz, .next
+; If the fade-counter is non-zero, we don't change the audio ROM bank because
+; it's needed to keep playing the music as it fades out. The FadeOutAudio
+; routine will take care of copying [wAudioSavedROMBank] to [wAudioROMBank]
+; when the music has faded out.
+ ld [wAudioROMBank], a
+.next
+ ld [wAudioSavedROMBank], a
scf
ret
PlayMusic:: ; 23a1 (0:23a1)
ld b, a
- ld [wc0ee], a
+ ld [wNewSoundID], a
xor a
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld a, c
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, b
; plays music specified by a. If value is $ff, music is stopped
@@ -117,66 +144,74 @@
push de
push bc
ld b, a
- ld a, [wc0ee]
+ ld a, [wNewSoundID]
and a
- jr z, .asm_23c8
+ jr z, .next
xor a
- ld [wc02a], a
- ld [wc02b], a
- ld [wc02c], a
- ld [wc02d], a
-.asm_23c8
- ld a, [wMusicHeaderPointer]
- and a
- jr z, .asm_23e3
- ld a, [wc0ee]
- and a
- jr z, .asm_2425
+ ld [wChannelSoundIDs + CH4], a
+ ld [wChannelSoundIDs + CH5], a
+ ld [wChannelSoundIDs + CH6], a
+ ld [wChannelSoundIDs + CH7], a
+.next
+ ld a, [wAudioFadeOutControl]
+ and a ; has a fade-out length been specified?
+ jr z, .noFadeOut
+ ld a, [wNewSoundID]
+ and a ; is the new sound ID 0?
+ jr z, .done ; if so, do nothing
xor a
- ld [wc0ee], a
- ld a, [wcfca]
- cp $ff
- jr nz, .asm_2414
+ ld [wNewSoundID], a
+ ld a, [wLastMusicSoundID]
+ cp $ff ; has the music been stopped?
+ jr nz, .fadeOut ; if not, fade out the current music
+; If it has been stopped, start playing the new music immediately.
xor a
- ld [wMusicHeaderPointer], a
-.asm_23e3
+ ld [wAudioFadeOutControl], a
+.noFadeOut
xor a
- ld [wc0ee], a
+ ld [wNewSoundID], a
ld a, [H_LOADEDROMBANK]
- ld [$ffb9], a
- ld a, [wc0ef]
+ ld [hSavedROMBank], a
+ ld a, [wAudioROMBank]
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
- cp BANK(Audio1_9876)
+ cp BANK(Audio1_PlaySound)
jr nz, .checkForAudio2
-.audio1
+
+; audio 1
ld a, b
- call Audio1_9876
- jr .asm_240b
+ call Audio1_PlaySound
+ jr .next2
+
.checkForAudio2
- cp BANK(Audio2_22035)
+ cp BANK(Audio2_PlaySound)
jr nz, .audio3
-.audio2
+
+; audio 2
ld a, b
- call Audio2_22035
- jr .asm_240b
+ call Audio2_PlaySound
+ jr .next2
+
.audio3
ld a, b
- call Audio3_7d8ea
-.asm_240b
- ld a, [$ffb9]
+ call Audio3_PlaySound
+
+.next2
+ ld a, [hSavedROMBank]
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
- jr .asm_2425
-.asm_2414
+ jr .done
+
+.fadeOut
ld a, b
- ld [wcfca], a
- ld a, [wMusicHeaderPointer]
- ld [wcfc8], a
- ld [wcfc9], a
+ ld [wLastMusicSoundID], a
+ ld a, [wAudioFadeOutControl]
+ ld [wAudioFadeOutCounterReloadValue], a
+ ld [wAudioFadeOutCounter], a
ld a, b
- ld [wMusicHeaderPointer], a
-.asm_2425
+ ld [wAudioFadeOutControl], a
+
+.done
pop bc
pop de
pop hl
--- a/home/init.asm
+++ b/home/init.asm
@@ -98,8 +98,8 @@
predef LoadSGB
ld a, BANK(SFX_Shooting_Star)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
ld a, $9c
ld [H_AUTOBGTRANSFERDEST + 1], a
xor a
@@ -127,11 +127,11 @@
StopAllSounds::
ld a, BANK(Audio1_UpdateMusic)
- ld [wc0ef], a
- ld [wc0f0], a
+ ld [wAudioROMBank], a
+ ld [wAudioSavedROMBank], a
xor a
- ld [wMusicHeaderPointer], a
- ld [wc0ee], a
- ld [wcfca], a
+ ld [wAudioFadeOutControl], a
+ ld [wNewSoundID], a
+ ld [wLastMusicSoundID], a
dec a
jp PlaySound
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -658,7 +658,7 @@
ld [wCurrentTileBlockMapViewPointer + 1],a
.loadNewMap ; load the connected map that was entered
call LoadMapHeader
- call Func_2312 ; music
+ call PlayDefaultMusicFadeOutCurrent
ld b,$09
call GoPAL_SET
; Since the sprite set shouldn't change, this will just update VRAM slots at
@@ -750,16 +750,16 @@
ld [MBC1RomBank], a
call ResetStatusAndHalveMoneyOnBlackout
call SpecialWarpIn
- call Func_2312
+ call PlayDefaultMusicFadeOutCurrent
jp SpecialEnterMap
StopMusic::
- ld [wMusicHeaderPointer], a
+ ld [wAudioFadeOutControl], a
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.wait
- ld a, [wMusicHeaderPointer]
+ ld a, [wAudioFadeOutControl]
and a
jr nz, .wait
jp StopAllSounds
@@ -1224,7 +1224,7 @@
call CheckTilePassable
jr nc,.noCollision
.collision
- ld a,[wc02a]
+ ld a,[wChannelSoundIDs + CH4]
cp a,SFX_COLLISION ; check if collision sound is already playing
jr z,.setCarry
ld a,SFX_COLLISION
@@ -1927,7 +1927,7 @@
jr z,.stopSurfing ; stop surfing if the tile is passable
jr .loop
.collision
- ld a,[wc02a]
+ ld a,[wChannelSoundIDs + CH4]
cp a,SFX_COLLISION ; check if collision sound is already playing
jr z,.setCarry
ld a,SFX_COLLISION
@@ -2279,9 +2279,9 @@
add hl,bc
add hl,bc
ld a,[hli]
- ld [wd35b],a ; music 1
+ ld [wMapMusicSoundID],a ; music 1
ld a,[hl]
- ld [wd35c],a ; music 2
+ ld [wMapMusicROMBank],a ; music 2
pop af
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
@@ -2352,8 +2352,8 @@
ld a,[W_FLAGS_D733]
bit 1,a
jr nz,.restoreRomBank
- call Func_235f ; music related
- call Func_2312 ; music related
+ call UpdateMusic6Times
+ call PlayDefaultMusicFadeOutCurrent
.restoreRomBank
pop af
ld [H_LOADEDROMBANK],a
--- a/home/vblank.asm
+++ b/home/vblank.asm
@@ -38,21 +38,21 @@
ld a, [H_VBLANKOCCURRED]
and a
- jr z, .vblanked
+ jr z, .skipZeroing
xor a
ld [H_VBLANKOCCURRED], a
-.vblanked
+.skipZeroing
ld a, [H_FRAMECOUNTER]
and a
- jr z, .decced
+ jr z, .skipDec
dec a
ld [H_FRAMECOUNTER], a
-.decced
- call Func_28cb
+.skipDec
+ call FadeOutAudio
- ld a, [wc0ef] ; music ROM bank
+ ld a, [wAudioROMBank] ; music ROM bank
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
--- a/hram.asm
+++ b/hram.asm
@@ -182,7 +182,9 @@
hJoy6 EQU $FFB6
hJoy7 EQU $FFB7
-H_LOADEDROMBANK EQU $FFB8
+H_LOADEDROMBANK EQU $FFB8
+
+hSavedROMBank EQU $FFB9
; is automatic background transfer during V-blank enabled?
; if nonzero, yes
--- a/scripts/ceruleancity.asm
+++ b/scripts/ceruleancity.asm
@@ -65,7 +65,7 @@
and a
jr z, .asm_19512
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.asm_19512
ld c, BANK(Music_MeetRival)
@@ -172,7 +172,7 @@
ld [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, $1
--- a/scripts/oakslab.asm
+++ b/scripts/oakslab.asm
@@ -511,7 +511,7 @@
ld [hJoyHeld], a
call EnableAutoTextBoxDrawing
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, $15
@@ -612,7 +612,7 @@
call FillMemory
ld [hl], $ff
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, $1
--- a/scripts/pewterpokecenter.asm
+++ b/scripts/pewterpokecenter.asm
@@ -59,9 +59,9 @@
ld c, 24
call DelayFrames
- ld a, [wc026]
+ ld a, [wChannelSoundIDs]
ld b, a
- ld a, [wc027]
+ ld a, [wChannelSoundIDs + CH1]
or b
jr nz, .loop
--- a/scripts/pokemontower2.asm
+++ b/scripts/pokemontower2.asm
@@ -23,7 +23,7 @@
call ArePlayerCoordsInArray
ret nc
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
@@ -77,7 +77,7 @@
ld [H_SPRITEINDEX], a
call MoveSprite
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, $2
--- a/scripts/redshouse1f.asm
+++ b/scripts/redshouse1f.asm
@@ -29,14 +29,14 @@
call ReloadMapData
predef HealParty
ld a, MUSIC_PKMN_HEALED
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.next
- ld a, [wc026]
+ ld a, [wChannelSoundIDs]
cp MUSIC_PKMN_HEALED
jr z, .next
- ld a, [wd35b]
- ld [wc0ee], a
+ ld a, [wMapMusicSoundID]
+ ld [wNewSoundID], a
call PlaySound
call GBFadeInFromWhite
ld hl, MomHealText2
--- a/scripts/route22.asm
+++ b/scripts/route22.asm
@@ -89,7 +89,7 @@
and a
jr z, .asm_50f4e
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.asm_50f4e
ld c, BANK(Music_MeetRival)
@@ -168,7 +168,7 @@
ld [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, [wcf0d]
@@ -242,11 +242,11 @@
and a
jr z, .skipYVisibilityTesta
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.skipYVisibilityTesta
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateTempo
ld a, $2
@@ -327,7 +327,7 @@
ld [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStartAndTempo
ld a, [wcf0d]
--- a/scripts/silphco7.asm
+++ b/scripts/silphco7.asm
@@ -131,7 +131,7 @@
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
@@ -220,7 +220,7 @@
ld [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld de, MovementData_51d1d
--- a/scripts/ssanne2.asm
+++ b/scripts/ssanne2.asm
@@ -25,7 +25,7 @@
call ArePlayerCoordsInArray
ret nc
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
@@ -146,7 +146,7 @@
ld [H_SPRITEINDEX], a
call MoveSprite
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
callba Music_RivalAlternateStart
ld a, $3
--- a/scripts/ssanne7.asm
+++ b/scripts/ssanne7.asm
@@ -44,21 +44,21 @@
SSAnne7RubText: ; 618ec (18:58ec)
TX_FAR _SSAnne7RubText
TX_ASM
- ld a, [wc0ef]
+ ld a, [wAudioROMBank]
cp BANK(Audio3_UpdateMusic)
- ld [wc0f0], a
+ ld [wAudioSavedROMBank], a
jr nz, .asm_61908
ld a, $ff
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld a, Bank(Music_PkmnHealed)
- ld [wc0ef], a
+ ld [wAudioROMBank], a
.asm_61908
ld a, MUSIC_PKMN_HEALED
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
.asm_61910
- ld a, [wc026]
+ ld a, [wChannelSoundIDs]
cp MUSIC_PKMN_HEALED
jr z, .asm_61910
call PlayDefaultMusic
--- a/scripts/vermiliondock.asm
+++ b/scripts/vermiliondock.asm
@@ -40,7 +40,7 @@
SetEventForceReuseHL EVENT_SS_ANNE_LEFT
ld a, $ff
ld [wJoyIgnore], a
- ld [wc0ee], a
+ ld [wNewSoundID], a
call PlaySound
ld c, BANK(Music_Surfing)
ld a, MUSIC_SURFING
--- a/wram.asm
+++ b/wram.asm
@@ -61,68 +61,148 @@
SECTION "WRAM Bank 0", WRAM0
-wc000:: ds 1
-wc001:: ds 1
-wc002:: ds 1
-wc003:: ds 1
-wc004:: ds 1
-wc005:: ds 1
-wc006:: ds 8
-wc00e:: ds 4
-wc012:: ds 4
-wc016:: ds 16
-wc026:: ds 1
-wc027:: ds 1
-wc028:: ds 2
-wc02a:: ds 1
-wc02b:: ds 1
-wc02c:: ds 1
-wc02d:: ds 1
-wc02e:: ds 8
-wc036:: ds 8
-wc03e:: ds 8
-wc046:: ds 8
-wc04e:: ds 8
-wc056:: ds 8
-wc05e:: ds 8
-wc066:: ds 8
-wc06e:: ds 8
-wc076:: ds 8
-wc07e:: ds 8
-wc086:: ds 8
-wc08e:: ds 8
-wc096:: ds 8
-wc09e:: ds 8
-wc0a6:: ds 8
-wc0ae:: ds 8
-wc0b6:: ds 8
-wc0be:: ds 8
-wc0c6:: ds 8
-wc0ce:: ds 1
-wc0cf:: ds 1
-wc0d0:: ds 1
-wc0d1:: ds 1
-wc0d2:: ds 1
-wc0d3:: ds 1
-wc0d4:: ds 1
-wc0d5:: ds 1
-wc0d6:: ds 8
-wc0de:: ds 8
-wc0e6:: ds 1
-wc0e7:: ds 1
-wc0e8:: ds 1
-wc0e9:: ds 1
-wc0ea:: ds 1
-wc0eb:: ds 1
-wc0ec:: ds 1
-wc0ed:: ds 1
-wc0ee:: ds 1
-wc0ef:: ds 1
-wc0f0:: ds 1
-wc0f1:: ds 1
-wc0f2:: ds 14
+wUnusedC000:: ; c000
+ ds 1
+wSoundID:: ; c001
+ ds 1
+wMuteAudioAndPauseMusic:: ; c002
+; bit 7: whether sound has been muted
+; all bits: whether the effective is active
+; Store 1 to activate effect (any value in the range [1, 127] works).
+; All audio is muted and music is paused. Sfx continues playing until it
+; ends normally.
+; Store 0 to resume music.
+ ds 1
+
+wDisableChannelOutputWhenSfxEnds:: ; c003
+ ds 1
+
+wStereoPanning:: ; c004
+ ds 1
+
+wSavedVolume:: ; c005
+ ds 1
+
+wChannelCommandPointers:: ; c006
+ ds 16
+
+wChannelReturnAddresses:: ; c016
+ ds 16
+
+wChannelSoundIDs:: ; c026
+ ds 8
+
+wChannelFlags1:: ; c02e
+ ds 8
+
+wChannelFlags2:: ; c036
+ ds 8
+
+wChannelDuties:: ; c03e
+ ds 8
+
+wChannelDutyCycles:: ; c046
+ ds 8
+
+wChannelVibratoDelayCounters:: ; c04e
+; reloaded at the beginning of a note. counts down until the vibrato begins.
+ ds 8
+
+wChannelVibratoExtents:: ; c056
+ ds 8
+
+wChannelVibratoRates:: ; c05e
+; high nybble is rate (counter reload value) and low nybble is counter.
+; time between applications of vibrato.
+ ds 8
+
+wChannelFrequencyLowBytes:: ; c066
+ ds 8
+
+wChannelVibratoDelayCounterReloadValues:: ; c06e
+; delay of the beginning of the vibrato from the start of the note
+ ds 8
+
+wChannelPitchBendLengthModifiers:: ; c076
+ ds 8
+
+wChannelPitchBendFrequencySteps:: ; c07e
+ ds 8
+
+wChannelPitchBendFrequencyStepsFractionalPart:: ; c086
+ ds 8
+
+wChannelPitchBendCurrentFrequencyFractionalPart:: ; c08e
+ ds 8
+
+wChannelPitchBendCurrentFrequencyHighBytes:: ; c096
+ ds 8
+
+wChannelPitchBendCurrentFrequencyLowBytes:: ; c09e
+ ds 8
+
+wChannelPitchBendTargetFrequencyHighBytes:: ; c0a6
+ ds 8
+
+wChannelPitchBendTargetFrequencyLowBytes:: ; c0ae
+ ds 8
+
+wChannelNoteDelayCounters:: ; c0b6
+; Note delays are stored as 16-bit fixed-point numbers where the integer part
+; is 8 bits and the fractional part is 8 bits.
+ ds 8
+
+wChannelLoopCounters:: ; c0be
+ ds 8
+
+wChannelNoteSpeeds:: ; c0c6
+ ds 8
+
+wChannelNoteDelayCountersFractionalPart:: ; c0ce
+ ds 8
+
+wChannelOctaves:: ; c0d6
+ ds 8
+
+wChannelVolumes:: ; c0de
+; also includes fade for hardware channels that support it
+ ds 8
+
+wMusicWaveInstrument::
+ ds 1
+
+wSfxWaveInstrument::
+ ds 1
+
+wMusicTempo:: ; c0e8
+ ds 2
+
+wSfxTempo:: ; c0ea
+ ds 2
+
+wSfxHeaderPointer:: ; c0ec
+ ds 2
+
+wNewSoundID:: ; c0ee
+ ds 1
+
+wAudioROMBank:: ; c0ef
+ ds 1
+
+wAudioSavedROMBank:: ; c0f0
+ ds 1
+
+wFrequencyModifier:: ; c0f1
+ ds 1
+
+wTempoModifier:: ; c0f2
+ ds 1
+
+ ds 13
+
+
SECTION "Sprite State Data", WRAM0[$c100]
wSpriteStateData1:: ; c100
@@ -1289,14 +1369,36 @@
; background tile number in front of the player (either 1 or 2 steps ahead)
ds 1
-wMusicHeaderPointer:: ; cfc7
-; (the current music channel address - $4000) / 3
+wAudioFadeOutControl:: ; cfc7
+; The desired fade counter reload value is stored here prior to calling
+; PlaySound in order to cause the current music to fade out before the new
+; music begins playing. Storing 0 causes no fade out to occur and the new music
+; to begin immediately.
+; This variable has another use related to fade-out, as well. PlaySound stores
+; the sound ID of the music that should be played after the fade-out is finished
+; in this variable. FadeOutAudio checks if it's non-zero every V-Blank and
+; fades out the current audio if it is. Once it has finished fading out the
+; audio, it zeroes this variable and starts playing the sound ID stored in it.
ds 1
-wcfc8:: ds 1 ; used with audio
-wcfc9:: ds 1 ; also used with audio
-wcfca:: ds 1 ; also used with audio too
+wAudioFadeOutCounterReloadValue:: ; cfc8
+ ds 1
+wAudioFadeOutCounter:: ; cfc9
+ ds 1
+
+wLastMusicSoundID:: ; cfca
+; This is used to determine whether the default music is already playing when
+; attempting to play the default music (in order to avoid restarting the same
+; music) and whether the music has already been stopped when attempting to
+; fade out the current music (so that the new music can be begin immediately
+; instead of waiting).
+; It sometimes contains the sound ID of the last music played, but it may also
+; contain $ff (if the music has been stopped) or 0 (because some routines zero
+; it in order to prevent assumptions from being made about the current state of
+; the music).
+ ds 1
+
wUpdateSpritesEnabled:: ; cfcb
; $00 = causes sprites to be hidden and the value to change to $ff
; $01 = enabled
@@ -2126,8 +2228,11 @@
wPlayerID:: ; d359
ds 2
-wd35b:: ds 1 ; used with audio stuff
-wd35c:: ds 1 ; storage for audio bank for current map?
+wMapMusicSoundID:: ; d35b
+ ds 1
+
+wMapMusicROMBank:: ; d35c
+ ds 1
wMapPalOffset:: ; d35d
; offset subtracted from FadePal4 to get the background and object palettes for the current map