From 28e2cc57c4c648378d3418a2c9e71490846cdc24 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Wed, 14 Oct 2015 23:37:45 -0700 Subject: [PATCH] GBA IO: LOAD_32/16-ize IO deserialization --- src/gba/io.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gba/io.c b/src/gba/io.c index 475de5e7d..5fb1b92d7 100644 --- a/src/gba/io.c +++ b/src/gba/io.c @@ -712,20 +712,27 @@ void GBAIODeserialize(struct GBA* gba, const struct GBASerializedState* state) { int i; for (i = 0; i < REG_MAX; i += 2) { if (_isSpecialRegister[i >> 1]) { - gba->memory.io[i >> 1] = state->io[i >> 1]; + LOAD_16(gba->memory.io[i >> 1], i, state->io); } else if (_isValidRegister[i >> 1]) { - GBAIOWrite(gba, i, state->io[i >> 1]); + uint16_t reg; + LOAD_16(reg, i, state->io); + GBAIOWrite(gba, i, reg); } } gba->timersEnabled = 0; - memcpy(gba->timers, state->timers, sizeof(gba->timers)); for (i = 0; i < 4; ++i) { - gba->memory.dma[i].reg = state->io[(REG_DMA0CNT_HI + i * 12) >> 1]; - gba->memory.dma[i].nextSource = state->dma[i].nextSource; - gba->memory.dma[i].nextDest = state->dma[i].nextDest; - gba->memory.dma[i].nextCount = state->dma[i].nextCount; - gba->memory.dma[i].nextEvent = state->dma[i].nextEvent; + LOAD_16(gba->timers[i].reload, 0, &state->timers[i].reload); + LOAD_16(gba->timers[i].oldReload, 0, &state->timers[i].oldReload); + LOAD_32(gba->timers[i].lastEvent, 0, &state->timers[i].lastEvent); + LOAD_32(gba->timers[i].nextEvent, 0, &state->timers[i].nextEvent); + LOAD_32(gba->timers[i].overflowInterval, 0, &state->timers[i].overflowInterval); + LOAD_32(gba->timers[i].flags, 0, &state->timers[i].flags); + LOAD_16(gba->memory.dma[i].reg, (REG_DMA0CNT_HI + i * 12), state->io); + LOAD_32(gba->memory.dma[i].nextSource, 0, &state->dma[i].nextSource); + LOAD_32(gba->memory.dma[i].nextDest, 0, &state->dma[i].nextDest); + LOAD_32(gba->memory.dma[i].nextCount, 0, &state->dma[i].nextCount); + LOAD_32(gba->memory.dma[i].nextEvent, 0, &state->dma[i].nextEvent); if (GBADMARegisterGetTiming(gba->memory.dma[i].reg) != DMA_TIMING_NOW) { GBAMemoryScheduleDMA(gba, i, &gba->memory.dma[i]); }