changeset 2527:7e1215d17571

Log Game Gear PSG Pan to VGM
author Michael Pavone <pavone@retrodev.com>
date Mon, 11 Nov 2024 11:20:22 -0800
parents 9c6f53425140
children a6687a6fb69d
files psg.c sms.c vgm.c vgm.h
diffstat 4 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/psg.c	Mon Nov 11 10:45:14 2024 -0800
+++ b/psg.c	Mon Nov 11 11:20:22 2024 -0800
@@ -198,6 +198,9 @@
 			vgm_sn76489_write(context->vgm, context->cycles, context->counter_load[chan] >> 4 & 0x3F);
 		}
 	}
+	if (context->pan != 0xFF) {
+		vgm_gg_pan_write(context->vgm, context->cycles, context->pan);
+	}
 }
 
 void psg_serialize(psg_context *context, serialize_buffer *buf)
--- a/sms.c	Mon Nov 11 10:45:14 2024 -0800
+++ b/sms.c	Mon Nov 11 11:20:22 2024 -0800
@@ -282,6 +282,9 @@
 	sms_context *sms = z80->system;
 	psg_run(sms->psg, z80->Z80_CYCLE);
 	sms->psg->pan = value;
+	if (sms->psg->vgm) {
+		vgm_gg_pan_write(sms->psg->vgm, sms->psg->cycles, sms->psg->pan);
+	}
 	return vcontext;
 }
 
--- a/vgm.c	Mon Nov 11 10:45:14 2024 -0800
+++ b/vgm.c	Mon Nov 11 11:20:22 2024 -0800
@@ -81,12 +81,17 @@
 	wait_commands(writer, delta);
 }
 
-static uint8_t last_cmd;
 void vgm_sn76489_write(vgm_writer *writer, uint32_t cycle, uint8_t value)
 {
 	add_wait(writer, cycle);
 	uint8_t cmd[2] = {CMD_PSG, value};
-	last_cmd = CMD_PSG;
+	fwrite(cmd, 1, sizeof(cmd), writer->f);
+}
+
+void vgm_gg_pan_write(vgm_writer *writer, uint32_t cycle, uint8_t value)
+{
+	add_wait(writer, cycle);
+	uint8_t cmd[2] = {CMD_PSG_STEREO, value};
 	fwrite(cmd, 1, sizeof(cmd), writer->f);
 }
 
@@ -99,7 +104,6 @@
 {
 	add_wait(writer, cycle);
 	uint8_t cmd[3] = {CMD_YM2612_0, reg, value};
-	last_cmd = CMD_YM2612_0;
 	fwrite(cmd, 1, sizeof(cmd), writer->f);
 }
 
@@ -107,7 +111,6 @@
 {
 	add_wait(writer, cycle);
 	uint8_t cmd[3] = {CMD_YM2612_1, reg, value};
-	last_cmd = CMD_YM2612_1;
 	fwrite(cmd, 1, sizeof(cmd), writer->f);
 }
 
--- a/vgm.h	Mon Nov 11 10:45:14 2024 -0800
+++ b/vgm.h	Mon Nov 11 11:20:22 2024 -0800
@@ -135,6 +135,7 @@
 vgm_writer *vgm_write_open(char *filename, uint32_t rate, uint32_t clock, uint32_t cycle);
 void vgm_sn76489_init(vgm_writer *writer, uint32_t clock, uint16_t feedback, uint8_t shift_reg_size, uint8_t flags);
 void vgm_sn76489_write(vgm_writer *writer, uint32_t cycle, uint8_t value);
+void vgm_gg_pan_write(vgm_writer *writer, uint32_t cycle, uint8_t value);
 void vgm_ym2612_init(vgm_writer *writer, uint32_t clock);
 void vgm_ym2612_part1_write(vgm_writer *writer, uint32_t cycle, uint8_t reg, uint8_t value);
 void vgm_ym2612_part2_write(vgm_writer *writer, uint32_t cycle, uint8_t reg, uint8_t value);