1 #include "lua/internal.hpp"
2 #include "interface/disassembler.hpp"
3 #include "interface/romtype.hpp"
4 #include "library/bintohex.hpp"
5 #include "core/memorymanip.hpp"
6 #include "core/moviedata.hpp"
10 function_ptr_luafun
memdisass(lua_func_misc
, "memory.disassemble", [](lua_state
& L
, const std::string
& fname
)
13 std::string kind
= L
.get_string(1, fname
.c_str());
14 uint64_t addr
= L
.get_numeric_argument
<uint64_t>(2, fname
.c_str());
15 L
.get_numeric_argument
<uint64_t>(3, count
, fname
.c_str());
17 d
= &disassembler::byname(kind
);
19 uint64_t laddr
= addr
;
20 for(uint64_t i
= 1; i
<= count
; i
++) {
28 L
.pushstring("disasm");
29 L
.pushlstring(d
->disassemble(laddr
, [&bytes
, laddr
]() -> unsigned char {
30 return lsnes_memory
.read
<uint8_t>(laddr
+ bytes
++);
34 std::vector
<unsigned char> tmp
;
36 lsnes_memory
.read_range(laddr
, &tmp
[0], bytes
);
37 L
.pushstring("bytes");
38 L
.pushlstring(binary_to_hex(&tmp
[0], bytes
));
46 function_ptr_luafun
getreg(lua_func_misc
, "memory.getregister", [](lua_state
& L
, const std::string
& fname
)
48 std::string r
= L
.get_string(1, fname
.c_str());
49 const interface_device_reg
* regs
= our_rom
.rtype
->get_registers();
54 for(size_t i
= 0; regs
[i
].name
; i
++) {
58 L
.pushboolean(regs
[i
].read() != 0);
60 L
.pushnumber(regs
[i
].read());
67 function_ptr_luafun
setreg(lua_func_misc
, "memory.setregister", [](lua_state
& L
, const std::string
& fname
)
69 std::string r
= L
.get_string(1, fname
.c_str());
70 const interface_device_reg
* regs
= our_rom
.rtype
->get_registers();
74 for(size_t i
= 0; regs
[i
].name
; i
++) {
80 regs
[i
].write(L
.get_bool(2, fname
.c_str()) ? 1 : 0);
82 regs
[i
].write(L
.get_numeric_argument
<uint64_t>(2, fname
.c_str()));