luaengine: add optional arg for physical address space to disable address shift (nw)

----
Cheats created with the cheatfinder won't work with the builtin cheat finder if the cpu has an address bus that isn't 8bits unless the addresses are fixed up.
This commit is contained in:
cracyc 2016-07-03 16:28:06 -05:00
parent 4c20f32839
commit bccd9ad271
2 changed files with 9 additions and 6 deletions

View file

@ -65,10 +65,10 @@ function cheatfind.startplugin()
local j = 1
for i = start, start + size do
if j < 65536 then
temp[j] = string.pack("B", space:read_u8(i))
temp[j] = string.pack("B", space:read_u8(i, true))
j = j + 1
else
block = block .. table.concat(temp) .. string.pack("B", space:read_u8(i))
block = block .. table.concat(temp) .. string.pack("B", space:read_u8(i, true))
temp = {}
j = 1
end
@ -604,7 +604,7 @@ function cheatfind.startplugin()
cheat.script.run = "ram:write(" .. match.addr .. "," .. match.newval .. ")"
else
cheat.space = { cpu = { tag = dev.tag, type = "program" } }
cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ")"
cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ", true)"
end
if match.mode == 1 then
if not _G.ce then

View file

@ -929,9 +929,11 @@ int lua_engine::lua_addr_space::l_mem_read(lua_State *L)
lua_addr_space &lsp = luabridge::Stack<lua_addr_space &>::get(L, 1);
address_space &sp = lsp.space;
luaL_argcheck(L, lua_isnumber(L, 2), 2, "address (integer) expected");
luaL_argcheck(L, lua_isboolean(L, 3) || lua_isnone(L, 3), 3, "optional argument: disable address shift (bool) expected");
offs_t address = lua_tounsigned(L, 2);
T mem_content = 0;
address = sp.address_to_byte(address);
if(!lua_toboolean(L, 3))
address = sp.address_to_byte(address);
switch(sizeof(mem_content) * 8) {
case 8:
mem_content = sp.read_byte(address);
@ -983,10 +985,11 @@ int lua_engine::lua_addr_space::l_mem_write(lua_State *L)
address_space &sp = lsp.space;
luaL_argcheck(L, lua_isnumber(L, 2), 2, "address (integer) expected");
luaL_argcheck(L, lua_isnumber(L, 3), 3, "value (integer) expected");
luaL_argcheck(L, lua_isboolean(L, 4) || lua_isnone(L, 4), 4, "optional argument: disable address shift (bool) expected");
offs_t address = lua_tounsigned(L, 2);
T val = lua_tounsigned(L, 3);
address = sp.address_to_byte(address);
if(!lua_toboolean(L, 4))
address = sp.address_to_byte(address);
switch(sizeof(val) * 8) {
case 8:
sp.write_byte(address, val);