mirror of
https://github.com/izzy2lost/dolphin.git
synced 2026-06-19 01:16:48 -07:00
DSP: Namespace remaining un-namespaced DSP code
This commit is contained in:
@@ -11,6 +11,8 @@
|
|||||||
#include "Core/DSP/DSPCore.h"
|
#include "Core/DSP/DSPCore.h"
|
||||||
#include "Core/DSP/DSPHost.h"
|
#include "Core/DSP/DSPHost.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
// The hardware adpcm decoder :)
|
// The hardware adpcm decoder :)
|
||||||
static s16 ADPCM_Step(u32& _rSamplePos)
|
static s16 ADPCM_Step(u32& _rSamplePos)
|
||||||
{
|
{
|
||||||
@@ -18,7 +20,7 @@ static s16 ADPCM_Step(u32& _rSamplePos)
|
|||||||
|
|
||||||
if ((_rSamplePos & 15) == 0)
|
if ((_rSamplePos & 15) == 0)
|
||||||
{
|
{
|
||||||
g_dsp.ifx_regs[DSP_PRED_SCALE] = DSPHost::ReadHostMemory((_rSamplePos & ~15) >> 1);
|
g_dsp.ifx_regs[DSP_PRED_SCALE] = Host::ReadHostMemory((_rSamplePos & ~15) >> 1);
|
||||||
_rSamplePos += 2;
|
_rSamplePos += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,8 +30,8 @@ static s16 ADPCM_Step(u32& _rSamplePos)
|
|||||||
s32 coef1 = pCoefTable[coef_idx * 2 + 0];
|
s32 coef1 = pCoefTable[coef_idx * 2 + 0];
|
||||||
s32 coef2 = pCoefTable[coef_idx * 2 + 1];
|
s32 coef2 = pCoefTable[coef_idx * 2 + 1];
|
||||||
|
|
||||||
int temp = (_rSamplePos & 1) ? (DSPHost::ReadHostMemory(_rSamplePos >> 1) & 0xF) :
|
int temp = (_rSamplePos & 1) ? (Host::ReadHostMemory(_rSamplePos >> 1) & 0xF) :
|
||||||
(DSPHost::ReadHostMemory(_rSamplePos >> 1) >> 4);
|
(Host::ReadHostMemory(_rSamplePos >> 1) >> 4);
|
||||||
|
|
||||||
if (temp >= 8)
|
if (temp >= 8)
|
||||||
temp -= 16;
|
temp -= 16;
|
||||||
@@ -60,11 +62,11 @@ u16 dsp_read_aram_d3()
|
|||||||
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
||||||
{
|
{
|
||||||
case 0x5: // u8 reads
|
case 0x5: // u8 reads
|
||||||
val = DSPHost::ReadHostMemory(Address);
|
val = Host::ReadHostMemory(Address);
|
||||||
Address++;
|
Address++;
|
||||||
break;
|
break;
|
||||||
case 0x6: // u16 reads
|
case 0x6: // u16 reads
|
||||||
val = (DSPHost::ReadHostMemory(Address * 2) << 8) | DSPHost::ReadHostMemory(Address * 2 + 1);
|
val = (Host::ReadHostMemory(Address * 2) << 8) | Host::ReadHostMemory(Address * 2 + 1);
|
||||||
Address++;
|
Address++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -94,8 +96,8 @@ void dsp_write_aram_d3(u16 value)
|
|||||||
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
switch (g_dsp.ifx_regs[DSP_FORMAT])
|
||||||
{
|
{
|
||||||
case 0xA: // u16 writes
|
case 0xA: // u16 writes
|
||||||
DSPHost::WriteHostMemory(value >> 8, Address * 2);
|
Host::WriteHostMemory(value >> 8, Address * 2);
|
||||||
DSPHost::WriteHostMemory(value & 0xFF, Address * 2 + 1);
|
Host::WriteHostMemory(value & 0xFF, Address * 2 + 1);
|
||||||
Address++;
|
Address++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -138,14 +140,14 @@ u16 dsp_read_accelerator()
|
|||||||
val = ADPCM_Step(Address);
|
val = ADPCM_Step(Address);
|
||||||
break;
|
break;
|
||||||
case 0x0A: // 16-bit PCM audio
|
case 0x0A: // 16-bit PCM audio
|
||||||
val = (DSPHost::ReadHostMemory(Address * 2) << 8) | DSPHost::ReadHostMemory(Address * 2 + 1);
|
val = (Host::ReadHostMemory(Address * 2) << 8) | Host::ReadHostMemory(Address * 2 + 1);
|
||||||
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
|
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
|
||||||
g_dsp.ifx_regs[DSP_YN1] = val;
|
g_dsp.ifx_regs[DSP_YN1] = val;
|
||||||
step_size_bytes = 2;
|
step_size_bytes = 2;
|
||||||
Address++;
|
Address++;
|
||||||
break;
|
break;
|
||||||
case 0x19: // 8-bit PCM audio
|
case 0x19: // 8-bit PCM audio
|
||||||
val = DSPHost::ReadHostMemory(Address) << 8;
|
val = Host::ReadHostMemory(Address) << 8;
|
||||||
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
|
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
|
||||||
g_dsp.ifx_regs[DSP_YN1] = val;
|
g_dsp.ifx_regs[DSP_YN1] = val;
|
||||||
step_size_bytes = 2;
|
step_size_bytes = 2;
|
||||||
@@ -179,3 +181,4 @@ u16 dsp_read_accelerator()
|
|||||||
g_dsp.ifx_regs[DSP_ACCAL] = Address & 0xffff;
|
g_dsp.ifx_regs[DSP_ACCAL] = Address & 0xffff;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -6,7 +6,10 @@
|
|||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
u16 dsp_read_accelerator();
|
u16 dsp_read_accelerator();
|
||||||
|
|
||||||
u16 dsp_read_aram_d3();
|
u16 dsp_read_aram_d3();
|
||||||
void dsp_write_aram_d3(u16 value);
|
void dsp_write_aram_d3(u16 value);
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
#include "Core/DSP/DSPMemoryMap.h"
|
#include "Core/DSP/DSPMemoryMap.h"
|
||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
|
|
||||||
namespace DSPAnalyzer
|
namespace DSP
|
||||||
|
{
|
||||||
|
namespace Analyzer
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -165,4 +167,5 @@ u8 GetCodeFlags(u16 address)
|
|||||||
return code_flags[address];
|
return code_flags[address];
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace DSPAnalyzer
|
} // namespace Analyzer
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -7,7 +7,9 @@
|
|||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
// Basic code analysis.
|
// Basic code analysis.
|
||||||
namespace DSPAnalyzer
|
namespace DSP
|
||||||
|
{
|
||||||
|
namespace Analyzer
|
||||||
{
|
{
|
||||||
// Useful things to detect:
|
// Useful things to detect:
|
||||||
// * Loop endpoints - so that we can avoid checking for loops every cycle.
|
// * Loop endpoints - so that we can avoid checking for loops every cycle.
|
||||||
@@ -33,4 +35,5 @@ void Analyze();
|
|||||||
// Retrieves the flags set during analysis for code in memory.
|
// Retrieves the flags set during analysis for code in memory.
|
||||||
u8 GetCodeFlags(u16 address);
|
u8 GetCodeFlags(u16 address);
|
||||||
|
|
||||||
} // namespace DSPAnalyzer
|
} // namespace Analyzer
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
#include "Core/DSP/DSPDisassembler.h"
|
#include "Core/DSP/DSPDisassembler.h"
|
||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
static const char* err_string[] = {"",
|
static const char* err_string[] = {"",
|
||||||
"Unknown Error",
|
"Unknown Error",
|
||||||
"Unknown opcode",
|
"Unknown opcode",
|
||||||
@@ -1031,3 +1033,4 @@ bool DSPAssembler::AssembleFile(const char* fname, int pass)
|
|||||||
|
|
||||||
return !failed;
|
return !failed;
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
#include "Core/DSP/LabelMap.h"
|
#include "Core/DSP/LabelMap.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
enum err_t
|
enum err_t
|
||||||
{
|
{
|
||||||
ERR_OK = 0,
|
ERR_OK = 0,
|
||||||
@@ -116,3 +118,4 @@ private:
|
|||||||
int m_current_param;
|
int m_current_param;
|
||||||
const AssemblerSettings settings_;
|
const AssemblerSettings settings_;
|
||||||
};
|
};
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
// super fast breakpoints for a limited range.
|
// super fast breakpoints for a limited range.
|
||||||
// To be used interchangeably with the BreakPoints class.
|
// To be used interchangeably with the BreakPoints class.
|
||||||
class DSPBreakpoints
|
class DSPBreakpoints
|
||||||
@@ -44,3 +46,4 @@ public:
|
|||||||
private:
|
private:
|
||||||
u8 b[65536];
|
u8 b[65536];
|
||||||
};
|
};
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
#include "Core/DSP/DSPCaptureLogger.h"
|
#include "Core/DSP/DSPCaptureLogger.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
// Definition of the packet structures stored in PCAP capture files.
|
// Definition of the packet structures stored in PCAP capture files.
|
||||||
|
|
||||||
const u8 IFX_ACCESS_PACKET_MAGIC = 0;
|
const u8 IFX_ACCESS_PACKET_MAGIC = 0;
|
||||||
@@ -77,3 +79,4 @@ void PCAPDSPCaptureLogger::LogDMA(u16 control, u32 gc_address, u16 dsp_address,
|
|||||||
|
|
||||||
m_pcap->AddPacket(buffer, sizeof(DMAPacket) + length);
|
m_pcap->AddPacket(buffer, sizeof(DMAPacket) + length);
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
class PCAP;
|
class PCAP;
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
// An interface used to capture and log structured data about internal DSP
|
// An interface used to capture and log structured data about internal DSP
|
||||||
// data transfers.
|
// data transfers.
|
||||||
//
|
//
|
||||||
@@ -70,3 +72,4 @@ private:
|
|||||||
|
|
||||||
std::unique_ptr<PCAP> m_pcap;
|
std::unique_ptr<PCAP> m_pcap;
|
||||||
};
|
};
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
#include "Core/DSP/DSPCodeUtil.h"
|
#include "Core/DSP/DSPCodeUtil.h"
|
||||||
#include "Core/DSP/DSPDisassembler.h"
|
#include "Core/DSP/DSPDisassembler.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
bool Assemble(const std::string& text, std::vector<u16>& code, bool force)
|
bool Assemble(const std::string& text, std::vector<u16>& code, bool force)
|
||||||
{
|
{
|
||||||
AssemblerSettings settings;
|
AssemblerSettings settings;
|
||||||
@@ -216,3 +218,4 @@ bool SaveBinary(const std::vector<u16>& code, const std::string& filename)
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
bool Assemble(const std::string& text, std::vector<u16>& code, bool force = false);
|
bool Assemble(const std::string& text, std::vector<u16>& code, bool force = false);
|
||||||
bool Disassemble(const std::vector<u16>& code, bool line_numbers, std::string& text);
|
bool Disassemble(const std::vector<u16>& code, bool line_numbers, std::string& text);
|
||||||
bool Compare(const std::vector<u16>& code1, const std::vector<u16>& code2);
|
bool Compare(const std::vector<u16>& code1, const std::vector<u16>& code2);
|
||||||
@@ -25,3 +27,4 @@ void BinaryStringBEToCode(const std::string& str, std::vector<u16>& code);
|
|||||||
// Load code (big endian binary).
|
// Load code (big endian binary).
|
||||||
bool LoadBinary(const std::string& filename, std::vector<u16>& code);
|
bool LoadBinary(const std::string& filename, std::vector<u16>& code);
|
||||||
bool SaveBinary(const std::vector<u16>& code, const std::string& filename);
|
bool SaveBinary(const std::vector<u16>& code, const std::string& filename);
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -6,4 +6,7 @@
|
|||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
typedef u16 UDSPInstruction;
|
typedef u16 UDSPInstruction;
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -24,12 +24,14 @@
|
|||||||
#include "Core/DSP/Interpreter/DSPInterpreter.h"
|
#include "Core/DSP/Interpreter/DSPInterpreter.h"
|
||||||
#include "Core/DSP/Jit/DSPEmitter.h"
|
#include "Core/DSP/Jit/DSPEmitter.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
SDSP g_dsp;
|
SDSP g_dsp;
|
||||||
DSPBreakpoints g_dsp_breakpoints;
|
DSPBreakpoints g_dsp_breakpoints;
|
||||||
static DSPCoreState core_state = DSPCORE_STOP;
|
static DSPCoreState core_state = DSPCORE_STOP;
|
||||||
u16 g_cycles_left = 0;
|
u16 g_cycles_left = 0;
|
||||||
bool g_init_hax = false;
|
bool g_init_hax = false;
|
||||||
std::unique_ptr<DSP::JIT::x86::DSPEmitter> g_dsp_jit;
|
std::unique_ptr<JIT::x86::DSPEmitter> g_dsp_jit;
|
||||||
std::unique_ptr<DSPCaptureLogger> g_dsp_cap;
|
std::unique_ptr<DSPCaptureLogger> g_dsp_cap;
|
||||||
static Common::Event step_event;
|
static Common::Event step_event;
|
||||||
|
|
||||||
@@ -77,14 +79,14 @@ static bool VerifyRoms()
|
|||||||
|
|
||||||
if (rom_idx == 1)
|
if (rom_idx == 1)
|
||||||
{
|
{
|
||||||
DSPHost::OSD_AddMessage("You are using an old free DSP ROM made by the Dolphin Team.", 6000);
|
Host::OSD_AddMessage("You are using an old free DSP ROM made by the Dolphin Team.", 6000);
|
||||||
DSPHost::OSD_AddMessage("Only games using the Zelda UCode will work correctly.", 6000);
|
Host::OSD_AddMessage("Only games using the Zelda UCode will work correctly.", 6000);
|
||||||
}
|
}
|
||||||
else if (rom_idx == 2 || rom_idx == 3)
|
else if (rom_idx == 2 || rom_idx == 3)
|
||||||
{
|
{
|
||||||
DSPHost::OSD_AddMessage("You are using a free DSP ROM made by the Dolphin Team.", 8000);
|
Host::OSD_AddMessage("You are using a free DSP ROM made by the Dolphin Team.", 8000);
|
||||||
DSPHost::OSD_AddMessage("All Wii games will work correctly, and most GC games should ", 8000);
|
Host::OSD_AddMessage("All Wii games will work correctly, and most GC games should ", 8000);
|
||||||
DSPHost::OSD_AddMessage("also work fine, but the GBA/IPL/CARD UCodes will not work.", 8000);
|
Host::OSD_AddMessage("also work fine, but the GBA/IPL/CARD UCodes will not work.", 8000);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -148,7 +150,7 @@ bool DSPCore_Init(const DSPInitOptions& opts)
|
|||||||
|
|
||||||
// Initialize JIT, if necessary
|
// Initialize JIT, if necessary
|
||||||
if (opts.core_type == DSPInitOptions::CORE_JIT)
|
if (opts.core_type == DSPInitOptions::CORE_JIT)
|
||||||
g_dsp_jit = std::make_unique<DSP::JIT::x86::DSPEmitter>();
|
g_dsp_jit = std::make_unique<JIT::x86::DSPEmitter>();
|
||||||
|
|
||||||
g_dsp_cap.reset(opts.capture_logger);
|
g_dsp_cap.reset(opts.capture_logger);
|
||||||
|
|
||||||
@@ -176,7 +178,7 @@ void DSPCore_Reset()
|
|||||||
|
|
||||||
std::fill(std::begin(g_dsp.r.wr), std::end(g_dsp.r.wr), 0xffff);
|
std::fill(std::begin(g_dsp.r.wr), std::end(g_dsp.r.wr), 0xffff);
|
||||||
|
|
||||||
DSPAnalyzer::Analyze();
|
Analyzer::Analyze();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DSPCore_SetException(u8 level)
|
void DSPCore_SetException(u8 level)
|
||||||
@@ -193,7 +195,7 @@ void DSPCore_SetExternalInterrupt(bool val)
|
|||||||
// Coming from the CPU
|
// Coming from the CPU
|
||||||
void DSPCore_CheckExternalInterrupt()
|
void DSPCore_CheckExternalInterrupt()
|
||||||
{
|
{
|
||||||
if (!DSP::Interpreter::dsp_SR_is_flag_set(SR_EXT_INT_ENABLE))
|
if (!Interpreter::dsp_SR_is_flag_set(SR_EXT_INT_ENABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Signal the SPU about new mail
|
// Signal the SPU about new mail
|
||||||
@@ -213,7 +215,7 @@ void DSPCore_CheckExceptions()
|
|||||||
// Seems exp int are not masked by sr_int_enable
|
// Seems exp int are not masked by sr_int_enable
|
||||||
if (g_dsp.exceptions & (1 << i))
|
if (g_dsp.exceptions & (1 << i))
|
||||||
{
|
{
|
||||||
if (DSP::Interpreter::dsp_SR_is_flag_set(SR_INT_ENABLE) || (i == EXP_INT))
|
if (Interpreter::dsp_SR_is_flag_set(SR_INT_ENABLE) || (i == EXP_INT))
|
||||||
{
|
{
|
||||||
// store pc and sr until RTI
|
// store pc and sr until RTI
|
||||||
dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
|
dsp_reg_store_stack(DSP_STACK_C, g_dsp.pc);
|
||||||
@@ -251,7 +253,7 @@ int DSPCore_RunCycles(int cycles)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_cycles_left = cycles;
|
g_cycles_left = cycles;
|
||||||
auto exec_addr = (DSP::JIT::x86::DSPEmitter::DSPCompiledCode)g_dsp_jit->enterDispatcher;
|
auto exec_addr = (JIT::x86::DSPEmitter::DSPCompiledCode)g_dsp_jit->enterDispatcher;
|
||||||
exec_addr();
|
exec_addr();
|
||||||
|
|
||||||
if (g_dsp.reset_dspjit_codespace)
|
if (g_dsp.reset_dspjit_codespace)
|
||||||
@@ -267,9 +269,9 @@ int DSPCore_RunCycles(int cycles)
|
|||||||
case DSPCORE_RUNNING:
|
case DSPCORE_RUNNING:
|
||||||
// Seems to slow things down
|
// Seems to slow things down
|
||||||
#if defined(_DEBUG) || defined(DEBUGFAST)
|
#if defined(_DEBUG) || defined(DEBUGFAST)
|
||||||
cycles = DSP::Interpreter::RunCyclesDebug(cycles);
|
cycles = Interpreter::RunCyclesDebug(cycles);
|
||||||
#else
|
#else
|
||||||
cycles = DSP::Interpreter::RunCycles(cycles);
|
cycles = Interpreter::RunCycles(cycles);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -278,10 +280,10 @@ int DSPCore_RunCycles(int cycles)
|
|||||||
if (core_state != DSPCORE_STEPPING)
|
if (core_state != DSPCORE_STEPPING)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
DSP::Interpreter::Step();
|
Interpreter::Step();
|
||||||
cycles--;
|
cycles--;
|
||||||
|
|
||||||
DSPHost::UpdateDebugger();
|
Host::UpdateDebugger();
|
||||||
break;
|
break;
|
||||||
case DSPCORE_STOP:
|
case DSPCORE_STOP:
|
||||||
break;
|
break;
|
||||||
@@ -293,11 +295,12 @@ int DSPCore_RunCycles(int cycles)
|
|||||||
void DSPCore_SetState(DSPCoreState new_state)
|
void DSPCore_SetState(DSPCoreState new_state)
|
||||||
{
|
{
|
||||||
core_state = new_state;
|
core_state = new_state;
|
||||||
|
|
||||||
// kick the event, in case we are waiting
|
// kick the event, in case we are waiting
|
||||||
if (new_state == DSPCORE_RUNNING)
|
if (new_state == DSPCORE_RUNNING)
|
||||||
step_event.Set();
|
step_event.Set();
|
||||||
// Sleep(10);
|
|
||||||
DSPHost::UpdateDebugger();
|
Host::UpdateDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
DSPCoreState DSPCore_GetState()
|
DSPCoreState DSPCore_GetState()
|
||||||
@@ -458,3 +461,4 @@ void DSPCore_WriteRegister(size_t reg, u16 val)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ namespace x86
|
|||||||
class DSPEmitter;
|
class DSPEmitter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
enum : u32
|
enum : u32
|
||||||
{
|
{
|
||||||
@@ -311,7 +310,7 @@ extern SDSP g_dsp;
|
|||||||
extern DSPBreakpoints g_dsp_breakpoints;
|
extern DSPBreakpoints g_dsp_breakpoints;
|
||||||
extern u16 g_cycles_left;
|
extern u16 g_cycles_left;
|
||||||
extern bool g_init_hax;
|
extern bool g_init_hax;
|
||||||
extern std::unique_ptr<DSP::JIT::x86::DSPEmitter> g_dsp_jit;
|
extern std::unique_ptr<JIT::x86::DSPEmitter> g_dsp_jit;
|
||||||
extern std::unique_ptr<DSPCaptureLogger> g_dsp_cap;
|
extern std::unique_ptr<DSPCaptureLogger> g_dsp_cap;
|
||||||
|
|
||||||
struct DSPInitOptions
|
struct DSPInitOptions
|
||||||
@@ -371,3 +370,4 @@ void DSPCore_Step();
|
|||||||
|
|
||||||
u16 DSPCore_ReadRegister(size_t reg);
|
u16 DSPCore_ReadRegister(size_t reg);
|
||||||
void DSPCore_WriteRegister(size_t reg, u16 val);
|
void DSPCore_WriteRegister(size_t reg, u16 val);
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
#include "Core/DSP/Interpreter/DSPInterpreter.h"
|
#include "Core/DSP/Interpreter/DSPInterpreter.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
DSPDisassembler::DSPDisassembler(const AssemblerSettings& settings) : settings_(settings)
|
DSPDisassembler::DSPDisassembler(const AssemblerSettings& settings) : settings_(settings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -335,3 +337,4 @@ bool DSPDisassembler::DisassembleFile(const std::string& name, int base_addr, in
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
#include "Core/DSP/LabelMap.h"
|
#include "Core/DSP/LabelMap.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
struct AssemblerSettings
|
struct AssemblerSettings
|
||||||
{
|
{
|
||||||
AssemblerSettings()
|
AssemblerSettings()
|
||||||
@@ -57,3 +59,4 @@ private:
|
|||||||
|
|
||||||
LabelMap labels;
|
LabelMap labels;
|
||||||
};
|
};
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
#include "Core/DSP/DSPHost.h"
|
#include "Core/DSP/DSPHost.h"
|
||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
static void gdsp_do_dma();
|
static void gdsp_do_dma();
|
||||||
|
|
||||||
void gdsp_ifx_init()
|
void gdsp_ifx_init()
|
||||||
@@ -98,7 +100,7 @@ void gdsp_ifx_write(u32 addr, u32 val)
|
|||||||
{
|
{
|
||||||
case DSP_DIRQ:
|
case DSP_DIRQ:
|
||||||
if (val & 0x1)
|
if (val & 0x1)
|
||||||
DSPHost::InterruptRequest();
|
Host::InterruptRequest();
|
||||||
else
|
else
|
||||||
WARN_LOG(DSPLLE, "Unknown Interrupt Request pc=%04x (%04x)", g_dsp.pc, val);
|
WARN_LOG(DSPLLE, "Unknown Interrupt Request pc=%04x (%04x)", g_dsp.pc, val);
|
||||||
break;
|
break;
|
||||||
@@ -234,7 +236,7 @@ static const u8* gdsp_idma_in(u16 dsp_addr, u32 addr, u32 size)
|
|||||||
}
|
}
|
||||||
Common::WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false);
|
Common::WriteProtectMemory(g_dsp.iram, DSP_IRAM_BYTE_SIZE, false);
|
||||||
|
|
||||||
DSPHost::CodeLoaded((const u8*)g_dsp.iram + dsp_addr, size);
|
Host::CodeLoaded((const u8*)g_dsp.iram + dsp_addr, size);
|
||||||
|
|
||||||
NOTICE_LOG(DSPLLE, "*** Copy new UCode from 0x%08x to 0x%04x (crc: %8x)", addr, dsp_addr,
|
NOTICE_LOG(DSPLLE, "*** Copy new UCode from 0x%08x to 0x%04x (crc: %8x)", addr, dsp_addr,
|
||||||
g_dsp.iram_crc);
|
g_dsp.iram_crc);
|
||||||
@@ -356,3 +358,4 @@ static void gdsp_do_dma()
|
|||||||
if (copied_data_ptr)
|
if (copied_data_ptr)
|
||||||
g_dsp_cap->LogDMA(ctl, addr, dsp_addr, len, copied_data_ptr);
|
g_dsp_cap->LogDMA(ctl, addr, dsp_addr, len, copied_data_ptr);
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
enum Mailbox
|
enum Mailbox
|
||||||
{
|
{
|
||||||
MAILBOX_CPU,
|
MAILBOX_CPU,
|
||||||
@@ -22,3 +24,4 @@ u16 gdsp_mbox_read_l(Mailbox mbx);
|
|||||||
void gdsp_ifx_init();
|
void gdsp_ifx_init();
|
||||||
void gdsp_ifx_write(u32 addr, u32 val);
|
void gdsp_ifx_write(u32 addr, u32 val);
|
||||||
u16 gdsp_ifx_read(u16 addr);
|
u16 gdsp_ifx_read(u16 addr);
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -13,7 +13,9 @@
|
|||||||
// core isn't used, for example in an asm/disasm tool, then most of these
|
// core isn't used, for example in an asm/disasm tool, then most of these
|
||||||
// can be stubbed out.
|
// can be stubbed out.
|
||||||
|
|
||||||
namespace DSPHost
|
namespace DSP
|
||||||
|
{
|
||||||
|
namespace Host
|
||||||
{
|
{
|
||||||
u8 ReadHostMemory(u32 addr);
|
u8 ReadHostMemory(u32 addr);
|
||||||
void WriteHostMemory(u8 value, u32 addr);
|
void WriteHostMemory(u8 value, u32 addr);
|
||||||
@@ -23,4 +25,5 @@ bool IsWiiHost();
|
|||||||
void InterruptRequest();
|
void InterruptRequest();
|
||||||
void CodeLoaded(const u8* ptr, int size);
|
void CodeLoaded(const u8* ptr, int size);
|
||||||
void UpdateDebugger();
|
void UpdateDebugger();
|
||||||
}
|
} // namespace Host
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
#include "Core/DSP/DSPHWInterface.h"
|
#include "Core/DSP/DSPHWInterface.h"
|
||||||
#include "Core/DSP/DSPTables.h"
|
#include "Core/DSP/DSPTables.h"
|
||||||
|
|
||||||
|
namespace DSP
|
||||||
|
{
|
||||||
u16 dsp_imem_read(u16 addr)
|
u16 dsp_imem_read(u16 addr)
|
||||||
{
|
{
|
||||||
switch (addr >> 12)
|
switch (addr >> 12)
|
||||||
@@ -82,3 +84,4 @@ void dsp_skip_inst()
|
|||||||
{
|
{
|
||||||
g_dsp.pc += opTable[dsp_peek_code()]->size;
|
g_dsp.pc += opTable[dsp_peek_code()]->size;
|
||||||
}
|
}
|
||||||
|
} // namespace DSP
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user