Abstract common frame manager interface.

This commit is contained in:
Christian Speckner 2017-10-02 00:52:56 +02:00
parent 58b38269a6
commit d220888474
5 changed files with 330 additions and 18 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ project.xcworkspace/
xcuserdata/
build/
src/macosx/M6502.ins
*.dSYM

View File

@ -0,0 +1,134 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "AbstractFrameManager.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AbstractFrameManager::AbstractFrameManager() :
myIsRendering(false),
myVsync(false),
myVblank(false),
myCurrentFrameFinalLines(0),
myPreviousFrameFinalLines(0),
myTotalFrames(0),
myLayout(FrameLayout::ntsc),
myFrameRate(0),
myOnFrameComplete(0),
myOnFrameStart(0),
myOnRenderingStart(0)
{}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::setHandlers(
callback frameStartCallback,
callback frameCompletionCallback,
callback renderingStartCallback
) {
myOnFrameStart = frameStartCallback;
myOnFrameComplete = frameCompletionCallback;
myOnRenderingStart = renderingStartCallback;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::setVblank(bool vblank)
{
if (vblank == myVblank) return;
myVblank = vblank;
onSetVblank();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::setVsync(bool vsync)
{
if (vsync == myVsync) return;
myVsync = vsync;
onSetVsync();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::notifyFrameStart()
{
if (myOnFrameStart) myOnFrameStart();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::notifyFrameComplete(uInt32 finalScanlines)
{
myPreviousFrameFinalLines = myCurrentFrameFinalLines;
myCurrentFrameFinalLines = finalScanlines;
myTotalFrames++;
if (myOnFrameComplete) myOnFrameComplete();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void AbstractFrameManager::notifyRenderingStart()
{
if (myOnRenderingStart) myOnRenderingStart();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool AbstractFrameManager::save(Serializer& out) const
{
try {
out.putString(name());
out.putBool(myIsRendering);
out.putBool(myVsync);
out.putBool(myVblank);
out.putInt(myCurrentFrameFinalLines);
out.putInt(myPreviousFrameFinalLines);
out.putInt(myTotalFrames);
out.putInt(uInt32(myLayout));
out.putDouble(myFrameRate);
return onSave(out);
}
catch(...)
{
cerr << "ERROR: AbstractFrameManager::save" << endl;
return false;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool AbstractFrameManager::load(Serializer& in)
{
try {
if (in.getString() != name()) return false;
myIsRendering = in.getBool();
myVsync = in.getBool();
myVblank = in.getBool();
myCurrentFrameFinalLines = in.getInt();
myPreviousFrameFinalLines = in.getInt();
myTotalFrames = in.getInt();
myLayout = FrameLayout(in.getInt());
myFrameRate = float(in.getDouble());
return onLoad(in);
}
catch(...)
{
cerr << "ERROR: AbstractFrameManager::load" << endl;
return false;
}
}

View File

@ -0,0 +1,157 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef TIA_ABSTRACT_FRAME_MANAGER
#define TIA_ABSTRACT_FRAME_MANAGER
#include <functional>
#include "Serializable.hxx"
#include "FrameLayout.hxx"
class AbstractFrameManager : public Serializable
{
public:
using callback = std::function<void()>;
public:
AbstractFrameManager();
public:
void setHandlers(
callback frameStartCallback,
callback frameCompletionCallback,
callback renderingStartCallback
);
void setVblank(bool vblank);
void setVsync(bool vsync);
bool isRendering() const { return myIsRendering; }
bool vsync() const { return myVsync; }
bool vblank() const { return myVblank; }
uInt32 scanlinesLastFrame() const { return myCurrentFrameFinalLines; }
bool scanlineCountTransitioned() const {
return (myPreviousFrameFinalLines & 0x1) != (myCurrentFrameFinalLines & 0x1);
}
uInt32 frameCount() const { return myTotalFrames; }
FrameLayout layout() const { return myLayout; };
float frameRate() const { return myFrameRate; }
public:
virtual void setJitterFactor(uInt8 factor) {}
virtual bool jitterEnabled() const { return false; }
virtual void enableJitter(bool enabled) {};
bool save(Serializer& out) const override;
bool load(Serializer& in) override;
public:
virtual void reset() = 0;
virtual void nextLine() = 0;
virtual uInt32 height() const = 0;
virtual void setFixedHeight(uInt32 height) = 0;
virtual uInt32 getY() const = 0;
virtual uInt32 scanlines() const = 0;
virtual uInt32 missingScanlines() const = 0;
virtual void setYstart(uInt32 ystart) = 0;
virtual uInt32 ystart() = 0;
// TODO: this looks pretty weird --- does this actually work?
virtual bool ystartIsAuto(uInt32 line) const = 0;
// TODO: this has to go
virtual void autodetectLayout(bool toggle) = 0;
virtual void setLayout(FrameLayout mode) = 0;
protected:
virtual void onSetVblank() {}
virtual void onSetVsync() {}
virtual bool onSave(Serializer& out) const { throw runtime_error("cannot be serialized"); }
virtual bool onLoad(Serializer& in) { throw runtime_error("cannot be serialized"); }
protected:
void notifyFrameStart();
void notifyFrameComplete(uInt32 finalScanlines);
void notifyRenderingStart();
protected:
bool myIsRendering;
bool myVsync;
bool myVblank;
uInt32 myCurrentFrameFinalLines;
uInt32 myPreviousFrameFinalLines;
uInt32 myTotalFrames;
FrameLayout myLayout;
float myFrameRate;
private:
callback myOnFrameStart;
callback myOnFrameComplete;
callback myOnRenderingStart;
private:
AbstractFrameManager(const AbstractFrameManager&) = delete;
AbstractFrameManager(AbstractFrameManager&&) = delete;
AbstractFrameManager& operator=(const AbstractFrameManager&);
AbstractFrameManager& operator=(AbstractFrameManager&&);
};
#endif // TIA_ABSTRACT_FRAME_MANAGER

View File

@ -2,7 +2,8 @@ MODULE := src/emucore/tia/frame-manager
MODULE_OBJS := \
src/emucore/tia/frame-manager/FrameManager.o \
src/emucore/tia/frame-manager/VblankManager.o
src/emucore/tia/frame-manager/VblankManager.o \
src/emucore/tia/frame-manager/AbstractFrameManager.o
MODULE_DIRS += \
src/emucore/tia/frame-manager

View File

@ -364,8 +364,6 @@
DC6C726313CDEA0A008A5975 /* LoggerDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6C726113CDEA0A008A5975 /* LoggerDialog.hxx */; };
DC6D39871A3CE65000171E71 /* CartWDWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC6D39851A3CE65000171E71 /* CartWDWidget.cxx */; };
DC6D39881A3CE65000171E71 /* CartWDWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6D39861A3CE65000171E71 /* CartWDWidget.hxx */; };
DC72B2221E356F4F009056D0 /* VblankManager.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC72B2201E356F4F009056D0 /* VblankManager.cxx */; };
DC72B2231E356F4F009056D0 /* VblankManager.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC72B2211E356F4F009056D0 /* VblankManager.hxx */; };
DC73BD851915E5B1003FAFAD /* FBSurfaceSDL2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC73BD831915E5B1003FAFAD /* FBSurfaceSDL2.cxx */; };
DC73BD861915E5B1003FAFAD /* FBSurfaceSDL2.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC73BD841915E5B1003FAFAD /* FBSurfaceSDL2.hxx */; };
DC73BD891915E5E3003FAFAD /* FBSurface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC73BD871915E5E3003FAFAD /* FBSurface.cxx */; };
@ -549,8 +547,6 @@
DCF3A6EE1DFC75E3008A8AF3 /* DelayQueueMember.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCF3A6D41DFC75E3008A8AF3 /* DelayQueueMember.hxx */; };
DCF3A6EF1DFC75E3008A8AF3 /* DrawCounterDecodes.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCF3A6D51DFC75E3008A8AF3 /* DrawCounterDecodes.cxx */; };
DCF3A6F01DFC75E3008A8AF3 /* DrawCounterDecodes.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCF3A6D61DFC75E3008A8AF3 /* DrawCounterDecodes.hxx */; };
DCF3A6F11DFC75E3008A8AF3 /* FrameManager.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCF3A6D71DFC75E3008A8AF3 /* FrameManager.cxx */; };
DCF3A6F21DFC75E3008A8AF3 /* FrameManager.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCF3A6D81DFC75E3008A8AF3 /* FrameManager.hxx */; };
DCF3A6F31DFC75E3008A8AF3 /* LatchedInput.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCF3A6D91DFC75E3008A8AF3 /* LatchedInput.cxx */; };
DCF3A6F41DFC75E3008A8AF3 /* LatchedInput.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCF3A6DA1DFC75E3008A8AF3 /* LatchedInput.hxx */; };
DCF3A6F51DFC75E3008A8AF3 /* Missile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCF3A6DB1DFC75E3008A8AF3 /* Missile.cxx */; };
@ -580,6 +576,12 @@
DCFF14CE18B0260300A20364 /* EventHandlerSDL2.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCFF14CC18B0260300A20364 /* EventHandlerSDL2.hxx */; };
DCFFE59D12100E1400DFA000 /* ComboDialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCFFE59B12100E1400DFA000 /* ComboDialog.cxx */; };
DCFFE59E12100E1400DFA000 /* ComboDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCFFE59C12100E1400DFA000 /* ComboDialog.hxx */; };
E0406FB61F81A85400A82AE0 /* AbstractFrameManager.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD781F81A358000F3505 /* AbstractFrameManager.cxx */; };
E0406FB71F81A85400A82AE0 /* AbstractFrameManager.hxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD791F81A358000F3505 /* AbstractFrameManager.hxx */; };
E0406FB81F81A85400A82AE0 /* FrameManager.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD7B1F81A358000F3505 /* FrameManager.cxx */; };
E0406FB91F81A85400A82AE0 /* FrameManager.hxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD7C1F81A358000F3505 /* FrameManager.hxx */; };
E0406FBA1F81A85400A82AE0 /* VblankManager.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD7E1F81A358000F3505 /* VblankManager.cxx */; };
E0406FBB1F81A85400A82AE0 /* VblankManager.hxx in Sources */ = {isa = PBXBuildFile; fileRef = E0DFDD7F1F81A358000F3505 /* VblankManager.hxx */; };
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
@ -590,6 +592,7 @@
isEditable = 1;
outputFiles = (
);
script = "";
};
DC5EE7DF14F7C32D001C628C /* PBXBuildRule */ = {
isa = PBXBuildRule;
@ -598,6 +601,7 @@
isEditable = 1;
outputFiles = (
);
script = "";
};
DC5EE7E014F7C32D001C628C /* PBXBuildRule */ = {
isa = PBXBuildRule;
@ -606,6 +610,7 @@
isEditable = 1;
outputFiles = (
);
script = "";
};
/* End PBXBuildRule section */
@ -988,8 +993,6 @@
DC6C726113CDEA0A008A5975 /* LoggerDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LoggerDialog.hxx; sourceTree = "<group>"; };
DC6D39851A3CE65000171E71 /* CartWDWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartWDWidget.cxx; sourceTree = "<group>"; };
DC6D39861A3CE65000171E71 /* CartWDWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartWDWidget.hxx; sourceTree = "<group>"; };
DC72B2201E356F4F009056D0 /* VblankManager.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VblankManager.cxx; sourceTree = "<group>"; };
DC72B2211E356F4F009056D0 /* VblankManager.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = VblankManager.hxx; sourceTree = "<group>"; };
DC73BD831915E5B1003FAFAD /* FBSurfaceSDL2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBSurfaceSDL2.cxx; sourceTree = "<group>"; };
DC73BD841915E5B1003FAFAD /* FBSurfaceSDL2.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FBSurfaceSDL2.hxx; sourceTree = "<group>"; };
DC73BD871915E5E3003FAFAD /* FBSurface.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBSurface.cxx; sourceTree = "<group>"; };
@ -1175,8 +1178,6 @@
DCF3A6D41DFC75E3008A8AF3 /* DelayQueueMember.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DelayQueueMember.hxx; sourceTree = "<group>"; };
DCF3A6D51DFC75E3008A8AF3 /* DrawCounterDecodes.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawCounterDecodes.cxx; sourceTree = "<group>"; };
DCF3A6D61DFC75E3008A8AF3 /* DrawCounterDecodes.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DrawCounterDecodes.hxx; sourceTree = "<group>"; };
DCF3A6D71DFC75E3008A8AF3 /* FrameManager.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameManager.cxx; sourceTree = "<group>"; };
DCF3A6D81DFC75E3008A8AF3 /* FrameManager.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FrameManager.hxx; sourceTree = "<group>"; };
DCF3A6D91DFC75E3008A8AF3 /* LatchedInput.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LatchedInput.cxx; sourceTree = "<group>"; };
DCF3A6DA1DFC75E3008A8AF3 /* LatchedInput.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LatchedInput.hxx; sourceTree = "<group>"; };
DCF3A6DB1DFC75E3008A8AF3 /* Missile.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Missile.cxx; sourceTree = "<group>"; };
@ -1206,6 +1207,12 @@
DCFF14CC18B0260300A20364 /* EventHandlerSDL2.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventHandlerSDL2.hxx; sourceTree = "<group>"; };
DCFFE59B12100E1400DFA000 /* ComboDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComboDialog.cxx; sourceTree = "<group>"; };
DCFFE59C12100E1400DFA000 /* ComboDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ComboDialog.hxx; sourceTree = "<group>"; };
E0DFDD781F81A358000F3505 /* AbstractFrameManager.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractFrameManager.cxx; sourceTree = "<group>"; };
E0DFDD791F81A358000F3505 /* AbstractFrameManager.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = AbstractFrameManager.hxx; sourceTree = "<group>"; };
E0DFDD7B1F81A358000F3505 /* FrameManager.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FrameManager.cxx; sourceTree = "<group>"; };
E0DFDD7C1F81A358000F3505 /* FrameManager.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = FrameManager.hxx; sourceTree = "<group>"; };
E0DFDD7E1F81A358000F3505 /* VblankManager.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VblankManager.cxx; sourceTree = "<group>"; };
E0DFDD7F1F81A358000F3505 /* VblankManager.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = VblankManager.hxx; sourceTree = "<group>"; };
F5A47A9D01A0482F01D3D55B /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = SOURCE_ROOT; };
F5A47A9E01A0483001D3D55B /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SDLMain.m; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
@ -1933,6 +1940,7 @@
DCE903E31DF5DCD10080A7F3 /* tia */ = {
isa = PBXGroup;
children = (
E0DFDD731F81A358000F3505 /* frame-manager */,
DCF3A6CD1DFC75E3008A8AF3 /* Background.cxx */,
DCF3A6CE1DFC75E3008A8AF3 /* Background.hxx */,
DCF3A6CF1DFC75E3008A8AF3 /* Ball.cxx */,
@ -1944,8 +1952,6 @@
DCF3A6D51DFC75E3008A8AF3 /* DrawCounterDecodes.cxx */,
DCF3A6D61DFC75E3008A8AF3 /* DrawCounterDecodes.hxx */,
DCE8B1861E7E03B300189864 /* FrameLayout.hxx */,
DCF3A6D71DFC75E3008A8AF3 /* FrameManager.cxx */,
DCF3A6D81DFC75E3008A8AF3 /* FrameManager.hxx */,
DCF3A6D91DFC75E3008A8AF3 /* LatchedInput.cxx */,
DCF3A6DA1DFC75E3008A8AF3 /* LatchedInput.hxx */,
DCF3A6DB1DFC75E3008A8AF3 /* Missile.cxx */,
@ -1958,12 +1964,23 @@
DCF3A6E31DFC75E3008A8AF3 /* Playfield.hxx */,
DCF3A6E41DFC75E3008A8AF3 /* TIA.cxx */,
DCF3A6E51DFC75E3008A8AF3 /* TIA.hxx */,
DC72B2201E356F4F009056D0 /* VblankManager.cxx */,
DC72B2211E356F4F009056D0 /* VblankManager.hxx */,
);
path = tia;
sourceTree = "<group>";
};
E0DFDD731F81A358000F3505 /* frame-manager */ = {
isa = PBXGroup;
children = (
E0DFDD781F81A358000F3505 /* AbstractFrameManager.cxx */,
E0DFDD791F81A358000F3505 /* AbstractFrameManager.hxx */,
E0DFDD7B1F81A358000F3505 /* FrameManager.cxx */,
E0DFDD7C1F81A358000F3505 /* FrameManager.hxx */,
E0DFDD7E1F81A358000F3505 /* VblankManager.cxx */,
E0DFDD7F1F81A358000F3505 /* VblankManager.hxx */,
);
path = "frame-manager";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@ -2060,7 +2077,6 @@
2D91742309BA90380026E9FF /* DebuggerParser.hxx in Headers */,
2D91742409BA90380026E9FF /* EditableWidget.hxx in Headers */,
DC3EE86F1E2C0E6D00905161 /* zutil.h in Headers */,
DCF3A6F21DFC75E3008A8AF3 /* FrameManager.hxx in Headers */,
2D91742509BA90380026E9FF /* EditTextWidget.hxx in Headers */,
DCB87E581A104C1E00BF2A3B /* MediaFactory.hxx in Headers */,
2D91742809BA90380026E9FF /* PackedBitArray.hxx in Headers */,
@ -2150,7 +2166,6 @@
DCF7B0DE10A762FC007A2870 /* CartF0.hxx in Headers */,
DCF7B0E010A762FC007A2870 /* CartFA.hxx in Headers */,
DCC527D110B9DA19005E1287 /* Device.hxx in Headers */,
DC72B2231E356F4F009056D0 /* VblankManager.hxx in Headers */,
DCC527D310B9DA19005E1287 /* M6502.hxx in Headers */,
DC3EE8661E2C0E6D00905161 /* inflate.h in Headers */,
DCC527D510B9DA19005E1287 /* NullDev.hxx in Headers */,
@ -2365,6 +2380,12 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E0406FB61F81A85400A82AE0 /* AbstractFrameManager.cxx in Sources */,
E0406FB71F81A85400A82AE0 /* AbstractFrameManager.hxx in Sources */,
E0406FB81F81A85400A82AE0 /* FrameManager.cxx in Sources */,
E0406FB91F81A85400A82AE0 /* FrameManager.hxx in Sources */,
E0406FBA1F81A85400A82AE0 /* VblankManager.cxx in Sources */,
E0406FBB1F81A85400A82AE0 /* VblankManager.hxx in Sources */,
2D91747409BA90380026E9FF /* SDLMain.m in Sources */,
2D91747509BA90380026E9FF /* Booster.cxx in Sources */,
DC3EE8671E2C0E6D00905161 /* inftrees.c in Sources */,
@ -2530,7 +2551,6 @@
DCAD60A81152F8BD00BC4184 /* CartDPCPlus.cxx in Sources */,
DCD6FC7011C281ED005DA767 /* png.c in Sources */,
DCD6FC7311C281ED005DA767 /* pngerror.c in Sources */,
DCF3A6F11DFC75E3008A8AF3 /* FrameManager.cxx in Sources */,
DCF3A6E71DFC75E3008A8AF3 /* Background.cxx in Sources */,
DCD6FC7411C281ED005DA767 /* pngget.c in Sources */,
DCD6FC7511C281ED005DA767 /* pngmem.c in Sources */,
@ -2589,7 +2609,6 @@
DCAAE5E81715887B0080BB82 /* CartF6SCWidget.cxx in Sources */,
DCAAE5EA1715887B0080BB82 /* CartF6Widget.cxx in Sources */,
DCAAE5EC1715887B0080BB82 /* CartF8SCWidget.cxx in Sources */,
DC72B2221E356F4F009056D0 /* VblankManager.cxx in Sources */,
DCAAE5EE1715887B0080BB82 /* CartF8Widget.cxx in Sources */,
DCAAE5F01715887B0080BB82 /* CartFAWidget.cxx in Sources */,
DCAAE5F21715887B0080BB82 /* CartUAWidget.cxx in Sources */,