diff options
author | Tony Puccinelli | 2010-06-05 01:05:19 +0000 |
---|---|---|
committer | Tony Puccinelli | 2010-06-05 01:05:19 +0000 |
commit | 95e56f2052956e80a6319b2916a8f899340effaf (patch) | |
tree | f9525eb32e05f1a4746233fe3daf254d07cb83ab | |
parent | 28e28a2fea9f6adf4967463024c609e6a01ac5b0 (diff) | |
parent | 3a5fe4ca002a85f7c4549c8d36203553553c53f9 (diff) | |
download | scummvm-rg350-95e56f2052956e80a6319b2916a8f899340effaf.tar.gz scummvm-rg350-95e56f2052956e80a6319b2916a8f899340effaf.tar.bz2 scummvm-rg350-95e56f2052956e80a6319b2916a8f899340effaf.zip |
merged trunk into branch and corrected __PS2__ to __PLAYSTATION2__ in a couple files
svn-id: r49435
38 files changed, 374 insertions, 463 deletions
@@ -8,6 +8,7 @@ For a more comprehensive changelog for the latest experimental SVN code, see: General: - Switched to the "fast" DOSBox OPL emulator. + - Fixed a crash in the rjp1 player code affecting the FOTAQ Amiga version. 1.1.2 (????-??-??) Broken Sword 2 diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt index 191b358f78..c4f1263452 100644 --- a/backends/platform/ds/arm9/dist/readme_ds.txt +++ b/backends/platform/ds/arm9/dist/readme_ds.txt @@ -41,6 +41,10 @@ Visit the main ScummVM website <http://www.scummvm.org> What's New? ------------------------------------------------------------------------ +ScummVM DS 1.1.1 + + * Bugfix release: no new features + ScummVM DS 1.1.0 * New games are supported in this stable build: Return to Zork, Rodney's @@ -319,7 +323,7 @@ CANNOT DO THIS. ------------------------------------------------------------------------ I'm glad you asked. Here is a list of the compatible games in version -1.1.0. Demo versions of the games listed should work too. +1.1.1. Demo versions of the games listed should work too. Flight of the Amazon Queen, Beneath a Steel Sky, and Lure of the Temptress have generously been released as freeware by the original diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 1e9986e4e9..7eb02f9070 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -103,6 +103,7 @@ #include "profiler/cyg-profile.h" #endif #include "backends/fs/ds/ds-fs.h" +#include "base/version.h" #include "engine.h" extern "C" void OurIntrMain(void); @@ -3162,7 +3163,7 @@ int main(void) { consolePrintf("-------------------------------\n"); consolePrintf("ScummVM DS\n"); consolePrintf("Ported by Neil Millstone\n"); - consolePrintf("Version 1.1.0 "); + consolePrintf("Version %s ", gScummVMVersion); #if defined(DS_BUILD_A) consolePrintf("build A\n"); consolePrintf("Lucasarts SCUMM games (SCUMM)\n"); diff --git a/backends/platform/gp2x/gp2x-common.h b/backends/platform/gp2x/gp2x-common.h index 79eb3f65cf..b54e2d4d4f 100644 --- a/backends/platform/gp2x/gp2x-common.h +++ b/backends/platform/gp2x/gp2x-common.h @@ -121,19 +121,6 @@ public: virtual Audio::Mixer *getMixer(); - // Poll CD status - // Returns true if cd audio is playing - bool pollCD(); - - // Play CD audio track - void playCD(int track, int num_loops, int start_frame, int duration); - - // Stop CD audio track - void stopCD(); - - // Update CD audio status - void updateCD(); - // Quit void quit(); @@ -163,8 +150,6 @@ public: bool setGraphicsMode(int mode); int getGraphicsMode() const; - bool openCD(int drive); - bool hasFeature(Feature f); void setFeatureState(Feature f, bool enable); bool getFeatureState(Feature f); @@ -206,15 +191,6 @@ protected: bool _overlayVisible; Graphics::PixelFormat _overlayFormat; - // CD Audio - SDL_CD *_cdrom; - int _cdTrack, _cdNumLoops, _cdStartFrame, _cdDuration; - uint32 _cdEndTime, _cdStopTime; - - enum { - DF_WANT_RECT_OPTIM = 1 << 0 - }; - enum { kTransactionNone = 0, kTransactionActive = 1, @@ -255,7 +231,6 @@ protected: Graphics::Surface _framebuffer; /** Current video mode flags (see DF_* constants) */ - uint32 _modeFlags; bool _modeChanged; int _screenChangeCount; @@ -272,9 +247,6 @@ protected: // Dirty rect management SDL_Rect _dirtyRectList[NUM_DIRTY_RECT]; int _numDirtyRects; - uint32 *_dirtyChecksums; - bool _cksumValid; - int _cksumNum; // Keyboard mouse emulation. Disabled by fingolfin 2004-12-18. // I am keeping the rest of the code in for now, since the joystick @@ -371,9 +343,6 @@ protected: Common::TimerManager *_timer; protected: - void addDirtyRgnAuto(const byte *buf); - void makeChecksums(const byte *buf); - virtual void addDirtyRect(int x, int y, int w, int h, bool realCoordinates = false); void drawMouse(); diff --git a/backends/platform/gp2x/gp2x.cpp b/backends/platform/gp2x/gp2x.cpp index 3d4ed51c1f..88d4f9d632 100644 --- a/backends/platform/gp2x/gp2x.cpp +++ b/backends/platform/gp2x/gp2x.cpp @@ -193,13 +193,11 @@ void OSystem_GP2X::initBackend() { memset(&_videoMode, 0, sizeof(_videoMode)); memset(&_transactionDetails, 0, sizeof(_transactionDetails)); - _cksumValid = false; _videoMode.mode = GFX_NORMAL; _videoMode.scaleFactor = 1; _scalerProc = Normal1x; _videoMode.aspectRatioCorrection = ConfMan.getBool("aspect_ratio"); _scalerType = 0; - _modeFlags = 0; _adjustZoomOnMouse = false; ConfMan.setBool("FM_low_quality", true); @@ -246,7 +244,7 @@ OSystem_GP2X::OSystem_GP2X() _hwscreen(0), _screen(0), _tmpscreen(0), _overlayVisible(false), _overlayscreen(0), _tmpscreen2(0), - _cdrom(0), _scalerProc(0), _modeChanged(false), _screenChangeCount(0), _dirtyChecksums(0), + _scalerProc(0), _modeChanged(false), _screenChangeCount(0), _mouseVisible(false), _mouseNeedsRedraw(false), _mouseData(0), _mouseSurface(0), _mouseOrigSurface(0), _cursorTargetScale(1), _cursorPaletteDisabled(true), _joystick(0), @@ -281,7 +279,6 @@ OSystem_GP2X::~OSystem_GP2X() { SDL_RemoveTimer(_timerID); closeMixer(); - free(_dirtyChecksums); free(_currentPalette); free(_cursorPalette); free(_mouseData); @@ -380,7 +377,6 @@ bool OSystem_GP2X::hasFeature(Feature f) { return (f == kFeatureFullscreenMode) || (f == kFeatureAspectRatioCorrection) || - (f == kFeatureAutoComputeDirtyRects) || (f == kFeatureCursorHasPalette); } @@ -391,12 +387,6 @@ void OSystem_GP2X::setFeatureState(Feature f, bool enable) { case kFeatureAspectRatioCorrection: setAspectRatioCorrection(enable); break; - case kFeatureAutoComputeDirtyRects: - if (enable) - _modeFlags |= DF_WANT_RECT_OPTIM; - else - _modeFlags &= ~DF_WANT_RECT_OPTIM; - break; case kFeatureDisableKeyFiltering: // TODO: Extend as more support for this is added to engines. return; @@ -413,8 +403,6 @@ bool OSystem_GP2X::getFeatureState(Feature f) { return false; case kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; - case kFeatureAutoComputeDirtyRects: - return _modeFlags & DF_WANT_RECT_OPTIM; default: return false; } @@ -431,7 +419,6 @@ void OSystem_GP2X::quit() { SDL_RemoveTimer(_timerID); closeMixer(); - free(_dirtyChecksums); free(_currentPalette); free(_cursorPalette); free(_mouseData); @@ -650,26 +637,3 @@ Audio::Mixer *OSystem_GP2X::getMixer() { assert(_mixer); return _mixer; } - -#pragma mark - -#pragma mark --- CD Audio --- -#pragma mark - - -bool OSystem_GP2X::openCD(int drive) { - return (_cdrom = NULL); -} - -void OSystem_GP2X::stopCD() { -} - -void OSystem_GP2X::playCD(int track, int num_loops, int start_frame, int duration) { - return; -} - -bool OSystem_GP2X::pollCD() { - return false; -} - -void OSystem_GP2X::updateCD() { - return; -} diff --git a/backends/platform/gp2x/graphics.cpp b/backends/platform/gp2x/graphics.cpp index 243c37dcb1..1888cbe47c 100644 --- a/backends/platform/gp2x/graphics.cpp +++ b/backends/platform/gp2x/graphics.cpp @@ -270,12 +270,7 @@ void OSystem_GP2X::initSize(uint w, uint h, const Graphics::PixelFormat *format) _videoMode.screenWidth = w; _videoMode.screenHeight = h; - _cksumNum = (w * h / (8 * 8)); - _transactionDetails.sizeChanged = true; - - free(_dirtyChecksums); - _dirtyChecksums = (uint32 *)calloc(_cksumNum * 2, sizeof(uint32)); } int OSystem_GP2X::effectiveScreenHeight() const { @@ -724,40 +719,31 @@ void OSystem_GP2X::copyRectToScreen(const byte *src, int pitch, int x, int y, in assert(h > 0 && y + h <= _videoMode.screenHeight); assert(w > 0 && x + w <= _videoMode.screenWidth); - if (IS_ALIGNED(src, 4) && pitch == _videoMode.screenWidth && x == 0 && y == 0 && - w == _videoMode.screenWidth && h == _videoMode.screenHeight && _modeFlags & DF_WANT_RECT_OPTIM) { - /* Special, optimized case for full screen updates. - * It tries to determine what areas were actually changed, - * and just updates those, on the actual display. */ - addDirtyRgnAuto(src); - } else { - /* Clip the coordinates */ - if (x < 0) { - w += x; - src -= x; - x = 0; - } + /* Clip the coordinates */ + if (x < 0) { + w += x; + src -= x; + x = 0; + } - if (y < 0) { - h += y; - src -= y * pitch; - y = 0; - } + if (y < 0) { + h += y; + src -= y * pitch; + y = 0; + } - if (w > _videoMode.screenWidth - x) { - w = _videoMode.screenWidth - x; - } + if (w > _videoMode.screenWidth - x) { + w = _videoMode.screenWidth - x; + } - if (h > _videoMode.screenHeight - y) { - h = _videoMode.screenHeight - y; - } + if (h > _videoMode.screenHeight - y) { + h = _videoMode.screenHeight - y; + } - if (w <= 0 || h <= 0) - return; + if (w <= 0 || h <= 0) + return; - _cksumValid = false; - addDirtyRect(x, y, w, h); - } + addDirtyRect(x, y, w, h); // Try to lock the screen surface if (SDL_LockSurface(_screen) == -1) @@ -885,88 +871,6 @@ void OSystem_GP2X::addDirtyRect(int x, int y, int w, int h, bool realCoordinates } } -void OSystem_GP2X::makeChecksums(const byte *buf) { - assert(buf); - uint32 *sums = _dirtyChecksums; - uint x,y; - const uint last_x = (uint)_videoMode.screenWidth / 8; - const uint last_y = (uint)_videoMode.screenHeight / 8; - - const uint BASE = 65521; /* largest prime smaller than 65536 */ - - /* the 8x8 blocks in buf are enumerated starting in the top left corner and - * reading each line at a time from left to right */ - for (y = 0; y != last_y; y++, buf += _videoMode.screenWidth * (8 - 1)) - for (x = 0; x != last_x; x++, buf += 8) { - // Adler32 checksum algorithm (from RFC1950, used by gzip and zlib). - // This computes the Adler32 checksum of a 8x8 pixel block. Note - // that we can do the modulo operation (which is the slowest part) - // of the algorithm) at the end, instead of doing each iteration, - // since we only have 64 iterations in total - and thus s1 and - // s2 can't overflow anyway. - uint32 s1 = 1; - uint32 s2 = 0; - const byte *ptr = buf; - for (int subY = 0; subY < 8; subY++) { - for (int subX = 0; subX < 8; subX++) { - s1 += ptr[subX]; - s2 += s1; - } - ptr += _videoMode.screenWidth; - } - - s1 %= BASE; - s2 %= BASE; - - /* output the checksum for this block */ - *sums++ = (s2 << 16) + s1; - } -} - -void OSystem_GP2X::addDirtyRgnAuto(const byte *buf) { - assert(buf); - assert(IS_ALIGNED(buf, 4)); - - /* generate a table of the checksums */ - makeChecksums(buf); - - if (!_cksumValid) { - _forceFull = true; - _cksumValid = true; - } - - /* go through the checksum list, compare it with the previous checksums, - and add all dirty rectangles to a list. try to combine small rectangles - into bigger ones in a simple way */ - if (!_forceFull) { - int x, y, w; - uint32 *ck = _dirtyChecksums; - - for (y = 0; y != _videoMode.screenHeight / 8; y++) { - for (x = 0; x != _videoMode.screenWidth / 8; x++, ck++) { - if (ck[0] != ck[_cksumNum]) { - /* found a dirty 8x8 block, now go as far to the right as possible, - and at the same time, unmark the dirty status by setting old to new. */ - w=0; - do { - ck[w + _cksumNum] = ck[w]; - w++; - } while (x + w != _videoMode.screenWidth / 8 && ck[w] != ck[w + _cksumNum]); - - addDirtyRect(x * 8, y * 8, w * 8, 8); - - if (_forceFull) - goto get_out; - } - } - } - } else { - get_out:; - /* Copy old checksums to new */ - memcpy(_dirtyChecksums + _cksumNum, _dirtyChecksums, _cksumNum * sizeof(uint32)); - } -} - int16 OSystem_GP2X::getHeight() { return _videoMode.screenHeight; } @@ -1175,7 +1079,6 @@ void OSystem_GP2X::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, return; // Mark the modified region as dirty - _cksumValid = false; addDirtyRect(x, y, w, h); if (SDL_LockSurface(_overlayscreen) == -1) diff --git a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp index b20087e6d9..ff3bd725be 100644 --- a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp +++ b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp @@ -127,12 +127,7 @@ void OSystem_GP2XWIZ::initSize(uint w, uint h) { toggleMouseGrab(); } - _cksumNum = (w * h / (8 * 8)); - _transactionDetails.sizeChanged = true; - - free(_dirtyChecksums); - _dirtyChecksums = (uint32 *)calloc(_cksumNum * 2, sizeof(uint32)); } bool OSystem_GP2XWIZ::loadGFXMode() { diff --git a/backends/platform/iphone/iphone_common.h b/backends/platform/iphone/iphone_common.h index 9f7e3e808f..1f5ed01982 100644 --- a/backends/platform/iphone/iphone_common.h +++ b/backends/platform/iphone/iphone_common.h @@ -72,6 +72,7 @@ void iPhone_updateScreenRect(unsigned short* screen, int x1, int y1, int x2, int void iPhone_initSurface(int width, int height); bool iPhone_fetchEvent(int *outEvent, float *outX, float *outY); const char* iPhone_getDocumentsDir(); +bool iPhone_isHighResDevice(); #ifdef __cplusplus } diff --git a/backends/platform/iphone/iphone_video.h b/backends/platform/iphone/iphone_video.h index daa5e1d18e..1060a2a223 100644 --- a/backends/platform/iphone/iphone_video.h +++ b/backends/platform/iphone/iphone_video.h @@ -43,8 +43,6 @@ SoftKeyboard* _keyboardView; CALayer* _screenLayer; - int _fullWidth; - int _fullHeight; int _widthOffset; int _heightOffset; diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m index e8977be2f2..faa0719b6c 100644 --- a/backends/platform/iphone/iphone_video.m +++ b/backends/platform/iphone/iphone_video.m @@ -29,6 +29,8 @@ static iPhoneView *sharedInstance = nil; static int _width = 0; static int _height = 0; +static int _fullWidth; +static int _fullHeight; static CGRect _screenRect; static char* _textureBuffer = 0; static int _textureWidth = 0; @@ -42,6 +44,10 @@ static UITouch* _secondTouch = NULL; // static long lastTick = 0; // static int frames = 0; +bool iPhone_isHighResDevice() { + return _fullHeight > 480; +} + void iPhone_updateScreen() { if (!_needsScreenUpdate) { _needsScreenUpdate = 1; diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp index b151688e4e..6c26b6ca8d 100644 --- a/backends/platform/iphone/osys_main.cpp +++ b/backends/platform/iphone/osys_main.cpp @@ -57,7 +57,7 @@ OSystem_IPHONE::OSystem_IPHONE() : _overlayVisible(false), _overlayBuffer(NULL), _fullscreen(NULL), _mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), _secondaryTapped(false), _lastSecondaryTap(0), _screenOrientation(kScreenOrientationFlippedLandscape), - _needEventRestPeriod(false), _mouseClickAndDragEnabled(false), _touchpadModeEnabled(true), + _needEventRestPeriod(false), _mouseClickAndDragEnabled(false), _gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false), _mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0) @@ -65,6 +65,7 @@ OSystem_IPHONE::OSystem_IPHONE() : _queuedInputEvent.type = (Common::EventType)0; _lastDrawnMouseRect = Common::Rect(0, 0, 0, 0); + _touchpadModeEnabled = !iPhone_isHighResDevice(); _fsFactory = new POSIXFilesystemFactory(); } diff --git a/backends/platform/iphone/osys_video.cpp b/backends/platform/iphone/osys_video.cpp index 6cb5e18d95..76c2031758 100644 --- a/backends/platform/iphone/osys_video.cpp +++ b/backends/platform/iphone/osys_video.cpp @@ -86,7 +86,7 @@ int16 OSystem_IPHONE::getWidth() { } void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) { - //printf("setPalette()\n"); + assert(start + num <= 256); const byte *b = colors; for (uint i = start; i < start + num; ++i) { @@ -98,7 +98,14 @@ void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) { } void OSystem_IPHONE::grabPalette(byte *colors, uint start, uint num) { - //printf("grabPalette()\n"); + assert(start + num <= 256); + byte *b = colors; + + for (uint i = start; i < start + num; ++i) { + Graphics::colorToRGB<Graphics::ColorMasks<565> >(_palette[i], b[0], b[1], b[2]); + b[3] = 0xFF; + b += 4; + } } void OSystem_IPHONE::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { diff --git a/backends/platform/linuxmoto/linuxmoto-graphics.cpp b/backends/platform/linuxmoto/linuxmoto-graphics.cpp index 8f718c82f6..d66d41dfab 100644 --- a/backends/platform/linuxmoto/linuxmoto-graphics.cpp +++ b/backends/platform/linuxmoto/linuxmoto-graphics.cpp @@ -128,12 +128,7 @@ void OSystem_LINUXMOTO::initSize(uint w, uint h) { toggleMouseGrab(); } - _cksumNum = (w * h / (8 * 8)); - _transactionDetails.sizeChanged = true; - - free(_dirtyChecksums); - _dirtyChecksums = (uint32 *)calloc(_cksumNum * 2, sizeof(uint32)); } bool OSystem_LINUXMOTO::loadGFXMode() { diff --git a/backends/platform/ps2/Makefile.ps2 b/backends/platform/ps2/Makefile.ps2 index 7d18782658..d6ebc9bfc8 100644 --- a/backends/platform/ps2/Makefile.ps2 +++ b/backends/platform/ps2/Makefile.ps2 @@ -20,10 +20,10 @@ else ENABLED = STATIC_PLUGIN endif -#ENABLE_SCUMM = $(ENABLED) +ENABLE_SCUMM = $(ENABLED) #ENABLE_SCUMM_7_8 = $(ENABLED) #ENABLE_HE = $(ENABLED) -#ENABLE_AGI = $(ENABLED) +ENABLE_AGI = $(ENABLED) #ENABLE_AGOS = $(ENABLED) #ENABLE_CINE = $(ENABLED) #ENABLE_CRUISE = $(ENABLED) @@ -59,8 +59,8 @@ RM = rm -f srcdir = ../../.. VPATH = $(srcdir) INCDIR = ../../../ -#DEPDIR = .deps -#CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP +DEPDIR = .deps +CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP # Variables for dynamic plugin building PLUGIN_PREFIX = @@ -68,7 +68,7 @@ PLUGIN_SUFFIX = .plg PLUGIN_EXTRA_DEPS = plugin.syms elf/scummvm.elf PLUGIN_LDFLAGS = -nostartfiles -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-q,--just-symbols=elf/scummvm.org.elf,-Tlinkfile,--retain-symbols-file,plugin.syms -lstdc++ -lc -DEFINES = -DUSE_VORBIS -DUSE_MAD -DUSE_TREMOR -DUSE_ZLIB -DFORCE_RTL -D_EE -D__PLAYSTATION2__ -O2 -Wall -Wno-multichar +DEFINES = -DUSE_VORBIS -DUSE_MAD -DUSE_TREMOR -DUSE_ZLIB -DFORCE_RTL -D_EE -D__PLAYSTATION2__ -O2 -Wall -Wno-multichar -fno-exceptions -fno-rtti INCLUDES = $(addprefix -I$(PS2_EXTRA),$(PS2_EXTRA_INCS)) INCLUDES += -I $(PS2SDK)/ee/include -I $(PS2SDK)/common/include -I ./common -I . -I $(srcdir) -I $(srcdir)/engines @@ -103,12 +103,7 @@ LDFLAGS += $(addprefix -L$(PS2_EXTRA),$(PS2_EXTRA_LIBS)) LDFLAGS += -lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm -lmad -ltremor -lz -lm -lc -lfileXio -lkernel -lstdc++ LDFLAGS += -all: $(TARGET).ps2 +all: $(TARGET).elf $(TARGET).elf: $(OBJS) $(LD) $(PRE_OBJS_FLAGS) $(OBJS) $(POST_OBJS_FLAGS) $(LDFLAGS) -o $@ - cp $(TARGET).elf $(TARGET).org.elf - -$(TARGET).ps2: $(TARGET).elf - rm $(TARGET).elf - rm $(TARGET).org.elf diff --git a/backends/platform/ps2/ps2loader.cpp b/backends/platform/ps2/ps2loader.cpp index 717d33d2cd..bea697bf07 100644 --- a/backends/platform/ps2/ps2loader.cpp +++ b/backends/platform/ps2/ps2loader.cpp @@ -23,7 +23,7 @@ * */ -#if defined(DYNAMIC_MODULES) && defined(__PS2__) +#if defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) #include <string.h> #include <stdarg.h> @@ -718,4 +718,4 @@ void dlforgetsyms(void *handle) { } -#endif /* DYNAMIC_MODULES && __PS2__ */ +#endif /* DYNAMIC_MODULES && __PLAYSTATION2__ */ diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp index cd80c2a9cb..120f6ee157 100644 --- a/backends/platform/ps2/systemps2.cpp +++ b/backends/platform/ps2/systemps2.cpp @@ -630,23 +630,6 @@ void OSystem_PS2::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, _screen->setMouseOverlay(buf, w, h, hotspot_x, hotspot_y, keycolor); } -bool OSystem_PS2::openCD(int drive) { - return false; -} - -bool OSystem_PS2::pollCD(void) { - return false; -} - -void OSystem_PS2::playCD(int track, int num_loops, int start_frame, int duration) { -} - -void OSystem_PS2::stopCD(void) { -} - -void OSystem_PS2::updateCD(void) { -} - void OSystem_PS2::showOverlay(void) { _screen->showOverlay(); } diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h index 0068ffd93f..78973ed3f0 100644 --- a/backends/platform/ps2/systemps2.h +++ b/backends/platform/ps2/systemps2.h @@ -97,12 +97,6 @@ public: virtual Audio::Mixer *getMixer(); - virtual bool openCD(int drive); - virtual bool pollCD(); - virtual void playCD(int track, int num_loops, int start_frame, int duration); - virtual void stopCD(); - virtual void updateCD(); - virtual MutexRef createMutex(void); virtual void lockMutex(MutexRef mutex); virtual void unlockMutex(MutexRef mutex); diff --git a/backends/platform/samsungtv/samsungtv.cpp b/backends/platform/samsungtv/samsungtv.cpp index 4f0f3a1e3e..aa79b92558 100644 --- a/backends/platform/samsungtv/samsungtv.cpp +++ b/backends/platform/samsungtv/samsungtv.cpp @@ -30,7 +30,6 @@ bool OSystem_SDL_SamsungTV::hasFeature(Feature f) { return (f == kFeatureAspectRatioCorrection) || - (f == kFeatureAutoComputeDirtyRects) || (f == kFeatureCursorHasPalette); } @@ -39,12 +38,6 @@ void OSystem_SDL_SamsungTV::setFeatureState(Feature f, bool enable) { case kFeatureAspectRatioCorrection: setAspectRatioCorrection(enable); break; - case kFeatureAutoComputeDirtyRects: - if (enable) - _modeFlags |= DF_WANT_RECT_OPTIM; - else - _modeFlags &= ~DF_WANT_RECT_OPTIM; - break; default: break; } @@ -56,8 +49,6 @@ bool OSystem_SDL_SamsungTV::getFeatureState(Feature f) { switch (f) { case kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; - case kFeatureAutoComputeDirtyRects: - return _modeFlags & DF_WANT_RECT_OPTIM; default: return false; } diff --git a/backends/platform/sdl/graphics.cpp b/backends/platform/sdl/graphics.cpp index b3ef101e9e..9d0d872c3d 100644 --- a/backends/platform/sdl/graphics.cpp +++ b/backends/platform/sdl/graphics.cpp @@ -469,12 +469,7 @@ void OSystem_SDL::initSize(uint w, uint h, const Graphics::PixelFormat *format) _videoMode.screenWidth = w; _videoMode.screenHeight = h; - _cksumNum = (w * h / (8 * 8)); - _transactionDetails.sizeChanged = true; - - free(_dirtyChecksums); - _dirtyChecksums = (uint32 *)calloc(_cksumNum * 2, sizeof(uint32)); } int OSystem_SDL::effectiveScreenHeight() const { @@ -976,16 +971,7 @@ void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int assert(h > 0 && y + h <= _videoMode.screenHeight); assert(w > 0 && x + w <= _videoMode.screenWidth); - if (IS_ALIGNED(src, 4) && pitch == _videoMode.screenWidth && x == 0 && y == 0 && - w == _videoMode.screenWidth && h == _videoMode.screenHeight && _modeFlags & DF_WANT_RECT_OPTIM) { - /* Special, optimized case for full screen updates. - * It tries to determine what areas were actually changed, - * and just updates those, on the actual display. */ - addDirtyRgnAuto(src); - } else { - _cksumValid = false; - addDirtyRect(x, y, w, h); - } + addDirtyRect(x, y, w, h); // Try to lock the screen surface if (SDL_LockSurface(_screen) == -1) @@ -1131,89 +1117,6 @@ void OSystem_SDL::addDirtyRect(int x, int y, int w, int h, bool realCoordinates) } } - -void OSystem_SDL::makeChecksums(const byte *buf) { - assert(buf); - uint32 *sums = _dirtyChecksums; - uint x,y; - const uint last_x = (uint)_videoMode.screenWidth / 8; - const uint last_y = (uint)_videoMode.screenHeight / 8; - - const uint BASE = 65521; /* largest prime smaller than 65536 */ - - /* the 8x8 blocks in buf are enumerated starting in the top left corner and - * reading each line at a time from left to right */ - for (y = 0; y != last_y; y++, buf += _videoMode.screenWidth * (8 - 1)) - for (x = 0; x != last_x; x++, buf += 8) { - // Adler32 checksum algorithm (from RFC1950, used by gzip and zlib). - // This computes the Adler32 checksum of a 8x8 pixel block. Note - // that we can do the modulo operation (which is the slowest part) - // of the algorithm) at the end, instead of doing each iteration, - // since we only have 64 iterations in total - and thus s1 and - // s2 can't overflow anyway. - uint32 s1 = 1; - uint32 s2 = 0; - const byte *ptr = buf; - for (int subY = 0; subY < 8; subY++) { - for (int subX = 0; subX < 8; subX++) { - s1 += ptr[subX]; - s2 += s1; - } - ptr += _videoMode.screenWidth; - } - - s1 %= BASE; - s2 %= BASE; - - /* output the checksum for this block */ - *sums++ = (s2 << 16) + s1; - } -} - -void OSystem_SDL::addDirtyRgnAuto(const byte *buf) { - assert(buf); - assert(IS_ALIGNED(buf, 4)); - - /* generate a table of the checksums */ - makeChecksums(buf); - - if (!_cksumValid) { - _forceFull = true; - _cksumValid = true; - } - - /* go through the checksum list, compare it with the previous checksums, - and add all dirty rectangles to a list. try to combine small rectangles - into bigger ones in a simple way */ - if (!_forceFull) { - int x, y, w; - uint32 *ck = _dirtyChecksums; - - for (y = 0; y != _videoMode.screenHeight / 8; y++) { - for (x = 0; x != _videoMode.screenWidth / 8; x++, ck++) { - if (ck[0] != ck[_cksumNum]) { - /* found a dirty 8x8 block, now go as far to the right as possible, - and at the same time, unmark the dirty status by setting old to new. */ - w=0; - do { - ck[w + _cksumNum] = ck[w]; - w++; - } while (x + w != _videoMode.screenWidth / 8 && ck[w] != ck[w + _cksumNum]); - - addDirtyRect(x * 8, y * 8, w * 8, 8); - - if (_forceFull) - goto get_out; - } - } - } - } else { - get_out:; - /* Copy old checksums to new */ - memcpy(_dirtyChecksums + _cksumNum, _dirtyChecksums, _cksumNum * sizeof(uint32)); - } -} - int16 OSystem_SDL::getHeight() { return _videoMode.screenHeight; } @@ -1432,7 +1335,6 @@ void OSystem_SDL::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, i return; // Mark the modified region as dirty - _cksumValid = false; addDirtyRect(x, y, w, h); if (SDL_LockSurface(_overlayscreen) == -1) diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 6b23acfb8b..e54d70e8b2 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -149,7 +149,6 @@ void OSystem_SDL::initBackend() { memset(&_videoMode, 0, sizeof(_videoMode)); memset(&_transactionDetails, 0, sizeof(_transactionDetails)); - _cksumValid = false; #if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) && defined(USE_SCALERS) _videoMode.mode = GFX_DOUBLESIZE; _videoMode.scaleFactor = 2; @@ -163,7 +162,6 @@ void OSystem_SDL::initBackend() { _scalerProc = Normal1x; #endif _scalerType = 0; - _modeFlags = 0; #if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) _videoMode.fullscreen = ConfMan.getBool("fullscreen"); @@ -233,7 +231,7 @@ OSystem_SDL::OSystem_SDL() #endif _overlayVisible(false), _overlayscreen(0), _tmpscreen2(0), - _cdrom(0), _scalerProc(0), _modeChanged(false), _screenChangeCount(0), _dirtyChecksums(0), + _cdrom(0), _scalerProc(0), _modeChanged(false), _screenChangeCount(0), _scrollLock(false), _mouseVisible(false), _mouseNeedsRedraw(false), _mouseData(0), _mouseSurface(0), _mouseOrigSurface(0), _cursorTargetScale(1), _cursorPaletteDisabled(true), @@ -251,9 +249,9 @@ OSystem_SDL::OSystem_SDL() _screenIsLocked(false), _graphicsMutex(0), _transactionMode(kTransactionNone) { - // allocate palette storage - _currentPalette = (SDL_Color *)calloc(sizeof(SDL_Color), 256); - _cursorPalette = (SDL_Color *)calloc(sizeof(SDL_Color), 256); + // clear palette storage + memset(_currentPalette, 0, sizeof(_currentPalette)); + memset(_cursorPalette, 0, sizeof(_cursorPalette)); _mouseBackup.x = _mouseBackup.y = _mouseBackup.w = _mouseBackup.h = 0; @@ -281,9 +279,6 @@ OSystem_SDL::~OSystem_SDL() { SDL_RemoveTimer(_timerID); closeMixer(); - free(_dirtyChecksums); - free(_currentPalette); - free(_cursorPalette); free(_mouseData); delete _savefile; @@ -453,7 +448,6 @@ bool OSystem_SDL::hasFeature(Feature f) { return (f == kFeatureFullscreenMode) || (f == kFeatureAspectRatioCorrection) || - (f == kFeatureAutoComputeDirtyRects) || (f == kFeatureCursorHasPalette) || (f == kFeatureIconifyWindow); } @@ -466,12 +460,6 @@ void OSystem_SDL::setFeatureState(Feature f, bool enable) { case kFeatureAspectRatioCorrection: setAspectRatioCorrection(enable); break; - case kFeatureAutoComputeDirtyRects: - if (enable) - _modeFlags |= DF_WANT_RECT_OPTIM; - else - _modeFlags &= ~DF_WANT_RECT_OPTIM; - break; case kFeatureIconifyWindow: if (enable) SDL_WM_IconifyWindow(); @@ -489,8 +477,6 @@ bool OSystem_SDL::getFeatureState(Feature f) { return _videoMode.fullscreen; case kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; - case kFeatureAutoComputeDirtyRects: - return _modeFlags & DF_WANT_RECT_OPTIM; default: return false; } @@ -512,9 +498,6 @@ void OSystem_SDL::quit() { SDL_RemoveTimer(_timerID); closeMixer(); - free(_dirtyChecksums); - free(_currentPalette); - free(_cursorPalette); free(_mouseData); delete _timer; diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index b178d58994..b6baa52391 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -289,10 +289,6 @@ protected: uint32 _cdEndTime, _cdStopTime; enum { - DF_WANT_RECT_OPTIM = 1 << 0 - }; - - enum { kTransactionNone = 0, kTransactionActive = 1, kTransactionRollback = 2 @@ -340,7 +336,6 @@ protected: Graphics::Surface _framebuffer; /** Current video mode flags (see DF_* constants) */ - uint32 _modeFlags; bool _modeChanged; int _screenChangeCount; @@ -352,9 +347,6 @@ protected: // Dirty rect management SDL_Rect _dirtyRectList[NUM_DIRTY_RECT]; int _numDirtyRects; - uint32 *_dirtyChecksums; - bool _cksumValid; - int _cksumNum; // Keyboard mouse emulation. Disabled by fingolfin 2004-12-18. // I am keeping the rest of the code in for now, since the joystick @@ -420,11 +412,11 @@ protected: int _newShakePos; // Palette data - SDL_Color *_currentPalette; + SDL_Color _currentPalette[256]; uint _paletteDirtyStart, _paletteDirtyEnd; // Cursor palette data - SDL_Color *_cursorPalette; + SDL_Color _cursorPalette[256]; /** * Mutex which prevents multiple threads from interfering with each other @@ -457,9 +449,6 @@ protected: Common::TimerManager *_timer; protected: - void addDirtyRgnAuto(const byte *buf); - void makeChecksums(const byte *buf); - virtual void addDirtyRect(int x, int y, int w, int h, bool realCoordinates = false); // overloaded by CE backend virtual void drawMouse(); // overloaded by CE backend diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp index f8df2a5d5c..2ae47b07a8 100644 --- a/backends/platform/symbian/src/SymbianOS.cpp +++ b/backends/platform/symbian/src/SymbianOS.cpp @@ -83,7 +83,6 @@ bool OSystem_SDL_Symbian::hasFeature(Feature f) { switch (f) { case kFeatureFullscreenMode: case kFeatureAspectRatioCorrection: - case kFeatureAutoComputeDirtyRects: case kFeatureCursorHasPalette: #ifdef USE_VIBRA_SE_PXXX case kFeatureVibration: diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp index 7ce689fb63..b3480702b5 100644 --- a/backends/platform/wince/wince-sdl.cpp +++ b/backends/platform/wince/wince-sdl.cpp @@ -926,7 +926,7 @@ const OSystem::GraphicsMode *OSystem_WINCE3::getSupportedGraphicsModes() const { } bool OSystem_WINCE3::hasFeature(Feature f) { - return (f == kFeatureAutoComputeDirtyRects || f == kFeatureVirtualKeyboard); + return (f == kFeatureVirtualKeyboard); } void OSystem_WINCE3::setFeatureState(Feature f, bool enable) { @@ -1151,14 +1151,12 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 1; _scaleFactorYd = 1; _scalerProc = DownscaleHorizByThreeQuarters; - _modeFlags = 0; } else { _scaleFactorXm = 1; _scaleFactorXd = 1; _scaleFactorYm = 1; _scaleFactorYd = 1; _scalerProc = Normal1x; - _modeFlags = 0; } } else if ( _orientationLandscape && (_videoMode.screenWidth == 320 || !_videoMode.screenWidth)) { if (!_panelVisible && !_hasSmartphoneResolution && !_overlayVisible && _canBeAspectScaled) { @@ -1167,7 +1165,6 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 6; _scaleFactorYd = 5; _scalerProc = Normal1xAspect; - _modeFlags = 0; _videoMode.aspectRatioCorrection = true; } else { _scaleFactorXm = 1; @@ -1175,7 +1172,6 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 1; _scaleFactorYd = 1; _scalerProc = Normal1x; - _modeFlags = 0; } } else if (_videoMode.screenWidth == 640 && !(isOzone() && (getScreenWidth() >= 640 || getScreenHeight() >= 640))) { _scaleFactorXm = 1; @@ -1183,14 +1179,12 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 1; _scaleFactorYd = 2; _scalerProc = DownscaleAllByHalf; - _modeFlags = 0; } else if (_videoMode.screenWidth == 640 && (isOzone() && (getScreenWidth() >= 640 || getScreenHeight() >= 640))) { _scaleFactorXm = 1; _scaleFactorXd = 1; _scaleFactorYm = 1; _scaleFactorYd = 1; _scalerProc = Normal1x; - _modeFlags = 0; } return true; @@ -1203,7 +1197,6 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 12; _scaleFactorYd = 5; _scalerProc = Normal2xAspect; - _modeFlags = 0; _videoMode.aspectRatioCorrection = true; } else if ( (_panelVisible || _overlayVisible) && _canBeAspectScaled ) { _scaleFactorXm = 2; @@ -1211,7 +1204,6 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 2; _scaleFactorYd = 1; _scalerProc = Normal2x; - _modeFlags = 0; } return true; } @@ -1232,7 +1224,6 @@ bool OSystem_WINCE3::update_scalers() { _scaleFactorYm = 7; _scaleFactorYd = 8; _scalerProc = SmartphoneLandscape; - _modeFlags = 0; initZones(); return true; } @@ -1824,7 +1815,6 @@ void OSystem_WINCE3::copyRectToOverlay(const OverlayColor *buf, int pitch, int x return; // Mark the modified region as dirty - _cksumValid = false; addDirtyRect(x, y, w, h); undrawMouse(); @@ -1851,40 +1841,31 @@ void OSystem_WINCE3::copyRectToScreen(const byte *src, int pitch, int x, int y, Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends - if (((long)src & 3) == 0 && pitch == _videoMode.screenWidth && x == 0 && y == 0 && - w == _videoMode.screenWidth && h == _videoMode.screenHeight && _modeFlags & DF_WANT_RECT_OPTIM) { - /* Special, optimized case for full screen updates. - * It tries to determine what areas were actually changed, - * and just updates those, on the actual display. */ - addDirtyRgnAuto(src); - } else { - /* Clip the coordinates */ - if (x < 0) { - w += x; - src -= x; - x = 0; - } + /* Clip the coordinates */ + if (x < 0) { + w += x; + src -= x; + x = 0; + } - if (y < 0) { - h += y; - src -= y * pitch; - y = 0; - } + if (y < 0) { + h += y; + src -= y * pitch; + y = 0; + } - if (w > _videoMode.screenWidth - x) { - w = _videoMode.screenWidth - x; - } + if (w > _videoMode.screenWidth - x) { + w = _videoMode.screenWidth - x; + } - if (h > _videoMode.screenHeight - y) { - h = _videoMode.screenHeight - y; - } + if (h > _videoMode.screenHeight - y) { + h = _videoMode.screenHeight - y; + } - if (w <= 0 || h <= 0) - return; + if (w <= 0 || h <= 0) + return; - _cksumValid = false; - addDirtyRect(x, y, w, h); - } + addDirtyRect(x, y, w, h); undrawMouse(); diff --git a/backends/plugins/ps2/ps2-provider.cpp b/backends/plugins/ps2/ps2-provider.cpp index 2676c56ae8..3e966bbd08 100644 --- a/backends/plugins/ps2/ps2-provider.cpp +++ b/backends/plugins/ps2/ps2-provider.cpp @@ -23,7 +23,7 @@ * */ -#if defined(DYNAMIC_MODULES) && defined(__PS2__) +#if defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) #include "backends/plugins/ps2/ps2-provider.h" #include "backends/plugins/dynamic-plugin.h" @@ -105,4 +105,4 @@ bool PS2PluginProvider::isPluginFilename(const Common::FSNode &node) const { return true; } -#endif // defined(DYNAMIC_MODULES) && defined(__PS2__) +#endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) diff --git a/backends/plugins/ps2/ps2-provider.h b/backends/plugins/ps2/ps2-provider.h index 3c6550776b..6a357db63d 100644 --- a/backends/plugins/ps2/ps2-provider.h +++ b/backends/plugins/ps2/ps2-provider.h @@ -28,7 +28,7 @@ #include "base/plugins.h" -#if defined(DYNAMIC_MODULES) && defined(__PS2__) +#if defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) class PS2PluginProvider : public FilePluginProvider { protected: @@ -38,6 +38,6 @@ protected: }; -#endif // defined(DYNAMIC_MODULES) && defined(__PS2__) +#endif // defined(DYNAMIC_MODULES) && defined(__PLAYSTATION2__) #endif /* BACKENDS_PLUGINS_PS2_PS2_PROVIDER_H */ diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp index 1ab898d2d6..6a91f2cbe1 100644 --- a/backends/saves/default/default-saves.cpp +++ b/backends/saves/default/default-saves.cpp @@ -131,11 +131,11 @@ bool DefaultSaveFileManager::removeSavefile(const Common::String &filename) { // There is a nicely portable workaround, too: Make this method overloadable. if (remove(file.getPath().c_str()) != 0) { #ifndef _WIN32_WCE - if (errno == EACCES) + /* if (errno == EACCES) setError(Common::kWritePermissionDenied, "Search or write permission denied: "+file.getName()); if (errno == ENOENT) - setError(Common::kPathDoesNotExist, "removeSavefile: '"+file.getName()+"' does not exist or path is invalid"); + setError(Common::kPathDoesNotExist, "removeSavefile: '"+file.getName()+"' does not exist or path is invalid"); */ #endif return false; } else { diff --git a/backends/timer/psp/timer.cpp b/backends/timer/psp/timer.cpp new file mode 100644 index 0000000000..55b63ba4fd --- /dev/null +++ b/backends/timer/psp/timer.cpp @@ -0,0 +1,83 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/backends/platform/psp/osys_psp.cpp $ + * $Id: osys_psp.cpp 46126 2009-11-24 14:18:46Z fingolfin $ + * + */ + +#if defined (__PSP__) +#include <pspthreadman.h> + +#include "common/scummsys.h" +#include "common/timer.h" +#include "backends/platform/psp/thread.h" +#include "backends/timer/psp/timer.h" + +//#define __PSP_DEBUG_FUNCS__ /* For debugging function calls */ +//#define __PSP_DEBUG_PRINT__ /* For debug printouts */ + +#include "backends/platform/psp/trace.h" + +bool PspTimer::start() { + DEBUG_ENTER_FUNC(); + + if (!_interval || !_callback) + return false; + + _threadId = sceKernelCreateThread("timerThread", thread, PRIORITY_TIMER_THREAD, STACK_TIMER_THREAD, THREAD_ATTR_USER, 0); + + if (_threadId < 0) { // error + PSP_ERROR("failed to create timer thread. Error code %d\n", _threadId); + return false; + } + + PspTimer *_this = this; // trick to get into context when the thread starts + _init = true; + + if (sceKernelStartThread(_threadId, sizeof(uint32 *), &_this) < 0) { + PSP_ERROR("failed to start thread %d\n", _threadId); + return false; + } + + PSP_DEBUG_PRINT("created timer thread[%x]\n", _threadId); + + return true; +} + +int PspTimer::thread(SceSize, void *__this) { + DEBUG_ENTER_FUNC(); + PspTimer *_this = *(PspTimer **)__this; // get our this for the context + + _this->timerThread(); + return 0; +}; + +void PspTimer::timerThread() { + DEBUG_ENTER_FUNC(); + + while (_init) { + sceKernelDelayThread(_interval); + PSP_DEBUG_PRINT("calling callback!\n"); + _callback(); + } +}; + +#endif /* __PSP__ */ diff --git a/backends/timer/psp/timer.h b/backends/timer/psp/timer.h new file mode 100644 index 0000000000..ec31addb72 --- /dev/null +++ b/backends/timer/psp/timer.h @@ -0,0 +1,47 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/backends/platform/psp/osys_psp.cpp $ + * $Id: osys_psp.cpp 46126 2009-11-24 14:18:46Z fingolfin $ + * + */ + +#ifndef PSP_TIMER_H +#define PSP_TIMER_H + +class PspTimer { +public: + typedef void (* CallbackFunc)(void); + PspTimer() : _callback(0), _interval(0), _threadId(-1), _init(false) {} + void stop() { _init = false; } + bool start(); + ~PspTimer() { stop(); } + void setCallback(CallbackFunc cb) { _callback = cb; } + void setIntervalMs(uint32 interval) { _interval = interval * 1000; } + static int thread(SceSize, void *__this); // static thread to use as bridge + void timerThread(); +private: + CallbackFunc _callback; // pointer to timer callback + uint32 _interval; + int _threadId; + bool _init; +}; + +#endif diff --git a/common/system.h b/common/system.h index 76689bf381..60cea49f87 100644 --- a/common/system.h +++ b/common/system.h @@ -151,18 +151,6 @@ public: kFeatureVirtualKeyboard, /** - * This flag is a bit more obscure: it gives a hint to the backend that - * the frontend code is very inefficient in doing screen updates. So - * the frontend might do a lot of fullscreen blits even though only a - * tiny portion of the actual screen data changed. In that case, it - * might pay off for the backend to compute which parts actually changed, - * and then only mark those as dirty. - * Implementing this is purely optional, and no harm should arise - * when not doing so (except for decreased speed in said frontends). - */ - kFeatureAutoComputeDirtyRects, - - /** * This flag determines whether or not the cursor can have its own palette. * It is currently used only by some Macintosh versions of Humongous * Entertainment games. If the backend doesn't implement this feature then diff --git a/dists/iphone/scummvm.xcodeproj/project.pbxproj b/dists/iphone/scummvm.xcodeproj/project.pbxproj index 95bf0690a3..032470cf25 100755 --- a/dists/iphone/scummvm.xcodeproj/project.pbxproj +++ b/dists/iphone/scummvm.xcodeproj/project.pbxproj @@ -735,7 +735,6 @@ DF09418A0F63CB26002D821E /* detection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAAFFB0F0112DF003E9390 /* detection.cpp */; }; DF09418B0F63CB26002D821E /* thumbnail_intern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAB0010F011392003E9390 /* thumbnail_intern.cpp */; }; DF09418C0F63CB26002D821E /* dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFB900F485D890006E566 /* dither.cpp */; }; - DF0941910F63CB26002D821E /* video_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBA70F485D950006E566 /* video_player.cpp */; }; DF0941920F63CB26002D821E /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD10F485DFB0006E566 /* debug.cpp */; }; DF0941930F63CB26002D821E /* GuiManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD50F485E360006E566 /* GuiManager.cpp */; }; DF0941940F63CB26002D821E /* posix-saves.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBF80F4860A60006E566 /* posix-saves.cpp */; }; @@ -875,7 +874,6 @@ DF2EC51910E64EE600765801 /* wave6581.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2EC51710E64EE600765801 /* wave6581.cpp */; }; DF2EC51A10E64EE600765801 /* wave6581.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2EC51710E64EE600765801 /* wave6581.cpp */; }; DF2FFB930F485D890006E566 /* dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFB900F485D890006E566 /* dither.cpp */; }; - DF2FFBB70F485D950006E566 /* video_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBA70F485D950006E566 /* video_player.cpp */; }; DF2FFBD30F485DFB0006E566 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD10F485DFB0006E566 /* debug.cpp */; }; DF2FFBD90F485E360006E566 /* GuiManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD50F485E360006E566 /* GuiManager.cpp */; }; DF2FFBFC0F4860A60006E566 /* posix-saves.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBF80F4860A60006E566 /* posix-saves.cpp */; }; @@ -1915,6 +1913,33 @@ DFAAAFFC0F0112DF003E9390 /* detection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAAFFB0F0112DF003E9390 /* detection.cpp */; }; DFAAB0020F011392003E9390 /* thumbnail_intern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAB0010F011392003E9390 /* thumbnail_intern.cpp */; }; DFAAD23D0F50120E00C3A4E2 /* console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAD2390F50120E00C3A4E2 /* console.cpp */; }; + DFB0576811B753AF0015AE65 /* mpeg_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576211B753AF0015AE65 /* mpeg_player.cpp */; }; + DFB0576911B753AF0015AE65 /* qt_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576411B753AF0015AE65 /* qt_decoder.cpp */; }; + DFB0576A11B753AF0015AE65 /* video_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576611B753AF0015AE65 /* video_decoder.cpp */; }; + DFB0576B11B753AF0015AE65 /* mpeg_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576211B753AF0015AE65 /* mpeg_player.cpp */; }; + DFB0576C11B753AF0015AE65 /* qt_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576411B753AF0015AE65 /* qt_decoder.cpp */; }; + DFB0576D11B753AF0015AE65 /* video_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576611B753AF0015AE65 /* video_decoder.cpp */; }; + DFB0576E11B753AF0015AE65 /* mpeg_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576211B753AF0015AE65 /* mpeg_player.cpp */; }; + DFB0576F11B753AF0015AE65 /* qt_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576411B753AF0015AE65 /* qt_decoder.cpp */; }; + DFB0577011B753AF0015AE65 /* video_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0576611B753AF0015AE65 /* video_decoder.cpp */; }; + DFB0577611B753DA0015AE65 /* rational.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577411B753DA0015AE65 /* rational.cpp */; }; + DFB0577711B753DA0015AE65 /* rational.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577411B753DA0015AE65 /* rational.cpp */; }; + DFB0577811B753DA0015AE65 /* rational.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577411B753DA0015AE65 /* rational.cpp */; }; + DFB0578011B7541F0015AE65 /* resource_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577D11B7541F0015AE65 /* resource_audio.cpp */; }; + DFB0578111B7541F0015AE65 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577E11B7541F0015AE65 /* util.cpp */; }; + DFB0578211B7541F0015AE65 /* resource_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577D11B7541F0015AE65 /* resource_audio.cpp */; }; + DFB0578311B7541F0015AE65 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577E11B7541F0015AE65 /* util.cpp */; }; + DFB0578411B7541F0015AE65 /* resource_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577D11B7541F0015AE65 /* resource_audio.cpp */; }; + DFB0578511B7541F0015AE65 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0577E11B7541F0015AE65 /* util.cpp */; }; + DFB0578A11B754570015AE65 /* maciconbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578811B754570015AE65 /* maciconbar.cpp */; }; + DFB0578B11B754570015AE65 /* maciconbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578811B754570015AE65 /* maciconbar.cpp */; }; + DFB0578C11B754570015AE65 /* maciconbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578811B754570015AE65 /* maciconbar.cpp */; }; + DFB0579111B7547D0015AE65 /* pict.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578F11B7547D0015AE65 /* pict.cpp */; }; + DFB0579211B7547D0015AE65 /* pict.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578F11B7547D0015AE65 /* pict.cpp */; }; + DFB0579311B7547D0015AE65 /* pict.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0578F11B7547D0015AE65 /* pict.cpp */; }; + DFB0579811B7549C0015AE65 /* cinepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0579611B7549C0015AE65 /* cinepak.cpp */; }; + DFB0579911B7549C0015AE65 /* cinepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0579611B7549C0015AE65 /* cinepak.cpp */; }; + DFB0579A11B7549C0015AE65 /* cinepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB0579611B7549C0015AE65 /* cinepak.cpp */; }; DFC831210F48AF19005EF03C /* detection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFC8301A0F48AF18005EF03C /* detection.cpp */; }; DFC831230F48AF19005EF03C /* game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFC8301D0F48AF18005EF03C /* game.cpp */; }; DFC831240F48AF19005EF03C /* gc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFC8301E0F48AF18005EF03C /* gc.cpp */; }; @@ -2796,7 +2821,6 @@ DFF95C1F0FB22D5700A3EC78 /* detection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAAFFB0F0112DF003E9390 /* detection.cpp */; }; DFF95C200FB22D5700A3EC78 /* thumbnail_intern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFAAB0010F011392003E9390 /* thumbnail_intern.cpp */; }; DFF95C210FB22D5700A3EC78 /* dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFB900F485D890006E566 /* dither.cpp */; }; - DFF95C260FB22D5700A3EC78 /* video_player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBA70F485D950006E566 /* video_player.cpp */; }; DFF95C270FB22D5700A3EC78 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD10F485DFB0006E566 /* debug.cpp */; }; DFF95C280FB22D5700A3EC78 /* GuiManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBD50F485E360006E566 /* GuiManager.cpp */; }; DFF95C290FB22D5700A3EC78 /* posix-saves.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2FFBF80F4860A60006E566 /* posix-saves.cpp */; }; @@ -2985,8 +3009,6 @@ DF2FFB900F485D890006E566 /* dither.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dither.cpp; sourceTree = "<group>"; }; DF2FFB910F485D890006E566 /* dither.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dither.h; sourceTree = "<group>"; }; DF2FFB920F485D890006E566 /* pixelformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixelformat.h; sourceTree = "<group>"; }; - DF2FFBA70F485D950006E566 /* video_player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_player.cpp; sourceTree = "<group>"; }; - DF2FFBA80F485D950006E566 /* video_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_player.h; sourceTree = "<group>"; }; DF2FFBD10F485DFB0006E566 /* debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = debug.cpp; sourceTree = "<group>"; }; DF2FFBD20F485DFB0006E566 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; }; DF2FFBD50F485E360006E566 /* GuiManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GuiManager.cpp; sourceTree = "<group>"; }; @@ -4358,6 +4380,24 @@ DFAAB0010F011392003E9390 /* thumbnail_intern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = thumbnail_intern.cpp; sourceTree = "<group>"; }; DFAAD2390F50120E00C3A4E2 /* console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = console.cpp; sourceTree = "<group>"; }; DFAAD23A0F50120E00C3A4E2 /* console.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = console.h; sourceTree = "<group>"; }; + DFB0576211B753AF0015AE65 /* mpeg_player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mpeg_player.cpp; sourceTree = "<group>"; }; + DFB0576311B753AF0015AE65 /* mpeg_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpeg_player.h; sourceTree = "<group>"; }; + DFB0576411B753AF0015AE65 /* qt_decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qt_decoder.cpp; sourceTree = "<group>"; }; + DFB0576511B753AF0015AE65 /* qt_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qt_decoder.h; sourceTree = "<group>"; }; + DFB0576611B753AF0015AE65 /* video_decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_decoder.cpp; sourceTree = "<group>"; }; + DFB0576711B753AF0015AE65 /* video_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_decoder.h; sourceTree = "<group>"; }; + DFB0577311B753DA0015AE65 /* debug-channels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "debug-channels.h"; sourceTree = "<group>"; }; + DFB0577411B753DA0015AE65 /* rational.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rational.cpp; sourceTree = "<group>"; }; + DFB0577511B753DA0015AE65 /* rational.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rational.h; sourceTree = "<group>"; }; + DFB0577D11B7541F0015AE65 /* resource_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = resource_audio.cpp; sourceTree = "<group>"; }; + DFB0577E11B7541F0015AE65 /* util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = util.cpp; sourceTree = "<group>"; }; + DFB0577F11B7541F0015AE65 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; }; + DFB0578811B754570015AE65 /* maciconbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maciconbar.cpp; sourceTree = "<group>"; }; + DFB0578911B754570015AE65 /* maciconbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maciconbar.h; sourceTree = "<group>"; }; + DFB0578F11B7547D0015AE65 /* pict.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pict.cpp; sourceTree = "<group>"; }; + DFB0579011B7547D0015AE65 /* pict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pict.h; sourceTree = "<group>"; }; + DFB0579611B7549C0015AE65 /* cinepak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cinepak.cpp; sourceTree = "<group>"; }; + DFB0579711B7549C0015AE65 /* cinepak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cinepak.h; sourceTree = "<group>"; }; DFC8301A0F48AF18005EF03C /* detection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = detection.cpp; sourceTree = "<group>"; }; DFC8301D0F48AF18005EF03C /* game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game.cpp; sourceTree = "<group>"; }; DFC8301E0F48AF18005EF03C /* gc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gc.cpp; sourceTree = "<group>"; }; @@ -4776,6 +4816,12 @@ DF2FFB940F485D950006E566 /* video */ = { isa = PBXGroup; children = ( + DFB0576211B753AF0015AE65 /* mpeg_player.cpp */, + DFB0576311B753AF0015AE65 /* mpeg_player.h */, + DFB0576411B753AF0015AE65 /* qt_decoder.cpp */, + DFB0576511B753AF0015AE65 /* qt_decoder.h */, + DFB0576611B753AF0015AE65 /* video_decoder.cpp */, + DFB0576711B753AF0015AE65 /* video_decoder.h */, DF90EABF10B023F300C8F93F /* codecs */, DF90EAB610B023D100C8F93F /* avi_decoder.cpp */, DF90EAB710B023D100C8F93F /* avi_decoder.h */, @@ -4786,8 +4832,6 @@ DF6118630FE3A9410042AD3F /* flic_decoder.h */, DF6118640FE3A9410042AD3F /* smk_decoder.cpp */, DF6118650FE3A9410042AD3F /* smk_decoder.h */, - DF2FFBA70F485D950006E566 /* video_player.cpp */, - DF2FFBA80F485D950006E566 /* video_player.h */, ); path = video; sourceTree = "<group>"; @@ -4884,6 +4928,8 @@ DF45B175116628A5009B85CC /* graphics */ = { isa = PBXGroup; children = ( + DFB0578811B754570015AE65 /* maciconbar.cpp */, + DFB0578911B754570015AE65 /* maciconbar.h */, DF9B924F118E46A00069C19D /* fontsjis.cpp */, DF9B9250118E46A00069C19D /* fontsjis.h */, DF45B176116628A5009B85CC /* animate.cpp */, @@ -6388,6 +6434,8 @@ DF90EABF10B023F300C8F93F /* codecs */ = { isa = PBXGroup; children = ( + DFB0579611B7549C0015AE65 /* cinepak.cpp */, + DFB0579711B7549C0015AE65 /* cinepak.h */, DFCDC6FC11662AD700A7D2A0 /* msrle.cpp */, DFCDC6FD11662AD700A7D2A0 /* msrle.h */, DF90EAC010B023F400C8F93F /* codec.h */, @@ -6414,6 +6462,9 @@ DFC830190F48AF18005EF03C /* sci */ = { isa = PBXGroup; children = ( + DFB0577D11B7541F0015AE65 /* resource_audio.cpp */, + DFB0577E11B7541F0015AE65 /* util.cpp */, + DFB0577F11B7541F0015AE65 /* util.h */, DF45B175116628A5009B85CC /* graphics */, DF45B1A5116628A5009B85CC /* parser */, DF45B1AB116628A5009B85CC /* sound */, @@ -6685,6 +6736,9 @@ DFE473950D81F4E800B6D1FB /* common */ = { isa = PBXGroup; children = ( + DFB0577311B753DA0015AE65 /* debug-channels.h */, + DFB0577411B753DA0015AE65 /* rational.cpp */, + DFB0577511B753DA0015AE65 /* rational.h */, DF9B9261118E46FE0069C19D /* error.cpp */, DFEC5D0A1166C5CF00C90552 /* random.cpp */, DFEC5D0B1166C5CF00C90552 /* random.h */, @@ -6767,6 +6821,8 @@ DFE477520D81F4E900B6D1FB /* graphics */ = { isa = PBXGroup; children = ( + DFB0578F11B7547D0015AE65 /* pict.cpp */, + DFB0579011B7547D0015AE65 /* pict.h */, DF6BF4C010529DA50069811F /* conversion.cpp */, DF6BF4C110529DA50069811F /* conversion.h */, DF6BF4C210529DA50069811F /* jpeg.cpp */, @@ -7834,7 +7890,6 @@ DFAAAFFC0F0112DF003E9390 /* detection.cpp in Sources */, DFAAB0020F011392003E9390 /* thumbnail_intern.cpp in Sources */, DF2FFB930F485D890006E566 /* dither.cpp in Sources */, - DF2FFBB70F485D950006E566 /* video_player.cpp in Sources */, DF2FFBD30F485DFB0006E566 /* debug.cpp in Sources */, DF2FFBD90F485E360006E566 /* GuiManager.cpp in Sources */, DF2FFBFC0F4860A60006E566 /* posix-saves.cpp in Sources */, @@ -8055,6 +8110,15 @@ DF9B9249118E46730069C19D /* error.cpp in Sources */, DF9B9254118E46A00069C19D /* fontsjis.cpp in Sources */, DF9B9263118E46FE0069C19D /* error.cpp in Sources */, + DFB0576B11B753AF0015AE65 /* mpeg_player.cpp in Sources */, + DFB0576C11B753AF0015AE65 /* qt_decoder.cpp in Sources */, + DFB0576D11B753AF0015AE65 /* video_decoder.cpp in Sources */, + DFB0577711B753DA0015AE65 /* rational.cpp in Sources */, + DFB0578211B7541F0015AE65 /* resource_audio.cpp in Sources */, + DFB0578311B7541F0015AE65 /* util.cpp in Sources */, + DFB0578B11B754570015AE65 /* maciconbar.cpp in Sources */, + DFB0579211B7547D0015AE65 /* pict.cpp in Sources */, + DFB0579911B7549C0015AE65 /* cinepak.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8781,7 +8845,6 @@ DF09418A0F63CB26002D821E /* detection.cpp in Sources */, DF09418B0F63CB26002D821E /* thumbnail_intern.cpp in Sources */, DF09418C0F63CB26002D821E /* dither.cpp in Sources */, - DF0941910F63CB26002D821E /* video_player.cpp in Sources */, DF0941920F63CB26002D821E /* debug.cpp in Sources */, DF0941930F63CB26002D821E /* GuiManager.cpp in Sources */, DF0941940F63CB26002D821E /* posix-saves.cpp in Sources */, @@ -9006,6 +9069,15 @@ DF9B924A118E46730069C19D /* error.cpp in Sources */, DF9B9256118E46A00069C19D /* fontsjis.cpp in Sources */, DF9B9264118E46FE0069C19D /* error.cpp in Sources */, + DFB0576E11B753AF0015AE65 /* mpeg_player.cpp in Sources */, + DFB0576F11B753AF0015AE65 /* qt_decoder.cpp in Sources */, + DFB0577011B753AF0015AE65 /* video_decoder.cpp in Sources */, + DFB0577811B753DA0015AE65 /* rational.cpp in Sources */, + DFB0578411B7541F0015AE65 /* resource_audio.cpp in Sources */, + DFB0578511B7541F0015AE65 /* util.cpp in Sources */, + DFB0578C11B754570015AE65 /* maciconbar.cpp in Sources */, + DFB0579311B7547D0015AE65 /* pict.cpp in Sources */, + DFB0579A11B7549C0015AE65 /* cinepak.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9737,7 +9809,6 @@ DFF95C1F0FB22D5700A3EC78 /* detection.cpp in Sources */, DFF95C200FB22D5700A3EC78 /* thumbnail_intern.cpp in Sources */, DFF95C210FB22D5700A3EC78 /* dither.cpp in Sources */, - DFF95C260FB22D5700A3EC78 /* video_player.cpp in Sources */, DFF95C270FB22D5700A3EC78 /* debug.cpp in Sources */, DFF95C280FB22D5700A3EC78 /* GuiManager.cpp in Sources */, DFF95C290FB22D5700A3EC78 /* posix-saves.cpp in Sources */, @@ -9958,6 +10029,15 @@ DF9B9248118E46730069C19D /* error.cpp in Sources */, DF9B9252118E46A00069C19D /* fontsjis.cpp in Sources */, DF9B9262118E46FE0069C19D /* error.cpp in Sources */, + DFB0576811B753AF0015AE65 /* mpeg_player.cpp in Sources */, + DFB0576911B753AF0015AE65 /* qt_decoder.cpp in Sources */, + DFB0576A11B753AF0015AE65 /* video_decoder.cpp in Sources */, + DFB0577611B753DA0015AE65 /* rational.cpp in Sources */, + DFB0578011B7541F0015AE65 /* resource_audio.cpp in Sources */, + DFB0578111B7541F0015AE65 /* util.cpp in Sources */, + DFB0578A11B754570015AE65 /* maciconbar.cpp in Sources */, + DFB0579111B7547D0015AE65 /* pict.cpp in Sources */, + DFB0579811B7549C0015AE65 /* cinepak.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10061,6 +10141,8 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ""; GCC_C_LANGUAGE_STANDARD = c99; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; GCC_INPUT_FILETYPE = automatic; GCC_PREPROCESSOR_DEFINITIONS = ( XCODE, @@ -10128,6 +10210,8 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_CPP_EXCEPTIONS = NO; + GCC_ENABLE_CPP_RTTI = NO; GCC_INPUT_FILETYPE = automatic; GCC_PREPROCESSOR_DEFINITIONS = ( XCODE, diff --git a/dists/os2/readme.os2 b/dists/os2/readme.os2 new file mode 100644 index 0000000000..a753323f4a --- /dev/null +++ b/dists/os2/readme.os2 @@ -0,0 +1,13 @@ +This is an OS/2 & eComStation build of ScummVM 1.1.1 + +To run, it requires: +* The libc063 runtime dll, available from ftp://ftp.netlabs.org/pub/gcc/libc-0.6.3-csd3.zip +* The gcc444 runtime dll, available from http://download.smedley.info/gcc444.zip +* The SDL dll's available from ftp://ftp.netlabs.org/pub/sdl/sdl-1.2.10-bin-20080804.zip + +All feedback is appreciated! + +Thanks! + +Paul Smedley +5th May, 2010
\ No newline at end of file diff --git a/dists/os2/scummvm.ico b/dists/os2/scummvm.ico Binary files differnew file mode 100644 index 0000000000..c22ca23608 --- /dev/null +++ b/dists/os2/scummvm.ico diff --git a/dists/samsungtv/clmeta.dat b/dists/samsungtv/clmeta.dat index a43bcb54c0..ca2ae23ee5 100644 --- a/dists/samsungtv/clmeta.dat +++ b/dists/samsungtv/clmeta.dat @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <contentlibrary> <contentpack id="scummvm"> <category>Game</category> diff --git a/engines/m4/animation.h b/engines/m4/animation.h index c8be7f5cb3..2dfe0d887e 100644 --- a/engines/m4/animation.h +++ b/engines/m4/animation.h @@ -62,6 +62,8 @@ class Animation { Common::String *_spriteSeriesNames; SpriteAsset *_spriteSeries; int _curFrame, _curFrameEntry; + + bool freeFlag() const { return _freeFlag; } }; } // End of namespace M4 diff --git a/engines/m4/mads_scene.cpp b/engines/m4/mads_scene.cpp index efb495e823..8073db32db 100644 --- a/engines/m4/mads_scene.cpp +++ b/engines/m4/mads_scene.cpp @@ -64,7 +64,7 @@ void MadsScene::loadScene2(const char *aaName) { _kernelMessages.clear(); // Load up the properties for the scene - _sceneResources.load(_currentScene); + _sceneResources.load(_currentScene, NULL, 0/*word_83546*/, _walkSurface, _backgroundSurface); // Load scene walk paths loadSceneCodes(_currentScene); @@ -304,6 +304,16 @@ void MadsScene::update() { void MadsScene::updateState() { _sequenceList.tick(); + + if ((_activeAnimation) && !_abortTimers) { + _activeAnimation->update(); + if (((MadsAnimation *) _activeAnimation)->freeFlag()) { + delete _activeAnimation; + _activeAnimation = NULL; + } + } + + _kernelMessages.update(); } int MadsScene::loadSceneSpriteSet(const char *setName) { diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp index 96bdb42007..6fe472f5fa 100644 --- a/engines/sci/graphics/palette.cpp +++ b/engines/sci/graphics/palette.cpp @@ -55,6 +55,7 @@ GfxPalette::GfxPalette(ResourceManager *resMan, GfxScreen *screen, bool autoSetP _sysPalette.colors[255].g = 255; _sysPalette.colors[255].b = 255; + _sysPaletteChanged = false; if (autoSetPalette) { if (_resMan->getViewType() == kViewEga) setEGA(); @@ -63,7 +64,6 @@ GfxPalette::GfxPalette(ResourceManager *resMan, GfxScreen *screen, bool autoSetP else kernelSetFromResource(999, true); } - _sysPaletteChanged = false; } GfxPalette::~GfxPalette() { diff --git a/graphics/video/smk_decoder.cpp b/graphics/video/smk_decoder.cpp index 68fac32aae..3f200b5971 100644 --- a/graphics/video/smk_decoder.cpp +++ b/graphics/video/smk_decoder.cpp @@ -422,24 +422,36 @@ bool SmackerDecoder::load(Common::SeekableReadStream &stream) { for (i = 0; i < 7; ++i) { // AudioRate - Frequency and format information for each sound track, up to 7 audio tracks. // The 32 constituent bits have the following meaning: - // * bit 31 - data is compressed + // * bit 31 - indicates Huffman + DPCM compression // * bit 30 - indicates that audio data is present for this track // * bit 29 - 1 = 16-bit audio; 0 = 8-bit audio // * bit 28 - 1 = stereo audio; 0 = mono audio - // * bits 27-26 - if both set to zero - use v2 sound decompression + // * bit 27 - indicates Bink RDFT compression + // * bit 26 - indicates Bink DCT compression // * bits 25-24 - unused // * bits 23-0 - audio sample rate uint32 audioInfo = _fileStream->readUint32LE(); - _header.audioInfo[i].isCompressed = audioInfo & 0x80000000; _header.audioInfo[i].hasAudio = audioInfo & 0x40000000; _header.audioInfo[i].is16Bits = audioInfo & 0x20000000; _header.audioInfo[i].isStereo = audioInfo & 0x10000000; - _header.audioInfo[i].hasV2Compression = !(audioInfo & 0x8000000) && - !(audioInfo & 0x4000000); _header.audioInfo[i].sampleRate = audioInfo & 0xFFFFFF; - if (_header.audioInfo[i].hasAudio && i == 0) - _audioStream = Audio::makeQueuingAudioStream(_header.audioInfo[0].sampleRate, _header.audioInfo[0].isStereo); + if (audioInfo & 0x8000000) + _header.audioInfo[i].compression = kCompressionRDFT; + else if (audioInfo & 0x4000000) + _header.audioInfo[i].compression = kCompressionDCT; + else if (audioInfo & 0x80000000) + _header.audioInfo[i].compression = kCompressionDPCM; + else + _header.audioInfo[i].compression = kCompressionNone; + + if (_header.audioInfo[i].hasAudio) { + if (_header.audioInfo[i].compression == kCompressionRDFT || _header.audioInfo[i].compression == kCompressionDCT) + warning("Unhandled Smacker v2 audio compression"); + + if (i == 0) + _audioStream = Audio::makeQueuingAudioStream(_header.audioInfo[0].sampleRate, _header.audioInfo[0].isStereo); + } } _header.dummy = _fileStream->readUint32LE(); @@ -528,7 +540,7 @@ Surface *SmackerDecoder::decodeNextFrame() { chunkSize = _fileStream->readUint32LE(); chunkSize -= 4; // subtract the first 4 bytes (chunk size) - if (_header.audioInfo[i].isCompressed) { + if (_header.audioInfo[i].compression != kCompressionNone) { dataSizeUnpacked = _fileStream->readUint32LE(); chunkSize -= 4; // subtract the next 4 bytes (unpacked data size) } else { @@ -541,7 +553,11 @@ Surface *SmackerDecoder::decodeNextFrame() { _fileStream->read(soundBuffer, chunkSize); - if (_header.audioInfo[i].isCompressed) { + if (_header.audioInfo[i].compression == kCompressionRDFT || _header.audioInfo[i].compression == kCompressionDCT) { + // TODO: Compressed audio (Bink RDFT/DCT encoded) + free(soundBuffer); + continue; + } else if (_header.audioInfo[i].compression == kCompressionDPCM) { // Compressed audio (Huffman DPCM encoded) queueCompressedBuffer(soundBuffer, chunkSize, dataSizeUnpacked, i); free(soundBuffer); diff --git a/graphics/video/smk_decoder.h b/graphics/video/smk_decoder.h index 437f47f2d6..6bf671f318 100644 --- a/graphics/video/smk_decoder.h +++ b/graphics/video/smk_decoder.h @@ -80,12 +80,18 @@ private: uint getBlockRun(int index) { return (index <= 58) ? index + 1 : 128 << (index - 59); } void queueCompressedBuffer(byte *buffer, uint32 bufferSize, uint32 unpackedSize, int streamNum); + enum AudioCompression { + kCompressionNone, + kCompressionDPCM, + kCompressionRDFT, + kCompressionDCT + }; + struct AudioInfo { - bool isCompressed; + AudioCompression compression; bool hasAudio; bool is16Bits; bool isStereo; - bool hasV2Compression; uint32 sampleRate; }; |