changeset 2277:9e578fd493e1

Implement gain control for Ricoh PCM and CDDA with defaults based on Model 2 Sega CD
author Michael Pavone <pavone@retrodev.com>
date Mon, 02 Jan 2023 12:24:22 -0800
parents 709036ee222a
children 5a21bc0ec583
files genesis.c nuklear_ui/blastem_nuklear.c
diffstat 2 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Mon Jan 02 11:37:31 2023 -0800
+++ b/genesis.c	Mon Jan 02 12:24:22 2023 -0800
@@ -1683,6 +1683,14 @@
 
 	char *config_dac = tern_find_path_default(config, "audio\0fm_dac\0", (tern_val){.ptrval="zero_offset"}, TVAL_PTR).ptrval;
 	ym_enable_zero_offset(gen->ym, !strcmp(config_dac, "zero_offset"));
+
+	if (gen->expansion) {
+		segacd_context *cd = gen->expansion;
+		config_gain = tern_find_path(config, "audio\0rf5c164_gain\0", TVAL_PTR).ptrval;
+		render_audio_source_gaindb(cd->pcm.audio, config_gain ? atof(config_gain) : -6.0f);
+		config_gain = tern_find_path(config, "audio\0cdda_gain\0", TVAL_PTR).ptrval;
+		render_audio_source_gaindb(cd->fader.audio, config_gain ? atof(config_gain) : -9.5f);
+	}
 }
 
 static void config_updated(system_header *system)
@@ -1953,8 +1961,6 @@
 	gen->psg = malloc(sizeof(psg_context));
 	psg_init(gen->psg, gen->master_clock, MCLKS_PER_PSG);
 
-	set_audio_config(gen);
-
 	z80_map[0].buffer = gen->zram = calloc(1, Z80_RAM_BYTES);
 #ifndef NO_Z80
 	z80_options *z_opts = malloc(sizeof(z80_options));
@@ -2208,6 +2214,7 @@
 	memmap_chunk* map = info.map;
 	uint32_t map_chunks = info.map_chunks;
 	if (info.wants_cd || (current_media()->chain && current_media()->chain->type == MEDIA_CDROM)) {
+		gen->header.type = SYSTEM_SEGACD;
 		segacd_context *cd = alloc_configure_segacd((system_media *)current_media(), 0, force_region, &info);
 		gen->expansion = cd;
 		gen->version_reg &= ~NO_DISK;
@@ -2265,6 +2272,7 @@
 	}
 	gen->reset_cycle = CYCLE_NEVER;
 
+	set_audio_config(gen);
 	return gen;
 }
 
@@ -2327,5 +2335,7 @@
 		}
 	}
 	gen->header.type = SYSTEM_SEGACD;
+
+	set_audio_config(gen);
 	return gen;
 }
--- a/nuklear_ui/blastem_nuklear.c	Mon Jan 02 11:37:31 2023 -0800
+++ b/nuklear_ui/blastem_nuklear.c	Mon Jan 02 12:24:22 2023 -0800
@@ -1931,6 +1931,8 @@
 		settings_float_property(context, "Gain (dB)", "Overall", "audio\0gain\0", 0, -30.0f, 30.0f, 0.5f);
 		settings_float_property(context, "", "FM", "audio\0fm_gain\0", 0, -30.0f, 30.0f, 0.5f);
 		settings_float_property(context, "", "PSG", "audio\0psg_gain\0", 0, -30.0f, 30.0f, 0.5f);
+		settings_float_property(context, "", "RF5C164", "audio\0rf5c164_gain\0", -6.0f, -30.0f, 30.0f, 0.5f);
+		settings_float_property(context, "", "CDDA", "audio\0cdd_gain\0", -9.5f, -30.0f, 30.0f, 0.5f);
 		selected_dac = settings_dropdown_ex(context, "FM DAC", dac, dac_desc, num_dacs, selected_dac, "audio\0fm_dac\0");
 		if (nk_button_label(context, "Back")) {
 			pop_view();