void Ks202::SubLoad(State::Loader& state,const dword baseChunk) { NST_VERIFY( (baseChunk == AsciiId<'K','0','2'>::V) ); if (baseChunk == AsciiId<'K','0','2'>::V) { while (const dword chunk = state.Begin()) { switch (chunk) { case AsciiId<'R','E','G'>::V: ctrl = state.Read8(); break; case AsciiId<'I','R','Q'>::V: { State::Loader::Data<5> data( state ); irq.unit.ctrl = data[0]; irq.unit.count = data[1] | data[2] << 8; irq.unit.latch = data[3] | data[4] << 8; irq.Connect( data[0] & 0xF ); break; } } state.End(); } } }
void TurboFile::LoadState(State::Loader& loader,const dword id) { if (id == AsciiId<'T','F'>::V) { while (const dword chunk = loader.Begin()) { switch (chunk) { case AsciiId<'R','E','G'>::V: { State::Loader::Data<3> data( loader ); pos = data[0] | (data[1] << 8 & 0x1F00); bit = 1U << (data[2] & 0x7); old = data[2] >> 1 & WRITE_BIT; out = data[2] >> 2 & READ_BIT; break; } case AsciiId<'R','A','M'>::V: loader.Uncompress( ram ); break; } loader.End(); } } }
void Mapper165::SubLoad(State::Loader& state) { while (const dword chunk = state.Begin()) { if (chunk == AsciiId<'L','T','C'>::V) { const uint data = state.Read8(); selector[0] = data << 0 & 0x1; selector[1] = data << 1 & 0x6; } state.End(); } }
void Tc0190fmcPal16r4::SubLoad(State::Loader& state,const dword baseChunk) { NST_VERIFY( baseChunk == (AsciiId<'T','T','C'>::V) ); if (baseChunk == AsciiId<'T','T','C'>::V) { while (const dword chunk = state.Begin()) { if (chunk == AsciiId<'I','R','Q'>::V) irq.unit.LoadState( state ); state.End(); } } }
void ResetBased4in1::SubLoad(State::Loader& state,const dword baseChunk) { NST_VERIFY( baseChunk == (AsciiId<'B','R','4'>::V) ); if (baseChunk == AsciiId<'B','R','4'>::V) { while (const dword chunk = state.Begin()) { if (chunk == AsciiId<'R','E','G'>::V) resetSwitch = state.Read8() & 0x3; state.End(); } } }
void Standard::SubLoad(State::Loader& state,const dword baseChunk) { NST_VERIFY( baseChunk == (AsciiId<'F','D','A'>::V) ); if (baseChunk == AsciiId<'F','D','A'>::V) { while (const dword chunk = state.Begin()) { if (chunk == AsciiId<'I','R','Q'>::V) { State::Loader::Data<3> data( state ); irq.unit.enabled = data[0] & 0x1; irq.unit.latch = data[1]; irq.unit.count = data[2]; } state.End(); } } }
void Cartridge::LoadState(State::Loader& state) { while (const dword chunk = state.Begin()) { switch (chunk) { case AsciiId<'M','P','R'>::V: board->LoadState( state ); break; case AsciiId<'V','S','S'>::V: NST_VERIFY( vs ); if (vs) vs->LoadState( state ); break; } state.End(); } }
void Fds::LoadState(State::Loader& state) { uint saveDisks[3] = {~0U,~0U,~0U}; while (const dword chunk = state.Begin()) { switch (chunk) { case AsciiId<'I','O'>::V: { State::Loader::Data<4> data( state ); io.ctrl = data[0]; io.port = data[1]; break; } case AsciiId<'R','A','M'>::V: state.Uncompress( ram.mem ); break; case AsciiId<'C','H','R'>::V: state.Uncompress( ppu.GetChrMem().Source().Mem(), SIZE_8K ); break; case AsciiId<'I','R','Q'>::V: case AsciiId<'D','R','V'>::V: adapter.LoadState( state, chunk, ppu ); break; case AsciiId<'D','S','K'>::V: { State::Loader::Data<4> data( state ); if (data[0] != disks.sides.count) throw RESULT_ERR_INVALID_FILE; saveDisks[0] = data[1]; saveDisks[1] = data[2]; saveDisks[2] = data[3]; break; } case AsciiId<'S','N','D'>::V: sound.LoadState( state ); break; default: for (uint i=0; i < disks.sides.count; ++i) { if (chunk == AsciiId<'D','0','A'>::R( 0, i / 2, i % 2 )) { byte* const data = disks.sides[i]; state.Uncompress( data, SIDE_SIZE ); for (uint j=0; j < SIDE_SIZE; ++j) data[j] ^= 0xFFU; break; } } break; } state.End(); } disks.mounting = 0; if (saveDisks[0] != ~0U) { disks.writeProtected = saveDisks[0] & 0x2U; if (saveDisks[0] & 0x1U) { if (NES_FAILED(InsertDisk( saveDisks[1] / 2, saveDisks[1] % 2 ))) throw RESULT_ERR_CORRUPT_FILE; disks.mounting = saveDisks[2]; } else { EjectDisk(); } } adapter.Mount ( disks.current != Disks::EJECTED && !disks.mounting ? disks.sides[disks.current] : NULL, disks.writeProtected ); }