summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Variables.asm444
-rw-r--r--s1.sounddriver.asm78
2 files changed, 48 insertions, 474 deletions
diff --git a/Variables.asm b/Variables.asm
index 41f8362..cf8f07c 100644
--- a/Variables.asm
+++ b/Variables.asm
@@ -57,460 +57,34 @@ f_push_playing: = $02C ; if set, prevents further push sounds from playing
v_track_ram: = $040 ; Start of music RAM
v_dac_track: = v_track_ram+zTrackSz*0
-v_dac_playback_control: = v_dac_track+zTrackPlaybackControl ; Playback control bits for DAC channel
-v_dac_voice_control: = v_dac_track+zTrackVoiceControl ; Voice control bits for DAC channel
-v_dac_tempo_time: = v_dac_track+zTrackTempoDivider ; music - tempo dividing timing
-v_dac_ptr: = v_dac_track+zTrackDataPointer ; DAC channel pointer (4 bytes)
-v_dac_amsfmspan: = v_dac_track+zTrackAMSFMSPan
-v_dac_stack_ptr: = v_dac_track+zTrackStackPointer
-v_dac_note_timeout: = v_dac_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new DAC sample is needed
-v_dac_note_duration: = v_dac_track+zTrackSavedDuration
-v_dac_curr_sample: = v_dac_track+zTrackSavedDAC
-v_dac_loop_index: = v_dac_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
-; Note: using the channel assignment bits to determine FM channel #. Thus, there is no FM 3.
-
v_fm1_track: = v_track_ram+zTrackSz*1
-v_fm1_playback_control: = v_fm1_track+zTrackPlaybackControl ; Playback control bits for FM1
-v_fm1_voice_control: = v_fm1_track+zTrackVoiceControl ; Voice control bits
-v_fm1_tempo_time: = v_fm1_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm1_ptr: = v_fm1_track+zTrackDataPointer ; FM channel 0 pointer (4 bytes)
-v_fm1_key: = v_fm1_track+zTrackKeyOffset ; FM channel 0 key displacement
-v_fm1_volume: = v_fm1_track+zTrackVolume ; FM channel 0 volume attenuation
-v_fm1_amsfmspan: = v_fm1_track+zTrackAMSFMSPan
-v_fm1_voice: = v_fm1_track+zTrackVoiceIndex
-v_fm1_stack_ptr: = v_fm1_track+zTrackStackPointer
-v_fm1_note_timeout: = v_fm1_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm1_note_duration: = v_fm1_track+zTrackSavedDuration
-v_fm1_curr_note: = v_fm1_track+zTrackFreq
-v_fm1_note_fill: = v_fm1_track+zTrackNoteFillTimeout
-v_fm1_note_fill_master: = v_fm1_track+zTrackNoteFillMaster
-v_fm1_modulation_ptr: = v_fm1_track+zTrackModulationPtr ; 4 bytes
-v_fm1_modulation_wait: = v_fm1_track+zTrackModulationWait
-v_fm1_modulation_speed: = v_fm1_track+zTrackModulationSpeed
-v_fm1_modulation_delta: = v_fm1_track+zTrackModulationDelta
-v_fm1_modulation_steps: = v_fm1_track+zTrackModulationSteps
-v_fm1_modulation_freq: = v_fm1_track+zTrackModulationVal ; 2 bytes
-v_fm1_freq_adjust: = v_fm1_track+zTrackFreqDisplacement
-v_fm1_feedbackalgo: = v_fm1_track+zTrackFeedbackAlgo
-v_fm1_loop_index: = v_fm1_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_fm2_track: = v_track_ram+zTrackSz*2
-v_fm2_playback_control: = v_fm2_track+zTrackPlaybackControl ; Playback control bits for FM2
-v_fm2_voice_control: = v_fm2_track+zTrackVoiceControl ; Voice control bits
-v_fm2_tempo_time: = v_fm2_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm2_ptr: = v_fm2_track+zTrackDataPointer ; FM channel 1 pointer (4 bytes)
-v_fm2_key: = v_fm2_track+zTrackKeyOffset ; FM channel 1 key displacement
-v_fm2_volume: = v_fm2_track+zTrackVolume ; FM channel 1 volume attenuation
-v_fm2_amsfmspan: = v_fm2_track+zTrackAMSFMSPan
-v_fm2_voice: = v_fm2_track+zTrackVoiceIndex
-v_fm2_stack_ptr: = v_fm2_track+zTrackStackPointer
-v_fm2_note_timeout: = v_fm2_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm2_note_duration: = v_fm2_track+zTrackSavedDuration
-v_fm2_curr_note: = v_fm2_track+zTrackFreq
-v_fm2_note_fill: = v_fm2_track+zTrackNoteFillTimeout
-v_fm2_note_fill_master: = v_fm2_track+zTrackNoteFillMaster
-v_fm2_modulation_ptr: = v_fm2_track+zTrackModulationPtr ; 4 bytes
-v_fm2_modulation_wait: = v_fm2_track+zTrackModulationWait
-v_fm2_modulation_speed: = v_fm2_track+zTrackModulationSpeed
-v_fm2_modulation_delta: = v_fm2_track+zTrackModulationDelta
-v_fm2_modulation_steps: = v_fm2_track+zTrackModulationSteps
-v_fm2_modulation_freq: = v_fm2_track+zTrackModulationVal ; 2 bytes
-v_fm2_freq_adjust: = v_fm2_track+zTrackFreqDisplacement
-v_fm2_feedbackalgo: = v_fm2_track+zTrackFeedbackAlgo
-v_fm2_loop_index: = v_fm2_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_fm3_track: = v_track_ram+zTrackSz*3
-v_fm3_playback_control: = v_fm3_track+zTrackPlaybackControl ; Playback control bits for FM3
-v_fm3_voice_control: = v_fm3_track+zTrackVoiceControl ; Voice control bits
-v_fm3_tempo_time: = v_fm3_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm3_ptr: = v_fm3_track+zTrackDataPointer ; FM channel 2 pointer (4 bytes)
-v_fm3_key: = v_fm3_track+zTrackKeyOffset ; FM channel 2 key displacement
-v_fm3_volume: = v_fm3_track+zTrackVolume ; FM channel 2 volume attenuation
-v_fm3_amsfmspan: = v_fm3_track+zTrackAMSFMSPan
-v_fm3_voice: = v_fm3_track+zTrackVoiceIndex
-v_fm3_stack_ptr: = v_fm3_track+zTrackStackPointer
-v_fm3_note_timeout: = v_fm3_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm3_note_duration: = v_fm3_track+zTrackSavedDuration
-v_fm3_curr_note: = v_fm3_track+zTrackFreq
-v_fm3_note_fill: = v_fm3_track+zTrackNoteFillTimeout
-v_fm3_note_fill_master: = v_fm3_track+zTrackNoteFillMaster
-v_fm3_modulation_ptr: = v_fm3_track+zTrackModulationPtr ; 4 bytes
-v_fm3_modulation_wait: = v_fm3_track+zTrackModulationWait
-v_fm3_modulation_speed: = v_fm3_track+zTrackModulationSpeed
-v_fm3_modulation_delta: = v_fm3_track+zTrackModulationDelta
-v_fm3_modulation_steps: = v_fm3_track+zTrackModulationSteps
-v_fm3_modulation_freq: = v_fm3_track+zTrackModulationVal ; 2 bytes
-v_fm3_freq_adjust: = v_fm3_track+zTrackFreqDisplacement
-v_fm3_feedbackalgo: = v_fm3_track+zTrackFeedbackAlgo
-v_fm3_loop_index: = v_fm3_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_fm4_track: = v_track_ram+zTrackSz*4
-v_fm4_playback_control: = v_fm4_track+zTrackPlaybackControl ; Playback control bits for FM4
-v_fm4_voice_control: = v_fm4_track+zTrackVoiceControl ; Voice control bits
-v_fm4_tempo_time: = v_fm4_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm4_ptr: = v_fm4_track+zTrackDataPointer ; FM channel 4 pointer (4 bytes)
-v_fm4_key: = v_fm4_track+zTrackKeyOffset ; FM channel 4 key displacement
-v_fm4_volume: = v_fm4_track+zTrackVolume ; FM channel 4 volume attenuation
-v_fm4_amsfmspan: = v_fm4_track+zTrackAMSFMSPan
-v_fm4_voice: = v_fm4_track+zTrackVoiceIndex
-v_fm4_stack_ptr: = v_fm4_track+zTrackStackPointer
-v_fm4_note_timeout: = v_fm4_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm4_note_duration: = v_fm4_track+zTrackSavedDuration
-v_fm4_curr_note: = v_fm4_track+zTrackFreq
-v_fm4_note_fill: = v_fm4_track+zTrackNoteFillTimeout
-v_fm4_note_fill_master: = v_fm4_track+zTrackNoteFillMaster
-v_fm4_modulation_ptr: = v_fm4_track+zTrackModulationPtr ; 4 bytes
-v_fm4_modulation_wait: = v_fm4_track+zTrackModulationWait
-v_fm4_modulation_speed: = v_fm4_track+zTrackModulationSpeed
-v_fm4_modulation_delta: = v_fm4_track+zTrackModulationDelta
-v_fm4_modulation_steps: = v_fm4_track+zTrackModulationSteps
-v_fm4_modulation_freq: = v_fm4_track+zTrackModulationVal ; 2 bytes
-v_fm4_freq_adjust: = v_fm4_track+zTrackFreqDisplacement
-v_fm4_feedbackalgo: = v_fm4_track+zTrackFeedbackAlgo
-v_fm4_loop_index: = v_fm4_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_fm5_track: = v_track_ram+zTrackSz*5
-v_fm5_playback_control: = v_fm5_track+zTrackPlaybackControl ; Playback control bits for FM5
-v_fm5_voice_control: = v_fm5_track+zTrackVoiceControl ; Voice control bits
-v_fm5_tempo_time: = v_fm5_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm5_ptr: = v_fm5_track+zTrackDataPointer ; FM channel 5 pointer (4 bytes)
-v_fm5_key: = v_fm5_track+zTrackKeyOffset ; FM channel 5 key displacement
-v_fm5_volume: = v_fm5_track+zTrackVolume ; FM channel 5 volume attenuation
-v_fm5_amsfmspan: = v_fm5_track+zTrackAMSFMSPan
-v_fm5_voice: = v_fm5_track+zTrackVoiceIndex
-v_fm5_stack_ptr: = v_fm5_track+zTrackStackPointer
-v_fm5_note_timeout: = v_fm5_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm5_note_duration: = v_fm5_track+zTrackSavedDuration
-v_fm5_curr_note: = v_fm5_track+zTrackFreq
-v_fm5_note_fill: = v_fm5_track+zTrackNoteFillTimeout
-v_fm5_note_fill_master: = v_fm5_track+zTrackNoteFillMaster
-v_fm5_modulation_ptr: = v_fm5_track+zTrackModulationPtr ; 4 bytes
-v_fm5_modulation_wait: = v_fm5_track+zTrackModulationWait
-v_fm5_modulation_speed: = v_fm5_track+zTrackModulationSpeed
-v_fm5_modulation_delta: = v_fm5_track+zTrackModulationDelta
-v_fm5_modulation_steps: = v_fm5_track+zTrackModulationSteps
-v_fm5_modulation_freq: = v_fm5_track+zTrackModulationVal ; 2 bytes
-v_fm5_freq_adjust: = v_fm5_track+zTrackFreqDisplacement
-v_fm5_feedbackalgo: = v_fm5_track+zTrackFeedbackAlgo
-v_fm5_loop_index: = v_fm5_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_fm6_track: = v_track_ram+zTrackSz*6
-v_fm6_playback_control: = v_fm6_track+zTrackPlaybackControl ; Playback control bits for FM6
-v_fm6_voice_control: = v_fm6_track+zTrackVoiceControl ; Voice control bits
-v_fm6_tempo_time: = v_fm6_track+zTrackTempoDivider ; music - tempo dividing timing
-v_fm6_ptr: = v_fm6_track+zTrackDataPointer ; FM channel 6 pointer (4 bytes)
-v_fm6_key: = v_fm6_track+zTrackKeyOffset ; FM channel 6 key displacement
-v_fm6_volume: = v_fm6_track+zTrackVolume ; FM channel 6 volume attenuation
-v_fm6_amsfmspan: = v_fm6_track+zTrackAMSFMSPan
-v_fm6_voice: = v_fm6_track+zTrackVoiceIndex
-v_fm6_stack_ptr: = v_fm6_track+zTrackStackPointer
-v_fm6_note_timeout: = v_fm6_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_fm6_note_duration: = v_fm6_track+zTrackSavedDuration
-v_fm6_curr_note: = v_fm6_track+zTrackFreq
-v_fm6_note_fill: = v_fm6_track+zTrackNoteFillTimeout
-v_fm6_note_fill_master: = v_fm6_track+zTrackNoteFillMaster
-v_fm6_modulation_ptr: = v_fm6_track+zTrackModulationPtr ; 4 bytes
-v_fm6_modulation_wait: = v_fm6_track+zTrackModulationWait
-v_fm6_modulation_speed: = v_fm6_track+zTrackModulationSpeed
-v_fm6_modulation_delta: = v_fm6_track+zTrackModulationDelta
-v_fm6_modulation_steps: = v_fm6_track+zTrackModulationSteps
-v_fm6_modulation_freq: = v_fm6_track+zTrackModulationVal ; 2 bytes
-v_fm6_freq_adjust: = v_fm6_track+zTrackFreqDisplacement
-v_fm6_feedbackalgo: = v_fm6_track+zTrackFeedbackAlgo
-v_fm6_loop_index: = v_fm6_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_psg1_track: = v_track_ram+zTrackSz*7
-v_psg1_playback_control: = v_psg1_track+zTrackPlaybackControl ; Playback control bits for PSG1
-v_psg1_voice_control: = v_psg1_track+zTrackVoiceControl ; Voice control bits
-v_psg1_tempo_time: = v_psg1_track+zTrackTempoDivider ; music - tempo dividing timing
-v_psg1_ptr: = v_psg1_track+zTrackDataPointer ; PSG channel 1 pointer (4 bytes)
-v_psg1_key: = v_psg1_track+zTrackKeyOffset ; PSG channel 1 key displacement
-v_psg1_volume: = v_psg1_track+zTrackVolume ; PSG channel 1 volume attenuation
-v_psg1_amsfmspan: = v_psg1_track+zTrackAMSFMSPan
-v_psg1_tone: = v_psg1_track+zTrackVoiceIndex
-v_psg1_flutter_index: = v_psg1_track+zTrackVolFlutter
-v_psg1_stack_ptr: = v_psg1_track+zTrackStackPointer
-v_psg1_note_timeout: = v_psg1_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_psg1_note_duration: = v_psg1_track+zTrackSavedDuration
-v_psg1_curr_note: = v_psg1_track+zTrackFreq
-v_psg1_note_fill: = v_psg1_track+zTrackNoteFillTimeout
-v_psg1_note_fill_master: = v_psg1_track+zTrackNoteFillMaster
-v_psg1_modulation_ptr: = v_psg1_track+zTrackModulationPtr ; 4 bytes
-v_psg1_modulation_wait: = v_psg1_track+zTrackModulationWait
-v_psg1_modulation_speed: = v_psg1_track+zTrackModulationSpeed
-v_psg1_modulation_delta: = v_psg1_track+zTrackModulationDelta
-v_psg1_modulation_steps: = v_psg1_track+zTrackModulationSteps
-v_psg1_modulation_freq: = v_psg1_track+zTrackModulationVal ; 2 bytes
-v_psg1_freq_adjust: = v_psg1_track+zTrackFreqDisplacement
-v_psg1_noise: = v_psg1_track+zTrackPSGNoise
-v_psg1_loop_index: = v_psg1_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_psg2_track: = v_track_ram+zTrackSz*8
-v_psg2_playback_control: = v_psg2_track+zTrackPlaybackControl ; Playback control bits for PSG2
-v_psg2_voice_control: = v_psg2_track+zTrackVoiceControl ; Voice control bits
-v_psg2_tempo_time: = v_psg2_track+zTrackTempoDivider ; music - tempo dividing timing
-v_psg2_ptr: = v_psg2_track+zTrackDataPointer ; PSG channel 2 pointer (4 bytes)
-v_psg2_key: = v_psg2_track+zTrackKeyOffset ; PSG channel 2 key displacement
-v_psg2_volume: = v_psg2_track+zTrackVolume ; PSG channel 2 volume attenuation
-v_psg2_amsfmspan: = v_psg2_track+zTrackAMSFMSPan
-v_psg2_tone: = v_psg2_track+zTrackVoiceIndex
-v_psg2_flutter_index: = v_psg2_track+zTrackVolFlutter
-v_psg2_stack_ptr: = v_psg2_track+zTrackStackPointer
-v_psg2_note_timeout: = v_psg2_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_psg2_note_duration: = v_psg2_track+zTrackSavedDuration
-v_psg2_curr_note: = v_psg2_track+zTrackFreq
-v_psg2_note_fill: = v_psg2_track+zTrackNoteFillTimeout
-v_psg2_note_fill_master: = v_psg2_track+zTrackNoteFillMaster
-v_psg2_modulation_ptr: = v_psg2_track+zTrackModulationPtr ; 4 bytes
-v_psg2_modulation_wait: = v_psg2_track+zTrackModulationWait
-v_psg2_modulation_speed: = v_psg2_track+zTrackModulationSpeed
-v_psg2_modulation_delta: = v_psg2_track+zTrackModulationDelta
-v_psg2_modulation_steps: = v_psg2_track+zTrackModulationSteps
-v_psg2_modulation_freq: = v_psg2_track+zTrackModulationVal ; 2 bytes
-v_psg2_freq_adjust: = v_psg2_track+zTrackFreqDisplacement
-v_psg2_noise: = v_psg2_track+zTrackPSGNoise
-v_psg2_loop_index: = v_psg2_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_psg3_track: = v_track_ram+zTrackSz*9
-v_psg3_playback_control: = v_psg3_track+zTrackPlaybackControl ; Playback control bits for PSG3
-v_psg3_voice_control: = v_psg3_track+zTrackVoiceControl ; Voice control bits
-v_psg3_tempo_time: = v_psg3_track+zTrackTempoDivider ; music - tempo dividing timing
-v_psg3_ptr: = v_psg3_track+zTrackDataPointer ; PSG channel 3 pointer (4 bytes)
-v_psg3_key: = v_psg3_track+zTrackKeyOffset ; PSG channel 3 key displacement
-v_psg3_volume: = v_psg3_track+zTrackVolume ; PSG channel 3 volume attenuation
-v_psg3_amsfmspan: = v_psg3_track+zTrackAMSFMSPan
-v_psg3_tone: = v_psg3_track+zTrackVoiceIndex
-v_psg3_flutter_index: = v_psg3_track+zTrackVolFlutter
-v_psg3_stack_ptr: = v_psg3_track+zTrackStackPointer
-v_psg3_note_timeout: = v_psg3_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_psg3_note_duration: = v_psg3_track+zTrackSavedDuration
-v_psg3_curr_note: = v_psg3_track+zTrackFreq
-v_psg3_note_fill: = v_psg3_track+zTrackNoteFillTimeout
-v_psg3_note_fill_master: = v_psg3_track+zTrackNoteFillMaster
-v_psg3_modulation_ptr: = v_psg3_track+zTrackModulationPtr ; 4 bytes
-v_psg3_modulation_wait: = v_psg3_track+zTrackModulationWait
-v_psg3_modulation_speed: = v_psg3_track+zTrackModulationSpeed
-v_psg3_modulation_delta: = v_psg3_track+zTrackModulationDelta
-v_psg3_modulation_steps: = v_psg3_track+zTrackModulationSteps
-v_psg3_modulation_freq: = v_psg3_track+zTrackModulationVal ; 2 bytes
-v_psg3_freq_adjust: = v_psg3_track+zTrackFreqDisplacement
-v_psg3_noise: = v_psg3_track+zTrackPSGNoise
-v_psg3_loop_index: = v_psg3_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
-v_sfx_track_ram: = v_track_ram+zTrackSz*10 ; Start of sfx RAM, straight after the end of music RAM
+v_track_ram_end: = v_track_ram+zTrackSz*10
-v_sfx_fm3_track: = v_sfx_track_ram+zTrackSz*0
-v_sfx_fm3_playback_control: = v_sfx_fm3_track+zTrackPlaybackControl ; Playback control bits for sfx FM3
-v_sfx_fm3_voice_control: = v_sfx_fm3_track+zTrackVoiceControl ; Voice control bits
-v_sfx_fm3_tempo_time: = v_sfx_fm3_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_fm3_ptr: = v_sfx_fm3_track+zTrackDataPointer ; FM channel 2 pointer (4 bytes)
-v_sfx_fm3_key: = v_sfx_fm3_track+zTrackKeyOffset ; FM channel 2 key displacement
-v_sfx_fm3_volume: = v_sfx_fm3_track+zTrackVolume ; FM channel 2 volume attenuation
-v_sfx_fm3_amsfmspan: = v_sfx_fm3_track+zTrackAMSFMSPan
-v_sfx_fm3_voice: = v_sfx_fm3_track+zTrackVoiceIndex
-v_sfx_fm3_stack_ptr: = v_sfx_fm3_track+zTrackStackPointer
-v_sfx_fm3_note_timeout: = v_sfx_fm3_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_fm3_note_duration: = v_sfx_fm3_track+zTrackSavedDuration
-v_sfx_fm3_curr_note: = v_sfx_fm3_track+zTrackFreq
-v_sfx_fm3_note_fill: = v_sfx_fm3_track+zTrackNoteFillTimeout
-v_sfx_fm3_note_fill_master: = v_sfx_fm3_track+zTrackNoteFillMaster
-v_sfx_fm3_modulation_ptr: = v_sfx_fm3_track+zTrackModulationPtr ; 4 bytes
-v_sfx_fm3_modulation_wait: = v_sfx_fm3_track+zTrackModulationWait
-v_sfx_fm3_modulation_speed: = v_sfx_fm3_track+zTrackModulationSpeed
-v_sfx_fm3_modulation_delta: = v_sfx_fm3_track+zTrackModulationDelta
-v_sfx_fm3_modulation_steps: = v_sfx_fm3_track+zTrackModulationSteps
-v_sfx_fm3_modulation_freq: = v_sfx_fm3_track+zTrackModulationVal ; 2 bytes
-v_sfx_fm3_freq_adjust: = v_sfx_fm3_track+zTrackFreqDisplacement
-v_sfx_fm3_feedbackalgo: = v_sfx_fm3_track+zTrackFeedbackAlgo
-v_sfx_fm3_voice_ptr: = v_sfx_fm3_track+zTrackVoicePtr
-v_sfx_fm3_loop_index: = v_sfx_fm3_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
+v_sfx_track_ram: = v_track_ram_end ; Start of sfx RAM, straight after the end of music RAM
+v_sfx_fm3_track: = v_sfx_track_ram+zTrackSz*0
v_sfx_fm4_track: = v_sfx_track_ram+zTrackSz*1
-v_sfx_fm4_playback_control: = v_sfx_fm4_track+zTrackPlaybackControl ; Playback control bits for sfx FM4
-v_sfx_fm4_voice_control: = v_sfx_fm4_track+zTrackVoiceControl ; Voice control bits
-v_sfx_fm4_tempo_time: = v_sfx_fm4_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_fm4_ptr: = v_sfx_fm4_track+zTrackDataPointer ; FM channel 4 pointer (4 bytes)
-v_sfx_fm4_key: = v_sfx_fm4_track+zTrackKeyOffset ; FM channel 4 key displacement
-v_sfx_fm4_volume: = v_sfx_fm4_track+zTrackVolume ; FM channel 4 volume attenuation
-v_sfx_fm4_amsfmspan: = v_sfx_fm4_track+zTrackAMSFMSPan
-v_sfx_fm4_voice: = v_sfx_fm4_track+zTrackVoiceIndex
-v_sfx_fm4_stack_ptr: = v_sfx_fm4_track+zTrackStackPointer
-v_sfx_fm4_note_timeout: = v_sfx_fm4_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_fm4_note_duration: = v_sfx_fm4_track+zTrackSavedDuration
-v_sfx_fm4_curr_note: = v_sfx_fm4_track+zTrackFreq
-v_sfx_fm4_note_fill: = v_sfx_fm4_track+zTrackNoteFillTimeout
-v_sfx_fm4_note_fill_master: = v_sfx_fm4_track+zTrackNoteFillMaster
-v_sfx_fm4_modulation_ptr: = v_sfx_fm4_track+zTrackModulationPtr ; 4 bytes
-v_sfx_fm4_modulation_wait: = v_sfx_fm4_track+zTrackModulationWait
-v_sfx_fm4_modulation_speed: = v_sfx_fm4_track+zTrackModulationSpeed
-v_sfx_fm4_modulation_delta: = v_sfx_fm4_track+zTrackModulationDelta
-v_sfx_fm4_modulation_steps: = v_sfx_fm4_track+zTrackModulationSteps
-v_sfx_fm4_modulation_freq: = v_sfx_fm4_track+zTrackModulationVal ; 2 bytes
-v_sfx_fm4_freq_adjust: = v_sfx_fm4_track+zTrackFreqDisplacement
-v_sfx_fm4_feedbackalgo: = v_sfx_fm4_track+zTrackFeedbackAlgo
-v_sfx_fm4_voice_ptr: = v_sfx_fm4_track+zTrackVoicePtr
-v_sfx_fm4_loop_index: = v_sfx_fm4_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_sfx_fm5_track: = v_sfx_track_ram+zTrackSz*2
-v_sfx_fm5_playback_control: = v_sfx_fm5_track+zTrackPlaybackControl ; Playback control bits for sfx FM5
-v_sfx_fm5_voice_control: = v_sfx_fm5_track+zTrackVoiceControl ; Voice control bits
-v_sfx_fm5_tempo_time: = v_sfx_fm5_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_fm5_ptr: = v_sfx_fm5_track+zTrackDataPointer ; FM channel 5 pointer (4 bytes)
-v_sfx_fm5_key: = v_sfx_fm5_track+zTrackKeyOffset ; FM channel 5 key displacement
-v_sfx_fm5_volume: = v_sfx_fm5_track+zTrackVolume ; FM channel 5 volume attenuation
-v_sfx_fm5_amsfmspan: = v_sfx_fm5_track+zTrackAMSFMSPan
-v_sfx_fm5_voice: = v_sfx_fm5_track+zTrackVoiceIndex
-v_sfx_fm5_stack_ptr: = v_sfx_fm5_track+zTrackStackPointer
-v_sfx_fm5_note_timeout: = v_sfx_fm5_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_fm5_note_duration: = v_sfx_fm5_track+zTrackSavedDuration
-v_sfx_fm5_curr_note: = v_sfx_fm5_track+zTrackFreq
-v_sfx_fm5_note_fill: = v_sfx_fm5_track+zTrackNoteFillTimeout
-v_sfx_fm5_note_fill_master: = v_sfx_fm5_track+zTrackNoteFillMaster
-v_sfx_fm5_modulation_ptr: = v_sfx_fm5_track+zTrackModulationPtr ; 4 bytes
-v_sfx_fm5_modulation_wait: = v_sfx_fm5_track+zTrackModulationWait
-v_sfx_fm5_modulation_speed: = v_sfx_fm5_track+zTrackModulationSpeed
-v_sfx_fm5_modulation_delta: = v_sfx_fm5_track+zTrackModulationDelta
-v_sfx_fm5_modulation_steps: = v_sfx_fm5_track+zTrackModulationSteps
-v_sfx_fm5_modulation_freq: = v_sfx_fm5_track+zTrackModulationVal ; 2 bytes
-v_sfx_fm5_freq_adjust: = v_sfx_fm5_track+zTrackFreqDisplacement
-v_sfx_fm5_feedbackalgo: = v_sfx_fm5_track+zTrackFeedbackAlgo
-v_sfx_fm5_voice_ptr: = v_sfx_fm5_track+zTrackVoicePtr
-v_sfx_fm5_loop_index: = v_sfx_fm5_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_sfx_psg1_track: = v_sfx_track_ram+zTrackSz*3
-v_sfx_psg1_playback_control: = v_sfx_psg1_track+zTrackPlaybackControl ; Playback control bits for sfx PSG1
-v_sfx_psg1_voice_control: = v_sfx_psg1_track+zTrackVoiceControl ; Voice control bits
-v_sfx_psg1_tempo_time: = v_sfx_psg1_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_psg1_ptr: = v_sfx_psg1_track+zTrackDataPointer ; PSG channel 1 pointer (4 bytes)
-v_sfx_psg1_key: = v_sfx_psg1_track+zTrackKeyOffset ; PSG channel 1 key displacement
-v_sfx_psg1_volume: = v_sfx_psg1_track+zTrackVolume ; PSG channel 1 volume attenuation
-v_sfx_psg1_amsfmspan: = v_sfx_psg1_track+zTrackAMSFMSPan
-v_sfx_psg1_tone: = v_sfx_psg1_track+zTrackVoiceIndex
-v_sfx_psg1_flutter_index: = v_sfx_psg1_track+zTrackVolFlutter
-v_sfx_psg1_stack_ptr: = v_sfx_psg1_track+zTrackStackPointer
-v_sfx_psg1_note_timeout: = v_sfx_psg1_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_psg1_note_duration: = v_sfx_psg1_track+zTrackSavedDuration
-v_sfx_psg1_curr_note: = v_sfx_psg1_track+zTrackFreq
-v_sfx_psg1_note_fill: = v_sfx_psg1_track+zTrackNoteFillTimeout
-v_sfx_psg1_note_fill_master: = v_sfx_psg1_track+zTrackNoteFillMaster
-v_sfx_psg1_modulation_ptr: = v_sfx_psg1_track+zTrackModulationPtr ; 4 bytes
-v_sfx_psg1_modulation_wait: = v_sfx_psg1_track+zTrackModulationWait
-v_sfx_psg1_modulation_speed: = v_sfx_psg1_track+zTrackModulationSpeed
-v_sfx_psg1_modulation_delta: = v_sfx_psg1_track+zTrackModulationDelta
-v_sfx_psg1_modulation_steps: = v_sfx_psg1_track+zTrackModulationSteps
-v_sfx_psg1_modulation_freq: = v_sfx_psg1_track+zTrackModulationVal ; 2 bytes
-v_sfx_psg1_freq_adjust: = v_sfx_psg1_track+zTrackFreqDisplacement
-v_sfx_psg1_noise: = v_sfx_psg1_track+zTrackPSGNoise
-v_sfx_psg1_loop_index: = v_sfx_psg1_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_sfx_psg2_track: = v_sfx_track_ram+zTrackSz*4
-v_sfx_psg2_playback_control: = v_sfx_psg2_track+zTrackPlaybackControl ; Playback control bits for sfx PSG2
-v_sfx_psg2_voice_control: = v_sfx_psg2_track+zTrackVoiceControl ; Voice control bits
-v_sfx_psg2_tempo_time: = v_sfx_psg2_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_psg2_ptr: = v_sfx_psg2_track+zTrackDataPointer ; PSG channel 2 pointer (4 bytes)
-v_sfx_psg2_key: = v_sfx_psg2_track+zTrackKeyOffset ; PSG channel 2 key displacement
-v_sfx_psg2_volume: = v_sfx_psg2_track+zTrackVolume ; PSG channel 2 volume attenuation
-v_sfx_psg2_amsfmspan: = v_sfx_psg2_track+zTrackAMSFMSPan
-v_sfx_psg2_tone: = v_sfx_psg2_track+zTrackVoiceIndex
-v_sfx_psg2_flutter_index: = v_sfx_psg2_track+zTrackVolFlutter
-v_sfx_psg2_stack_ptr: = v_sfx_psg2_track+zTrackStackPointer
-v_sfx_psg2_note_timeout: = v_sfx_psg2_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_psg2_note_duration: = v_sfx_psg2_track+zTrackSavedDuration
-v_sfx_psg2_curr_note: = v_sfx_psg2_track+zTrackFreq
-v_sfx_psg2_note_fill: = v_sfx_psg2_track+zTrackNoteFillTimeout
-v_sfx_psg2_note_fill_master: = v_sfx_psg2_track+zTrackNoteFillMaster
-v_sfx_psg2_modulation_ptr: = v_sfx_psg2_track+zTrackModulationPtr ; 4 bytes
-v_sfx_psg2_modulation_wait: = v_sfx_psg2_track+zTrackModulationWait
-v_sfx_psg2_modulation_speed: = v_sfx_psg2_track+zTrackModulationSpeed
-v_sfx_psg2_modulation_delta: = v_sfx_psg2_track+zTrackModulationDelta
-v_sfx_psg2_modulation_steps: = v_sfx_psg2_track+zTrackModulationSteps
-v_sfx_psg2_modulation_freq: = v_sfx_psg2_track+zTrackModulationVal ; 2 bytes
-v_sfx_psg2_freq_adjust: = v_sfx_psg2_track+zTrackFreqDisplacement
-v_sfx_psg2_noise: = v_sfx_psg2_track+zTrackPSGNoise
-v_sfx_psg2_loop_index: = v_sfx_psg2_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
v_sfx_psg3_track: = v_sfx_track_ram+zTrackSz*5
-v_sfx_psg3_playback_control: = v_sfx_psg3_track+zTrackPlaybackControl ; Playback control bits for sfx PSG3
-v_sfx_psg3_voice_control: = v_sfx_psg3_track+zTrackVoiceControl ; Voice control bits
-v_sfx_psg3_tempo_time: = v_sfx_psg3_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx_psg3_ptr: = v_sfx_psg3_track+zTrackDataPointer ; PSG channel 3 pointer (4 bytes)
-v_sfx_psg3_key: = v_sfx_psg3_track+zTrackKeyOffset ; PSG channel 3 key displacement
-v_sfx_psg3_volume: = v_sfx_psg3_track+zTrackVolume ; PSG channel 3 volume attenuation
-v_sfx_psg3_amsfmspan: = v_sfx_psg3_track+zTrackAMSFMSPan
-v_sfx_psg3_tone: = v_sfx_psg3_track+zTrackVoiceIndex
-v_sfx_psg3_flutter_index: = v_sfx_psg3_track+zTrackVolFlutter
-v_sfx_psg3_stack_ptr: = v_sfx_psg3_track+zTrackStackPointer
-v_sfx_psg3_note_timeout: = v_sfx_psg3_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx_psg3_note_duration: = v_sfx_psg3_track+zTrackSavedDuration
-v_sfx_psg3_curr_note: = v_sfx_psg3_track+zTrackFreq
-v_sfx_psg3_note_fill: = v_sfx_psg3_track+zTrackNoteFillTimeout
-v_sfx_psg3_note_fill_master: = v_sfx_psg3_track+zTrackNoteFillMaster
-v_sfx_psg3_modulation_ptr: = v_sfx_psg3_track+zTrackModulationPtr ; 4 bytes
-v_sfx_psg3_modulation_wait: = v_sfx_psg3_track+zTrackModulationWait
-v_sfx_psg3_modulation_speed: = v_sfx_psg3_track+zTrackModulationSpeed
-v_sfx_psg3_modulation_delta: = v_sfx_psg3_track+zTrackModulationDelta
-v_sfx_psg3_modulation_steps: = v_sfx_psg3_track+zTrackModulationSteps
-v_sfx_psg3_modulation_freq: = v_sfx_psg3_track+zTrackModulationVal ; 2 bytes
-v_sfx_psg3_freq_adjust: = v_sfx_psg3_track+zTrackFreqDisplacement
-v_sfx_psg3_noise: = v_sfx_psg3_track+zTrackPSGNoise
-v_sfx_psg3_loop_index: = v_sfx_psg3_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
-v_sfx2_track_ram: = v_sfx_track_ram+zTrackSz*6 ; Start of special sfx RAM, straight after the end of sfx RAM
+v_sfx_track_ram_end: = v_sfx_track_ram+zTrackSz*6
-v_sfx2_fm4_track: = v_sfx2_track_ram+zTrackSz*0
-v_sfx2_fm4_playback_control: = v_sfx2_fm4_track+zTrackPlaybackControl ; Playback control bits for sfx FM4
-v_sfx2_fm4_voice_control: = v_sfx2_fm4_track+zTrackVoiceControl ; Voice control bits
-v_sfx2_fm4_tempo_time: = v_sfx2_fm4_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx2_fm4_ptr: = v_sfx2_fm4_track+zTrackDataPointer ; FM channel 4 pointer (4 bytes)
-v_sfx2_fm4_key: = v_sfx2_fm4_track+zTrackKeyOffset ; FM channel 4 key displacement
-v_sfx2_fm4_volume: = v_sfx2_fm4_track+zTrackVolume ; FM channel 4 volume attenuation
-v_sfx2_fm4_amsfmspan: = v_sfx2_fm4_track+zTrackAMSFMSPan
-v_sfx2_fm4_voice: = v_sfx2_fm4_track+zTrackVoiceIndex
-v_sfx2_fm4_stack_ptr: = v_sfx2_fm4_track+zTrackStackPointer
-v_sfx2_fm4_note_timeout: = v_sfx2_fm4_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx2_fm4_note_duration: = v_sfx2_fm4_track+zTrackSavedDuration
-v_sfx2_fm4_curr_note: = v_sfx2_fm4_track+zTrackFreq
-v_sfx2_fm4_note_fill: = v_sfx2_fm4_track+zTrackNoteFillTimeout
-v_sfx2_fm4_note_fill_master: = v_sfx2_fm4_track+zTrackNoteFillMaster
-v_sfx2_fm4_modulation_ptr: = v_sfx2_fm4_track+zTrackModulationPtr ; 4 bytes
-v_sfx2_fm4_modulation_wait: = v_sfx2_fm4_track+zTrackModulationWait
-v_sfx2_fm4_modulation_speed: = v_sfx2_fm4_track+zTrackModulationSpeed
-v_sfx2_fm4_modulation_delta: = v_sfx2_fm4_track+zTrackModulationDelta
-v_sfx2_fm4_modulation_steps: = v_sfx2_fm4_track+zTrackModulationSteps
-v_sfx2_fm4_modulation_freq: = v_sfx2_fm4_track+zTrackModulationVal ; 2 bytes
-v_sfx2_fm4_freq_adjust: = v_sfx2_fm4_track+zTrackFreqDisplacement
-v_sfx2_fm4_feedbackalgo: = v_sfx2_fm4_track+zTrackFeedbackAlgo
-v_sfx2_fm4_voice_ptr: = v_sfx2_fm4_track+zTrackVoicePtr
-v_sfx2_fm4_loop_index: = v_sfx2_fm4_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
+v_sfx2_track_ram: = v_sfx_track_ram_end ; Start of special sfx RAM, straight after the end of sfx RAM
+v_sfx2_fm4_track: = v_sfx2_track_ram+zTrackSz*0
v_sfx2_psg3_track: = v_sfx2_track_ram+zTrackSz*1
-v_sfx2_psg3_playback_control: = v_sfx2_psg3_track+zTrackPlaybackControl ; Playback control bits for sfx PSG3
-v_sfx2_psg3_voice_control: = v_sfx2_psg3_track+zTrackVoiceControl ; Voice control bits
-v_sfx2_psg3_tempo_time: = v_sfx2_psg3_track+zTrackTempoDivider ; sfx - tempo dividing timing
-v_sfx2_psg3_ptr: = v_sfx2_psg3_track+zTrackDataPointer ; PSG channel 3 pointer (4 bytes)
-v_sfx2_psg3_key: = v_sfx2_psg3_track+zTrackKeyOffset ; PSG channel 3 key displacement
-v_sfx2_psg3_volume: = v_sfx2_psg3_track+zTrackVolume ; PSG channel 3 volume attenuation
-v_sfx2_psg3_amsfmspan: = v_sfx2_psg3_track+zTrackAMSFMSPan
-v_sfx2_psg3_tone: = v_sfx2_psg3_track+zTrackVoiceIndex
-v_sfx2_psg3_flutter_index: = v_sfx2_psg3_track+zTrackVolFlutter
-v_sfx2_psg3_stack_ptr: = v_sfx2_psg3_track+zTrackStackPointer
-v_sfx2_psg3_note_timeout: = v_sfx2_psg3_track+zTrackDurationTimeout ; byte ; Counts down to zero; when zero, a new note is needed
-v_sfx2_psg3_note_duration: = v_sfx2_psg3_track+zTrackSavedDuration
-v_sfx2_psg3_curr_note: = v_sfx2_psg3_track+zTrackFreq
-v_sfx2_psg3_note_fill: = v_sfx2_psg3_track+zTrackNoteFillTimeout
-v_sfx2_psg3_note_fill_master: = v_sfx2_psg3_track+zTrackNoteFillMaster
-v_sfx2_psg3_modulation_ptr: = v_sfx2_psg3_track+zTrackModulationPtr ; 4 bytes
-v_sfx2_psg3_modulation_wait: = v_sfx2_psg3_track+zTrackModulationWait
-v_sfx2_psg3_modulation_speed: = v_sfx2_psg3_track+zTrackModulationSpeed
-v_sfx2_psg3_modulation_delta: = v_sfx2_psg3_track+zTrackModulationDelta
-v_sfx2_psg3_modulation_steps: = v_sfx2_psg3_track+zTrackModulationSteps
-v_sfx2_psg3_modulation_freq: = v_sfx2_psg3_track+zTrackModulationVal ; 2 bytes
-v_sfx2_psg3_freq_adjust: = v_sfx2_psg3_track+zTrackFreqDisplacement
-v_sfx2_psg3_noise: = v_sfx2_psg3_track+zTrackPSGNoise
-v_sfx2_psg3_loop_index: = v_sfx2_psg3_track+zTrackLoopCounters ; Several bytes, may overlap with gosub/return stack
-
-v_1up_ram_copy: = $3A0
+v_sfx2_track_ram_end: = v_sfx2_track_ram+zTrackSz*2
+
+v_1up_ram_copy: = v_sfx2_track_ram_end
; =================================================================================
; From here on, no longer relative to sound driver RAM
diff --git a/s1.sounddriver.asm b/s1.sounddriver.asm
index 29ff807..92616b6 100644
--- a/s1.sounddriver.asm
+++ b/s1.sounddriver.asm
@@ -708,7 +708,7 @@ Sound_PlayBGM:
clr.b v_sndprio(a6) ; Clear priority
movea.l a6,a0
lea v_1up_ram_copy(a6),a1
- move.w #(((v_psg3_track+zTrackSz)-v_startofvariables)/4)-1,d0 ; Backup $220 bytes: all variables and music track data
+ move.w #((v_track_ram_end-v_startofvariables)/4)-1,d0 ; Backup $220 bytes: all variables and music track data
; loc_72012:
@backupramloop:
move.l (a0)+,(a1)+
@@ -852,14 +852,14 @@ Sound_PlayBGM:
adda.w d6,a1
dbf d7,@sfxstoploop
- tst.w v_sfx2_fm4_playback_control(a6) ; Is special SFX being played?
- bpl.s @checkspecialpsg ; Branch if not
- bset #2,v_fm4_playback_control(a6) ; Set 'SFX is overriding' bit
+ tst.w v_sfx2_fm4_track+zTrackPlaybackControl(a6) ; Is special SFX being played?
+ bpl.s @checkspecialpsg ; Branch if not
+ bset #2,v_fm4_track+zTrackPlaybackControl(a6) ; Set 'SFX is overriding' bit
; loc_7218E:
@checkspecialpsg:
- tst.w v_sfx2_psg3_playback_control(a6) ; Is special SFX being played?
- bpl.s @sendfmnoteoff ; Branch if not
- bset #2,v_psg3_playback_control(a6) ; Set 'SFX is overriding' bit
+ tst.w v_sfx2_psg3_track+zTrackPlaybackControl(a6) ; Is special SFX being played?
+ bpl.s @sendfmnoteoff ; Branch if not
+ bset #2,v_psg3_track+zTrackPlaybackControl(a6) ; Set 'SFX is overriding' bit
; loc_7219A:
@sendfmnoteoff:
lea v_fm1_track(a6),a5
@@ -983,14 +983,14 @@ Sound_PlaySFX:
@sfxpsginitdone:
dbf d7,@sfx_loadloop
- tst.b v_sfx_fm4_playback_control(a6) ; Is special SFX being played?
- bpl.s @doneoverride ; Branch if not
- bset #2,v_sfx2_fm4_playback_control(a6) ; Set SFX is overriding bit
+ tst.b v_sfx_fm4_track+zTrackPlaybackControl(a6) ; Is special SFX being played?
+ bpl.s @doneoverride ; Branch if not
+ bset #2,v_sfx2_fm4_track+zTrackPlaybackControl(a6) ; Set SFX is overriding bit
; loc_722B8:
@doneoverride:
- tst.b v_sfx_psg3_track(a6) ; Is special SFX being played?
- bpl.s @locret ; Branch if not
- bset #2,v_sfx2_psg3_playback_control(a6) ; Set SFX is overriding bit
+ tst.b v_sfx_psg3_track(a6) ; Is special SFX being played?
+ bpl.s @locret ; Branch if not
+ bset #2,v_sfx2_psg3_track+zTrackPlaybackControl(a6) ; Set SFX is overriding bit
; locret_722C4:
@locret:
rts
@@ -1052,15 +1052,15 @@ Sound_PlaySpecial:
moveq #zTrackSz,d6
; loc_72348:
@sfxloadloop:
- move.b 1(a1),d4 ; Voice control bits
- bmi.s @sfxoverridepsg ; Branch if PSG
- bset #2,v_fm4_playback_control(a6) ; Set SFX is overriding bit
+ move.b 1(a1),d4 ; Voice control bits
+ bmi.s @sfxoverridepsg ; Branch if PSG
+ bset #2,v_fm4_track+zTrackPlaybackControl(a6) ; Set SFX is overriding bit
lea v_sfx2_fm4_track(a6),a5
bra.s @sfxinitpsg
; ===========================================================================
; loc_7235A:
@sfxoverridepsg:
- bset #2,v_psg3_playback_control(a6) ; Set SFX is overriding bit
+ bset #2,v_psg3_track+zTrackPlaybackControl(a6) ; Set SFX is overriding bit
lea v_sfx2_psg3_track(a6),a5
; loc_72364:
@sfxinitpsg:
@@ -1087,15 +1087,15 @@ Sound_PlaySpecial:
@sfxpsginitdone:
dbf d7,@sfxloadloop
- tst.b v_sfx_fm4_playback_control(a6) ; Is track playing?
- bpl.s @doneoverride ; Branch if not
- bset #2,v_sfx2_fm4_playback_control(a6) ; Set SFX is overriding track
+ tst.b v_sfx_fm4_track+zTrackPlaybackControl(a6) ; Is track playing?
+ bpl.s @doneoverride ; Branch if not
+ bset #2,v_sfx2_fm4_track+zTrackPlaybackControl(a6) ; Set SFX is overriding track
; loc_723A6:
@doneoverride:
- tst.b v_sfx_psg3_playback_control(a6) ; Is track playing?
- bpl.s @locret ; Branch if not
- bset #2,v_sfx2_psg3_playback_control(a6) ; Set SFX is overriding track
- ori.b #$1F,d4 ; Command to silence channel
+ tst.b v_sfx_psg3_track+zTrackPlaybackControl(a6) ; Is track playing?
+ bpl.s @locret ; Branch if not
+ bset #2,v_sfx2_psg3_track+zTrackPlaybackControl(a6) ; Set SFX is overriding track
+ ori.b #$1F,d4 ; Command to silence channel
move.b d4,(psg_input).l
bchg #5,d4 ; Command to silence noise channel
move.b d4,(psg_input).l
@@ -1147,10 +1147,10 @@ StopSFX:
move.b zTrackVoiceControl(a5),d3 ; Get voice control bits
bmi.s @trackpsg ; Branch if PSG
jsr FMNoteOff(pc)
- cmpi.b #4,d3 ; Is this FM4?
- bne.s @getfmpointer ; Branch if not
- tst.b v_sfx2_fm4_playback_control(a6) ; Is special SFX playing?
- bpl.s @getfmpointer ; Branch if not
+ cmpi.b #4,d3 ; Is this FM4?
+ bne.s @getfmpointer ; Branch if not
+ tst.b v_sfx2_fm4_track+zTrackPlaybackControl(a6) ; Is special SFX playing?
+ bpl.s @getfmpointer ; Branch if not
; DANGER! there is a missing 'movea.l a5,a3' here, without which the
; code is broken. It is dangerous to do a fade out when a GHZ waterfall
; is playing its sound!
@@ -1251,10 +1251,10 @@ StopSpecialSFX:
FadeOutMusic:
jsr StopSFX(pc)
jsr StopSpecialSFX(pc)
- move.b #3,v_fadeout_delay(a6) ; Set fadeout delay to 3
- move.b #$28,v_fadeout_counter(a6) ; Set fadeout counter
- clr.b v_dac_playback_control(a6) ; Stop DAC track
- clr.b f_speedup(a6) ; Disable speed shoes tempo
+ move.b #3,v_fadeout_delay(a6) ; Set fadeout delay to 3
+ move.b #$28,v_fadeout_counter(a6) ; Set fadeout counter
+ clr.b v_dac_track+zTrackPlaybackControl(a6) ; Stop DAC track
+ clr.b f_speedup(a6) ; Disable speed shoes tempo
rts
; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
@@ -1362,7 +1362,7 @@ StopSoundAndMusic:
movea.l a6,a0
; DANGER! This should be clearing all variables and track data, but misses the last $10 bytes of v_sfx2_psg3_track.
; Remove the '-$10' to fix this.
- move.w #(((v_sfx2_psg3_track+zTrackSz-$10)-v_startofvariables)/4)-1,d0 ; Clear $390 bytes: all variables and most track data
+ move.w #((v_sfx2_track_ram_end-v_startofvariables-$10)/4)-1,d0 ; Clear $390 bytes: all variables and most track data
; loc_725B6:
@clearramloop:
clr.l (a0)+
@@ -1383,7 +1383,7 @@ InitMusicPlayback:
move.b f_speedup(a6),d3
move.b v_fadein_counter(a6),d4
move.w v_playsnd1(a6),d5
- move.w #(((v_psg3_track+zTrackSz)-v_startofvariables)/4)-1,d0 ; Clear $220 bytes: all variables and music track data
+ move.w #((v_track_ram_end-v_startofvariables)/4)-1,d0 ; Clear $220 bytes: all variables and music track data
; loc_725E4:
@clearramloop:
clr.l (a0)+
@@ -1505,8 +1505,8 @@ DoFadeIn:
; ===========================================================================
; loc_726D6:
@fadedone:
- bclr #2,v_dac_playback_control(a6) ; Clear SFX overriding bit
- clr.b f_fadein_flag(a6) ; Stop fadein
+ bclr #2,v_dac_track+zTrackPlaybackControl(a6) ; Clear SFX overriding bit
+ clr.b f_fadein_flag(a6) ; Stop fadein
rts
; End of function DoFadeIn
@@ -1963,13 +1963,13 @@ cfJumpReturn:
cfFadeInToPrevious:
movea.l a6,a0
lea v_1up_ram_copy(a6),a1
- move.w #(((v_psg3_track+zTrackSz)-v_startofvariables)/4)-1,d0 ; $220 bytes to restore: all variables and music track data
+ move.w #((v_track_ram_end-v_startofvariables)/4)-1,d0 ; $220 bytes to restore: all variables and music track data
; loc_72B1E:
@restoreramloop:
move.l (a1)+,(a0)+
dbf d0,@restoreramloop
- bset #2,v_dac_playback_control(a6) ; Set SFX overriding bit
+ bset #2,v_dac_track+zTrackPlaybackControl(a6) ; Set SFX overriding bit
movea.l a5,a3
move.b #$28,d6
sub.b v_fadein_counter(a6),d6 ; If fade already in progress, this adjusts track volume accordingly
@@ -2289,7 +2289,7 @@ cfStopTrack:
movea.l a5,a3
cmpi.b #4,d0 ; Is this FM4?
bne.s @getpointer ; Branch if not
- tst.b v_sfx2_fm4_playback_control(a6) ; Is special SFX playing?
+ tst.b v_sfx2_fm4_track+zTrackPlaybackControl(a6) ; Is special SFX playing?
bpl.s @getpointer ; Branch if not
lea v_sfx2_fm4_track(a6),a5
movea.l v_special_voice_ptr(a6),a1 ; Get voice pointer