aboutsummaryrefslogtreecommitdiffstats
path: root/src/sequencer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sequencer.c')
-rw-r--r--src/sequencer.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index 66f1d24..f8b4a58 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -250,6 +250,7 @@ play_step(void) {
250 wave_env = WAV_ENV_OFF; 250 wave_env = WAV_ENV_OFF;
251 SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE; 251 SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE;
252 SOUND_WAVE_FREQ = SOUND_FREQ_RESET | sound_rates[trig->note]; 252 SOUND_WAVE_FREQ = SOUND_FREQ_RESET | sound_rates[trig->note];
253 wave_env_ticks = 0;
253 } break; 254 } break;
254 } 255 }
255 wave_freq = sound_rates[trig->note]; 256 wave_freq = sound_rates[trig->note];
@@ -371,6 +372,8 @@ env_start:
371 if (wave_env_attack == 0) { 372 if (wave_env_attack == 0) {
372 memcpy32(SOUND_WAVE_RAM, wave_target, 16); 373 memcpy32(SOUND_WAVE_RAM, wave_target, 16);
373 SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1); 374 SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1);
375 memcpy32(SOUND_WAVE_RAM, wave_target, 16);
376 SOUND_WAVE_MODE ^= SOUND_WAVE_BANK_SELECT(1);
374 } else { 377 } else {
375 wave_env = WAV_ENV_ATTACK; 378 wave_env = WAV_ENV_ATTACK;
376 goto env_start; 379 goto env_start;
@@ -399,9 +402,9 @@ env_start:
399 if (wave_env_decay == 0) { 402 if (wave_env_decay == 0) {
400 wave_env = WAV_ENV_OFF; 403 wave_env = WAV_ENV_OFF;
401 } else { 404 } else {
402 wave_env_prog = 0;
403 wave_env = WAV_ENV_DECAY; 405 wave_env = WAV_ENV_DECAY;
404 } 406 }
407 wave_env_prog = 0;
405 } 408 }
406 for (size_t j = 0; j < 4; j++) { 409 for (size_t j = 0; j < 4; j++) {
407 u32 next = 0; 410 u32 next = 0;
@@ -451,6 +454,7 @@ env_start:
451 int power = powers[wave_env_prog]; 454 int power = powers[wave_env_prog];
452 if (++wave_env_prog >= 8) { 455 if (++wave_env_prog >= 8) {
453 wave_env = WAV_ENV_END; 456 wave_env = WAV_ENV_END;
457 wave_env_prog = 0;
454 } 458 }
455 for (size_t j = 0; j < 4; j++) { 459 for (size_t j = 0; j < 4; j++) {
456 u32 next = 0; 460 u32 next = 0;
@@ -491,12 +495,20 @@ env_start:
491 SOUND_WAVE_FREQ = SOUND_FREQ_RESET; 495 SOUND_WAVE_FREQ = SOUND_FREQ_RESET;
492 SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; 496 SOUND_WAVE_CTRL = SOUND_WAVE_MUTE;
493 wave_env = WAV_ENV_END; 497 wave_env = WAV_ENV_END;
498 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(0);
499 memcpy32(SOUND_WAVE_RAM, wave_zero, 16);
500 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1);
501 memcpy32(SOUND_WAVE_RAM, wave_zero, 16);
494 } 502 }
495 return; 503 return;
496 } break; 504 } break;
497 case WAV_ENV_END: { 505 case WAV_ENV_END: {
498 SOUND_WAVE_FREQ = SOUND_FREQ_RESET; 506 SOUND_WAVE_FREQ = SOUND_FREQ_RESET;
499 SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; 507 SOUND_WAVE_CTRL = SOUND_WAVE_MUTE;
508 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(0);
509 memcpy32(SOUND_WAVE_RAM, wave_zero, 16);
510 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1);
511 memcpy32(SOUND_WAVE_RAM, wave_zero, 16);
500 return; 512 return;
501 } break; 513 } break;
502 } 514 }