2014-01-07 03:34:14 +00:00
|
|
|
; The second of three duplicated sound engines.
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_UpdateMusic::
|
2016-07-28 03:08:13 +00:00
|
|
|
ld c, Ch0
|
2014-01-07 03:34:14 +00:00
|
|
|
.loop
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr z, .nextChannel
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .applyAffects ; if sfx channel
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wMuteAudioAndPauseMusic]
|
2014-01-07 03:34:14 +00:00
|
|
|
and a
|
|
|
|
jr z, .applyAffects
|
|
|
|
bit 7, a
|
|
|
|
jr nz, .nextChannel
|
|
|
|
set 7, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wMuteAudioAndPauseMusic], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .nextChannel
|
|
|
|
.applyAffects
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_ApplyMusicAffects
|
2014-01-07 03:34:14 +00:00
|
|
|
.nextChannel
|
|
|
|
ld a, c
|
|
|
|
inc c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch7
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .loop
|
|
|
|
ret
|
|
|
|
|
|
|
|
; this routine checks flags for music effects currently applied
|
|
|
|
; to the channel and calls certain functions based on flags.
|
2015-08-09 05:32:44 +00:00
|
|
|
; known flags for wChannelFlags1:
|
2014-06-09 17:22:35 +00:00
|
|
|
; 0: toggleperfectpitch has been used
|
2014-01-07 03:34:14 +00:00
|
|
|
; 1: call has been used
|
|
|
|
; 3: a toggle used only by this routine for vibrato
|
|
|
|
; 4: pitchbend flag
|
|
|
|
; 6: dutycycle flag
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_ApplyMusicAffects:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters ; delay until next note
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
cp $1 ; if the delay is 1, play next note
|
2015-07-22 15:22:46 +00:00
|
|
|
jp z, Audio2_PlayNextNote
|
2014-01-07 03:34:14 +00:00
|
|
|
dec a ; otherwise, decrease the delay timer
|
|
|
|
ld [hl], a
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .startChecks ; if a sfx channel
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelSoundIDs + Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr z, .startChecks
|
|
|
|
ret
|
|
|
|
.startChecks
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 6, [hl] ; dutycycle
|
|
|
|
jr z, .checkForExecuteMusic
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_ApplyDutyCycle
|
2014-01-07 03:34:14 +00:00
|
|
|
.checkForExecuteMusic
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 0, [hl]
|
|
|
|
jr nz, .checkForPitchBend
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 2, [hl]
|
|
|
|
jr nz, .disablePitchBendVibrato
|
|
|
|
.checkForPitchBend
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 4, [hl] ; pitchbend
|
|
|
|
jr z, .checkVibratoDelay
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_ApplyPitchBend
|
2014-01-07 03:34:14 +00:00
|
|
|
.checkVibratoDelay
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounters ; vibrato delay
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a ; check if delay is over
|
|
|
|
jr z, .checkForVibrato
|
|
|
|
dec [hl] ; otherwise, dec delay
|
|
|
|
.disablePitchBendVibrato
|
|
|
|
ret
|
|
|
|
.checkForVibrato
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoExtents ; vibrato rate
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr nz, .vibrato
|
|
|
|
ret ; no vibrato
|
|
|
|
.vibrato
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoRates
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and $f
|
|
|
|
and a
|
|
|
|
jr z, .vibratoAlreadyDone
|
|
|
|
dec [hl] ; apply vibrato pitch change
|
|
|
|
ret
|
|
|
|
.vibratoAlreadyDone
|
|
|
|
ld a, [hl]
|
|
|
|
swap [hl]
|
|
|
|
or [hl]
|
|
|
|
ld [hl], a ; reset the vibrato value and start again
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld e, [hl] ; get note pitch
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
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]
|
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
ld d, a
|
|
|
|
ld a, e
|
|
|
|
sub d
|
|
|
|
jr nc, .noCarry
|
|
|
|
ld a, $0
|
|
|
|
.noCarry
|
|
|
|
jr .done
|
|
|
|
.unset
|
|
|
|
set 3, [hl]
|
|
|
|
ld a, d
|
|
|
|
and $f0
|
|
|
|
swap a
|
|
|
|
add e
|
|
|
|
jr nc, .done
|
|
|
|
ld a, $ff
|
|
|
|
.done
|
|
|
|
ld d, a
|
|
|
|
ld b, $3
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], d
|
|
|
|
ret
|
|
|
|
|
|
|
|
; this routine executes all music commands that take up no time,
|
|
|
|
; like tempo changes, duty changes etc. and doesn't return
|
|
|
|
; until the first note is reached
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_PlayNextNote:
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounterReloadValues
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
res 4, [hl]
|
|
|
|
res 5, [hl]
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .beginChecks
|
2015-03-12 14:49:35 +00:00
|
|
|
ld a, [wLowHealthAlarm] ;low health alarm enabled?
|
2014-01-07 03:34:14 +00:00
|
|
|
bit 7, a
|
|
|
|
ret nz
|
|
|
|
.beginChecks
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_endchannel:
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
cp $ff ; is this command an endchannel?
|
2015-07-22 15:22:46 +00:00
|
|
|
jp nz, Audio2_callchannel ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0 ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 1, [hl]
|
|
|
|
jr nz, .returnFromCall
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch3
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .noiseOrSfxChannel
|
|
|
|
jr .asm_219c0
|
|
|
|
.noiseOrSfxChannel
|
|
|
|
res 2, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
res 0, [hl]
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch6
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .notSfxChannel3
|
|
|
|
ld a, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.notSfxChannel3
|
|
|
|
jr nz, .asm_219a3
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wDisableChannelOutputWhenSfxEnds]
|
2014-01-07 03:34:14 +00:00
|
|
|
and a
|
|
|
|
jr z, .asm_219a3
|
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wDisableChannelOutputWhenSfxEnds], a
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .asm_219c0
|
|
|
|
.asm_219a3
|
|
|
|
jr .asm_219c9
|
|
|
|
.returnFromCall
|
|
|
|
res 1, [hl]
|
|
|
|
ld d, $0
|
|
|
|
ld a, c
|
|
|
|
add a
|
|
|
|
ld e, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
push hl ; store current channel address
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelReturnAddresses
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld e, l
|
|
|
|
ld d, h
|
|
|
|
pop hl
|
|
|
|
ld a, [de]
|
|
|
|
ld [hli], a
|
|
|
|
inc de
|
|
|
|
ld a, [de]
|
|
|
|
ld [hl], a ; loads channel address to return to
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_219c0
|
|
|
|
ld hl, Unknown_222de
|
|
|
|
add hl, bc
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [rNR51]
|
2014-01-07 03:34:14 +00:00
|
|
|
and [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_219c9
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch4]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $14
|
|
|
|
jr nc, .asm_219d2
|
|
|
|
jr .asm_219ef
|
|
|
|
.asm_219d2
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch4]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $86
|
|
|
|
jr z, .asm_219ef
|
|
|
|
jr c, .asm_219dd
|
|
|
|
jr .asm_219ef
|
|
|
|
.asm_219dd
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .asm_219e6
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e6d
|
2014-01-07 03:34:14 +00:00
|
|
|
ret c
|
|
|
|
.asm_219e6
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSavedVolume]
|
|
|
|
ld [rNR50], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSavedVolume], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_219ef
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], b
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_callchannel:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $fd ; is this command a callchannel?
|
2015-07-22 15:22:46 +00:00
|
|
|
jp nz, Audio2_loopchannel ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
push af
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
pop af
|
|
|
|
ld e, a
|
|
|
|
push de ; store pointer
|
|
|
|
ld d, $0
|
|
|
|
ld a, c
|
|
|
|
add a
|
|
|
|
ld e, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
push hl
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelReturnAddresses
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld e, l
|
|
|
|
ld d, h
|
|
|
|
pop hl
|
|
|
|
ld a, [hli]
|
|
|
|
ld [de], a
|
|
|
|
inc de
|
|
|
|
ld a, [hld]
|
|
|
|
ld [de], a ; copy current channel address
|
|
|
|
pop de
|
|
|
|
ld [hl], e
|
|
|
|
inc hl
|
|
|
|
ld [hl], d ; overwrite current address with pointer
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 1, [hl] ; set the call flag
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_loopchannel:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $fe ; is this command a loopchannel?
|
2015-07-22 15:22:46 +00:00
|
|
|
jp nz, Audio2_notetype ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, a
|
|
|
|
and a
|
|
|
|
jr z, .infiniteLoop
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelLoopCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
cp e
|
|
|
|
jr nz, .loopAgain
|
|
|
|
ld a, $1 ; if no more loops to make,
|
|
|
|
ld [hl], a
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte ; skip pointer
|
|
|
|
call Audio2_GetNextMusicByte
|
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
.loopAgain ; inc loop count
|
|
|
|
inc a
|
|
|
|
ld [hl], a
|
|
|
|
; fall through
|
|
|
|
.infiniteLoop ; overwrite current address with pointer
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
push af
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, a
|
|
|
|
ld d, $0
|
|
|
|
ld a, c
|
|
|
|
add a
|
|
|
|
ld e, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
pop af
|
|
|
|
ld [hli], a
|
|
|
|
ld [hl], b
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_notetype:
|
2014-01-07 03:34:14 +00:00
|
|
|
and $f0
|
|
|
|
cp $d0 ; is this command a notetype?
|
2015-07-22 15:22:46 +00:00
|
|
|
jp nz, Audio2_toggleperfectpitch ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d ; yes
|
|
|
|
and $f
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteSpeeds
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a ; store low nibble as speed
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch3
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .noiseChannel ; noise channel has 0 params
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch2
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .musicChannel3
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch6
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .notChannel3
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wSfxWaveInstrument
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .sfxChannel3
|
|
|
|
.musicChannel3
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wMusicWaveInstrument
|
2014-01-07 03:34:14 +00:00
|
|
|
.sfxChannel3
|
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
ld [hl], a ; store low nibble of param as duty
|
|
|
|
ld a, d
|
|
|
|
and $30
|
|
|
|
sla a
|
|
|
|
ld d, a
|
|
|
|
; fall through
|
|
|
|
|
|
|
|
; if channel 3, store high nibble as volume
|
|
|
|
; else, store volume (high nibble) and fade (low nibble)
|
|
|
|
.notChannel3
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVolumes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], d
|
|
|
|
.noiseChannel
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_toggleperfectpitch:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
2014-06-09 17:22:35 +00:00
|
|
|
cp $e8 ; is this command a toggleperfectpitch?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_vibrato ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0 ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
xor $1
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [hl], a ; flip bit 0 of wChannelFlags1
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_vibrato:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $ea ; is this command a vibrato?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_pitchbend ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
2014-06-09 20:58:02 +00:00
|
|
|
ld [hl], a ; store delay
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounterReloadValues
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
2014-06-09 20:58:02 +00:00
|
|
|
ld [hl], a ; store delay
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
and $f0
|
|
|
|
swap a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoExtents
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
srl a
|
|
|
|
ld e, a
|
|
|
|
adc b
|
|
|
|
swap a
|
|
|
|
or e
|
|
|
|
ld [hl], a ; store rate as both high and low nibbles
|
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoRates
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
swap a
|
|
|
|
or d
|
|
|
|
ld [hl], a ; store depth as both high and low nibbles
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_pitchbend:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $eb ; is this command a pitchbend?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_duty ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendLengthModifiers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a ; store first param
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
and $f0
|
|
|
|
swap a
|
|
|
|
ld b, a
|
|
|
|
ld a, d
|
|
|
|
and $f
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_22017
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], d ; store unknown part of second param
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], e ; store unknown part of second param
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 4, [hl] ; set pitchbend flag
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_notelength
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_duty:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $ec ; is this command a duty?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_tempo ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
rrca
|
|
|
|
rrca
|
|
|
|
and $c0
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a ; store duty
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_tempo:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $ed ; is this command a tempo?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_stereopanning ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c ; yes
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .sfxChannel
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wMusicTempo], a ; store first param
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wMusicTempo + 1], a ; store second param
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wChannelNoteDelayCountersFractionalPart], a ; clear RAM
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 1], a
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 2], a
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 3], a
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .musicChannelDone
|
|
|
|
.sfxChannel
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo], a ; store first param
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo + 1], a ; store second param
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 4], a ; clear RAM
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 5], a
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 6], a
|
|
|
|
ld [wChannelNoteDelayCountersFractionalPart + 7], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.musicChannelDone
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_stereopanning:
|
2014-06-09 17:22:35 +00:00
|
|
|
cp $ee ; is this command a stereopanning?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_unknownmusic0xef ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wStereoPanning], a ; store panning
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
|
|
|
; this appears to never be used
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_unknownmusic0xef:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $ef ; is this command an unknownmusic0xef?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_dutycycle ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
push bc
|
2015-08-09 05:32:44 +00:00
|
|
|
call Audio2_PlaySound
|
2014-01-07 03:34:14 +00:00
|
|
|
pop bc
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wDisableChannelOutputWhenSfxEnds]
|
2014-01-07 03:34:14 +00:00
|
|
|
and a
|
|
|
|
jr nz, .skip
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch7]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wDisableChannelOutputWhenSfxEnds], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2016-07-28 03:08:13 +00:00
|
|
|
ld [wChannelSoundIDs + Ch7], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.skip
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_dutycycle:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $fc ; is this command a dutycycle?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_volume ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDutyCycles
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a ; store full cycle
|
|
|
|
and $c0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a ; store first duty
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 6, [hl] ; set dutycycle flag
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_volume:
|
2014-06-09 17:22:35 +00:00
|
|
|
cp $f0 ; is this command a volume?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_executemusic ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR50], a ; store volume
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_executemusic:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $f8 ; is this command an executemusic?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_octave ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0 ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 0, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_octave:
|
2014-01-07 03:34:14 +00:00
|
|
|
and $f0
|
|
|
|
cp $e0 ; is this command an octave?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_unknownsfx0x20 ; no
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelOctaves ; yes
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
|
|
|
add hl, bc
|
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
ld [hl], a ; store low nibble as octave
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 07:19:19 +00:00
|
|
|
Audio2_unknownsfx0x20:
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $20 ; is this command an unknownsfx0x20?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_unknownsfx0x10 ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch3 ; is this a noise or sfx channel?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr c, Audio2_unknownsfx0x10 ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 0, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_unknownsfx0x10 ; no
|
|
|
|
call Audio2_notelength
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
or d
|
|
|
|
ld d, a
|
|
|
|
ld b, $1
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], d
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
|
|
|
ld b, $2
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], d
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, a
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $0
|
|
|
|
jr z, .sfxNoiseChannel ; only two params for noise channel
|
|
|
|
push de
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte
|
2014-01-07 03:34:14 +00:00
|
|
|
pop de
|
|
|
|
.sfxNoiseChannel
|
|
|
|
ld d, a
|
|
|
|
push de
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21daa
|
|
|
|
call Audio2_21d79
|
2014-01-07 03:34:14 +00:00
|
|
|
pop de
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21dcc
|
2014-01-07 03:34:14 +00:00
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_unknownsfx0x10:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2015-07-22 15:22:46 +00:00
|
|
|
jr c, Audio2_note ; if not a sfx
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
|
|
|
cp $10 ; is this command a unknownsfx0x10?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_note ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 0, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_note ; no
|
|
|
|
call Audio2_GetNextMusicByte ; yes
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR10], a
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_note:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch3
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_notelength ; if not noise channel
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
|
|
|
and $f0
|
|
|
|
cp $b0 ; is this command a dnote?
|
2015-07-22 15:22:46 +00:00
|
|
|
jr z, Audio2_dnote ; yes
|
|
|
|
jr nc, Audio2_notelength ; no
|
2014-01-07 03:34:14 +00:00
|
|
|
swap a
|
|
|
|
ld b, a
|
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
ld d, a
|
|
|
|
ld a, b
|
|
|
|
push de
|
|
|
|
push bc
|
|
|
|
jr asm_21c7e
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_dnote:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
|
|
|
and $f
|
|
|
|
push af
|
|
|
|
push bc
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_GetNextMusicByte ; get dnote instrument
|
2014-01-07 03:34:14 +00:00
|
|
|
asm_21c7e
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wDisableChannelOutputWhenSfxEnds]
|
2014-01-07 03:34:14 +00:00
|
|
|
and a
|
|
|
|
jr nz, .asm_21c89
|
|
|
|
ld a, d
|
2015-08-09 05:32:44 +00:00
|
|
|
call Audio2_PlaySound
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_21c89
|
|
|
|
pop bc
|
|
|
|
pop de
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_notelength:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
|
|
|
push af
|
|
|
|
and $f
|
|
|
|
inc a
|
|
|
|
ld b, $0
|
|
|
|
ld e, a ; store note length (in 16ths)
|
|
|
|
ld d, b
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteSpeeds
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
ld l, b
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_22006
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .sfxChannel
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wMusicTempo]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wMusicTempo + 1]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, a
|
|
|
|
jr .skip
|
|
|
|
.sfxChannel
|
|
|
|
ld d, $1
|
|
|
|
ld e, $0
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch7
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .skip ; if noise channel
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e2f
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSfxTempo]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSfxTempo + 1]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, a
|
|
|
|
.skip
|
|
|
|
ld a, l
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCountersFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld l, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_22006
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, l
|
|
|
|
ld d, h
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCountersFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], e
|
|
|
|
ld a, d
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 0, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
jr nz, Audio2_notepitch
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 2, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
jr z, Audio2_notepitch
|
2014-01-07 03:34:14 +00:00
|
|
|
pop hl
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_notepitch:
|
2014-01-07 03:34:14 +00:00
|
|
|
pop af
|
|
|
|
and $f0
|
|
|
|
cp $c0 ; compare to rest
|
|
|
|
jr nz, .notRest
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .sfxChannel
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelSoundIDs + Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr nz, .done
|
|
|
|
; fall through
|
|
|
|
.sfxChannel
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch2
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .musicChannel3
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch6
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .notSfxChannel3
|
|
|
|
.musicChannel3
|
|
|
|
ld b, $0
|
|
|
|
ld hl, Unknown_222de
|
|
|
|
add hl, bc
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [rNR51]
|
2014-01-07 03:34:14 +00:00
|
|
|
and [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .done
|
|
|
|
.notSfxChannel3
|
|
|
|
ld b, $2
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $8
|
|
|
|
ld [hli], a
|
|
|
|
inc hl
|
|
|
|
ld a, $80
|
|
|
|
ld [hl], a
|
|
|
|
.done
|
|
|
|
ret
|
|
|
|
.notRest
|
|
|
|
swap a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelOctaves
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld b, [hl]
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_22017
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 4, [hl]
|
|
|
|
jr z, .asm_21d39
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21f4e
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_21d39
|
|
|
|
push de
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .skip ; if sfx channel
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelSoundIDs + Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, $0
|
|
|
|
ld e, a
|
|
|
|
add hl, de
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr nz, .asm_21d4c
|
|
|
|
jr .skip
|
|
|
|
.asm_21d4c
|
|
|
|
pop de
|
|
|
|
ret
|
|
|
|
.skip
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVolumes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld d, [hl]
|
|
|
|
ld b, $2
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], d
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21daa
|
|
|
|
call Audio2_21d79
|
2014-01-07 03:34:14 +00:00
|
|
|
pop de
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
2014-06-09 17:22:35 +00:00
|
|
|
bit 0, [hl] ; has toggleperfectpitch been used?
|
|
|
|
jr z, .skip2
|
|
|
|
inc e ; if yes, increment the pitch by 1
|
|
|
|
jr nc, .skip2
|
2014-01-07 03:34:14 +00:00
|
|
|
inc d
|
2014-06-09 17:22:35 +00:00
|
|
|
.skip2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], e
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21dcc
|
2014-01-07 03:34:14 +00:00
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21d79:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
|
|
|
ld hl, Unknown_222e6
|
|
|
|
add hl, bc
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [rNR51]
|
2014-01-07 03:34:14 +00:00
|
|
|
or [hl]
|
|
|
|
ld d, a
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch7
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .sfxNoiseChannel
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .skip ; if sfx channel
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelSoundIDs + Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr nz, .skip
|
|
|
|
.sfxNoiseChannel
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wStereoPanning]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld hl, Unknown_222e6
|
|
|
|
add hl, bc
|
|
|
|
and [hl]
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [rNR51]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld hl, Unknown_222de
|
|
|
|
add hl, bc
|
|
|
|
and [hl]
|
|
|
|
or d
|
|
|
|
ld d, a
|
|
|
|
.skip
|
|
|
|
ld a, d
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21daa:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld d, [hl]
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch2
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .channel3 ; if music channel 3
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch6
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .channel3 ; if sfx channel 3
|
|
|
|
ld a, d
|
|
|
|
and $3f
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
or d
|
|
|
|
ld d, a
|
|
|
|
.channel3
|
|
|
|
ld b, $1
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], d
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21dcc:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch2
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .channel3
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch6
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .notSfxChannel3
|
|
|
|
; fall through
|
|
|
|
.channel3
|
|
|
|
push de
|
2015-08-09 05:32:44 +00:00
|
|
|
ld de, wMusicWaveInstrument
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch2
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .musicChannel3
|
2015-08-09 05:32:44 +00:00
|
|
|
ld de, wSfxWaveInstrument
|
2014-01-07 03:34:14 +00:00
|
|
|
.musicChannel3
|
|
|
|
ld a, [de]
|
|
|
|
add a
|
|
|
|
ld d, $0
|
|
|
|
ld e, a
|
2015-07-22 15:22:46 +00:00
|
|
|
ld hl, Audio2_WavePointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
|
|
|
ld hl, $ff30
|
|
|
|
ld b, $f
|
|
|
|
ld a, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.loop
|
|
|
|
ld a, [de]
|
|
|
|
inc de
|
|
|
|
ld [hli], a
|
|
|
|
ld a, b
|
|
|
|
dec b
|
|
|
|
and a
|
|
|
|
jr nz, .loop
|
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
pop de
|
|
|
|
.notSfxChannel3
|
|
|
|
ld a, d
|
|
|
|
or $80
|
|
|
|
and $c7
|
|
|
|
ld d, a
|
|
|
|
ld b, $3
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], e
|
|
|
|
inc hl
|
|
|
|
ld [hl], d
|
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr c, .musicChannel
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e56
|
2014-01-07 03:34:14 +00:00
|
|
|
.musicChannel
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e19:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nz, .asm_21e2e
|
2015-03-12 14:49:35 +00:00
|
|
|
ld a, [wLowHealthAlarm]
|
2014-01-07 03:34:14 +00:00
|
|
|
bit 7, a
|
|
|
|
jr z, .asm_21e2e
|
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wFrequencyModifier], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wTempoModifier], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_21e2e
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e2f:
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e8b
|
2014-01-07 03:34:14 +00:00
|
|
|
jr c, .asm_21e39
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e9f
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .asm_21e4c
|
|
|
|
.asm_21e39
|
|
|
|
ld d, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wTempoModifier]
|
2014-01-07 03:34:14 +00:00
|
|
|
add $80
|
|
|
|
jr nc, .asm_21e43
|
|
|
|
inc d
|
|
|
|
.asm_21e43
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo + 1], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, d
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo], a
|
2014-01-07 03:34:14 +00:00
|
|
|
jr .asm_21e55
|
|
|
|
.asm_21e4c
|
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo + 1], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $1
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxTempo], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_21e55
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e56:
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e8b
|
2014-01-07 03:34:14 +00:00
|
|
|
jr c, .asm_21e60
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e9f
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .asm_21e6c
|
|
|
|
.asm_21e60
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wFrequencyModifier]
|
2014-01-07 03:34:14 +00:00
|
|
|
add e
|
|
|
|
jr nc, .asm_21e67
|
|
|
|
inc d
|
|
|
|
.asm_21e67
|
|
|
|
dec hl
|
|
|
|
ld e, a
|
|
|
|
ld [hl], e
|
|
|
|
inc hl
|
|
|
|
ld [hl], d
|
|
|
|
.asm_21e6c
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e6d:
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21e8b
|
2014-01-07 03:34:14 +00:00
|
|
|
jr nc, .asm_21e88
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
ld e, c
|
|
|
|
ld d, $0
|
|
|
|
sla e
|
|
|
|
rl d
|
|
|
|
add hl, de
|
|
|
|
ld a, [hl]
|
|
|
|
sub $1
|
|
|
|
ld [hl], a
|
|
|
|
inc hl
|
|
|
|
ld a, [hl]
|
|
|
|
sbc $0
|
|
|
|
ld [hl], a
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
.asm_21e88
|
|
|
|
scf
|
|
|
|
ccf
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e8b:
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch4]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $14
|
|
|
|
jr nc, .asm_21e94
|
|
|
|
jr .asm_21e9a
|
|
|
|
.asm_21e94
|
|
|
|
cp $86
|
|
|
|
jr z, .asm_21e9a
|
|
|
|
jr c, .asm_21e9d
|
|
|
|
.asm_21e9a
|
|
|
|
scf
|
|
|
|
ccf
|
|
|
|
ret
|
|
|
|
.asm_21e9d
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21e9f:
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch7]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, a
|
2016-07-28 03:08:13 +00:00
|
|
|
ld a, [wChannelSoundIDs + Ch4]
|
2014-01-07 03:34:14 +00:00
|
|
|
or b
|
|
|
|
cp $9d
|
|
|
|
jr nc, .asm_21ead
|
|
|
|
jr .asm_21eb3
|
|
|
|
.asm_21ead
|
|
|
|
cp $ea
|
|
|
|
jr z, .asm_21eb3
|
|
|
|
jr c, .asm_21eb6
|
|
|
|
.asm_21eb3
|
|
|
|
scf
|
|
|
|
ccf
|
|
|
|
ret
|
|
|
|
.asm_21eb6
|
|
|
|
scf
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_ApplyPitchBend:
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
bit 5, [hl]
|
|
|
|
jp nz, .asm_21eff
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld e, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld d, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencySteps
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld l, [hl]
|
|
|
|
ld h, b
|
|
|
|
add hl, de
|
|
|
|
ld d, h
|
|
|
|
ld e, l
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
push hl
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencyStepsFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
pop hl
|
|
|
|
add [hl]
|
|
|
|
ld [hl], a
|
|
|
|
ld a, $0
|
|
|
|
adc e
|
|
|
|
ld e, a
|
|
|
|
ld a, $0
|
|
|
|
adc d
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
cp d
|
|
|
|
jp c, .asm_21f45
|
|
|
|
jr nz, .asm_21f32
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
cp e
|
|
|
|
jp c, .asm_21f45
|
|
|
|
jr .asm_21f32
|
|
|
|
.asm_21eff
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld d, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencySteps
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld e, [hl]
|
|
|
|
sub e
|
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
sbc b
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencyStepsFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
add a
|
|
|
|
ld [hl], a
|
|
|
|
ld a, e
|
|
|
|
sbc b
|
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
sbc b
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, d
|
|
|
|
cp [hl]
|
|
|
|
jr c, .asm_21f45
|
|
|
|
jr nz, .asm_21f32
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, e
|
|
|
|
cp [hl]
|
|
|
|
jr c, .asm_21f45
|
|
|
|
.asm_21f32
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], e
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], d
|
|
|
|
ld b, $3
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, e
|
|
|
|
ld [hli], a
|
|
|
|
ld [hl], d
|
|
|
|
ret
|
|
|
|
.asm_21f45
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
res 4, [hl]
|
|
|
|
res 5, [hl]
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21f4e:
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], d
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], e
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendLengthModifiers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
sub [hl]
|
|
|
|
jr nc, .asm_21f66
|
|
|
|
ld a, $1
|
|
|
|
.asm_21f66
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, e
|
|
|
|
sub [hl]
|
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
sbc b
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
sub [hl]
|
|
|
|
jr c, .asm_21f82
|
|
|
|
ld d, a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 5, [hl]
|
|
|
|
jr .asm_21fa5
|
|
|
|
.asm_21f82
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld d, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld e, [hl]
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
sub e
|
|
|
|
ld e, a
|
|
|
|
ld a, d
|
|
|
|
sbc b
|
|
|
|
ld d, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
sub d
|
|
|
|
ld d, a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
res 5, [hl]
|
|
|
|
.asm_21fa5
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendLengthModifiers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
.asm_21fa9
|
|
|
|
inc b
|
|
|
|
ld a, e
|
|
|
|
sub [hl]
|
|
|
|
ld e, a
|
|
|
|
jr nc, .asm_21fa9
|
|
|
|
ld a, d
|
|
|
|
and a
|
|
|
|
jr z, .asm_21fb7
|
|
|
|
dec a
|
|
|
|
ld d, a
|
|
|
|
jr .asm_21fa9
|
|
|
|
.asm_21fb7
|
|
|
|
ld a, e
|
|
|
|
add [hl]
|
|
|
|
ld d, b
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencySteps
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], d
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencyStepsFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld [hl], a
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_ApplyDutyCycle:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDutyCycles
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
ld a, [hl]
|
|
|
|
rlca
|
|
|
|
rlca
|
|
|
|
ld [hl], a
|
|
|
|
and $c0
|
|
|
|
ld d, a
|
|
|
|
ld b, $1
|
2015-07-22 15:22:46 +00:00
|
|
|
call Audio2_21ff7
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, [hl]
|
|
|
|
and $3f
|
|
|
|
or d
|
|
|
|
ld [hl], a
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_GetNextMusicByte:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, $0
|
|
|
|
ld a, c
|
|
|
|
add a
|
|
|
|
ld e, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld a, [hli]
|
|
|
|
ld e, a
|
|
|
|
ld a, [hld]
|
|
|
|
ld d, a
|
|
|
|
ld a, [de] ; get next music command
|
|
|
|
inc de
|
|
|
|
ld [hl], e ; store address of next command
|
|
|
|
inc hl
|
|
|
|
ld [hl], d
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_21ff7:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, c
|
|
|
|
ld hl, Unknown_222d6
|
|
|
|
add l
|
|
|
|
jr nc, .noCarry
|
|
|
|
inc h
|
|
|
|
.noCarry
|
|
|
|
ld l, a
|
|
|
|
ld a, [hl]
|
|
|
|
add b
|
|
|
|
ld l, a
|
|
|
|
ld h, $ff
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_22006:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld h, $0
|
|
|
|
.loop
|
|
|
|
srl a
|
|
|
|
jr nc, .noCarry
|
|
|
|
add hl, de
|
|
|
|
.noCarry
|
|
|
|
sla e
|
|
|
|
rl d
|
|
|
|
and a
|
|
|
|
jr z, .done
|
|
|
|
jr .loop
|
|
|
|
.done
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_22017:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld h, $0
|
|
|
|
ld l, a
|
|
|
|
add hl, hl
|
|
|
|
ld d, h
|
|
|
|
ld e, l
|
2015-07-22 15:22:46 +00:00
|
|
|
ld hl, Audio2_Pitches
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld e, [hl]
|
|
|
|
inc hl
|
|
|
|
ld d, [hl]
|
|
|
|
ld a, b
|
|
|
|
.loop
|
2016-07-28 03:08:13 +00:00
|
|
|
cp Ch7
|
2014-01-07 03:34:14 +00:00
|
|
|
jr z, .done
|
|
|
|
sra d
|
|
|
|
rr e
|
|
|
|
inc a
|
|
|
|
jr .loop
|
|
|
|
.done
|
|
|
|
ld a, $8
|
|
|
|
add d
|
|
|
|
ld d, a
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_PlaySound::
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSoundID], a
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $ff
|
2015-07-22 15:22:46 +00:00
|
|
|
jp z, Audio2_221f3
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $e9
|
2015-07-22 15:22:46 +00:00
|
|
|
jp z, Audio2_2210d
|
|
|
|
jp c, Audio2_2210d
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $fe
|
|
|
|
jr z, .asm_2204c
|
2015-07-22 15:22:46 +00:00
|
|
|
jp nc, Audio2_2210d
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_2204c
|
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wUnusedC000], a
|
|
|
|
ld [wDisableChannelOutputWhenSfxEnds], a
|
|
|
|
ld [wMusicTempo + 1], a
|
|
|
|
ld [wMusicWaveInstrument], a
|
|
|
|
ld [wSfxWaveInstrument], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, $8
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelReturnAddresses
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, $4
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDutyCycles
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounters
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoExtents
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoRates
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFrequencyLowBytes
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounterReloadValues
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendLengthModifiers
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencySteps
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencyStepsFractionalPart
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $1
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelLoopCounters
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteSpeeds
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wMusicTempo], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $ff
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wStereoPanning], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR50], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $8
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR10], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $77
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR50], a
|
2015-07-22 15:22:46 +00:00
|
|
|
jp Audio2_2224e
|
2014-01-07 03:34:14 +00:00
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_2210d:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld l, a
|
|
|
|
ld e, a
|
|
|
|
ld h, $0
|
|
|
|
ld d, h
|
|
|
|
add hl, hl
|
|
|
|
add hl, de
|
2015-07-22 15:22:46 +00:00
|
|
|
ld de, SFX_Headers_2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld a, h
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxHeaderPointer], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, l
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wSfxHeaderPointer + 1], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, [hl]
|
|
|
|
and $c0
|
|
|
|
rlca
|
|
|
|
rlca
|
|
|
|
ld c, a
|
|
|
|
.asm_22126
|
|
|
|
ld d, c
|
|
|
|
ld a, c
|
|
|
|
add a
|
|
|
|
add c
|
|
|
|
ld c, a
|
|
|
|
ld b, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSfxHeaderPointer]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld h, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSfxHeaderPointer + 1]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld l, a
|
|
|
|
add hl, bc
|
|
|
|
ld c, d
|
|
|
|
ld a, [hl]
|
|
|
|
and $f
|
|
|
|
ld e, a
|
|
|
|
ld d, $0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld a, [hl]
|
|
|
|
and a
|
|
|
|
jr z, .asm_22162
|
|
|
|
ld a, e
|
|
|
|
cp $7
|
|
|
|
jr nz, .asm_22159
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $14
|
|
|
|
jr nc, .asm_22152
|
|
|
|
ret
|
|
|
|
.asm_22152
|
|
|
|
ld a, [hl]
|
|
|
|
cp $14
|
|
|
|
jr z, .asm_22162
|
|
|
|
jr c, .asm_22162
|
|
|
|
.asm_22159
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp [hl]
|
|
|
|
jr z, .asm_22162
|
|
|
|
jr c, .asm_22162
|
|
|
|
ret
|
|
|
|
.asm_22162
|
|
|
|
xor a
|
|
|
|
push de
|
|
|
|
ld h, d
|
|
|
|
ld l, e
|
|
|
|
add hl, hl
|
|
|
|
ld d, h
|
|
|
|
ld e, l
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelReturnAddresses
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hli], a
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hli], a
|
|
|
|
ld [hl], a
|
|
|
|
pop de
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDuties
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelDutyCycles
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoExtents
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoRates
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelVibratoDelayCounterReloadValues
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendLengthModifiers
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencySteps
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendFrequencyStepsFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyFractionalPart
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendCurrentFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyHighBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelPitchBendTargetFrequencyLowBytes
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
|
|
|
ld a, $1
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelLoopCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteSpeeds
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld [hl], a
|
|
|
|
ld a, e
|
|
|
|
cp $4
|
|
|
|
jr nz, .asm_221ea
|
|
|
|
ld a, $8
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR10], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_221ea
|
|
|
|
ld a, c
|
|
|
|
and a
|
2015-07-22 15:22:46 +00:00
|
|
|
jp z, Audio2_2224e
|
2014-01-07 03:34:14 +00:00
|
|
|
dec c
|
|
|
|
jp .asm_22126
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_221f3:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $80
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR52], a
|
|
|
|
ld [rNR30], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR51], a
|
|
|
|
ld [rNR32], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $8
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR10], a
|
|
|
|
ld [rNR12], a
|
|
|
|
ld [rNR22], a
|
|
|
|
ld [rNR42], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $40
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR14], a
|
|
|
|
ld [rNR24], a
|
|
|
|
ld [rNR44], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $77
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR50], a
|
2014-01-07 03:34:14 +00:00
|
|
|
xor a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wUnusedC000], a
|
|
|
|
ld [wDisableChannelOutputWhenSfxEnds], a
|
|
|
|
ld [wMuteAudioAndPauseMusic], a
|
|
|
|
ld [wMusicTempo + 1], a
|
|
|
|
ld [wSfxTempo + 1], a
|
|
|
|
ld [wMusicWaveInstrument], a
|
|
|
|
ld [wSfxWaveInstrument], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld d, $a0
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $1
|
|
|
|
ld d, $18
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelNoteDelayCounters
|
2015-07-22 15:22:46 +00:00
|
|
|
call FillAudioRAM2
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wMusicTempo], a
|
|
|
|
ld [wSfxTempo], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $ff
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [wStereoPanning], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
; fills d bytes at hl with a
|
2016-06-12 00:24:04 +00:00
|
|
|
FillAudioRAM2:
|
2014-01-07 03:34:14 +00:00
|
|
|
ld b, d
|
|
|
|
.loop
|
|
|
|
ld [hli], a
|
|
|
|
dec b
|
|
|
|
jr nz, .loop
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_2224e:
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld l, a
|
|
|
|
ld e, a
|
|
|
|
ld h, $0
|
|
|
|
ld d, h
|
|
|
|
add hl, hl
|
|
|
|
add hl, de
|
2015-07-22 15:22:46 +00:00
|
|
|
ld de, SFX_Headers_2
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, de
|
|
|
|
ld e, l
|
|
|
|
ld d, h
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelCommandPointers
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, [de] ; get channel number
|
|
|
|
ld b, a
|
|
|
|
rlca
|
|
|
|
rlca
|
|
|
|
and $3
|
|
|
|
ld c, a
|
|
|
|
ld a, b
|
|
|
|
and $f
|
|
|
|
ld b, c
|
|
|
|
inc b
|
|
|
|
inc de
|
|
|
|
ld c, $0
|
|
|
|
.asm_22270
|
|
|
|
cp c
|
|
|
|
jr z, .asm_22278
|
|
|
|
inc c
|
|
|
|
inc hl
|
|
|
|
inc hl
|
|
|
|
jr .asm_22270
|
|
|
|
.asm_22278
|
|
|
|
push hl
|
|
|
|
push bc
|
|
|
|
push af
|
|
|
|
ld b, $0
|
|
|
|
ld c, a
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelSoundIDs
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], a
|
|
|
|
pop af
|
|
|
|
cp $3
|
|
|
|
jr c, .asm_22291
|
2015-08-09 05:32:44 +00:00
|
|
|
ld hl, wChannelFlags1
|
2014-01-07 03:34:14 +00:00
|
|
|
add hl, bc
|
|
|
|
set 2, [hl]
|
|
|
|
.asm_22291
|
|
|
|
pop bc
|
|
|
|
pop hl
|
|
|
|
ld a, [de] ; get channel pointer
|
|
|
|
ld [hli], a
|
|
|
|
inc de
|
|
|
|
ld a, [de]
|
|
|
|
ld [hli], a
|
|
|
|
inc de
|
|
|
|
inc c
|
|
|
|
dec b
|
|
|
|
ld a, b
|
|
|
|
and a
|
|
|
|
ld a, [de]
|
|
|
|
inc de
|
|
|
|
jr nz, .asm_22270
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $14
|
|
|
|
jr nc, .asm_222aa
|
|
|
|
jr .asm_222d4
|
|
|
|
.asm_222aa
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSoundID]
|
2014-01-07 03:34:14 +00:00
|
|
|
cp $86
|
|
|
|
jr z, .asm_222d4
|
|
|
|
jr c, .asm_222b5
|
|
|
|
jr .asm_222d4
|
|
|
|
.asm_222b5
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelSoundIDs + Ch4
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hli], a
|
|
|
|
ld [hli], a
|
|
|
|
ld [hli], a
|
|
|
|
ld [hl], a
|
2016-07-28 03:08:13 +00:00
|
|
|
ld hl, wChannelCommandPointers + Ch6 * 2 ; sfx noise channel pointer
|
2015-07-22 15:22:46 +00:00
|
|
|
ld de, Noise2_endchannel
|
2014-01-07 03:34:14 +00:00
|
|
|
ld [hl], e
|
|
|
|
inc hl
|
|
|
|
ld [hl], d ; overwrite pointer to point to endchannel
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [wSavedVolume]
|
2014-01-07 03:34:14 +00:00
|
|
|
and a
|
|
|
|
jr nz, .asm_222d4
|
2015-08-09 05:32:44 +00:00
|
|
|
ld a, [rNR50]
|
|
|
|
ld [wSavedVolume], a
|
2014-01-07 03:34:14 +00:00
|
|
|
ld a, $77
|
2015-08-09 05:32:44 +00:00
|
|
|
ld [rNR50], a
|
2014-01-07 03:34:14 +00:00
|
|
|
.asm_222d4
|
|
|
|
ret
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Noise2_endchannel:
|
2014-01-07 03:34:14 +00:00
|
|
|
endchannel
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Unknown_222d6:
|
2014-01-07 03:34:14 +00:00
|
|
|
db $10, $15, $1A, $1F ; channels 0-3
|
|
|
|
db $10, $15, $1A, $1F ; channels 4-7
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Unknown_222de:
|
2014-01-07 03:34:14 +00:00
|
|
|
db $EE, $DD, $BB, $77 ; channels 0-3
|
|
|
|
db $EE, $DD, $BB, $77 ; channels 4-7
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Unknown_222e6:
|
2014-01-07 03:34:14 +00:00
|
|
|
db $11, $22, $44, $88 ; channels 0-3
|
|
|
|
db $11, $22, $44, $88 ; channels 4-7
|
|
|
|
|
2016-06-12 00:24:04 +00:00
|
|
|
Audio2_Pitches:
|
2014-06-09 17:22:35 +00:00
|
|
|
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_
|
2014-01-07 03:34:14 +00:00
|
|
|
|
|
|
|
|