From 44bab83d686247b62e3607bb41f36bd61b703ed1 Mon Sep 17 00:00:00 2001 From: byuu Date: Tue, 20 Apr 2010 22:33:44 +0000 Subject: [PATCH] Update to bsnes v064r04 release. Fixes S-CPU debugger breakpoint issue. libsnes always returns 0 for "no memory present" now, never -1U. [Meanwhile, in bsnes-python 2010-04-20...] Won't error if there's no joypad present. Swaps menu and status bars with a toolbar. Adds keyboard support - you can use both a keyboard and joypad for input now. Won't crash if RAM doesn't exist yet. Won't crash if game uses no RAM. --- src/snes/debugger/debugger.cpp | 11 +++++------ src/snes/libsnes/libsnes.cpp | 23 ++++++++++++++--------- src/snes/snes.hpp | 2 +- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/snes/debugger/debugger.cpp b/src/snes/debugger/debugger.cpp index 5498ba14..dc70dfec 100644 --- a/src/snes/debugger/debugger.cpp +++ b/src/snes/debugger/debugger.cpp @@ -6,12 +6,11 @@ void Debugger::breakpoint_test(Debugger::Breakpoint::Source source, Debugger::Br for(unsigned i = 0; i < Breakpoints; i++) { if(breakpoint[i].enabled == false) continue; - //shadow S-CPU WRAM addresses ($00-3f|80-bf:0000-1fff mirrors $7e:0000-1fff) - if(source == Debugger::Breakpoint::Source::CPUBus && ( - ((breakpoint[i].addr & 0x40e000) == 0x000000) || //$00-3f|80-bf:0000-1fff - ((breakpoint[i].addr & 0xffe000) == 0x7e0000) //$7e:0000-1fff - ) - ) { + bool source_wram = ((breakpoint[i].addr & 0x40e000) == 0x000000) || ((breakpoint[i].addr & 0xffe000) == 0x7e0000); + bool offset_wram = ((addr & 0x40e000) == 0x000000) || ((addr & 0xffe000) == 0x7e0000); + + if(source == Debugger::Breakpoint::Source::CPUBus && source_wram && offset_wram) { + //shadow S-CPU WRAM addresses ($00-3f|80-bf:0000-1fff mirrors $7e:0000-1fff) if((breakpoint[i].addr & 0x1fff) != (addr & 0x1fff)) continue; } else { if(breakpoint[i].addr != addr) continue; diff --git a/src/snes/libsnes/libsnes.cpp b/src/snes/libsnes/libsnes.cpp index 3292a908..c90ca993 100644 --- a/src/snes/libsnes/libsnes.cpp +++ b/src/snes/libsnes/libsnes.cpp @@ -195,19 +195,24 @@ uint8_t* snes_get_memory_data(unsigned id) { case SNES_MEMORY_GAME_BOY_RAM: return SNES::memory::gbram.data(); case SNES_MEMORY_GAME_BOY_RTC: return SNES::memory::gbrtc.data(); } + return 0; } unsigned snes_get_memory_size(unsigned id) { + unsigned size = 0; + switch(id) { - case SNES_MEMORY_CARTRIDGE_RAM: return SNES::memory::cartram.size(); - case SNES_MEMORY_CARTRIDGE_RTC: return SNES::memory::cartrtc.size(); - case SNES_MEMORY_BSX_RAM: return SNES::memory::bsxram.size(); - case SNES_MEMORY_BSX_PRAM: return SNES::memory::bsxpram.size(); - case SNES_MEMORY_SUFAMI_TURBO_A_RAM: return SNES::memory::stAram.size(); - case SNES_MEMORY_SUFAMI_TURBO_B_RAM: return SNES::memory::stBram.size(); - case SNES_MEMORY_GAME_BOY_RAM: return SNES::memory::gbram.size(); - case SNES_MEMORY_GAME_BOY_RTC: return SNES::memory::gbrtc.size(); + case SNES_MEMORY_CARTRIDGE_RAM: size = SNES::memory::cartram.size(); break; + case SNES_MEMORY_CARTRIDGE_RTC: size = SNES::memory::cartrtc.size(); break; + case SNES_MEMORY_BSX_RAM: size = SNES::memory::bsxram.size(); break; + case SNES_MEMORY_BSX_PRAM: size = SNES::memory::bsxpram.size(); break; + case SNES_MEMORY_SUFAMI_TURBO_A_RAM: size = SNES::memory::stAram.size(); break; + case SNES_MEMORY_SUFAMI_TURBO_B_RAM: size = SNES::memory::stBram.size(); break; + case SNES_MEMORY_GAME_BOY_RAM: size = SNES::memory::gbram.size(); break; + case SNES_MEMORY_GAME_BOY_RTC: size = SNES::memory::gbrtc.size(); break; } - return 0; + + if(size == -1U) size = 0; + return size; } diff --git a/src/snes/snes.hpp b/src/snes/snes.hpp index 2d255c3c..dd6d96e4 100644 --- a/src/snes/snes.hpp +++ b/src/snes/snes.hpp @@ -1,4 +1,4 @@ -static const char bsnesVersion[] = "064.03"; +static const char bsnesVersion[] = "064.04"; static const char bsnesTitle[] = "bsnes"; static const unsigned bsnesSerializerVersion = 10;