Mercurial > repos > blastem
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 } |