comparison genesis.c @ 1798:5278b6e44fc1

Optionally emulate the offset around zero in the imperfect DAC of a discrete YM2612
author Michael Pavone <pavone@retrodev.com>
date Sun, 24 Mar 2019 19:59:41 -0700
parents 51417bb557b6
children 49f65d240299 ef3d368d59b0
comparison
equal deleted inserted replaced
1797:5ff8f0d28188 1798:5278b6e44fc1
1332 { 1332 {
1333 genesis_context *gen = (genesis_context *)system; 1333 genesis_context *gen = (genesis_context *)system;
1334 io_keyboard_up(&gen->io, scancode); 1334 io_keyboard_up(&gen->io, scancode);
1335 } 1335 }
1336 1336
1337 static void set_gain_config(genesis_context *gen) 1337 static void set_audio_config(genesis_context *gen)
1338 { 1338 {
1339 char *config_gain; 1339 char *config_gain;
1340 config_gain = tern_find_path(config, "audio\0psg_gain\0", TVAL_PTR).ptrval; 1340 config_gain = tern_find_path(config, "audio\0psg_gain\0", TVAL_PTR).ptrval;
1341 render_audio_source_gaindb(gen->psg->audio, config_gain ? atof(config_gain) : 0.0f); 1341 render_audio_source_gaindb(gen->psg->audio, config_gain ? atof(config_gain) : 0.0f);
1342 config_gain = tern_find_path(config, "audio\0fm_gain\0", TVAL_PTR).ptrval; 1342 config_gain = tern_find_path(config, "audio\0fm_gain\0", TVAL_PTR).ptrval;
1343 render_audio_source_gaindb(gen->ym->audio, config_gain ? atof(config_gain) : 0.0f); 1343 render_audio_source_gaindb(gen->ym->audio, config_gain ? atof(config_gain) : 0.0f);
1344
1345 char *config_dac = tern_find_path_default(config, "audio\0fm_dac\0", (tern_val){.ptrval="zero_offset"}, TVAL_PTR).ptrval;
1346 ym_enable_zero_offset(gen->ym, !strcmp(config_dac, "zero_offset"));
1344 } 1347 }
1345 1348
1346 static void config_updated(system_header *system) 1349 static void config_updated(system_header *system)
1347 { 1350 {
1348 genesis_context *gen = (genesis_context *)system; 1351 genesis_context *gen = (genesis_context *)system;
1349 setup_io_devices(config, &system->info, &gen->io); 1352 setup_io_devices(config, &system->info, &gen->io);
1350 set_gain_config(gen); 1353 set_audio_config(gen);
1351 } 1354 }
1352 1355
1353 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region) 1356 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region)
1354 { 1357 {
1355 static memmap_chunk z80_map[] = { 1358 static memmap_chunk z80_map[] = {
1400 ym_init(gen->ym, gen->master_clock, MCLKS_PER_YM, system_opts); 1403 ym_init(gen->ym, gen->master_clock, MCLKS_PER_YM, system_opts);
1401 1404
1402 gen->psg = malloc(sizeof(psg_context)); 1405 gen->psg = malloc(sizeof(psg_context));
1403 psg_init(gen->psg, gen->master_clock, MCLKS_PER_PSG); 1406 psg_init(gen->psg, gen->master_clock, MCLKS_PER_PSG);
1404 1407
1405 set_gain_config(gen); 1408 set_audio_config(gen);
1406 1409
1407 z80_map[0].buffer = gen->zram = calloc(1, Z80_RAM_BYTES); 1410 z80_map[0].buffer = gen->zram = calloc(1, Z80_RAM_BYTES);
1408 #ifndef NO_Z80 1411 #ifndef NO_Z80
1409 z80_options *z_opts = malloc(sizeof(z80_options)); 1412 z80_options *z_opts = malloc(sizeof(z80_options));
1410 init_z80_opts(z_opts, z80_map, 5, NULL, 0, MCLKS_PER_Z80, 0xFFFF); 1413 init_z80_opts(z_opts, z80_map, 5, NULL, 0, MCLKS_PER_Z80, 0xFFFF);