diff options
-rw-r--r-- | Variables.asm | 444 | ||||
-rw-r--r-- | s1.sounddriver.asm | 78 |
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 |