diff cdd_fader.c @ 2278:5a21bc0ec583

Implement turbo/slo mo for Sega CD
author Michael Pavone <pavone@retrodev.com>
date Mon, 02 Jan 2023 13:08:49 -0800
parents 4fbe1e7c4a73
children 9ead0fe69d9b
line wrap: on
line diff
--- a/cdd_fader.c	Mon Jan 02 12:24:22 2023 -0800
+++ b/cdd_fader.c	Mon Jan 02 13:08:49 2023 -0800
@@ -1,9 +1,10 @@
 #include "cdd_fader.h"
 #include <stdio.h>
+#define CDDA_MCLKS 16934400
 
 void cdd_fader_init(cdd_fader *fader)
 {
-	fader->audio = render_audio_source("CDDA", 16934400, 384, 2);
+	fader->audio = render_audio_source("CDDA", CDDA_MCLKS, 384, 2);
 	fader->cur_attenuation = 0x4000;
 	fader->dst_attenuation = 0x4000;
 	fader->attenuation_step = 0;
@@ -14,6 +15,12 @@
 	render_free_source(fader->audio);
 }
 
+void cdd_fader_set_speed_percent(cdd_fader *fader, uint32_t percent)
+{
+	uint32_t new_clock = ((uint64_t)CDDA_MCLKS * (uint64_t)percent) / 100;
+	render_audio_adjust_clock(fader->audio, new_clock, 384);
+}
+
 void cdd_fader_attenuation_write(cdd_fader *fader, uint16_t attenuation)
 {
 	fader->dst_attenuation = attenuation & 0xFFF0;