From 075672bf9f028490174bd3fbebe957a47a10b09d Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 22 Oct 2017 00:39:43 +0300 Subject: [PATCH] sms: do psg like md does --- pico/sms.c | 16 ++++++++++------ pico/sound/sound.c | 9 ++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pico/sms.c b/pico/sms.c index 748c326..6955a7d 100644 --- a/pico/sms.c +++ b/pico/sms.c @@ -8,10 +8,8 @@ /* * TODO: * - start in a state as if BIOS ran - * - remaining status flags (OVR/COL) * - RAM support in mapper * - region support - * - SN76496 DAC-like usage * - H counter */ #include "pico_int.h" @@ -133,8 +131,9 @@ static void z80_sms_out(unsigned short a, unsigned char d) case 0x40: case 0x41: - if (PicoIn.opt & POPT_EN_PSG) - SN76496Write(d); + if ((d & 0x90) == 0x90 && PsndPsgLine < Pico.m.scanline) + PsndDoPSG(Pico.m.scanline); + SN76496Write(d); break; case 0x80: @@ -300,12 +299,16 @@ void PicoFrameMS(void) } } + // 224 because of how it's done for MD... + if (y == 224 && PsndOut) + PsndGetSamplesMS(); + cycles_aim += cycles_line; cycles_done += z80_run((cycles_aim - cycles_done) >> 8) << 8; } - if (PsndOut) - PsndGetSamplesMS(); + if (PsndOut && PsndPsgLine < lines) + PsndDoPSG(lines - 1); } void PicoFrameDrawOnlyMS(void) @@ -319,3 +322,4 @@ void PicoFrameDrawOnlyMS(void) PicoLineMode4(y); } +// vim:ts=2:sw=2:expandtab diff --git a/pico/sound/sound.c b/pico/sound/sound.c index 56ffe3f..e799e93 100644 --- a/pico/sound/sound.c +++ b/pico/sound/sound.c @@ -370,15 +370,12 @@ PICO_INTERNAL void PsndGetSamples(int y) PICO_INTERNAL void PsndGetSamplesMS(void) { - int stereo = (PicoIn.opt & 8) >> 3; int length = PsndLen_use; - // PSG - if (PicoIn.opt & POPT_EN_PSG) - SN76496Update(PsndOut, length, stereo); + PsndDoPSG(223); // upmix to "stereo" if needed - if (stereo) { + if (PicoIn.opt & POPT_EN_STEREO) { int i, *p; for (i = length, p = (void *)PsndOut; i > 0; i--, p++) *p |= *p << 16; @@ -387,6 +384,8 @@ PICO_INTERNAL void PsndGetSamplesMS(void) if (PicoWriteSound != NULL) PicoWriteSound(length * ((PicoIn.opt & POPT_EN_STEREO) ? 4 : 2)); PsndClear(); + + dac_info[224] = 0; } // vim:shiftwidth=2:ts=2:expandtab -- 2.39.2