From 75ff49d4f2ecf6cf055b3d1b7499ef91c28f79b3 Mon Sep 17 00:00:00 2001 From: Snesrev Date: Mon, 6 Mar 2023 03:42:00 +0100 Subject: [PATCH] Work around very brittle snapshot code --- src/snes/apu.c | 2 +- src/snes/apu.h | 2 ++ src/snes/dma.c | 2 +- src/snes/dma.h | 1 + src/snes/snes.h | 10 +++++++--- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/snes/apu.c b/src/snes/apu.c index 8dab5cc..a2508fe 100644 --- a/src/snes/apu.c +++ b/src/snes/apu.c @@ -54,7 +54,7 @@ void apu_reset(Apu* apu) { } void apu_saveload(Apu *apu, SaveLoadFunc *func, void *ctx) { - func(ctx, apu->ram, offsetof(Apu, hist) - offsetof(Apu, ram)); + func(ctx, apu->ram, offsetof(Apu, pad) + 6 - offsetof(Apu, ram)); dsp_saveload(apu->dsp, func, ctx); spc_saveload(apu->spc, func, ctx); } diff --git a/src/snes/apu.h b/src/snes/apu.h index 0de4d18..7222c32 100644 --- a/src/snes/apu.h +++ b/src/snes/apu.h @@ -33,6 +33,8 @@ struct Apu { uint8_t outPorts[4]; Timer timer[3]; uint8_t cpuCyclesLeft; + uint8_t pad[6]; + union { struct DspRegWriteHistory hist; diff --git a/src/snes/dma.c b/src/snes/dma.c index efe14a0..bc7702c 100644 --- a/src/snes/dma.c +++ b/src/snes/dma.c @@ -65,7 +65,7 @@ void dma_reset(Dma* dma) { } void dma_saveload(Dma *dma, SaveLoadFunc *func, void *ctx) { - func(ctx, &dma->channel, sizeof(Dma) - offsetof(Dma, channel)); + func(ctx, &dma->channel, offsetof(Dma, pad) + 7 - offsetof(Dma, channel)); } uint8_t dma_read(Dma* dma, uint16_t adr) { diff --git a/src/snes/dma.h b/src/snes/dma.h index 0facfa3..9196c4b 100644 --- a/src/snes/dma.h +++ b/src/snes/dma.h @@ -40,6 +40,7 @@ struct Dma { uint16_t hdmaTimer; uint32_t dmaTimer; bool dmaBusy; + uint8_t pad[7]; }; Dma* dma_init(Snes* snes); diff --git a/src/snes/snes.h b/src/snes/snes.h index 2728206..b093777 100644 --- a/src/snes/snes.h +++ b/src/snes/snes.h @@ -24,16 +24,19 @@ struct Snes { Ppu* ppu, *snes_ppu, *my_ppu; Dma* dma; Cart* cart; + Input *input1; + Input *input2; // input bool debug_cycles; bool debug_apu_cycles; bool disableRender; uint8_t runningWhichVersion; - Input* input1; - Input* input2; + // ram - uint8_t *ram; uint32_t ramAdr; + uint8_t *ram; + uint8_t padx[4]; + // frame timing uint16_t hPos; uint16_t vPos; @@ -41,6 +44,7 @@ struct Snes { // cpu handling uint8_t cpuCyclesLeft; uint8_t cpuMemOps; + uint8_t padpad[2]; double apuCatchupCycles; // nmi / irq bool hIrqEnabled;