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,