summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authornakeee <nakeee@gmail.com>2009-06-21 09:56:39 +0000
committernakeee <nakeee@gmail.com>2009-06-21 09:56:39 +0000
commit59487bddcfbbfb4253bf0061ac6af946c245253a (patch)
tree0a07bcf03dbe7ece31d8920117080cf0c9a7b119 /Source/Core
parente91ab24bcec0922e8d2fb9f2411bb585e48698fe (diff)
Some LLE memory access
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3520 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DSPCore/Src/DspIntLoadStore.cpp9
-rw-r--r--Source/Core/DSPCore/Src/gdsp_ext_op.cpp42
2 files changed, 34 insertions, 17 deletions
diff --git a/Source/Core/DSPCore/Src/DspIntLoadStore.cpp b/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
index 9916245a7a..6834500cae 100644
--- a/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
+++ b/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
@@ -150,7 +150,8 @@ void lrrn(const UDSPInstruction& opc)
u16 val = dsp_dmem_read(g_dsp.r[sreg]);
dsp_op_write_reg(dreg, val);
- g_dsp.r[sreg] += g_dsp.r[DSP_REG_IX0 + sreg];
+ // g_dsp.r[sreg] += g_dsp.r[DSP_REG_IX0 + sreg];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
}
// SRR @$D, $S
@@ -209,7 +210,8 @@ void srrn(const UDSPInstruction& opc)
u16 val = dsp_op_read_reg(sreg);
dsp_dmem_write(g_dsp.r[dreg], val);
- g_dsp.r[dreg] += g_dsp.r[DSP_REG_IX0 + dreg];
+ // g_dsp.r[dreg] += g_dsp.r[DSP_REG_IX0 + dreg];
+ dsp_increase_addr_reg(dreg, (s16)g_dsp.r[DSP_REG_IX0 + dreg]);
}
// ILRR $acD.m, @$arS
@@ -264,7 +266,8 @@ void ilrrn(const UDSPInstruction& opc)
g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
- g_dsp.r[reg] += g_dsp.r[DSP_REG_IX0 + reg];
+ // g_dsp.r[reg] += g_dsp.r[DSP_REG_IX0 + reg];
+ dsp_increase_addr_reg(reg, (s16)g_dsp.r[DSP_REG_IX0 + reg]);
}
} // namespace
diff --git a/Source/Core/DSPCore/Src/gdsp_ext_op.cpp b/Source/Core/DSPCore/Src/gdsp_ext_op.cpp
index 67119eca2e..ed2ac1b29a 100644
--- a/Source/Core/DSPCore/Src/gdsp_ext_op.cpp
+++ b/Source/Core/DSPCore/Src/gdsp_ext_op.cpp
@@ -67,7 +67,8 @@ void ir(const UDSPInstruction& opc) {
void nr(const UDSPInstruction& opc) {
u8 reg = opc.hex & 0x3;
- g_dsp.r[reg] += g_dsp.r[reg + DSP_REG_IX0];
+ // g_dsp.r[reg] += g_dsp.r[reg + DSP_REG_IX0];
+ dsp_increase_addr_reg(reg, (s16)g_dsp.r[DSP_REG_IX0 + reg]);
}
// MV $axD, $acS.l
@@ -106,7 +107,8 @@ void sn(const UDSPInstruction& opc)
dsp_dmem_write(g_dsp.r[dreg], g_dsp.r[sreg]);
- g_dsp.r[dreg] += g_dsp.r[dreg + DSP_REG_IX0];
+ // g_dsp.r[dreg] += g_dsp.r[dreg + DSP_REG_IX0];
+ dsp_increase_addr_reg(dreg, (s16)g_dsp.r[DSP_REG_IX0 + dreg]);
}
// L axD.l, @$S
@@ -136,7 +138,8 @@ void ln(const UDSPInstruction& opc)
u16 val = dsp_dmem_read(g_dsp.r[sreg]);
g_dsp.r[dreg] = val;
- g_dsp.r[sreg] += g_dsp.r[sreg + DSP_REG_IX0];
+ // g_dsp.r[sreg] += g_dsp.r[sreg + DSP_REG_IX0];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
}
// Not in duddie's doc
@@ -220,7 +223,8 @@ void dsp_op_ext_r_epi(const UDSPInstruction& opc)
break;
case 0x03: // NR
- g_dsp.r[reg] += g_dsp.r[reg + 4];
+ // g_dsp.r[reg] += g_dsp.r[reg + 4];
+ dsp_increase_addr_reg(reg, (s16)g_dsp.r[DSP_REG_IX0 + reg]);
break;
}
}
@@ -244,7 +248,8 @@ void dsp_op_ext_s(const UDSPInstruction& opc)
if (opc.hex & 0x04) // SN
{
- g_dsp.r[dreg] += g_dsp.r[dreg + 4];
+ // g_dsp.r[dreg] += g_dsp.r[dreg + 4];
+ dsp_increase_addr_reg(dreg, (s16)g_dsp.r[DSP_REG_IX0 + dreg]);
}
else
{
@@ -263,7 +268,8 @@ void dsp_op_ext_l(const UDSPInstruction& opc)
if (opc.hex & 0x04) // LN/LSMN
{
- g_dsp.r[sreg] += g_dsp.r[sreg + 4];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
+ // g_dsp.r[sreg] += g_dsp.r[sreg + 4];
}
else
{
@@ -276,14 +282,16 @@ void dsp_op_ext_ls_pro(const UDSPInstruction& opc)
{
u8 areg = (opc.hex & 0x1) + 0x1e;
dsp_dmem_write(g_dsp.r[0x03], g_dsp.r[areg]);
+ u8 sreg = 0x03;
if (opc.hex & 0x8) // LSM/LSMN
{
- g_dsp.r[0x03] += g_dsp.r[0x07];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
+ // g_dsp.r[0x03] += g_dsp.r[0x07];
}
else // LS
{
- dsp_increment_addr_reg(0x03);
+ dsp_increment_addr_reg(sreg);
}
}
@@ -296,7 +304,8 @@ void dsp_op_ext_ls_epi(const UDSPInstruction& opc)
if (opc.hex & 0x4) // LSN/LSMN
{
- g_dsp.r[0x00] += g_dsp.r[0x04];
+ //g_dsp.r[0x00] += g_dsp.r[0x04];
+ dsp_increase_addr_reg(0x00, (s16)g_dsp.r[DSP_REG_IX0]);
}
else // LS
{
@@ -312,7 +321,8 @@ void dsp_op_ext_sl_pro(const UDSPInstruction& opc)
if (opc.hex & 0x4) // SLN/SLNM
{
- g_dsp.r[0x00] += g_dsp.r[0x04];
+ dsp_increase_addr_reg(0x00, (s16)g_dsp.r[DSP_REG_IX0]);
+ // g_dsp.r[0x00] += g_dsp.r[0x04];
}
else // SL
{
@@ -326,14 +336,16 @@ void dsp_op_ext_sl_epi(const UDSPInstruction& opc)
u8 dreg = ((opc.hex >> 4) & 0x3) + 0x18;
u16 val = dsp_dmem_read(g_dsp.r[0x03]);
dsp_op_write_reg(dreg, val);
+ u8 sreg = 0x03;
if (opc.hex & 0x8) // SLM/SLMN
{
- g_dsp.r[0x03] += g_dsp.r[0x07];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
+ // g_dsp.r[0x03] += g_dsp.r[0x07];
}
else // SL
{
- dsp_increment_addr_reg(0x03);
+ dsp_increment_addr_reg(sreg);
}
}
@@ -348,7 +360,8 @@ void dsp_op_ext_ld(const UDSPInstruction& opc)
if (opc.hex & 0x04) // N
{
- g_dsp.r[sreg] += g_dsp.r[sreg + 0x04];
+ dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
+ //g_dsp.r[sreg] += g_dsp.r[sreg + 0x04];
}
else
{
@@ -357,7 +370,8 @@ void dsp_op_ext_ld(const UDSPInstruction& opc)
if (opc.hex & 0x08) // M
{
- g_dsp.r[0x03] += g_dsp.r[0x07];
+ dsp_increase_addr_reg(0x03, (s16)g_dsp.r[DSP_REG_IX0 + 0x03]);
+ // g_dsp.r[0x03] += g_dsp.r[0x07];
}
else
{