From: <m97...@us...> - 2008-06-30 18:37:33
|
Revision: 7964 http://openmsx.svn.sourceforge.net/openmsx/?rev=7964&view=rev Author: m9710797 Date: 2008-06-30 11:37:33 -0700 (Mon, 30 Jun 2008) Log Message: ----------- serialize VDPCmdEngine Modified Paths: -------------- openmsx/trunk/ChangeLog openmsx/trunk/src/video/VDP.cc openmsx/trunk/src/video/VDPCmdEngine.cc openmsx/trunk/src/video/VDPCmdEngine.hh Modified: openmsx/trunk/ChangeLog =================================================================== --- openmsx/trunk/ChangeLog 2008-06-30 18:36:53 UTC (rev 7963) +++ openmsx/trunk/ChangeLog 2008-06-30 18:37:33 UTC (rev 7964) @@ -1,6 +1,11 @@ $Id$ -2008-06-18 Wouter Vermaelen <wou...@sc...> +2008-06-30 Wouter Vermaelen <wou...@sc...> + * More serialization work: + - Philips_NMS_8250 can be serialized now, but still very + few other machines or extensions are supported + +2008-06-28 Wouter Vermaelen <wou...@sc...> * Added HIGHLY EXPERIMENTAL savestates: - Only very few things work yet, but I was able to resume 'Road Fighter' running in a MSX1 (actually that's about the Modified: openmsx/trunk/src/video/VDP.cc =================================================================== --- openmsx/trunk/src/video/VDP.cc 2008-06-30 18:36:53 UTC (rev 7963) +++ openmsx/trunk/src/video/VDP.cc 2008-06-30 18:37:33 UTC (rev 7964) @@ -1287,7 +1287,7 @@ ar.serialize("displayMode", mode); displayMode.setByte(mode); - //std::auto_ptr<VDPCmdEngine> cmdEngine; + ar.serialize("cmdEngine", *cmdEngine); ar.serialize("vram", *vram); ar.serialize("spriteChecker", *spriteChecker); // must come after displayMode if (ar.isLoader()) { Modified: openmsx/trunk/src/video/VDPCmdEngine.cc =================================================================== --- openmsx/trunk/src/video/VDPCmdEngine.cc 2008-06-30 18:36:53 UTC (rev 7963) +++ openmsx/trunk/src/video/VDPCmdEngine.cc 2008-06-30 18:37:33 UTC (rev 7964) @@ -41,6 +41,7 @@ #include "BooleanSetting.hh" #include "EnumSetting.hh" #include "RenderSettings.hh" +#include "serialize.hh" #include <iostream> #include <cassert> #include <algorithm> @@ -381,7 +382,7 @@ currentOperation = operations[LOG].get(); - brokenTiming = false; + brokenTiming = renderSettings.getCmdTiming().getValue(); renderSettings.getCmdTiming().attach(*this); } @@ -1328,4 +1329,44 @@ } } + +template<typename Archive> +void VDPCmdEngine::serialize(Archive& ar, unsigned /*version*/) +{ + ar.serialize("clock", clock); + ar.serialize("statusChangeTime", statusChangeTime); + ar.serialize("scrMode", scrMode); + ar.serialize("status", status); + ar.serialize("transfer", transfer); + ar.serialize("SX", SX); + ar.serialize("SY", SY); + ar.serialize("DX", DX); + ar.serialize("DY", DY); + ar.serialize("NX", NX); + ar.serialize("NY", NY); + ar.serialize("ASX", ASX); + ar.serialize("ADX", ADX); + ar.serialize("ANX", ANX); + ar.serialize("COL", COL); + ar.serialize("ARG", ARG); + + if (currentCommand == NULL) { + assert(CMD == 0); + } + byte cmdReg = (CMD << 4) | LOG; + ar.serialize("CMD", cmdReg); + if (ar.isLoader()) { + LOG = cmdReg & 0x0F; + CMD = cmdReg >> 4; + if (CMD) { + assert(scrMode >= 0); + currentCommand = commands[CMD][scrMode]; + } else { + currentCommand = NULL; + } + currentOperation = operations[LOG].get(); + } +} +INSTANTIATE_SERIALIZE_METHODS(VDPCmdEngine); + } // namespace openmsx Modified: openmsx/trunk/src/video/VDPCmdEngine.hh =================================================================== --- openmsx/trunk/src/video/VDPCmdEngine.hh 2008-06-30 18:36:53 UTC (rev 7963) +++ openmsx/trunk/src/video/VDPCmdEngine.hh 2008-06-30 18:37:33 UTC (rev 7964) @@ -124,6 +124,9 @@ virtual ~LogOp() {} }; + template<typename Archive> + void serialize(Archive& ar, unsigned version); + private: /** Represents V9938 Graphic 4 mode (SCREEN5). */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |