mirror of https://github.com/stella-emu/stella.git
Audio state serialization.
This commit is contained in:
parent
025adc59aa
commit
d70b0d8c40
|
@ -114,3 +114,51 @@ AudioChannel& Audio::channel1()
|
||||||
{
|
{
|
||||||
return myChannel1;
|
return myChannel1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
string Audio::name() const
|
||||||
|
{
|
||||||
|
return "TIA_Audio";
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool Audio::save(Serializer& out) const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
out.putString(name());
|
||||||
|
|
||||||
|
out.putInt(myCounter);
|
||||||
|
|
||||||
|
if (!myChannel0.save(out)) return false;
|
||||||
|
if (!myChannel1.save(out)) return false;
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_Audio::save" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool Audio::load(Serializer& in)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (in.getString() != name()) return false;
|
||||||
|
|
||||||
|
myCounter = in.getInt();
|
||||||
|
|
||||||
|
if (!myChannel0.load(in)) return false;
|
||||||
|
if (!myChannel1.load(in)) return false;
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_Audio::load" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -20,10 +20,11 @@
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "AudioChannel.hxx"
|
#include "AudioChannel.hxx"
|
||||||
|
#include "Serializable.hxx"
|
||||||
|
|
||||||
class AudioQueue;
|
class AudioQueue;
|
||||||
|
|
||||||
class Audio
|
class Audio : public Serializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Audio();
|
Audio();
|
||||||
|
@ -38,6 +39,13 @@ class Audio
|
||||||
|
|
||||||
AudioChannel& channel1();
|
AudioChannel& channel1();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Serializable methods (see that class for more information).
|
||||||
|
*/
|
||||||
|
bool save(Serializer& out) const override;
|
||||||
|
bool load(Serializer& in) override;
|
||||||
|
string name() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void phase1();
|
void phase1();
|
||||||
|
|
||||||
|
|
|
@ -141,3 +141,67 @@ void AudioChannel::audf(uInt8 value)
|
||||||
{
|
{
|
||||||
myAudf = value & 0x1f;
|
myAudf = value & 0x1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
string AudioChannel::name() const
|
||||||
|
{
|
||||||
|
return "TIA_AudioChannel";
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool AudioChannel::save(Serializer& out) const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
out.putString(name());
|
||||||
|
|
||||||
|
out.putInt(myAudc);
|
||||||
|
out.putInt(myAudv);
|
||||||
|
out.putInt(myAudf);
|
||||||
|
|
||||||
|
out.putBool(myClockEnable);
|
||||||
|
out.putBool(myNoiseFeedback);
|
||||||
|
out.putBool(myNoiseCounterBit4);
|
||||||
|
out.putBool(myPulseCounterHold);
|
||||||
|
|
||||||
|
out.putInt(myDivCounter);
|
||||||
|
out.putInt(myPulseCounter);
|
||||||
|
out.putInt(myNoiseCounter);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_AudioChannel::save" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool AudioChannel::load(Serializer& in)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (in.getString() != name()) return false;
|
||||||
|
|
||||||
|
myAudc = in.getInt();
|
||||||
|
myAudv = in.getInt();
|
||||||
|
myAudf = in.getInt();
|
||||||
|
|
||||||
|
myClockEnable = in.getBool();
|
||||||
|
myNoiseFeedback = in.getBool();
|
||||||
|
myNoiseCounterBit4 = in.getBool();
|
||||||
|
myPulseCounterHold = in.getBool();
|
||||||
|
|
||||||
|
myDivCounter = in.getInt();
|
||||||
|
myPulseCounter = in.getInt();
|
||||||
|
myNoiseCounter = in.getInt();
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "ERROR: TIA_AudioChannel::load" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -19,8 +19,9 @@
|
||||||
#define TIA_AUDIO_CHANNEL_HXX
|
#define TIA_AUDIO_CHANNEL_HXX
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
|
#include "Serializable.hxx"
|
||||||
|
|
||||||
class AudioChannel
|
class AudioChannel : public Serializable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AudioChannel();
|
AudioChannel();
|
||||||
|
@ -37,6 +38,13 @@ class AudioChannel
|
||||||
|
|
||||||
void audv(uInt8 value);
|
void audv(uInt8 value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Serializable methods (see that class for more information).
|
||||||
|
*/
|
||||||
|
bool save(Serializer& out) const override;
|
||||||
|
bool load(Serializer& in) override;
|
||||||
|
string name() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uInt8 myAudc;
|
uInt8 myAudc;
|
||||||
uInt8 myAudv;
|
uInt8 myAudv;
|
||||||
|
|
|
@ -240,6 +240,7 @@ bool TIA::save(Serializer& out) const
|
||||||
if(!myPlayer0.save(out)) return false;
|
if(!myPlayer0.save(out)) return false;
|
||||||
if(!myPlayer1.save(out)) return false;
|
if(!myPlayer1.save(out)) return false;
|
||||||
if(!myBall.save(out)) return false;
|
if(!myBall.save(out)) return false;
|
||||||
|
if(!myAudio.save(out)) return false;
|
||||||
|
|
||||||
for (const PaddleReader& paddleReader : myPaddleReaders)
|
for (const PaddleReader& paddleReader : myPaddleReaders)
|
||||||
if(!paddleReader.save(out)) return false;
|
if(!paddleReader.save(out)) return false;
|
||||||
|
@ -309,6 +310,7 @@ bool TIA::load(Serializer& in)
|
||||||
if(!myPlayer0.load(in)) return false;
|
if(!myPlayer0.load(in)) return false;
|
||||||
if(!myPlayer1.load(in)) return false;
|
if(!myPlayer1.load(in)) return false;
|
||||||
if(!myBall.load(in)) return false;
|
if(!myBall.load(in)) return false;
|
||||||
|
if(!myAudio.load(in)) return false;
|
||||||
|
|
||||||
for (PaddleReader& paddleReader : myPaddleReaders)
|
for (PaddleReader& paddleReader : myPaddleReaders)
|
||||||
if(!paddleReader.load(in)) return false;
|
if(!paddleReader.load(in)) return false;
|
||||||
|
|
Loading…
Reference in New Issue