debug bgm player, sound code refactoring

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@598 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2008-10-16 13:32:55 +00:00
parent 40644bfedd
commit 7b3f44c6b6
12 changed files with 161 additions and 86 deletions

View file

@ -225,15 +225,6 @@ static __inline void update_chips(void)
}
static __inline void getSamples(int y)
{
int len = PsndRender(0, PsndLen);
if (PicoWriteSound) PicoWriteSound(len);
// clear sound buffer
PsndClear();
}
#define PICO_CD
#include "../pico_cmn.c"

View file

@ -2,6 +2,7 @@
// (c) Copyright 2008 notaz, All rights reserved.
#include "pico_int.h"
#include "sound/ym2612.h"
#include "debug.h"
#define bit(r, x) ((r>>x)&1)
@ -301,3 +302,43 @@ void PDebugDumpMem(void)
}
}
void PDebugZ80Frame(void)
{
int lines, line_sample;
if (Pico.m.pal) {
lines = 312;
line_sample = 68;
} else {
lines = 262;
line_sample = 93;
}
z80_resetCycles();
emustatus &= ~1;
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
PicoSyncZ80(line_sample*488);
if (ym2612.dacen && PsndDacLine <= line_sample)
PsndDoDAC(line_sample);
if (PsndOut)
PsndGetSamples(line_sample);
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) {
PicoSyncZ80(224*488);
z80_int();
}
if (ym2612.dacen && PsndDacLine <= 224)
PsndDoDAC(224);
if (PsndOut)
PsndGetSamples(224);
// sync z80
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
PicoSyncZ80(Pico.m.pal ? 151809 : 127671); // cycles adjusted for converter
if (PsndOut && ym2612.dacen && PsndDacLine <= lines-1)
PsndDoDAC(lines-1);
timers_cycle();
}

View file

@ -5,4 +5,5 @@ void PDebugShowSpriteStats(unsigned short *screen, int stride);
void PDebugShowPalette(unsigned short *screen, int stride);
void PDebugShowSprite(unsigned short *screen, int stride, int which);
void PDebugDumpMem(void);
void PDebugZ80Frame(void);

View file

@ -258,35 +258,6 @@ static __inline void SekRunM68k(int cyc)
#endif
}
// to be called on 224 or line_sample scanlines only
static __inline void getSamples(int y)
{
#if SIMPLE_WRITE_SOUND
if (y != 224) return;
PsndRender(0, PsndLen);
if (PicoWriteSound) PicoWriteSound(PsndLen);
PsndClear();
#else
static int curr_pos = 0;
if(y == 224) {
if(emustatus & 2)
curr_pos += PsndRender(curr_pos, PsndLen-PsndLen/2);
else curr_pos = PsndRender(0, PsndLen);
if (emustatus&1) emustatus|=2; else emustatus&=~2;
if (PicoWriteSound) PicoWriteSound(curr_pos);
// clear sound buffer
PsndClear();
}
else if(emustatus & 3) {
emustatus|= 2;
emustatus&=~1;
curr_pos = PsndRender(0, PsndLen/2);
}
#endif
}
#include "pico_cmn.c"
int z80stopCycle;

View file

@ -64,6 +64,7 @@ static int PicoFrameHints(void)
SekCyclesResetS68k();
#endif
PsndDacLine = 0;
emustatus &= ~1;
pv->status&=~0x88; // clear V-Int, come out of vblank
@ -118,19 +119,15 @@ static int PicoFrameHints(void)
}
}
#ifndef PICO_CD
// get samples from sound chips
if (y == 32 && PsndOut)
emustatus &= ~1;
else if ((y == 224 || y == line_sample) && PsndOut)
if ((y == 224 || y == line_sample) && PsndOut)
{
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
PicoSyncZ80(SekCycleCnt);
if (ym2612.dacen && PsndDacLine <= y)
PsndDoDAC(y);
getSamples(y);
PsndGetSamples(y);
}
#endif
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
@ -196,15 +193,12 @@ static int PicoFrameHints(void)
}
// get samples from sound chips
#ifndef PICO_CD
if (y == 224)
#endif
if (PsndOut)
{
if (ym2612.dacen && PsndDacLine <= y)
PsndDoDAC(y);
getSamples(y);
}
if (y == 224 && PsndOut)
{
if (ym2612.dacen && PsndDacLine <= y)
PsndDoDAC(y);
PsndGetSamples(y);
}
// Run scanline:
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());

View file

@ -531,8 +531,8 @@ PICO_INTERNAL void PicoCDBufferRead(void *dest, int lba);
// sound/sound.c
PICO_INTERNAL void PsndReset(void);
PICO_INTERNAL void PsndDoDAC(int line_to);
PICO_INTERNAL int PsndRender(int offset, int length);
PICO_INTERNAL void PsndClear(void);
PICO_INTERNAL void PsndGetSamples(int y);
// z80 functionality wrappers
PICO_INTERNAL void z80_init(void);
PICO_INTERNAL void z80_pack(unsigned char *data);

View file

@ -297,7 +297,7 @@ PICO_INTERNAL void PsndClear(void)
}
PICO_INTERNAL int PsndRender(int offset, int length)
static int PsndRender(int offset, int length)
{
int buf32_updated = 0;
int *buf32 = PsndBuffer+offset;
@ -361,6 +361,35 @@ PICO_INTERNAL int PsndRender(int offset, int length)
return length;
}
// to be called on 224 or line_sample scanlines only
PICO_INTERNAL void PsndGetSamples(int y)
{
#if SIMPLE_WRITE_SOUND
if (y != 224) return;
PsndRender(0, PsndLen);
if (PicoWriteSound) PicoWriteSound(PsndLen);
PsndClear();
#else
static int curr_pos = 0;
if (y == 224)
{
if (emustatus & 2)
curr_pos += PsndRender(curr_pos, PsndLen-PsndLen/2);
else curr_pos = PsndRender(0, PsndLen);
if (emustatus&1) emustatus|=2; else emustatus&=~2;
if (PicoWriteSound) PicoWriteSound(curr_pos);
// clear sound buffer
PsndClear();
}
else if (emustatus & 3) {
emustatus|= 2;
emustatus&=~1;
curr_pos = PsndRender(0, PsndLen/2);
}
#endif
}
// -----------------------------------------------------------------
// z80 stuff