mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
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:
parent
40644bfedd
commit
7b3f44c6b6
12 changed files with 161 additions and 86 deletions
|
@ -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
|
#define PICO_CD
|
||||||
#include "../pico_cmn.c"
|
#include "../pico_cmn.c"
|
||||||
|
|
||||||
|
|
41
pico/debug.c
41
pico/debug.c
|
@ -2,6 +2,7 @@
|
||||||
// (c) Copyright 2008 notaz, All rights reserved.
|
// (c) Copyright 2008 notaz, All rights reserved.
|
||||||
|
|
||||||
#include "pico_int.h"
|
#include "pico_int.h"
|
||||||
|
#include "sound/ym2612.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define bit(r, x) ((r>>x)&1)
|
#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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,4 +5,5 @@ void PDebugShowSpriteStats(unsigned short *screen, int stride);
|
||||||
void PDebugShowPalette(unsigned short *screen, int stride);
|
void PDebugShowPalette(unsigned short *screen, int stride);
|
||||||
void PDebugShowSprite(unsigned short *screen, int stride, int which);
|
void PDebugShowSprite(unsigned short *screen, int stride, int which);
|
||||||
void PDebugDumpMem(void);
|
void PDebugDumpMem(void);
|
||||||
|
void PDebugZ80Frame(void);
|
||||||
|
|
||||||
|
|
29
pico/pico.c
29
pico/pico.c
|
@ -258,35 +258,6 @@ static __inline void SekRunM68k(int cyc)
|
||||||
#endif
|
#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"
|
#include "pico_cmn.c"
|
||||||
|
|
||||||
int z80stopCycle;
|
int z80stopCycle;
|
||||||
|
|
|
@ -64,6 +64,7 @@ static int PicoFrameHints(void)
|
||||||
SekCyclesResetS68k();
|
SekCyclesResetS68k();
|
||||||
#endif
|
#endif
|
||||||
PsndDacLine = 0;
|
PsndDacLine = 0;
|
||||||
|
emustatus &= ~1;
|
||||||
|
|
||||||
pv->status&=~0x88; // clear V-Int, come out of vblank
|
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
|
// get samples from sound chips
|
||||||
if (y == 32 && PsndOut)
|
if ((y == 224 || y == line_sample) && PsndOut)
|
||||||
emustatus &= ~1;
|
|
||||||
else if ((y == 224 || y == line_sample) && PsndOut)
|
|
||||||
{
|
{
|
||||||
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
|
if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
|
||||||
PicoSyncZ80(SekCycleCnt);
|
PicoSyncZ80(SekCycleCnt);
|
||||||
if (ym2612.dacen && PsndDacLine <= y)
|
if (ym2612.dacen && PsndDacLine <= y)
|
||||||
PsndDoDAC(y);
|
PsndDoDAC(y);
|
||||||
getSamples(y);
|
PsndGetSamples(y);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// Run scanline:
|
// Run scanline:
|
||||||
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
|
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
|
||||||
|
@ -196,15 +193,12 @@ static int PicoFrameHints(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get samples from sound chips
|
// get samples from sound chips
|
||||||
#ifndef PICO_CD
|
if (y == 224 && PsndOut)
|
||||||
if (y == 224)
|
{
|
||||||
#endif
|
if (ym2612.dacen && PsndDacLine <= y)
|
||||||
if (PsndOut)
|
PsndDoDAC(y);
|
||||||
{
|
PsndGetSamples(y);
|
||||||
if (ym2612.dacen && PsndDacLine <= y)
|
}
|
||||||
PsndDoDAC(y);
|
|
||||||
getSamples(y);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run scanline:
|
// Run scanline:
|
||||||
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
|
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
|
||||||
|
|
|
@ -531,8 +531,8 @@ PICO_INTERNAL void PicoCDBufferRead(void *dest, int lba);
|
||||||
// sound/sound.c
|
// sound/sound.c
|
||||||
PICO_INTERNAL void PsndReset(void);
|
PICO_INTERNAL void PsndReset(void);
|
||||||
PICO_INTERNAL void PsndDoDAC(int line_to);
|
PICO_INTERNAL void PsndDoDAC(int line_to);
|
||||||
PICO_INTERNAL int PsndRender(int offset, int length);
|
|
||||||
PICO_INTERNAL void PsndClear(void);
|
PICO_INTERNAL void PsndClear(void);
|
||||||
|
PICO_INTERNAL void PsndGetSamples(int y);
|
||||||
// z80 functionality wrappers
|
// z80 functionality wrappers
|
||||||
PICO_INTERNAL void z80_init(void);
|
PICO_INTERNAL void z80_init(void);
|
||||||
PICO_INTERNAL void z80_pack(unsigned char *data);
|
PICO_INTERNAL void z80_pack(unsigned char *data);
|
||||||
|
|
|
@ -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_updated = 0;
|
||||||
int *buf32 = PsndBuffer+offset;
|
int *buf32 = PsndBuffer+offset;
|
||||||
|
@ -361,6 +361,35 @@ PICO_INTERNAL int PsndRender(int offset, int length)
|
||||||
return 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
|
// z80 stuff
|
||||||
|
|
|
@ -69,7 +69,6 @@ void emu_textOut16(int x, int y, const char *text);
|
||||||
char *emu_makeRomId(void);
|
char *emu_makeRomId(void);
|
||||||
void emu_getGameName(char *str150);
|
void emu_getGameName(char *str150);
|
||||||
void emu_findKeyBindCombos(void);
|
void emu_findKeyBindCombos(void);
|
||||||
void emu_forcedFrame(int opts);
|
|
||||||
void emu_changeFastForward(int set_on);
|
void emu_changeFastForward(int set_on);
|
||||||
void emu_RunEventsPico(unsigned int events);
|
void emu_RunEventsPico(unsigned int events);
|
||||||
void emu_DoTurbo(int *pad, int acts);
|
void emu_DoTurbo(int *pad, int acts);
|
||||||
|
@ -77,9 +76,14 @@ void emu_packConfig(void);
|
||||||
void emu_unpackConfig(void);
|
void emu_unpackConfig(void);
|
||||||
void emu_shutdownMCD(void);
|
void emu_shutdownMCD(void);
|
||||||
|
|
||||||
|
/* not in common */
|
||||||
extern const char * const keyNames[];
|
extern const char * const keyNames[];
|
||||||
void emu_prepareDefaultConfig(void);
|
void emu_prepareDefaultConfig(void);
|
||||||
void emu_platformDebugCat(char *str);
|
void emu_platformDebugCat(char *str);
|
||||||
|
void emu_forcedFrame(int opts);
|
||||||
|
void emu_startSound(void);
|
||||||
|
void emu_endSound(void);
|
||||||
|
void emu_waitSound(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|
|
@ -343,6 +343,20 @@ int me_process(menu_entry *entries, int count, menu_id id, int is_next)
|
||||||
|
|
||||||
void SekStepM68k(void);
|
void SekStepM68k(void);
|
||||||
|
|
||||||
|
static void mplayer_loop(void)
|
||||||
|
{
|
||||||
|
emu_startSound();
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
PDebugZ80Frame();
|
||||||
|
if (read_buttons_async(BTN_NORTH)) break;
|
||||||
|
emu_waitSound();
|
||||||
|
}
|
||||||
|
|
||||||
|
emu_endSound();
|
||||||
|
}
|
||||||
|
|
||||||
static void draw_text_debug(const char *str, int skip, int from)
|
static void draw_text_debug(const char *str, int skip, int from)
|
||||||
{
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
|
@ -415,7 +429,7 @@ void debug_menu_loop(void)
|
||||||
}
|
}
|
||||||
menu_draw_end();
|
menu_draw_end();
|
||||||
|
|
||||||
inp = read_buttons(BTN_EAST|BTN_SOUTH|BTN_WEST|BTN_L|BTN_R|BTN_UP|BTN_DOWN|BTN_LEFT|BTN_RIGHT);
|
inp = read_buttons(BTN_EAST|BTN_SOUTH|BTN_WEST|BTN_NORTH|BTN_L|BTN_R|BTN_UP|BTN_DOWN|BTN_LEFT|BTN_RIGHT);
|
||||||
if (inp & BTN_SOUTH) return;
|
if (inp & BTN_SOUTH) return;
|
||||||
if (inp & BTN_L) { mode--; if (mode < 0) mode = 3; }
|
if (inp & BTN_L) { mode--; if (mode < 0) mode = 3; }
|
||||||
if (inp & BTN_R) { mode++; if (mode > 3) mode = 0; }
|
if (inp & BTN_R) { mode++; if (mode > 3) mode = 0; }
|
||||||
|
@ -423,6 +437,10 @@ void debug_menu_loop(void)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
if (inp & BTN_EAST) SekStepM68k();
|
if (inp & BTN_EAST) SekStepM68k();
|
||||||
|
if (inp & BTN_NORTH) {
|
||||||
|
while (inp & BTN_NORTH) inp = read_buttons_async(BTN_NORTH);
|
||||||
|
mplayer_loop();
|
||||||
|
}
|
||||||
if ((inp & (BTN_WEST|BTN_LEFT)) == (BTN_WEST|BTN_LEFT)) {
|
if ((inp & (BTN_WEST|BTN_LEFT)) == (BTN_WEST|BTN_LEFT)) {
|
||||||
mkdir("dumps", 0777);
|
mkdir("dumps", 0777);
|
||||||
PDebugDumpMem();
|
PDebugDumpMem();
|
||||||
|
|
|
@ -665,6 +665,46 @@ static void updateSound(int len)
|
||||||
gp2x_sound_write(PsndOut, len<<1);
|
gp2x_sound_write(PsndOut, len<<1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void emu_startSound(void)
|
||||||
|
{
|
||||||
|
static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;
|
||||||
|
int target_fps = Pico.m.pal ? 50 : 60;
|
||||||
|
|
||||||
|
PsndOut = NULL;
|
||||||
|
|
||||||
|
// prepare sound stuff
|
||||||
|
if (currentConfig.EmuOpt & 4)
|
||||||
|
{
|
||||||
|
int snd_excess_add;
|
||||||
|
if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old ||
|
||||||
|
((PicoOpt&0x200) && crashed_940)) {
|
||||||
|
PsndRerate(Pico.m.frame_count ? 1 : 0);
|
||||||
|
}
|
||||||
|
snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps;
|
||||||
|
printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n",
|
||||||
|
PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal);
|
||||||
|
gp2x_start_sound(PsndRate, 16, (PicoOpt&8)>>3);
|
||||||
|
gp2x_sound_volume(currentConfig.volume, currentConfig.volume);
|
||||||
|
PicoWriteSound = updateSound;
|
||||||
|
update_volume(0, 0);
|
||||||
|
memset(sndBuffer, 0, sizeof(sndBuffer));
|
||||||
|
PsndOut = sndBuffer;
|
||||||
|
PsndRate_old = PsndRate;
|
||||||
|
PicoOpt_old = PicoOpt;
|
||||||
|
pal_old = Pico.m.pal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void emu_endSound(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wait until we can write more sound */
|
||||||
|
void emu_waitSound(void)
|
||||||
|
{
|
||||||
|
// don't need to do anything, writes will block by themselves
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void SkipFrame(int do_audio)
|
static void SkipFrame(int do_audio)
|
||||||
{
|
{
|
||||||
|
@ -776,8 +816,7 @@ static void tga_dump(void)
|
||||||
|
|
||||||
void emu_Loop(void)
|
void emu_Loop(void)
|
||||||
{
|
{
|
||||||
static int gp2x_old_clock = 200;
|
static int gp2x_old_clock = 200, EmuOpt_old = 0;
|
||||||
static int PsndRate_old = 0, PicoOpt_old = 0, EmuOpt_old = 0, pal_old = 0;
|
|
||||||
char fpsbuff[24]; // fps count c string
|
char fpsbuff[24]; // fps count c string
|
||||||
struct timeval tval; // timing
|
struct timeval tval; // timing
|
||||||
int pframes_done, pframes_shown, pthissec; // "period" frames, used for sync
|
int pframes_done, pframes_shown, pthissec; // "period" frames, used for sync
|
||||||
|
@ -821,29 +860,7 @@ void emu_Loop(void)
|
||||||
target_frametime = 1000000/target_fps;
|
target_frametime = 1000000/target_fps;
|
||||||
reset_timing = 1;
|
reset_timing = 1;
|
||||||
|
|
||||||
// prepare sound stuff
|
emu_startSound();
|
||||||
if (currentConfig.EmuOpt & 4)
|
|
||||||
{
|
|
||||||
int snd_excess_add;
|
|
||||||
if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old ||
|
|
||||||
((PicoOpt&0x200) && crashed_940)) {
|
|
||||||
PsndRerate(Pico.m.frame_count ? 1 : 0);
|
|
||||||
}
|
|
||||||
snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps;
|
|
||||||
printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n",
|
|
||||||
PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal);
|
|
||||||
gp2x_start_sound(PsndRate, 16, (PicoOpt&8)>>3);
|
|
||||||
gp2x_sound_volume(currentConfig.volume, currentConfig.volume);
|
|
||||||
PicoWriteSound = updateSound;
|
|
||||||
update_volume(0, 0);
|
|
||||||
memset(sndBuffer, 0, sizeof(sndBuffer));
|
|
||||||
PsndOut = sndBuffer;
|
|
||||||
PsndRate_old = PsndRate;
|
|
||||||
PicoOpt_old = PicoOpt;
|
|
||||||
pal_old = Pico.m.pal;
|
|
||||||
} else {
|
|
||||||
PsndOut = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// prepare CD buffer
|
// prepare CD buffer
|
||||||
if (PicoAHW & PAHW_MCD) PicoCDBufferInit();
|
if (PicoAHW & PAHW_MCD) PicoCDBufferInit();
|
||||||
|
|
|
@ -24,6 +24,7 @@ void gp2x_pd_clone_buffer2(void);
|
||||||
void gp2x_start_sound(int rate, int bits, int stereo);
|
void gp2x_start_sound(int rate, int bits, int stereo);
|
||||||
void gp2x_sound_write(void *buff, int len);
|
void gp2x_sound_write(void *buff, int len);
|
||||||
void gp2x_sound_volume(int l, int r);
|
void gp2x_sound_volume(int l, int r);
|
||||||
|
void gp2x_sound_sync(void);
|
||||||
|
|
||||||
/* input */
|
/* input */
|
||||||
unsigned long gp2x_joystick_read(int allow_usb_joy);
|
unsigned long gp2x_joystick_read(int allow_usb_joy);
|
||||||
|
|
|
@ -609,7 +609,7 @@ static void sound_init(void)
|
||||||
lprintf("sceKernelCreateThread failed: %i\n", thid);
|
lprintf("sceKernelCreateThread failed: %i\n", thid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sound_prepare(void)
|
void emu_startSound(void)
|
||||||
{
|
{
|
||||||
static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;
|
static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;
|
||||||
int ret, stereo;
|
int ret, stereo;
|
||||||
|
@ -648,7 +648,7 @@ static void sound_prepare(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sound_end(void)
|
void emu_endSound(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (samples_done == 0)
|
if (samples_done == 0)
|
||||||
|
@ -667,6 +667,14 @@ static void sound_end(void)
|
||||||
sceAudio_5C37C0AE();
|
sceAudio_5C37C0AE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wait until we can write more sound */
|
||||||
|
void emu_waitSound(void)
|
||||||
|
{
|
||||||
|
// TODO: test this
|
||||||
|
while (!sound_thread_exit && samples_made - samples_done > samples_block * 4)
|
||||||
|
psp_msleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
static void sound_deinit(void)
|
static void sound_deinit(void)
|
||||||
{
|
{
|
||||||
sound_thread_exit = 1;
|
sound_thread_exit = 1;
|
||||||
|
@ -944,7 +952,7 @@ void emu_Loop(void)
|
||||||
PsndOut = NULL;
|
PsndOut = NULL;
|
||||||
if (currentConfig.EmuOpt & 4)
|
if (currentConfig.EmuOpt & 4)
|
||||||
{
|
{
|
||||||
sound_prepare();
|
emu_startSound();
|
||||||
}
|
}
|
||||||
|
|
||||||
sceDisplayWaitVblankStart();
|
sceDisplayWaitVblankStart();
|
||||||
|
@ -1090,8 +1098,8 @@ void emu_Loop(void)
|
||||||
if (PicoAHW & PAHW_MCD) PicoCDBufferFree();
|
if (PicoAHW & PAHW_MCD) PicoCDBufferFree();
|
||||||
|
|
||||||
if (PsndOut != NULL) {
|
if (PsndOut != NULL) {
|
||||||
|
emu_endSound();
|
||||||
PsndOut = NULL;
|
PsndOut = NULL;
|
||||||
sound_end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// save SRAM
|
// save SRAM
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue