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