mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
tiny DSP cleanup: Move pending exceptions register into SDSP struct.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2869 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "gdsp_interface.h"
|
#include "gdsp_interface.h"
|
||||||
|
#include "gdsp_interpreter.h"
|
||||||
|
|
||||||
extern u16 dsp_swap16(u16 x);
|
extern u16 dsp_swap16(u16 x);
|
||||||
|
|
||||||
@ -63,7 +64,6 @@ s16 ADPCM_Step(u32& _rSamplePos, u32 _BaseAddress)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void gdsp_generate_exception(u8 level);
|
|
||||||
u16 dsp_read_aram()
|
u16 dsp_read_aram()
|
||||||
{
|
{
|
||||||
// u32 BaseAddress = (gdsp_ifx_regs[DSP_ACSAH] << 16) | gdsp_ifx_regs[DSP_ACSAL];
|
// u32 BaseAddress = (gdsp_ifx_regs[DSP_ACSAH] << 16) | gdsp_ifx_regs[DSP_ACSAL];
|
||||||
|
@ -47,6 +47,8 @@ u16* SDSP::coef = 0;
|
|||||||
u8* SDSP::cpu_ram = 0;
|
u8* SDSP::cpu_ram = 0;
|
||||||
u16 SDSP::cr = 0;
|
u16 SDSP::cr = 0;
|
||||||
u8 SDSP::reg_stack_ptr[4];
|
u8 SDSP::reg_stack_ptr[4];
|
||||||
|
u8 SDSP::exceptions;
|
||||||
|
|
||||||
// lets make stack depth to 32 for now
|
// lets make stack depth to 32 for now
|
||||||
u16 SDSP::reg_stack[4][DSP_STACK_DEPTH];
|
u16 SDSP::reg_stack[4][DSP_STACK_DEPTH];
|
||||||
void (*SDSP::irq_request)() = NULL;
|
void (*SDSP::irq_request)() = NULL;
|
||||||
@ -63,6 +65,11 @@ u64 SDSP::step_counter = 0;
|
|||||||
static bool CR_HALT = true;
|
static bool CR_HALT = true;
|
||||||
static bool CR_EXTERNAL_INT = false;
|
static bool CR_EXTERNAL_INT = false;
|
||||||
|
|
||||||
|
|
||||||
|
bool gdsp_running;
|
||||||
|
extern volatile u32 dsp_running;
|
||||||
|
|
||||||
|
|
||||||
void UpdateCachedCR()
|
void UpdateCachedCR()
|
||||||
{
|
{
|
||||||
CR_HALT = (g_dsp.cr & 0x4) != 0;
|
CR_HALT = (g_dsp.cr & 0x4) != 0;
|
||||||
@ -131,10 +138,9 @@ void gdsp_reset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
u8 gdsp_exceptions = 0;
|
|
||||||
void gdsp_generate_exception(u8 level)
|
void gdsp_generate_exception(u8 level)
|
||||||
{
|
{
|
||||||
gdsp_exceptions |= 1 << level;
|
g_dsp.exceptions |= 1 << level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -269,7 +275,7 @@ void gdsp_step()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if there is an external interrupt
|
// check if there is an external interrupt
|
||||||
if (CR_EXTERNAL_INT)
|
if (CR_EXTERNAL_INT)
|
||||||
{
|
{
|
||||||
if (dsp_SR_is_flag_set(FLAG_ENABLE_INTERUPT) && (g_dsp.exception_in_progress_hack == false))
|
if (dsp_SR_is_flag_set(FLAG_ENABLE_INTERUPT) && (g_dsp.exception_in_progress_hack == false))
|
||||||
{
|
{
|
||||||
@ -281,19 +287,19 @@ void gdsp_step()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check exceptions
|
// check exceptions
|
||||||
if ((gdsp_exceptions > 0) && (!g_dsp.exception_in_progress_hack))
|
if ((g_dsp.exceptions != 0) && (!g_dsp.exception_in_progress_hack))
|
||||||
{
|
{
|
||||||
for (u8 i=0; i<8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
if (gdsp_exceptions & (1<<i))
|
if (g_dsp.exceptions & (1 << i))
|
||||||
{
|
{
|
||||||
_assert_msg_(MASTER_LOG, !g_dsp.exception_in_progress_hack, "assert while exception");
|
_assert_msg_(MASTER_LOG, !g_dsp.exception_in_progress_hack, "assert while exception");
|
||||||
|
|
||||||
dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
|
dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
|
||||||
dsp_reg_store_stack(DSP_STACK_D, g_dsp.r[R_SR]);
|
dsp_reg_store_stack(DSP_STACK_D, g_dsp.r[R_SR]);
|
||||||
|
|
||||||
g_dsp.pc = i * 2;
|
g_dsp.pc = i * 2;
|
||||||
gdsp_exceptions &= ~(1<<i);
|
g_dsp.exceptions &= ~(1 << i);
|
||||||
|
|
||||||
g_dsp.exception_in_progress_hack = true;
|
g_dsp.exception_in_progress_hack = true;
|
||||||
break;
|
break;
|
||||||
@ -303,9 +309,6 @@ void gdsp_step()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool gdsp_running;
|
|
||||||
extern volatile u32 dsp_running;
|
|
||||||
|
|
||||||
bool gdsp_run()
|
bool gdsp_run()
|
||||||
{
|
{
|
||||||
gdsp_running = true;
|
gdsp_running = true;
|
||||||
@ -359,7 +362,7 @@ void gdsp_stop()
|
|||||||
//#include "WaveFile.h"
|
//#include "WaveFile.h"
|
||||||
#include "Mixer.h"
|
#include "Mixer.h"
|
||||||
|
|
||||||
u16 r30 = 0, r31 = 0;
|
// u16 r30 = 0, r31 = 0;
|
||||||
//extern WaveFileWriter g_wave_writer;
|
//extern WaveFileWriter g_wave_writer;
|
||||||
|
|
||||||
extern u16 dsp_swap16(u16 x);
|
extern u16 dsp_swap16(u16 x);
|
||||||
|
@ -74,6 +74,8 @@ struct SDSP
|
|||||||
static u8* cpu_ram;
|
static u8* cpu_ram;
|
||||||
static u16 cr;
|
static u16 cr;
|
||||||
static u8 reg_stack_ptr[4];
|
static u8 reg_stack_ptr[4];
|
||||||
|
static u8 exceptions; // pending exceptiosn?
|
||||||
|
|
||||||
// lets make stack depth to 32 for now
|
// lets make stack depth to 32 for now
|
||||||
static u16 reg_stack[4][DSP_STACK_DEPTH];
|
static u16 reg_stack[4][DSP_STACK_DEPTH];
|
||||||
static void (* irq_request)(void);
|
static void (* irq_request)(void);
|
||||||
@ -109,4 +111,7 @@ u16* gdsp_get_irom(void);
|
|||||||
u16* gdsp_get_dram(void);
|
u16* gdsp_get_dram(void);
|
||||||
u16* gdsp_get_drom(void);
|
u16* gdsp_get_drom(void);
|
||||||
|
|
||||||
|
// sets a flag in the pending exception register.
|
||||||
|
void gdsp_generate_exception(u8 level);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
|
|
||||||
#define DSP_REG_ST0 0x0c
|
#define DSP_REG_ST0 0x0c
|
||||||
#define DSP_REG_ST1 0x0c
|
//#define DSP_REG_ST1 0x0d
|
||||||
#define DSP_REG_ST2 0x0c
|
//#define DSP_REG_ST2 0x0e
|
||||||
#define DSP_REG_ST3 0x0c
|
//#define DSP_REG_ST3 0x0f
|
||||||
|
|
||||||
#define DSP_STACK_C 0
|
#define DSP_STACK_C 0
|
||||||
#define DSP_STACK_D 1
|
#define DSP_STACK_D 1
|
||||||
|
Reference in New Issue
Block a user