From b2c370ae2a9ba189c615599e7088526886ddb106 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 18 Feb 2015 07:29:17 +0100 Subject: [PATCH] =?UTF-8?q?Backport=20'=20allocate=20vram=20on=20heap=20to?= =?UTF-8?q?=20reduce=20field=20offset=20sizes=20for=20easier=20access=20?= =?UTF-8?q?=E2=80=A6=20=E2=80=A6on=20ARM'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libgambatte/src/mem/cartridge.cpp | 1 + libgambatte/src/mem/memptrs.cpp | 17 +++++------------ libgambatte/src/mem/memptrs.h | 12 +++++------- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/libgambatte/src/mem/cartridge.cpp b/libgambatte/src/mem/cartridge.cpp index 758374d..4a1d99a 100644 --- a/libgambatte/src/mem/cartridge.cpp +++ b/libgambatte/src/mem/cartridge.cpp @@ -398,6 +398,7 @@ namespace gambatte void Cartridge::setStatePtrs(SaveState &state) { + state.mem.vram.set(memptrs_.vramdata(), memptrs_.vramdataend() - memptrs_.vramdata()); state.mem.sram.set(memptrs_.rambankdata(), memptrs_.rambankdataend() - memptrs_.rambankdata()); state.mem.wram.set(memptrs_.wramdata(0), memptrs_.wramdataend() - memptrs_.wramdata(0)); } diff --git a/libgambatte/src/mem/memptrs.cpp b/libgambatte/src/mem/memptrs.cpp index 7fa5e89..8685e97 100644 --- a/libgambatte/src/mem/memptrs.cpp +++ b/libgambatte/src/mem/memptrs.cpp @@ -33,8 +33,6 @@ namespace gambatte , wsrambankptr_(0) ,memchunk_(0) , rambankdata_(0) - , rdisabledRam_(0) - , wdisabledRam_(0) , wramdataend_(0) , oamDmaSrc_(oam_dma_src_off) { @@ -50,21 +48,16 @@ namespace gambatte delete []memchunk_; memchunk_ = new unsigned char[ 0x4000 - + rombanks * 0x4000ul + + rombanks * 0x4000ul + 0x4000 + rambanks * 0x2000ul + wrambanks * 0x1000ul + 0x4000]; romdata_[0] = romdata(); - rambankdata_ = romdata_[0] + rombanks * 0x4000ul; + rambankdata_ = romdata_[0] + rombanks * 0x4000ul + 0x4000; wramdata_[0] = rambankdata_ + rambanks * 0x2000ul; wramdataend_ = wramdata_[0] + wrambanks * 0x1000ul; - rdisabledRam_ = wramdata_[0] + wrambanks * 0x1000ul; - wdisabledRam_ = rdisabledRam_ + 0x2000; - - /* TODO - get rid of rdisabledRam_ */ - std::memset(rdisabledRam_, 0xFF, 0x2000); std::memset(rdisabledRamw(), 0xFF, 0x2000); oamDmaSrc_ = oam_dma_src_off; @@ -97,10 +90,10 @@ namespace gambatte unsigned char *const srambankptr = flags & RTC_EN ? 0 : (rambankdata() != rambankdataend() - ? rambankdata_ + rambank * 0x2000ul - 0xA000 : wdisabledRam_ - 0xA000); + ? rambankdata_ + rambank * 0x2000ul - 0xA000 : wdisabledRam() - 0xA000); - rsrambankptr_ = (flags & READ_EN) && srambankptr != wdisabledRam_ - 0xA000 ? srambankptr : rdisabledRam_ - 0xA000; - wsrambankptr_ = flags & WRITE_EN ? srambankptr : wdisabledRam_ - 0xA000; + rsrambankptr_ = (flags & READ_EN) && srambankptr != wdisabledRam() - 0xA000 ? srambankptr : rdisabledRamw() - 0xA000; + wsrambankptr_ = flags & WRITE_EN ? srambankptr : wdisabledRam() - 0xA000; rmem_[0xB] = rmem_[0xA] = rsrambankptr_; wmem_[0xB] = wmem_[0xA] = wsrambankptr_; disconnectOamDmaAreas(); diff --git a/libgambatte/src/mem/memptrs.h b/libgambatte/src/mem/memptrs.h index 0d2eded..e10a18c 100644 --- a/libgambatte/src/mem/memptrs.h +++ b/libgambatte/src/mem/memptrs.h @@ -75,7 +75,7 @@ namespace gambatte unsigned char * romdataend() const { - return rambankdata_; + return rambankdata_ - 0x4000; } unsigned char * wramdata(unsigned area) const @@ -85,7 +85,7 @@ namespace gambatte unsigned char * wramdataend() const { - return rdisabledRam_; + return wramdataend_; } unsigned char * rambankdata() const @@ -100,7 +100,7 @@ namespace gambatte const unsigned char * rdisabledRam() const { - return rdisabledRam_; + return rdisabledRamw(); } const unsigned char * rsrambankptr() const @@ -131,17 +131,15 @@ namespace gambatte void setOamDmaSrc(OamDmaSrc oamDmaSrc); private: - const unsigned char *rmem_[0x10]; - unsigned char *wmem_[0x10]; unsigned char *romdata_[2]; unsigned char *wramdata_[2]; + const unsigned char *rmem_[0x10]; + unsigned char *wmem_[0x10]; unsigned char *vrambankptr_; unsigned char *rsrambankptr_; unsigned char *wsrambankptr_; unsigned char *memchunk_; unsigned char *rambankdata_; - unsigned char *rdisabledRam_; - unsigned char *wdisabledRam_; unsigned char *wramdataend_; OamDmaSrc oamDmaSrc_; MemPtrs(const MemPtrs &);