Mercurial > repos > blastem
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);