Some core debugging features:
- Lua function hashing core state - Command to dump core state to file.
This commit is contained in:
parent
18663a4caa
commit
22a41d1094
2 changed files with 26 additions and 0 deletions
|
@ -14,6 +14,7 @@
|
||||||
#include "core/settings.hpp"
|
#include "core/settings.hpp"
|
||||||
|
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
struct moviefile our_movie;
|
struct moviefile our_movie;
|
||||||
struct loaded_rom* our_rom;
|
struct loaded_rom* our_rom;
|
||||||
|
@ -99,6 +100,17 @@ namespace
|
||||||
our_movie.authors[index] = g;
|
our_movie.authors[index] = g;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function_ptr_command<const std::string&> dump_coresave("dump-coresave", "Dump bsnes core state",
|
||||||
|
"Syntax: dump-coresave <name>\nDumps core save to <name>\n",
|
||||||
|
[](const std::string& name) throw(std::bad_alloc, std::runtime_error) {
|
||||||
|
auto x = save_core_state();
|
||||||
|
x.resize(x.size() - 32);
|
||||||
|
std::ofstream y(name.c_str(), std::ios::out | std::ios::binary);
|
||||||
|
y.write(&x[0], x.size());
|
||||||
|
y.close();
|
||||||
|
messages << "Saved core state to " << name << std::endl;
|
||||||
|
});
|
||||||
|
|
||||||
void warn_hash_mismatch(const std::string& mhash, const loaded_slot& slot,
|
void warn_hash_mismatch(const std::string& mhash, const loaded_slot& slot,
|
||||||
const std::string& name)
|
const std::string& name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "core/lua-int.hpp"
|
#include "core/lua-int.hpp"
|
||||||
#include "core/memorymanip.hpp"
|
#include "core/memorymanip.hpp"
|
||||||
|
#include "core/rom.hpp"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
@ -80,6 +81,19 @@ namespace
|
||||||
return handle_push_vma(LS, regions, i);
|
return handle_push_vma(LS, regions, i);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const char* hexes = "0123456789ABCDEF";
|
||||||
|
|
||||||
|
function_ptr_luafun hashstate("memory.hash_state", [](lua_State* LS, const std::string& fname) -> int {
|
||||||
|
char hash[64];
|
||||||
|
auto x = save_core_state();
|
||||||
|
size_t offset = x.size() - 32;
|
||||||
|
for(unsigned i = 0; i < 32; i++) {
|
||||||
|
hash[2 * i + 0] = hexes[static_cast<unsigned char>(x[offset + i]) >> 4];
|
||||||
|
hash[2 * i + 1] = hexes[static_cast<unsigned char>(x[offset + i]) & 0xF];
|
||||||
|
}
|
||||||
|
lua_pushlstring(LS, hash, 64);
|
||||||
|
return 1;
|
||||||
|
});
|
||||||
|
|
||||||
lua_read_memory<uint8_t, uint8_t, memory_read_byte> rub("memory.readbyte");
|
lua_read_memory<uint8_t, uint8_t, memory_read_byte> rub("memory.readbyte");
|
||||||
lua_read_memory<int8_t, uint8_t, memory_read_byte> rsb("memory.readsbyte");
|
lua_read_memory<int8_t, uint8_t, memory_read_byte> rsb("memory.readsbyte");
|
||||||
|
|
Loading…
Add table
Reference in a new issue