From 27828b13512ba8e482ec49486a82e25c84abc1b5 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 29 Apr 2024 00:46:22 +0300 Subject: [PATCH] Lua: Add Teak disassembler --- src/lua.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lua.cpp b/src/lua.cpp index 209ea32e..e53ae6a1 100644 --- a/src/lua.cpp +++ b/src/lua.cpp @@ -1,4 +1,6 @@ #ifdef PANDA3DS_ENABLE_LUA +#include + #include #include "capstone.hpp" @@ -227,6 +229,15 @@ static int disassembleARMThunk(lua_State* L) { return 1; } +static int disassembleTeakThunk(lua_State* L) { + const u16 instruction = u16(lua_tonumber(L, 1)); + const u16 expansion = u16(lua_tonumber(L, 2)); + + std::string disassembly = Teakra::Disassembler::Do(instruction, expansion); + lua_pushstring(L, disassembly.c_str()); + return 1; +} + // clang-format off static constexpr luaL_Reg functions[] = { { "__read8", read8Thunk }, @@ -246,6 +257,7 @@ static constexpr luaL_Reg functions[] = { { "__getCirclepad", getCirclepadThunk }, { "__getButton", getButtonThunk }, { "__disassembleARM", disassembleARMThunk }, + { "__disassembleTeak", disassembleTeakThunk }, { nullptr, nullptr }, }; // clang-format on @@ -280,6 +292,7 @@ void LuaManager::initializeThunks() { getCirclepad = function() return GLOBALS.__getCirclepad() end, disassembleARM = function(pc, instruction) return GLOBALS.__disassembleARM(pc, instruction) end, + disassembleTeak = function(opcode, exp) return GLOBALS.__disassembleTeak(opcode, exp or 0) end, Frame = __Frame, ButtonA = __ButtonA,