diff options
Diffstat (limited to 'audio/engine.asm')
-rw-r--r-- | audio/engine.asm | 243 |
1 files changed, 122 insertions, 121 deletions
diff --git a/audio/engine.asm b/audio/engine.asm index ec0252982..50ce3104d 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -116,19 +116,19 @@ _UpdateSound:: ; turn vibrato off for now ld hl, CHANNEL_FLAGS2 add hl, bc - res SOUND_PITCH_WHEEL, [hl] + res SOUND_PITCH_SLIDE, [hl] ; get next note call ParseMusic .continue_sound_update - call ApplyPitchWheel + call ApplyPitchSlide ; duty cycle ld hl, CHANNEL_DUTY_CYCLE add hl, bc ld a, [hli] ld [wCurTrackDuty], a - ; intensity + ; volume envelope ld a, [hli] - ld [wCurTrackIntensity], a + ld [wCurTrackVolumeEnvelope], a ; frequency ld a, [hli] ld [wCurTrackFrequency], a @@ -240,12 +240,12 @@ UpdateChannels: .Channel5: ld hl, CHANNEL_NOTE_FLAGS add hl, bc - bit NOTE_UNKN_3, [hl] - jr z, .asm_e8159 + bit NOTE_PITCH_SWEEP, [hl] + jr z, .noPitchSweep ; - ld a, [wSoundInput] + ld a, [wPitchSweep] ldh [rNR10], a -.asm_e8159 +.noPitchSweep bit NOTE_REST, [hl] ; rest jr nz, .ch1rest bit NOTE_NOISE_SAMPLING, [hl] @@ -296,7 +296,7 @@ UpdateChannels: ld a, $3f ; sound length or [hl] ldh [rNR11], a - ld a, [wCurTrackIntensity] + ld a, [wCurTrackVolumeEnvelope] ldh [rNR12], a ld a, [wCurTrackFrequency] ldh [rNR13], a @@ -356,7 +356,7 @@ UpdateChannels: ld a, $3f ; sound length or [hl] ldh [rNR21], a - ld a, [wCurTrackIntensity] + ld a, [wCurTrackVolumeEnvelope] ldh [rNR22], a ld a, [wCurTrackFrequency] ldh [rNR23], a @@ -414,7 +414,7 @@ UpdateChannels: .asm_e8268 push hl - ld a, [wCurTrackIntensity] + ld a, [wCurTrackVolumeEnvelope] and $f ; only 0-9 are valid ld l, a ld h, 0 @@ -460,7 +460,7 @@ endr ld a, [hli] ldh [rWave_f], a pop hl - ld a, [wCurTrackIntensity] + ld a, [wCurTrackVolumeEnvelope] and $f0 sla a ldh [rNR32], a @@ -492,7 +492,7 @@ endr .asm_e82d4 ld a, $3f ; sound length ldh [rNR41], a - ld a, [wCurTrackIntensity] + ld a, [wCurTrackVolumeEnvelope] ldh [rNR42], a ld a, [wCurTrackFrequency] ldh [rNR43], a @@ -706,10 +706,10 @@ FadeMusic: ret LoadNote: - ; wait for pitch wheel to finish + ; wait for pitch slide to finish ld hl, CHANNEL_FLAGS2 add hl, bc - bit SOUND_PITCH_WHEEL, [hl] + bit SOUND_PITCH_SLIDE, [hl] ret z ; get note duration ld hl, CHANNEL_NOTE_DURATION @@ -727,8 +727,8 @@ LoadNote: ld e, [hl] inc hl ld d, [hl] - ; get direction of pitch wheel - ld hl, CHANNEL_PITCH_WHEEL_TARGET + ; get direction of pitch slide + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld a, e sub [hl] @@ -736,13 +736,13 @@ LoadNote: ld a, d sbc 0 ld d, a - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc sub [hl] jr nc, .greater_than ld hl, CHANNEL_FLAGS3 add hl, bc - set SOUND_PITCH_WHEEL_DIR, [hl] + set SOUND_PITCH_SLIDE_DIR, [hl] ; get frequency ld hl, CHANNEL_FREQUENCY add hl, bc @@ -750,7 +750,7 @@ LoadNote: inc hl ld d, [hl] ; ???? - ld hl, CHANNEL_PITCH_WHEEL_TARGET + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld a, [hl] sub e @@ -759,7 +759,7 @@ LoadNote: sbc 0 ld d, a ; ???? - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc ld a, [hl] sub d @@ -769,15 +769,15 @@ LoadNote: .greater_than ld hl, CHANNEL_FLAGS3 add hl, bc - res SOUND_PITCH_WHEEL_DIR, [hl] + res SOUND_PITCH_SLIDE_DIR, [hl] ; get frequency ld hl, CHANNEL_FREQUENCY add hl, bc ld e, [hl] inc hl ld d, [hl] - ; get distance from pitch wheel target - ld hl, CHANNEL_PITCH_WHEEL_TARGET + ; get distance from pitch slide target + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld a, e sub [hl] @@ -785,7 +785,7 @@ LoadNote: ld a, d sbc 0 ld d, a - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc sub [hl] ld d, a @@ -813,10 +813,10 @@ LoadNote: add [hl] ld d, b ; quotient pop bc - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT add hl, bc ld [hl], d ; quotient - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT_FRACTION add hl, bc ld [hl], a ; remainder ld hl, CHANNEL_FIELD25 @@ -829,9 +829,9 @@ HandleTrackVibrato: ; handle duty, cry pitch, and vibrato ld hl, CHANNEL_FLAGS2 add hl, bc - bit SOUND_DUTY, [hl] ; duty + bit SOUND_DUTY_LOOP, [hl] ; duty cycle looping jr z, .next - ld hl, CHANNEL_SFX_DUTY_LOOP + ld hl, CHANNEL_DUTY_CYCLE_PATTERN add hl, bc ld a, [hl] rlca @@ -845,9 +845,9 @@ HandleTrackVibrato: .next ld hl, CHANNEL_FLAGS2 add hl, bc - bit SOUND_CRY_PITCH, [hl] + bit SOUND_PITCH_OFFSET, [hl] jr z, .vibrato - ld hl, CHANNEL_CRY_PITCH + ld hl, CHANNEL_PITCH_OFFSET add hl, bc ld e, [hl] inc hl @@ -942,11 +942,11 @@ HandleTrackVibrato: .quit ret -ApplyPitchWheel: - ; quit if pitch wheel inactive +ApplyPitchSlide: + ; quit if pitch slide inactive ld hl, CHANNEL_FLAGS2 add hl, bc - bit SOUND_PITCH_WHEEL, [hl] + bit SOUND_PITCH_SLIDE, [hl] ret z ; de = Frequency ld hl, CHANNEL_FREQUENCY @@ -954,22 +954,22 @@ ApplyPitchWheel: ld e, [hl] inc hl ld d, [hl] - ; check whether pitch wheel is going up or down + ; check whether pitch slide is going up or down ld hl, CHANNEL_FLAGS3 add hl, bc - bit SOUND_PITCH_WHEEL_DIR, [hl] + bit SOUND_PITCH_SLIDE_DIR, [hl] jr z, .decreasing - ; frequency += [Channel*PitchWheelAmount] - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT + ; frequency += [Channel*PitchSlideAmount] + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT add hl, bc ld l, [hl] ld h, 0 add hl, de ld d, h ld e, l - ; [Channel*Field25] += [Channel*PitchWheelAmountFraction] + ; [Channel*Field25] += [Channel*PitchSlideAmountFraction] ; if rollover: Frequency += 1 - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT_FRACTION add hl, bc ld a, [hl] ld hl, CHANNEL_FIELD25 @@ -982,26 +982,26 @@ ApplyPitchWheel: ld a, 0 adc d ld d, a - ; Compare the dw at [Channel*PitchWheelTarget] to de. + ; Compare the dw at [Channel*PitchSlideTarget] to de. ; If frequency is greater, we're finished. ; Otherwise, load the frequency and set two flags. - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc ld a, [hl] cp d - jp c, .finished_pitch_wheel - jr nz, .continue_pitch_wheel - ld hl, CHANNEL_PITCH_WHEEL_TARGET + jp c, .finished_pitch_slide + jr nz, .continue_pitch_slide + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld a, [hl] cp e - jp c, .finished_pitch_wheel - jr .continue_pitch_wheel + jp c, .finished_pitch_slide + jr .continue_pitch_slide .decreasing - ; frequency -= [Channel*PitchWheelAmount] + ; frequency -= [Channel*PitchSlideAmount] ld a, e - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT add hl, bc ld e, [hl] sub e @@ -1011,7 +1011,7 @@ ApplyPitchWheel: ld d, a ; [Channel*Field25] *= 2 ; if rollover: Frequency -= 1 - ld hl, CHANNEL_PITCH_WHEEL_AMOUNT_FRACTION + ld hl, CHANNEL_PITCH_SLIDE_AMOUNT_FRACTION add hl, bc ld a, [hl] add a @@ -1022,30 +1022,30 @@ ApplyPitchWheel: ld a, d sbc 0 ld d, a - ; Compare the dw at [Channel*PitchWheelTarget] to de. + ; Compare the dw at [Channel*PitchSlideTarget] to de. ; If frequency is lower, we're finished. ; Otherwise, load the frequency and set two flags. - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc ld a, d cp [hl] - jr c, .finished_pitch_wheel - jr nz, .continue_pitch_wheel - ld hl, CHANNEL_PITCH_WHEEL_TARGET + jr c, .finished_pitch_slide + jr nz, .continue_pitch_slide + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld a, e cp [hl] - jr nc, .continue_pitch_wheel -.finished_pitch_wheel + jr nc, .continue_pitch_slide +.finished_pitch_slide ld hl, CHANNEL_FLAGS2 add hl, bc - res SOUND_PITCH_WHEEL, [hl] + res SOUND_PITCH_SLIDE, [hl] ld hl, CHANNEL_FLAGS3 add hl, bc - res SOUND_PITCH_WHEEL_DIR, [hl] + res SOUND_PITCH_SLIDE_DIR, [hl] ret -.continue_pitch_wheel +.continue_pitch_slide ld hl, CHANNEL_FREQUENCY add hl, bc ld [hl], e @@ -1088,7 +1088,7 @@ ReadNoiseSample: ; [wx] [yy] [zz] ; w: ? either 2 or 3 ; x: duration -; zz: intensity +; zz: volume envelope ; yy: frequency ; de = [wNoiseSampleAddress] @@ -1105,7 +1105,7 @@ ReadNoiseSample: ld a, [de] inc de - cp endchannel_cmd + cp sound_ret_cmd jr z, .quit and $f @@ -1113,7 +1113,7 @@ ReadNoiseSample: ld [wNoiseSampleDelay], a ld a, [de] inc de - ld [wCurTrackIntensity], a + ld [wCurTrackVolumeEnvelope], a ld a, [de] inc de ld [wCurTrackFrequency], a @@ -1136,8 +1136,8 @@ ReadNoiseSample: ParseMusic: ; parses until a note is read or the song is ended call GetMusicByte ; store next byte in a - cp endchannel_cmd - jr z, .endchannel + cp sound_ret_cmd + jr z, .sound_ret cp FIRST_MUSIC_CMD jr c, .readnote ; then it's a command @@ -1196,7 +1196,7 @@ ParseMusic: set NOTE_REST, [hl] ; Rest ret -.endchannel +.sound_ret ; $ff is reached in music data ld hl, CHANNEL_FLAGS1 add hl, bc @@ -1247,10 +1247,10 @@ RestoreVolume: cp CHAN5 ret nz xor a - ld hl, wChannel6CryPitch + ld hl, wChannel6PitchOffset ld [hli], a ld [hl], a - ld hl, wChannel8CryPitch + ld hl, wChannel8PitchOffset ld [hli], a ld [hl], a ld a, [wLastVolume] @@ -1268,9 +1268,9 @@ ParseSFXOrRest: ; update note duration ld a, [wCurMusicByte] call SetNoteDuration ; top nybble doesnt matter? - ; update intensity from next param + ; update volume envelope from next param call GetMusicByte - ld hl, CHANNEL_INTENSITY + ld hl, CHANNEL_VOLUME_ENVELOPE add hl, bc ld [hl], a ; update lo frequency from next param @@ -1373,24 +1373,24 @@ MusicCommands: dw Music_Octave3 ; octave 3 dw Music_Octave2 ; octave 2 dw Music_Octave1 ; octave 1 - dw Music_NoteType ; note length + intensity - dw Music_ForceOctave ; set starting octave + dw Music_NoteType ; note length + volume envelope + dw Music_Transpose ; transpose dw Music_Tempo ; tempo dw Music_DutyCycle ; duty cycle - dw Music_Intensity ; intensity - dw Music_SoundStatus ; update sound status - dw Music_SoundDuty ; sfx duty + dw Music_VolumeEnvelope ; volume envelope + dw Music_PitchSweep ; update pitch sweep + dw Music_DutyCyclePattern ; duty cycle pattern dw Music_ToggleSFX ; sound on/off - dw Music_SlidePitchTo ; pitch wheel + dw Music_PitchSlide ; pitch slide dw Music_Vibrato ; vibrato dw MusicE2 ; unused dw Music_ToggleNoise ; music noise sampling - dw Music_Panning ; force panning + dw Music_ForceStereoPanning ; force stereo panning dw Music_Volume ; volume - dw Music_Tone ; tone + dw Music_PitchOffset ; pitch offset dw MusicE7 ; unused dw MusicE8 ; unused - dw Music_TempoRelative ; global tempo + dw Music_TempoRelative ; tempo adjust dw Music_RestartChannel ; restart current channel from header dw Music_NewSong ; new song dw Music_SFXPriorityOn ; sfx priority on @@ -1407,12 +1407,12 @@ MusicCommands: dw MusicF7 ; nothing dw MusicF8 ; nothing dw MusicF9 ; unused - dw Music_SetCondition ; setcondition + dw Music_SetCondition ; set condition dw Music_JumpIf ; jumpif - dw Music_JumpChannel ; jump - dw Music_LoopChannel ; loop - dw Music_CallChannel ; call - dw Music_EndChannel ; return + dw Music_Jump ; jump + dw Music_Loop ; loop + dw Music_Call ; call + dw Music_Ret ; return MusicF1: MusicF2: @@ -1424,7 +1424,7 @@ MusicF7: MusicF8: ret -Music_EndChannel: +Music_Ret: ; called when $ff is encountered w/ subroutine flag set ; end music stream ; return to caller of the subroutine @@ -1445,7 +1445,7 @@ Music_EndChannel: ld [hl], d ret -Music_CallChannel: +Music_Call: ; call music stream (subroutine) ; parameters: ll hh ; pointer to subroutine ; get pointer from next 2 bytes @@ -1478,7 +1478,7 @@ Music_CallChannel: set SOUND_SUBROUTINE, [hl] ret -Music_JumpChannel: +Music_Jump: ; jump ; parameters: ll hh ; pointer ; get pointer from next 2 bytes @@ -1493,7 +1493,7 @@ Music_JumpChannel: ld [hl], d ret -Music_LoopChannel: +Music_Loop: ; loops xx - 1 times ; 00: infinite ; params: 3 @@ -1740,8 +1740,8 @@ Music_Vibrato: ld [hl], a ret -Music_SlidePitchTo: -; set the target for pitch wheel +Music_PitchSlide: +; set the target for pitch slide ; params: 2 ; note duration ; target note @@ -1760,24 +1760,25 @@ Music_SlidePitchTo: and $f ld d, a call GetFrequency - ld hl, CHANNEL_PITCH_WHEEL_TARGET + ld hl, CHANNEL_PITCH_SLIDE_TARGET add hl, bc ld [hl], e - ld hl, CHANNEL_PITCH_WHEEL_TARGET + 1 + ld hl, CHANNEL_PITCH_SLIDE_TARGET + 1 add hl, bc ld [hl], d ld hl, CHANNEL_FLAGS2 add hl, bc - set SOUND_PITCH_WHEEL, [hl] + set SOUND_PITCH_SLIDE, [hl] ret -Music_Tone: +Music_PitchOffset: ; tone ; params: 1 (dw) +; offset to add to each note frequency ld hl, CHANNEL_FLAGS2 add hl, bc - set SOUND_CRY_PITCH, [hl] - ld hl, CHANNEL_CRY_PITCH + 1 + set SOUND_PITCH_OFFSET, [hl] + ld hl, CHANNEL_PITCH_OFFSET + 1 add hl, bc call GetMusicByte ld [hld], a @@ -1797,17 +1798,17 @@ MusicE7: ld [hl], a ret -Music_SoundDuty: +Music_DutyCyclePattern: ; sequence of 4 duty cycles to be looped ; params: 1 (4 2-bit duty cycle arguments) ld hl, CHANNEL_FLAGS2 add hl, bc - set SOUND_DUTY, [hl] ; duty cycle + set SOUND_DUTY_LOOP, [hl] ; duty cycle looping ; sound duty sequence call GetMusicByte rrca rrca - ld hl, CHANNEL_SFX_DUTY_LOOP + ld hl, CHANNEL_DUTY_CYCLE_PATTERN add hl, bc ld [hl], a ; update duty cycle @@ -1889,7 +1890,7 @@ Music_SFXToggleNoise: Music_NoteType: ; note length ; # frames per 16th note -; intensity: see Music_Intensity +; volume envelope: see Music_VolumeEnvelope ; params: 2 ; note length call GetMusicByte @@ -1900,18 +1901,18 @@ Music_NoteType: maskbits NUM_MUSIC_CHANS cp CHAN4 ret z - ; intensity - call Music_Intensity + ; volume envelope + call Music_VolumeEnvelope ret -Music_SoundStatus: -; update sound status +Music_PitchSweep: +; update pitch sweep ; params: 1 call GetMusicByte - ld [wSoundInput], a + ld [wPitchSweep], a ld hl, CHANNEL_NOTE_FLAGS add hl, bc - set NOTE_UNKN_3, [hl] + set NOTE_PITCH_SWEEP, [hl] ret Music_DutyCycle: @@ -1926,13 +1927,13 @@ Music_DutyCycle: ld [hl], a ret -Music_Intensity: -; intensity +Music_VolumeEnvelope: +; volume envelope ; params: 1 -; hi: pressure -; lo: velocity +; hi: volume +; lo: fade call GetMusicByte - ld hl, CHANNEL_INTENSITY + ld hl, CHANNEL_VOLUME_ENVELOPE add hl, bc ld [hl], a ret @@ -1964,12 +1965,12 @@ Music_Octave1: ld [hl], a ret -Music_ForceOctave: +Music_Transpose: ; set starting octave ; this forces all notes up by the starting octave ; params: 1 call GetMusicByte - ld hl, CHANNEL_PITCH_OFFSET + ld hl, CHANNEL_TRANSPOSITION add hl, bc ld [hl], a ret @@ -1980,12 +1981,12 @@ Music_StereoPanning: ; stereo on? ld a, [wOptions] bit STEREO, a - jr nz, Music_Panning + jr nz, Music_ForceStereoPanning ; skip param call GetMusicByte ret -Music_Panning: +Music_ForceStereoPanning: ; force panning ; params: 1 call SetLRTracks @@ -2141,7 +2142,7 @@ GetFrequency: ; get octave ; get starting octave - ld hl, CHANNEL_PITCH_OFFSET + ld hl, CHANNEL_TRANSPOSITION add hl, bc ld a, [hl] swap a ; hi nybble @@ -2150,7 +2151,7 @@ GetFrequency: add d push af ; we'll use this later ; get starting octave - ld hl, CHANNEL_PITCH_OFFSET + ld hl, CHANNEL_TRANSPOSITION add hl, bc ld a, [hl] and $f ; lo nybble @@ -2402,9 +2403,9 @@ _PlayCry:: ld hl, CHANNEL_FLAGS2 add hl, bc - set SOUND_CRY_PITCH, [hl] + set SOUND_PITCH_OFFSET, [hl] - ld hl, CHANNEL_CRY_PITCH + ld hl, CHANNEL_PITCH_OFFSET add hl, bc ld a, [wCryPitch] ld [hli], a @@ -2484,8 +2485,8 @@ _PlaySFX:: ld a, $80 ldh [rNR14], a ; restart sound (freq hi = 0) xor a - ld [wSoundInput], a ; global sound off - ldh [rNR10], a ; sweep = 0 + ld [wPitchSweep], a ; pitch sweep off + ldh [rNR10], a ; pitch sweep off .ch6 ld hl, wChannel6Flags1 bit SOUND_CHANNEL_ON, [hl] |