mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
plugins/cheat: link simple cheats
This commit is contained in:
parent
e57ceef927
commit
38a74a3ae0
@ -1,5 +1,5 @@
|
|||||||
-- converter for simple cheats
|
-- converter for simple cheats
|
||||||
-- simple cheats are single address every frame ram, rom or gg,ar cheats in one file called cheat.simple
|
-- simple cheats are single/linked address every frame ram, rom or gg,ar cheats in one file called cheat.simple
|
||||||
--
|
--
|
||||||
-- ram/rom cheat format: <set name>,<cputag|regiontag>,<hex offset>,<b|w|d|q - size>,<hex value>,<desc>
|
-- ram/rom cheat format: <set name>,<cputag|regiontag>,<hex offset>,<b|w|d|q - size>,<hex value>,<desc>
|
||||||
-- only program address space is supported, comments are prepended with ;
|
-- only program address space is supported, comments are prepended with ;
|
||||||
@ -22,10 +22,30 @@ function simple.filename(name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local codefuncs = {}
|
local codefuncs = {}
|
||||||
|
local currcheat
|
||||||
|
|
||||||
local function prepare_rom_cheat(desc, region, addr, val, size, banksize, comp)
|
local function prepare_rom_cheat(desc, region, addr, val, size, banksize, comp)
|
||||||
local cheat = { desc = desc, region = { rom = region } }
|
local cheat
|
||||||
cheat.script = { off = "if on then rom:write_u" .. size .. "(addr, save) end" }
|
if desc:sub(1,1) ~= "^" then
|
||||||
|
currcheat = { desc = desc, region = { rom = region } }
|
||||||
|
currcheat.script = { off = string.format([[
|
||||||
|
if on then
|
||||||
|
for k, v in pairs(addrs) do
|
||||||
|
rom:write_u%d(v.addr, v.save)
|
||||||
|
end
|
||||||
|
end]], size),
|
||||||
|
on = string.format([[
|
||||||
|
addrs = {
|
||||||
|
--flag
|
||||||
|
}
|
||||||
|
on = true
|
||||||
|
for k, v in pairs(addrs) do
|
||||||
|
v.save = rom:read_u%d(v.addr)
|
||||||
|
rom:write_u%d(v.addr, v.val)
|
||||||
|
end]], size, size) }
|
||||||
|
cheat = currcheat
|
||||||
|
|
||||||
|
end
|
||||||
if banksize and comp then
|
if banksize and comp then
|
||||||
local rom = manager:machine():memory().regions[region]
|
local rom = manager:machine():memory().regions[region]
|
||||||
local bankaddr = addr & (banksize - 1)
|
local bankaddr = addr & (banksize - 1)
|
||||||
@ -43,17 +63,17 @@ local function prepare_rom_cheat(desc, region, addr, val, size, banksize, comp)
|
|||||||
error("rom cheat compare value not found " .. desc)
|
error("rom cheat compare value not found " .. desc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
cheat.script.on = string.format([[
|
currcheat.script.on = currcheat.script.on:gsub("%-%-flag", string.format("{addr = %d, val = %d},\n--flag", addr, val), 1)
|
||||||
on = true
|
|
||||||
addr = %d
|
|
||||||
save = rom:read_u%d(addr)
|
|
||||||
rom:write_u%d(addr, %d)]], addr, size, size, val)
|
|
||||||
return cheat
|
return cheat
|
||||||
end
|
end
|
||||||
|
|
||||||
local function prepare_ram_cheat(desc, tag, addr, val, size)
|
local function prepare_ram_cheat(desc, tag, addr, val, size)
|
||||||
local cheat = { desc = desc, space = { cpup = { tag = tag, type = "program" } } }
|
local cheat
|
||||||
cheat.script = { run = "cpup:write_u" .. size .. "(" .. addr .. "," .. val .. ", true)" }
|
if desc:sub(1,1) ~= "^" then
|
||||||
|
currcheat = { desc = desc, space = { cpup = { tag = tag, type = "program" } }, script = { run = "" } }
|
||||||
|
cheat = currcheat
|
||||||
|
end
|
||||||
|
currcheat.script.run = currcheat.script.run .. " cpup:write_u" .. size .. "(" .. addr .. "," .. val .. ", true)"
|
||||||
return cheat
|
return cheat
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -292,6 +312,7 @@ function simple.conv_cheat(data)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
currcheat = nil
|
||||||
return cheats
|
return cheats
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user