First DSPSpy results. cleanup and commenting.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2999 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5f0ac1db68
commit
8716a58ae3
|
@ -1453,37 +1453,37 @@ void srbith(const UDSPInstruction& opc)
|
||||||
// M0 seems to be the default. M2 is used in functions in Zelda
|
// M0 seems to be the default. M2 is used in functions in Zelda
|
||||||
// and then reset with M0 at the end. Like the other bits here, it's
|
// and then reset with M0 at the end. Like the other bits here, it's
|
||||||
// done around loops with lots of multiplications.
|
// done around loops with lots of multiplications.
|
||||||
|
// I've confirmed with DSPSpy that they flip this bit.
|
||||||
case 0xa: // M2
|
case 0xa: // M2
|
||||||
//ERROR_LOG(DSPLLE, "M2");
|
g_dsp.r[DSP_REG_SR] &= ~SR_MUL_MODIFY;
|
||||||
break;
|
break;
|
||||||
// FIXME: Both of these appear in the beginning of the Wind Waker
|
// FIXME: Both of these appear in the beginning of the Wind Waker
|
||||||
case 0xb: // M0
|
case 0xb: // M0
|
||||||
//ERROR_LOG(DSPLLE, "M0");
|
g_dsp.r[DSP_REG_SR] |= SR_MUL_MODIFY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 15-bit precision? clamping? no idea :(
|
// 15-bit precision? clamping? no idea :(
|
||||||
// CLR15 seems to be the default.
|
// CLR15 seems to be the default.
|
||||||
// nakee: It seems to come around mul operation, and it explains what sets the mul bit. But if so why not set/clr14?
|
// nakee: It seems to come around mul operation, and it explains what sets the mul bit. But if so why not set/clr14?
|
||||||
case 0xc: // CLR15
|
case 0xc: // CLR15
|
||||||
g_dsp.r[DSP_REG_SR] |= SR_MUL_MODIFY;
|
g_dsp.r[DSP_REG_SR] &= ~SR_TOP_BIT_UNK;
|
||||||
//ERROR_LOG(DSPLLE, "CLR15");
|
//ERROR_LOG(DSPLLE, "CLR15");
|
||||||
break;
|
break;
|
||||||
case 0xd: // SET15
|
case 0xd: // SET15
|
||||||
g_dsp.r[DSP_REG_SR] &= ~SR_MUL_MODIFY;
|
g_dsp.r[DSP_REG_SR] |= SR_TOP_BIT_UNK;
|
||||||
//ERROR_LOG(DSPLLE, "SET15");
|
//ERROR_LOG(DSPLLE, "SET15");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 40-bit precision? clamping? no idea :(
|
// 40-bit precision? clamping? no idea :(
|
||||||
// 40 seems to be the default.
|
// 40 seems to be the default.
|
||||||
case 0xe: // SET40 (really, clear SR's 0x4000?) something about "set 40-bit operation"?
|
case 0xe: // SET40 (really, clear SR's 0x4000?) something about "set 40-bit operation"?
|
||||||
g_dsp.r[DSP_REG_SR] &= ~(1 << 14);
|
//g_dsp.r[DSP_REG_SR] &= ~(1 << 14);
|
||||||
//ERROR_LOG(DSPLLE, "SET40");
|
//ERROR_LOG(DSPLLE, "SET40");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xf: // SET16 (really, set SR's 0x4000?) something about "set 16-bit operation"?
|
case 0xf: // SET16 (really, set SR's 0x4000?) something about "set 16-bit operation"?
|
||||||
// that doesnt happen on a real console << what does this comment mean?
|
// that doesnt happen on a real console << what does this comment mean?
|
||||||
g_dsp.r[DSP_REG_SR] |= (1 << 14);
|
//g_dsp.r[DSP_REG_SR] |= (1 << 14);
|
||||||
//ERROR_LOG(DSPLLE, "SET16");
|
//ERROR_LOG(DSPLLE, "SET16");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,7 @@
|
||||||
#define SR_LOGIC_ZERO 0x0040 // ?? duddie's doc sometimes say & 1<<6 (0x40), sometimes 1<<14 (0x4000), while we have 0x20 .. eh
|
#define SR_LOGIC_ZERO 0x0040 // ?? duddie's doc sometimes say & 1<<6 (0x40), sometimes 1<<14 (0x4000), while we have 0x20 .. eh
|
||||||
#define SR_INT_ENABLE 0x0200 // Not 100% sure but duddie says so. This should replace the hack, if so.
|
#define SR_INT_ENABLE 0x0200 // Not 100% sure but duddie says so. This should replace the hack, if so.
|
||||||
#define SR_MUL_MODIFY 0x2000 // 1 = normal. 0 = x2
|
#define SR_MUL_MODIFY 0x2000 // 1 = normal. 0 = x2
|
||||||
|
#define SR_TOP_BIT_UNK 0x8000 // 1 = normal. 0 = x2
|
||||||
|
|
||||||
void dsp_reg_store_stack(u8 stack_reg, u16 val);
|
void dsp_reg_store_stack(u8 stack_reg, u16 val);
|
||||||
u16 dsp_reg_load_stack(u8 stack_reg);
|
u16 dsp_reg_load_stack(u8 stack_reg);
|
||||||
|
|
|
@ -180,13 +180,19 @@ main:
|
||||||
|
|
||||||
; We can call send_back at any time to send data back to the PowerPC.
|
; We can call send_back at any time to send data back to the PowerPC.
|
||||||
|
|
||||||
|
; Calling set16 here seemed to crash the dsp tester in strange ways
|
||||||
|
; until I added set40 in send_back. Seems clear that it affects something important.
|
||||||
|
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
cw 0x8600
|
inc $acc0
|
||||||
|
call send_back
|
||||||
|
|
||||||
|
s16
|
||||||
|
inc $acc0
|
||||||
call send_back
|
call send_back
|
||||||
|
|
||||||
; We're done - currently we only test one opcode, in this case 0x8600.
|
; We're done - currently we only test one opcode, in this case 0x8600.
|
||||||
|
@ -511,6 +517,8 @@ irq:
|
||||||
; DMA:s the current state of the registers back to the PowerPC. To do this,
|
; DMA:s the current state of the registers back to the PowerPC. To do this,
|
||||||
; it must write the contents of all regs to DRAM.
|
; it must write the contents of all regs to DRAM.
|
||||||
send_back:
|
send_back:
|
||||||
|
; make state safe.
|
||||||
|
set40
|
||||||
; store registers to reg table
|
; store registers to reg table
|
||||||
sr @REGS_BASE, $r00
|
sr @REGS_BASE, $r00
|
||||||
lri $r00, #(REGS_BASE + 1)
|
lri $r00, #(REGS_BASE + 1)
|
||||||
|
|
|
@ -4,38 +4,38 @@ const unsigned short dsp_code[0x1000] = {
|
||||||
const unsigned short dsp_code[0x1000] __attribute__ ((aligned (64))) = {
|
const unsigned short dsp_code[0x1000] __attribute__ ((aligned (64))) = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
0x029f, 0x015b, 0x029f, 0x015f, 0x029f, 0x0163, 0x029f, 0x0167, 0x029f, 0x016b, 0x029f, 0x016f, 0x029f, 0x0180, 0x029f, 0x0184,
|
0x029f, 0x015f, 0x029f, 0x0163, 0x029f, 0x0167, 0x029f, 0x016b, 0x029f, 0x016f, 0x029f, 0x0173, 0x029f, 0x0184, 0x029f, 0x0188,
|
||||||
0x1302, 0x1303, 0x1204, 0x1305, 0x1306, 0x8e00, 0x0092, 0x00ff, 0x8900, 0x8100, 0x02bf, 0x014f, 0x16fc, 0x8888, 0x16fd, 0xdead,
|
0x1302, 0x1303, 0x1204, 0x1305, 0x1306, 0x8e00, 0x0092, 0x00ff, 0x8900, 0x8100, 0x02bf, 0x0153, 0x16fc, 0x8888, 0x16fd, 0xdead,
|
||||||
0x16fb, 0x0001, 0x02bf, 0x0155, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0000, 0x0099, 0x0000, 0x009a,
|
0x16fb, 0x0001, 0x02bf, 0x0159, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0000, 0x0099, 0x0000, 0x009a,
|
||||||
0x2000, 0x00dc, 0x0f7e, 0x00de, 0x0f7f, 0x02bf, 0x013f, 0x02bf, 0x014f, 0x16fc, 0x8888, 0x16fd, 0xbeef, 0x16fb, 0x0001, 0x02bf,
|
0x2000, 0x00dc, 0x0f7e, 0x00de, 0x0f7f, 0x02bf, 0x0143, 0x02bf, 0x0153, 0x16fc, 0x8888, 0x16fd, 0xbeef, 0x16fb, 0x0001, 0x02bf,
|
||||||
0x0155, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0f80, 0x0099, 0x0000, 0x009a, 0x0080, 0x00dc, 0x0f7e,
|
0x0159, 0x26ff, 0x0340, 0x7fff, 0x00ff, 0x0f7e, 0x00fe, 0x0f7f, 0x0098, 0x0f80, 0x0099, 0x0000, 0x009a, 0x0080, 0x00dc, 0x0f7e,
|
||||||
0x00de, 0x0f7f, 0x02bf, 0x013f, 0x0080, 0x0f81, 0x1901, 0x1902, 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a,
|
0x00de, 0x0f7f, 0x02bf, 0x0143, 0x0080, 0x0f81, 0x1901, 0x1902, 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a,
|
||||||
0x190b, 0x190c, 0x190d, 0x190e, 0x190f, 0x1910, 0x1911, 0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a,
|
0x190b, 0x190c, 0x190d, 0x190e, 0x190f, 0x1910, 0x1911, 0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a,
|
||||||
0x191b, 0x191c, 0x191d, 0x191e, 0x191f, 0x00c0, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x8600, 0x02bf, 0x0194, 0x029f, 0x0136,
|
0x191b, 0x191c, 0x191d, 0x191e, 0x191f, 0x00c0, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x7600, 0x02bf, 0x0198, 0x8f00, 0x7600,
|
||||||
0x00de, 0x03f1, 0x02bf, 0x0194, 0x0200, 0x0a60, 0x02bf, 0x0194, 0x1c7e, 0x02bf, 0x0194, 0x8100, 0x02bf, 0x0194, 0x8900, 0x02bf,
|
0x02bf, 0x0198, 0x029f, 0x013a, 0x00de, 0x03f1, 0x02bf, 0x0198, 0x0200, 0x0a60, 0x02bf, 0x0198, 0x1c7e, 0x02bf, 0x0198, 0x8100,
|
||||||
0x0194, 0x009f, 0x00a0, 0x02bf, 0x0194, 0x00de, 0x03f1, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x0e50, 0x02bf, 0x0194, 0x0750,
|
0x02bf, 0x0198, 0x8900, 0x02bf, 0x0198, 0x009f, 0x00a0, 0x02bf, 0x0198, 0x00de, 0x03f1, 0x02bf, 0x0198, 0x5d00, 0x02bf, 0x0198,
|
||||||
0x02bf, 0x0194, 0x0270, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x00da, 0x03f2, 0x02bf, 0x0194, 0x8600, 0x02bf, 0x0194, 0x0290,
|
0x0e50, 0x02bf, 0x0198, 0x0750, 0x02bf, 0x0198, 0x0270, 0x02bf, 0x0198, 0x5d00, 0x02bf, 0x0198, 0x00da, 0x03f2, 0x02bf, 0x0198,
|
||||||
0x00e7, 0x00de, 0x03f3, 0x02bf, 0x0194, 0x5c00, 0x02bf, 0x0194, 0x0293, 0x00bc, 0x029f, 0x00f0, 0x00db, 0x03f7, 0x02bf, 0x0194,
|
0x8600, 0x02bf, 0x0198, 0x0290, 0x00eb, 0x00de, 0x03f3, 0x02bf, 0x0198, 0x5c00, 0x02bf, 0x0198, 0x0293, 0x00c0, 0x029f, 0x00f4,
|
||||||
0x009e, 0x8000, 0x02bf, 0x0194, 0x4600, 0x02bf, 0x0194, 0x029f, 0x00d4, 0x00db, 0x03f7, 0x02bf, 0x0194, 0x009e, 0x8000, 0x02bf,
|
0x00db, 0x03f7, 0x02bf, 0x0198, 0x009e, 0x8000, 0x02bf, 0x0198, 0x4600, 0x02bf, 0x0198, 0x029f, 0x00d8, 0x00db, 0x03f7, 0x02bf,
|
||||||
0x0194, 0x5600, 0x02bf, 0x0194, 0x00fe, 0x03f5, 0x02bf, 0x0194, 0x1fda, 0x02bf, 0x0194, 0x7c00, 0x02bf, 0x0194, 0x1f5e, 0x02bf,
|
0x0198, 0x009e, 0x8000, 0x02bf, 0x0198, 0x5600, 0x02bf, 0x0198, 0x00fe, 0x03f5, 0x02bf, 0x0198, 0x1fda, 0x02bf, 0x0198, 0x7c00,
|
||||||
0x0194, 0x00fe, 0x03f2, 0x02bf, 0x0194, 0x029f, 0x00f0, 0x00de, 0x03f4, 0x02bf, 0x0194, 0x5d00, 0x02bf, 0x0194, 0x0293, 0x00c9,
|
0x02bf, 0x0198, 0x1f5e, 0x02bf, 0x0198, 0x00fe, 0x03f2, 0x02bf, 0x0198, 0x029f, 0x00f4, 0x00de, 0x03f4, 0x02bf, 0x0198, 0x5d00,
|
||||||
0x8900, 0x02bf, 0x0194, 0x00dd, 0x03f5, 0x02bf, 0x0194, 0x1501, 0x02bf, 0x0194, 0x8100, 0x02bf, 0x0194, 0x00dc, 0x03f6, 0x02bf,
|
0x02bf, 0x0198, 0x0293, 0x00cd, 0x8900, 0x02bf, 0x0198, 0x00dd, 0x03f5, 0x02bf, 0x0198, 0x1501, 0x02bf, 0x0198, 0x8100, 0x02bf,
|
||||||
0x0194, 0x008b, 0x009f, 0x02bf, 0x0194, 0x0080, 0x0a00, 0x02bf, 0x0194, 0x0900, 0x02bf, 0x0194, 0x1150, 0x011d, 0x1878, 0x02bf,
|
0x0198, 0x00dc, 0x03f6, 0x02bf, 0x0198, 0x008b, 0x009f, 0x02bf, 0x0198, 0x0080, 0x0a00, 0x02bf, 0x0198, 0x0900, 0x02bf, 0x0198,
|
||||||
0x0194, 0x4c00, 0x02bf, 0x0194, 0x1cfe, 0x02bf, 0x0194, 0x001f, 0x02bf, 0x0194, 0x1fd9, 0x02bf, 0x0194, 0x1b18, 0x02bf, 0x0194,
|
0x1150, 0x0121, 0x1878, 0x02bf, 0x0198, 0x4c00, 0x02bf, 0x0198, 0x1cfe, 0x02bf, 0x0198, 0x001f, 0x02bf, 0x0198, 0x1fd9, 0x02bf,
|
||||||
0x009f, 0x0a60, 0x02bf, 0x0194, 0x1fc3, 0x02bf, 0x0194, 0x5c00, 0x02bf, 0x0194, 0x00fe, 0x03f1, 0x02bf, 0x0194, 0x00fc, 0x03f6,
|
0x0198, 0x1b18, 0x02bf, 0x0198, 0x009f, 0x0a60, 0x02bf, 0x0198, 0x1fc3, 0x02bf, 0x0198, 0x5c00, 0x02bf, 0x0198, 0x00fe, 0x03f1,
|
||||||
0x02bf, 0x0194, 0x008b, 0xffff, 0x02bf, 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x029f, 0x013d, 0x00fc,
|
0x02bf, 0x0198, 0x00fc, 0x03f6, 0x02bf, 0x0198, 0x008b, 0xffff, 0x02bf, 0x0198, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||||
0xffce, 0x00fe, 0xffcf, 0x00f8, 0xffcd, 0x00f9, 0xffc9, 0x00fa, 0xffcb, 0x27c9, 0x03c0, 0x0004, 0x029d, 0x0149, 0x02df, 0x27fc,
|
0x0000, 0x029f, 0x0141, 0x00fc, 0xffce, 0x00fe, 0xffcf, 0x00f8, 0xffcd, 0x00f9, 0xffc9, 0x00fa, 0xffcb, 0x27c9, 0x03c0, 0x0004,
|
||||||
0x03c0, 0x8000, 0x029d, 0x014f, 0x02df, 0x27fe, 0x03c0, 0x8000, 0x029c, 0x0155, 0x02df, 0x009e, 0x0000, 0x029f, 0x0188, 0x009e,
|
0x029d, 0x014d, 0x02df, 0x27fc, 0x03c0, 0x8000, 0x029d, 0x0153, 0x02df, 0x27fe, 0x03c0, 0x8000, 0x029c, 0x0159, 0x02df, 0x009e,
|
||||||
0x0001, 0x029f, 0x0188, 0x009e, 0x0002, 0x029f, 0x0188, 0x009e, 0x0003, 0x029f, 0x0188, 0x009e, 0x0004, 0x029f, 0x0188, 0x8e00,
|
0x0000, 0x029f, 0x018c, 0x009e, 0x0001, 0x029f, 0x018c, 0x009e, 0x0002, 0x029f, 0x018c, 0x009e, 0x0003, 0x029f, 0x018c, 0x009e,
|
||||||
0x1dbc, 0x1dbe, 0x8100, 0x1fcd, 0x1f8d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ff, 0x009e, 0x0005, 0x029f, 0x0188,
|
0x0004, 0x029f, 0x018c, 0x8e00, 0x1dbc, 0x1dbe, 0x8100, 0x1fcd, 0x1f8d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ff,
|
||||||
0x009e, 0x0006, 0x029f, 0x0188, 0x009e, 0x0007, 0x029f, 0x0188, 0x27fc, 0x03c0, 0x8000, 0x029d, 0x0188, 0x16fc, 0x8bad, 0x00eb,
|
0x009e, 0x0005, 0x029f, 0x018c, 0x009e, 0x0006, 0x029f, 0x018c, 0x009e, 0x0007, 0x029f, 0x018c, 0x27fc, 0x03c0, 0x8000, 0x029d,
|
||||||
0xfffd, 0x16fb, 0x0001, 0x0021, 0x00e0, 0x0f80, 0x0080, 0x0f81, 0x1b01, 0x1b02, 0x1b03, 0x1b04, 0x1b05, 0x1b06, 0x1b07, 0x1b08,
|
0x018c, 0x16fc, 0x8bad, 0x00eb, 0xfffd, 0x16fb, 0x0001, 0x0021, 0x8e00, 0x00e0, 0x0f80, 0x0080, 0x0f81, 0x1b01, 0x1b02, 0x1b03,
|
||||||
0x1b09, 0x1b0a, 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b0f, 0x1b10, 0x1b11, 0x1b12, 0x1b13, 0x1b14, 0x1b15, 0x1b16, 0x1b17, 0x1b18,
|
0x1b04, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b0f, 0x1b10, 0x1b11, 0x1b12, 0x1b13,
|
||||||
0x1b19, 0x1b1a, 0x1b1b, 0x1b1c, 0x1b1d, 0x1b1e, 0x1b1f, 0x0098, 0x0000, 0x0099, 0x0001, 0x009a, 0x0200, 0x00dc, 0x0f7e, 0x00de,
|
0x1b14, 0x1b15, 0x1b16, 0x1b17, 0x1b18, 0x1b19, 0x1b1a, 0x1b1b, 0x1b1c, 0x1b1d, 0x1b1e, 0x1b1f, 0x0098, 0x0000, 0x0099, 0x0001,
|
||||||
0x0f7f, 0x0081, 0x0010, 0x0061, 0x01ce, 0x02bf, 0x013f, 0x0200, 0x0200, 0x1ff8, 0x0300, 0x0100, 0x1f1f, 0x0000, 0x0000, 0x02bf,
|
0x009a, 0x0200, 0x00dc, 0x0f7e, 0x00de, 0x0f7f, 0x0081, 0x0010, 0x0061, 0x01d3, 0x02bf, 0x0143, 0x0200, 0x0200, 0x1ff8, 0x0300,
|
||||||
0x014f, 0x16fc, 0x8888, 0x16fd, 0xfeeb, 0x16fb, 0x0001, 0x02bf, 0x0155, 0x26ff, 0x0340, 0x7fff, 0x0080, 0x0f81, 0x1901, 0x1902,
|
0x0100, 0x1f1f, 0x0000, 0x0000, 0x02bf, 0x0153, 0x16fc, 0x8888, 0x16fd, 0xfeeb, 0x16fb, 0x0001, 0x02bf, 0x0159, 0x26ff, 0x0340,
|
||||||
0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a, 0x190b, 0x190c, 0x190d, 0x190e, 0x190f, 0x1910, 0x1911, 0x1912,
|
0x7fff, 0x0080, 0x0f81, 0x1901, 0x1902, 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, 0x190a, 0x190b, 0x190c, 0x190d,
|
||||||
0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a, 0x191b, 0x191c, 0x191d, 0x191e, 0x191f, 0x00c0, 0x0f80, 0x02df,
|
0x190e, 0x190f, 0x1910, 0x1911, 0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1917, 0x1918, 0x1919, 0x191a, 0x191b, 0x191c, 0x191d,
|
||||||
0x8e00, 0x02bf, 0x0194, 0x8f00, 0x02df, 0x0082, 0x0000, 0x009e, 0x1000, 0x0081, 0x1000, 0x0061, 0x0215, 0x1c7e, 0x80f0, 0x1fe0,
|
0x191e, 0x191f, 0x00c0, 0x0f80, 0x02df, 0x8e00, 0x02bf, 0x0198, 0x8f00, 0x02df, 0x0082, 0x0000, 0x009e, 0x1000, 0x0081, 0x1000,
|
||||||
0x1c02, 0x1b1b, 0x1c40, 0x1c1f, 0x0401, 0x0000, 0x02df,
|
0x0061, 0x021a, 0x1c7e, 0x80f0, 0x1fe0, 0x1c02, 0x1b1b, 0x1c40, 0x1c1f, 0x0401, 0x0000, 0x02df,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
../../Binary/x64/DSPTool.exe -h dsp_code dsp_code.ds
|
../../Binary/x64/DSPTool.exe -h dsp_code dsp_code.ds
|
||||||
|
make
|
||||||
|
|
|
@ -58,11 +58,6 @@ u16 *dspbufP;
|
||||||
u16 *dspbufC;
|
u16 *dspbufC;
|
||||||
u32 *dspbufU;
|
u32 *dspbufU;
|
||||||
|
|
||||||
u16 opcode[4] = {
|
|
||||||
0x0000, 0x0000, 0x0000, 0x0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
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,
|
0x0411, 0x0522, 0x0633, 0x0744, 0x0855, 0x0966, 0x0a77, 0x0b88,
|
||||||
|
@ -161,11 +156,9 @@ vu16 val_x = 0x1234;
|
||||||
|
|
||||||
void print_regs(u16 _step)
|
void print_regs(u16 _step)
|
||||||
{
|
{
|
||||||
int i, j;
|
for (int j = 0 ; j < 4 ; j++)
|
||||||
|
|
||||||
for(j = 0 ; j < 4 ; j++)
|
|
||||||
{
|
{
|
||||||
for(i = 0 ; i < 8 ; i++)
|
for (int i = 0 ; i < 8 ; i++)
|
||||||
{
|
{
|
||||||
int reg = j * 8 + i;
|
int reg = j * 8 + i;
|
||||||
ds_set_colour(COLOR_GREEN, COLOR_BLACK);
|
ds_set_colour(COLOR_GREEN, COLOR_BLACK);
|
||||||
|
@ -188,9 +181,9 @@ void print_regs(u16 _step)
|
||||||
ds_printf(10 + j, i + 11, "%d", (opcode[i] >> (15 - j)) & 0x1);*/
|
ds_printf(10 + j, i + 11, "%d", (opcode[i] >> (15 - j)) & 0x1);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
for(j = 0 ; j < 4 ; j++)
|
for (int j = 0 ; j < 4 ; j++)
|
||||||
{
|
{
|
||||||
for(i = 0 ; i < 8 ; i++)
|
for (int i = 0 ; i < 8 ; i++)
|
||||||
{
|
{
|
||||||
char tmpbuf1[20];
|
char tmpbuf1[20];
|
||||||
int reg = j * 8 + i;
|
int reg = j * 8 + i;
|
||||||
|
@ -224,7 +217,7 @@ void print_regs(u16 _step)
|
||||||
ds_clear();
|
ds_clear();
|
||||||
count = 0;
|
count = 0;
|
||||||
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
ds_set_colour(COLOR_WHITE, COLOR_BLACK);
|
||||||
for (i = 0x0; i < 0xf70 ; i++)
|
for (int i = 0x0; i < 0xf70 ; i++)
|
||||||
{
|
{
|
||||||
if (dspbufC[i] != mem_dump[i])
|
if (dspbufC[i] != mem_dump[i])
|
||||||
{
|
{
|
||||||
|
@ -347,7 +340,7 @@ void ui_pad_sel(void)
|
||||||
ui_mode = UIM_EDIT_REG;
|
ui_mode = UIM_EDIT_REG;
|
||||||
else
|
else
|
||||||
ui_mode = UIM_EDIT_BIN;
|
ui_mode = UIM_EDIT_BIN;
|
||||||
reg_value = &opcode[cursor_y-8];
|
// reg_value = &opcode[cursor_y-8];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -355,7 +348,6 @@ void ui_pad_sel(void)
|
||||||
void ui_pad_edit_bin(void)
|
void ui_pad_edit_bin(void)
|
||||||
{
|
{
|
||||||
u8 pos;
|
u8 pos;
|
||||||
|
|
||||||
if (gpad.button & PAD_BUTTON_RIGHT)
|
if (gpad.button & PAD_BUTTON_RIGHT)
|
||||||
{
|
{
|
||||||
small_cursor_x++;
|
small_cursor_x++;
|
||||||
|
@ -474,11 +466,11 @@ void my_send_task(void *addr, u16 iram_addr, u16 len, u16 start)
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int i, j;
|
|
||||||
u32 mail;
|
u32 mail;
|
||||||
u32 level;
|
u32 level;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
// WTF?
|
||||||
vu16 *dicr = ((vu16 *)0xcc002002);
|
vu16 *dicr = ((vu16 *)0xcc002002);
|
||||||
*dicr = 0x100;
|
*dicr = 0x100;
|
||||||
*dicr = 0x002;
|
*dicr = 0x002;
|
||||||
|
@ -492,7 +484,6 @@ int main()
|
||||||
//console_init(xfb,20,64,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*2);
|
//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;
|
||||||
|
|
||||||
dspbufP = (u16 *)MEM_VIRTUAL_TO_PHYSICAL(dspbuffer);
|
dspbufP = (u16 *)MEM_VIRTUAL_TO_PHYSICAL(dspbuffer);
|
||||||
|
@ -500,7 +491,7 @@ int main()
|
||||||
dspbufU = (u32 *)(MEM_K0_TO_K1(dspbuffer));
|
dspbufU = (u32 *)(MEM_K0_TO_K1(dspbuffer));
|
||||||
|
|
||||||
DCInvalidateRange(dspbuffer, 0x2000);
|
DCInvalidateRange(dspbuffer, 0x2000);
|
||||||
for(j = 0 ; j < 0x800 ; j++)
|
for (int j = 0 ; j < 0x800; j++)
|
||||||
dspbufU[j] = 0xffffffff;
|
dspbufU[j] = 0xffffffff;
|
||||||
|
|
||||||
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET;
|
_dspReg[5] = (_dspReg[5]&~(DSPCR_AIINT|DSPCR_ARINT|DSPCR_DSPINT))|DSPCR_DSPRESET;
|
||||||
|
@ -526,26 +517,11 @@ int main()
|
||||||
|
|
||||||
if (mail == 0x8071feed)
|
if (mail == 0x8071feed)
|
||||||
{
|
{
|
||||||
int n;
|
for (int n = 0 ; n < 32 ; n++)
|
||||||
for (n = 0 ; n < 32 ; n++)
|
|
||||||
dspbufC[0x00 + n] = dspreg_in[n];
|
dspbufC[0x00 + n] = dspreg_in[n];
|
||||||
DCFlushRange(dspbufC, 0x2000);
|
DCFlushRange(dspbufC, 0x2000);
|
||||||
/*
|
|
||||||
for (n = 0 ; n < 600 ; n++)
|
|
||||||
{
|
|
||||||
if (((u16*)dsp_test)[n] == 0x1234)
|
|
||||||
{
|
|
||||||
((u16*)dsp_test)[n+0] = opcode[0];
|
|
||||||
((u16*)dsp_test)[n+1] = opcode[1];
|
|
||||||
((u16*)dsp_test)[n+2] = opcode[2];
|
|
||||||
((u16*)dsp_test)[n+3] = opcode[3];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
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);
|
||||||
((u16*)dsp_code)[n] = 0x1234; // wtf?
|
|
||||||
}
|
}
|
||||||
else if (mail == 0x8888dead)
|
else if (mail == 0x8888dead)
|
||||||
{
|
{
|
||||||
|
@ -566,7 +542,7 @@ int main()
|
||||||
else if (mail == 0x8888feeb)
|
else if (mail == 0x8888feeb)
|
||||||
{
|
{
|
||||||
DCInvalidateRange(dspbufC, 0x2000);
|
DCInvalidateRange(dspbufC, 0x2000);
|
||||||
for(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];
|
||||||
regs_refreshed = true;
|
regs_refreshed = true;
|
||||||
|
|
||||||
|
@ -577,7 +553,6 @@ int main()
|
||||||
while (DSP_CheckMailTo());
|
while (DSP_CheckMailTo());
|
||||||
|
|
||||||
// dump_to_pc();
|
// dump_to_pc();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,33 +594,36 @@ int main()
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_B)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_B)
|
||||||
{
|
{
|
||||||
DCInvalidateRange(dspbufC, 0x2000);
|
DCInvalidateRange(dspbufC, 0x2000);
|
||||||
int n;
|
for (int n = 0 ; n < 0x2000 ; n++)
|
||||||
for(n = 0 ; n < 0x2000 ; n++)
|
|
||||||
{
|
{
|
||||||
// dspbufU[n/2] = 0; dspbufC[n] = 0;
|
// dspbufU[n/2] = 0; dspbufC[n] = 0;
|
||||||
}
|
}
|
||||||
DCFlushRange(dspbufC, 0x2000);
|
DCFlushRange(dspbufC, 0x2000);
|
||||||
|
|
||||||
|
// 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)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_2)
|
||||||
{
|
{
|
||||||
|
// WTF?
|
||||||
vu16 *dicr = ((vu16 *)0xcc002002);
|
vu16 *dicr = ((vu16 *)0xcc002002);
|
||||||
*dicr = 0x001;
|
*dicr = 0x001;
|
||||||
val_x = *dicr;
|
val_x = *dicr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A)
|
||||||
{
|
{
|
||||||
show_step++;
|
show_step++;
|
||||||
if (show_step >= dsp_steps)
|
if (show_step >= dsp_steps)
|
||||||
show_step = 0;
|
show_step = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
|
||||||
|
|
||||||
// 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;
|
||||||
|
|
Loading…
Reference in New Issue