summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2016-07-03 16:28:06 -0500
committer cracyc <cracyc@users.noreply.github.com>2016-07-03 16:28:06 -0500
commitbccd9ad2715f452bc9997fc7616737f1e89c7ca3 (patch)
treec9d895eea27a4b099722a4e182efe423a4e0cb1f
parent4c20f328395d91147ee2435ffcb0d01b37f39281 (diff)
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.
-rw-r--r--plugins/cheatfind/init.lua6
-rw-r--r--src/frontend/mame/luaengine.cpp9
2 files changed, 9 insertions, 6 deletions
diff --git a/plugins/cheatfind/init.lua b/plugins/cheatfind/init.lua
index a7e850f5385..e529c3d5402 100644
--- a/plugins/cheatfind/init.lua
+++ b/plugins/cheatfind/init.lua
@@ -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
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index 0b03fa8d808..6b401d4f2e5 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -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);