comparison genesis.c @ 1909:508522f08e4d

Initial stab at VGM logging support
author Michael Pavone <pavone@retrodev.com>
date Fri, 27 Mar 2020 00:03:58 -0700
parents b021ca0bc375
children 5b94e0e7c5a5
comparison
equal deleted inserted replaced
1908:c3d49c338224 1909:508522f08e4d
402 jcart_adjust_cycles(gen, deduction); 402 jcart_adjust_cycles(gen, deduction);
403 } 403 }
404 context->current_cycle -= deduction; 404 context->current_cycle -= deduction;
405 z80_adjust_cycles(z_context, deduction); 405 z80_adjust_cycles(z_context, deduction);
406 ym_adjust_cycles(gen->ym, deduction); 406 ym_adjust_cycles(gen->ym, deduction);
407 if (gen->ym->vgm) {
408 vgm_adjust_cycles(gen->ym->vgm, deduction);
409 }
407 gen->psg->cycles -= deduction; 410 gen->psg->cycles -= deduction;
408 if (gen->reset_cycle != CYCLE_NEVER) { 411 if (gen->reset_cycle != CYCLE_NEVER) {
409 gen->reset_cycle -= deduction; 412 gen->reset_cycle -= deduction;
410 } 413 }
411 } 414 }
1450 genesis_context *gen = (genesis_context *)system; 1453 genesis_context *gen = (genesis_context *)system;
1451 setup_io_devices(config, &system->info, &gen->io); 1454 setup_io_devices(config, &system->info, &gen->io);
1452 set_audio_config(gen); 1455 set_audio_config(gen);
1453 } 1456 }
1454 1457
1458 static void start_vgm_log(system_header *system, char *filename)
1459 {
1460 genesis_context *gen = (genesis_context *)system;
1461 vgm_writer *vgm = vgm_write_open(filename, gen->version_reg & HZ50 ? 50 : 60, gen->master_clock, gen->m68k->current_cycle);
1462 if (vgm) {
1463 printf("Started logging VGM to %s\n", filename);
1464 sync_sound(gen, vgm->last_cycle);
1465 ym_vgm_log(gen->ym, gen->master_clock, vgm);
1466 psg_vgm_log(gen->psg, gen->master_clock, vgm);
1467 gen->header.vgm_logging = 1;
1468 } else {
1469 printf("Failed to start logging to %s\n", filename);
1470 }
1471 }
1472
1473 static void stop_vgm_log(system_header *system)
1474 {
1475 puts("Stopped VGM log");
1476 genesis_context *gen = (genesis_context *)system;
1477 vgm_close(gen->ym->vgm);
1478 gen->ym->vgm = gen->psg->vgm = NULL;
1479 gen->header.vgm_logging = 0;
1480 }
1481
1455 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region) 1482 genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on, uint32_t system_opts, uint8_t force_region)
1456 { 1483 {
1457 static memmap_chunk z80_map[] = { 1484 static memmap_chunk z80_map[] = {
1458 { 0x0000, 0x4000, 0x1FFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, NULL, NULL, NULL, NULL }, 1485 { 0x0000, 0x4000, 0x1FFF, 0, 0, MMAP_READ | MMAP_WRITE | MMAP_CODE, NULL, NULL, NULL, NULL, NULL },
1459 { 0x8000, 0x10000, 0x7FFF, 0, 0, 0, NULL, NULL, NULL, z80_read_bank, z80_write_bank}, 1486 { 0x8000, 0x10000, 0x7FFF, 0, 0, 0, NULL, NULL, NULL, z80_read_bank, z80_write_bank},
1482 gen->header.keyboard_down = keyboard_down; 1509 gen->header.keyboard_down = keyboard_down;
1483 gen->header.keyboard_up = keyboard_up; 1510 gen->header.keyboard_up = keyboard_up;
1484 gen->header.config_updated = config_updated; 1511 gen->header.config_updated = config_updated;
1485 gen->header.serialize = serialize; 1512 gen->header.serialize = serialize;
1486 gen->header.deserialize = deserialize; 1513 gen->header.deserialize = deserialize;
1514 gen->header.start_vgm_log = start_vgm_log;
1515 gen->header.stop_vgm_log = stop_vgm_log;
1487 gen->header.type = SYSTEM_GENESIS; 1516 gen->header.type = SYSTEM_GENESIS;
1488 gen->header.info = *rom; 1517 gen->header.info = *rom;
1489 set_region(gen, rom, force_region); 1518 set_region(gen, rom, force_region);
1490 tern_node *model = get_model(config, SYSTEM_GENESIS); 1519 tern_node *model = get_model(config, SYSTEM_GENESIS);
1491 uint8_t tmss = !strcmp(tern_find_ptr_default(model, "tmss", "off"), "on"); 1520 uint8_t tmss = !strcmp(tern_find_ptr_default(model, "tmss", "off"), "on");