From ceed4f622ff9f3a863caf6c993b0dc41a4100f53 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Mon, 21 Apr 2014 15:54:36 +0300 Subject: [PATCH] Merge multiple versions of get_read_address() into one --- include/lua/internal.hpp | 2 + src/emulation/bsnes-legacy/bitmap.cpp | 26 +---------- src/lua/memory-compare.cpp | 19 +------- src/lua/memory.cpp | 62 +++++++++++++-------------- 4 files changed, 35 insertions(+), 74 deletions(-) diff --git a/include/lua/internal.hpp b/include/lua/internal.hpp index 52bf0786..577380cb 100644 --- a/include/lua/internal.hpp +++ b/include/lua/internal.hpp @@ -36,5 +36,7 @@ extern uint64_t lua_timer_hook_time; extern void* synchronous_paint_ctx; void lua_renderq_run(lua_render_context* ctx, void* synchronous_paint_ctx); +uint64_t lua_get_vmabase(const std::string& vma); +uint64_t lua_get_read_address(lua::parameters& P); #endif diff --git a/src/emulation/bsnes-legacy/bitmap.cpp b/src/emulation/bsnes-legacy/bitmap.cpp index 433a49a5..e044676a 100644 --- a/src/emulation/bsnes-legacy/bitmap.cpp +++ b/src/emulation/bsnes-legacy/bitmap.cpp @@ -5,22 +5,12 @@ namespace { - uint64_t get_vmabase(lua::state& L, const std::string& vma) - { - for(auto i : lsnes_memory.get_regions()) - if(i->name == vma) - return i->base; - throw std::runtime_error("No such VMA"); - } - template int dump_sprite(lua::state& L, lua::parameters& P) { - std::string vma; lua_bitmap* b; uint64_t addr; uint32_t width, height; - uint64_t vmabase = 0; size_t stride1 = 32; size_t stride2; @@ -31,15 +21,10 @@ namespace if((width | height) & 8) throw std::runtime_error("The image size must be multiple of 8x8"); } - if(P.is_string()) { - P(vma); - vmabase = get_vmabase(L, vma); - } - P(addr); + addr = lua_get_read_address(P); if(create) P(width, height); P(P.optional(stride2, 512)); - addr += vmabase; if(create) b = lua::_class::create(L, width * 8, height * 8); @@ -101,10 +86,8 @@ namespace template int dump_palette(lua::state& L, lua::parameters& P) { - std::string vma; uint64_t addr; bool full, ftrans; - uint64_t vmabase = 0; lua_palette* p; if(!create) { @@ -114,15 +97,10 @@ namespace throw std::runtime_error("Palette to read must be 16 or 256 colors"); full = (ccount == 256); } - if(P.is_string()) { - P(vma); - vmabase = get_vmabase(L, vma); - } - P(addr); + addr = lua_get_read_address(P); if(create) P(full); P(ftrans); - addr += vmabase; size_t ps = full ? 256 : 16; if(create) { diff --git a/src/lua/memory-compare.cpp b/src/lua/memory-compare.cpp index 311ff805..dd58d128 100644 --- a/src/lua/memory-compare.cpp +++ b/src/lua/memory-compare.cpp @@ -4,23 +4,6 @@ namespace { - uint64_t get_vmabase(const std::string& vma) - { - for(auto i : lsnes_memory.get_regions()) - if(i->name == vma) - return i->base; - throw std::runtime_error("No such VMA"); - } - - uint64_t get_read_address(lua::parameters& P) - { - uint64_t vmabase = 0; - if(P.is_string()) - vmabase = get_vmabase(P.arg()); - auto addr = P.arg(); - return addr + vmabase; - } - class compare_obj { public: @@ -81,7 +64,7 @@ namespace uint64_t addr, size; uint64_t stride = 0, rows = 1; - addr = get_read_address(P); + addr = lua_get_read_address(P); P(size, P.optional(rows, 1)); if(rows > 1) P(stride); diff --git a/src/lua/memory.cpp b/src/lua/memory.cpp index 0002637d..31a47200 100644 --- a/src/lua/memory.cpp +++ b/src/lua/memory.cpp @@ -13,25 +13,25 @@ #include "library/hex.hpp" #include "library/int24.hpp" +uint64_t lua_get_vmabase(const std::string& vma) +{ + for(auto i : lsnes_memory.get_regions()) + if(i->name == vma) + return i->base; + throw std::runtime_error("No such VMA"); +} + +uint64_t lua_get_read_address(lua::parameters& P) +{ + uint64_t vmabase = 0; + if(P.is_string()) + vmabase = lua_get_vmabase(P.arg()); + auto addr = P.arg(); + return addr + vmabase; +} + namespace { - uint64_t get_vmabase(const std::string& vma) - { - for(auto i : lsnes_memory.get_regions()) - if(i->name == vma) - return i->base; - throw std::runtime_error("No such VMA"); - } - - uint64_t get_read_address(lua::parameters& P) - { - uint64_t vmabase = 0; - if(P.is_string()) - vmabase = get_vmabase(P.arg()); - auto addr = P.arg(); - return addr + vmabase; - } - template void do_rw(lua::state& L, uint64_t addr, bool wrflag) @@ -46,7 +46,7 @@ namespace template int lua_read_memory(lua::state& L, lua::parameters& P) { - auto addr = get_read_address(P); + auto addr = lua_get_read_address(P); L.pushnumber(static_cast((lsnes_memory.*rfun)(addr))); return 1; } @@ -54,7 +54,7 @@ namespace template int lua_write_memory(lua::state& L, lua::parameters& P) { - auto addr = get_read_address(P); + auto addr = lua_get_read_address(P); T value = P.arg(); (lsnes_memory.*wfun)(addr, value); return 0; @@ -343,7 +343,7 @@ namespace addr = 0xFFFFFFFFFFFFFFFFULL; P.skip(); } else if(type != DEBUG_TRACE) - addr = get_read_address(P); + addr = lua_get_read_address(P); else P(addr); P(P.function(lfn)); @@ -375,7 +375,7 @@ namespace aperture_make_fun(L.get_master(), 0, 0xFFFFFFFFFFFFFFFFULL); return 1; } - auto addr = get_read_address(P); + auto addr = lua_get_read_address(P); auto size = P.arg(); if(!size) throw std::runtime_error("Aperture with zero size is not valid"); @@ -428,7 +428,7 @@ namespace else addr--; } else if(P.is_string()) { - vmabase = get_vmabase(P.arg()); + vmabase = lua_get_vmabase(P.arg()); continue; } else addr = P.arg(); @@ -458,7 +458,7 @@ namespace { uint64_t addr, value; - addr = get_read_address(P); + addr = lua_get_read_address(P); if(P.is_novalue()) { debug_clear_cheat(addr); @@ -522,7 +522,7 @@ namespace bool mappable = true; char buffer[BLOCKSIZE]; - addr = get_read_address(P); + addr = lua_get_read_address(P); P(size); if(extra) { P(P.optional(rows, 1)); @@ -604,7 +604,7 @@ namespace uint64_t stride = 0, rows = 1; bool equals = true, mappable = true; - addr = get_read_address(P); + addr = lua_get_read_address(P); P(daddr, size, P.optional(rows, 1)); if(rows > 1) P(stride); @@ -658,7 +658,7 @@ namespace { uint64_t addr, size; - addr = get_read_address(P); + addr = lua_get_read_address(P); P(size); L.newtable(); @@ -683,7 +683,7 @@ namespace uint64_t addr, size; int ltbl; - addr = get_read_address(P); + addr = lua_get_read_address(P); P(size, P.table(ltbl)); char buffer[BLOCKSIZE]; @@ -777,13 +777,11 @@ namespace int lua_mmap_struct::map(lua::state& L, lua::parameters& P) { std::string name, type; - uint64_t vmabase = 0, addr; + uint64_t addr; P(P.skipped(), name); - if(P.is_string()) - vmabase = get_vmabase(P.arg()); - P(addr, type); - addr += vmabase; + addr = lua_get_read_address(P); + P(type); if(type == "byte") mappings[name] = mapping(addr, do_rw,