Debugger/Disasm: Name SPU Syscalls

This commit is contained in:
Eladash 2021-09-06 19:17:21 +03:00 committed by Megamouse
parent 7bb830a228
commit dfbc49513d
3 changed files with 22 additions and 2 deletions

View file

@ -4,6 +4,7 @@
#include "SPUOpcodes.h"
union v128;
enum spu_stop_syscall : u32;
static constexpr const char* spu_reg_name[128] =
{
@ -176,7 +177,7 @@ public:
//0 - 10
void STOP(spu_opcode_t op)
{
op.rb ? UNK(op) : DisAsm("stop", op.opcode & 0x3fff);
op.rb ? UNK(op) : DisAsm("stop", fmt::format("0x%x #%s", op.opcode & 0x3fff, spu_stop_syscall{op.opcode & 0x3fff}).c_str());
}
void LNOP(spu_opcode_t /*op*/)
{

View file

@ -48,6 +48,25 @@ void fmt_class_string<spu_group_status>::format(std::string& out, u64 arg)
});
}
template <>
void fmt_class_string<spu_stop_syscall>::format(std::string& out, u64 arg)
{
format_enum(out, arg, [](spu_stop_syscall value)
{
switch (value)
{
case SYS_SPU_THREAD_STOP_YIELD: return "sys_spu_thread_yield";
case SYS_SPU_THREAD_STOP_GROUP_EXIT: return "sys_spu_thread_group_exit";
case SYS_SPU_THREAD_STOP_THREAD_EXIT: return "sys_spu_thread_thread_exit";
case SYS_SPU_THREAD_STOP_RECEIVE_EVENT: return "sys_spu_thread_receive_event";
case SYS_SPU_THREAD_STOP_TRY_RECEIVE_EVENT: return "sys_spu_thread_tryreceive_event";
case SYS_SPU_THREAD_STOP_SWITCH_SYSTEM_MODULE: return "sys_spu_thread_switch_system_module";
}
return unknown;
});
}
void sys_spu_image::load(const fs::file& stream)
{
const spu_exec_object obj{stream, 0, elf_opt::no_sections + elf_opt::no_data};

View file

@ -72,7 +72,7 @@ enum : s32
SYS_SPU_SEGMENT_TYPE_INFO = 4,
};
enum : u32
enum spu_stop_syscall : u32
{
SYS_SPU_THREAD_STOP_YIELD = 0x0100,
SYS_SPU_THREAD_STOP_GROUP_EXIT = 0x0101,