mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-04 23:07:46 -04:00
sms: do psg like md does
This commit is contained in:
parent
eef77d7a8b
commit
075672bf9f
2 changed files with 14 additions and 11 deletions
14
pico/sms.c
14
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,7 +131,8 @@ static void z80_sms_out(unsigned short a, unsigned char d)
|
|||
|
||||
case 0x40:
|
||||
case 0x41:
|
||||
if (PicoIn.opt & POPT_EN_PSG)
|
||||
if ((d & 0x90) == 0x90 && PsndPsgLine < Pico.m.scanline)
|
||||
PsndDoPSG(Pico.m.scanline);
|
||||
SN76496Write(d);
|
||||
break;
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue