DSPSpy cleanups.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3118 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
6cc8c0744b
commit
11206892b7
|
@ -27,7 +27,6 @@
|
||||||
// This is where the DSP binary is.
|
// This is where the DSP binary is.
|
||||||
#include "dsp_code.h"
|
#include "dsp_code.h"
|
||||||
|
|
||||||
|
|
||||||
// DSPCR bits
|
// DSPCR bits
|
||||||
#define DSPCR_DSPRESET 0x0800 // Reset DSP
|
#define DSPCR_DSPRESET 0x0800 // Reset DSP
|
||||||
#define DSPCR_ARDMA 0x0200 // ARAM dma in progress, if set
|
#define DSPCR_ARDMA 0x0200 // ARAM dma in progress, if set
|
||||||
|
@ -41,13 +40,11 @@
|
||||||
#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt
|
#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt
|
||||||
#define DSPCR_RES 0x0001 // reset DSP
|
#define DSPCR_RES 0x0001 // reset DSP
|
||||||
|
|
||||||
|
|
||||||
u16 dspbuffer[16 * 1024] __attribute__ ((aligned (0x4000)));
|
u16 dspbuffer[16 * 1024] __attribute__ ((aligned (0x4000)));
|
||||||
|
|
||||||
// #define ENABLE_OUT
|
// #define ENABLE_OUT
|
||||||
#undef ENABLE_OUT
|
#undef ENABLE_OUT
|
||||||
|
|
||||||
|
|
||||||
static void *xfb = NULL;
|
static void *xfb = NULL;
|
||||||
void (*reload)() = (void(*)())0x80001800;
|
void (*reload)() = (void(*)())0x80001800;
|
||||||
GXRModeObj *rmode;
|
GXRModeObj *rmode;
|
||||||
|
@ -60,12 +57,12 @@ u32 *dspbufU;
|
||||||
|
|
||||||
u16 dspreg_in[32] = {
|
u16 dspreg_in[32] = {
|
||||||
0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x0a10, 0x0b10,
|
0x0410, 0x0510, 0x0610, 0x0710, 0x0810, 0x0910, 0x0a10, 0x0b10,
|
||||||
0x0411, 0x0522, 0x0633, 0x0744, 0x0855, 0x0966, 0x0a77, 0x0b88,
|
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0855, 0x0966, 0x0a77, 0x0b88,
|
||||||
0x0014, 0xfff5, 0x00ff, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000,
|
0x0014, 0xfff5, 0x00ff, 0x2200, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
0x0003, 0x0004, 0x8000, 0x000C, 0x0007, 0x0008, 0x0009, 0x000a,
|
0x0003, 0x0004, 0x8000, 0x000C, 0x0007, 0x0008, 0x0009, 0x000a,
|
||||||
}; /// ax_h_1 ax_h_1
|
}; /// ax_h_1 ax_h_1
|
||||||
|
|
||||||
/* ttt
|
/* ttt ?
|
||||||
|
|
||||||
u16 dspreg_in[32] = {
|
u16 dspreg_in[32] = {
|
||||||
0x0e4c, 0x03c0, 0x0bd9, 0x06a3, 0x0c06, 0x0240, 0x0010, 0x0ecc,
|
0x0e4c, 0x03c0, 0x0bd9, 0x06a3, 0x0c06, 0x0240, 0x0010, 0x0ecc,
|
||||||
|
@ -80,89 +77,58 @@ u16 dspreg_in[32] = {
|
||||||
// zelda 0x00da
|
// zelda 0x00da
|
||||||
u16 dspreg_in[32] = {
|
u16 dspreg_in[32] = {
|
||||||
0x0a50, 0x0ca2, 0x04f8, 0x0ab0, 0x8039, 0x0000, 0x0000, 0x0000,
|
0x0a50, 0x0ca2, 0x04f8, 0x0ab0, 0x8039, 0x0000, 0x0000, 0x0000,
|
||||||
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x03d1, 0x0000, 0x0418, 0x0002, // r08 must have a value ... no idea why
|
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x03d1, 0x0000, 0x0418, 0x0002, // r08 must have a value ... no idea why (ector: it's the looped addressing regs)
|
||||||
0x0000, 0x0000, 0x00ff, 0x1804, 0xdb70, 0x4ddb, 0x0000, 0x0000,
|
0x0000, 0x0000, 0x00ff, 0x1804, 0xdb70, 0x4ddb, 0x0000, 0x0000,
|
||||||
0x0000, 0x0000, 0x0000, 0xde6d, 0x0000, 0x0000, 0x0000, 0x004e,
|
0x0000, 0x0000, 0x0000, 0xde6d, 0x0000, 0x0000, 0x0000, 0x004e,
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|
||||||
u16 dspreg_out[1000][32];
|
|
||||||
u16 dsp_steps = 0;
|
|
||||||
u16 show_step = 0;
|
|
||||||
|
|
||||||
#include "mem_dump.h"
|
#include "mem_dump.h"
|
||||||
|
|
||||||
// #include "dsp_test.cpp"
|
|
||||||
u32 padding[1024];
|
|
||||||
|
|
||||||
s32 cursor_x = 1;
|
|
||||||
s32 cursor_y = 1;
|
|
||||||
|
|
||||||
s32 old_cur_x;
|
|
||||||
s32 old_cur_y;
|
|
||||||
|
|
||||||
s32 small_cursor_x;
|
|
||||||
|
|
||||||
u32 ui_mode;
|
|
||||||
|
|
||||||
#define UIM_SEL 1
|
|
||||||
#define UIM_EDIT_REG 2
|
|
||||||
#define UIM_EDIT_BIN 4
|
|
||||||
|
|
||||||
PADStatus gpad;
|
|
||||||
PADStatus opad;
|
|
||||||
u16 *reg_value;
|
|
||||||
|
|
||||||
void ds_text_out(int xpos, int ypos, const char *str);
|
void ds_text_out(int xpos, int ypos, const char *str);
|
||||||
void ds_set_colour(int f, int b);
|
void ds_set_colour(int f, int b);
|
||||||
void ds_init(void *framebuffer,int xstart,int ystart,int xres,int yres,int stride);
|
void ds_init(void *framebuffer, int xstart, int ystart, int xres, int yres, int stride);
|
||||||
void ds_underline(int xpos, int ypos, int len, int col);
|
void ds_underline(int xpos, int ypos, int len, int col);
|
||||||
void ds_printf(int x, int y, const char *fmt, ...);
|
void ds_printf(int x, int y, const char *fmt, ...);
|
||||||
void ds_clear(void);
|
void ds_clear(void);
|
||||||
|
|
||||||
|
u16 dspreg_out[1000][32];
|
||||||
|
|
||||||
|
u32 padding[1024];
|
||||||
|
|
||||||
|
// UI (interactive register editing)
|
||||||
|
u32 ui_mode;
|
||||||
|
#define UIM_SEL 1
|
||||||
|
#define UIM_EDIT_REG 2
|
||||||
|
#define UIM_EDIT_BIN 4
|
||||||
|
|
||||||
|
// Currently selected register.
|
||||||
|
s32 cursor_reg = 0;
|
||||||
|
// Currently selected digit.
|
||||||
|
s32 small_cursor_x;
|
||||||
|
// Value currently being edited.
|
||||||
|
u16 *reg_value;
|
||||||
|
|
||||||
|
// Got regs to draw. Dunno why we need this.
|
||||||
volatile int regs_refreshed = false;
|
volatile int regs_refreshed = false;
|
||||||
|
|
||||||
|
|
||||||
|
// Handler for DSP interrupt.
|
||||||
static void my__dsp_handler(u32 nIrq,void *pCtx)
|
static void my__dsp_handler(u32 nIrq,void *pCtx)
|
||||||
{
|
{
|
||||||
// volatile u32 mail;
|
// Acknowledge interrupt?
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT))|DSPCR_DSPINT;
|
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT)) | DSPCR_DSPINT;
|
||||||
/*
|
|
||||||
while(!DSP_CheckMailFrom());
|
|
||||||
mail = DSP_ReadMailFrom();
|
|
||||||
|
|
||||||
if (mail == 0x8888beef)
|
|
||||||
{
|
|
||||||
DSP_SendMailTo((u32)dspbuf | 0x80000000);
|
|
||||||
while(DSP_CheckMailTo());
|
|
||||||
regs_refreshed = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (mail == 0x8888beeb)
|
|
||||||
{
|
|
||||||
regs_refreshed = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// printf("Mail: %08x\n", mail);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void print_regs(int _step, int _dsp_steps)
|
||||||
const int r_off_x = 2;
|
|
||||||
const int r_off_y = 2;
|
|
||||||
|
|
||||||
vu16 val_x = 0x1234;
|
|
||||||
|
|
||||||
void print_regs(u16 _step)
|
|
||||||
{
|
{
|
||||||
for (int j = 0 ; j < 4 ; j++)
|
for (int j = 0; j < 4 ; j++)
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < 8 ; i++)
|
for (int i = 0; i < 8 ; i++)
|
||||||
{
|
{
|
||||||
int reg = j * 8 + i;
|
const int reg = j * 8 + i;
|
||||||
ds_set_colour(COLOR_GREEN, COLOR_BLACK);
|
ds_set_colour(cursor_reg == reg ? COLOR_YELLOW : COLOR_GREEN, COLOR_BLACK);
|
||||||
ds_printf(0 + j * 8, i + 2, "%02x_", reg);
|
ds_printf(0 + j * 8, i + 2, "%02x ", reg);
|
||||||
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
||||||
if (_step == 0)
|
if (_step == 0)
|
||||||
ds_printf(3 + j * 8, i + 2, "%04x", dspreg_in[reg]);
|
ds_printf(3 + j * 8, i + 2, "%04x", dspreg_in[reg]);
|
||||||
|
@ -171,23 +137,17 @@ void print_regs(u16 _step)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for(i = 0 ; i < 4 ; i++)
|
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
||||||
{
|
ds_printf(33, 11, "%i / %i ", _step + 1, _dsp_steps);
|
||||||
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
|
||||||
ds_printf(4, 11, "%03i / %03i", _step+1, dsp_steps);
|
|
||||||
/* ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
|
||||||
int j;
|
|
||||||
for(j = 0 ; j < 16 ; j++)
|
|
||||||
ds_printf(10 + j, i + 11, "%d", (opcode[i] >> (15 - j)) & 0x1);*/
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int j = 0 ; j < 4 ; j++)
|
for (int j = 0 ; j < 4 ; j++)
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < 8 ; i++)
|
for (int i = 0 ; i < 8 ; i++)
|
||||||
{
|
{
|
||||||
|
const int reg = j * 8 + i;
|
||||||
|
|
||||||
char tmpbuf1[20];
|
char tmpbuf1[20];
|
||||||
int reg = j * 8 + i;
|
sprintf(tmpbuf1, "%02x ", reg);
|
||||||
sprintf(tmpbuf1, "%02x_", reg);
|
|
||||||
ds_set_colour(COLOR_GREEN, COLOR_BLACK);
|
ds_set_colour(COLOR_GREEN, COLOR_BLACK);
|
||||||
ds_text_out(33 + j * 8, i + 2, tmpbuf1);
|
ds_text_out(33 + j * 8, i + 2, tmpbuf1);
|
||||||
sprintf(tmpbuf1, "%04x", dspreg_out[_step][reg]);
|
sprintf(tmpbuf1, "%04x", dspreg_out[_step][reg]);
|
||||||
|
@ -206,13 +166,10 @@ void print_regs(u16 _step)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//ds_printf(4, 15, "DMA: %04x %04x %04x", _dspReg[16], _dspReg[17], _dspReg[18]);
|
return;
|
||||||
ds_printf(4, 15, "DICR: %04x ",val_x);
|
|
||||||
ds_printf(4, 25, " ");
|
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
int x, y;
|
int x = 0, y = 16;
|
||||||
y = 16;
|
|
||||||
x = 0;
|
|
||||||
if (count > 2)
|
if (count > 2)
|
||||||
ds_clear();
|
ds_clear();
|
||||||
count = 0;
|
count = 0;
|
||||||
|
@ -223,190 +180,104 @@ void print_regs(u16 _step)
|
||||||
{
|
{
|
||||||
ds_printf(x, y, "%04x=%04x", i, dspbufC[i]);
|
ds_printf(x, y, "%04x=%04x", i, dspbufC[i]);
|
||||||
count++;
|
count++;
|
||||||
x+=10; if (x >= 60) { x=0 ; y++;};
|
x += 10;
|
||||||
|
if (x >= 60) {
|
||||||
|
x = 0;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ds_printf(4, 25, "%08x", count);
|
ds_printf(4, 25, "%08x", count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void hide_cursor(void)
|
|
||||||
{
|
|
||||||
if (old_cur_y < 8)
|
|
||||||
{
|
|
||||||
ds_underline(old_cur_x * 8 + 3, old_cur_y + 2, 4, COLOR_BLACK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (old_cur_x == 0) ds_underline(4, cursor_y + 3, 4, COLOR_BLACK);
|
|
||||||
else ds_underline(10, cursor_y + 3, 16, COLOR_BLACK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void show_cursor(void)
|
|
||||||
{
|
|
||||||
if (ui_mode == UIM_SEL)
|
|
||||||
{
|
|
||||||
if (cursor_y < 8)
|
|
||||||
{
|
|
||||||
ds_underline(cursor_x * 8 + 3, cursor_y + 2, 4, COLOR_WHITE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cursor_x == 0)
|
|
||||||
ds_underline(4, cursor_y + 3, 4, COLOR_WHITE);
|
|
||||||
else
|
|
||||||
ds_underline(10, cursor_y + 3, 16, COLOR_WHITE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cursor_y < 8)
|
|
||||||
{
|
|
||||||
ds_underline(cursor_x * 8 + 3 + small_cursor_x, cursor_y + 2, 1, COLOR_WHITE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cursor_x == 0)
|
|
||||||
ds_underline(4 + small_cursor_x, cursor_y + 3, 1, COLOR_WHITE);
|
|
||||||
else
|
|
||||||
ds_underline(10 + small_cursor_x, cursor_y + 3, 1, COLOR_WHITE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
old_cur_x = cursor_x;
|
|
||||||
old_cur_y = cursor_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void check_pad(void)
|
|
||||||
{
|
|
||||||
PADStatus pads[4];
|
|
||||||
PAD_Read(pads);
|
|
||||||
|
|
||||||
if (opad.button == pads[0].button)
|
|
||||||
{
|
|
||||||
gpad.button = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
opad.button = gpad.button = pads[0].button;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ui_pad_sel(void)
|
void ui_pad_sel(void)
|
||||||
{
|
{
|
||||||
if (gpad.button & PAD_BUTTON_RIGHT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_RIGHT)
|
||||||
{
|
{
|
||||||
cursor_x++;
|
cursor_reg+=8;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_LEFT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_LEFT)
|
||||||
{
|
{
|
||||||
cursor_x--;
|
cursor_reg-=8;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_UP)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_UP)
|
||||||
{
|
{
|
||||||
cursor_y--;
|
cursor_reg--;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_DOWN)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_DOWN)
|
||||||
{
|
{
|
||||||
cursor_y++;
|
cursor_reg++;
|
||||||
if (cursor_y == 8)
|
|
||||||
cursor_x = 0;
|
|
||||||
}
|
}
|
||||||
if (cursor_y < 0)
|
cursor_reg &= 0x1f;
|
||||||
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
||||||
{
|
{
|
||||||
cursor_y = 11;
|
ui_mode = UIM_EDIT_REG;
|
||||||
cursor_x = 0;
|
reg_value = &dspreg_in[cursor_reg * 8];
|
||||||
}
|
|
||||||
else if (cursor_y > 11)
|
|
||||||
cursor_y = 0;
|
|
||||||
|
|
||||||
if (cursor_y < 8)
|
|
||||||
cursor_x &= 0x3;
|
|
||||||
else
|
|
||||||
cursor_x &= 0x1;
|
|
||||||
|
|
||||||
if (gpad.button & PAD_BUTTON_A)
|
|
||||||
{
|
|
||||||
if (cursor_y < 8)
|
|
||||||
{
|
|
||||||
ui_mode = UIM_EDIT_REG;
|
|
||||||
reg_value = &dspreg_in[cursor_y + cursor_x * 8];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cursor_x == 0)
|
|
||||||
ui_mode = UIM_EDIT_REG;
|
|
||||||
else
|
|
||||||
ui_mode = UIM_EDIT_BIN;
|
|
||||||
// reg_value = &opcode[cursor_y-8];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void ui_pad_edit_bin(void)
|
void ui_pad_edit_bin(void)
|
||||||
{
|
{
|
||||||
u8 pos;
|
u8 pos;
|
||||||
if (gpad.button & PAD_BUTTON_RIGHT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_RIGHT)
|
||||||
{
|
{
|
||||||
small_cursor_x++;
|
small_cursor_x++;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_LEFT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_LEFT)
|
||||||
{
|
{
|
||||||
small_cursor_x--;
|
small_cursor_x--;
|
||||||
}
|
}
|
||||||
small_cursor_x &= 0xf;
|
small_cursor_x &= 0xf;
|
||||||
if (gpad.button & PAD_BUTTON_UP)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_UP)
|
||||||
{
|
{
|
||||||
pos = 0xf - small_cursor_x;
|
pos = 0xf - small_cursor_x;
|
||||||
*reg_value |= 1 << pos;
|
*reg_value |= 1 << pos;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_DOWN)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_DOWN)
|
||||||
{
|
{
|
||||||
pos = 0xf - small_cursor_x;
|
pos = 0xf - small_cursor_x;
|
||||||
*reg_value &= ~(1 << pos);
|
*reg_value &= ~(1 << pos);
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_A)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
||||||
{
|
{
|
||||||
ui_mode = UIM_SEL;
|
ui_mode = UIM_SEL;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
void ui_pad_edit_reg(void)
|
void ui_pad_edit_reg(void)
|
||||||
{
|
{
|
||||||
if (gpad.button & PAD_BUTTON_RIGHT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_RIGHT)
|
||||||
{
|
{
|
||||||
small_cursor_x++;
|
small_cursor_x++;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_LEFT)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_LEFT)
|
||||||
{
|
{
|
||||||
small_cursor_x--;
|
small_cursor_x--;
|
||||||
}
|
}
|
||||||
|
small_cursor_x &= 0x3;
|
||||||
|
|
||||||
if (gpad.button & PAD_BUTTON_UP)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_UP)
|
||||||
{
|
{
|
||||||
*reg_value += 0x1 << (4 * (3 - small_cursor_x));
|
*reg_value += 0x1 << (4 * (3 - small_cursor_x));
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_DOWN)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_DOWN)
|
||||||
{
|
{
|
||||||
*reg_value -= 0x1 << (4 * (3 - small_cursor_x));
|
*reg_value -= 0x1 << (4 * (3 - small_cursor_x));
|
||||||
}
|
}
|
||||||
small_cursor_x &= 0x3;
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
||||||
if (gpad.button & PAD_BUTTON_A)
|
|
||||||
{
|
{
|
||||||
ui_mode = UIM_SEL;
|
ui_mode = UIM_SEL;
|
||||||
}
|
}
|
||||||
if (gpad.button & PAD_BUTTON_X)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_1)
|
||||||
*reg_value = 0;
|
*reg_value = 0;
|
||||||
if (gpad.button & PAD_BUTTON_Y)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_2)
|
||||||
*reg_value = 0xffff;
|
*reg_value = 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_video(void)
|
void init_video(void)
|
||||||
{
|
{
|
||||||
VIDEO_Init();
|
VIDEO_Init();
|
||||||
|
|
||||||
switch (VIDEO_GetCurrentTvMode())
|
switch (VIDEO_GetCurrentTvMode())
|
||||||
{
|
{
|
||||||
case VI_NTSC:
|
case VI_NTSC:
|
||||||
|
@ -424,19 +295,13 @@ void init_video(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
PAD_Init();
|
PAD_Init();
|
||||||
|
|
||||||
//xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
|
|
||||||
xfb = SYS_AllocateFramebuffer(rmode);
|
xfb = SYS_AllocateFramebuffer(rmode);
|
||||||
|
|
||||||
VIDEO_Configure(rmode);
|
VIDEO_Configure(rmode);
|
||||||
|
|
||||||
VIDEO_SetNextFramebuffer(xfb);
|
VIDEO_SetNextFramebuffer(xfb);
|
||||||
|
|
||||||
VIDEO_SetBlack(FALSE);
|
VIDEO_SetBlack(FALSE);
|
||||||
VIDEO_Flush();
|
VIDEO_Flush();
|
||||||
VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
//if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
|
|
||||||
//VIDEO_SetPreRetraceCallback(ScanPads);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_send_task(void *addr, u16 iram_addr, u16 len, u16 start)
|
void my_send_task(void *addr, u16 iram_addr, u16 len, u16 start)
|
||||||
|
@ -466,23 +331,8 @@ void my_send_task(void *addr, u16 iram_addr, u16 len, u16 start)
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
u32 mail;
|
|
||||||
u32 level;
|
|
||||||
|
|
||||||
{
|
|
||||||
// WTF?
|
|
||||||
vu16 *dicr = ((vu16 *)0xcc002002);
|
|
||||||
*dicr = 0x100;
|
|
||||||
*dicr = 0x002;
|
|
||||||
// *dicr = 0x000;
|
|
||||||
// *dicr = 0x001;
|
|
||||||
val_x = *dicr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
init_video();
|
init_video();
|
||||||
//console_init(xfb,20,64,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*2);
|
ds_init(xfb, 20, 64, rmode->fbWidth, rmode->xfbHeight, rmode->fbWidth * 2);
|
||||||
ds_init(xfb,20,64,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*2);
|
|
||||||
|
|
||||||
ui_mode = UIM_SEL;
|
ui_mode = UIM_SEL;
|
||||||
|
|
||||||
|
@ -497,6 +347,7 @@ int main()
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET;
|
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET;
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT));
|
_dspReg[5] = (_dspReg[5]&~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT));
|
||||||
|
|
||||||
|
u32 level;
|
||||||
_CPU_ISR_Disable(level);
|
_CPU_ISR_Disable(level);
|
||||||
IRQ_Request(IRQ_DSP_DSP, my__dsp_handler,NULL);
|
IRQ_Request(IRQ_DSP_DSP, my__dsp_handler,NULL);
|
||||||
_CPU_ISR_Restore(level);
|
_CPU_ISR_Restore(level);
|
||||||
|
@ -508,18 +359,25 @@ int main()
|
||||||
|
|
||||||
WPAD_Init();
|
WPAD_Init();
|
||||||
|
|
||||||
while (1)
|
int dsp_steps = 0;
|
||||||
|
int show_step = 0;
|
||||||
|
|
||||||
|
while (true)
|
||||||
{
|
{
|
||||||
|
// Should put a loop around this too.
|
||||||
if (DSP_CheckMailFrom())
|
if (DSP_CheckMailFrom())
|
||||||
{
|
{
|
||||||
mail = DSP_ReadMailFrom();
|
u32 mail = DSP_ReadMailFrom();
|
||||||
ds_printf(2, 1, "Mail: %08x", mail);
|
ds_printf(2, 1, "Last mail: %08x", mail);
|
||||||
|
|
||||||
if (mail == 0x8071feed)
|
if (mail == 0x8071feed)
|
||||||
{
|
{
|
||||||
|
// DSP ready for task. Let's send one.
|
||||||
|
// First, prepare data.
|
||||||
for (int n = 0 ; n < 32 ; n++)
|
for (int n = 0 ; n < 32 ; n++)
|
||||||
dspbufC[0x00 + n] = dspreg_in[n];
|
dspbufC[0x00 + n] = dspreg_in[n];
|
||||||
DCFlushRange(dspbufC, 0x2000);
|
DCFlushRange(dspbufC, 0x2000);
|
||||||
|
// Then send the code.
|
||||||
DCFlushRange((void *)dsp_code, 0x1000);
|
DCFlushRange((void *)dsp_code, 0x1000);
|
||||||
my_send_task((void *)MEM_VIRTUAL_TO_PHYSICAL(dsp_code), 0, 4000, 0x10);
|
my_send_task((void *)MEM_VIRTUAL_TO_PHYSICAL(dsp_code), 0, 4000, 0x10);
|
||||||
}
|
}
|
||||||
|
@ -541,6 +399,7 @@ int main()
|
||||||
}
|
}
|
||||||
else if (mail == 0x8888feeb)
|
else if (mail == 0x8888feeb)
|
||||||
{
|
{
|
||||||
|
// We got a stepful of registers.
|
||||||
DCInvalidateRange(dspbufC, 0x2000);
|
DCInvalidateRange(dspbufC, 0x2000);
|
||||||
for (int i = 0 ; i < 32 ; i++)
|
for (int i = 0 ; i < 32 ; i++)
|
||||||
dspreg_out[dsp_steps][i] = dspbufC[0xf80 + i];
|
dspreg_out[dsp_steps][i] = dspbufC[0xf80 + i];
|
||||||
|
@ -551,8 +410,6 @@ int main()
|
||||||
while (DSP_CheckMailTo());
|
while (DSP_CheckMailTo());
|
||||||
DSP_SendMailTo(0x8000DEAD);
|
DSP_SendMailTo(0x8000DEAD);
|
||||||
while (DSP_CheckMailTo());
|
while (DSP_CheckMailTo());
|
||||||
|
|
||||||
// dump_to_pc();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,37 +419,34 @@ int main()
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME)
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
//ds_clear();
|
print_regs(show_step, dsp_steps);
|
||||||
//if (regs_refreshed)
|
|
||||||
{
|
|
||||||
print_regs(show_step);
|
|
||||||
//regs_refreshed = false;
|
|
||||||
|
|
||||||
}
|
ds_printf(2, 14, "Controls:");
|
||||||
hide_cursor();
|
ds_printf(4, 15, "+/- to move");
|
||||||
|
ds_printf(4, 16, "B to start over");
|
||||||
|
ds_printf(4, 17, "Home to exit");
|
||||||
|
|
||||||
switch(ui_mode)
|
switch (ui_mode)
|
||||||
{
|
{
|
||||||
case UIM_SEL:
|
case UIM_SEL:
|
||||||
ui_pad_sel();
|
ui_pad_sel();
|
||||||
show_cursor();
|
|
||||||
break;
|
break;
|
||||||
case UIM_EDIT_REG:
|
case UIM_EDIT_REG:
|
||||||
ui_pad_edit_reg();
|
ui_pad_edit_reg();
|
||||||
show_cursor();
|
|
||||||
break;
|
break;
|
||||||
case UIM_EDIT_BIN:
|
case UIM_EDIT_BIN:
|
||||||
ui_pad_edit_bin();
|
// ui_pad_edit_bin();
|
||||||
show_cursor();
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DCFlushRange(xfb, 0x200000);
|
DCFlushRange(xfb, 0x200000);
|
||||||
|
|
||||||
|
// Use B to start over.
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_B)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_B)
|
||||||
{
|
{
|
||||||
|
dsp_steps = 0; // Let's not add the new steps after the original ones. That was just annoying.
|
||||||
|
|
||||||
DCInvalidateRange(dspbufC, 0x2000);
|
DCInvalidateRange(dspbufC, 0x2000);
|
||||||
for (int n = 0 ; n < 0x2000 ; n++)
|
for (int n = 0 ; n < 0x2000 ; n++)
|
||||||
{
|
{
|
||||||
|
@ -601,28 +455,29 @@ int main()
|
||||||
DCFlushRange(dspbufC, 0x2000);
|
DCFlushRange(dspbufC, 0x2000);
|
||||||
|
|
||||||
// Reset the DSP.
|
// Reset the DSP.
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET;
|
_dspReg[5] = (_dspReg[5] & ~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT)) | DSPCR_DSPRESET;
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT));
|
_dspReg[5] = (_dspReg[5] & ~(DSPCR_HALT|DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT));
|
||||||
_dspReg[5] |= DSPCR_RES;
|
_dspReg[5] |= DSPCR_RES;
|
||||||
while (_dspReg[5] & DSPCR_RES)
|
while (_dspReg[5] & DSPCR_RES)
|
||||||
;
|
;
|
||||||
_dspReg[9] = 0x63;
|
_dspReg[9] = 0x63;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_2)
|
// Navigate between results using + and - buttons.
|
||||||
{
|
|
||||||
// WTF?
|
|
||||||
vu16 *dicr = ((vu16 *)0xcc002002);
|
|
||||||
*dicr = 0x001;
|
|
||||||
val_x = *dicr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_PLUS)
|
||||||
{
|
{
|
||||||
show_step++;
|
show_step++;
|
||||||
if (show_step >= dsp_steps)
|
if (show_step >= dsp_steps)
|
||||||
show_step = 0;
|
show_step = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_MINUS)
|
||||||
|
{
|
||||||
|
show_step--;
|
||||||
|
if (show_step < 0)
|
||||||
|
show_step = dsp_steps - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset the DSP
|
// Reset the DSP
|
||||||
|
|
Loading…
Reference in New Issue