示例#1
0
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 "";
}
示例#2
0
// 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);
}
示例#3
0
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;
    }
}
示例#4
0
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);