summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZumi Daxuya <daxuya.zumi+code@protonmail.com>2020-12-17 18:10:45 +0700
committerZumi Daxuya <daxuya.zumi+code@protonmail.com>2020-12-17 18:10:45 +0700
commitd0eb204e4a6c24e304252a7e85d8e77d4b3acd6f (patch)
tree3f0b164c98b2fd6643ff93601ab8af0d74268830
parentc63e33f04170e24bee0546f97381d7fcc5840a6d (diff)
Further disassemble audio engine
-rw-r--r--audio/engine.asm1738
-rw-r--r--constants/audio_constants.asm1
-rw-r--r--home/cry.asm6
-rw-r--r--ram/wram.asm16
4 files changed, 980 insertions, 781 deletions
diff --git a/audio/engine.asm b/audio/engine.asm
index 06b4e33..2ccee97 100644
--- a/audio/engine.asm
+++ b/audio/engine.asm
@@ -38,7 +38,7 @@ _DisableAudio::
or d
jr nz, .clear
- ld a, $77
+ ld a, MAX_VOLUME
ld [wVolume], a
pop af
@@ -94,7 +94,7 @@ UpdateChannel:
.noteover
call DisablePitchWheel
- call Functione884f
+ call ParseMusic
.continue_sound_update
call Functione80b6
@@ -173,8 +173,8 @@ Functione80b6:
ld a, $3F
ld [wSoundLength], a
call Functione85d8
- call Functione87f9
- call Functione8839
+ call ReadNoiseSample
+ call HaltMusicWhileSFXPlaying
call IsChannelSFXOn
jr nc, .end
@@ -782,6 +782,7 @@ DoSweepingFade::
; first nybble of wSweepingFadeIndex is the subroutine index
; second is the fade length
+
swap a
and 7
ld e, a
@@ -837,6 +838,7 @@ DoSweepingFade::
ret nc
ld a, 4
call .SetIndex
+
.DoFade5:
call .RightChannel
call .DecrementCounter
@@ -850,7 +852,7 @@ DoSweepingFade::
.DoFade6:
xor a
ld [wSweepingFadeIndex], a
- ld a, $77
+ ld a, MAX_VOLUME
ld [wVolume], a
ret
@@ -925,11 +927,11 @@ DoSweepingFade::
ld [wSoundOutput], a
ret
-Call_03a_44fe:
+LoadNote:
ld hl, CHANNEL_FLAGS2
add hl, bc
bit SOUND_PITCH_WHEEL, [hl]
- call nz, .pitch_wheel
+ call nz, .get_note
bit SOUND_VIBRATO, [hl]
call nz, .vibrato
bit SOUND_UNKN_0E, [hl]
@@ -940,192 +942,180 @@ Call_03a_44fe:
call nz, .flag_0b
ret
-.pitch_wheel:
+.get_note
push hl
ld hl, CHANNEL_NOTE_DURATION
add hl, bc
ld a, [hl]
- ld hl, wc196
+ ld hl, wCurNoteDuration
sub [hl]
- jr nc, .jr_03a_452a
-
- ld a, $01
-
-.jr_03a_452a
+ jr nc, .ok
+ ld a, 1
+.ok
ld [hl], a
- ld hl, $0010
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0021
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld a, e
sub [hl]
ld e, a
ld a, d
- sbc $00
+ sbc 0
ld d, a
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
sub [hl]
- jr nc, .jr_03a_4565
+ jr nc, .greater_than
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- set 1, [hl]
- ld hl, $0010
+ set SOUND_PITCH_WHEEL_DIR, [hl]
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0021
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld a, [hl]
sub e
ld e, a
ld a, d
- sbc $00
+ sbc 0
ld d, a
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
ld a, [hl]
sub d
ld d, a
- jr .jr_03a_4583
+ jr .resume
-.jr_03a_4565
- ld hl, $0005
+.greater_than
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- res 1, [hl]
- ld hl, $0010
+ res SOUND_PITCH_WHEEL_DIR, [hl]
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0021
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld a, e
sub [hl]
ld e, a
ld a, d
- sbc $00
+ sbc 0
ld d, a
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
sub [hl]
ld d, a
-.jr_03a_4583
+.resume
push bc
- ld hl, wc196
- ld b, $00
+ ld hl, wCurNoteDuration
+ ld b, 0
-.jr_03a_4589
+.loop
inc b
ld a, e
sub [hl]
ld e, a
- jr nc, .jr_03a_4589
+ jr nc, .loop
ld a, d
and a
- jr z, .jr_03a_4596
+ jr z, .quit
dec d
- jr .jr_03a_4589
+ jr .loop
-.jr_03a_4596
+.quit
ld a, e
add [hl]
ld d, b
pop bc
- ld hl, $0023
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT
add hl, bc
ld [hl], d
- ld hl, $0024
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION
add hl, bc
ld [hl], a
- ld hl, $0025
+ ld hl, CHANNEL_FIELD25
add hl, bc
xor a
ld [hl], a
pop hl
ret
-
-.vibrato:
+.vibrato
push hl
- ld hl, $001e
+ ld hl, CHANNEL_VIBRATO_DELAY
add hl, bc
ld a, [hl]
- ld hl, $001d
+ ld hl, CHANNEL_VIBRATO_DELAY_COUNT
add hl, bc
ld [hl], a
pop hl
ret
-
-.flag_0e:
+.flag_0e
push hl
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- res 2, [hl]
+ res NOTE_INTENSITY_OVERRIDE, [hl]
pop hl
ret
-
-.flag_0d:
+.flag_0d
push hl
- ld hl, $002b
+ ld hl, CHANNEL_FIELD2A + 1
add hl, bc
-
-.Call_03a_45c7:
xor a
ld [hl], a
pop hl
ret
-
-.flag_0b:
+.flag_0b
push hl
- ld hl, $002c
+ ld hl, CHANNEL_FIELD2C
add hl, bc
ld a, [hl]
- ld hl, $0026
+ ld hl, CHANNEL_FIELD25 + 1
add hl, bc
ld [hl], a
-
-.Call_03a_45d6:
pop hl
ret
-
Functione85d8::
- ld hl, $0004
- add hl, bc
- bit 2, [hl]
- call nz, Call_03a_4605
- bit 6, [hl]
- call nz, Call_03a_472b
- bit 4, [hl]
- call nz, Call_03a_4713
- bit 1, [hl]
- call nz, Call_03a_461b
- bit 0, [hl]
- call nz, Call_03a_46ad
- bit 5, [hl]
- call nz, Call_03a_475e
- bit 3, [hl]
- call nz, Call_03a_46ff
- bit 7, [hl]
- call nz, Call_03a_47bb
- ret
-
-
-Call_03a_4605:
+ ld hl, CHANNEL_FLAGS2
+ add hl, bc
+ bit SOUND_DUTY, [hl]
+ call nz, HandleDuty
+ bit SOUND_UNKN_0E, [hl]
+ call nz, Handle_0e
+ bit SOUND_CRY_PITCH, [hl]
+ call nz, Handle_crypitch
+ bit SOUND_PITCH_WHEEL, [hl]
+ call nz, ApplyPitchSlide
+ bit SOUND_VIBRATO, [hl]
+ call nz, HandleVibrato
+ bit SOUND_UNKN_0D, [hl]
+ call nz, Handle_0d
+ bit SOUND_UNKN_0B, [hl]
+ call nz, Handle_0b
+ bit SOUND_UNKN_0F, [hl]
+ call nz, HandleNoise
+ ret
+
+HandleDuty:
push hl
- ld hl, $001c
+ ld hl, CHANNEL_SFX_DUTY_LOOP
add hl, bc
ld a, [hl]
rlca
@@ -1133,213 +1123,206 @@ Call_03a_4605:
ld [hl], a
and $c0
ld [wCurTrackDuty], a
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
set 0, [hl]
pop hl
ret
-
-Call_03a_461b:
+ApplyPitchSlide:
push hl
- ld hl, $0010
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- bit 1, [hl]
- jr z, .jr_03a_465e
+ bit SOUND_PITCH_WHEEL_DIR, [hl]
+ jr z, .decreasing
- ld hl, $0023
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT
add hl, bc
ld l, [hl]
- ld h, $00
+ ld h, 0
add hl, de
ld d, h
ld e, l
- ld hl, $0024
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION
add hl, bc
ld a, [hl]
- ld hl, $0025
+ ld hl, CHANNEL_FIELD25
add hl, bc
add [hl]
ld [hl], a
- ld a, $00
+ ld a, 0
adc e
ld e, a
- ld a, $00
+ ld a, 0
adc d
ld d, a
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
ld a, [hl]
cp d
- jp c, .Jump_03a_468b
-
- jr nz, .jr_03a_469e
-
- ld hl, $0021
+ jp c, .finished_pitch_slide
+ jr nz, .continue_pitch_slide
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld a, [hl]
cp e
- jp c, .Jump_03a_468b
-
- jr .jr_03a_469e
+ jp c, .finished_pitch_slide
+ jr .continue_pitch_slide
-.jr_03a_465e
+.decreasing
ld a, e
- ld hl, $0023
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT
add hl, bc
ld e, [hl]
sub e
ld e, a
ld a, d
- sbc $00
+ sbc 0
ld d, a
- ld hl, $0024
+ ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION
add hl, bc
ld a, [hl]
add a
ld [hl], a
ld a, e
- sbc $00
+ sbc 0
ld e, a
ld a, d
- sbc $00
+ sbc 0
ld d, a
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
ld a, d
cp [hl]
- jr c, .jr_03a_468b
-
- jr nz, .jr_03a_469e
-
- ld hl, $0021
+ jr c, .finished_pitch_slide
+ jr nz, .continue_pitch_slide
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld a, e
cp [hl]
- jr nc, .jr_03a_469e
+ jr nc, .continue_pitch_slide
-.Jump_03a_468b
-.jr_03a_468b
- ld hl, $0004
+.finished_pitch_slide
+ ld hl, CHANNEL_FLAGS2
add hl, bc
res 1, [hl]
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
res 1, [hl]
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
-.jr_03a_469e
- ld hl, $0010
+.continue_pitch_slide
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld [hl], e
inc hl
ld [hl], d
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
set 1, [hl]
pop hl
ret
-Call_03a_46ad:
+HandleVibrato:
push hl
- ld hl, $001d
+ ld hl, CHANNEL_VIBRATO_DELAY_COUNT
add hl, bc
ld a, [hl]
and a
- jr nz, .jr_03a_46bf
+ jr nz, .subexit
- ld hl, $0020
+ ld hl, CHANNEL_VIBRATO_RATE
add hl, bc
ld a, [hl]
and $0f
- jr z, .jr_03a_46c2
+ jr z, .toggle
-.jr_03a_46bf
+.subexit
dec [hl]
- jr .jr_03a_46fd
+ jr .quit
-.jr_03a_46c2
+.toggle
ld a, [hl]
swap [hl]
or [hl]
ld [hl], a
- ld hl, $001f
+ ld hl, CHANNEL_VIBRATO_EXTENT
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_46fd
+ jr z, .quit
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- bit 0, [hl]
- jr z, .jr_03a_46e5
+ bit SOUND_VIBRATO_DIR, [hl]
+ jr z, .down
- res 0, [hl]
+ res SOUND_VIBRATO_DIR, [hl]
and $0f
ld d, a
ld a, [wCurTrackFrequency]
sub d
- jr nc, .jr_03a_46f4
+ jr nc, .no_carry
xor a
- jr .jr_03a_46f4
+ jr .no_carry
-.jr_03a_46e5
- set 0, [hl]
+.down
+ set SOUND_VIBRATO_DIR, [hl]
and $f0
swap a
ld d, a
ld a, [wCurTrackFrequency]
add d
- jr nc, .jr_03a_46f4
+ jr nc, .no_carry
ld a, $ff
-.jr_03a_46f4
+.no_carry
ld [wCurTrackFrequency], a
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 1, [hl]
+ set NOTE_FREQ_OVERRIDE, [hl]
-.jr_03a_46fd
+.quit
pop hl
ret
-Call_03a_46ff:
+Handle_0b:
push hl
- ld hl, $0026
+ ld hl, CHANNEL_FIELD25 + 1
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_470b
+ jr z, .set_rest
dec [hl]
- jr .jr_03a_4711
+ jr .done
-.jr_03a_470b
- ld hl, $000c
+.set_rest
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 5, [hl]
+ set NOTE_REST, [hl]
-.jr_03a_4711
+.done
pop hl
ret
-Call_03a_4713:
+Handle_crypitch:
push hl
- ld hl, $0027
+ ld hl, CHANNEL_CRY_PITCH
add hl, bc
ld e, [hl]
inc hl
@@ -1360,201 +1343,196 @@ Call_03a_4713:
ret
-Call_03a_472b:
+Handle_0e:
push hl
- ld hl, $0005
+ ld hl, CHANNEL_FLAGS3
add hl, bc
- bit 2, [hl]
- jr nz, .jr_03a_4738
+ bit SOUND_UNKN_12, [hl]
+ jr nz, .skip
- set 2, [hl]
- jr .jr_03a_4756
+ set SOUND_UNKN_12, [hl]
+ jr .done
-.jr_03a_4738
- res 2, [hl]
- ld hl, $0012
+.skip
+ res SOUND_UNKN_12, [hl]
+ ld hl, CHANNEL_PITCH
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_4756
+ jr z, .done
- ld hl, $0029
+ ld hl, CHANNEL_FIELD29
add hl, bc
add [hl]
ld e, a
- ld hl, $0013
+ ld hl, CHANNEL_OCTAVE
add hl, bc
ld d, [hl]
- call Call_03a_4c84
+ call GetFrequency
ld hl, wCurTrackFrequency
ld [hl], e
inc hl
ld [hl], d
-.jr_03a_4756
- ld hl, $000c
+.done
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 1, [hl]
+ set SOUND_PITCH_WHEEL_DIR, [hl]
pop hl
ret
-Call_03a_475e:
+Handle_0d:
push hl
- ld hl, $002a
+ ld hl, CHANNEL_FIELD2A
add hl, bc
ld e, [hl]
- ld d, $00
+ ld d, 0
ld a, [wCurChannel]
- and $03
- cp $02
- jr nz, .jr_03a_4780
+ maskbits NUM_MUSIC_CHANS
+ cp CHAN3
+ jr nz, .not_ch3
- ld hl, $5125
- call Call_03a_479b
- jr c, .jr_03a_4788
+ ld hl, Data_3a_5125
+ call Functione879b
+ jr c, .rest_done
ld d, a
ld a, [wCurTrackIntensity]
and $c0
or d
- jr .jr_03a_4790
+ jr .intensity_done
-.jr_03a_4780
- ld hl, $5140
- call Call_03a_479b
- jr nc, .jr_03a_4790
+.not_ch3
+ ld hl, Data_3a_5140
+ call Functione879b
+ jr nc, .intensity_done
-.jr_03a_4788
- ld hl, $000c
+.rest_done
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 5, [hl]
+ set NOTE_REST, [hl]
pop hl
ret
-.jr_03a_4790
+.intensity_done
ld [wCurTrackIntensity], a
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 2, [hl]
+ set NOTE_INTENSITY_OVERRIDE, [hl]
pop hl
ret
-Call_03a_479b:
+Functione879b:
add hl, de
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $002b
+ ld hl, CHANNEL_FIELD2A + 1
add hl, bc
push hl
ld l, [hl]
- ld h, $00
+ ld h, 0
add hl, de
ld a, [hl]
pop hl
cp $ff
- jr z, .jr_03a_47b9
+ jr z, .carry
cp $fe
- jr nz, .jr_03a_47b6
+ jr nz, .done_nocarry
xor a
ld [hl], a
ld a, [de]
-.jr_03a_47b6
+.done_nocarry
inc [hl]
and a
ret
-
-
-.jr_03a_47b9
+.carry
scf
ret
-Call_03a_47bb:
- ld hl, $002e
+HandleNoise:
+ ld hl, CHANNEL_FIELD2E
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_47cf
+ jr z, .skip
dec [hl]
- ld hl, $0030
+ ld hl, CHANNEL_FIELD30
add hl, bc
ld a, [hl]
- ld hl, $001b
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld [hl], a
ret
-
-.jr_03a_47cf
- ld hl, $002f
+.skip
+ ld hl, CHANNEL_FIELD2F
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_47e6
+ jr z, .skip2
dec [hl]
- ld hl, $0030
+ ld hl, CHANNEL_FIELD30
add hl, bc
ld a, [hl]
swap a
or [hl]
- ld hl, $001b
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld [hl], a
ret
-
-.jr_03a_47e6
- ld hl, $0030
+.skip2
+ ld hl, CHANNEL_FIELD30
add hl, bc
ld a, [hl]
swap a
- ld hl, $001b
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld [hl], a
- ld hl, $0004
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- res 7, [hl]
+ res SOUND_UNKN_0F, [hl]
ret
-Functione87f9::
- ld hl, $0003
+ReadNoiseSample::
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 4, [hl]
+ bit SOUND_NOISE, [hl]
ret z
- ld a, [wc1a1]
+ ld a, [wNoiseSampleDelay]
and a
- jr z, .jr_03a_480b
+ jr z, .get_new_sample
dec a
- ld [wc1a1], a
+ ld [wNoiseSampleDelay], a
ret
-
-.jr_03a_480b
- ld hl, wc19f
+.get_new_sample
+ ld hl, wNoiseSampleAddress
ld e, [hl]
inc hl
ld d, [hl]
ld a, [de]
inc de
cp $ff
- jr z, .jr_03a_4838
+ jr z, .done
and $0f
inc a
- ld [wc1a1], a
+ ld [wNoiseSampleDelay], a
ld a, [de]
inc de
ld [wCurTrackIntensity], a
@@ -1563,103 +1541,98 @@ Functione87f9::
ld [wCurTrackFrequency], a
xor a
ld [wCurTrackFrequency + 1], a
- ld hl, wc19f
+ ld hl, wNoiseSampleAddress
ld [hl], e
inc hl
ld [hl], d
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 4, [hl]
+ set NOTE_NOISE_SAMPLING, [hl]
ret
-
-.jr_03a_4838
+.done
ret
-Functione8839::
+HaltMusicWhileSFXPlaying::
ld a, [wSFXPriority]
and a
ret z
ld a, [wCurChannel]
- cp $04
+ cp CHAN5
ret nc
call IsAnySFXOn
ret nc
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 5, [hl]
+ set NOTE_REST, [hl]
ret
-Functione884f::
- call Call_03a_4c65
- cp $ff
- jr z, .jr_03a_4876
+ParseMusic::
+ call GetMusicByte
+ cp sound_ret_cmd
+ jr z, .end_music
- cp $d0
- jr nc, .jr_03a_489a
+ cp FIRST_MUSIC_CMD
+ jr nc, .parse_commands
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 3, [hl]
- jr nz, .jr_03a_486e
+ bit SOUND_SFX, [hl]
+ jr nz, .parse_sfx_or_rest
- bit 5, [hl]
- jr nz, .jr_03a_486e
+ bit SOUND_REST, [hl]
+ jr nz, .parse_sfx_or_rest
- bit 4, [hl]
- jr nz, .jr_03a_4872
+ bit SOUND_NOISE, [hl]
+ jr nz, .parse_noise
- call Call_03a_48be
+ call _ParseMusic
ret
-
-.jr_03a_486e
- call Call_03a_48f5
+.parse_sfx_or_rest
+ call ParseSFXOrRest
ret
-
-.jr_03a_4872
- call Call_03a_4922
+.parse_noise
+ call GetNoiseSample
ret
-
-.jr_03a_4876
- ld hl, $0003
+.end_music
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 1, [hl]
- jr nz, .jr_03a_489a
+ bit SOUND_SUBROUTINE, [hl]
+ jr nz, .parse_commands
call IsChannelSFXOn
- jr nc, .jr_03a_4896
+ jr nc, .ok
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 5, [hl]
- call nz, Call_03a_489f
+ bit SOUND_REST, [hl]
+ call nz, RestoreVolume
ld a, [wCurChannel]
- cp $04
- jr nz, .jr_03a_4896
+ cp CHAN5
+ jr nz, .ok
xor a
ldh [rNR10], a
-.jr_03a_4896
+.ok
call StopChannel
ret
+.parse_commands
+ call ParseMusicCommand
+ jr ParseMusic
-.jr_03a_489a
- call Call_03a_4958
- jr Functione884f
-
-Call_03a_489f:
+RestoreVolume:
ld a, [wCurChannel]
- cp $04
+ cp CHAN5
ret nz
xor a
@@ -1677,109 +1650,119 @@ Call_03a_489f:
ret
-Call_03a_48be:
+_ParseMusic:
ld a, [wCurMusicByte]
- and $0f
- call Call_03a_4cb4
+ and $f
+ call SetNoteDuration
ld a, [wCurMusicByte]
swap a
- and $0f
- jr z, .jr_03a_48ee
+ and $f
+ jr z, .rest
- ld hl, $0012
+ ld hl, CHANNEL_PITCH
add hl, bc
ld [hl], a
ld e, a
- ld hl, $0013
+ ld hl, CHANNEL_OCTAVE
add hl, bc
ld d, [hl]
- call Call_03a_4c84
- ld hl, $0010
+ call GetFrequency
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld [hl], e
inc hl
ld [hl], d
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 4, [hl]
- call Call_03a_44fe
+ set NOTE_NOISE_SAMPLING, [hl]
+ call LoadNote
ret
-.jr_03a_48ee
- ld hl, $000c
+.rest
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 5, [hl]
+ set NOTE_REST, [hl]
ret
-Call_03a_48f5:
- ld hl, $000c
+ParseSFXOrRest:
+; turn noise sampling on
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
- set 4, [hl]
+ set NOTE_NOISE_SAMPLING, [hl]
ld a, [wCurMusicByte]
- call Call_03a_4cb4
- call Call_03a_4c65
- ld hl, $000f
+ call SetNoteDuration
+
+; update volume envelope from next param
+ call GetMusicByte
+ ld hl, CHANNEL_INTENSITY
add hl, bc
ld [hl], a
- call Call_03a_4c65
- ld hl, $0010
+
+; update lo frequence from next param
+ call GetMusicByte
+ ld hl, CHANNEL_FREQUENCY
add hl, bc
ld [hl], a
+
+; on noise channel?
ld a, [wCurChannel]
- and $03
- cp $03
+ maskbits NUM_MUSIC_CHANS
+ cp CHAN4
ret z
- call Call_03a_4c65
- ld hl, $0011
+; update hi frequency from next param
+ call GetMusicByte
+ ld hl, CHANNEL_FREQUENCY + 1
add hl, bc
ld [hl], a
ret
-Call_03a_4922:
+GetNoiseSample:
ld a, [wCurChannel]
- cp $03
+ cp CHAN4
ret nz
ld a, [wCurMusicByte]
- and $0f
- call Call_03a_4cb4
- ld a, [wc1a3]
+ and $f
+ call SetNoteDuration
+
+ ld a, [wNoiseSampleSet]
ld e, a
- ld d, $00
- ld hl, $51f4
+ ld d, 0
+ ld hl, Drumkits
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
+
ld a, [wCurMusicByte]
swap a
- and $0f
+ and $f
ret z
ld e, a
- ld d, $00
+ ld d, 0
add hl, de
add hl, de
ld a, [hli]
- ld [wc19f], a
+ ld [wNoiseSampleAddress], a
ld a, [hl]
- ld [wc1a0], a
+ ld [wNoiseSampleAddress + 1], a
xor a
- ld [wc1a1], a
+ ld [wNoiseSampleDelay], a
ret
-Call_03a_4958:
+ParseMusicCommand:
ld a, [wCurMusicByte]
- sub $d0
+ sub FIRST_MUSIC_CMD
ld e, a
- ld d, $00
- ld hl, $4969
+ ld d, 0
+ ld hl, MusicCommands
add hl, de
add hl, de
ld a, [hli]
@@ -1787,210 +1770,163 @@ Call_03a_4958:
ld l, a
jp hl
-
- jp nc, $d24b
-
- ld c, e
-
- db $d2, $4b, $d2, $4b, $d2, $4b, $d2, $4b, $d2, $4b
-
- db $d2
- ld c, e
-
- db $8f, $4b
-
- db $dd
- ld c, e
-
- db $c6, $4b, $b0, $4b
-
- cp l
- ld c, e
-
- db $a3, $4b
-
- ld b, [hl]
- ld c, e
- ld l, l
- ld c, e
-
- db $fd, $4a, $cb, $4a
-
- cp h
- ld c, d
-
- db $7b, $4b
-
- db $ec
- ld c, e
-
- db $f9, $4b
-
- inc h
- ld c, e
- scf
- ld c, e
- ld e, [hl]
- ld c, e
- ld [$2f4c], sp
- ld c, h
- ld d, a
- ld c, h
- inc h
- ld c, h
- ld a, [hli]
- ld c, h
- add a
- ld c, d
- and $4b
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
- ret
-
-
- ld c, c
-
- db $b6, $4a
-
- ld d, a
- ld c, d
- ld h, b
- ld c, d
- dec b
- ld c, d
-
- db $15, $4a, $df, $49, $ca, $49
-
- ret
-
-
- ld hl, $0003
+MusicCommands:
+ dw Music_Octave8
+ dw Music_Octave7
+ dw Music_Octave6
+ dw Music_Octave5
+ dw Music_Octave4
+ dw Music_Octave3
+ dw Music_Octave2
+ dw Music_Octave1
+ dw Music_NoteType
+ dw Music_Transpose
+ dw Music_Tempo
+ dw Music_DutyCycle
+ dw Music_VolumeEnvelope
+ dw Music_PitchSweep
+ dw Music_DutyCyclePattern
+ dw Music_ToggleSFX
+ dw Music_PitchSlide
+ dw Music_Vibrato
+ dw MusicE2
+ dw Music_ToggleNoise
+ dw Music_ForceStereoPanning
+ dw Music_Volume
+ dw Music_PitchOffset
+ dw MusicE7
+ dw MusicE8
+ dw Music_TempoRelative
+ dw Music_RestartChannel
+ dw Music_NewSong
+ dw Music_SFXPriorityOn
+ dw Music_SFXPriorityOff
+ dw MusicEE
+ dw Music_StereoPanning
+ dw MusicF0
+ dw MusicF1
+ dw MusicF2
+ dw MusicF3
+ dw MusicF4
+ dw MusicF5
+ dw MusicF6
+ dw MusicF7
+ dw MusicF8
+ dw MusicF9
+ dw Music_SetCondition
+ dw Music_JumpIf
+ dw Music_Jump
+ dw Music_Loop
+ dw Music_Call
+ dw Music_Ret
+
+MusicF0:
+MusicF1:
+MusicF2:
+MusicF3:
+MusicF4:
+MusicF5:
+MusicF6:
+MusicF7:
+MusicF8:
+ ret
+
+Music_Ret:
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- res 1, [hl]
- ld hl, $0008
+ res SOUND_SUBROUTINE, [hl]
+ ld hl, CHANNEL_LAST_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
ret
-
- call Call_03a_4c65
+Music_Call:
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
push de
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0008
+ ld hl, CHANNEL_LAST_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
pop de
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- set 1, [hl]
+ set SOUND_SUBROUTINE, [hl]
ret
-
- call Call_03a_4c65
+Music_Jump:
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
ret
-
- call Call_03a_4c65
- ld hl, $0003
+Music_Loop:
+ call GetMusicByte
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 2, [hl]
- jr nz, .jr_03a_4a2b
+ bit SOUND_LOOPING, [hl]
+ jr nz, .checkloop
and a
- jr z, .jr_03a_4a34
+ jr z, .loop
dec a
- set 2, [hl]
- ld hl, $0018
+ set SOUND_LOOPING, [hl]
+ ld hl, CHANNEL_LOOP_COUNT
add hl, bc
ld [hl], a
-.jr_03a_4a2b
- ld hl, $0018
+.checkloop
+ ld hl, CHANNEL_LOOP_COUNT
add hl, bc
ld a, [hl]
and a
- jr z, .jr_03a_4a44
-
+ jr z, .endloop
dec [hl]
-.jr_03a_4a34
- call Call_03a_4c65
+.loop
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
ret
-
-.jr_03a_4a44
- ld hl, $0003
+.endloop
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- res 2, [hl]
- ld hl, $0006
+ res SOUND_LOOPING, [hl]
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
@@ -2002,21 +1938,20 @@ Call_03a_4958:
ld [hl], e
ret
-
- call Call_03a_4c65
- ld hl, $000d
+Music_SetCondition:
+ call GetMusicByte
+ ld hl, CHANNEL_CONDITION
add hl, bc
ld [hl], a
ret
-
- call Call_03a_4c65
- ld hl, $000d
+Music_JumpIf:
+ call GetMusicByte
+ ld hl, CHANNEL_CONDITION
add hl, bc
cp [hl]
- jr z, .jr_03a_4a77
-
- ld hl, $0006
+ jr z, .jump
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
@@ -2028,31 +1963,30 @@ Call_03a_4958:
ld [hl], e
ret
-
-.jr_03a_4a77
- call Call_03a_4c65
+.jump
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
ret
-
+MusicEE:
ld a, [wCurChannel]
- and $03
+ maskbits NUM_MUSIC_CHANS
ld e, a
- ld d, $00
+ ld d, 0
ld hl, wChannel1JumpCondition
add hl, de
ld a, [hl]
and a
- jr nz, .jr_03a_4aa4
+ jr nz, .jump
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
@@ -2064,57 +1998,56 @@ Call_03a_4958:
ld [hl], e
ret
-
-.jr_03a_4aa4
- ld [hl], $00
- call Call_03a_4c65
+.jump
+ ld [hl], 0
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
ld [hl], d
ret
-
- ld a, $01
+MusicF9:
+ ld a, 1
ld [wc1b3], a
ret
-
- call Call_03a_4c65
- ld hl, $002c
+MusicE2:
+ call GetMusicByte
+ ld hl, CHANNEL_FIELD2C
add hl, bc
ld [hl], a
- ld hl, $0004
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 3, [hl]
+ set SOUND_UNKN_0B, [hl]
ret
-
- ld hl, $0004
+Music_Vibrato:
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 0, [hl]
- res 0, [hl]
- call Call_03a_4c65
- ld hl, $001e
+ set SOUND_VIBRATO, [hl]
+ res SOUND_VIBRATO, [hl]
+ call GetMusicByte
+ ld hl, CHANNEL_VIBRATO_DELAY
add hl, bc
ld [hl], a
- call Call_03a_4c65
- ld hl, $001f
+ call GetMusicByte
+ ld hl, CHANNEL_VIBRATO_EXTENT
add hl, bc
ld d, a
and $f0
swap a
srl a
ld e, a
- adc $00
+ adc 0
swap a
or e
ld [hl], a
- ld hl, $0020
+ ld hl, CHANNEL_VIBRATO_RATE
add hl, bc
ld a, d
and $0f
@@ -2124,208 +2057,205 @@ Call_03a_4958:
ld [hl], a
ret
-
- call Call_03a_4c65
- ld [wc196], a
- call Call_03a_4c65
+Music_PitchSlide:
+ call GetMusicByte
+ ld [wCurNoteDuration], a
+ call GetMusicByte
ld d, a
- and $0f
+ and $f
ld e, a
ld a, d
swap a
- and $0f
+ and $f
ld d, a
- call Call_03a_4c84
- ld hl, $0021
+ call GetFrequency
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET
add hl, bc
ld [hl], e
- ld hl, $0022
+ ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1
add hl, bc
ld [hl], d
- ld hl, $0004
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 1, [hl]
-
-Jump_03a_4b23:
+ set SOUND_PITCH_WHEEL, [hl]
ret
-
- ld hl, $0004
+Music_PitchOffset:
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 4, [hl]
- ld hl, $0028
+ set SOUND_CRY_PITCH, [hl]
+ ld hl, CHANNEL_CRY_PITCH + 1
add hl, bc
- call Call_03a_4c65
+ call GetMusicByte
ld [hld], a
- call Call_03a_4c65
+ call GetMusicByte
ld [hl], a
ret
-
- ld hl, $0004
+MusicE7:
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 6, [hl]
- call Call_03a_4c65
- ld hl, $0029
+ set SOUND_UNKN_0E, [hl]
+ call GetMusicByte
+ ld hl, CHANNEL_FIELD29
add hl, bc
ld [hl], a
ret
-
- ld hl, $0004
+Music_DutyCyclePattern:
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 2, [hl]
- call Call_03a_4c65
+ set SOUND_DUTY, [hl]
+ call GetMusicByte
rrca
rrca
- ld hl, $001c
+ ld hl, CHANNEL_SFX_DUTY_LOOP
add hl, bc
ld [hl], a
and $c0
- ld hl, $000e
+ ld hl, CHANNEL_DUTY_CYCLE
add hl, bc
ld [hl], a
ret
-
- ld hl, $0004
+MusicE8:
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 5, [hl]
- call Call_03a_4c65
- ld hl, $002a
+ set SOUND_UNKN_0D, [hl]
+ call GetMusicByte
+ ld hl, CHANNEL_FIELD2A
add hl, bc
ld [hl], a
ret
-
- ld hl, $0003
+Music_ToggleSFX:
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 3, [hl]
- jr z, .jr_03a_4b78
-
- res 3, [hl]
+ bit SOUND_SFX, [hl]
+ jr z, .on
+ res SOUND_SFX, [hl]
ret
-
-
-.jr_03a_4b78
- set 3, [hl]
+.on
+ set SOUND_SFX, [hl]
ret
-
- ld hl, $0003
+Music_ToggleNoise:
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- bit 4, [hl]
- jr z, .jr_03a_4b86
-
- res 4, [hl]
+ bit SOUND_NOISE, [hl]
+ jr z, .on
+ res SOUND_NOISE, [hl]
ret
-
-
-.jr_03a_4b86
- set 4, [hl]
- call Call_03a_4c65
- ld [wc1a3], a
+.on
+ set SOUND_NOISE, [hl]
+ call GetMusicByte
+ ld [wNoiseSampleSet], a
ret
-
- call Call_03a_4c65
- ld hl, $002d
+Music_NoteType:
+ call GetMusicByte
+ ld hl, CHANNEL_NOTE_LENGTH
add hl, bc
ld [hl], a
ld a, [wCurChannel]
- and $03
- cp $03
+ maskbits NUM_MUSIC_CHANS
+ cp CHAN4
ret z
-
- call Call_03a_4bbd
+ call Music_VolumeEnvelope
ret
-
- call Call_03a_4c65
+Music_PitchSweep:
+ call GetMusicByte
ld [wPitchSweep], a
- ld hl, $000c
+ ld hl, CHANNEL_NOTE_FLAGS
add hl, bc
set 3, [hl]
ret
-
- call Call_03a_4c65
+Music_DutyCycle:
+ call GetMusicByte
rrca
rrca
and $c0
- ld hl, $000e
+ ld hl, CHANNEL_DUTY_CYCLE
add hl, bc
ld [hl], a
ret
-Call_03a_4bbd:
- call Call_03a_4c65
- ld hl, $000f
+Music_VolumeEnvelope:
+ call GetMusicByte
+ ld hl, CHANNEL_INTENSITY
add hl, bc
ld [hl], a
ret
-
- call Call_03a_4c65
+Music_Tempo:
+ call GetMusicByte
ld d, a
- call Call_03a_4c65
+ call GetMusicByte
ld e, a
call SetGlobalTempo
ret
-
- ld hl, $0013
+Music_Octave8:
+Music_Octave7:
+Music_Octave6:
+Music_Octave5:
+Music_Octave4:
+Music_Octave3:
+Music_Octave2:
+Music_Octave1:
+ ld hl, CHANNEL_OCTAVE
add hl, bc
ld a, [wCurMusicByte]
- and $07
+ and 7
ld [hl], a
ret
-
- call Call_03a_4c65
- ld hl, $0014
+Music_Transpose:
+ call GetMusicByte
+ ld hl, CHANNEL_PITCH_OFFSET
add hl, bc
ld [hl], a
ret
-
+Music_StereoPanning:
ld a, [wce5f]
bit 5, a
ret z
+Music_ForceStereoPanning:
call SetLRTracks
- call Call_03a_4c65
- ld hl, $001b
+ call GetMusicByte
+ ld hl, CHANNEL_TRACKS
add hl, bc
and [hl]
ld [hl], a
ret
-
- call Call_03a_4c65
+Music_Volume:
+ call GetMusicByte
ld a, [wMusicFade]
and a
ret nz
-
ld a, [wCurMusicByte]
ld [wVolume], a
ret
-
- call Call_03a_4c65
+Music_TempoRelative:
+ call GetMusicByte
ld e, a
+; check sign
cp $80
- jr nc, .jr_03a_4c14
-
- ld d, $00
- jr .jr_03a_4c16
-
-.jr_03a_4c14
- ld d, $ff
-
-.jr_03a_4c16
- ld hl, $0019
+ jr nc, .negative
+; positive
+ ld d, 0
+ jr .ok
+.negative
+ ld d, -1
+.ok
+ ld hl, CHANNEL_TEMPO
add hl, bc
ld a, [hli]
ld h, [hl]
@@ -2336,30 +2266,30 @@ Call_03a_4bbd:
call SetGlobalTempo
ret
-
- ld a, $01
+Music_SFXPriorityOn:
+ ld a, 1
ld [wSFXPriority], a
ret
-
+Music_SFXPriorityOff:
xor a
ld [wSFXPriority], a
ret
-
- ld hl, $0000
+Music_RestartChannel:
+ ld hl, CHANNEL_MUSIC_ID
add hl, bc
ld a, [hli]
ld [wMusicID], a
ld a, [hl]
ld [wMusicID + 1], a
- ld hl, $0002
+ ld hl, CHANNEL_MUSIC_BANK
add hl, bc
ld a, [hl]
ld [wMusicBank], a
- call Call_03a_4c65
+ call GetMusicByte
ld l, a
- call Call_03a_4c65
+ call GetMusicByte
ld h, a
ld e, [hl]
inc hl
@@ -2370,32 +2300,31 @@ Call_03a_4bbd:
pop bc
ret
-
- call Call_03a_4c65
+Music_NewSong:
+ call GetMusicByte
ld e, a
- call Call_03a_4c65
+ call GetMusicByte
ld d, a
push bc
call _PlayMusic
pop bc
ret
-
-Call_03a_4c65:
+GetMusicByte:
push hl
push de
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0002
+ ld hl, CHANNEL_MUSIC_BANK
add hl, bc
ld a, [hl]
call _LoadMusicByte
ld [wCurMusicByte], a
inc de
- ld hl, $0006
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
ld [hl], e
inc hl
@@ -2405,91 +2334,113 @@ Call_03a_4c65:
ret
-Call_03a_4c84:
- ld hl, $0014
+GetFrequency:
+; generate frequency
+; input:
+; d: octave
+; e: pitch
+; output:
+; de: frequency
+
+; get octave
+ ld hl, CHANNEL_PITCH_OFFSET
add hl, bc
ld a, [hl]
swap a
- and $0f
+ and $f
add d
+
push af
- ld hl, $0014
+
+ ld hl, CHANNEL_PITCH_OFFSET
add hl, bc
ld a, [hl]
- and $0f
+ and $f
ld l, a
- ld d, $00
+ ld d, 0
ld h, d
add hl, de
add hl, hl
- ld de, $4f73
+
+ ld de, FrequencyTable
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
+
pop af
-.jr_03a_4ca4
- cp $07
- jr nc, .jr_03a_4caf
+.loop
+; [7 - octave] loops
+ cp 7
+ jr nc, .ok
sra d
rr e
inc a
- jr .jr_03a_4ca4
+ jr .loop
-.jr_03a_4caf
+.ok
ld a, d
and $07
ld d, a
ret
-Call_03a_4cb4:
+SetNoteDuration:
+; input: a = note duration in 16ths
+
inc a
ld e, a
- ld d, $00
- ld hl, $002d
+ ld d, 0
+ ld hl, CHANNEL_NOTE_LENGTH
add hl, bc
ld a, [hl]
- ld l, $00
- call Call_03a_4cdf
+ ld l, 0
+ call .Multiply
ld a, l
- ld hl, $0019
+ ld hl, CHANNEL_TEMPO
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0016
+ ld hl, CHANNEL_FIELD16
add hl, bc
ld l, [hl]
- call Call_03a_4cdf
+ call .Multiply
ld e, l
ld d, h
- ld hl, $0016
+ ld hl, CHANNEL_FIELD16
add hl, bc
ld [hl], e
- ld hl, $0015
+ ld hl, CHANNEL_NOTE_DURATION
add hl, bc
ld [hl], d
ret
-Call_03a_4cdf:
- ld h, $00
+.Multiply:
+; multiplies a and de
+; adds the result to l
+; stores the result in hl
+ ld h, 0
-.jr_03a_4ce1
+.loop
+; halve a
srl a
- jr nc, .jr_03a_4ce6
+ jr nc, .skip
+; add the remainder to the result
add hl, de
-.jr_03a_4ce6
+.skip
+; de * 2
sla e
rl d
- and a
- jr nz, .jr_03a_4ce1
+; done multiplying?
+ and a
+ jr nz, .loop
ret
SetGlobalTempo:
@@ -2561,7 +2512,7 @@ SetLRTracks:
maskbits NUM_MUSIC_CHANS
ld e, a
ld d, 0
- ld hl, Data_03a_52b3
+ ld hl, LRTracks
add hl, de
ld a, [hl]
ld hl, CHANNEL_TRACKS
@@ -2611,83 +2562,93 @@ _PlayCryHeader::
ld [hl], e
inc hl
ld [hl], d
+
ld hl, CryHeaderPointers
add hl, de
add hl, de
add hl, de
+
ld a, [hli]
ld [wMusicBank], a
+
ld e, [hl]
inc hl
ld d, [hl]
+
call LoadMusicByte
rlca
rlca
- and $03
+ maskbits NUM_MUSIC_CHANS
inc a
-.jr_03a_4db8
+.loop
push af
call LoadChannel
- ld hl, $0003
+
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- set 5, [hl]
- ld hl, $0004
+ set SOUND_REST, [hl]
+
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 4, [hl]
- ld hl, $0027
+ set SOUND_CRY_PITCH, [hl]
+
+ ld hl, CHANNEL_CRY_PITCH
add hl, bc
ld a, [wCryPitch]
ld [hli], a
ld a, [wCryPitch + 1]
ld [hl], a
+
ld a, [wCurChannel]
- and $03
- cp $03
- jr nc, .jr_03a_4de9
+ maskbits NUM_MUSIC_CHANS
+ cp 3
+ jr nc, .start
- ld hl, $0019
+; no tempo for ch4
+ ld hl, CHANNEL_TEMPO
add hl, bc
ld a, [wCryLength]
ld [hli], a
ld a, [wCryLength + 1]
ld [hl], a
-.jr_03a_4de9
+.start
call StartChannel
- ld a, [wc1b9]
+ ld a, [wStereoPanningMask]
and a
- jr z, .jr_03a_4e07
+ jr z, .next
ld a, [wce5f]
bit 5, a
- jr z, .jr_03a_4e07
+ jr z, .next
- ld hl, $001b
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld a, [hl]
- ld hl, wc1ba
+ ld hl, wCryTracks
and [hl]
- ld hl, $001b
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld [hl], a
-.jr_03a_4e07
+.next
pop af
dec a
- jr nz, .jr_03a_4db8
+ jr nz, .loop
ld a, [wLastVolume]
and a
- jr nz, .jr_03a_4e1c
+ jr nz, .end
ld a, [wVolume]
ld [wLastVolume], a
- ld a, $77
+ ld a, MAX_VOLUME
ld [wVolume], a
-.jr_03a_4e1c
- ld a, $01
+.end
+; stop playing music
+ ld a, 1
ld [wSFXPriority], a
ret
@@ -2697,10 +2658,12 @@ _PlaySFX::
ld [hl], e
inc hl
ld [hl], d
- ld hl, $536d
+ ld hl, SFXPointers
+; three byte pointers
add hl, de
add hl, de
add hl, de
+; get bank
ld a, [hli]
ld [wMusicBank], a
ld e, [hl]
@@ -2709,100 +2672,110 @@ _PlaySFX::
call LoadMusicByte
rlca
rlca
- and $03
+ maskbits NUM_MUSIC_CHANS
inc a
-.jr_03a_4e3d
+.start_channels
push af
call LoadChannel
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- set 3, [hl]
+ set SOUND_SFX, [hl]
call StartChannel
pop af
dec a
- jr nz, .jr_03a_4e3d
-
+ jr nz, .start_channels
ret
-
ld a, [wce5f]
- bit 5, a
+ bit 5, a ; Stereo flag?
jr z, _PlaySFX
ld hl, wMusicID
ld [hl], e
inc hl
ld [hl], d
- ld hl, $536d
+
+ ld hl, SFXPointers
add hl, de
add hl, de
add hl, de
+
ld a, [hli]
ld [wMusicBank], a
ld e, [hl]
inc hl
ld d, [hl]
+
call LoadMusicByte
rlca
rlca
- and $03
+ maskbits NUM_MUSIC_CHANS
inc a
-.jr_03a_4e71
+.loop
push af
call LoadChannel
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
+
add hl, bc
- set 3, [hl]
+ set SOUND_SFX, [hl]
push de
+
ld a, [wCurChannel]
- and $03
+ maskbits NUM_MUSIC_CHANS
ld e, a
- ld d, $00
- ld hl, $52b3
+ ld d, 0
+ ld hl, LRTracks
add hl, de
ld a, [hl]
- ld hl, wc1b9
+ ld hl, wStereoPanningMask
and [hl]
- ld hl, $001b
+
+ ld hl, CHANNEL_TRACKS
add hl, bc
ld [hl], a
- ld hl, $0030
+
+ ld hl, CHANNEL_FIELD30
add hl, bc
ld [hl], a
- ld a, [wc1ba]
- cp $02
- jr c, .jr_03a_4eb1
+ ld a, [wCryTracks]
+
+ cp 2
+ jr c, .skip
+
+ ld a, [wSFXDuration]
- ld a, [wc1bb]
- ld hl, $002e
+ ld hl, CHANNEL_FIELD2E
add hl, bc
ld [hl], a
- ld hl, $002f
+
+ ld hl, CHANNEL_FIELD2F
add hl, bc
ld [hl], a
- ld hl, $0004
+
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 7, [hl]
+ set SOUND_UNKN_0F, [hl]
-.jr_03a_4eb1
+.skip
pop de
- ld hl, $0003
+
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- set 0, [hl]
+ set SOUND_CHANNEL_ON, [hl]
+
pop af
dec a
- jr nz, .jr_03a_4e71
+ jr nz, .loop
ret
-
ld hl, wMusicID
ld [hl], e
inc hl
ld [hl], d
- ld hl, $536d
+ ld hl, SFXPointers
add hl, de
add hl, de
add hl, de
@@ -2814,41 +2787,41 @@ _PlaySFX::
call LoadMusicByte
rlca
rlca
- and $03
+ maskbits NUM_MUSIC_CHANS
inc a
-.jr_03a_4ed8
+.cry_channels
push af
call LoadChannel
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- set 3, [hl]
- ld hl, $0004
+ set SOUND_SFX, [hl]
+ ld hl, CHANNEL_FLAGS2
add hl, bc
- set 4, [hl]
- ld hl, $0027
+ set SOUND_CRY_PITCH, [hl]
+ ld hl, CHANNEL_CRY_PITCH
add hl, bc
ld a, [wCryPitch]
ld [hli], a
ld a, [wCryPitch + 1]
ld [hl], a
ld a, [wCurChannel]
- and $03
- cp $03
- jr nc, .jr_03a_4f09
+ maskbits NUM_MUSIC_CHANS
+ cp 3
+ jr nc, .cry_ok
- ld hl, $0019
+ ld hl, CHANNEL_TEMPO
add hl, bc
ld a, [wCryLength]
ld [hli], a
ld a, [wCryLength + 1]
ld [hl], a
-.jr_03a_4f09
+.cry_ok
call StartChannel
pop af
dec a
- jr nz, .jr_03a_4ed8
+ jr nz, .cry_channels
ret
@@ -2856,21 +2829,21 @@ _PlaySFX::
LoadChannel::
call LoadMusicByte
inc de
- and $07
+ and 7
ld [wCurChannel], a
ld c, a
- ld b, $00
- ld hl, $52b7
+ ld b, 0
+ ld hl, ChannelPointers
add hl, bc
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
- ld hl, $0003
+ ld hl, CHANNEL_FLAGS1
add hl, bc
- res 0, [hl]
- call Call_03a_4f51
- ld hl, $0006
+ res SOUND_CHANNEL_ON, [hl]
+ call ChannelInit
+ ld hl, CHANNEL_MUSIC_ADDRESS
add hl, bc
call LoadMusicByte
ld [hli], a
@@ -2878,38 +2851,38 @@ LoadChannel::
call LoadMusicByte
ld [hl], a
inc de
- ld hl, $0000
+ ld hl, CHANNEL_MUSIC_ID
add hl, bc
ld a, [wMusicID]
ld [hli], a
ld a, [wMusicID + 1]
ld [hl], a
- ld hl, $0002
+ ld hl, CHANNEL_MUSIC_BANK
add hl, bc
ld a, [wMusicBank]
ld [hl], a
ret
-Call_03a_4f51:
+ChannelInit:
push de
xor a
- ld hl, $0000
+ ld hl, CHANNEL_MUSIC_ID
add hl, bc
- ld e, $32
+ ld e, CHANNEL_STRUCT_LENGTH
-.jr_03a_4f59
+.loop
ld [hli], a
dec e
- jr nz, .jr_03a_4f59
+ jr nz, .loop
- ld hl, $0019
+ ld hl, CHANNEL_TEMPO
add hl, bc
xor a
ld [hli], a
inc a
ld [hl], a
- ld hl, $002d
+ ld hl, CHANNEL_NOTE_LENGTH
add hl, bc
ld [hl], a
pop de
@@ -2921,33 +2894,258 @@ LoadMusicByte::
call _LoadMusicByte
ret
-Data_4f73:
- db $00, $00, $2C, $F8, $9D, $F8, $07, $F9, $6B, $F9, $CA, $F9, $23, $FA, $77, $FA, $C7, $FA, $12, $FB, $58, $FB, $9B, $FB, $DA, $FB, $16, $FC, $4E, $FC, $83, $FC, $B5, $FC, $E5, $FC, $11, $FD, $3B, $FD, $63, $FD, $89, $FD, $AC, $FD, $CD, $FD, $ED, $FD
+FrequencyTable:
+ dw 0 ; __
+ dw $f82c ; C_
+ dw $f89d ; C#
+ dw $f907 ; D_
+ dw $f96b ; D#
+ dw $f9ca ; E_
+ dw $fa23 ; F_
+ dw $fa77 ; F#
+ dw $fac7 ; G_
+ dw $fb12 ; G#
+ dw $fb58 ; A_
+ dw $fb9b ; A#
+ dw $fbda ; B_
+ dw $fc16 ; C_
+ dw $fc4e ; C#
+ dw $fc83 ; D_
+ dw $fcb5 ; D#
+ dw $fce5 ; E_
+ dw $fd11 ; F_
+ dw $fd3b ; F#
+ dw $fd63 ; G_
+ dw $fd89 ; G#
+ dw $fdac ; A_
+ dw $fdcd ; A#
+ dw $fded ; B_
WaveSamples:
- db $02, $46, $8A, $CE, $FF, $FE, $ED, $DC, $CB, $A9, $87, $65, $44, $33, $22, $11 ; 0
- db $02, $46, $8A, $CE, $EF, $FF, $FE, $EE, $DD, $CB, $A9, $87, $65, $43, $22, $11 ; 1
- db $13, $69, $BD, $EE, $EE, $FF, $FF, $ED, $DE, $FF, $FF, $EE, $EE, $DB, $96, $31 ; 2
- db $02, $46, $8A, $CD, $EF, $FE, $DE, $FF, $EE, $DC, $BA, $98, $76, $54, $32, $10 ; 3
- db $01, $23, $45, $67, $8A, $CD, $EE, $F7, $7F, $EE, $DC, $A8, $76, $54, $32, $10 ; 4
- db $00, $23, $45, $67, $8A, $C7, $EE, $F7, $7F, $EE, $D7, $A8, $76, $54, $32, $14 ; 5
- db $01, $02, $03, $04, $05, $06, $07, $08, $09, $0A, $0B, $0C, $0D, $0E, $0F, $0F ; 6
- db $0F, $0F, $0E, $0E, $0D, $0D, $0C, $0C, $0B, $0B, $0A, $0A, $09, $09, $08, $08 ; 7
- db $07, $07, $06, $06, $05, $05, $04, $04, $03, $03, $02, $02, $01, $01, $00, $00 ; 8
- db $FF, $FF, $FF, $FF, $88, $88, $88, $88, $00, $00, $00, $00, $88, $88, $88, $88 ; 9
- db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00 ; a
- db $EE, $EE, $EE, $EE, $EE, $EE, $EE, $EE, $00, $00, $00, $00, $00, $00, $00, $00 ; b
- db $DD, $DD, $DD, $DD, $DD, $DD, $DD, $DD, $00, $00, $00, $00, $00, $00, $00, $00 ; c
- db $CC, $CC, $CC, $CC, $CC, $CC, $CC, $CC, $00, $00, $00, $00, $00, $00, $00, $00 ; d
- db $BB, $BB, $BB, $BB, $BB, $BB, $BB, $BB, $00, $00, $00, $00, $00, $00, $00, $00 ; e
- db $AA, $AA, $AA, $AA, $AA, $AA, $AA, $AA, $00, $00, $00, $00, $00, $00, $00, $00 ; f
-
-Filler_03a_50a5:
- db $99, $99, $99, $99, $99, $99, $99, $99, $00, $00, $00, $00, $00, $00, $00, $00, $88, $88, $88, $88, $88, $88, $88, $88, $00, $00, $00, $00, $00, $00, $00, $00, $77, $77, $77, $77, $77, $77, $77, $77, $00, $00, $00, $00, $00, $00, $00, $00, $66, $66, $66, $66, $66, $66, $66, $66, $00, $00, $00, $00, $00, $00, $00, $00, $55, $55, $55, $55, $55, $55, $55, $55, $00, $00, $00, $00, $00, $00, $00, $00, $44, $44, $44, $44, $44, $44, $44, $44, $00, $00, $00, $00, $00, $00, $00, $00, $33, $33, $33, $33, $33, $33, $33, $33, $00, $00, $00, $00, $00, $00, $00, $00, $22, $22, $22, $22, $22, $22, $22, $22, $00, $00, $00, $00, $00, $00, $00, $00, $31, $51, $31, $51, $31, $51, $31, $51, $31, $51, $31, $51, $0A, $0B, $0C, $0D, $0E, $0F, $10, $11, $12, $13, $14, $15, $16, $17, $FF, $4C, $51, $99, $51, $BA, $51, $E3, $51, $F4, $51, $F4, $51, $11, $21, $31, $41, $51, $61, $71, $81, $91, $A1, $B1, $C1, $D1, $E1, $F1, $F1, $F1, $F1, $F1, $F1, $E1, $E1, $E1, $E1, $D1, $D1, $D1, $D1, $C1, $C1, $C1, $C1, $B1, $B1, $B1, $B1, $A1, $A1, $A1, $A1, $91, $91, $91, $91, $81, $81, $81, $81, $71, $71, $71, $71, $61, $61, $61, $61, $51, $51, $51, $51, $41, $41, $41, $41, $31, $31, $31, $31, $21, $21, $21, $21, $11, $11, $11, $11, $FF, $11, $91, $D1, $F1, $F1, $F1, $F1, $F1, $D1, $D1, $D1, $D1, $A1, $A1, $A1, $A1, $81, $81, $81, $81, $61, $61, $61, $61, $41, $41, $41, $41, $21, $21, $21, $21, $FF, $31, $51, $A1, $51, $F1, $51, $F1, $51, $F1, $51, $F1, $51, $D1, $51, $D1, $51, $B1, $51, $B1, $51, $91, $51, $91, $51, $71, $51, $71, $51, $51, $51, $51, $51, $31, $51, $31, $51, $11, $51, $11, $51, $FF, $F0, $E0, $D0, $C0, $B0, $A0, $90, $80, $70, $60, $50, $40, $30, $20, $10, $00, $FF, $00, $52, $1A, $52, $34, $52, $4E, $52, $4E, $52, $4E, $52, $4E, $52, $4F, $52, $53, $52, $57, $52, $5B, $52, $5F, $52, $72, $52, $76, $52, $7D, $52, $81, $52, $85, $52, $89, $52, $8D, $52, $4E, $52, $7D, $52, $81, $52, $85, $52, $89, $52, $8D, $52, $91, $52, $95, $52, $99, $52, $A0, $52, $A7, $52, $AB, $52, $AF, $52, $4E, $52, $4F, $52, $A7, $52, $AB, $52, $AF, $52, $5F, $52, $72, $52, $76, $52, $7D, $52, $81, $52, $85, $52, $89, $52, $8D, $52, $FF, $20, $C1, $33, $FF, $20, $B1, $33, $FF, $20, $A1, $33, $FF, $20, $81, $33, $FF, $27, $84, $37, $26, $84, $36, $25, $83, $35, $24, $83, $34, $23, $82, $33, $22, $81, $32, $FF, $20, $51, $2A, $FF, $21, $41, $2B, $20, $61, $2A, $FF, $20, $81, $10, $FF, $20, $82, $23, $FF, $20, $82, $25, $FF, $20, $82, $26, $FF, $20, $A1, $10, $FF, $20, $A2, $11, $FF, $20, $A2, $50, $FF, $20, $A1, $18, $20, $31, $33, $FF, $22, $91, $28, $20, $71, $18, $FF, $20, $91, $22, $FF, $20, $71, $22, $FF, $20, $61, $22, $FF
-
-Data_03a_52b3:
- db $11, $22, $44, $88, $00, $c0, $32, $c0, $64, $c0, $96, $c0, $c8, $c0, $fa, $c0
- db $2c, $c1, $5e, $c1
+ dn 0, 2, 4, 6, 8, 10, 12, 14, 15, 15, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 2, 2, 1, 1 ; 0
+ dn 0, 2, 4, 6, 8, 10, 12, 14, 14, 15, 15, 15, 15, 14, 14, 14, 13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1 ; 1
+ dn 1, 3, 6, 9, 11, 13, 14, 14, 14, 14, 15, 15, 15, 15, 14, 13, 13, 14, 15, 15, 15, 15, 14, 14, 14, 14, 13, 11, 9, 6, 3, 1 ; 2
+ dn 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 15, 14, 13, 14, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ; 3
+ dn 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 14, 15, 7, 7, 15, 14, 14, 13, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0 ; 4
+ dn 0, 0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 7, 14, 14, 15, 7, 7, 15, 14, 14, 13, 7, 10, 8, 7, 6, 5, 4, 3, 2, 1, 4 ; 5
+ dn 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 15 ; 6
+ dn 0, 15, 0, 15, 0, 14, 0, 14, 0, 13, 0, 13, 0, 12, 0, 12, 0, 11, 0, 11, 0, 10, 0, 10, 0, 9, 0, 9, 0, 8, 0, 8 ; 7
+ dn 0, 7, 0, 7, 0, 6, 0, 6, 0, 5, 0, 5, 0, 4, 0, 4, 0, 3, 0, 3, 0, 2, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0 ; 8
+ dn 15, 15, 15, 15, 15, 15, 15, 15, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8 ; 9
+ dn 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; a
+ dn 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; b
+ dn 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; c
+ dn 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; d
+ dn 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; e
+ dn 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; f
+
+; inaccessible beyond this point?
+ dn 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+ dn 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
+
+Data_3a_5125:
+ dw .entry1
+ dw .entry1
+ dw .entry1
+ dw .entry1
+ dw .entry1
+ dw .entry1
+.entry1
+ db $0A, $0B, $0C, $0D, $0E, $0F, $10, $11, $12, $13, $14, $15, $16, $17
+ db -1
+
+Data_3a_5140:
+ dw .entry1
+ dw .entry2
+ dw .entry3
+ dw .entry4
+ dw Drumkits
+ dw Drumkits
+.entry1
+ db $11, $21, $31, $41, $51, $61, $71, $81, $91, $A1, $B1, $C1, $D1, $E1
+ db $F1, $F1, $F1, $F1, $F1, $F1, $E1, $E1, $E1, $E1, $D1, $D1, $D1, $D1
+ db $C1, $C1, $C1, $C1, $B1, $B1, $B1, $B1, $A1, $A1, $A1, $A1, $91, $91
+ db $91, $91, $81, $81, $81, $81, $71, $71, $71, $71, $61, $61, $61, $61
+ db $51, $51, $51, $51, $41, $41, $41, $41, $31, $31, $31, $31, $21, $21
+ db $21, $21, $11, $11, $11, $11
+ db -1
+.entry2
+ db $11, $91, $D1, $F1, $F1, $F1, $F1, $F1, $D1, $D1, $D1, $D1, $A1, $A1
+ db $A1, $A1, $81, $81, $81, $81, $61, $61, $61, $61, $41, $41, $41, $41
+ db $21, $21, $21, $21
+ db -1
+.entry3
+ db $31, $51, $A1, $51, $F1, $51, $F1, $51, $F1, $51, $F1, $51, $D1, $51
+ db $D1, $51, $B1, $51, $B1, $51, $91, $51, $91, $51, $71, $51, $71, $51
+ db $51, $51, $51, $51, $31, $51, $31, $51, $11, $51, $11, $51
+ db -1
+.entry4
+ db $F0, $E0, $D0, $C0, $B0, $A0, $90, $80, $70, $60, $50, $40, $30, $20
+ db $10, $00
+ db -1
+
+Drumkits:
+ dw Drumkit0
+ dw Drumkit1
+ dw Drumkit2
+ dw Drum00
+ dw Drum00
+ dw Drum00
+
+Drumkit0:
+ dw Drum00
+ dw Snare1
+ dw Snare2
+ dw Snare3
+ dw Snare4
+ dw Drum05
+ dw Triangle1
+ dw Triangle2
+ dw HiHat1
+ dw Snare5
+ dw Snare6
+ dw Snare7
+ dw HiHat2
+Drumkit1:
+ dw Drum00
+ dw HiHat1
+ dw Snare5
+ dw Snare6
+ dw Snare7
+ dw HiHat2
+ dw HiHat3
+ dw Snare8
+ dw Triangle3
+ dw Triangle4
+ dw Snare9
+ dw Snare10
+ dw Snare11
+Drumkit2:
+ dw Drum00
+ dw Snare1
+ dw Snare9
+ dw Snare10
+ dw Snare11
+ dw Drum05
+ dw Triangle1
+ dw Triangle2
+ dw HiHat1
+ dw Snare5
+ dw Snare6
+ dw Snare7
+ dw HiHat2
+
+Drum00:
+ sound_ret
+
+Snare1:
+ noise_note 32, 12, 1, 51
+ sound_ret
+
+Snare2:
+ noise_note 32, 11, 1, 51
+ sound_ret
+
+Snare3:
+ noise_note 32, 10, 1, 51
+ sound_ret
+
+Snare4:
+ noise_note 32, 8, 1, 51
+ sound_ret
+
+Drum05:
+; Reverse cymbal / wooshing sound
+ noise_note 39, 8, 4, 55
+ noise_note 38, 8, 4, 54
+ noise_note 37, 8, 3, 53
+ noise_note 36, 8, 3, 52
+ noise_note 35, 8, 2, 51
+ noise_note 34, 8, 1, 50
+ sound_ret
+
+Triangle1:
+ noise_note 32, 5, 1, 42
+ sound_ret
+
+Triangle2:
+ noise_note 33, 4, 1, 43
+ noise_note 32, 6, 1, 42
+ sound_ret
+
+HiHat1:
+ noise_note 32, 8, 1, 16
+ sound_ret
+
+Snare5:
+ noise_note 32, 8, 2, 35
+ sound_ret
+
+Snare6:
+ noise_note 32, 8, 2, 37
+ sound_ret
+
+Snare7:
+ noise_note 32, 8, 2, 38
+ sound_ret
+
+HiHat2:
+ noise_note 32, 10, 1, 16
+ sound_ret
+
+HiHat3:
+ noise_note 32, 10, 2, 17
+ sound_ret
+
+Snare8:
+ noise_note 32, 10, 2, 80
+ sound_ret
+
+Triangle3:
+ noise_note 32, 10, 1, 24
+ noise_note 32, 3, 1, 51
+ sound_ret
+
+Triangle4:
+ noise_note 34, 9, 1, 40
+ noise_note 32, 7, 1, 24
+ sound_ret
+
+Snare9:
+ noise_note 32, 9, 1, 34
+ sound_ret
+
+Snare10:
+ noise_note 32, 7, 1, 34
+ sound_ret
+
+Snare11:
+ noise_note 32, 6, 1, 34
+ sound_ret
+
+LRTracks:
+; bit corresponds to track #
+; hi: left channel
+; lo: right channel
+ db $11, $22, $44, $88
+
+ChannelPointers:
+; music channels
+ dw wChannel1
+ dw wChannel2
+ dw wChannel3
+ dw wChannel4
+; sfx channels
+ dw wChannel5
+ dw wChannel6
+ dw wChannel7
+ dw wChannel8
SECTION "audio/engine.asm@Song Header Pointers", ROMX
diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm
index b85298a..d77e14f 100644
--- a/constants/audio_constants.asm
+++ b/constants/audio_constants.asm
@@ -93,6 +93,7 @@ NOISE_CHAN_F EQU 2 ; bit set in CHAN5-CHAN7
const_def
const SOUND_VIBRATO_DIR ; 0
const SOUND_PITCH_WHEEL_DIR ; 1
+ const SOUND_UNKN_12 ; 2
; NoteFlags
const_def
diff --git a/home/cry.asm b/home/cry.asm
index 3dbe63f..994bc29 100644
--- a/home/cry.asm
+++ b/home/cry.asm
@@ -5,15 +5,15 @@ SECTION "home/cry.asm", ROM0
PlayStereoCry::
push af
ld a, $1
- ld [wc1b9], a
+ ld [wStereoPanningMask], a
pop af
jr _PlayCry
PlayCry::
push af
xor a
- ld [wc1b9], a
- ld [wc1ba], a
+ ld [wStereoPanningMask], a
+ ld [wCryTracks], a
pop af
_PlayCry:
push hl
diff --git a/ram/wram.asm b/ram/wram.asm
index 37209c3..45b801b 100644
--- a/ram/wram.asm
+++ b/ram/wram.asm
@@ -23,7 +23,7 @@ wCurTrackDuty:: db
wCurTrackIntensity:: db
wCurTrackFrequency:: dw
wSoundLength:: db
-wc196:: db
+wCurNoteDuration:: db
wCurMusicByte:: db
wCurChannel:: db
@@ -39,11 +39,10 @@ wPitchSweep:: db
wMusicID:: dw
wMusicBank:: db
-wc19f:: db
-wc1a0:: db
-wc1a1:: db
+wNoiseSampleAddress:: dw
+wNoiseSampleDelay:: db
wc1a2:: db
-wc1a3:: db
+wNoiseSampleSet:: db
wLowHealthAlarm::
; bit 7: on/off
@@ -77,11 +76,12 @@ wChannel2JumpCondition:: db
wChannel3JumpCondition:: db
wChannel4JumpCondition:: db
-wc1b9:: db
-wc1ba:: db
+wStereoPanningMask:: db
+
+wCryTracks:: db
; either wChannelsEnd or wMusicEnd, unsure
-wc1bb:: db
+wSFXDuration:: db
wMusicInitEnd::