1 #include "lua/internal.hpp"
2 #include "interface/disassembler.hpp"
3 #include "interface/romtype.hpp"
4 #include "library/hex.hpp"
5 #include "core/memorymanip.hpp"
6 #include "core/moviedata.hpp"
10 int disassemble(lua::state
& L
, lua::parameters
& P
)
15 P(kind
, addr
, P
.optional(count
, 1));
18 d
= &disassembler::byname(kind
);
20 uint64_t laddr
= addr
;
21 for(uint64_t i
= 1; i
<= count
; i
++) {
29 L
.pushstring("disasm");
30 L
.pushlstring(d
->disassemble(laddr
, [&bytes
, laddr
]() -> unsigned char {
31 return lsnes_memory
.read
<uint8_t>(laddr
+ bytes
++);
35 std::vector
<unsigned char> tmp
;
37 lsnes_memory
.read_range(laddr
, &tmp
[0], bytes
);
38 L
.pushstring("bytes");
39 L
.pushlstring(hex::b_to(&tmp
[0], bytes
));
47 int getregister(lua::state
& L
, lua::parameters
& P
)
53 const interface_device_reg
* regs
= our_rom
.rtype
->get_registers();
58 for(size_t i
= 0; regs
[i
].name
; i
++) {
62 L
.pushboolean(regs
[i
].read() != 0);
64 L
.pushnumber(regs
[i
].read());
71 int setregister(lua::state
& L
, lua::parameters
& P
)
77 const interface_device_reg
* regs
= our_rom
.rtype
->get_registers();
81 for(size_t i
= 0; regs
[i
].name
; i
++) {
87 regs
[i
].write(P
.arg
<bool>() ? 1 : 0);
89 regs
[i
].write(P
.arg
<uint64_t>());
95 lua::functions
disasm_fns(lua_func_misc
, "memory", {
96 {"disassemble", disassemble
},
97 {"getregister", getregister
},
98 {"setregister", setregister
},