From e768e6f7dd18001224baeae125c6fcb8c9f6a2e9 Mon Sep 17 00:00:00 2001 From: stephena Date: Sun, 1 May 2005 18:57:21 +0000 Subject: [PATCH] Removed all responsibility of creation and deletion for the FrameBuffer and Sound classes into OSystem. This makes the main function a lot smaller. Re-added developer keys used to change XStart, YStart, Width and Height properties of the ROM. I must have done something better this time, since these keys now work correctly in OpenGL mode as well (they didn't previous to this). Cleaned up some code wrt conditional compilation of sound code. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@402 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/common/SoundNull.cxx | 7 +-- stella/src/common/SoundSDL.cxx | 3 +- stella/src/common/mainSDL.cxx | 70 +++++++---------------------- stella/src/emucore/Console.cxx | 15 ++++++- stella/src/emucore/Console.hxx | 13 +++--- stella/src/emucore/EventHandler.cxx | 67 ++++++++++++++++++++++----- stella/src/emucore/EventHandler.hxx | 9 ++-- stella/src/emucore/FrameBuffer.cxx | 6 +-- stella/src/emucore/MediaSrc.hxx | 10 ++++- stella/src/emucore/OSystem.cxx | 44 +++++++++++++++++- stella/src/emucore/OSystem.hxx | 10 ++++- stella/src/emucore/Settings.cxx | 6 +-- stella/src/emucore/Sound.hxx | 9 +++- stella/src/emucore/TIA.cxx | 34 ++++++++------ stella/src/emucore/TIA.hxx | 26 ++++++----- stella/src/gui/OptionsDialog.cxx | 7 ++- 16 files changed, 213 insertions(+), 123 deletions(-) diff --git a/stella/src/common/SoundNull.cxx b/stella/src/common/SoundNull.cxx index 7df89b418..9a19462cf 100644 --- a/stella/src/common/SoundNull.cxx +++ b/stella/src/common/SoundNull.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: SoundNull.cxx,v 1.1 2005-04-28 19:30:26 stephena Exp $ +// $Id: SoundNull.cxx,v 1.2 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include "Serializer.hxx" @@ -29,12 +29,9 @@ SoundNull::SoundNull(OSystem* osystem) : Sound(osystem) { - // Add the sound object to the system - myOSystem->attach(this); - // Show some info if(myOSystem->settings().getBool("showinfo")) - cout << "Sound support not available." << endl << endl; + cout << "Sound disabled." << endl << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/common/SoundSDL.cxx b/stella/src/common/SoundSDL.cxx index dc3d78695..7e7c23cf6 100644 --- a/stella/src/common/SoundSDL.cxx +++ b/stella/src/common/SoundSDL.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: SoundSDL.cxx,v 1.13 2005-04-28 19:28:32 stephena Exp $ +// $Id: SoundSDL.cxx,v 1.14 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -38,7 +38,6 @@ SoundSDL::SoundSDL(OSystem* osystem) myFragmentSizeLogBase2(0), myIsMuted(false) { - myOSystem->attach(this); initialize(true); } diff --git a/stella/src/common/mainSDL.cxx b/stella/src/common/mainSDL.cxx index a64116ef9..2a59311e0 100644 --- a/stella/src/common/mainSDL.cxx +++ b/stella/src/common/mainSDL.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: mainSDL.cxx,v 1.32 2005-04-29 19:05:05 stephena Exp $ +// $Id: mainSDL.cxx,v 1.33 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -35,22 +35,11 @@ #include "Event.hxx" #include "EventHandler.hxx" #include "FrameBuffer.hxx" -#include "FrameBufferSoft.hxx" #include "PropsSet.hxx" #include "Sound.hxx" #include "Settings.hxx" #include "OSystem.hxx" -#ifdef SOUND_SUPPORT - #include "SoundSDL.hxx" -#else - #include "SoundNull.hxx" -#endif - -#ifdef DISPLAY_OPENGL - #include "FrameBufferGL.hxx" -#endif - #if defined(UNIX) #include "SettingsUNIX.hxx" #include "OSystemUNIX.hxx" @@ -71,15 +60,6 @@ static void ShowInfo(const string& msg); // Pointer to the main parent osystem object or the null pointer static OSystem* theOSystem = (OSystem*) NULL; -// Pointer to the display object or the null pointer -static EventHandler* theEventHandler = (EventHandler*) NULL; - -// Pointer to the sound object or the null pointer -static Sound* theSound = (Sound*) NULL; - -// Pointer to the settings object or the null pointer -static Settings* theSettings = (Settings*) NULL; - // Indicates whether to show information during program execution static bool theShowInfoFlag; @@ -120,7 +100,7 @@ inline uInt32 GetTicks() void SetupProperties(PropertiesSet& set) { bool useMemList = false; - string theAltPropertiesFile = theSettings->getString("altpro"); + string theAltPropertiesFile = theOSystem->settings().getString("altpro"); string thePropertiesFile = theOSystem->propertiesInputFilename(); // When 'listrominfo' or 'mergeprops' is specified, we need to have the @@ -191,11 +171,11 @@ void mainGameLoop() // and are needed to calculate the overall frames per second. uInt32 frameTime = 0, numberOfFrames = 0; - if(theSettings->getBool("accurate")) // normal, CPU-intensive timing + if(theOSystem->settings().getBool("accurate")) // normal, CPU-intensive timing { // Set up accurate timing stuff uInt32 startTime, delta; - uInt32 timePerFrame = (uInt32)(1000000.0 / (double) theSettings->getInt("framerate")); + uInt32 timePerFrame = (uInt32)(1000000.0 / (double) theOSystem->settings().getInt("framerate")); // Set the base for the timers frameTime = 0; @@ -229,7 +209,7 @@ void mainGameLoop() { // Set up less accurate timing stuff uInt32 startTime, virtualTime, currentTime; - uInt32 timePerFrame = (uInt32)(1000000.0 / (double) theSettings->getInt("framerate")); + uInt32 timePerFrame = (uInt32)(1000000.0 / (double) theOSystem->settings().getInt("framerate")); // Set the base for the timers virtualTime = GetTicks(); @@ -294,13 +274,6 @@ void Cleanup() } #endif */ - - if(theSound) - delete theSound; - - if(theEventHandler) - delete theEventHandler; - if(theOSystem) delete theOSystem; @@ -315,22 +288,17 @@ int main(int argc, char* argv[]) // Create the parent OSystem object and settings #if defined(UNIX) theOSystem = new OSystemUNIX(); - theSettings = new SettingsUNIX(theOSystem); + SettingsUNIX settings(theOSystem); #elif defined(WIN32) theOSystem = new OSystemWin32(); - theSettings = new SettingsWin32(theOSystem); + SettingsWin32 settings(theOSystem); #else #error Unsupported platform! #endif - if(!theSettings) - { - Cleanup(); - return 0; - } - theSettings->loadConfig(); + theOSystem->settings().loadConfig(); // Take care of commandline arguments - if(!theSettings->loadCommandLine(argc, argv)) + if(!theOSystem->settings().loadCommandLine(argc, argv)) { Cleanup(); return 0; @@ -338,13 +306,13 @@ int main(int argc, char* argv[]) // Finally, make sure the settings are valid // We do it once here, so the rest of the program can assume valid settings -//FIXME theSettings->validate(); +//FIXME theOSystem->settings().validate(); // Create the event handler for the system - theEventHandler = new EventHandler(theOSystem); + EventHandler handler(theOSystem); // Cache some settings so they don't have to be repeatedly searched for - theShowInfoFlag = theSettings->getBool("showinfo"); + theShowInfoFlag = theOSystem->settings().getBool("showinfo"); bool theRomLauncherFlag = false;//true;//FIXMEtheSettings->getBool("romlauncher"); // Create a properties set for us to use and set it up @@ -354,7 +322,7 @@ int main(int argc, char* argv[]) // Check to see if the 'listroms' argument was given // If so, list the roms and immediately exit - if(theSettings->getBool("listrominfo")) + if(theOSystem->settings().getBool("listrominfo")) { propertiesSet.print(); Cleanup(); @@ -364,7 +332,7 @@ int main(int argc, char* argv[]) // Request that the SDL window be centered, if possible putenv("SDL_VIDEO_CENTERED=1"); - // Create the SDL framebuffer + // Create the framebuffer(s) if(!theOSystem->createFrameBuffer()) { cerr << "ERROR: Couldn't set up display.\n"; @@ -372,12 +340,8 @@ int main(int argc, char* argv[]) return 0; } - // Create a sound object for playing audio, even if sound has been disabled -#ifdef SOUND_SUPPORT - theSound = new SoundSDL(theOSystem); -#else - theSound = new SoundNull(theOSystem); -#endif + // Create the sound object + theOSystem->createSound(); // Setup the SDL joysticks (must be done after FrameBuffer is created) /* FIXME - don't exit if joysticks can't be initialized @@ -391,7 +355,7 @@ int main(int argc, char* argv[]) // Print message about the framerate ostringstream message; - message << "Framerate: " << theSettings->getInt("framerate"); + message << "Framerate: " << theOSystem->settings().getInt("framerate"); ShowInfo(message.str()); //// Main loop //// diff --git a/stella/src/emucore/Console.cxx b/stella/src/emucore/Console.cxx index 2efffb58a..a7e1cbda4 100644 --- a/stella/src/emucore/Console.cxx +++ b/stella/src/emucore/Console.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Console.cxx,v 1.47 2005-04-29 19:05:05 stephena Exp $ +// $Id: Console.cxx,v 1.48 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -146,7 +146,8 @@ Console::Console(const uInt8* image, uInt32 size, OSystem* osystem) } M6532* m6532 = new M6532(*this); - TIA* tia = new TIA(*this, myOSystem->sound(), myOSystem->settings()); + TIA* tia = new TIA(*this, myOSystem->settings()); + tia->setSound(myOSystem->sound()); Cartridge* cartridge = Cartridge::create(image, size, myProperties); mySystem->attach(m6502); @@ -330,6 +331,12 @@ void Console::initializeVideo() myMediaSource->height()); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Console::initializeAudio() +{ + myMediaSource->setSound(myOSystem->sound()); +} + #ifdef DEVELOPER_SUPPORT // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Console::changeXStart(const uInt32 direction) @@ -366,6 +373,7 @@ void Console::changeXStart(const uInt32 direction) strval << xstart; myProperties.set("Display.XStart", strval.str()); mySystem->reset(); + initializeVideo(); message = "XStart "; message += strval.str(); @@ -401,6 +409,7 @@ void Console::changeYStart(const uInt32 direction) strval << ystart; myProperties.set("Display.YStart", strval.str()); mySystem->reset(); + initializeVideo(); message = "YStart "; message += strval.str(); @@ -442,6 +451,7 @@ void Console::changeWidth(const uInt32 direction) strval << width; myProperties.set("Display.Width", strval.str()); mySystem->reset(); + initializeVideo(); message = "Width "; message += strval.str(); @@ -477,6 +487,7 @@ void Console::changeHeight(const uInt32 direction) strval << height; myProperties.set("Display.Height", strval.str()); mySystem->reset(); + initializeVideo(); message = "Height "; message += strval.str(); diff --git a/stella/src/emucore/Console.hxx b/stella/src/emucore/Console.hxx index 747c03899..241264271 100644 --- a/stella/src/emucore/Console.hxx +++ b/stella/src/emucore/Console.hxx @@ -13,7 +13,7 @@ // 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.27 2005-04-29 19:05:05 stephena Exp $ +// $Id: Console.hxx,v 1.28 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #ifndef CONSOLE_HXX @@ -26,8 +26,6 @@ class MediaSource; class Switches; class System; -class OSystem; - #include "bspf.hxx" #include "Control.hxx" #include "Props.hxx" @@ -37,7 +35,7 @@ class OSystem; This class represents the entire game console. @author Bradford W. Mott - @version $Id: Console.hxx,v 1.27 2005-04-29 19:05:05 stephena Exp $ + @version $Id: Console.hxx,v 1.28 2005-05-01 18:57:20 stephena Exp $ */ class Console { @@ -154,10 +152,15 @@ class Console void saveProperties(string filename, bool merge = false); /** - Initialize this video subsystem wrt this class. + Initialize the video subsystem wrt this class. */ void initializeVideo(); + /** + Initialize the audio subsystem wrt this class. + */ + void initializeAudio(); + #ifdef DEVELOPER_SUPPORT public: /** diff --git a/stella/src/emucore/EventHandler.cxx b/stella/src/emucore/EventHandler.cxx index b94e9c34c..82b24d777 100644 --- a/stella/src/emucore/EventHandler.cxx +++ b/stella/src/emucore/EventHandler.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.cxx,v 1.45 2005-04-29 19:05:05 stephena Exp $ +// $Id: EventHandler.cxx,v 1.46 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -285,27 +285,48 @@ void EventHandler::handleKeyEvent(SDLKey key, SDLMod mod, uInt8 state) case SDLK_RIGHTBRACKET: myOSystem->sound().adjustVolume(1); break; + +#ifdef DEVELOPER_SUPPORT + case SDLK_END: // Alt-End increases XStart + myOSystem->console().changeXStart(1); + myOSystem->frameBuffer().resize(0); + break; + + case SDLK_HOME: // Alt-Home decreases XStart + myOSystem->console().changeXStart(0); + myOSystem->frameBuffer().resize(0); + break; + + case SDLK_PAGEUP: // Alt-PageUp increases YStart + myOSystem->console().changeYStart(1); + myOSystem->frameBuffer().resize(0); + break; + + case SDLK_PAGEDOWN: // Alt-PageDown decreases YStart + myOSystem->console().changeYStart(0); + myOSystem->frameBuffer().resize(0); + break; +#endif } - // FIXME - alt developer stuff goes here } else if(mod & KMOD_CTRL && state) { switch(int(key)) { case SDLK_0: // Ctrl-0 sets the mouse to paddle 0 - setPaddleMode(0); + setPaddleMode(0, true); break; case SDLK_1: // Ctrl-1 sets the mouse to paddle 1 - setPaddleMode(1); + setPaddleMode(1, true); break; case SDLK_2: // Ctrl-2 sets the mouse to paddle 2 - setPaddleMode(2); + setPaddleMode(2, true); break; case SDLK_3: // Ctrl-3 sets the mouse to paddle 3 - setPaddleMode(3); + setPaddleMode(3, true); break; case SDLK_f: // Ctrl-f toggles NTSC/PAL mode @@ -318,8 +339,27 @@ void EventHandler::handleKeyEvent(SDLKey key, SDLMod mod, uInt8 state) myOSystem->frameBuffer().setupPalette(); break; - // FIXME - Ctrl developer support goes here +#ifdef DEVELOPER_SUPPORT + case SDLK_END: // Ctrl-End increases Width + myOSystem->console().changeWidth(1); + myOSystem->frameBuffer().resize(0); + break; + case SDLK_HOME: // Ctrl-Home decreases Width + myOSystem->console().changeWidth(0); + myOSystem->frameBuffer().resize(0); + break; + + case SDLK_PAGEUP: // Ctrl-PageUp increases Height + myOSystem->console().changeHeight(1); + myOSystem->frameBuffer().resize(0); + break; + + case SDLK_PAGEDOWN: // Ctrl-PageDown decreases Height + myOSystem->console().changeHeight(0); + myOSystem->frameBuffer().resize(0); + break; +#endif case SDLK_s: // Ctrl-s saves properties to a file // Attempt to merge with propertiesSet if(myOSystem->settings().getBool("mergeprops")) @@ -368,7 +408,7 @@ void EventHandler::handleMouseMotionEvent(SDL_Event& event) uInt32 zoom = theDisplay->zoomLevel(); Int32 width = theDisplay->width() * zoom; - // Grabmouse and hidecursor introduce some lag into the mouse movement, + // Grabmouse introduces some lag into the mouse movement, // so we need to fudge the numbers a bit if(theGrabMouseIndicator && theHideCursorIndicator) mouseX = (int)((float)mouseX + (float)event.motion.xrel @@ -958,13 +998,16 @@ void EventHandler::takeSnapshot() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::setPaddleMode(uInt32 num) +void EventHandler::setPaddleMode(uInt32 num, bool showmessage) { myPaddleMode = num; - ostringstream buf; - buf << "Mouse is paddle " << num; - myOSystem->frameBuffer().showMessage(buf.str()); + if(showmessage) + { + ostringstream buf; + buf << "Mouse is paddle " << num; + myOSystem->frameBuffer().showMessage(buf.str()); + } myOSystem->settings().setInt("paddle", myPaddleMode); } diff --git a/stella/src/emucore/EventHandler.hxx b/stella/src/emucore/EventHandler.hxx index b4cbe25b0..39ad24028 100644 --- a/stella/src/emucore/EventHandler.hxx +++ b/stella/src/emucore/EventHandler.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.hxx,v 1.23 2005-04-06 23:47:07 stephena Exp $ +// $Id: EventHandler.hxx,v 1.24 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #ifndef EVENTHANDLER_HXX @@ -57,7 +57,7 @@ struct ActionList { mapping can take place. @author Stephen Anthony - @version $Id: EventHandler.hxx,v 1.23 2005-04-06 23:47:07 stephena Exp $ + @version $Id: EventHandler.hxx,v 1.24 2005-05-01 18:57:20 stephena Exp $ */ class EventHandler { @@ -186,9 +186,10 @@ class EventHandler /** Sets the mouse to act as paddle 'num' - @param num The paddle which the mouse should emulate + @param num The paddle which the mouse should emulate + @param showmessage Print a message to the framebuffer */ - void setPaddleMode(uInt32 num); + void setPaddleMode(uInt32 num, bool showmessage = false); /** The following methods take care of assigning action mappings. diff --git a/stella/src/emucore/FrameBuffer.cxx b/stella/src/emucore/FrameBuffer.cxx index 3b6e6cea4..1eac7f708 100644 --- a/stella/src/emucore/FrameBuffer.cxx +++ b/stella/src/emucore/FrameBuffer.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.cxx,v 1.28 2005-04-29 19:05:05 stephena Exp $ +// $Id: FrameBuffer.cxx,v 1.29 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -370,8 +370,8 @@ void FrameBuffer::setCursorState() // Keep mouse in game window if grabmouse is selected grabMouse(myOSystem->settings().getBool("grabmouse")); - // Show or hide the cursor depending on the 'hidecursor' argument - showCursor(!myOSystem->settings().getBool("hidecursor")); + // Never show cursor in normal emulation mode + showCursor(false); } break; diff --git a/stella/src/emucore/MediaSrc.hxx b/stella/src/emucore/MediaSrc.hxx index da9505417..d62eb2593 100644 --- a/stella/src/emucore/MediaSrc.hxx +++ b/stella/src/emucore/MediaSrc.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: MediaSrc.hxx,v 1.8 2004-07-14 16:15:06 stephena Exp $ +// $Id: MediaSrc.hxx,v 1.9 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #ifndef MEDIASOURCE_HXX @@ -22,6 +22,7 @@ #include class MediaSource; +class Sound; #include "bspf.hxx" @@ -29,7 +30,7 @@ class MediaSource; This class provides an interface for accessing graphics and audio data. @author Bradford W. Mott - @version $Id: MediaSrc.hxx,v 1.8 2004-07-14 16:15:06 stephena Exp $ + @version $Id: MediaSrc.hxx,v 1.9 2005-05-01 18:57:20 stephena Exp $ */ class MediaSource { @@ -98,6 +99,11 @@ class MediaSource */ virtual uInt32 scanlines() const = 0; + /** + Sets the sound device for the TIA. + */ + virtual void setSound(Sound& sound) = 0; + private: // Copy constructor isn't supported by this class so make it private MediaSource(const MediaSource&); diff --git a/stella/src/emucore/OSystem.cxx b/stella/src/emucore/OSystem.cxx index e3e08914a..d295bf187 100644 --- a/stella/src/emucore/OSystem.cxx +++ b/stella/src/emucore/OSystem.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: OSystem.cxx,v 1.7 2005-04-29 19:05:05 stephena Exp $ +// $Id: OSystem.cxx,v 1.8 2005-05-01 18:57:20 stephena Exp $ //============================================================================ #include @@ -27,6 +27,11 @@ #endif #include "Sound.hxx" +#include "SoundNull.hxx" +#ifdef SOUND_SUPPORT + #include "SoundSDL.hxx" +#endif + #include "Settings.hxx" #include "PropsSet.hxx" #include "EventHandler.hxx" @@ -60,8 +65,10 @@ OSystem::~OSystem() // Remove any game console that is currently attached detachConsole(); - // OSystem takes responsibility for the framebuffer + // OSystem takes responsibility for framebuffer and sound, + // since it created them delete myFrameBuffer; + delete mySound; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -181,6 +188,39 @@ void OSystem::toggleFrameBuffer() createFrameBuffer(true); // show onscreen message } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void OSystem::createSound() +{ + // Delete the old sound device + delete mySound; + + // And recreate a new sound device +#ifdef SOUND_SUPPORT + mySound = new SoundSDL(this); +#else + mySettings->setBool("sound", false); + mySound = new SoundNull(this); +#endif + + // Re-initialize the framebuffer to current settings + switch(myEventHandler->state()) + { + case EventHandler::S_EMULATE: + case EventHandler::S_MENU: + myConsole->initializeAudio(); + break; // S_EMULATE, S_MENU + + case EventHandler::S_BROWSER: + break; // S_BROWSER + + case EventHandler::S_DEBUGGER: + break; + + case EventHandler::S_NONE: + break; + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OSystem::OSystem(const OSystem& osystem) { diff --git a/stella/src/emucore/OSystem.hxx b/stella/src/emucore/OSystem.hxx index 7e7b44fa4..d479c4b54 100644 --- a/stella/src/emucore/OSystem.hxx +++ b/stella/src/emucore/OSystem.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: OSystem.hxx,v 1.5 2005-04-29 19:05:05 stephena Exp $ +// $Id: OSystem.hxx,v 1.6 2005-05-01 18:57:21 stephena Exp $ //============================================================================ #ifndef OSYSTEM_HXX @@ -37,7 +37,7 @@ class Browser; other objects belong. @author Stephen Anthony - @version $Id: OSystem.hxx,v 1.5 2005-04-29 19:05:05 stephena Exp $ + @version $Id: OSystem.hxx,v 1.6 2005-05-01 18:57:21 stephena Exp $ */ class OSystem { @@ -245,6 +245,12 @@ class OSystem */ void toggleFrameBuffer(); + /** + Creates the various sound devices available in this system + (for now, that means either 'SDL' or 'Null'). + */ + void createSound(); + public: ////////////////////////////////////////////////////////////////////// // The following methods are system-specific and must be implemented diff --git a/stella/src/emucore/Settings.cxx b/stella/src/emucore/Settings.cxx index 518452174..08aa5fd8a 100644 --- a/stella/src/emucore/Settings.cxx +++ b/stella/src/emucore/Settings.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Settings.cxx,v 1.34 2005-03-26 04:19:56 stephena Exp $ +// $Id: Settings.cxx,v 1.35 2005-05-01 18:57:21 stephena Exp $ //============================================================================ #include @@ -47,7 +47,6 @@ Settings::Settings(OSystem* osystem) set("fragsize", "512"); set("fullscreen", "false"); set("grabmouse", "false"); - set("hidecursor", "false"); set("volume", "-1"); set("accurate", "false"); set("framerate", "-1"); @@ -187,13 +186,14 @@ void Settings::usage() << " -gl_fsmax <1|0> Use the largest available screenmode in fullscreen OpenGL\n" << endl #endif + #ifdef SOUND_SUPPORT << " -sound <1|0> Enable sound generation\n" << " -fragsize The size of sound fragments (must be a power of two)\n" + #endif << " -framerate Display the given number of frames per second\n" << " -zoom Makes window be 'size' times normal\n" << " -fullscreen <1|0> Play the game in fullscreen mode\n" << " -grabmouse <1|0> Keeps the mouse in the game window\n" - << " -hidecursor <1|0> Hides the mouse cursor in the game window\n" << " -volume Set the volume (0 - 100)\n" << " -paddle <0|1|2|3> Indicates which paddle the mouse should emulate\n" << " -altpro Use the given properties file instead of stella.pro\n" diff --git a/stella/src/emucore/Sound.hxx b/stella/src/emucore/Sound.hxx index 7226731b6..4d12298d1 100644 --- a/stella/src/emucore/Sound.hxx +++ b/stella/src/emucore/Sound.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Sound.hxx,v 1.17 2005-04-28 19:28:33 stephena Exp $ +// $Id: Sound.hxx,v 1.18 2005-05-01 18:57:21 stephena Exp $ //============================================================================ #ifndef SOUND_HXX @@ -30,7 +30,7 @@ class Deserializer; It has no functionality whatsoever. @author Stephen Anthony - @version $Id: Sound.hxx,v 1.17 2005-04-28 19:28:33 stephena Exp $ + @version $Id: Sound.hxx,v 1.18 2005-05-01 18:57:21 stephena Exp $ */ class Sound { @@ -41,6 +41,11 @@ class Sound */ Sound(OSystem* osystem) { myOSystem = osystem; } + /** + Destructor + */ + virtual ~Sound() { }; + public: /** Enables/disables the sound subsystem. diff --git a/stella/src/emucore/TIA.cxx b/stella/src/emucore/TIA.cxx index ba4555330..916f1a84f 100644 --- a/stella/src/emucore/TIA.cxx +++ b/stella/src/emucore/TIA.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: TIA.cxx,v 1.39 2005-04-21 18:55:15 stephena Exp $ +// $Id: TIA.cxx,v 1.40 2005-05-01 18:57:21 stephena Exp $ //============================================================================ #include @@ -34,10 +34,10 @@ #define HBLANK 68 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TIA::TIA(const Console& console, Sound& sound, Settings& settings) +TIA::TIA(const Console& console, Settings& settings) : myConsole(console), - mySound(sound), mySettings(settings), + mySound(NULL), myColorLossEnabled(false), myMaximumNumberOfScanlines(262), myCOLUBK(myColor[0]), @@ -121,7 +121,7 @@ const char* TIA::name() const void TIA::reset() { // Reset the sound device - mySound.reset(); + mySound->reset(); // Clear frame buffers for(uInt32 i = 0; i < 160 * 300; ++i) @@ -245,7 +245,7 @@ void TIA::systemCyclesReset() uInt32 cycles = mySystem->cycles(); // Adjust the sound cycle indicator - mySound.adjustCycleCounter(-cycles); + mySound->adjustCycleCounter(-cycles); // Adjust the dump cycle myDumpDisabledCycle -= cycles; @@ -372,7 +372,7 @@ bool TIA::save(Serializer& out) out.putLong(myDumpDisabledCycle); // Save the sound sample stuff ... - mySound.save(out); + mySound->save(out); } catch(char *msg) { @@ -473,7 +473,7 @@ bool TIA::load(Deserializer& in) myDumpDisabledCycle = (Int32) in.getLong(); // Load the sound sample stuff ... - mySound.load(in); + mySound->load(in); } catch(char *msg) { @@ -580,6 +580,12 @@ uInt32 TIA::scanlines() const return (uInt32)myScanlineCountForLastFrame; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::setSound(Sound& sound) +{ + mySound = &sound; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TIA::computeBallMaskTable() { @@ -2363,37 +2369,37 @@ void TIA::poke(uInt16 addr, uInt8 value) case 0x15: // Audio control 0 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } case 0x16: // Audio control 1 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } case 0x17: // Audio frequency 0 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } case 0x18: // Audio frequency 1 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } case 0x19: // Audio volume 0 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } case 0x1A: // Audio volume 1 { - mySound.set(addr, value, mySystem->cycles()); + mySound->set(addr, value, mySystem->cycles()); break; } @@ -3287,8 +3293,8 @@ const uInt32 TIA::ourPALPaletteZ26[256] = { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TIA::TIA(const TIA& c) : myConsole(c.myConsole), - mySound(c.mySound), mySettings(c.mySettings), + mySound(c.mySound), myCOLUBK(myColor[0]), myCOLUPF(myColor[1]), myCOLUP0(myColor[2]), diff --git a/stella/src/emucore/TIA.hxx b/stella/src/emucore/TIA.hxx index 16938e671..bacfd494b 100644 --- a/stella/src/emucore/TIA.hxx +++ b/stella/src/emucore/TIA.hxx @@ -13,20 +13,20 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: TIA.hxx,v 1.18 2005-04-21 21:18:37 stephena Exp $ +// $Id: TIA.hxx,v 1.19 2005-05-01 18:57:21 stephena Exp $ //============================================================================ #ifndef TIA_HXX #define TIA_HXX class Console; -class Sound; class System; class Serializer; class Deserializer; class Settings; #include "bspf.hxx" +#include "Sound.hxx" #include "Device.hxx" #include "MediaSrc.hxx" @@ -42,7 +42,7 @@ class Settings; be displayed on screen. @author Bradford W. Mott - @version $Id: TIA.hxx,v 1.18 2005-04-21 21:18:37 stephena Exp $ + @version $Id: TIA.hxx,v 1.19 2005-05-01 18:57:21 stephena Exp $ */ class TIA : public Device , public MediaSource { @@ -50,11 +50,10 @@ class TIA : public Device , public MediaSource /** Create a new TIA for the specified console - @param console The console the TIA is associated with - @param sound The sound object the TIA is associated with - @param settings The settings object the TIA is associated with + @param console The console the TIA is associated with + @param settings The settings object for this TIA device */ - TIA(const Console& console, Sound& sound, Settings& settings); + TIA(const Console& console, Settings& settings); /** Destructor @@ -171,6 +170,11 @@ class TIA : public Device , public MediaSource */ uInt32 scanlines() const; + /** + Sets the sound device for the TIA. + */ + void setSound(Sound& sound); + enum TIABit { P0, // Descriptor for Player 0 Bit P1, // Descriptor for Player 1 Bit @@ -230,11 +234,11 @@ class TIA : public Device , public MediaSource // Console the TIA is associated with const Console& myConsole; - // Sound object the TIA is associated with - Sound& mySound; - // Settings object the TIA is associated with - Settings& mySettings; + const Settings& mySettings; + + // Sound object the TIA is associated with + Sound* mySound; private: // Indicates if color loss should be enabled or disabled. Color loss diff --git a/stella/src/gui/OptionsDialog.cxx b/stella/src/gui/OptionsDialog.cxx index 44a389e6e..4a434a9e4 100644 --- a/stella/src/gui/OptionsDialog.cxx +++ b/stella/src/gui/OptionsDialog.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: OptionsDialog.cxx,v 1.12 2005-04-29 19:05:06 stephena Exp $ +// $Id: OptionsDialog.cxx,v 1.13 2005-05-01 18:57:21 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -66,7 +66,12 @@ OptionsDialog::OptionsDialog(OSystem* osystem) const int xoffset = (_w - kBigButtonWidth) / 2; addBigButton("Video Settings", kVidCmd, 'V'); +#ifdef SOUND_SUPPORT addBigButton("Audio Settings", kAudCmd, 'A'); +#else + ButtonWidget* b = addBigButton("Audio Settings", kAudCmd, 'A'); + b->setEnabled(false); +#endif addBigButton("Event Remapping", kEMapCmd, 'E'); addBigButton("Miscellaneous", kMiscCmd, 'M'); addBigButton("Game Information", kInfoCmd, 'I');