mirror of https://github.com/stella-emu/stella.git
Re-abled state loading/saving.
There's still a few final items to fix, but it's 99% complete.
This commit is contained in:
parent
0976fb1d93
commit
fd4122e017
|
@ -133,6 +133,15 @@ void Serializer::getIntArray(uInt32* array, uInt32 size) const
|
||||||
myStream->read(reinterpret_cast<char*>(array), sizeof(uInt32)*size);
|
myStream->read(reinterpret_cast<char*>(array), sizeof(uInt32)*size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
double Serializer::getDouble() const
|
||||||
|
{
|
||||||
|
double val = 0.0;
|
||||||
|
myStream->read(reinterpret_cast<char*>(&val), sizeof(double));
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
string Serializer::getString() const
|
string Serializer::getString() const
|
||||||
{
|
{
|
||||||
|
@ -186,6 +195,12 @@ void Serializer::putIntArray(const uInt32* array, uInt32 size)
|
||||||
myStream->write(reinterpret_cast<const char*>(array), sizeof(uInt32)*size);
|
myStream->write(reinterpret_cast<const char*>(array), sizeof(uInt32)*size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void Serializer::putDouble(double value)
|
||||||
|
{
|
||||||
|
myStream->write(reinterpret_cast<char*>(&value), sizeof(double));
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Serializer::putString(const string& str)
|
void Serializer::putString(const string& str)
|
||||||
{
|
{
|
||||||
|
|
|
@ -110,6 +110,13 @@ class Serializer
|
||||||
*/
|
*/
|
||||||
void getIntArray(uInt32* array, uInt32 size) const;
|
void getIntArray(uInt32* array, uInt32 size) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a double value (signed 64-bit) from the current input stream.
|
||||||
|
|
||||||
|
@result The double value which has been read from the stream.
|
||||||
|
*/
|
||||||
|
double getDouble() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reads a string from the current input stream.
|
Reads a string from the current input stream.
|
||||||
|
|
||||||
|
@ -169,6 +176,13 @@ class Serializer
|
||||||
*/
|
*/
|
||||||
void putIntArray(const uInt32* array, uInt32 size);
|
void putIntArray(const uInt32* array, uInt32 size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Writes a double value (signed 64-bit) to the current output stream.
|
||||||
|
|
||||||
|
@param value The double value to write to the output stream.
|
||||||
|
*/
|
||||||
|
void putDouble(double value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Writes a string to the current output stream.
|
Writes a string to the current output stream.
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include "StateManager.hxx"
|
#include "StateManager.hxx"
|
||||||
|
|
||||||
#define STATE_HEADER "04090200state"
|
#define STATE_HEADER "04090300state"
|
||||||
#define MOVIE_HEADER "03030000movie"
|
#define MOVIE_HEADER "03030000movie"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -530,7 +530,7 @@ int Thumbulator::execute()
|
||||||
|
|
||||||
pc = read_register(15);
|
pc = read_register(15);
|
||||||
|
|
||||||
#if 0 // FIXME SA - not sure if this should be enabled
|
#if 0
|
||||||
if(handler_mode)
|
if(handler_mode)
|
||||||
{
|
{
|
||||||
if((pc & 0xF0000000) == 0xF0000000)
|
if((pc & 0xF0000000) == 0xF0000000)
|
||||||
|
|
|
@ -90,8 +90,6 @@ bool Background::load(Serializer& in)
|
||||||
myObjectColor = in.getByte();
|
myObjectColor = in.getByte();
|
||||||
myDebugColor = in.getByte();
|
myDebugColor = in.getByte();
|
||||||
myDebugEnabled = in.getBool();
|
myDebugEnabled = in.getBool();
|
||||||
|
|
||||||
applyColors();
|
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
|
|
@ -278,9 +278,6 @@ bool Ball::load(Serializer& in)
|
||||||
|
|
||||||
myIsRendering = in.getBool();
|
myIsRendering = in.getBool();
|
||||||
myRenderCounter = in.getByte();
|
myRenderCounter = in.getByte();
|
||||||
|
|
||||||
updateEnabled();
|
|
||||||
applyColors();
|
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
|
|
@ -56,3 +56,39 @@ void DelayQueue::reset()
|
||||||
|
|
||||||
memset(myIndices, 0xFF, 0xFF);
|
memset(myIndices, 0xFF, 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool DelayQueue::save(Serializer& out) const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// FIXME out.putVector(myMembers);
|
||||||
|
out.putByte(myIndex);
|
||||||
|
out.putByteArray(myIndices, 0xFF);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_DelayQueue::save" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool DelayQueue::load(Serializer& in)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// FIXME in.getVector(myMembers);
|
||||||
|
myIndex = in.getByte();
|
||||||
|
in.getByteArray(myIndices, 0xFF);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_DelayQueue::load" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -18,10 +18,11 @@
|
||||||
#ifndef TIA_DELAY_QUEUE
|
#ifndef TIA_DELAY_QUEUE
|
||||||
#define TIA_DELAY_QUEUE
|
#define TIA_DELAY_QUEUE
|
||||||
|
|
||||||
|
#include "Serializable.hxx"
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "DelayQueueMember.hxx"
|
#include "DelayQueueMember.hxx"
|
||||||
|
|
||||||
class DelayQueue
|
class DelayQueue : public Serializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DelayQueue(uInt8 length, uInt8 size);
|
DelayQueue(uInt8 length, uInt8 size);
|
||||||
|
@ -34,12 +35,16 @@ class DelayQueue
|
||||||
|
|
||||||
template<class T> void execute(T executor);
|
template<class T> void execute(T executor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Serializable methods (see that class for more information).
|
||||||
|
*/
|
||||||
|
bool save(Serializer& out) const override;
|
||||||
|
bool load(Serializer& in) override;
|
||||||
|
string name() const override { return "TIA_DelayQueue"; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
vector<DelayQueueMember> myMembers;
|
vector<DelayQueueMember> myMembers;
|
||||||
|
|
||||||
uInt8 myIndex;
|
uInt8 myIndex;
|
||||||
|
|
||||||
uInt8 myIndices[0xFF];
|
uInt8 myIndices[0xFF];
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
// namespace TIA6502tsCore
|
|
||||||
|
|
||||||
#include "DrawCounterDecodes.hxx"
|
#include "DrawCounterDecodes.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -316,7 +316,6 @@ void FrameManager::setFixedHeight(uInt32 height)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool FrameManager::save(Serializer& out) const
|
bool FrameManager::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -325,7 +324,29 @@ bool FrameManager::save(Serializer& out) const
|
||||||
|
|
||||||
if (!myVblankManager.save(out)) return false;
|
if (!myVblankManager.save(out)) return false;
|
||||||
|
|
||||||
// TODO - save instance variables
|
out.putInt(uInt32(myLayout));
|
||||||
|
out.putBool(myAutodetectLayout);
|
||||||
|
out.putInt(uInt32(myState));
|
||||||
|
out.putInt(myLineInState);
|
||||||
|
out.putInt(myCurrentFrameTotalLines);
|
||||||
|
out.putInt(myCurrentFrameFinalLines);
|
||||||
|
out.putInt(myVsyncLines);
|
||||||
|
out.putDouble(myFrameRate);
|
||||||
|
out.putInt(myY); out.putInt(myLastY);
|
||||||
|
out.putBool(myFramePending);
|
||||||
|
|
||||||
|
out.putInt(myTotalFrames);
|
||||||
|
out.putInt(myFramesInMode);
|
||||||
|
out.putBool(myModeConfirmed);
|
||||||
|
|
||||||
|
out.putBool(myVsync);
|
||||||
|
|
||||||
|
out.putInt(myVblankLines);
|
||||||
|
out.putInt(myKernelLines);
|
||||||
|
out.putInt(myOverscanLines);
|
||||||
|
out.putInt(myFrameLines);
|
||||||
|
out.putInt(myHeight);
|
||||||
|
out.putInt(myFixedHeight);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -333,11 +354,10 @@ bool FrameManager::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool FrameManager::load(Serializer& in)
|
bool FrameManager::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -347,7 +367,29 @@ bool FrameManager::load(Serializer& in)
|
||||||
|
|
||||||
if (!myVblankManager.load(in)) return false;
|
if (!myVblankManager.load(in)) return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
myLayout = FrameLayout(in.getInt());
|
||||||
|
myAutodetectLayout = in.getBool();
|
||||||
|
myState = State(in.getInt());
|
||||||
|
myLineInState = in.getInt();
|
||||||
|
myCurrentFrameTotalLines = in.getInt();
|
||||||
|
myCurrentFrameFinalLines = in.getInt();
|
||||||
|
myVsyncLines = in.getInt();
|
||||||
|
myFrameRate = float(in.getDouble());
|
||||||
|
myY = in.getInt(); myLastY = in.getInt();
|
||||||
|
myFramePending = in.getBool();
|
||||||
|
|
||||||
|
myTotalFrames = in.getInt();
|
||||||
|
myFramesInMode = in.getInt();
|
||||||
|
myModeConfirmed = in.getBool();
|
||||||
|
|
||||||
|
myVsync = in.getBool();
|
||||||
|
|
||||||
|
myVblankLines = in.getInt();
|
||||||
|
myKernelLines = in.getInt();
|
||||||
|
myOverscanLines = in.getInt();
|
||||||
|
myFrameLines = in.getInt();
|
||||||
|
myHeight = in.getInt();
|
||||||
|
myFixedHeight = in.getInt();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -355,5 +397,5 @@ bool FrameManager::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,7 @@ class LatchedInput : public Serializable
|
||||||
string name() const override { return "TIA_LatchedInput"; }
|
string name() const override { return "TIA_LatchedInput"; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool myModeLatched;
|
bool myModeLatched;
|
||||||
|
|
||||||
uInt8 myLatchedValue;
|
uInt8 myLatchedValue;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -26,7 +26,8 @@ enum Count: Int8 {
|
||||||
Missile::Missile(uInt32 collisionMask)
|
Missile::Missile(uInt32 collisionMask)
|
||||||
: myCollisionMaskDisabled(collisionMask),
|
: myCollisionMaskDisabled(collisionMask),
|
||||||
myCollisionMaskEnabled(0xFFFF),
|
myCollisionMaskEnabled(0xFFFF),
|
||||||
myIsSuppressed(false)
|
myIsSuppressed(false),
|
||||||
|
myDecodesOffset(0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
@ -34,7 +35,7 @@ Missile::Missile(uInt32 collisionMask)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Missile::reset()
|
void Missile::reset()
|
||||||
{
|
{
|
||||||
myDecodes = DrawCounterDecodes::get().missileDecodes()[0];
|
myDecodes = DrawCounterDecodes::get().missileDecodes()[myDecodesOffset];
|
||||||
myIsEnabled = false;
|
myIsEnabled = false;
|
||||||
myEnam = false;
|
myEnam = false;
|
||||||
myResmp = 0;
|
myResmp = 0;
|
||||||
|
@ -137,8 +138,9 @@ void Missile::nusiz(uInt8 value)
|
||||||
{
|
{
|
||||||
static constexpr uInt8 ourWidths[] = { 1, 2, 4, 8 };
|
static constexpr uInt8 ourWidths[] = { 1, 2, 4, 8 };
|
||||||
|
|
||||||
|
myDecodesOffset = value & 0x07;
|
||||||
myWidth = ourWidths[(value & 0x30) >> 4];
|
myWidth = ourWidths[(value & 0x30) >> 4];
|
||||||
myDecodes = DrawCounterDecodes::get().missileDecodes()[value & 0x07];
|
myDecodes = DrawCounterDecodes::get().missileDecodes()[myDecodesOffset];
|
||||||
|
|
||||||
if (myIsRendering && myRenderCounter >= myWidth)
|
if (myIsRendering && myRenderCounter >= myWidth)
|
||||||
myIsRendering = false;
|
myIsRendering = false;
|
||||||
|
@ -243,14 +245,36 @@ void Missile::applyColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool Missile::save(Serializer& out) const
|
bool Missile::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
out.putString(name());
|
out.putString(name());
|
||||||
|
|
||||||
// TODO - save instance variables
|
out.putInt(collision);
|
||||||
|
out.putInt(myCollisionMaskDisabled);
|
||||||
|
out.putInt(myCollisionMaskEnabled);
|
||||||
|
|
||||||
|
out.putBool(myIsEnabled);
|
||||||
|
out.putBool(myIsSuppressed);
|
||||||
|
out.putBool(myEnam);
|
||||||
|
out.putByte(myResmp);
|
||||||
|
|
||||||
|
out.putByte(myHmmClocks);
|
||||||
|
out.putByte(myCounter);
|
||||||
|
out.putBool(myIsMoving);
|
||||||
|
out.putByte(myWidth);
|
||||||
|
out.putByte(myEffectiveWidth);
|
||||||
|
out.putByte(myLastMovementTick);
|
||||||
|
|
||||||
|
out.putBool(myIsRendering);
|
||||||
|
out.putByte(myRenderCounter);
|
||||||
|
|
||||||
|
out.putByte(myDecodesOffset);
|
||||||
|
|
||||||
|
out.putByte(myColor);
|
||||||
|
out.putByte(myObjectColor); out.putByte(myDebugColor);
|
||||||
|
out.putBool(myDebugEnabled);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -258,11 +282,10 @@ bool Missile::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool Missile::load(Serializer& in)
|
bool Missile::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -270,7 +293,31 @@ bool Missile::load(Serializer& in)
|
||||||
if(in.getString() != name())
|
if(in.getString() != name())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
collision = in.getInt();
|
||||||
|
myCollisionMaskDisabled = in.getInt();
|
||||||
|
myCollisionMaskEnabled = in.getInt();
|
||||||
|
|
||||||
|
myIsEnabled = in.getBool();
|
||||||
|
myIsSuppressed = in.getBool();
|
||||||
|
myEnam = in.getBool();
|
||||||
|
myResmp = in.getByte();
|
||||||
|
|
||||||
|
myHmmClocks = in.getByte();
|
||||||
|
myCounter = in.getByte();
|
||||||
|
myIsMoving = in.getBool();
|
||||||
|
myWidth = in.getByte();
|
||||||
|
myEffectiveWidth = in.getByte();
|
||||||
|
myLastMovementTick = in.getByte();
|
||||||
|
|
||||||
|
myIsRendering = in.getBool();
|
||||||
|
myRenderCounter = in.getByte();
|
||||||
|
|
||||||
|
myDecodesOffset = in.getByte();
|
||||||
|
myDecodes = DrawCounterDecodes::get().missileDecodes()[myDecodesOffset];
|
||||||
|
|
||||||
|
myColor = in.getByte();
|
||||||
|
myObjectColor = in.getByte(); myDebugColor = in.getByte();
|
||||||
|
myDebugEnabled = in.getBool();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -278,5 +325,5 @@ bool Missile::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,6 +102,7 @@ class Missile : public Serializable
|
||||||
Int8 myRenderCounter;
|
Int8 myRenderCounter;
|
||||||
|
|
||||||
const uInt8* myDecodes;
|
const uInt8* myDecodes;
|
||||||
|
uInt8 myDecodesOffset; // needed for state saving
|
||||||
|
|
||||||
uInt8 myColor;
|
uInt8 myColor;
|
||||||
uInt8 myObjectColor, myDebugColor;
|
uInt8 myObjectColor, myDebugColor;
|
||||||
|
|
|
@ -105,14 +105,22 @@ void PaddleReader::updateCharge(double timestamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool PaddleReader::save(Serializer& out) const
|
bool PaddleReader::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
out.putString(name());
|
out.putString(name());
|
||||||
|
|
||||||
// TODO - save instance variables
|
out.putDouble(myUThresh);
|
||||||
|
out.putDouble(myU);
|
||||||
|
|
||||||
|
out.putDouble(myValue);
|
||||||
|
out.putDouble(myTimestamp);
|
||||||
|
|
||||||
|
out.putInt(int(myLayout));
|
||||||
|
out.putDouble(myClockFreq);
|
||||||
|
|
||||||
|
out.putBool(myIsDumped);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -120,11 +128,10 @@ bool PaddleReader::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool PaddleReader::load(Serializer& in)
|
bool PaddleReader::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -132,7 +139,16 @@ bool PaddleReader::load(Serializer& in)
|
||||||
if(in.getString() != name())
|
if(in.getString() != name())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
myUThresh = in.getDouble();
|
||||||
|
myU = in.getDouble();
|
||||||
|
|
||||||
|
myValue = in.getDouble();
|
||||||
|
myTimestamp = in.getDouble();
|
||||||
|
|
||||||
|
myLayout = FrameLayout(in.getInt());
|
||||||
|
myClockFreq = in.getDouble();
|
||||||
|
|
||||||
|
myIsDumped = in.getBool();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -140,5 +156,5 @@ bool PaddleReader::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ enum Count: Int8 {
|
||||||
Player::Player(uInt32 collisionMask)
|
Player::Player(uInt32 collisionMask)
|
||||||
: myCollisionMaskDisabled(collisionMask),
|
: myCollisionMaskDisabled(collisionMask),
|
||||||
myCollisionMaskEnabled(0xFFFF),
|
myCollisionMaskEnabled(0xFFFF),
|
||||||
myIsSuppressed(false)
|
myIsSuppressed(false),
|
||||||
|
myDecodesOffset(0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
@ -34,7 +35,7 @@ Player::Player(uInt32 collisionMask)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Player::reset()
|
void Player::reset()
|
||||||
{
|
{
|
||||||
myDecodes = DrawCounterDecodes::get().playerDecodes()[0];
|
myDecodes = DrawCounterDecodes::get().playerDecodes()[myDecodesOffset];
|
||||||
myHmmClocks = 0;
|
myHmmClocks = 0;
|
||||||
myCounter = 0;
|
myCounter = 0;
|
||||||
myIsMoving = false;
|
myIsMoving = false;
|
||||||
|
@ -74,9 +75,9 @@ void Player::hmp(uInt8 value)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Player::nusiz(uInt8 value, bool hblank)
|
void Player::nusiz(uInt8 value, bool hblank)
|
||||||
{
|
{
|
||||||
const uInt8 masked = value & 0x07;
|
myDecodesOffset = value & 0x07;
|
||||||
|
|
||||||
switch (masked) {
|
switch (myDecodesOffset) {
|
||||||
case 5:
|
case 5:
|
||||||
myDividerPending = 2;
|
myDividerPending = 2;
|
||||||
break;
|
break;
|
||||||
|
@ -92,7 +93,7 @@ void Player::nusiz(uInt8 value, bool hblank)
|
||||||
|
|
||||||
const uInt8* oldDecodes = myDecodes;
|
const uInt8* oldDecodes = myDecodes;
|
||||||
|
|
||||||
myDecodes = DrawCounterDecodes::get().playerDecodes()[masked];
|
myDecodes = DrawCounterDecodes::get().playerDecodes()[myDecodesOffset];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
myDecodes != oldDecodes &&
|
myDecodes != oldDecodes &&
|
||||||
|
@ -363,14 +364,42 @@ void Player::applyColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool Player::save(Serializer& out) const
|
bool Player::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
out.putString(name());
|
out.putString(name());
|
||||||
|
|
||||||
// TODO - save instance variables
|
out.putInt(collision);
|
||||||
|
out.putInt(myCollisionMaskDisabled);
|
||||||
|
out.putInt(myCollisionMaskEnabled);
|
||||||
|
|
||||||
|
out.putByte(myColor);
|
||||||
|
out.putByte(myObjectColor); out.putByte(myDebugColor);
|
||||||
|
out.putBool(myDebugEnabled);
|
||||||
|
|
||||||
|
out.putBool(myIsSuppressed);
|
||||||
|
|
||||||
|
out.putByte(myHmmClocks);
|
||||||
|
out.putByte(myCounter);
|
||||||
|
out.putBool(myIsMoving);
|
||||||
|
|
||||||
|
out.putBool(myIsRendering);
|
||||||
|
out.putByte(myRenderCounter);
|
||||||
|
out.putByte(myRenderCounterTripPoint);
|
||||||
|
out.putByte(myDivider);
|
||||||
|
out.putByte(myDividerPending);
|
||||||
|
out.putByte(mySampleCounter);
|
||||||
|
out.putByte(myDividerChangeCounter);
|
||||||
|
|
||||||
|
out.putByte(myDecodesOffset);
|
||||||
|
|
||||||
|
out.putByte(myPatternOld);
|
||||||
|
out.putByte(myPatternNew);
|
||||||
|
out.putByte(myPattern);
|
||||||
|
|
||||||
|
out.putBool(myIsReflected);
|
||||||
|
out.putBool(myIsDelaying);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -378,11 +407,10 @@ bool Player::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool Player::load(Serializer& in)
|
bool Player::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -390,7 +418,37 @@ bool Player::load(Serializer& in)
|
||||||
if(in.getString() != name())
|
if(in.getString() != name())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
collision = in.getInt();
|
||||||
|
myCollisionMaskDisabled = in.getInt();
|
||||||
|
myCollisionMaskEnabled = in.getInt();
|
||||||
|
|
||||||
|
myColor = in.getByte();
|
||||||
|
myObjectColor = in.getByte(); myDebugColor = in.getByte();
|
||||||
|
myDebugEnabled = in.getBool();
|
||||||
|
|
||||||
|
myIsSuppressed = in.getBool();
|
||||||
|
|
||||||
|
myHmmClocks = in.getByte();
|
||||||
|
myCounter = in.getByte();
|
||||||
|
myIsMoving = in.getBool();
|
||||||
|
|
||||||
|
myIsRendering = in.getBool();
|
||||||
|
myRenderCounter = in.getByte();
|
||||||
|
myRenderCounterTripPoint = in.getByte();
|
||||||
|
myDivider = in.getByte();
|
||||||
|
myDividerPending = in.getByte();
|
||||||
|
mySampleCounter = in.getByte();
|
||||||
|
myDividerChangeCounter = in.getByte();
|
||||||
|
|
||||||
|
myDecodesOffset = in.getByte();
|
||||||
|
myDecodes = DrawCounterDecodes::get().playerDecodes()[myDecodesOffset];
|
||||||
|
|
||||||
|
myPatternOld = in.getByte();
|
||||||
|
myPatternNew = in.getByte();
|
||||||
|
myPattern = in.getByte();
|
||||||
|
|
||||||
|
myIsReflected = in.getBool();
|
||||||
|
myIsDelaying = in.getBool();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -398,5 +456,5 @@ bool Player::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,7 @@ class Player : public Serializable
|
||||||
|
|
||||||
uInt32 myCollisionMaskDisabled;
|
uInt32 myCollisionMaskDisabled;
|
||||||
uInt32 myCollisionMaskEnabled;
|
uInt32 myCollisionMaskEnabled;
|
||||||
|
|
||||||
uInt8 myColor;
|
uInt8 myColor;
|
||||||
uInt8 myObjectColor, myDebugColor;
|
uInt8 myObjectColor, myDebugColor;
|
||||||
bool myDebugEnabled;
|
bool myDebugEnabled;
|
||||||
|
@ -113,6 +114,7 @@ class Player : public Serializable
|
||||||
Int8 myDividerChangeCounter;
|
Int8 myDividerChangeCounter;
|
||||||
|
|
||||||
const uInt8* myDecodes;
|
const uInt8* myDecodes;
|
||||||
|
uInt8 myDecodesOffset; // needed for state saving
|
||||||
|
|
||||||
uInt8 myPatternOld;
|
uInt8 myPatternOld;
|
||||||
uInt8 myPatternNew;
|
uInt8 myPatternNew;
|
||||||
|
|
|
@ -72,14 +72,14 @@ TIA::TIA(Console& console, Sound& sound, Settings& settings)
|
||||||
mySound(sound),
|
mySound(sound),
|
||||||
mySettings(settings),
|
mySettings(settings),
|
||||||
myDelayQueue(10, 20),
|
myDelayQueue(10, 20),
|
||||||
mySpriteEnabledBits(0xFF),
|
|
||||||
myCollisionsEnabledBits(0xFF),
|
|
||||||
myPlayfield(~CollisionMask::playfield & 0x7FFF),
|
myPlayfield(~CollisionMask::playfield & 0x7FFF),
|
||||||
myMissile0(~CollisionMask::missile0 & 0x7FFF),
|
myMissile0(~CollisionMask::missile0 & 0x7FFF),
|
||||||
myMissile1(~CollisionMask::missile1 & 0x7FFF),
|
myMissile1(~CollisionMask::missile1 & 0x7FFF),
|
||||||
myPlayer0(~CollisionMask::player0 & 0x7FFF),
|
myPlayer0(~CollisionMask::player0 & 0x7FFF),
|
||||||
myPlayer1(~CollisionMask::player1 & 0x7FFF),
|
myPlayer1(~CollisionMask::player1 & 0x7FFF),
|
||||||
myBall(~CollisionMask::ball & 0x7FFF)
|
myBall(~CollisionMask::ball & 0x7FFF),
|
||||||
|
mySpriteEnabledBits(0xFF),
|
||||||
|
myCollisionsEnabledBits(0xFF)
|
||||||
{
|
{
|
||||||
myFrameManager.setHandlers(
|
myFrameManager.setHandlers(
|
||||||
[this] () {
|
[this] () {
|
||||||
|
@ -196,9 +196,11 @@ bool TIA::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
out.putString(name());
|
out.putString(name());
|
||||||
|
|
||||||
// TODO - save instance variables
|
if(!mySound.save(out)) return false;
|
||||||
|
|
||||||
|
if(!myDelayQueue.save(out)) return false;
|
||||||
|
if(!myFrameManager.save(out)) return false;
|
||||||
|
|
||||||
// Save the state of each graphics object
|
|
||||||
if(!myBackground.save(out)) return false;
|
if(!myBackground.save(out)) return false;
|
||||||
if(!myPlayfield.save(out)) return false;
|
if(!myPlayfield.save(out)) return false;
|
||||||
if(!myMissile0.save(out)) return false;
|
if(!myMissile0.save(out)) return false;
|
||||||
|
@ -207,16 +209,51 @@ bool TIA::save(Serializer& out) const
|
||||||
if(!myPlayer1.save(out)) return false;
|
if(!myPlayer1.save(out)) return false;
|
||||||
if(!myBall.save(out)) return false;
|
if(!myBall.save(out)) return false;
|
||||||
|
|
||||||
// Save dumped input ports
|
|
||||||
for (const PaddleReader& paddleReader : myPaddleReaders)
|
for (const PaddleReader& paddleReader : myPaddleReaders)
|
||||||
if(!paddleReader.save(out)) return false;
|
if(!paddleReader.save(out)) return false;
|
||||||
|
|
||||||
// Save latched input ports
|
|
||||||
if(!myInput0.save(out)) return false;
|
if(!myInput0.save(out)) return false;
|
||||||
if(!myInput1.save(out)) return false;
|
if(!myInput1.save(out)) return false;
|
||||||
|
|
||||||
// Save the sound sample stuff ...
|
out.putBool(myTIAPinsDriven);
|
||||||
if(!mySound.save(out)) return false;
|
|
||||||
|
out.putInt(int(myHstate));
|
||||||
|
out.putBool(myIsFreshLine);
|
||||||
|
|
||||||
|
out.putInt(myHblankCtr);
|
||||||
|
out.putInt(myHctr);
|
||||||
|
out.putInt(myXDelta);
|
||||||
|
|
||||||
|
out.putBool(myCollisionUpdateRequired);
|
||||||
|
out.putInt(myCollisionMask);
|
||||||
|
|
||||||
|
out.putInt(myMovementClock);
|
||||||
|
out.putBool(myMovementInProgress);
|
||||||
|
out.putBool(myExtendedHblank);
|
||||||
|
|
||||||
|
out.putInt(myLinesSinceChange);
|
||||||
|
|
||||||
|
out.putInt(int(myPriority));
|
||||||
|
out.putByte(myCtrlPF);
|
||||||
|
|
||||||
|
out.putByte(mySubClock);
|
||||||
|
out.putInt(myLastCycle);
|
||||||
|
|
||||||
|
out.putByte(mySpriteEnabledBits);
|
||||||
|
out.putByte(myCollisionsEnabledBits);
|
||||||
|
|
||||||
|
out.putByte(myColorHBlank);
|
||||||
|
|
||||||
|
out.putDouble(myTimestamp);
|
||||||
|
|
||||||
|
out.putBool(myAutoFrameEnabled);
|
||||||
|
|
||||||
|
out.putByte(myAUDV0);
|
||||||
|
out.putByte(myAUDV1);
|
||||||
|
out.putByte(myAUDC0);
|
||||||
|
out.putByte(myAUDC1);
|
||||||
|
out.putByte(myAUDF0);
|
||||||
|
out.putByte(myAUDF1);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -224,7 +261,7 @@ bool TIA::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // for now, until class is finalized
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -235,9 +272,11 @@ bool TIA::load(Serializer& in)
|
||||||
if(in.getString() != name())
|
if(in.getString() != name())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
if(!mySound.load(in)) return false;
|
||||||
|
|
||||||
|
if(!myDelayQueue.load(in)) return false;
|
||||||
|
if(!myFrameManager.load(in)) return false;
|
||||||
|
|
||||||
// Load the state of each graphics object
|
|
||||||
if(!myBackground.load(in)) return false;
|
if(!myBackground.load(in)) return false;
|
||||||
if(!myPlayfield.load(in)) return false;
|
if(!myPlayfield.load(in)) return false;
|
||||||
if(!myMissile0.load(in)) return false;
|
if(!myMissile0.load(in)) return false;
|
||||||
|
@ -246,16 +285,51 @@ bool TIA::load(Serializer& in)
|
||||||
if(!myPlayer1.load(in)) return false;
|
if(!myPlayer1.load(in)) return false;
|
||||||
if(!myBall.load(in)) return false;
|
if(!myBall.load(in)) return false;
|
||||||
|
|
||||||
// Load dumped input ports
|
|
||||||
for (PaddleReader& paddleReader : myPaddleReaders)
|
for (PaddleReader& paddleReader : myPaddleReaders)
|
||||||
if(!paddleReader.load(in)) return false;
|
if(!paddleReader.load(in)) return false;
|
||||||
|
|
||||||
// Load latched input ports
|
|
||||||
if(!myInput0.load(in)) return false;
|
if(!myInput0.load(in)) return false;
|
||||||
if(!myInput1.load(in)) return false;
|
if(!myInput1.load(in)) return false;
|
||||||
|
|
||||||
// Load the sound sample stuff ...
|
myTIAPinsDriven = in.getBool();
|
||||||
if(!mySound.load(in)) return false;
|
|
||||||
|
myHstate = HState(in.getInt());
|
||||||
|
myIsFreshLine = in.getBool();
|
||||||
|
|
||||||
|
myHblankCtr = in.getInt();
|
||||||
|
myHctr = in.getInt();
|
||||||
|
myXDelta = in.getInt();
|
||||||
|
|
||||||
|
myCollisionUpdateRequired = in.getBool();
|
||||||
|
myCollisionMask = in.getInt();
|
||||||
|
|
||||||
|
myMovementClock = in.getInt();
|
||||||
|
myMovementInProgress = in.getBool();
|
||||||
|
myExtendedHblank = in.getBool();
|
||||||
|
|
||||||
|
myLinesSinceChange = in.getInt();
|
||||||
|
|
||||||
|
myPriority = Priority(in.getInt());
|
||||||
|
myCtrlPF = in.getByte();
|
||||||
|
|
||||||
|
mySubClock = in.getByte();
|
||||||
|
myLastCycle = in.getInt();
|
||||||
|
|
||||||
|
mySpriteEnabledBits = in.getByte();
|
||||||
|
myCollisionsEnabledBits = in.getByte();
|
||||||
|
|
||||||
|
myColorHBlank = in.getByte();
|
||||||
|
|
||||||
|
myTimestamp = in.getDouble();
|
||||||
|
|
||||||
|
myAutoFrameEnabled = in.getBool();
|
||||||
|
|
||||||
|
myAUDV0 = in.getByte();
|
||||||
|
myAUDV1 = in.getByte();
|
||||||
|
myAUDC0 = in.getByte();
|
||||||
|
myAUDC1 = in.getByte();
|
||||||
|
myAUDF0 = in.getByte();
|
||||||
|
myAUDF1 = in.getByte();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -263,7 +337,7 @@ bool TIA::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // for now, until class is finalized
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -409,11 +409,27 @@ class TIA : public Device
|
||||||
Sound& mySound;
|
Sound& mySound;
|
||||||
Settings& mySettings;
|
Settings& mySettings;
|
||||||
|
|
||||||
bool myTIAPinsDriven;
|
|
||||||
|
|
||||||
DelayQueue myDelayQueue;
|
DelayQueue myDelayQueue;
|
||||||
FrameManager myFrameManager;
|
FrameManager myFrameManager;
|
||||||
|
|
||||||
|
Background myBackground;
|
||||||
|
Playfield myPlayfield;
|
||||||
|
Missile myMissile0;
|
||||||
|
Missile myMissile1;
|
||||||
|
Player myPlayer0;
|
||||||
|
Player myPlayer1;
|
||||||
|
Ball myBall;
|
||||||
|
PaddleReader myPaddleReaders[4];
|
||||||
|
|
||||||
|
LatchedInput myInput0;
|
||||||
|
LatchedInput myInput1;
|
||||||
|
|
||||||
|
// Pointer to the current and previous frame buffers
|
||||||
|
BytePtr myCurrentFrameBuffer;
|
||||||
|
BytePtr myPreviousFrameBuffer;
|
||||||
|
|
||||||
|
bool myTIAPinsDriven;
|
||||||
|
|
||||||
HState myHstate;
|
HState myHstate;
|
||||||
bool myIsFreshLine;
|
bool myIsFreshLine;
|
||||||
|
|
||||||
|
@ -446,22 +462,6 @@ class TIA : public Device
|
||||||
// Automatic framerate correction based on number of scanlines
|
// Automatic framerate correction based on number of scanlines
|
||||||
bool myAutoFrameEnabled;
|
bool myAutoFrameEnabled;
|
||||||
|
|
||||||
// Pointer to the current and previous frame buffers
|
|
||||||
BytePtr myCurrentFrameBuffer;
|
|
||||||
BytePtr myPreviousFrameBuffer;
|
|
||||||
|
|
||||||
Background myBackground;
|
|
||||||
Playfield myPlayfield;
|
|
||||||
Missile myMissile0;
|
|
||||||
Missile myMissile1;
|
|
||||||
Player myPlayer0;
|
|
||||||
Player myPlayer1;
|
|
||||||
Ball myBall;
|
|
||||||
PaddleReader myPaddleReaders[4];
|
|
||||||
|
|
||||||
LatchedInput myInput0;
|
|
||||||
LatchedInput myInput1;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
// Audio values; only used by TIADebug
|
// Audio values; only used by TIADebug
|
||||||
// FIXME - remove this when the new sound core is implemented
|
// FIXME - remove this when the new sound core is implemented
|
||||||
|
|
|
@ -185,14 +185,25 @@ void VblankManager::setVblankMode(VblankMode mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool VblankManager::save(Serializer& out) const
|
bool VblankManager::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
out.putString(name());
|
out.putString(name());
|
||||||
|
|
||||||
// TODO - save instance variables
|
out.putInt(myVblankLines);
|
||||||
|
out.putInt(myYstart);
|
||||||
|
out.putBool(myVblank);
|
||||||
|
out.putInt(myCurrentLine);
|
||||||
|
|
||||||
|
out.putInt(int(myMode));
|
||||||
|
out.putInt(myLastVblankLines);
|
||||||
|
out.putByte(myVblankViolations);
|
||||||
|
out.putByte(myStableVblankFrames);
|
||||||
|
out.putBool(myVblankViolated);
|
||||||
|
out.putByte(myFramesInLockedMode);
|
||||||
|
|
||||||
|
out.putBool(myIsRunning);
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -200,11 +211,10 @@ bool VblankManager::save(Serializer& out) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TODO: implement this once the class is finalized
|
|
||||||
bool VblankManager::load(Serializer& in)
|
bool VblankManager::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -212,7 +222,19 @@ bool VblankManager::load(Serializer& in)
|
||||||
if(in.getString() != name())
|
if(in.getString() != name())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO - load instance variables
|
myVblankLines = in.getInt();
|
||||||
|
myYstart = in.getInt();
|
||||||
|
myVblank = in.getBool();
|
||||||
|
myCurrentLine = in.getInt();
|
||||||
|
|
||||||
|
myMode = VblankMode(in.getInt());
|
||||||
|
myLastVblankLines = in.getInt();
|
||||||
|
myVblankViolations = in.getByte();
|
||||||
|
myStableVblankFrames = in.getByte();
|
||||||
|
myVblankViolated = in.getBool();
|
||||||
|
myFramesInLockedMode = in.getByte();
|
||||||
|
|
||||||
|
myIsRunning = in.getBool();
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
@ -220,5 +242,5 @@ bool VblankManager::load(Serializer& in)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue