Play-/Source/iop/Iop_Dynamic.cpp

45 lines
1.1 KiB
C++
Raw Permalink Normal View History

2019-08-17 13:51:31 -04:00
#include <cstring>
#include "Iop_Dynamic.h"
using namespace Iop;
2018-04-30 21:01:23 +01:00
CDynamic::CDynamic(uint32* exportTable)
: m_exportTable(exportTable)
2021-01-25 20:50:57 -05:00
{
m_name = GetDynamicModuleName(exportTable);
}
std::string CDynamic::GetDynamicModuleName(uint32* exportTable)
{
//Name is 8 bytes long without zero, so we need to make sure it's properly null-terminated
const unsigned int nameLength = 8;
char name[nameLength + 1];
memset(name, 0, nameLength + 1);
2021-01-25 20:50:57 -05:00
memcpy(name, reinterpret_cast<const char*>(exportTable) + 12, nameLength);
return name;
}
std::string CDynamic::GetId() const
{
return m_name;
}
std::string CDynamic::GetFunctionName(unsigned int functionId) const
{
char functionName[256];
sprintf(functionName, "unknown_%04X", functionId);
return functionName;
}
void CDynamic::Invoke(CMIPS& context, unsigned int functionId)
{
uint32 functionAddress = m_exportTable[5 + functionId];
context.m_State.nGPR[CMIPS::RA].nD0 = context.m_State.nPC;
context.m_State.nPC = functionAddress;
}
uint32* CDynamic::GetExportTable() const
{
return m_exportTable;
}