summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXTra.KrazzY <XTra.KrazzY@gmail.com>2009-04-01 22:03:52 +0000
committerXTra.KrazzY <XTra.KrazzY@gmail.com>2009-04-01 22:03:52 +0000
commit9915533c3cc8a99de1ff1d3d89ae0301e1a44970 (patch)
treed016450e80cdd3df7b600c3adb2082a1a3a7a46b /Source
parent59c44bd13bcf6a0fe3a66cf39691c4ac2be6d6e6 (diff)
LLE-WIP: Indentation and small fixes to coding style.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2821 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.cpp2002
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.h201
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPJit.h3
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.cpp4
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.h10
-rw-r--r--Source/Plugins/Plugin_DSP_LLE-testing/Src/disassemble.cpp10
6 files changed, 1116 insertions, 1114 deletions
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.cpp b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.cpp
index 79f0f84000..2445757273 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.cpp
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.cpp
@@ -28,1346 +28,1346 @@
namespace DSPInterpreter {
- // HELPER FUNCTIONS
+// HELPER FUNCTIONS
- void Update_SR_Register(s64 _Value)
- {
- g_dsp.r[R_SR] &= ~SR_CMP_MASK;
-
- if (_Value < 0)
- {
- g_dsp.r[R_SR] |= 0x8;
- }
-
- if (_Value == 0)
- {
- g_dsp.r[R_SR] |= 0x4;
- }
+void Update_SR_Register(s64 _Value)
+{
+ g_dsp.r[R_SR] &= ~SR_CMP_MASK;
- // logic
- if ((_Value >> 62) == 0)
- {
- g_dsp.r[R_SR] |= 0x20;
- }
+ if (_Value < 0)
+ {
+ g_dsp.r[R_SR] |= 0x8;
}
- void Update_SR_Register(s16 _Value)
+ if (_Value == 0)
{
- g_dsp.r[R_SR] &= ~SR_CMP_MASK;
+ g_dsp.r[R_SR] |= 0x4;
+ }
- if (_Value < 0)
- {
- g_dsp.r[R_SR] |= 0x8;
- }
+ // logic
+ if ((_Value >> 62) == 0)
+ {
+ g_dsp.r[R_SR] |= 0x20;
+ }
+}
- if (_Value == 0)
- {
- g_dsp.r[R_SR] |= 0x4;
- }
+void Update_SR_Register(s16 _Value)
+{
+ g_dsp.r[R_SR] &= ~SR_CMP_MASK;
- // logic
- if ((_Value >> 14) == 0)
- {
- g_dsp.r[R_SR] |= 0x20;
- }
+ if (_Value < 0)
+ {
+ g_dsp.r[R_SR] |= 0x8;
}
- s8 GetMultiplyModifier()
+ if (_Value == 0)
{
- if (g_dsp.r[R_SR] & (1 << 13))
- {
- return(1);
- }
+ g_dsp.r[R_SR] |= 0x4;
+ }
- return(2);
+ // logic
+ if ((_Value >> 14) == 0)
+ {
+ g_dsp.r[R_SR] |= 0x20;
}
+}
- bool CheckCondition(u8 _Condition)
+s8 GetMultiplyModifier()
+{
+ if (g_dsp.r[R_SR] & (1 << 13))
{
- bool taken = false;
+ return(1);
+ }
- switch (_Condition & 0xf)
- {
- case 0x0:
+ return(2);
+}
- if ((!(g_dsp.r[R_SR] & 0x02)) && (!(g_dsp.r[R_SR] & 0x08)))
- {
- taken = true;
- }
+bool CheckCondition(u8 _Condition)
+{
+ bool taken = false;
- break;
+ switch (_Condition & 0xf)
+ {
+ case 0x0:
- case 0x3:
+ if ((!(g_dsp.r[R_SR] & 0x02)) && (!(g_dsp.r[R_SR] & 0x08)))
+ {
+ taken = true;
+ }
- if ((g_dsp.r[R_SR] & 0x02) || (g_dsp.r[R_SR] & 0x04) || (g_dsp.r[R_SR] & 0x08))
- {
- taken = true;
- }
+ break;
- break;
+ case 0x3:
- // old from duddie
- case 0x1: // seems okay
+ if ((g_dsp.r[R_SR] & 0x02) || (g_dsp.r[R_SR] & 0x04) || (g_dsp.r[R_SR] & 0x08))
+ {
+ taken = true;
+ }
- if ((!(g_dsp.r[R_SR] & 0x02)) && (g_dsp.r[R_SR] & 0x08))
- {
- taken = true;
- }
+ break;
- break;
+ // old from duddie
+ case 0x1: // seems okay
- case 0x2:
+ if ((!(g_dsp.r[R_SR] & 0x02)) && (g_dsp.r[R_SR] & 0x08))
+ {
+ taken = true;
+ }
- if (!(g_dsp.r[R_SR] & 0x08))
- {
- taken = true;
- }
+ break;
- break;
+ case 0x2:
- case 0x4:
+ if (!(g_dsp.r[R_SR] & 0x08))
+ {
+ taken = true;
+ }
- if (!(g_dsp.r[R_SR] & 0x04))
- {
- taken = true;
- }
+ break;
- break;
+ case 0x4:
- case 0x5:
+ if (!(g_dsp.r[R_SR] & 0x04))
+ {
+ taken = true;
+ }
- if (g_dsp.r[R_SR] & 0x04)
- {
- taken = true;
- }
+ break;
- break;
+ case 0x5:
- case 0xc:
+ if (g_dsp.r[R_SR] & 0x04)
+ {
+ taken = true;
+ }
- if (!(g_dsp.r[R_SR] & 0x40))
- {
- taken = true;
- }
+ break;
- break;
+ case 0xc:
- case 0xd:
+ if (!(g_dsp.r[R_SR] & 0x40))
+ {
+ taken = true;
+ }
- if (g_dsp.r[R_SR] & 0x40)
- {
- taken = true;
- }
+ break;
- break;
+ case 0xd:
- case 0xf:
+ if (g_dsp.r[R_SR] & 0x40)
+ {
taken = true;
- break;
-
- default:
- // DEBUG_LOG(DSPHLE, "Unknown condition check: 0x%04x\n", _Condition & 0xf);
- break;
}
- return(taken);
- }
+ break;
- // END OF HELPER FUNCTIONS
+ case 0xf:
+ taken = true;
+ break;
- void unknown(const UDSPInstruction& opc)
- {
- _assert_msg_(MASTER_LOG, !g_dsp.exception_in_progress_hack, "assert while exception");
- ERROR_LOG(DSPHLE, "unknown opcode %d", opc.hex);
- g_dsp.pc = g_dsp.err_pc;
+ default:
+ // DEBUG_LOG(DSPHLE, "Unknown condition check: 0x%04x\n", _Condition & 0xf);
+ break;
}
- void call(const UDSPInstruction& opc)
- {
- u16 dest = dsp_fetch_code();
+ return(taken);
+}
- if (CheckCondition(opc.hex & 0xf))
- {
- dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
- g_dsp.pc = dest;
- }
- }
+// END OF HELPER FUNCTIONS
- void ifcc(const UDSPInstruction& opc)
- {
- if (!CheckCondition(opc.hex & 0xf))
- {
- dsp_fetch_code(); // skip the next opcode
- }
- }
+void unknown(const UDSPInstruction& opc)
+{
+ _assert_msg_(MASTER_LOG, !g_dsp.exception_in_progress_hack, "assert while exception");
+ ERROR_LOG(DSPHLE, "unknown opcode %d", opc.hex);
+ g_dsp.pc = g_dsp.err_pc;
+}
- void jcc(const UDSPInstruction& opc)
- {
- u16 dest = dsp_fetch_code();
+void call(const UDSPInstruction& opc)
+{
+ u16 dest = dsp_fetch_code();
- if (CheckCondition(opc.hex & 0xf))
- {
- g_dsp.pc = dest;
- }
+ if (CheckCondition(opc.hex & 0xf))
+ {
+ dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
+ g_dsp.pc = dest;
}
+}
- // FIXME inside
- void jmpa(const UDSPInstruction& opc)
+void ifcc(const UDSPInstruction& opc)
+{
+ if (!CheckCondition(opc.hex & 0xf))
{
- u8 reg;
- u16 addr;
+ dsp_fetch_code(); // skip the next opcode
+ }
+}
- if ((opc.hex & 0xf) != 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp jmpa opcode");
- }
+void jcc(const UDSPInstruction& opc)
+{
+ u16 dest = dsp_fetch_code();
- reg = (opc.hex >> 5) & 0x7;
- addr = dsp_op_read_reg(reg);
+ if (CheckCondition(opc.hex & 0xf))
+ {
+ g_dsp.pc = dest;
+ }
+}
- if (opc.hex & 0x0010)
- {
- // CALLA
- dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
- }
+// FIXME inside
+void jmpa(const UDSPInstruction& opc)
+{
+ u8 reg;
+ u16 addr;
- g_dsp.pc = addr;
+ if ((opc.hex & 0xf) != 0xf)
+ {
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp jmpa opcode");
}
- void ret(const UDSPInstruction& opc)
+ reg = (opc.hex >> 5) & 0x7;
+ addr = dsp_op_read_reg(reg);
+
+ if (opc.hex & 0x0010)
{
- if (CheckCondition(opc.hex & 0xf))
- {
- g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C);
- }
+ // CALLA
+ dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
}
- // FIXME inside
- void rti(const UDSPInstruction& opc)
- {
- if ((opc.hex & 0xf) != 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp rti opcode");
- }
+ g_dsp.pc = addr;
+}
- g_dsp.r[R_SR] = dsp_reg_load_stack(DSP_STACK_D);
+void ret(const UDSPInstruction& opc)
+{
+ if (CheckCondition(opc.hex & 0xf))
+ {
g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C);
-
- g_dsp.exception_in_progress_hack = false;
}
+}
- void halt(const UDSPInstruction& opc)
+// FIXME inside
+void rti(const UDSPInstruction& opc)
+{
+ if ((opc.hex & 0xf) != 0xf)
{
- g_dsp.cr |= 0x4;
- g_dsp.pc = g_dsp.err_pc;
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp rti opcode");
}
- void loop(const UDSPInstruction& opc)
- {
- u16 reg = opc.hex & 0x1f;
- u16 cnt = g_dsp.r[reg];
- u16 loop_pc = g_dsp.pc;
+ g_dsp.r[R_SR] = dsp_reg_load_stack(DSP_STACK_D);
+ g_dsp.pc = dsp_reg_load_stack(DSP_STACK_C);
- while (cnt--)
- {
- gdsp_loop_step();
- g_dsp.pc = loop_pc;
- }
+ g_dsp.exception_in_progress_hack = false;
+}
- g_dsp.pc = loop_pc + 1;
- }
+void halt(const UDSPInstruction& opc)
+{
+ g_dsp.cr |= 0x4;
+ g_dsp.pc = g_dsp.err_pc;
+}
- void loopi(const UDSPInstruction& opc)
+void loop(const UDSPInstruction& opc)
+{
+ u16 reg = opc.hex & 0x1f;
+ u16 cnt = g_dsp.r[reg];
+ u16 loop_pc = g_dsp.pc;
+
+ while (cnt--)
{
- u16 cnt = opc.hex & 0xff;
- u16 loop_pc = g_dsp.pc;
+ gdsp_loop_step();
+ g_dsp.pc = loop_pc;
+ }
- while (cnt--)
- {
- gdsp_loop_step();
- g_dsp.pc = loop_pc;
- }
+ g_dsp.pc = loop_pc + 1;
+}
- g_dsp.pc = loop_pc + 1;
- }
+void loopi(const UDSPInstruction& opc)
+{
+ u16 cnt = opc.hex & 0xff;
+ u16 loop_pc = g_dsp.pc;
- void bloop(const UDSPInstruction& opc)
+ while (cnt--)
{
- u16 reg = opc.hex & 0x1f;
- u16 cnt = g_dsp.r[reg];
- u16 loop_pc = dsp_fetch_code();
-
- if (cnt)
- {
- dsp_reg_store_stack(0, g_dsp.pc);
- dsp_reg_store_stack(2, loop_pc);
- dsp_reg_store_stack(3, cnt);
- }
- else
- {
- g_dsp.pc = loop_pc + 1;
- }
+ gdsp_loop_step();
+ g_dsp.pc = loop_pc;
}
- void bloopi(const UDSPInstruction& opc)
- {
- u16 cnt = opc.hex & 0xff;
- u16 loop_pc = dsp_fetch_code();
+ g_dsp.pc = loop_pc + 1;
+}
- if (cnt)
- {
- dsp_reg_store_stack(0, g_dsp.pc);
- dsp_reg_store_stack(2, loop_pc);
- dsp_reg_store_stack(3, cnt);
- }
- else
- {
- g_dsp.pc = loop_pc + 1;
- }
+void bloop(const UDSPInstruction& opc)
+{
+ u16 reg = opc.hex & 0x1f;
+ u16 cnt = g_dsp.r[reg];
+ u16 loop_pc = dsp_fetch_code();
+
+ if (cnt)
+ {
+ dsp_reg_store_stack(0, g_dsp.pc);
+ dsp_reg_store_stack(2, loop_pc);
+ dsp_reg_store_stack(3, cnt);
}
+ else
+ {
+ g_dsp.pc = loop_pc + 1;
+ }
+}
- //-------------------------------------------------------------
+void bloopi(const UDSPInstruction& opc)
+{
+ u16 cnt = opc.hex & 0xff;
+ u16 loop_pc = dsp_fetch_code();
- void mrr(const UDSPInstruction& opc)
+ if (cnt)
{
- u8 sreg = opc.hex & 0x1f;
- u8 dreg = (opc.hex >> 5) & 0x1f;
-
- u16 val = dsp_op_read_reg(sreg);
- dsp_op_write_reg(dreg, val);
+ dsp_reg_store_stack(0, g_dsp.pc);
+ dsp_reg_store_stack(2, loop_pc);
+ dsp_reg_store_stack(3, cnt);
}
-
- void lrr(const UDSPInstruction& opc)
+ else
{
- u8 sreg = (opc.hex >> 5) & 0x3;
- u8 dreg = opc.hex & 0x1f;
+ g_dsp.pc = loop_pc + 1;
+ }
+}
- u16 val = dsp_dmem_read(g_dsp.r[sreg]);
- dsp_op_write_reg(dreg, val);
+//-------------------------------------------------------------
- // post processing of source reg
- switch ((opc.hex >> 7) & 0x3)
- {
- case 0x0: // LRR
- break;
+void mrr(const UDSPInstruction& opc)
+{
+ u8 sreg = opc.hex & 0x1f;
+ u8 dreg = (opc.hex >> 5) & 0x1f;
- case 0x1: // LRRD
- g_dsp.r[sreg]--;
- break;
+ u16 val = dsp_op_read_reg(sreg);
+ dsp_op_write_reg(dreg, val);
+}
- case 0x2: // LRRI
- g_dsp.r[sreg]++;
- break;
+void lrr(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 5) & 0x3;
+ u8 dreg = opc.hex & 0x1f;
- case 0x3:
- g_dsp.r[sreg] += g_dsp.r[sreg + 4];
- break;
- }
- }
+ u16 val = dsp_dmem_read(g_dsp.r[sreg]);
+ dsp_op_write_reg(dreg, val);
- void srr(const UDSPInstruction& opc)
+ // post processing of source reg
+ switch ((opc.hex >> 7) & 0x3)
{
- u8 dreg = (opc.hex >> 5) & 0x3;
- u8 sreg = opc.hex & 0x1f;
+ case 0x0: // LRR
+ break;
- u16 val = dsp_op_read_reg(sreg);
- dsp_dmem_write(g_dsp.r[dreg], val);
+ case 0x1: // LRRD
+ g_dsp.r[sreg]--;
+ break;
- // post processing of dest reg
- switch ((opc.hex >> 7) & 0x3)
- {
- case 0x0: // SRR
- break;
-
- case 0x1: // SRRD
- g_dsp.r[dreg]--;
- break;
-
- case 0x2: // SRRI
- g_dsp.r[dreg]++;
- break;
+ case 0x2: // LRRI
+ g_dsp.r[sreg]++;
+ break;
- case 0x3: // SRRX
- g_dsp.r[dreg] += g_dsp.r[dreg + 4];
- break;
- }
+ case 0x3:
+ g_dsp.r[sreg] += g_dsp.r[sreg + 4];
+ break;
}
+}
- // FIXME inside
- void ilrr(const UDSPInstruction& opc)
- {
- u16 reg = opc.hex & 0x3;
- u16 dreg = 0x1e + ((opc.hex >> 8) & 1);
+void srr(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 5) & 0x3;
+ u8 sreg = opc.hex & 0x1f;
- // always to acc0 ?
- g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
+ u16 val = dsp_op_read_reg(sreg);
+ dsp_dmem_write(g_dsp.r[dreg], val);
- switch ((opc.hex >> 2) & 0x3)
- {
- case 0x0: // no change
- break;
+ // post processing of dest reg
+ switch ((opc.hex >> 7) & 0x3)
+ {
+ case 0x0: // SRR
+ break;
- case 0x1: // post decrement
- g_dsp.r[reg]--;
- break;
+ case 0x1: // SRRD
+ g_dsp.r[dreg]--;
+ break;
- case 0x2: // post increment
- g_dsp.r[reg]++;
- break;
+ case 0x2: // SRRI
+ g_dsp.r[dreg]++;
+ break;
- default:
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp_opc.hex_ilrr");
- }
+ case 0x3: // SRRX
+ g_dsp.r[dreg] += g_dsp.r[dreg + 4];
+ break;
}
+}
+// FIXME inside
+void ilrr(const UDSPInstruction& opc)
+{
+ u16 reg = opc.hex & 0x3;
+ u16 dreg = 0x1e + ((opc.hex >> 8) & 1);
- void lri(const UDSPInstruction& opc)
- {
- u8 reg = opc.hex & DSP_REG_MASK;
- u16 imm = dsp_fetch_code();
- dsp_op_write_reg(reg, imm);
- }
+ // always to acc0 ?
+ g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
- void lris(const UDSPInstruction& opc)
+ switch ((opc.hex >> 2) & 0x3)
{
- u8 reg = ((opc.hex >> 8) & 0x7) + 0x18;
- u16 imm = (s8)opc.hex;
- dsp_op_write_reg(reg, imm);
+ case 0x0: // no change
+ break;
+
+ case 0x1: // post decrement
+ g_dsp.r[reg]--;
+ break;
+
+ case 0x2: // post increment
+ g_dsp.r[reg]++;
+ break;
+
+ default:
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp_opc.hex_ilrr");
}
+}
- void lr(const UDSPInstruction& opc)
- {
- u8 reg = opc.hex & DSP_REG_MASK;
- u16 addr = dsp_fetch_code();
- u16 val = dsp_dmem_read(addr);
- dsp_op_write_reg(reg, val);
- }
- void sr(const UDSPInstruction& opc)
- {
- u8 reg = opc.hex & DSP_REG_MASK;
- u16 addr = dsp_fetch_code();
- u16 val = dsp_op_read_reg(reg);
- dsp_dmem_write(addr, val);
- }
+void lri(const UDSPInstruction& opc)
+{
+ u8 reg = opc.hex & DSP_REG_MASK;
+ u16 imm = dsp_fetch_code();
+ dsp_op_write_reg(reg, imm);
+}
+
+void lris(const UDSPInstruction& opc)
+{
+ u8 reg = ((opc.hex >> 8) & 0x7) + 0x18;
+ u16 imm = (s8)opc.hex;
+ dsp_op_write_reg(reg, imm);
+}
+
+void lr(const UDSPInstruction& opc)
+{
+ u8 reg = opc.hex & DSP_REG_MASK;
+ u16 addr = dsp_fetch_code();
+ u16 val = dsp_dmem_read(addr);
+ dsp_op_write_reg(reg, val);
+}
+
+void sr(const UDSPInstruction& opc)
+{
+ u8 reg = opc.hex & DSP_REG_MASK;
+ u16 addr = dsp_fetch_code();
+ u16 val = dsp_op_read_reg(reg);
+ dsp_dmem_write(addr, val);
+}
+
+void si(const UDSPInstruction& opc)
+{
+ u16 addr = (s8)opc.hex;
+ u16 imm = dsp_fetch_code();
+ dsp_dmem_write(addr, imm);
+}
- void si(const UDSPInstruction& opc)
- {
- u16 addr = (s8)opc.hex;
- u16 imm = dsp_fetch_code();
- dsp_dmem_write(addr, imm);
- }
+void tstaxh(const UDSPInstruction& opc)
+{
+ u8 reg = (opc.hex >> 8) & 0x1;
+ s16 val = dsp_get_ax_h(reg);
+
+ Update_SR_Register(val);
+}
+
+void clr(const UDSPInstruction& opc)
+{
+ u8 reg = (opc.hex >> 11) & 0x1;
+
+ dsp_set_long_acc(reg, 0);
+
+ Update_SR_Register((s64)0);
+}
+
+void clrp(const UDSPInstruction& opc)
+{
+ g_dsp.r[0x14] = 0x0000;
+ g_dsp.r[0x15] = 0xfff0;
+ g_dsp.r[0x16] = 0x00ff;
+ g_dsp.r[0x17] = 0x0010;
+}
+
+void mulc(const UDSPInstruction& opc)
+{
+ // math new prod
+ u8 sreg = (opc.hex >> 11) & 0x1;
+ u8 treg = (opc.hex >> 12) & 0x1;
+
+ s64 prod = dsp_get_acc_m(sreg) * dsp_get_ax_h(treg) * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+
+ Update_SR_Register(prod);
+}
+
+// TODO: Implement
+void mulcmvz(const UDSPInstruction& opc)
+{
+ ERROR_LOG(DSPHLE, "dsp_opc.hex_mulcmvz ni");
+}
- void tstaxh(const UDSPInstruction& opc)
- {
- u8 reg = (opc.hex >> 8) & 0x1;
- s16 val = dsp_get_ax_h(reg);
+// TODO: Implement
+void mulcmv(const UDSPInstruction& opc)
+{
+ ERROR_LOG(DSPHLE, "dsp_opc.hex_mulcmv ni");
+}
- Update_SR_Register(val);
- }
+void cmpar(const UDSPInstruction& opc)
+{
+ u8 rreg = ((opc.hex >> 12) & 0x1) + 0x1a;
+ u8 areg = (opc.hex >> 11) & 0x1;
- void clr(const UDSPInstruction& opc)
- {
- u8 reg = (opc.hex >> 11) & 0x1;
+ // we compare
+ s64 rr = (s16)g_dsp.r[rreg];
+ rr <<= 16;
- dsp_set_long_acc(reg, 0);
+ s64 ar = dsp_get_long_acc(areg);
- Update_SR_Register((s64)0);
- }
+ Update_SR_Register(ar - rr);
+}
- void clrp(const UDSPInstruction& opc)
- {
- g_dsp.r[0x14] = 0x0000;
- g_dsp.r[0x15] = 0xfff0;
- g_dsp.r[0x16] = 0x00ff;
- g_dsp.r[0x17] = 0x0010;
- }
+void cmp(const UDSPInstruction& opc)
+{
+ s64 acc0 = dsp_get_long_acc(0);
+ s64 acc1 = dsp_get_long_acc(1);
- void mulc(const UDSPInstruction& opc)
- {
- // math new prod
- u8 sreg = (opc.hex >> 11) & 0x1;
- u8 treg = (opc.hex >> 12) & 0x1;
+ Update_SR_Register(acc0 - acc1);
+}
- s64 prod = dsp_get_acc_m(sreg) * dsp_get_ax_h(treg) * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+void tsta(const UDSPInstruction& opc)
+{
+ u8 reg = (opc.hex >> 11) & 0x1;
+ s64 acc = dsp_get_long_acc(reg);
- Update_SR_Register(prod);
- }
+ Update_SR_Register(acc);
+}
- // TODO: Implement
- void mulcmvz(const UDSPInstruction& opc)
- {
- ERROR_LOG(DSPHLE, "dsp_opc.hex_mulcmvz ni");
- }
+void addaxl(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 dreg = (opc.hex >> 8) & 0x1;
- // TODO: Implement
- void mulcmv(const UDSPInstruction& opc)
- {
- ERROR_LOG(DSPHLE, "dsp_opc.hex_mulcmv ni");
- }
+ s64 acc = dsp_get_long_acc(dreg);
+ s64 acx = dsp_get_ax_l(sreg);
- void cmpar(const UDSPInstruction& opc)
- {
- u8 rreg = ((opc.hex >> 12) & 0x1) + 0x1a;
- u8 areg = (opc.hex >> 11) & 0x1;
+ acc += acx;
- // we compare
- s64 rr = (s16)g_dsp.r[rreg];
- rr <<= 16;
+ dsp_set_long_acc(dreg, acc);
- s64 ar = dsp_get_long_acc(areg);
+ Update_SR_Register(acc);
+}
- Update_SR_Register(ar - rr);
- }
+void addarn(const UDSPInstruction& opc)
+{
+ u8 dreg = opc.hex & 0x3;
+ u8 sreg = (opc.hex >> 2) & 0x3;
- void cmp(const UDSPInstruction& opc)
- {
- s64 acc0 = dsp_get_long_acc(0);
- s64 acc1 = dsp_get_long_acc(1);
+ g_dsp.r[dreg] += (s16)g_dsp.r[0x04 + sreg];
+}
- Update_SR_Register(acc0 - acc1);
- }
+void mulcac(const UDSPInstruction& opc)
+{
+ s64 TempProd = dsp_get_long_prod();
- void tsta(const UDSPInstruction& opc)
- {
- u8 reg = (opc.hex >> 11) & 0x1;
- s64 acc = dsp_get_long_acc(reg);
+ // update prod
+ u8 sreg = (opc.hex >> 12) & 0x1;
+ s64 Prod = (s64)dsp_get_acc_m(sreg) * (s64)dsp_get_acc_h(sreg) * GetMultiplyModifier();
+ dsp_set_long_prod(Prod);
- Update_SR_Register(acc);
- }
+ // update acc
+ u8 rreg = (opc.hex >> 8) & 0x1;
+ dsp_set_long_acc(rreg, TempProd);
+}
- void addaxl(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 dreg = (opc.hex >> 8) & 0x1;
+void movr(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
+ u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
- s64 acc = dsp_get_long_acc(dreg);
- s64 acx = dsp_get_ax_l(sreg);
+ s64 acc = (s16)g_dsp.r[sreg];
+ acc <<= 16;
+ acc &= ~0xffff;
- acc += acx;
+ dsp_set_long_acc(areg, acc);
- dsp_set_long_acc(dreg, acc);
+ Update_SR_Register(acc);
+}
- Update_SR_Register(acc);
- }
+void movax(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 dreg = (opc.hex >> 8) & 0x1;
- void addarn(const UDSPInstruction& opc)
- {
- u8 dreg = opc.hex & 0x3;
- u8 sreg = (opc.hex >> 2) & 0x3;
+ g_dsp.r[0x1c + dreg] = g_dsp.r[0x18 + sreg];
+ g_dsp.r[0x1e + dreg] = g_dsp.r[0x1a + sreg];
- g_dsp.r[dreg] += (s16)g_dsp.r[0x04 + sreg];
+ if ((s16)g_dsp.r[0x1a + sreg] < 0)
+ {
+ g_dsp.r[0x10 + dreg] = 0xffff;
}
-
- void mulcac(const UDSPInstruction& opc)
+ else
{
- s64 TempProd = dsp_get_long_prod();
-
- // update prod
- u8 sreg = (opc.hex >> 12) & 0x1;
- s64 Prod = (s64)dsp_get_acc_m(sreg) * (s64)dsp_get_acc_h(sreg) * GetMultiplyModifier();
- dsp_set_long_prod(Prod);
-
- // update acc
- u8 rreg = (opc.hex >> 8) & 0x1;
- dsp_set_long_acc(rreg, TempProd);
+ g_dsp.r[0x10 + dreg] = 0;
}
- void movr(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
- u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
+ tsta(UDSPInstruction(dreg << 11));
+}
- s64 acc = (s16)g_dsp.r[sreg];
- acc <<= 16;
- acc &= ~0xffff;
+void xorr(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 dreg = (opc.hex >> 8) & 0x1;
- dsp_set_long_acc(areg, acc);
+ g_dsp.r[0x1e + dreg] ^= g_dsp.r[0x1a + sreg];
- Update_SR_Register(acc);
- }
+ tsta(UDSPInstruction(dreg << 11));
+}
- void movax(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 dreg = (opc.hex >> 8) & 0x1;
+void andr(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 dreg = (opc.hex >> 8) & 0x1;
- g_dsp.r[0x1c + dreg] = g_dsp.r[0x18 + sreg];
- g_dsp.r[0x1e + dreg] = g_dsp.r[0x1a + sreg];
+ g_dsp.r[0x1e + dreg] &= g_dsp.r[0x1a + sreg];
- if ((s16)g_dsp.r[0x1a + sreg] < 0)
- {
- g_dsp.r[0x10 + dreg] = 0xffff;
- }
- else
- {
- g_dsp.r[0x10 + dreg] = 0;
- }
+ tsta(UDSPInstruction(dreg << 11));
+}
- tsta(UDSPInstruction(dreg << 11));
- }
+void orr(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 dreg = (opc.hex >> 8) & 0x1;
- void xorr(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 dreg = (opc.hex >> 8) & 0x1;
+ g_dsp.r[0x1e + dreg] |= g_dsp.r[0x1a + sreg];
- g_dsp.r[0x1e + dreg] ^= g_dsp.r[0x1a + sreg];
+ tsta(UDSPInstruction(dreg << 11));
+}
- tsta(UDSPInstruction(dreg << 11));
- }
+void andc(const UDSPInstruction& opc)
+{
+ u8 D = (opc.hex >> 8) & 0x1;
- void andr(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 dreg = (opc.hex >> 8) & 0x1;
+ u16 ac1 = dsp_get_acc_m(D);
+ u16 ac2 = dsp_get_acc_m(1 - D);
- g_dsp.r[0x1e + dreg] &= g_dsp.r[0x1a + sreg];
+ dsp_set_long_acc(D, ac1 & ac2);
- tsta(UDSPInstruction(dreg << 11));
+ if ((ac1 & ac2) == 0)
+ {
+ g_dsp.r[R_SR] |= 0x20;
}
-
- void orr(const UDSPInstruction& opc)
+ else
{
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 dreg = (opc.hex >> 8) & 0x1;
-
- g_dsp.r[0x1e + dreg] |= g_dsp.r[0x1a + sreg];
-
- tsta(UDSPInstruction(dreg << 11));
+ g_dsp.r[R_SR] &= ~0x20;
}
+}
- void andc(const UDSPInstruction& opc)
- {
- u8 D = (opc.hex >> 8) & 0x1;
- u16 ac1 = dsp_get_acc_m(D);
- u16 ac2 = dsp_get_acc_m(1 - D);
+//-------------------------------------------------------------
- dsp_set_long_acc(D, ac1 & ac2);
+// TODO: Implement
+void nx(const UDSPInstruction& opc)
+{}
- if ((ac1 & ac2) == 0)
- {
- g_dsp.r[R_SR] |= 0x20;
- }
- else
- {
- g_dsp.r[R_SR] &= ~0x20;
- }
- }
+// FIXME inside
+void andfc(const UDSPInstruction& opc)
+{
+ if (opc.hex & 0xf)
+ {
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp_opc.hex_andfc");
+ }
- //-------------------------------------------------------------
+ u8 reg = (opc.hex >> 8) & 0x1;
+ u16 imm = dsp_fetch_code();
+ u16 val = dsp_get_acc_m(reg);
- // TODO: Implement
- void nx(const UDSPInstruction& opc)
- {}
+ if ((val & imm) == imm)
+ {
+ g_dsp.r[R_SR] |= 0x40;
+ }
+ else
+ {
+ g_dsp.r[R_SR] &= ~0x40;
+ }
+}
+// FIXME inside
+void andf(const UDSPInstruction& opc)
+{
+ u8 reg;
+ u16 imm;
+ u16 val;
- // FIXME inside
- void andfc(const UDSPInstruction& opc)
+ if (opc.hex & 0xf)
{
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp_opc.hex_andfc");
- }
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp andf opcode");
+ }
- u8 reg = (opc.hex >> 8) & 0x1;
- u16 imm = dsp_fetch_code();
- u16 val = dsp_get_acc_m(reg);
+ reg = 0x1e + ((opc.hex >> 8) & 0x1);
+ imm = dsp_fetch_code();
+ val = g_dsp.r[reg];
- if ((val & imm) == imm)
- {
- g_dsp.r[R_SR] |= 0x40;
- }
- else
- {
- g_dsp.r[R_SR] &= ~0x40;
- }
+ if ((val & imm) == 0)
+ {
+ g_dsp.r[R_SR] |= 0x40;
}
+ else
+ {
+ g_dsp.r[R_SR] &= ~0x40;
+ }
+}
- // FIXME inside
- void andf(const UDSPInstruction& opc)
+// FIXME inside
+void subf(const UDSPInstruction& opc)
+{
+ if (opc.hex & 0xf)
{
- u8 reg;
- u16 imm;
- u16 val;
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp subf opcode");
+ }
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp andf opcode");
- }
+ u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
+ s64 imm = (s16)dsp_fetch_code();
- reg = 0x1e + ((opc.hex >> 8) & 0x1);
- imm = dsp_fetch_code();
- val = g_dsp.r[reg];
+ s64 val = (s16)g_dsp.r[reg];
+ s64 res = val - imm;
- if ((val & imm) == 0)
- {
- g_dsp.r[R_SR] |= 0x40;
- }
- else
- {
- g_dsp.r[R_SR] &= ~0x40;
- }
- }
-
- // FIXME inside
- void subf(const UDSPInstruction& opc)
+ Update_SR_Register(res);
+}
+
+// FIXME inside
+void xori(const UDSPInstruction& opc)
+{
+ if (opc.hex & 0xf)
{
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp subf opcode");
- }
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp xori opcode");
+ }
- u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
- s64 imm = (s16)dsp_fetch_code();
+ u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
+ u16 imm = dsp_fetch_code();
+ g_dsp.r[reg] ^= imm;
- s64 val = (s16)g_dsp.r[reg];
- s64 res = val - imm;
+ Update_SR_Register((s16)g_dsp.r[reg]);
+}
- Update_SR_Register(res);
+//FIXME inside
+void andi(const UDSPInstruction& opc)
+{
+ if (opc.hex & 0xf)
+ {
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp andi opcode");
}
- // FIXME inside
- void xori(const UDSPInstruction& opc)
- {
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp xori opcode");
- }
+ u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
+ u16 imm = dsp_fetch_code();
+ g_dsp.r[reg] &= imm;
- u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
- u16 imm = dsp_fetch_code();
- g_dsp.r[reg] ^= imm;
+ Update_SR_Register((s16)g_dsp.r[reg]);
+}
- Update_SR_Register((s16)g_dsp.r[reg]);
- }
- //FIXME inside
- void andi(const UDSPInstruction& opc)
+// F|RES: i am not sure if this shouldnt be the whole ACC
+//
+//FIXME inside
+void ori(const UDSPInstruction& opc)
+{
+ if (opc.hex & 0xf)
{
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp andi opcode");
- }
-
- u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
- u16 imm = dsp_fetch_code();
- g_dsp.r[reg] &= imm;
-
- Update_SR_Register((s16)g_dsp.r[reg]);
+ // FIXME: Implement
+ ERROR_LOG(DSPHLE, "dsp ori opcode");
+ return;
}
+ u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
+ u16 imm = dsp_fetch_code();
+ g_dsp.r[reg] |= imm;
- // F|RES: i am not sure if this shouldnt be the whole ACC
- //
- //FIXME inside
- void ori(const UDSPInstruction& opc)
- {
- if (opc.hex & 0xf)
- {
- // FIXME: Implement
- ERROR_LOG(DSPHLE, "dsp ori opcode");
- return;
- }
+ Update_SR_Register((s16)g_dsp.r[reg]);
+}
- u8 reg = 0x1e + ((opc.hex >> 8) & 0x1);
- u16 imm = dsp_fetch_code();
- g_dsp.r[reg] |= imm;
+//-------------------------------------------------------------
- Update_SR_Register((s16)g_dsp.r[reg]);
- }
+void add(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
+ s64 acc0 = dsp_get_long_acc(0);
+ s64 acc1 = dsp_get_long_acc(1);
- //-------------------------------------------------------------
+ s64 res = acc0 + acc1;
- void add(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
- s64 acc0 = dsp_get_long_acc(0);
- s64 acc1 = dsp_get_long_acc(1);
+ dsp_set_long_acc(areg, res);
- s64 res = acc0 + acc1;
+ Update_SR_Register(res);
+}
- dsp_set_long_acc(areg, res);
+//-------------------------------------------------------------
- Update_SR_Register(res);
- }
+void addp(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x1;
+ s64 acc = dsp_get_long_acc(dreg);
+ acc = acc + dsp_get_long_prod();
+ dsp_set_long_acc(dreg, acc);
- //-------------------------------------------------------------
+ Update_SR_Register(acc);
+}
- void addp(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x1;
- s64 acc = dsp_get_long_acc(dreg);
- acc = acc + dsp_get_long_prod();
- dsp_set_long_acc(dreg, acc);
+void cmpis(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(areg);
+ s64 val = (s8)opc.hex;
+ val <<= 16;
- void cmpis(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ s64 res = acc - val;
- s64 acc = dsp_get_long_acc(areg);
- s64 val = (s8)opc.hex;
- val <<= 16;
+ Update_SR_Register(res);
+}
- s64 res = acc - val;
+void addpaxz(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x1;
+ u8 sreg = (opc.hex >> 9) & 0x1;
- Update_SR_Register(res);
- }
+ s64 prod = dsp_get_long_prod() & ~0x0ffff;
+ s64 ax_h = dsp_get_long_acx(sreg);
+ s64 acc = (prod + ax_h) & ~0x0ffff;
- void addpaxz(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x1;
- u8 sreg = (opc.hex >> 9) & 0x1;
+ dsp_set_long_acc(dreg, acc);
- s64 prod = dsp_get_long_prod() & ~0x0ffff;
- s64 ax_h = dsp_get_long_acx(sreg);
- s64 acc = (prod + ax_h) & ~0x0ffff;
+ Update_SR_Register(acc);
+}
- dsp_set_long_acc(dreg, acc);
+void movpz(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x01;
- Update_SR_Register(acc);
- }
+ // overwrite acc and clear low part
+ s64 prod = dsp_get_long_prod();
+ s64 acc = prod & ~0xffff;
+ dsp_set_long_acc(dreg, acc);
- void movpz(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x01;
+ Update_SR_Register(acc);
+}
- // overwrite acc and clear low part
- s64 prod = dsp_get_long_prod();
- s64 acc = prod & ~0xffff;
- dsp_set_long_acc(dreg, acc);
+void decm(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x01;
- Update_SR_Register(acc);
- }
+ s64 sub = 0x10000;
+ s64 acc = dsp_get_long_acc(dreg);
+ acc -= sub;
+ dsp_set_long_acc(dreg, acc);
- void decm(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x01;
+ Update_SR_Register(acc);
+}
- s64 sub = 0x10000;
- s64 acc = dsp_get_long_acc(dreg);
- acc -= sub;
- dsp_set_long_acc(dreg, acc);
+void dec(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x01;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(dreg) - 1;
+ dsp_set_long_acc(dreg, acc);
- void dec(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x01;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(dreg) - 1;
- dsp_set_long_acc(dreg, acc);
+void incm(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 sub = 0x10000;
+ s64 acc = dsp_get_long_acc(dreg);
+ acc += sub;
+ dsp_set_long_acc(dreg, acc);
- void incm(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 sub = 0x10000;
- s64 acc = dsp_get_long_acc(dreg);
- acc += sub;
- dsp_set_long_acc(dreg, acc);
+void inc(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(dreg);
+ acc++;
+ dsp_set_long_acc(dreg, acc);
- void inc(const UDSPInstruction& opc)
- {
- u8 dreg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(dreg);
- acc++;
- dsp_set_long_acc(dreg, acc);
+void neg(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(areg);
+ acc = 0 - acc;
+ dsp_set_long_acc(areg, acc);
- void neg(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc = 0 - acc;
- dsp_set_long_acc(areg, acc);
+// TODO: Implement
+void movnp(const UDSPInstruction& opc)
+{
+ // UNIMPLEMENTED
+ ERROR_LOG(DSPHLE, "dsp_opc.hex_movnp\n");
+}
- Update_SR_Register(acc);
- }
+void addax(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
+ u8 sreg = (opc.hex >> 9) & 0x1;
- // TODO: Implement
- void movnp(const UDSPInstruction& opc)
- {
- // UNIMPLEMENTED
- ERROR_LOG(DSPHLE, "dsp_opc.hex_movnp\n");
- }
+ s64 ax = dsp_get_long_acx(sreg);
+ s64 acc = dsp_get_long_acc(areg);
+ acc += ax;
+ dsp_set_long_acc(areg, acc);
- void addax(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
- u8 sreg = (opc.hex >> 9) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 ax = dsp_get_long_acx(sreg);
- s64 acc = dsp_get_long_acc(areg);
- acc += ax;
- dsp_set_long_acc(areg, acc);
+void addr(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
+ u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
- Update_SR_Register(acc);
- }
+ s64 ax = (s16)g_dsp.r[sreg];
+ ax <<= 16;
- void addr(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
- u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
+ s64 acc = dsp_get_long_acc(areg);
+ acc += ax;
+ dsp_set_long_acc(areg, acc);
- s64 ax = (s16)g_dsp.r[sreg];
- ax <<= 16;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc += ax;
- dsp_set_long_acc(areg, acc);
+void subr(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
+ u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
- Update_SR_Register(acc);
- }
+ s64 ax = (s16)g_dsp.r[sreg];
+ ax <<= 16;
- void subr(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
- u8 sreg = ((opc.hex >> 9) & 0x3) + 0x18;
+ s64 acc = dsp_get_long_acc(areg);
+ acc -= ax;
+ dsp_set_long_acc(areg, acc);
- s64 ax = (s16)g_dsp.r[sreg];
- ax <<= 16;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc -= ax;
- dsp_set_long_acc(areg, acc);
+void subax(const UDSPInstruction& opc)
+{
+ int regD = (opc.hex >> 8) & 0x1;
+ int regT = (opc.hex >> 9) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 Acc = dsp_get_long_acc(regD) - dsp_get_long_acx(regT);
- void subax(const UDSPInstruction& opc)
- {
- int regD = (opc.hex >> 8) & 0x1;
- int regT = (opc.hex >> 9) & 0x1;
+ dsp_set_long_acc(regD, Acc);
+ Update_SR_Register(Acc);
+}
- s64 Acc = dsp_get_long_acc(regD) - dsp_get_long_acx(regT);
+void addis(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- dsp_set_long_acc(regD, Acc);
- Update_SR_Register(Acc);
- }
+ s64 Imm = (s8)opc.hex;
+ Imm <<= 16;
+ s64 acc = dsp_get_long_acc(areg);
+ acc += Imm;
+ dsp_set_long_acc(areg, acc);
- void addis(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 Imm = (s8)opc.hex;
- Imm <<= 16;
- s64 acc = dsp_get_long_acc(areg);
- acc += Imm;
- dsp_set_long_acc(areg, acc);
+void addi(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 sub = (s16)dsp_fetch_code();
+ sub <<= 16;
+ s64 acc = dsp_get_long_acc(areg);
+ acc += sub;
+ dsp_set_long_acc(areg, acc);
- void addi(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 sub = (s16)dsp_fetch_code();
- sub <<= 16;
- s64 acc = dsp_get_long_acc(areg);
- acc += sub;
- dsp_set_long_acc(areg, acc);
+void lsl16(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(areg);
+ acc <<= 16;
+ dsp_set_long_acc(areg, acc);
- void lsl16(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc <<= 16;
- dsp_set_long_acc(areg, acc);
+void madd(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 prod = dsp_get_long_prod();
+ prod += (s64)dsp_get_ax_l(sreg) * (s64)dsp_get_ax_h(sreg) * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+}
- void madd(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 8) & 0x1;
+void lsr16(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 8) & 0x1;
- s64 prod = dsp_get_long_prod();
- prod += (s64)dsp_get_ax_l(sreg) * (s64)dsp_get_ax_h(sreg) * GetMultiplyModifier();
- dsp_set_long_prod(prod);
- }
+ s64 acc = dsp_get_long_acc(areg);
+ acc >>= 16;
+ dsp_set_long_acc(areg, acc);
- void lsr16(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc >>= 16;
- dsp_set_long_acc(areg, acc);
+void asr16(const UDSPInstruction& opc)
+{
+ u8 areg = (opc.hex >> 11) & 0x1;
- Update_SR_Register(acc);
- }
+ s64 acc = dsp_get_long_acc(areg);
+ acc >>= 16;
+ dsp_set_long_acc(areg, acc);
- void asr16(const UDSPInstruction& opc)
- {
- u8 areg = (opc.hex >> 11) & 0x1;
+ Update_SR_Register(acc);
+}
- s64 acc = dsp_get_long_acc(areg);
- acc >>= 16;
- dsp_set_long_acc(areg, acc);
+void shifti(const UDSPInstruction& opc)
+{
+ // direction: left
+ bool ShiftLeft = true;
+ u16 shift = opc.ushift;
- Update_SR_Register(acc);
+ if ((opc.negating) && (opc.shift < 0))
+ {
+ ShiftLeft = false;
+ shift = -opc.shift;
}
- void shifti(const UDSPInstruction& opc)
+ s64 acc;
+ u64 uacc;
+
+ if (opc.arithmetic)
{
- // direction: left
- bool ShiftLeft = true;
- u16 shift = opc.ushift;
+ // arithmetic shift
+ uacc = dsp_get_long_acc(opc.areg);
- if ((opc.negating) && (opc.shift < 0))
+ if (!ShiftLeft)
+ {
+ uacc >>= shift;
+ }
+ else
{
- ShiftLeft = false;
- shift = -opc.shift;
+ uacc <<= shift;
}
- s64 acc;
- u64 uacc;
+ acc = uacc;
+ }
+ else
+ {
+ acc = dsp_get_long_acc(opc.areg);
- if (opc.arithmetic)
+ if (!ShiftLeft)
{
- // arithmetic shift
- uacc = dsp_get_long_acc(opc.areg);
-
- if (!ShiftLeft)
- {
- uacc >>= shift;
- }
- else
- {
- uacc <<= shift;
- }
-
- acc = uacc;
+ acc >>= shift;
}
else
{
- acc = dsp_get_long_acc(opc.areg);
-
- if (!ShiftLeft)
- {
- acc >>= shift;
- }
- else
- {
- acc <<= shift;
- }
+ acc <<= shift;
}
-
- dsp_set_long_acc(opc.areg, acc);
-
- Update_SR_Register(acc);
}
- //-------------------------------------------------------------
-
- // hcs give me this code!!
- void dar(const UDSPInstruction& opc)
- {
- u8 reg = opc.hex & 0x3;
+ dsp_set_long_acc(opc.areg, acc);
- int temp = g_dsp.r[reg] + g_dsp.r[8];
+ Update_SR_Register(acc);
+}
- if (temp <= 0x7ff){g_dsp.r[reg] = temp;}
- else {g_dsp.r[reg]--;}
- }
+//-------------------------------------------------------------
+// hcs give me this code!!
+void dar(const UDSPInstruction& opc)
+{
+ u8 reg = opc.hex & 0x3;
- // hcs give me this code!!
- void iar(const UDSPInstruction& opc)
- {
- u8 reg = opc.hex & 0x3;
+ int temp = g_dsp.r[reg] + g_dsp.r[8];
- int temp = g_dsp.r[reg] + g_dsp.r[8];
+ if (temp <= 0x7ff){g_dsp.r[reg] = temp;}
+ else {g_dsp.r[reg]--;}
+}
- if (temp <= 0x7ff){g_dsp.r[reg] = temp;}
- else {g_dsp.r[reg]++;}
- }
- //-------------------------------------------------------------
+// hcs give me this code!!
+void iar(const UDSPInstruction& opc)
+{
+ u8 reg = opc.hex & 0x3;
- void sbclr(const UDSPInstruction& opc)
- {
- u8 bit = (opc.hex & 0xff) + 6;
- g_dsp.r[R_SR] &= ~(1 << bit);
- }
-
-
- void sbset(const UDSPInstruction& opc)
- {
- u8 bit = (opc.hex & 0xff) + 6;
- g_dsp.r[R_SR] |= (1 << bit);
- }
+ int temp = g_dsp.r[reg] + g_dsp.r[8];
+ if (temp <= 0x7ff){g_dsp.r[reg] = temp;}
+ else {g_dsp.r[reg]++;}
+}
- // FIXME inside
- void srbith(const UDSPInstruction& opc)
- {
- switch ((opc.hex >> 8) & 0xf)
- {
- case 0xe: // SET40
- g_dsp.r[R_SR] &= ~(1 << 14);
- break;
+//-------------------------------------------------------------
- // FIXME: Both of these appear in the beginning of the Wind Waker
- //case 0xb:
- //case 0xc:
+void sbclr(const UDSPInstruction& opc)
+{
+ u8 bit = (opc.hex & 0xff) + 6;
+ g_dsp.r[R_SR] &= ~(1 << bit);
+}
- /* case 0xf: // SET16 // that doesnt happen on a real console
- g_dsp.r[R_SR] |= (1 << 14);
- break;*/
- default:
- break;
- }
- }
+void sbset(const UDSPInstruction& opc)
+{
+ u8 bit = (opc.hex & 0xff) + 6;
+ g_dsp.r[R_SR] |= (1 << bit);
+}
- //-------------------------------------------------------------
- void movp(const UDSPInstruction& opc)
+// FIXME inside
+void srbith(const UDSPInstruction& opc)
+{
+ switch ((opc.hex >> 8) & 0xf)
{
- u8 dreg = (opc.hex >> 8) & 0x1;
+ case 0xe: // SET40
+ g_dsp.r[R_SR] &= ~(1 << 14);
+ break;
- s64 prod = dsp_get_long_prod();
- s64 acc = prod;
- dsp_set_long_acc(dreg, acc);
- }
-
- void mul(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 11) & 0x1;
- s64 prod = (s64)dsp_get_ax_h(sreg) * (s64)dsp_get_ax_l(sreg) * GetMultiplyModifier();
+ // FIXME: Both of these appear in the beginning of the Wind Waker
+ //case 0xb:
+ //case 0xc:
- dsp_set_long_prod(prod);
+ /* case 0xf: // SET16 // that doesnt happen on a real console
+ g_dsp.r[R_SR] |= (1 << 14);
+ break;*/
- Update_SR_Register(prod);
+ default:
+ break;
}
+}
- void mulac(const UDSPInstruction& opc)
- {
- // add old prod to acc
- u8 rreg = (opc.hex >> 8) & 0x1;
- s64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod();
- dsp_set_long_acc(rreg, acR);
+//-------------------------------------------------------------
- // math new prod
- u8 sreg = (opc.hex >> 11) & 0x1;
- s64 prod = dsp_get_ax_l(sreg) * dsp_get_ax_h(sreg) * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+void movp(const UDSPInstruction& opc)
+{
+ u8 dreg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(prod);
- }
+ s64 prod = dsp_get_long_prod();
+ s64 acc = prod;
+ dsp_set_long_acc(dreg, acc);
+}
- void mulmv(const UDSPInstruction& opc)
- {
- u8 rreg = (opc.hex >> 8) & 0x1;
- s64 prod = dsp_get_long_prod();
- s64 acc = prod;
- dsp_set_long_acc(rreg, acc);
+void mul(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 11) & 0x1;
+ s64 prod = (s64)dsp_get_ax_h(sreg) * (s64)dsp_get_ax_l(sreg) * GetMultiplyModifier();
- u8 areg = ((opc.hex >> 11) & 0x1) + 0x18;
- u8 breg = ((opc.hex >> 11) & 0x1) + 0x1a;
- s64 val1 = (s16)g_dsp.r[areg];
- s64 val2 = (s16)g_dsp.r[breg];
+ dsp_set_long_prod(prod);
- prod = val1 * val2 * GetMultiplyModifier();
+ Update_SR_Register(prod);
+}
- dsp_set_long_prod(prod);
+void mulac(const UDSPInstruction& opc)
+{
+ // add old prod to acc
+ u8 rreg = (opc.hex >> 8) & 0x1;
+ s64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod();
+ dsp_set_long_acc(rreg, acR);
- Update_SR_Register(prod);
- }
+ // math new prod
+ u8 sreg = (opc.hex >> 11) & 0x1;
+ s64 prod = dsp_get_ax_l(sreg) * dsp_get_ax_h(sreg) * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
- void mulmvz(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 11) & 0x1;
- u8 rreg = (opc.hex >> 8) & 0x1;
+ Update_SR_Register(prod);
+}
- // overwrite acc and clear low part
- s64 prod = dsp_get_long_prod();
- s64 acc = prod & ~0xffff;
- dsp_set_long_acc(rreg, acc);
+void mulmv(const UDSPInstruction& opc)
+{
+ u8 rreg = (opc.hex >> 8) & 0x1;
+ s64 prod = dsp_get_long_prod();
+ s64 acc = prod;
+ dsp_set_long_acc(rreg, acc);
- // math prod
- prod = (s64)g_dsp.r[0x18 + sreg] * (s64)g_dsp.r[0x1a + sreg] * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+ u8 areg = ((opc.hex >> 11) & 0x1) + 0x18;
+ u8 breg = ((opc.hex >> 11) & 0x1) + 0x1a;
+ s64 val1 = (s16)g_dsp.r[areg];
+ s64 val2 = (s16)g_dsp.r[breg];
- Update_SR_Register(prod);
- }
+ prod = val1 * val2 * GetMultiplyModifier();
- void mulx(const UDSPInstruction& opc)
- {
- u8 sreg = ((opc.hex >> 12) & 0x1);
- u8 treg = ((opc.hex >> 11) & 0x1);
+ dsp_set_long_prod(prod);
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+ Update_SR_Register(prod);
+}
- s64 prod = val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+void mulmvz(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 11) & 0x1;
+ u8 rreg = (opc.hex >> 8) & 0x1;
- Update_SR_Register(prod);
- }
+ // overwrite acc and clear low part
+ s64 prod = dsp_get_long_prod();
+ s64 acc = prod & ~0xffff;
+ dsp_set_long_acc(rreg, acc);
- void mulxac(const UDSPInstruction& opc)
- {
- // add old prod to acc
- u8 rreg = (opc.hex >> 8) & 0x1;
- s64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod();
- dsp_set_long_acc(rreg, acR);
+ // math prod
+ prod = (s64)g_dsp.r[0x18 + sreg] * (s64)g_dsp.r[0x1a + sreg] * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
- // math new prod
- u8 sreg = (opc.hex >> 12) & 0x1;
- u8 treg = (opc.hex >> 11) & 0x1;
+ Update_SR_Register(prod);
+}
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+void mulx(const UDSPInstruction& opc)
+{
+ u8 sreg = ((opc.hex >> 12) & 0x1);
+ u8 treg = ((opc.hex >> 11) & 0x1);
- s64 prod = val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
- Update_SR_Register(prod);
- }
+ s64 prod = val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
- void mulxmv(const UDSPInstruction& opc)
- {
- // add old prod to acc
- u8 rreg = ((opc.hex >> 8) & 0x1);
- s64 acR = dsp_get_long_prod();
- dsp_set_long_acc(rreg, acR);
+ Update_SR_Register(prod);
+}
- // math new prod
- u8 sreg = (opc.hex >> 12) & 0x1;
- u8 treg = (opc.hex >> 11) & 0x1;
+void mulxac(const UDSPInstruction& opc)
+{
+ // add old prod to acc
+ u8 rreg = (opc.hex >> 8) & 0x1;
+ s64 acR = dsp_get_long_acc(rreg) + dsp_get_long_prod();
+ dsp_set_long_acc(rreg, acR);
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+ // math new prod
+ u8 sreg = (opc.hex >> 12) & 0x1;
+ u8 treg = (opc.hex >> 11) & 0x1;
- s64 prod = val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
- Update_SR_Register(prod);
- }
+ s64 prod = val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+
+ Update_SR_Register(prod);
+}
- void mulxmvz(const UDSPInstruction& opc)
- {
- // overwrite acc and clear low part
- u8 rreg = (opc.hex >> 8) & 0x1;
- s64 prod = dsp_get_long_prod();
- s64 acc = prod & ~0xffff;
- dsp_set_long_acc(rreg, acc);
+void mulxmv(const UDSPInstruction& opc)
+{
+ // add old prod to acc
+ u8 rreg = ((opc.hex >> 8) & 0x1);
+ s64 acR = dsp_get_long_prod();
+ dsp_set_long_acc(rreg, acR);
- // math prod
- u8 sreg = (opc.hex >> 12) & 0x1;
- u8 treg = (opc.hex >> 11) & 0x1;
+ // math new prod
+ u8 sreg = (opc.hex >> 12) & 0x1;
+ u8 treg = (opc.hex >> 11) & 0x1;
+
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+
+ s64 prod = val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+
+ Update_SR_Register(prod);
+}
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+void mulxmvz(const UDSPInstruction& opc)
+{
+ // overwrite acc and clear low part
+ u8 rreg = (opc.hex >> 8) & 0x1;
+ s64 prod = dsp_get_long_prod();
+ s64 acc = prod & ~0xffff;
+ dsp_set_long_acc(rreg, acc);
- prod = val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
+ // math prod
+ u8 sreg = (opc.hex >> 12) & 0x1;
+ u8 treg = (opc.hex >> 11) & 0x1;
- Update_SR_Register(prod);
- }
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
- void sub(const UDSPInstruction& opc)
- {
- u8 D = (opc.hex >> 8) & 0x1;
- s64 Acc1 = dsp_get_long_acc(D);
- s64 Acc2 = dsp_get_long_acc(1 - D);
+ prod = val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
- Acc1 -= Acc2;
+ Update_SR_Register(prod);
+}
- dsp_set_long_acc(D, Acc1);
- }
+void sub(const UDSPInstruction& opc)
+{
+ u8 D = (opc.hex >> 8) & 0x1;
+ s64 Acc1 = dsp_get_long_acc(D);
+ s64 Acc2 = dsp_get_long_acc(1 - D);
+
+ Acc1 -= Acc2;
+ dsp_set_long_acc(D, Acc1);
+}
- //-------------------------------------------------------------
- //
- // --- Table E
- //
- //-------------------------------------------------------------
- void maddx(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 treg = (opc.hex >> 8) & 0x1;
+//-------------------------------------------------------------
+//
+// --- Table E
+//
+//-------------------------------------------------------------
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+void maddx(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 treg = (opc.hex >> 8) & 0x1;
- s64 prod = dsp_get_long_prod();
- prod += val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
- }
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+
+ s64 prod = dsp_get_long_prod();
+ prod += val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+}
- void msubx(const UDSPInstruction& opc)
- {
- u8 sreg = (opc.hex >> 9) & 0x1;
- u8 treg = (opc.hex >> 8) & 0x1;
+void msubx(const UDSPInstruction& opc)
+{
+ u8 sreg = (opc.hex >> 9) & 0x1;
+ u8 treg = (opc.hex >> 8) & 0x1;
- s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
- s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
+ s64 val1 = (sreg == 0) ? dsp_get_ax_l(0) : dsp_get_ax_h(0);
+ s64 val2 = (treg == 0) ? dsp_get_ax_l(1) : dsp_get_ax_h(1);
- s64 prod = dsp_get_long_prod();
- prod -= val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
- }
+ s64 prod = dsp_get_long_prod();
+ prod -= val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+}
- void maddc(const UDSPInstruction& opc)
- {
- u32 sreg = (opc.hex >> 9) & 0x1;
- u32 treg = (opc.hex >> 8) & 0x1;
+void maddc(const UDSPInstruction& opc)
+{
+ u32 sreg = (opc.hex >> 9) & 0x1;
+ u32 treg = (opc.hex >> 8) & 0x1;
- s64 val1 = dsp_get_acc_m(sreg);
- s64 val2 = dsp_get_ax_h(treg);
+ s64 val1 = dsp_get_acc_m(sreg);
+ s64 val2 = dsp_get_ax_h(treg);
- s64 prod = dsp_get_long_prod();
- prod += val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
- }
+ s64 prod = dsp_get_long_prod();
+ prod += val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+}
+
+void msubc(const UDSPInstruction& opc)
+{
+ u32 sreg = (opc.hex >> 9) & 0x1;
+ u32 treg = (opc.hex >> 8) & 0x1;
+
+ s64 val1 = dsp_get_acc_m(sreg);
+ s64 val2 = dsp_get_ax_h(treg);
- void msubc(const UDSPInstruction& opc)
- {
- u32 sreg = (opc.hex >> 9) & 0x1;
- u32 treg = (opc.hex >> 8) & 0x1;
-
- s64 val1 = dsp_get_acc_m(sreg);
- s64 val2 = dsp_get_ax_h(treg);
-
- s64 prod = dsp_get_long_prod();
- prod -= val1 * val2 * GetMultiplyModifier();
- dsp_set_long_prod(prod);
- }
+ s64 prod = dsp_get_long_prod();
+ prod -= val1 * val2 * GetMultiplyModifier();
+ dsp_set_long_prod(prod);
+}
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.h b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.h
index 958c5df418..ce3a3f9370 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.h
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPInterpreter.h
@@ -28,106 +28,107 @@
namespace DSPInterpreter {
- // GLOBAL HELPER FUNCTIONS
- void Update_SR_Register(s64 _Value);
- s8 GetMultiplyModifier();
- // END OF HELPER FUNCTIONS
-
- void unknown(const UDSPInstruction& opc);
- void call(const UDSPInstruction& opc);
- void ifcc(const UDSPInstruction& opc);
- void jcc(const UDSPInstruction& opc);
- void ret(const UDSPInstruction& opc);
- void halt(const UDSPInstruction& opc);
- void loop(const UDSPInstruction& opc);
- void loopi(const UDSPInstruction& opc);
- void bloop(const UDSPInstruction& opc);
- void bloopi(const UDSPInstruction& opc);
- void mrr(const UDSPInstruction& opc);
- void lrr(const UDSPInstruction& opc);
- void srr(const UDSPInstruction& opc);
- void lri(const UDSPInstruction& opc);
- void lris(const UDSPInstruction& opc);
- void lr(const UDSPInstruction& opc);
- void sr(const UDSPInstruction& opc);
- void si(const UDSPInstruction& opc);
- void tstaxh(const UDSPInstruction& opc);
- void clr(const UDSPInstruction& opc);
- void clrp(const UDSPInstruction& opc);
- void mulc(const UDSPInstruction& opc);
- void cmpar(const UDSPInstruction& opc);
- void cmp(const UDSPInstruction& opc);
- void tsta(const UDSPInstruction& opc);
- void addaxl(const UDSPInstruction& opc);
- void addarn(const UDSPInstruction& opc);
- void mulcac(const UDSPInstruction& opc);
- void movr(const UDSPInstruction& opc);
- void movax(const UDSPInstruction& opc);
- void xorr(const UDSPInstruction& opc);
- void andr(const UDSPInstruction& opc);
- void orr(const UDSPInstruction& opc);
- void andc(const UDSPInstruction& opc);
- void add(const UDSPInstruction& opc);
- void addp(const UDSPInstruction& opc);
- void cmpis(const UDSPInstruction& opc);
- void addpaxz(const UDSPInstruction& opc);
- void movpz(const UDSPInstruction& opc);
- void decm(const UDSPInstruction& opc);
- void dec(const UDSPInstruction& opc);
- void inc(const UDSPInstruction& opc);
- void incm(const UDSPInstruction& opc);
- void neg(const UDSPInstruction& opc);
- void addax(const UDSPInstruction& opc);
- void addr(const UDSPInstruction& opc);
- void subr(const UDSPInstruction& opc);
- void subax(const UDSPInstruction& opc);
- void addis(const UDSPInstruction& opc);
- void addi(const UDSPInstruction& opc);
- void lsl16(const UDSPInstruction& opc);
- void madd(const UDSPInstruction& opc);
- void lsr16(const UDSPInstruction& opc);
- void asr16(const UDSPInstruction& opc);
- void shifti(const UDSPInstruction& opc);
- void dar(const UDSPInstruction& opc);
- void iar(const UDSPInstruction& opc);
- void sbclr(const UDSPInstruction& opc);
- void sbset(const UDSPInstruction& opc);
- void movp(const UDSPInstruction& opc);
- void mul(const UDSPInstruction& opc);
- void mulac(const UDSPInstruction& opc);
- void mulmv(const UDSPInstruction& opc);
- void mulmvz(const UDSPInstruction& opc);
- void mulx(const UDSPInstruction& opc);
- void mulxac(const UDSPInstruction& opc);
- void mulxmv(const UDSPInstruction& opc);
- void mulxmvz(const UDSPInstruction& opc);
- void sub(const UDSPInstruction& opc);
- void maddx(const UDSPInstruction& opc);
- void msubx(const UDSPInstruction& opc);
- void maddc(const UDSPInstruction& opc);
- void msubc(const UDSPInstruction& opc);
-
-
- // FIXME inside
- void jmpa(const UDSPInstruction& opc);
- void rti(const UDSPInstruction& opc);
- void ilrr(const UDSPInstruction& opc);
- void srbith(const UDSPInstruction& opc);
-
- void andfc(const UDSPInstruction& opc);
- void andf(const UDSPInstruction& opc);
- void subf(const UDSPInstruction& opc);
- void xori(const UDSPInstruction& opc);
- void andi(const UDSPInstruction& opc);
- void ori(const UDSPInstruction& opc);
- // END OF FIXMEs
-
- // TODO: PENDING IMPLEMENTATION / UNIMPLEMENTED
- void mulcmvz(const UDSPInstruction& opc);
- void mulcmv(const UDSPInstruction& opc);
- void nx(const UDSPInstruction& opc);
- void movnp(const UDSPInstruction& opc);
- // END OF UNIMPLEMENTED
+// GLOBAL HELPER FUNCTIONS
+void Update_SR_Register(s64 _Value);
+s8 GetMultiplyModifier();
+// END OF HELPER FUNCTIONS
+
+void unknown(const UDSPInstruction& opc);
+void call(const UDSPInstruction& opc);
+void ifcc(const UDSPInstruction& opc);
+void jcc(const UDSPInstruction& opc);
+void ret(const UDSPInstruction& opc);
+void halt(const UDSPInstruction& opc);
+void loop(const UDSPInstruction& opc);
+void loopi(const UDSPInstruction& opc);
+void bloop(const UDSPInstruction& opc);
+void bloopi(const UDSPInstruction& opc);
+void mrr(const UDSPInstruction& opc);
+void lrr(const UDSPInstruction& opc);
+void srr(const UDSPInstruction& opc);
+void lri(const UDSPInstruction& opc);
+void lris(const UDSPInstruction& opc);
+void lr(const UDSPInstruction& opc);
+void sr(const UDSPInstruction& opc);
+void si(const UDSPInstruction& opc);
+void tstaxh(const UDSPInstruction& opc);
+void clr(const UDSPInstruction& opc);
+void clrp(const UDSPInstruction& opc);
+void mulc(const UDSPInstruction& opc);
+void cmpar(const UDSPInstruction& opc);
+void cmp(const UDSPInstruction& opc);
+void tsta(const UDSPInstruction& opc);
+void addaxl(const UDSPInstruction& opc);
+void addarn(const UDSPInstruction& opc);
+void mulcac(const UDSPInstruction& opc);
+void movr(const UDSPInstruction& opc);
+void movax(const UDSPInstruction& opc);
+void xorr(const UDSPInstruction& opc);
+void andr(const UDSPInstruction& opc);
+void orr(const UDSPInstruction& opc);
+void andc(const UDSPInstruction& opc);
+void add(const UDSPInstruction& opc);
+void addp(const UDSPInstruction& opc);
+void cmpis(const UDSPInstruction& opc);
+void addpaxz(const UDSPInstruction& opc);
+void movpz(const UDSPInstruction& opc);
+void decm(const UDSPInstruction& opc);
+void dec(const UDSPInstruction& opc);
+void inc(const UDSPInstruction& opc);
+void incm(const UDSPInstruction& opc);
+void neg(const UDSPInstruction& opc);
+void addax(const UDSPInstruction& opc);
+void addr(const UDSPInstruction& opc);
+void subr(const UDSPInstruction& opc);
+void subax(const UDSPInstruction& opc);
+void addis(const UDSPInstruction& opc);
+void addi(const UDSPInstruction& opc);
+void lsl16(const UDSPInstruction& opc);
+void madd(const UDSPInstruction& opc);
+void lsr16(const UDSPInstruction& opc);
+void asr16(const UDSPInstruction& opc);
+void shifti(const UDSPInstruction& opc);
+void dar(const UDSPInstruction& opc);
+void iar(const UDSPInstruction& opc);
+void sbclr(const UDSPInstruction& opc);
+void sbset(const UDSPInstruction& opc);
+void movp(const UDSPInstruction& opc);
+void mul(const UDSPInstruction& opc);
+void mulac(const UDSPInstruction& opc);
+void mulmv(const UDSPInstruction& opc);
+void mulmvz(const UDSPInstruction& opc);
+void mulx(const UDSPInstruction& opc);
+void mulxac(const UDSPInstruction& opc);
+void mulxmv(const UDSPInstruction& opc);
+void mulxmvz(const UDSPInstruction& opc);
+void sub(const UDSPInstruction& opc);
+void maddx(const UDSPInstruction& opc);
+void msubx(const UDSPInstruction& opc);
+void maddc(const UDSPInstruction& opc);
+void msubc(const UDSPInstruction& opc);
+
+
+// FIXME inside
+void jmpa(const UDSPInstruction& opc);
+void rti(const UDSPInstruction& opc);
+void ilrr(const UDSPInstruction& opc);
+void srbith(const UDSPInstruction& opc);
+
+void andfc(const UDSPInstruction& opc);
+void andf(const UDSPInstruction& opc);
+void subf(const UDSPInstruction& opc);
+void xori(const UDSPInstruction& opc);
+void andi(const UDSPInstruction& opc);
+void ori(const UDSPInstruction& opc);
+// END OF FIXMEs
+
+// TODO: PENDING IMPLEMENTATION / UNIMPLEMENTED
+void mulcmvz(const UDSPInstruction& opc);
+void mulcmv(const UDSPInstruction& opc);
+void nx(const UDSPInstruction& opc);
+void movnp(const UDSPInstruction& opc);
+// END OF UNIMPLEMENTED
+
};
#endif // _DSPINTERPRETER_H
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPJit.h b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPJit.h
index 93564925eb..eac1386a02 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPJit.h
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPJit.h
@@ -19,7 +19,8 @@
#define _DSPJIT_H
namespace DSPJit {
- // TODO(XK): Fill
+
+// TODO(XK): Fill
};
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.cpp b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.cpp
index ad27c41b48..646e8aa151 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.cpp
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.cpp
@@ -236,8 +236,8 @@ DSPOPCTemplate opcodes_ext[] =
{"XXX", 0x0000, 0x0000, nop, nop, 1, 1, {{P_VAL, 1, 0, 0, 0x00ff}},},
};
-const u32 opcodes_size = sizeof(opcodes) / sizeof(opc_t);
-const u32 opcodes_ext_size = sizeof(opcodes_ext) / sizeof(opc_t);
+const u32 opcodes_size = sizeof(opcodes) / sizeof(DSPOPCTemplate);
+const u32 opcodes_ext_size = sizeof(opcodes_ext) / sizeof(DSPOPCTemplate);
void InitInstructionTable() {
// TODO(XK): Fill
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.h b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.h
index f540071939..f9202873d5 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.h
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/DSPTables.h
@@ -73,16 +73,16 @@ union UDSPInstruction
typedef void (*dspInstFunc)(const UDSPInstruction&);
-typedef struct DSPOParams
+typedef struct
{
parameterType type;
u8 size;
u8 loc;
s8 lshift;
u16 mask;
-} opcpar_t;
+} DSPOParams;
-typedef struct DSPOPCTemplate
+typedef struct
{
const char *name;
u16 opcode;
@@ -94,11 +94,11 @@ typedef struct DSPOPCTemplate
u8 size;
u8 param_count;
DSPOParams params[8];
-} opc_t;
+} DSPOPCTemplate;
extern DSPOPCTemplate opcodes[];
extern const u32 opcodes_size;
-extern opc_t opcodes_ext[];
+extern DSPOPCTemplate opcodes_ext[];
extern const u32 opcodes_ext_size;
void InitInstructionTable();
diff --git a/Source/Plugins/Plugin_DSP_LLE-testing/Src/disassemble.cpp b/Source/Plugins/Plugin_DSP_LLE-testing/Src/disassemble.cpp
index b28fb7c274..4d9b0df2ee 100644
--- a/Source/Plugins/Plugin_DSP_LLE-testing/Src/disassemble.cpp
+++ b/Source/Plugins/Plugin_DSP_LLE-testing/Src/disassemble.cpp
@@ -153,7 +153,7 @@ const char* pdname(u16 val)
}
-char* gd_dis_params(gd_globals_t* gdg, opc_t* opc, u16 op1, u16 op2, char* strbuf)
+char* gd_dis_params(gd_globals_t* gdg, DSPOPCTemplate* opc, u16 op1, u16 op2, char* strbuf)
{
char* buf = strbuf;
u32 val;
@@ -278,8 +278,8 @@ gd_globals_t* gd_init()
u16 gd_dis_get_opcode_size(gd_globals_t* gdg)
{
- opc_t* opc = 0;
- opc_t* opc_ext = 0;
+ DSPOPCTemplate* opc = 0;
+ DSPOPCTemplate* opc_ext = 0;
bool extended;
if ((gdg->pc & 0x7fff) >= 0x1000)
@@ -353,8 +353,8 @@ char* gd_dis_opcode(gd_globals_t* gdg)
{
u32 j;
u32 op1, op2;
- opc_t* opc = NULL;
- opc_t* opc_ext = NULL;
+ DSPOPCTemplate *opc = NULL;
+ DSPOPCTemplate *opc_ext = NULL;
u16 pc;
char* buf = gdg->buffer;
bool extended;