214 lines
5.3 KiB
Lua
214 lines
5.3 KiB
Lua
|
-- v0.1a (far from done!)
|
||
|
-- include some iup stuff and take care of cleanup
|
||
|
require 'auxlib';
|
||
|
|
||
|
local function toHexStr(n)
|
||
|
return string.format("%X",n);
|
||
|
end;
|
||
|
|
||
|
local mems;
|
||
|
local memstart = 0;
|
||
|
local memend = 0x200;
|
||
|
local running = false;
|
||
|
local removetop = 0;
|
||
|
|
||
|
local from = iup.text{value="0x0000"};
|
||
|
local till = iup.text{value="0x0100"};
|
||
|
local output = iup.multiline{ expand="YES" };
|
||
|
local changecheck = iup.toggle{title="Remove changed addresses"};
|
||
|
local equalcheck = iup.toggle{title="Remove unchanged addresses"};
|
||
|
local init = iup.button{title="Init"};
|
||
|
init.action =
|
||
|
function(self)
|
||
|
mems = {};
|
||
|
memstart = math.min(0xFFFE, math.max(0, tonumber(from.value)));
|
||
|
memend = math.min(0xFFFF, math.max(1, tonumber(till.value)));
|
||
|
for i=(memstart+1),(memend+1) do
|
||
|
mems[i] = memory.readbyte(i-1);
|
||
|
end;
|
||
|
end;
|
||
|
local set = iup.button{title="Set"};
|
||
|
set.action =
|
||
|
function(self)
|
||
|
if (mems) then
|
||
|
for i=(memstart+1),(memend+1) do
|
||
|
if (mems[i]) then
|
||
|
mems[i] = memory.readbyte(i);
|
||
|
end;
|
||
|
end;
|
||
|
step:action();
|
||
|
end;
|
||
|
end;
|
||
|
local start = iup.button{title="Run"};
|
||
|
start.action =
|
||
|
function(self)
|
||
|
if (not mems) then init:action(); end; -- same as pressing the init button
|
||
|
running = true;
|
||
|
end;
|
||
|
local stop = iup.button{title="Stop"};
|
||
|
stop.action =
|
||
|
function(self)
|
||
|
running = false;
|
||
|
end;
|
||
|
local step = iup.button{title="Step"};
|
||
|
step.action =
|
||
|
function(self)
|
||
|
if (not mems) then init:action(); end;
|
||
|
local s = '';
|
||
|
local count = 0;
|
||
|
gui.text(50,50,"change: "..changecheck.value.." equal: "..equalcheck.value);
|
||
|
for i=(memstart+1),(memend+1) do
|
||
|
local nowval = memory.readbyte(i-1);
|
||
|
if (
|
||
|
mems[i] and -- no memory, no need to print it
|
||
|
( not running or -- always print (existing) values when the bot is not running
|
||
|
(
|
||
|
(changecheck.value == "OFF" or mems[i] == nowval) and -- its ok, we're just removing unequal values
|
||
|
(equalcheck.value == "OFF" or mems[i] ~= nowval) -- its ok, we're just removing equal values
|
||
|
)
|
||
|
)
|
||
|
) then
|
||
|
if (removetop > 0) then -- delete this (should be processed even while not running)
|
||
|
mems[i] = false;
|
||
|
removetop = removetop - 1;
|
||
|
else
|
||
|
count = count + 1;
|
||
|
s = s.."0x"..toHexStr(i-1)..": "..toHexStr(nowval).."\n";
|
||
|
end;
|
||
|
elseif (mems[i] and (removetop > 0 or running)) then -- we're still deleting results
|
||
|
mems[i] = false;
|
||
|
if (removetop > 0) then removetop = removetop - 1; end;
|
||
|
end;
|
||
|
end;
|
||
|
output.value = "Have "..count.." addresses:\n"..s;
|
||
|
end;
|
||
|
local removetext = iup.text{};
|
||
|
local remove = iup.button{title="del",size="30x"};
|
||
|
remove.action =
|
||
|
function(self)
|
||
|
removetop = tonumber(removetext.value);
|
||
|
removetext.value = tonumber(removetext.value).."";
|
||
|
end;
|
||
|
local fewertext = iup.text{};
|
||
|
local fewer = iup.button{title="del",size="30x"};
|
||
|
fewer.action =
|
||
|
function(self)
|
||
|
local than = tonumber(fewertext.value);
|
||
|
if (mems and than) then
|
||
|
for i=memstart,memend do
|
||
|
if (mems[i] and mems[i] < than) then
|
||
|
mems[i] = false;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
step:action();
|
||
|
end;
|
||
|
local moretext = iup.text{};
|
||
|
local more = iup.button{title="del",size="30x"};
|
||
|
more.action =
|
||
|
function(self)
|
||
|
local than = tonumber(moretext.value);
|
||
|
if (mems and than) then
|
||
|
for i=memstart,memend do
|
||
|
if (mems[i] and mems[i] > than) then
|
||
|
mems[i] = false;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
step:action();
|
||
|
end;
|
||
|
local sametext = iup.text{};
|
||
|
local same = iup.button{title="del",size="30x"};
|
||
|
same.action =
|
||
|
function(self)
|
||
|
local than = tonumber(sametext.value);
|
||
|
if (mems and than) then
|
||
|
for i=memstart,memend do
|
||
|
if (mems[i] and mems[i] == than) then
|
||
|
mems[i] = false;
|
||
|
end;
|
||
|
end;
|
||
|
end;
|
||
|
step:action();
|
||
|
end;
|
||
|
|
||
|
dialogs = dialogs + 1;
|
||
|
handles[dialogs] =
|
||
|
iup.dialog{
|
||
|
iup.vbox{
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
iup.label{title="Start offset",size="50x"},
|
||
|
from
|
||
|
},
|
||
|
iup.hbox{
|
||
|
iup.label{title="End offset",size="50x"},
|
||
|
till
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
remove,
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="Remove top",size="50x"},
|
||
|
iup.fill{size="5"},
|
||
|
removetext,
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="(next step)"},
|
||
|
removetop
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
fewer,
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="When less than: ",size="70x"},
|
||
|
fewertext
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
more,
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="When more than: ",size="70x"},
|
||
|
moretext
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
same,
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="When equal to: ",size="70x"},
|
||
|
sametext
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
init,
|
||
|
iup.fill{size="5"},
|
||
|
start,
|
||
|
iup.fill{size="5"},
|
||
|
stop,
|
||
|
iup.fill{size="5"},
|
||
|
step,
|
||
|
iup.fill{size="5"},
|
||
|
set
|
||
|
},
|
||
|
iup.fill{size="5"},
|
||
|
iup.label{title="Filters below are automatically applied when you"},
|
||
|
iup.label{title="press run or press the step button."},
|
||
|
iup.fill{size="5"},
|
||
|
changecheck,
|
||
|
equalcheck,
|
||
|
iup.fill{size="5"},
|
||
|
iup.hbox{
|
||
|
output
|
||
|
}
|
||
|
},
|
||
|
title="Lua Register Finder",
|
||
|
size="200x300"
|
||
|
};
|
||
|
handles[dialogs]:showxy(iup.CENTER, iup.CENTER);
|
||
|
|
||
|
|
||
|
|
||
|
while (true) do
|
||
|
step:action(); -- same as pressing the step button
|
||
|
FCEU.frameadvance();
|
||
|
end;
|