comparison sms.c @ 2525:1843adbe9899

Support VGM logging for Sega 8-bit systems
author Michael Pavone <pavone@retrodev.com>
date Mon, 11 Nov 2024 10:30:56 -0800
parents 8cf7cadc17ee
children 7e1215d17571
comparison
equal deleted inserted replaced
2524:25e40370e0e4 2525:1843adbe9899
620 io_adjust_cycles(sms->io.ports, sms->z80->Z80_CYCLE, adjust); 620 io_adjust_cycles(sms->io.ports, sms->z80->Z80_CYCLE, adjust);
621 io_adjust_cycles(sms->io.ports+1, sms->z80->Z80_CYCLE, adjust); 621 io_adjust_cycles(sms->io.ports+1, sms->z80->Z80_CYCLE, adjust);
622 z80_adjust_cycles(sms->z80, adjust); 622 z80_adjust_cycles(sms->z80, adjust);
623 vdp_adjust_cycles(sms->vdp, adjust); 623 vdp_adjust_cycles(sms->vdp, adjust);
624 sms->psg->cycles -= adjust; 624 sms->psg->cycles -= adjust;
625 if (sms->psg->vgm) {
626 vgm_adjust_cycles(sms->psg->vgm, adjust);
627 }
625 target_cycle -= adjust; 628 target_cycle -= adjust;
626 } 629 }
627 } 630 }
628 if (sms->header.force_release || render_should_release_on_exit()) { 631 if (sms->header.force_release || render_should_release_on_exit()) {
629 bindings_release_capture(); 632 bindings_release_capture();
884 } 887 }
885 } 888 }
886 #endif 889 #endif
887 } 890 }
888 891
892 static void start_vgm_log(system_header *system, char *filename)
893 {
894 sms_context *sms = (sms_context *)system;
895 //TODO: 50 Hz support
896 vgm_writer *vgm = vgm_write_open(filename, 60, sms->normal_clock, sms->z80->Z80_CYCLE);
897 if (vgm) {
898 printf("Started logging VGM to %s\n", filename);
899 psg_run(sms->psg, sms->z80->Z80_CYCLE);
900 psg_vgm_log(sms->psg, sms->normal_clock, vgm);
901 sms->header.vgm_logging = 1;
902 } else {
903 printf("Failed to start logging to %s\n", filename);
904 }
905 }
906
907 static void stop_vgm_log(system_header *system)
908 {
909 puts("Stopped VGM log");
910 sms_context *sms = (sms_context *)system;
911 vgm_close(sms->psg->vgm);
912 sms->psg->vgm = NULL;
913 sms->header.vgm_logging = 0;
914 }
915
889 sms_context *alloc_configure_sms(system_media *media, uint32_t opts, uint8_t force_region) 916 sms_context *alloc_configure_sms(system_media *media, uint32_t opts, uint8_t force_region)
890 { 917 {
891 sms_context *sms = calloc(1, sizeof(sms_context)); 918 sms_context *sms = calloc(1, sizeof(sms_context));
892 tern_node *rom_db = get_rom_db(); 919 tern_node *rom_db = get_rom_db();
893 const memmap_chunk base_map[] = { 920 const memmap_chunk base_map[] = {
1016 sms->header.keyboard_down = keyboard_down; 1043 sms->header.keyboard_down = keyboard_down;
1017 sms->header.keyboard_up = keyboard_up; 1044 sms->header.keyboard_up = keyboard_up;
1018 sms->header.config_updated = config_updated; 1045 sms->header.config_updated = config_updated;
1019 sms->header.serialize = serialize; 1046 sms->header.serialize = serialize;
1020 sms->header.deserialize = deserialize; 1047 sms->header.deserialize = deserialize;
1048 sms->header.start_vgm_log = start_vgm_log;
1049 sms->header.stop_vgm_log = stop_vgm_log;
1021 sms->header.toggle_debug_view = toggle_debug_view; 1050 sms->header.toggle_debug_view = toggle_debug_view;
1022 sms->header.type = SYSTEM_SMS; 1051 sms->header.type = SYSTEM_SMS;
1023 1052
1024 return sms; 1053 return sms;
1025 } 1054 }