Some LLE memory access

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3520 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
nakeee 2009-06-21 09:56:39 +00:00
parent e91ab24bce
commit 59487bddcf
2 changed files with 34 additions and 17 deletions

View File

@ -150,7 +150,8 @@ void lrrn(const UDSPInstruction& opc)
u16 val = dsp_dmem_read(g_dsp.r[sreg]); u16 val = dsp_dmem_read(g_dsp.r[sreg]);
dsp_op_write_reg(dreg, val); 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 // SRR @$D, $S
@ -209,7 +210,8 @@ void srrn(const UDSPInstruction& opc)
u16 val = dsp_op_read_reg(sreg); u16 val = dsp_op_read_reg(sreg);
dsp_dmem_write(g_dsp.r[dreg], val); 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 // 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[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 } // namespace

View File

@ -67,7 +67,8 @@ void ir(const UDSPInstruction& opc) {
void nr(const UDSPInstruction& opc) { void nr(const UDSPInstruction& opc) {
u8 reg = opc.hex & 0x3; 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 // MV $axD, $acS.l
@ -106,7 +107,8 @@ void sn(const UDSPInstruction& opc)
dsp_dmem_write(g_dsp.r[dreg], g_dsp.r[sreg]); 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 // L axD.l, @$S
@ -136,7 +138,8 @@ void ln(const UDSPInstruction& opc)
u16 val = dsp_dmem_read(g_dsp.r[sreg]); u16 val = dsp_dmem_read(g_dsp.r[sreg]);
g_dsp.r[dreg] = val; 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 // Not in duddie's doc
@ -220,7 +223,8 @@ void dsp_op_ext_r_epi(const UDSPInstruction& opc)
break; break;
case 0x03: // NR 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; break;
} }
} }
@ -244,7 +248,8 @@ void dsp_op_ext_s(const UDSPInstruction& opc)
if (opc.hex & 0x04) // SN 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 else
{ {
@ -263,7 +268,8 @@ void dsp_op_ext_l(const UDSPInstruction& opc)
if (opc.hex & 0x04) // LN/LSMN 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 else
{ {
@ -276,14 +282,16 @@ void dsp_op_ext_ls_pro(const UDSPInstruction& opc)
{ {
u8 areg = (opc.hex & 0x1) + 0x1e; u8 areg = (opc.hex & 0x1) + 0x1e;
dsp_dmem_write(g_dsp.r[0x03], g_dsp.r[areg]); dsp_dmem_write(g_dsp.r[0x03], g_dsp.r[areg]);
u8 sreg = 0x03;
if (opc.hex & 0x8) // LSM/LSMN 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 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 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 else // LS
{ {
@ -312,7 +321,8 @@ void dsp_op_ext_sl_pro(const UDSPInstruction& opc)
if (opc.hex & 0x4) // SLN/SLNM 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 else // SL
{ {
@ -326,14 +336,16 @@ void dsp_op_ext_sl_epi(const UDSPInstruction& opc)
u8 dreg = ((opc.hex >> 4) & 0x3) + 0x18; u8 dreg = ((opc.hex >> 4) & 0x3) + 0x18;
u16 val = dsp_dmem_read(g_dsp.r[0x03]); u16 val = dsp_dmem_read(g_dsp.r[0x03]);
dsp_op_write_reg(dreg, val); dsp_op_write_reg(dreg, val);
u8 sreg = 0x03;
if (opc.hex & 0x8) // SLM/SLMN 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 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 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 else
{ {
@ -357,7 +370,8 @@ void dsp_op_ext_ld(const UDSPInstruction& opc)
if (opc.hex & 0x08) // M 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 else
{ {