1
0
Fork 0
mirror of https://github.com/notwa/mm synced 2024-06-29 05:17:12 -07:00
mm/Lua/event flag monitor.lua

76 lines
1.9 KiB
Lua
Raw Normal View History

2015-04-22 16:51:27 -07:00
require "boilerplate"
2015-04-26 00:18:33 -07:00
require "addrs.init"
2015-04-22 16:51:27 -07:00
local ignore = {
2015-04-25 23:23:41 -07:00
-- every time a scene (un)loads
['92,7=0 (weg)'] = true,
2015-04-22 16:51:27 -07:00
['92,7=1 (weg)'] = true,
2015-04-25 23:23:41 -07:00
-- night transition available
['05,2=0 (inf)'] = true,
['05,2=1 (inf)'] = true,
2015-04-22 16:51:27 -07:00
-- daily postman crap
['27,6=0 (weg)'] = true,
['27,7=0 (weg)'] = true,
['28,0=0 (weg)'] = true,
['28,1=0 (weg)'] = true,
['28,2=0 (weg)'] = true,
['27,6=1 (weg)'] = true,
['27,7=1 (weg)'] = true,
['28,0=1 (weg)'] = true,
['28,1=1 (weg)'] = true,
['28,2=1 (weg)'] = true,
}
function poop(x, x1, i, name)
local now = emu.framecount()
local diff = bit.bxor(x, x1)
for which = 0, 7 do
if bit.band(diff, 2^which) ~= 0 then
local state = bit.band(x, 2^which) ~= 0 and 1 or 0
local str = ('%02i,%i=%i (%s)'):format(i, which, state, name)
if not ignore[str] then
printf('%s @%i', str, now)
gui.addmessage(str)
end
end
end
end
2015-04-25 23:54:04 -07:00
FlagMonitor = Class()
2015-04-26 00:18:33 -07:00
function FlagMonitor:init(name, a)
2015-04-25 23:54:04 -07:00
self.name = name
2015-04-26 00:18:33 -07:00
self.begin = a.addr
self.len = a.type
2015-04-25 23:54:04 -07:00
self.once = false
self.old_bytes = {}
end
function FlagMonitor:diff()
2015-04-22 16:51:27 -07:00
local bytes = mainmemory.readbyterange(self.begin, self.len)
local old_bytes = self.old_bytes
if self.once then
for k, v in pairs(bytes) do
local i = tonumber(k) - self.begin
local x = tonumber(v)
local x1 = tonumber(old_bytes[k])
if x ~= x1 then
poop(x, x1, i, self.name)
end
end
end
self.old_bytes = bytes
self.once = true
end
2015-04-26 00:18:33 -07:00
local weg = FlagMonitor('weg', addrs.week_event_reg)
local inf = FlagMonitor('inf', addrs.event_inf)
2015-05-01 06:16:38 -07:00
--local mmb = FlagMonitor('mmb', A(0x24405A, 3))
local mmb = FlagMonitor('mmb', A(0x1F3F3A, 3))
2015-04-22 16:51:27 -07:00
while true do
2015-04-25 23:54:04 -07:00
weg:diff()
inf:diff()
2015-05-01 06:16:38 -07:00
mmb:diff()
2015-04-22 16:51:27 -07:00
emu.frameadvance()
end