Skip to content

Instantly share code, notes, and snippets.

@taotao54321
Created August 12, 2018 15:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taotao54321/adb96c2bca71bf8158cedebc5be197b2 to your computer and use it in GitHub Desktop.
Save taotao54321/adb96c2bca71bf8158cedebc5be197b2 to your computer and use it in GitHub Desktop.
ドクターマリオ (FC) NMI戻りアドレス表示 & 色すり替えバグ支援
--[[
ドクターマリオ (FC) NMI戻りアドレス表示 (for FCEUX)
色すり替えが可能な場合、戻りアドレスが緑色で表示し、さらに該当マスを緑
色で囲って表示する。
※色すり替えが可能かどうかの判定は割とアバウトなので、できない場合もあ
りうる。厳密に知りたければ頑張ってアセンブリを読んでください><
--]]
local function carry_is_set()
return bit.band(memory.getregister("p"),1) == 1
end
local function get_rti_addr()
local sp = memory.getregister("s")
return 0x100*memory.readbyte(0x100+sp+3) + memory.readbyte(0x100+sp+2)
end
local function changeable_h(rti_addr)
return 0x921A <= rti_addr and rti_addr <= 0x923B
end
local function changeable_v(rti_addr)
return 0x947B <= rti_addr and rti_addr <= 0x94A1
end
local function main()
local idx = 0
local rti_addr = 0
memory.registerexec(0x8005, function()
idx = memory.readbyte(0x59)
rti_addr = get_rti_addr()
end)
emu.registerafter(function()
local text_color = "white"
if changeable_h(rti_addr) or changeable_v(rti_addr) then
text_color = "green"
local r = math.floor(idx / 8)
local c = idx % 8
local x = 96 + 8*c
local y = 80 + 8*r
gui.rect(x, y, x+8, y+8, nil, "green")
end
gui.text(192, 16, string.format("0x%04X", rti_addr), text_color)
end)
end
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment