atari_py/ale_interface/src/emucore/Console.hxx (78 lines of code) (raw):

//============================================================================ // // 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-2007 by Bradford W. Mott and the Stella team // // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // // $Id: Console.hxx,v 1.61 2007/07/27 13:49:16 stephena Exp $ //============================================================================ #ifndef CONSOLE_HXX #define CONSOLE_HXX class Console; class Controller; class Event; class MediaSource; class Switches; class System; #include "m6502/src/bspf/src/bspf.hxx" #include "Control.hxx" #include "Props.hxx" #include "TIA.hxx" #include "Cart.hxx" #include "M6532.hxx" #include "AtariVox.hxx" /** This class represents the entire game console. @author Bradford W. Mott @version $Id: Console.hxx,v 1.61 2007/07/27 13:49:16 stephena Exp $ */ class Console { public: /** Create a new console for emulating the specified game using the given game image and operating system. @param osystem The OSystem object to use @param cart The cartridge to use with this console @param props The properties for the cartridge */ Console(OSystem* osystem, Cartridge* cart, const Properties& props); /** Create a new console object by copying another one @param console The object to copy */ Console(const Console& console); /** Destructor */ virtual ~Console(); public: /** Get the controller plugged into the specified jack @return The specified controller */ Controller& controller(Controller::Jack jack) const { return (jack == Controller::Left) ? *myControllers[0] : *myControllers[1]; } /** Get the MediaSource for this console @return The mediasource */ MediaSource& mediaSource() const { return *myMediaSource; } /** Get the properties being used by the game @return The properties being used by the game */ const Properties& properties() const { return myProperties; } /** Get the console switches @return The console switches */ Switches& switches() const { return *mySwitches; } /** Get the 6502 based system used by the console to emulate the game @return The 6502 based system */ System& system() const { return *mySystem; } /** Returns the OSystem for this emulator. @return The OSystem. */ OSystem& osystem() const { return *myOSystem; } /** Get the cartridge used by the console which contains the ROM code @return The cartridge for this console */ Cartridge& cartridge() const { return *myCart; } /** Get the 6532 used by the console @return The 6532 for this console */ M6532& riot() const { return *myRiot; } /** Set the properties to those given @param The properties to use for the current game */ void setProperties(const Properties& props); /** Query some information about this console. */ const std::string& about() const { return myAboutString; } public: /** Overloaded assignment operator @param console The console object to set myself equal to @return Myself after assignment has taken place */ Console& operator = (const Console& console); public: /** Toggle between NTSC/PAL/PAL60 display format. */ void toggleFormat(); /** Query the currently selected display format (NTSC/PAL/PAL60). */ std::string getFormat() const { return myDisplayFormat; } /** Toggle between the available palettes. */ void togglePalette(); /** Toggles phosphor effect. */ void togglePhosphor(); /** Initialize the video subsystem wrt this class. This is required for changing window size, title, etc. @param full Whether we want a full initialization, or only reset certain attributes. */ void initializeVideo(bool full = true); /** Initialize the audio subsystem wrt this class. This is required any time the sound settings change. */ void initializeAudio(); /** "Fry" the Atari (mangle memory/TIA contents) */ void fry() const; /** Change the "Display.YStart" variable. @param direction +1 indicates increase, -1 indicates decrease. */ void changeYStart(int direction); /** Change the "Display.Height" variable. @param direction +1 indicates increase, -1 indicates decrease. */ void changeHeight(int direction); /** Toggles the TIA bit specified in the method name. */ void toggleP0Bit() const { toggleTIABit(TIA::P0, "P0"); } void toggleP1Bit() const { toggleTIABit(TIA::P1, "P1"); } void toggleM0Bit() const { toggleTIABit(TIA::M0, "M0"); } void toggleM1Bit() const { toggleTIABit(TIA::M1, "M1"); } void toggleBLBit() const { toggleTIABit(TIA::BL, "BL"); } void togglePFBit() const { toggleTIABit(TIA::PF, "PF"); } void enableBits(bool enable) const; #ifdef ATARIVOX_SUPPORT AtariVox *atariVox() { return vox; } #endif private: void toggleTIABit(TIA::TIABit bit, const std::string& bitname, bool show = true) const; /** Returns the framerate based on a number of factors (whether 'framerate' is set, what display format is in use, etc) */ uInt32 getFrameRate() const; private: // Pointer to the osystem object OSystem* myOSystem; // Pointers to the left and right controllers Controller* myControllers[2]; // Pointer to the event object to use Event* myEvent; // Pointer to the media source object MediaSource* myMediaSource; // Properties for the game Properties myProperties; // Pointer to the switches on the front of the console Switches* mySwitches; // Pointer to the 6502 based system being emulated System* mySystem; // Pointer to the Cartridge (the debugger needs it) Cartridge *myCart; // Pointer to the 6532 (aka RIOT) (the debugger needs it) // A RIOT of my own! (...with apologies to The Clash...) M6532 *myRiot; #ifdef ATARIVOX_SUPPORT AtariVox *vox; #endif // The currently defined display format (NTSC/PAL/PAL60) std::string myDisplayFormat; // Indicates whether an external palette was found and // successfully loaded bool myUserPaletteDefined; // Contains info about this console in string format std::string myAboutString; }; #endif