comparison genesis.c @ 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 777900eb8e15
children 5a21bc0ec583
comparison
equal deleted inserted replaced
2276:709036ee222a 2277:9e578fd493e1
1681 config_gain = tern_find_path(config, "audio\0fm_gain\0", TVAL_PTR).ptrval; 1681 config_gain = tern_find_path(config, "audio\0fm_gain\0", TVAL_PTR).ptrval;
1682 render_audio_source_gaindb(gen->ym->audio, config_gain ? atof(config_gain) : 0.0f); 1682 render_audio_source_gaindb(gen->ym->audio, config_gain ? atof(config_gain) : 0.0f);
1683 1683
1684 char *config_dac = tern_find_path_default(config, "audio\0fm_dac\0", (tern_val){.ptrval="zero_offset"}, TVAL_PTR).ptrval; 1684 char *config_dac = tern_find_path_default(config, "audio\0fm_dac\0", (tern_val){.ptrval="zero_offset"}, TVAL_PTR).ptrval;
1685 ym_enable_zero_offset(gen->ym, !strcmp(config_dac, "zero_offset")); 1685 ym_enable_zero_offset(gen->ym, !strcmp(config_dac, "zero_offset"));
1686
1687 if (gen->expansion) {
1688 segacd_context *cd = gen->expansion;
1689 config_gain = tern_find_path(config, "audio\0rf5c164_gain\0", TVAL_PTR).ptrval;
1690 render_audio_source_gaindb(cd->pcm.audio, config_gain ? atof(config_gain) : -6.0f);
1691 config_gain = tern_find_path(config, "audio\0cdda_gain\0", TVAL_PTR).ptrval;
1692 render_audio_source_gaindb(cd->fader.audio, config_gain ? atof(config_gain) : -9.5f);
1693 }
1686 } 1694 }
1687 1695
1688 static void config_updated(system_header *system) 1696 static void config_updated(system_header *system)
1689 { 1697 {
1690 genesis_context *gen = (genesis_context *)system; 1698 genesis_context *gen = (genesis_context *)system;
1950 } 1958 }
1951 ym_init(gen->ym, gen->master_clock, MCLKS_PER_YM, system_opts); 1959 ym_init(gen->ym, gen->master_clock, MCLKS_PER_YM, system_opts);
1952 1960
1953 gen->psg = malloc(sizeof(psg_context)); 1961 gen->psg = malloc(sizeof(psg_context));
1954 psg_init(gen->psg, gen->master_clock, MCLKS_PER_PSG); 1962 psg_init(gen->psg, gen->master_clock, MCLKS_PER_PSG);
1955
1956 set_audio_config(gen);
1957 1963
1958 z80_map[0].buffer = gen->zram = calloc(1, Z80_RAM_BYTES); 1964 z80_map[0].buffer = gen->zram = calloc(1, Z80_RAM_BYTES);
1959 #ifndef NO_Z80 1965 #ifndef NO_Z80
1960 z80_options *z_opts = malloc(sizeof(z80_options)); 1966 z80_options *z_opts = malloc(sizeof(z80_options));
1961 init_z80_opts(z_opts, z80_map, 5, NULL, 0, MCLKS_PER_Z80, 0xFFFF); 1967 init_z80_opts(z_opts, z80_map, 5, NULL, 0, MCLKS_PER_Z80, 0xFFFF);
2206 gen->tmss_buffer = buffer; 2212 gen->tmss_buffer = buffer;
2207 } 2213 }
2208 memmap_chunk* map = info.map; 2214 memmap_chunk* map = info.map;
2209 uint32_t map_chunks = info.map_chunks; 2215 uint32_t map_chunks = info.map_chunks;
2210 if (info.wants_cd || (current_media()->chain && current_media()->chain->type == MEDIA_CDROM)) { 2216 if (info.wants_cd || (current_media()->chain && current_media()->chain->type == MEDIA_CDROM)) {
2217 gen->header.type = SYSTEM_SEGACD;
2211 segacd_context *cd = alloc_configure_segacd((system_media *)current_media(), 0, force_region, &info); 2218 segacd_context *cd = alloc_configure_segacd((system_media *)current_media(), 0, force_region, &info);
2212 gen->expansion = cd; 2219 gen->expansion = cd;
2213 gen->version_reg &= ~NO_DISK; 2220 gen->version_reg &= ~NO_DISK;
2214 cd->genesis = gen; 2221 cd->genesis = gen;
2215 uint32_t cd_chunks; 2222 uint32_t cd_chunks;
2263 gen->bank_regs[i] = i; 2270 gen->bank_regs[i] = i;
2264 } 2271 }
2265 } 2272 }
2266 gen->reset_cycle = CYCLE_NEVER; 2273 gen->reset_cycle = CYCLE_NEVER;
2267 2274
2275 set_audio_config(gen);
2268 return gen; 2276 return gen;
2269 } 2277 }
2270 2278
2271 genesis_context *alloc_config_genesis_cdboot(system_media *media, uint32_t system_opts, uint8_t force_region) 2279 genesis_context *alloc_config_genesis_cdboot(system_media *media, uint32_t system_opts, uint8_t force_region)
2272 { 2280 {
2325 if (map[i].flags & MMAP_PTR_IDX) { 2333 if (map[i].flags & MMAP_PTR_IDX) {
2326 gen->m68k->mem_pointers[map[i].ptr_index] = map[i].buffer; 2334 gen->m68k->mem_pointers[map[i].ptr_index] = map[i].buffer;
2327 } 2335 }
2328 } 2336 }
2329 gen->header.type = SYSTEM_SEGACD; 2337 gen->header.type = SYSTEM_SEGACD;
2338
2339 set_audio_config(gen);
2330 return gen; 2340 return gen;
2331 } 2341 }