void MemPtrs::reset(const unsigned rombanks, const unsigned rambanks, const unsigned wrambanks) { delete []memchunk_; memchunk_len = 0x4000 + rombanks * 0x4000ul + 0x4000 + rambanks * 0x2000ul + wrambanks * 0x1000ul + 0x4000; memchunk_ = new unsigned char[memchunk_len]; romdata_[0] = romdata(); rambankdata_ = romdata_[0] + rombanks * 0x4000ul + 0x4000; wramdata_[0] = rambankdata_ + rambanks * 0x2000ul; wramdataend_ = wramdata_[0] + wrambanks * 0x1000ul; std::memset(rdisabledRamw(), 0xFF, 0x2000); oamDmaSrc_ = OAM_DMA_SRC_OFF; rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; rmem_[0xC] = wmem_[0xC] = wramdata_[0] - 0xC000; rmem_[0xE] = wmem_[0xE] = wramdata_[0] - 0xE000; setRombank(1); setRambank(0, 0); setVrambank(0); setWrambank(1); // we save only the ram areas memchunk_saveoffs = vramdata() - memchunk_; memchunk_savelen = wramdataend() - memchunk_ - memchunk_saveoffs; }
void MemPtrs::reset(unsigned const rombanks, unsigned const rambanks, unsigned const wrambanks) { delete []memchunk_; memchunk_ = new unsigned char[ 0x4000 + rombanks * 0x4000ul + 0x4000 + rambanks * 0x2000ul + wrambanks * 0x1000ul + 0x4000]; romdata_[0] = romdata(); rambankdata_ = romdata_[0] + rombanks * 0x4000ul + 0x4000; wramdata_[0] = rambankdata_ + rambanks * 0x2000ul; wramdataend_ = wramdata_[0] + wrambanks * 0x1000ul; std::memset(rdisabledRamw(), 0xFF, 0x2000); oamDmaSrc_ = oam_dma_src_off; rmem_[0x3] = rmem_[0x2] = rmem_[0x1] = rmem_[0x0] = romdata_[0]; rmem_[0xC] = wmem_[0xC] = wramdata_[0] - 0xC000; rmem_[0xE] = wmem_[0xE] = wramdata_[0] - 0xE000; setRombank(1); setRambank(0, 0); setVrambank(0); setWrambank(1); }