From bccd9ad2715f452bc9997fc7616737f1e89c7ca3 Mon Sep 17 00:00:00 2001 From: cracyc Date: Sun, 3 Jul 2016 16:28:06 -0500 Subject: [PATCH] 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. --- plugins/cheatfind/init.lua | 6 +++--- src/frontend/mame/luaengine.cpp | 9 ++++++--- 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::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);