comparison sms.c @ 2529:a6687a6fb69d

Merge
author Michael Pavone <pavone@retrodev.com>
date Mon, 25 Nov 2024 22:30:32 -0800
parents 90a40be940f7 7e1215d17571
children f4a471730ba4
comparison
equal deleted inserted replaced
2528:90a40be940f7 2529:a6687a6fb69d
373 { 373 {
374 z80_context *z80 = vcontext; 374 z80_context *z80 = vcontext;
375 sms_context *sms = z80->system; 375 sms_context *sms = z80->system;
376 psg_run(sms->psg, z80->Z80_CYCLE); 376 psg_run(sms->psg, z80->Z80_CYCLE);
377 sms->psg->pan = value; 377 sms->psg->pan = value;
378 if (sms->psg->vgm) {
379 vgm_gg_pan_write(sms->psg->vgm, sms->psg->cycles, sms->psg->pan);
380 }
378 return vcontext; 381 return vcontext;
379 } 382 }
380 383
381 static void *ppi_write(uint32_t location, void *vcontext, uint8_t value) 384 static void *ppi_write(uint32_t location, void *vcontext, uint8_t value)
382 { 385 {
715 io_adjust_cycles(sms->io.ports+1, sms->z80->Z80_CYCLE, adjust); 718 io_adjust_cycles(sms->io.ports+1, sms->z80->Z80_CYCLE, adjust);
716 z80_adjust_cycles(sms->z80, adjust); 719 z80_adjust_cycles(sms->z80, adjust);
717 vdp_adjust_cycles(sms->vdp, adjust); 720 vdp_adjust_cycles(sms->vdp, adjust);
718 sms->psg->cycles -= adjust; 721 sms->psg->cycles -= adjust;
719 sms->cassette_cycle -= adjust; 722 sms->cassette_cycle -= adjust;
723 if (sms->psg->vgm) {
724 vgm_adjust_cycles(sms->psg->vgm, adjust);
725 }
720 target_cycle -= adjust; 726 target_cycle -= adjust;
721 } 727 }
722 } 728 }
723 if (sms->header.force_release || render_should_release_on_exit()) { 729 if (sms->header.force_release || render_should_release_on_exit()) {
724 bindings_release_capture(); 730 bindings_release_capture();
1009 sms->cassette_state = TAPE_STOPPED; 1015 sms->cassette_state = TAPE_STOPPED;
1010 sms->cassette_offset = data_sub_chunk; 1016 sms->cassette_offset = data_sub_chunk;
1011 sms->cassette = media; 1017 sms->cassette = media;
1012 } 1018 }
1013 1019
1020 static void start_vgm_log(system_header *system, char *filename)
1021 {
1022 sms_context *sms = (sms_context *)system;
1023 //TODO: 50 Hz support
1024 vgm_writer *vgm = vgm_write_open(filename, 60, sms->normal_clock, sms->z80->Z80_CYCLE);
1025 if (vgm) {
1026 printf("Started logging VGM to %s\n", filename);
1027 psg_run(sms->psg, sms->z80->Z80_CYCLE);
1028 psg_vgm_log(sms->psg, sms->normal_clock, vgm);
1029 sms->header.vgm_logging = 1;
1030 } else {
1031 printf("Failed to start logging to %s\n", filename);
1032 }
1033 }
1034
1035 static void stop_vgm_log(system_header *system)
1036 {
1037 puts("Stopped VGM log");
1038 sms_context *sms = (sms_context *)system;
1039 vgm_close(sms->psg->vgm);
1040 sms->psg->vgm = NULL;
1041 sms->header.vgm_logging = 0;
1042 }
1043
1014 sms_context *alloc_configure_sms(system_media *media, uint32_t opts, uint8_t force_region) 1044 sms_context *alloc_configure_sms(system_media *media, uint32_t opts, uint8_t force_region)
1015 { 1045 {
1016 sms_context *sms = calloc(1, sizeof(sms_context)); 1046 sms_context *sms = calloc(1, sizeof(sms_context));
1017 tern_node *rom_db = get_rom_db(); 1047 tern_node *rom_db = get_rom_db();
1018 const memmap_chunk base_map[] = { 1048 const memmap_chunk base_map[] = {
1147 sms->header.keyboard_down = keyboard_down; 1177 sms->header.keyboard_down = keyboard_down;
1148 sms->header.keyboard_up = keyboard_up; 1178 sms->header.keyboard_up = keyboard_up;
1149 sms->header.config_updated = config_updated; 1179 sms->header.config_updated = config_updated;
1150 sms->header.serialize = serialize; 1180 sms->header.serialize = serialize;
1151 sms->header.deserialize = deserialize; 1181 sms->header.deserialize = deserialize;
1182 sms->header.start_vgm_log = start_vgm_log;
1183 sms->header.stop_vgm_log = stop_vgm_log;
1152 sms->header.toggle_debug_view = toggle_debug_view; 1184 sms->header.toggle_debug_view = toggle_debug_view;
1153 sms->header.cassette_action = cassette_action; 1185 sms->header.cassette_action = cassette_action;
1154 sms->header.type = SYSTEM_SMS; 1186 sms->header.type = SYSTEM_SMS;
1155 1187
1156 return sms; 1188 return sms;