Mercurial > repos > blastem
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); |