Evdev joystick plugin
[lsnes.git] / lua / memory.cpp
blob9c2bd0e95318eb684db7eeb463e8775724ff53cb
1 #include "lua-int.hpp"
2 #include "memorymanip.hpp"
4 namespace
6 template<typename T, typename U, U (*rfun)(uint32_t addr)>
7 class lua_read_memory : public lua_function
9 public:
10 lua_read_memory(const std::string& name) : lua_function(name) {}
11 int invoke(lua_State* LS)
13 uint32_t addr = get_numeric_argument<uint32_t>(LS, 1, fname.c_str());
14 lua_pushnumber(LS, static_cast<T>(rfun(addr)));
15 return 1;
19 template<typename T, bool (*wfun)(uint32_t addr, T value)>
20 class lua_write_memory : public lua_function
22 public:
23 lua_write_memory(const std::string& name) : lua_function(name) {}
24 int invoke(lua_State* LS)
26 uint32_t addr = get_numeric_argument<uint32_t>(LS, 1, fname.c_str());
27 T value = get_numeric_argument<T>(LS, 2, fname.c_str());
28 wfun(addr, value);
29 return 0;
33 lua_read_memory<uint8_t, uint8_t, memory_read_byte> rub("memory.readbyte");
34 lua_read_memory<int8_t, uint8_t, memory_read_byte> rsb("memory.readsbyte");
35 lua_read_memory<uint16_t, uint16_t, memory_read_word> ruw("memory.readword");
36 lua_read_memory<int16_t, uint16_t, memory_read_word> rsw("memory.readsword");
37 lua_read_memory<uint32_t, uint32_t, memory_read_dword> rud("memory.readdword");
38 lua_read_memory<int32_t, uint32_t, memory_read_dword> rsd("memory.readsdword");
39 lua_read_memory<uint64_t, uint64_t, memory_read_qword> ruq("memory.readqword");
40 lua_read_memory<int64_t, uint64_t, memory_read_qword> rsq("memory.readsqword");
41 lua_write_memory<uint8_t, memory_write_byte> wb("memory.writebyte");
42 lua_write_memory<uint16_t, memory_write_word> ww("memory.writeword");
43 lua_write_memory<uint32_t, memory_write_dword> wd("memory.writedword");
44 lua_write_memory<uint64_t, memory_write_qword> wq("memory.writeqword");