Progress with serialization
This commit is contained in:
parent
94681844f2
commit
4e0a6c038c
|
@ -153,81 +153,31 @@ class Core : private Cpu
|
||||||
reset(true, true);
|
reset(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void deserializeBlock(
|
static inline void serializeContiguousData(const uint8_t* __restrict__ inputData, const size_t inputDataSize, uint8_t* __restrict__ outputData, size_t* outputDataPos, size_t* referenceDataPos)
|
||||||
uint8_t* __restrict__ outputData,
|
|
||||||
const size_t outputDataSize,
|
|
||||||
const uint8_t* __restrict__ inputData,
|
|
||||||
size_t* inputDataPos,
|
|
||||||
const bool useDifferentialCompression = false,
|
|
||||||
const uint8_t* __restrict__ referenceData = nullptr,
|
|
||||||
size_t* referenceDataPos = 0,
|
|
||||||
const bool useZlib = false
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// If not using differential compression, process the entire input block
|
|
||||||
if (useDifferentialCompression == false)
|
|
||||||
{
|
|
||||||
// Only perform memcpy if the input block is not null
|
|
||||||
if (outputData != nullptr) memcpy(outputData, &inputData[*inputDataPos], outputDataSize);
|
|
||||||
*inputDataPos += outputDataSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If using differential compression
|
|
||||||
if (useDifferentialCompression == true)
|
|
||||||
{
|
|
||||||
// Reading differential count
|
|
||||||
usize_t diffCount;
|
|
||||||
memcpy(&diffCount, &inputData[*inputDataPos], sizeof(usize_t));
|
|
||||||
|
|
||||||
// Advancing position pointer to store the difference counter
|
|
||||||
*inputDataPos += sizeof(usize_t);
|
|
||||||
|
|
||||||
// Encoding differential
|
|
||||||
usize_t output_size;
|
|
||||||
int ret = xd3_decode_memory(
|
|
||||||
&inputData[*inputDataPos],
|
|
||||||
diffCount,
|
|
||||||
&referenceData[*referenceDataPos],
|
|
||||||
outputDataSize,
|
|
||||||
outputData,
|
|
||||||
&output_size,
|
|
||||||
outputDataSize,
|
|
||||||
useZlib ? 0 : XD3_NOCOMPRESS
|
|
||||||
);
|
|
||||||
|
|
||||||
// If an error happened, print it here
|
|
||||||
if (ret != 0)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "[Error] unexpected error while decoding differential compression. Diff count: %u\n", diffCount);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increasing output data position pointer
|
|
||||||
*inputDataPos += diffCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, increasing reference data position pointer
|
|
||||||
*referenceDataPos += outputDataSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void serializeContiguousData(const uint8_t* __restrict__ inputData, const size_t inputDataSize, uint8_t* __restrict__ outputData, size_t* outputDataPos)
|
|
||||||
{
|
{
|
||||||
// Only perform memcpy if the input block is not null
|
// Only perform memcpy if the input block is not null
|
||||||
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], inputData, inputDataSize);
|
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], inputData, inputDataSize);
|
||||||
|
|
||||||
|
// Moving pointer positions
|
||||||
*outputDataPos += inputDataSize;
|
*outputDataPos += inputDataSize;
|
||||||
|
*referenceDataPos += inputDataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void deserializeContiguousData(uint8_t* __restrict__ outputData, const size_t outputDataSize, const uint8_t* __restrict__ inputData, size_t* inputDataPos)
|
static inline void deserializeContiguousData(uint8_t* __restrict__ outputData, const size_t outputDataSize, const uint8_t* __restrict__ inputData, size_t* inputDataPos, size_t* referenceDataPos)
|
||||||
{
|
{
|
||||||
// Only perform memcpy if the input block is not null
|
// Only perform memcpy if the input block is not null
|
||||||
if (outputData != nullptr) memcpy(outputData, &inputData[*inputDataPos], outputDataSize);
|
if (outputData != nullptr) memcpy(outputData, &inputData[*inputDataPos], outputDataSize);
|
||||||
|
|
||||||
|
// Moving pointer positions
|
||||||
*inputDataPos += outputDataSize;
|
*inputDataPos += outputDataSize;
|
||||||
|
*referenceDataPos += outputDataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void serializeBlockHead(uint8_t* __restrict__ outputData, size_t* outputDataPos, size_t* referenceDataPos, const char* blockTag, const uint32_t blockSize)
|
static inline void serializeBlockHead(uint8_t* __restrict__ outputData, size_t* outputDataPos, size_t* referenceDataPos, const char* blockTag, const uint32_t blockSize)
|
||||||
{
|
{
|
||||||
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], blockTag, 4);
|
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], blockTag, 4);
|
||||||
*outputDataPos += 4; *referenceDataPos += 4;
|
*outputDataPos += 4; *referenceDataPos += 4;
|
||||||
|
|
||||||
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], &blockSize, 4);
|
if (outputData != nullptr) memcpy(&outputData[*outputDataPos], &blockSize, 4);
|
||||||
*outputDataPos += 4; *referenceDataPos += 4;
|
*outputDataPos += 4; *referenceDataPos += 4;
|
||||||
}
|
}
|
||||||
|
@ -367,9 +317,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)&state;
|
const auto inputData = (uint8_t *)&state;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "TIME", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "TIME", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CPUR Block
|
// CPUR Block
|
||||||
|
@ -388,9 +336,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)&s;
|
const auto inputData = (uint8_t *)&s;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CPUR", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CPUR", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PPURBlockEnabled == true)
|
if (PPURBlockEnabled == true)
|
||||||
|
@ -399,9 +345,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (const uint8_t *)&ppu;
|
const auto inputData = (const uint8_t *)&ppu;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "PPUR", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "PPUR", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// APUR Block
|
// APUR Block
|
||||||
|
@ -414,9 +358,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)&apuState;
|
const auto inputData = (uint8_t *)&apuState;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "APUR", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "APUR", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CTRL Block
|
// CTRL Block
|
||||||
|
@ -426,9 +368,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)&joypad;
|
const auto inputData = (uint8_t *)&joypad;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CTRL", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CTRL", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MAPR Block
|
// MAPR Block
|
||||||
|
@ -438,9 +378,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)mapper->state;
|
const auto inputData = (uint8_t *)mapper->state;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "MAPR", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "MAPR", inputDataSize);
|
||||||
|
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
referenceDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LRAM Block
|
// LRAM Block
|
||||||
|
@ -450,8 +388,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)low_mem;
|
const auto inputData = (uint8_t *)low_mem;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "LRAM", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "LRAM", inputDataSize);
|
||||||
|
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,8 +399,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)ppu.spr_ram;
|
const auto inputData = (uint8_t *)ppu.spr_ram;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "SPRT", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "SPRT", inputDataSize);
|
||||||
|
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -477,8 +413,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)ppu.impl->nt_ram;
|
const auto inputData = (uint8_t *)ppu.impl->nt_ram;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "NTAB", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "NTAB", inputDataSize);
|
||||||
|
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,8 +426,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)ppu.impl->chr_ram;
|
const auto inputData = (uint8_t *)ppu.impl->chr_ram;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CHRR", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "CHRR", inputDataSize);
|
||||||
|
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -506,8 +440,7 @@ class Core : private Cpu
|
||||||
const auto inputData = (uint8_t *)impl->sram;
|
const auto inputData = (uint8_t *)impl->sram;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "SRAM", inputDataSize);
|
if (HEADBlockEnabled == true) serializeBlockHead(outputData, &outputDataPos, &referenceDataPos, "SRAM", inputDataSize);
|
||||||
|
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos, &referenceDataPos);
|
||||||
if (useDifferentialCompression == false) serializeContiguousData(inputData, inputDataSize, outputData, &outputDataPos);
|
|
||||||
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
if (useDifferentialCompression == true) serializeDifferentialData(inputData, inputDataSize, outputData, &outputDataPos, referenceData, &referenceDataPos, outputMaxSize, useZlib);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -518,7 +451,7 @@ class Core : private Cpu
|
||||||
return outputDataPos; // Bytes written
|
return outputDataPos; // Bytes written
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t deserializeState(const uint8_t* __restrict__ inputStateData, const bool useDifferentialCompression = false, const uint8_t* __restrict__ referenceData = nullptr, const bool useZlib = false)
|
size_t deserializeState(const uint8_t* __restrict__ inputData, const bool useDifferentialCompression = false, const uint8_t* __restrict__ referenceData = nullptr, const bool useZlib = false)
|
||||||
{
|
{
|
||||||
disable_rendering();
|
disable_rendering();
|
||||||
error_count = 0;
|
error_count = 0;
|
||||||
|
@ -539,9 +472,7 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = sizeof(nes_state_t);
|
const auto inputDataSize = sizeof(nes_state_t);
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
|
|
||||||
nes = nesState;
|
nes = nesState;
|
||||||
nes.timestamp /= 5;
|
nes.timestamp /= 5;
|
||||||
|
@ -556,9 +487,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = sizeof(cpu_state_t);
|
const auto inputDataSize = sizeof(cpu_state_t);
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
|
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
r.pc = s.pc;
|
r.pc = s.pc;
|
||||||
r.sp = s.s;
|
r.sp = s.s;
|
||||||
r.a = s.a;
|
r.a = s.a;
|
||||||
|
@ -574,9 +504,7 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = sizeof(ppu_state_t);
|
const auto inputDataSize = sizeof(ppu_state_t);
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// APUR Block
|
// APUR Block
|
||||||
|
@ -588,9 +516,7 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = sizeof(Apu::apu_state_t);
|
const auto inputDataSize = sizeof(Apu::apu_state_t);
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
|
|
||||||
impl->apu.load_state(apuState);
|
impl->apu.load_state(apuState);
|
||||||
impl->apu.end_frame(-(int)nes.timestamp / ppu_overclock);
|
impl->apu.end_frame(-(int)nes.timestamp / ppu_overclock);
|
||||||
|
@ -603,9 +529,7 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = sizeof(joypad_state_t);
|
const auto inputDataSize = sizeof(joypad_state_t);
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MAPR Block
|
// MAPR Block
|
||||||
|
@ -617,9 +541,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = mapper->state_size;
|
const auto inputDataSize = mapper->state_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
|
|
||||||
memcpy(outputData, &inputStateData[inputDataPos], inputDataSize);
|
|
||||||
inputDataPos += inputDataSize;
|
|
||||||
mapper->apply_mapping();
|
mapper->apply_mapping();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,8 +553,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = low_ram_size;
|
const auto inputDataSize = low_ram_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
if (useDifferentialCompression == false) deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
deserializeBlock(outputData, inputDataSize, inputStateData, &inputDataPos, useDifferentialCompression, referenceData, &referenceDataPos, useZlib);
|
if (useDifferentialCompression == true) deserializeDifferentialData(outputData, inputDataSize, inputData, &inputDataPos, referenceData, &referenceDataPos, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SPRT Block
|
// SPRT Block
|
||||||
|
@ -641,8 +564,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = Ppu::spr_ram_size;
|
const auto inputDataSize = Ppu::spr_ram_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
if (useDifferentialCompression == false) deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
deserializeBlock(outputData, inputDataSize, inputStateData, &inputDataPos, useDifferentialCompression, referenceData, &referenceDataPos, useZlib);
|
if (useDifferentialCompression == true) deserializeDifferentialData(outputData, inputDataSize, inputData, &inputDataPos, referenceData, &referenceDataPos, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NTAB Block
|
// NTAB Block
|
||||||
|
@ -655,8 +578,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = nametable_size;
|
const auto inputDataSize = nametable_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
if (useDifferentialCompression == false) deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
deserializeBlock(outputData, inputDataSize, inputStateData, &inputDataPos, useDifferentialCompression, referenceData, &referenceDataPos, useZlib);
|
if (useDifferentialCompression == true) deserializeDifferentialData(outputData, inputDataSize, inputData, &inputDataPos, referenceData, &referenceDataPos, useZlib);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHRR Block
|
// CHRR Block
|
||||||
|
@ -668,8 +591,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = ppu.chr_size;
|
const auto inputDataSize = ppu.chr_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
if (useDifferentialCompression == false) deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
deserializeBlock(outputData, inputDataSize, inputStateData, &inputDataPos, useDifferentialCompression, referenceData, &referenceDataPos, useZlib);
|
if (useDifferentialCompression == true) deserializeDifferentialData(outputData, inputDataSize, inputData, &inputDataPos, referenceData, &referenceDataPos, useZlib);
|
||||||
|
|
||||||
ppu.all_tiles_modified();
|
ppu.all_tiles_modified();
|
||||||
}
|
}
|
||||||
|
@ -684,8 +607,8 @@ class Core : private Cpu
|
||||||
const auto inputDataSize = impl->sram_size;
|
const auto inputDataSize = impl->sram_size;
|
||||||
|
|
||||||
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
if (HEADBlockEnabled == true) deserializeBlockHead(&inputDataPos, &referenceDataPos);
|
||||||
|
if (useDifferentialCompression == false) deserializeContiguousData(outputData, inputDataSize, inputData, &inputDataPos, &referenceDataPos);
|
||||||
deserializeBlock(outputData, inputDataSize, inputStateData, &inputDataPos, useDifferentialCompression, referenceData, &referenceDataPos, useZlib);
|
if (useDifferentialCompression == true) deserializeDifferentialData(outputData, inputDataSize, inputData, &inputDataPos, referenceData, &referenceDataPos, useZlib);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue