mirror of https://github.com/stella-emu/stella.git
Fixes, refactor TIA to extend AbstractTIA .
This commit is contained in:
parent
cdfac18f1c
commit
9a85bf5405
|
@ -39,9 +39,9 @@ class AbstractTIA: public Device
|
|||
|
||||
virtual void update() = 0;
|
||||
|
||||
virtual const uInt8* currenFrameBuffer() const = 0;
|
||||
virtual uInt8* currentFrameBuffer() const = 0;
|
||||
|
||||
virtual const uInt8 previousFrameBuffer() const = 0;
|
||||
virtual uInt8* previousFrameBuffer() const = 0;
|
||||
|
||||
virtual uInt32 width() const {
|
||||
return 160;
|
||||
|
@ -53,7 +53,7 @@ class AbstractTIA: public Device
|
|||
|
||||
virtual void setHeight(uInt32 height) = 0;
|
||||
|
||||
virtual void setWidth(uInt32 width) = 0;
|
||||
virtual void setYStart(uInt32 ystart) = 0;
|
||||
|
||||
virtual void enableAutoFrame(bool enabled) = 0;
|
||||
|
||||
|
@ -69,7 +69,7 @@ class AbstractTIA: public Device
|
|||
|
||||
virtual uInt32 startScanline() const = 0;
|
||||
|
||||
virtual bool scanlinePos(uInt16& x, uInt16& y) = 0;
|
||||
virtual bool scanlinePos(uInt16& x, uInt16& y) const = 0;
|
||||
|
||||
virtual bool toggleBit(TIABit b, uInt8 mode = 2) = 0;
|
||||
|
||||
|
@ -77,11 +77,11 @@ class AbstractTIA: public Device
|
|||
|
||||
virtual bool toggleCollision(TIABit b, uInt8 mode = 2) = 0;
|
||||
|
||||
virtual bool toogleCollisions() = 0;
|
||||
virtual bool toggleCollisions() = 0;
|
||||
|
||||
virtual bool toggleHMOVEBlank() = 0;
|
||||
|
||||
virtual bool toggleFixedColor(uInt8 mode = 2) = 0;
|
||||
virtual bool toggleFixedColors(uInt8 mode = 2) = 0;
|
||||
|
||||
virtual bool driveUnusedPinsRandom(uInt8 mode = 2) = 0;
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ class Console;
|
|||
class Settings;
|
||||
class Sound;
|
||||
|
||||
#include "AbstractTIA.hxx"
|
||||
#include "bspf.hxx"
|
||||
#include "Device.hxx"
|
||||
#include "System.hxx"
|
||||
#include "TIATables.hxx"
|
||||
|
||||
|
@ -43,7 +43,7 @@ class Sound;
|
|||
@author Bradford W. Mott
|
||||
@version $Id$
|
||||
*/
|
||||
class TIA : public Device
|
||||
class TIA : public AbstractTIA
|
||||
{
|
||||
public:
|
||||
friend class TIADebug;
|
||||
|
@ -68,7 +68,7 @@ class TIA : public Device
|
|||
/**
|
||||
Reset frame to current YStart/Height properties
|
||||
*/
|
||||
void frameReset();
|
||||
void frameReset() override;
|
||||
|
||||
/**
|
||||
Notification method invoked by the system right before the
|
||||
|
@ -131,8 +131,8 @@ class TIA : public Device
|
|||
more information. The methods below save/load this extra info,
|
||||
and eliminate having to save approx. 50K to normal state files.
|
||||
*/
|
||||
bool saveDisplay(Serializer& out) const;
|
||||
bool loadDisplay(Serializer& in);
|
||||
bool saveDisplay(Serializer& out) const override;
|
||||
bool loadDisplay(Serializer& in) override;
|
||||
|
||||
/**
|
||||
Get a descriptor for the device name (used in error checking).
|
||||
|
@ -163,14 +163,14 @@ class TIA : public Device
|
|||
desired frame rate to update the TIA. Invoking this method will update
|
||||
the graphics buffer and generate the corresponding audio samples.
|
||||
*/
|
||||
void update();
|
||||
void update() override;
|
||||
|
||||
/**
|
||||
Answers the current frame buffer
|
||||
|
||||
@return Pointer to the current frame buffer
|
||||
*/
|
||||
uInt8* currentFrameBuffer() const
|
||||
uInt8* currentFrameBuffer() const override
|
||||
{ return myCurrentFrameBuffer.get() + myFramePointerOffset + myCurrentFrameJitter; }
|
||||
|
||||
/**
|
||||
|
@ -178,23 +178,22 @@ class TIA : public Device
|
|||
|
||||
@return Pointer to the previous frame buffer
|
||||
*/
|
||||
uInt8* previousFrameBuffer() const
|
||||
uInt8* previousFrameBuffer() const override
|
||||
{ return myPreviousFrameBuffer.get() + myFramePointerOffset; }
|
||||
|
||||
/**
|
||||
Answers the width and height of the frame buffer
|
||||
Answers the height of the frame buffer
|
||||
*/
|
||||
inline uInt32 width() const { return 160; }
|
||||
inline uInt32 height() const { return myFrameHeight; }
|
||||
inline uInt32 ystart() const { return myFrameYStart; }
|
||||
inline uInt32 height() const override { return myFrameHeight; }
|
||||
inline uInt32 ystart() const override { return myFrameYStart; }
|
||||
|
||||
/**
|
||||
Changes the current Height/YStart properties.
|
||||
Note that calls to these method(s) must be eventually followed by
|
||||
::frameReset() for the changes to take effect.
|
||||
*/
|
||||
void setHeight(uInt32 height) { myFrameHeight = height; }
|
||||
void setYStart(uInt32 ystart) { myFrameYStart = ystart; }
|
||||
void setHeight(uInt32 height) override { myFrameHeight = height; }
|
||||
void setYStart(uInt32 ystart) override { myFrameYStart = ystart; }
|
||||
|
||||
/**
|
||||
Enables/disables auto-frame calculation. If enabled, the TIA
|
||||
|
@ -202,21 +201,21 @@ class TIA : public Device
|
|||
|
||||
@param mode Whether to enable or disable all auto-frame calculation
|
||||
*/
|
||||
void enableAutoFrame(bool mode) { myAutoFrameEnabled = mode; }
|
||||
void enableAutoFrame(bool mode) override { myAutoFrameEnabled = mode; }
|
||||
|
||||
/**
|
||||
Enables/disables color-loss for PAL modes only.
|
||||
|
||||
@param mode Whether to enable or disable PAL color-loss mode
|
||||
*/
|
||||
void enableColorLoss(bool mode)
|
||||
void enableColorLoss(bool mode) override
|
||||
{ myColorLossEnabled = myFramerate <= 55 ? mode : false; }
|
||||
|
||||
/**
|
||||
Answers whether this TIA runs at NTSC or PAL scanrates,
|
||||
based on how many frames of out the total count are PAL frames.
|
||||
*/
|
||||
bool isPAL() const
|
||||
bool isPAL() const override
|
||||
{ return double(myPALFrameCounter) / myFrameCounter >= (25.0/60.0); }
|
||||
|
||||
/**
|
||||
|
@ -224,7 +223,7 @@ class TIA : public Device
|
|||
|
||||
@return The current color clock
|
||||
*/
|
||||
uInt32 clocksThisLine() const
|
||||
uInt32 clocksThisLine() const override
|
||||
{ return ((mySystem->cycles() * 3) - myClockWhenFrameStarted) % 228; }
|
||||
|
||||
/**
|
||||
|
@ -234,7 +233,7 @@ class TIA : public Device
|
|||
|
||||
@return The total number of scanlines generated
|
||||
*/
|
||||
uInt32 scanlines() const
|
||||
uInt32 scanlines() const override
|
||||
{ return ((mySystem->cycles() * 3) - myClockWhenFrameStarted) / 228; }
|
||||
|
||||
/**
|
||||
|
@ -243,14 +242,14 @@ class TIA : public Device
|
|||
|
||||
@return If we're in partial frame mode
|
||||
*/
|
||||
bool partialFrame() const { return myPartialFrameFlag; }
|
||||
bool partialFrame() const override { return myPartialFrameFlag; }
|
||||
|
||||
/**
|
||||
Answers the first scanline at which drawing occured in the last frame.
|
||||
|
||||
@return The starting scanline
|
||||
*/
|
||||
uInt32 startScanline() const { return myStartScanline; }
|
||||
uInt32 startScanline() const override { return myStartScanline; }
|
||||
|
||||
/**
|
||||
Answers the current position of the virtual 'electron beam' used to
|
||||
|
@ -262,7 +261,7 @@ class TIA : public Device
|
|||
@return The x/y coordinates of the scanline electron beam, and whether
|
||||
it is in the visible/viewable area of the screen
|
||||
*/
|
||||
bool scanlinePos(uInt16& x, uInt16& y) const;
|
||||
bool scanlinePos(uInt16& x, uInt16& y) const override;
|
||||
|
||||
/**
|
||||
Enables/disable/toggle the specified (or all) TIA bit(s). Note that
|
||||
|
@ -273,8 +272,8 @@ class TIA : public Device
|
|||
|
||||
@return Whether the bit was enabled or disabled
|
||||
*/
|
||||
bool toggleBit(TIABit b, uInt8 mode = 2);
|
||||
bool toggleBits();
|
||||
bool toggleBit(TIABit b, uInt8 mode = 2) override;
|
||||
bool toggleBits() override;
|
||||
|
||||
/**
|
||||
Enables/disable/toggle the specified (or all) TIA bit collision(s).
|
||||
|
@ -284,15 +283,15 @@ class TIA : public Device
|
|||
|
||||
@return Whether the collision was enabled or disabled
|
||||
*/
|
||||
bool toggleCollision(TIABit b, uInt8 mode = 2);
|
||||
bool toggleCollisions();
|
||||
bool toggleCollision(TIABit b, uInt8 mode = 2) override;
|
||||
bool toggleCollisions() override;
|
||||
|
||||
/**
|
||||
Toggle the display of HMOVE blanks.
|
||||
|
||||
@return Whether the HMOVE blanking was enabled or disabled
|
||||
*/
|
||||
bool toggleHMOVEBlank();
|
||||
bool toggleHMOVEBlank() override;
|
||||
|
||||
/**
|
||||
Enables/disable/toggle 'fixed debug colors' mode.
|
||||
|
@ -302,7 +301,7 @@ class TIA : public Device
|
|||
|
||||
@return Whether the mode was enabled or disabled
|
||||
*/
|
||||
bool toggleFixedColors(uInt8 mode = 2);
|
||||
bool toggleFixedColors(uInt8 mode = 2) override;
|
||||
|
||||
/**
|
||||
Enable/disable/query state of 'undriven/floating TIA pins'.
|
||||
|
@ -311,7 +310,7 @@ class TIA : public Device
|
|||
|
||||
@return Whether the mode was enabled or disabled
|
||||
*/
|
||||
bool driveUnusedPinsRandom(uInt8 mode = 2);
|
||||
bool driveUnusedPinsRandom(uInt8 mode = 2) override;
|
||||
|
||||
/**
|
||||
Enables/disable/toggle 'scanline jittering' mode, and set the
|
||||
|
@ -322,26 +321,26 @@ class TIA : public Device
|
|||
|
||||
@return Whether the mode was enabled or disabled
|
||||
*/
|
||||
bool toggleJitter(uInt8 mode = 2);
|
||||
void setJitterRecoveryFactor(Int32 f) { myJitterRecoveryFactor = f; }
|
||||
bool toggleJitter(uInt8 mode = 2) override;
|
||||
void setJitterRecoveryFactor(Int32 f) override { myJitterRecoveryFactor = f; }
|
||||
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
/**
|
||||
This method should be called to update the TIA with a new scanline.
|
||||
*/
|
||||
void updateScanline();
|
||||
void updateScanline() override;
|
||||
|
||||
/**
|
||||
This method should be called to update the TIA with a new partial
|
||||
scanline by stepping one CPU instruction.
|
||||
*/
|
||||
void updateScanlineByStep();
|
||||
void updateScanlineByStep() override;
|
||||
|
||||
/**
|
||||
This method should be called to update the TIA with a new partial
|
||||
scanline by tracing to target address.
|
||||
*/
|
||||
void updateScanlineByTrace(int target);
|
||||
void updateScanlineByTrace(int target) override;
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
|
Loading…
Reference in New Issue