From a59fab20d8d9d8d85e56f7b764cea5fb6f6eb37f Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Thu, 7 Jun 2012 16:36:45 +0300 Subject: [PATCH 1/2] Mirror some internal BSNES structures into virtual memory space --- src/core/memorymanip.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/core/memorymanip.cpp b/src/core/memorymanip.cpp index 6a2c4111..bea9bbcc 100644 --- a/src/core/memorymanip.cpp +++ b/src/core/memorymanip.cpp @@ -56,6 +56,7 @@ namespace std::vector memory_regions; uint64_t linear_ram_size = 0; bool system_little_endian = true; + std::map> ptrmap; uint8_t snes_bus_iospace_rw(uint64_t offset, uint8_t data, bool write) { @@ -65,6 +66,17 @@ namespace return SNES::bus.read(offset); } + uint8_t ptrtable_iospace_rw(uint64_t offset, uint8_t data, bool write) + { + uint16_t entry = offset >> 4; + if(!ptrmap.count(entry)) + return 0; + uint64_t val = ((offset & 15) < 8) ? ptrmap[entry].first : ptrmap[entry].second; + uint8_t byte = offset & 7; + //These things are always little-endian. + return (val >> (8 * byte)); + } + struct translated_address translate_address(uint64_t rawaddr) throw() { struct translated_address t; @@ -155,6 +167,13 @@ namespace return base + size; } + uint64_t map_internal(const std::string& name, uint16_t index, void* memory, size_t memsize) + { + ptrmap[index] = std::make_pair(reinterpret_cast(memory), static_cast(memsize)); + return create_region(name, 0x101000000 + index * 0x1000000, reinterpret_cast(memory), + memsize, true, true); + } + uint64_t create_region(const std::string& name, uint64_t base, SNES::MappedRAM& memory, bool readonly, bool native_endian = false) throw(std::bad_alloc) { @@ -256,6 +275,11 @@ void refresh_cart_mappings() throw(std::bad_alloc) create_region("SRAM", 0x10000000, SNES::cartridge.ram, false); create_region("ROM", 0x80000000, SNES::cartridge.rom, true); create_region("BUS", 0x1000000, 0x1000000, snes_bus_iospace_rw); + create_region("PTRTABLE", 0x100000000, 0x100000, ptrtable_iospace_rw); + map_internal("CPU_STATE", 0, &SNES::cpu, sizeof(SNES::cpu)); + map_internal("PPU_STATE", 1, &SNES::ppu, sizeof(SNES::ppu)); + map_internal("SMP_STATE", 2, &SNES::smp, sizeof(SNES::smp)); + map_internal("DSP_STATE", 3, &SNES::dsp, sizeof(SNES::dsp)); switch(get_current_rom_info().first) { case ROMTYPE_BSX: case ROMTYPE_BSXSLOTTED: From 17b92632e58a012bf5d83b87541d21732066808a Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Sat, 9 Jun 2012 19:53:34 +0300 Subject: [PATCH 2/2] Add support of DnD movies/saves into the main window --- src/platform/wxwidgets/mainwindow.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/platform/wxwidgets/mainwindow.cpp b/src/platform/wxwidgets/mainwindow.cpp index 2b95dd75..ff4ece90 100644 --- a/src/platform/wxwidgets/mainwindow.cpp +++ b/src/platform/wxwidgets/mainwindow.cpp @@ -18,6 +18,8 @@ #include "library/string.hpp" #include "library/zip.hpp" +#include + #include #include #include @@ -449,6 +451,18 @@ namespace { return setting::get("moviepath"); } + + class loadfile : public wxFileDropTarget + { + public: + bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames) + { + if(filenames.Count() != 1) + return false; + platform::queue("load " + filenames[0]); + return true; + } + }; } void boot_emulator(loaded_rom& rom, moviefile& movie) @@ -725,6 +739,9 @@ wxwin_mainwindow::wxwin_mainwindow() menu_special(wxT("Capture"), reinterpret_cast(dmenu = new dumper_menu(this, wxID_DUMP_FIRST, wxID_DUMP_LAST))); + + gpanel->SetDropTarget(new loadfile()); + spanel->SetDropTarget(new loadfile()); } void wxwin_mainwindow::request_paint()