std::string DSPDebugInterface::GetRawMemoryString(int memory, unsigned int address) { if (DSPCore_GetState() == State::Stopped) return ""; switch (memory) { case 0: // IMEM switch (address >> 12) { case 0: case 0x8: return StringFromFormat("%04x", dsp_imem_read(address)); default: return "--IMEM--"; } case 1: // DMEM switch (address >> 12) { case 0: case 1: return StringFromFormat("%04x (DMEM)", dsp_dmem_read(address)); case 0xf: return StringFromFormat("%04x (MMIO)", g_dsp.ifx_regs[address & 0xFF]); default: return "--DMEM--"; } } return ""; }
// LR $D, @M // 0000 0000 110d dddd // mmmm mmmm mmmm mmmm // Move value from data memory pointed by address M to register $D. void lr(const UDSPInstruction opc) { u8 reg = opc & DSP_REG_MASK; u16 addr = dsp_fetch_code(); u16 val = dsp_dmem_read(addr); dsp_op_write_reg(reg, val); dsp_conditional_extend_accum(reg); }
void DSPDebugInterface::GetRawMemoryString(int memory, unsigned int address, char *dest, int max_size) { if (DSPCore_GetState() == DSPCORE_STOP) { dest[0] = 0; return; } switch (memory) { case 0: // IMEM switch (address >> 12) { case 0: case 0x8: sprintf(dest, "%04x", dsp_imem_read(address)); break; default: sprintf(dest, "--IMEM--"); break; } break; case 1: // DMEM switch (address >> 12) { case 0: case 1: sprintf(dest, "%04x (DMEM)", dsp_dmem_read(address)); break; case 0xf: sprintf(dest, "%04x (MMIO)", g_dsp.ifx_regs[address & 0xFF]); break; default: sprintf(dest, "--DMEM--"); break; } break; } }
void si(const UDSPInstruction opc) { u16 addr = (s8)opc; u16 imm = dsp_fetch_code(); dsp_dmem_write(addr, imm); } // LRR $D, @$S // 0001 1000 0ssd dddd // Move value from data memory pointed by addressing register $S to register $D. void lrr(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; u8 dreg = opc & 0x1f; u16 val = dsp_dmem_read(dsp_op_read_reg(sreg)); dsp_op_write_reg(dreg, val); dsp_conditional_extend_accum(dreg); } // LRRD $D, @$S // 0001 1000 1ssd dddd // Move value from data memory pointed by addressing register $S toregister $D. // Decrement register $S. void lrrd(const UDSPInstruction opc) { u8 sreg = (opc >> 5) & 0x3; u8 dreg = opc & 0x1f; u16 val = dsp_dmem_read(dsp_op_read_reg(sreg)); dsp_op_write_reg(dreg, val);