Reduce bsnes115 state size (#3105)
* testing... * more testing... * this is probably a bad idea * well this probably fixes state size issues * time to debug this * oh derp it's just not enough memory in invis heap * let's see if this works? * apparently this breaks slow ppu? * testing... * testing... * testing... * sanity checking * let's try again * i do not know what the fuck is up with this emulator nor do i care enough, state size is still under a mb anyways with slow ppu * oops forgot to commit this * resolve some issues * tweak memory allocation sizes * dont save more cache stuff * wtf was i even thinking here * move comment back to original pos, comment on double loading
This commit is contained in:
parent
7ac2e97cb7
commit
096f24e7c6
Binary file not shown.
|
@ -115,10 +115,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
|
||||||
{
|
{
|
||||||
Filename = "bsnes.wbx",
|
Filename = "bsnes.wbx",
|
||||||
Path = dllPath,
|
Path = dllPath,
|
||||||
SbrkHeapSizeKB = 14 * 1024,
|
SbrkHeapSizeKB = 12 * 1024,
|
||||||
InvisibleHeapSizeKB = 4,
|
InvisibleHeapSizeKB = 136 * 1024, // TODO: Roms get saved here and in mmap, consider consolidating?
|
||||||
MmapHeapSizeKB = 110 * 1024, // TODO: check whether this needs to be larger; it depends on the rom size
|
MmapHeapSizeKB = 33 * 1024, // TODO: check whether this needs to be larger; it depends on the rom size
|
||||||
PlainHeapSizeKB = 0,
|
PlainHeapSizeKB = 1 * 1024,
|
||||||
SealedHeapSizeKB = 0,
|
SealedHeapSizeKB = 0,
|
||||||
SkipCoreConsistencyCheck = comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxCoreConsistencyCheck),
|
SkipCoreConsistencyCheck = comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxCoreConsistencyCheck),
|
||||||
SkipMemoryConsistencyCheck = comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxMemoryConsistencyCheck),
|
SkipMemoryConsistencyCheck = comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxMemoryConsistencyCheck),
|
||||||
|
|
|
@ -6,8 +6,9 @@ bool Memory::GlobalWriteEnable = false;
|
||||||
Bus bus;
|
Bus bus;
|
||||||
|
|
||||||
Bus::~Bus() {
|
Bus::~Bus() {
|
||||||
if(lookup) delete[] lookup;
|
//if(lookup) delete[] lookup;
|
||||||
if(target) delete[] target;
|
//if(target) delete[] target;
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Bus::reset() -> void {
|
auto Bus::reset() -> void {
|
||||||
|
@ -17,11 +18,14 @@ auto Bus::reset() -> void {
|
||||||
counter[id] = 0;
|
counter[id] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lookup) delete[] lookup;
|
//if(lookup) delete[] lookup;
|
||||||
if(target) delete[] target;
|
//if(target) delete[] target;
|
||||||
|
|
||||||
lookup = new uint8 [16 * 1024 * 1024]();
|
//lookup = new uint8 [16 * 1024 * 1024]();
|
||||||
target = new uint32[16 * 1024 * 1024]();
|
//target = new uint32[16 * 1024 * 1024]();
|
||||||
|
|
||||||
|
if (!lookup) lookup = alloc_invisible<uint8> (16 * 1024 * 1024);
|
||||||
|
if (!target) target = alloc_invisible<uint32>(16 * 1024 * 1024);
|
||||||
|
|
||||||
reader[0] = [](uint, uint8 data) -> uint8 { return data; };
|
reader[0] = [](uint, uint8 data) -> uint8 { return data; };
|
||||||
writer[0] = [](uint, uint8) -> void {};
|
writer[0] = [](uint, uint8) -> void {};
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
struct ProtectableMemory : Memory {
|
struct ProtectableMemory : Memory {
|
||||||
inline auto reset() -> void override {
|
inline auto reset() -> void override {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = nullptr;
|
//self.data = nullptr;
|
||||||
self.size = 0;
|
//self.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
||||||
|
if (!self.data) {
|
||||||
|
self.data = alloc_plain<uint8>(self.size = size);
|
||||||
|
}
|
||||||
if(self.size != size) {
|
if(self.size != size) {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = new uint8[self.size = size];
|
//self.data = new uint8[self.size = size];
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
for(uint address : range(size)) {
|
for(uint address : range(size)) {
|
||||||
self.data[address] = fill;
|
self.data[address] = fill;
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
struct ReadableMemory : Memory {
|
struct ReadableMemory : Memory {
|
||||||
inline auto reset() -> void override {
|
inline auto reset() -> void override {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = nullptr;
|
//self.data = nullptr;
|
||||||
self.size = 0;
|
//self.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
||||||
|
if (!self.data) {
|
||||||
|
self.data = alloc_invisible<uint8>(self.size = size);
|
||||||
|
}
|
||||||
if(self.size != size) {
|
if(self.size != size) {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = new uint8[self.size = size];
|
//self.data = new uint8[self.size = size];
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
for(uint address : range(size)) {
|
for(uint address : range(size)) {
|
||||||
self.data[address] = fill;
|
self.data[address] = fill;
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
struct WritableMemory : Memory {
|
struct WritableMemory : Memory {
|
||||||
inline auto reset() -> void override {
|
inline auto reset() -> void override {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = nullptr;
|
//self.data = nullptr;
|
||||||
self.size = 0;
|
//self.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
inline auto allocate(uint size, uint8 fill = 0xff) -> void override {
|
||||||
|
if (!self.data) {
|
||||||
|
self.data = alloc_plain<uint8>(self.size = size);
|
||||||
|
}
|
||||||
if(self.size != size) {
|
if(self.size != size) {
|
||||||
delete[] self.data;
|
//delete[] self.data;
|
||||||
self.data = new uint8[self.size = size];
|
//self.data = new uint8[self.size = size];
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
for(uint address : range(size)) {
|
for(uint address : range(size)) {
|
||||||
self.data[address] = fill;
|
self.data[address] = fill;
|
||||||
|
|
|
@ -34,10 +34,12 @@ auto PPU::noVRAMBlocking() const -> bool { return configuration.hacks.ppu.noVRAM
|
||||||
#define ppu ppufast
|
#define ppu ppufast
|
||||||
|
|
||||||
PPU::PPU() {
|
PPU::PPU() {
|
||||||
output = new uint16_t[2304 * 2160]();
|
//output = new uint16_t[2304 * 2160]();
|
||||||
|
output = alloc_invisible<uint16_t>(2304 * 2160);
|
||||||
|
|
||||||
for(uint l : range(16)) {
|
for(uint l : range(16)) {
|
||||||
lightTable[l] = new uint16_t[32768];
|
//lightTable[l] = new uint16_t[32768];
|
||||||
|
lightTable[l] = alloc_invisible<uint16_t>(32768);
|
||||||
for(uint r : range(32)) {
|
for(uint r : range(32)) {
|
||||||
for(uint g : range(32)) {
|
for(uint g : range(32)) {
|
||||||
for(uint b : range(32)) {
|
for(uint b : range(32)) {
|
||||||
|
@ -51,14 +53,17 @@ PPU::PPU() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lines = alloc_invisible<Line>(240);
|
||||||
|
|
||||||
for(uint y : range(240)) {
|
for(uint y : range(240)) {
|
||||||
lines[y].y = y;
|
lines[y].y = y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PPU::~PPU() {
|
PPU::~PPU() {
|
||||||
delete[] output;
|
//delete[] output;
|
||||||
for(uint l : range(16)) delete[] lightTable[l];
|
//for(uint l : range(16)) delete[] lightTable[l];
|
||||||
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto PPU::synchronizeCPU() -> void {
|
auto PPU::synchronizeCPU() -> void {
|
||||||
|
|
|
@ -351,7 +351,8 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
//unserialized:
|
//unserialized:
|
||||||
Line lines[240];
|
//Line lines[240];
|
||||||
|
Line* lines;
|
||||||
|
|
||||||
//used to help detect when the video output size changes between frames to clear overscan area.
|
//used to help detect when the video output size changes between frames to clear overscan area.
|
||||||
struct Frame {
|
struct Frame {
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
//license: GPLv3
|
//license: GPLv3
|
||||||
//started: 2004-10-14
|
//started: 2004-10-14
|
||||||
|
|
||||||
|
#include <emulibc.h>
|
||||||
|
|
||||||
#include <emulator/emulator.hpp>
|
#include <emulator/emulator.hpp>
|
||||||
#include <emulator/random.hpp>
|
#include <emulator/random.hpp>
|
||||||
#include <emulator/cheat.hpp>
|
#include <emulator/cheat.hpp>
|
||||||
|
|
Loading…
Reference in New Issue