aboutsummaryrefslogtreecommitdiff
path: root/backends/gp32/gp32.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/gp32/gp32.h')
-rw-r--r--backends/gp32/gp32.h180
1 files changed, 139 insertions, 41 deletions
diff --git a/backends/gp32/gp32.h b/backends/gp32/gp32.h
index 1e8ff60ee8..b5a9db6ee3 100644
--- a/backends/gp32/gp32.h
+++ b/backends/gp32/gp32.h
@@ -1,7 +1,8 @@
/* ScummVM - Scumm Interpreter
* Copyright (C) 2001 Ludvig Strigeus
- * Copyright (C) 2001/2002 The ScummVM project
- * Copyright (C) 2002 ph0x (GP32 port)
+ * Copyright (C) 2001/2004 The ScummVM project
+ * Copyright (C) 2002 Ph0x - GP32 Backend
+ * Copyright (C) 2003/2004 DJWillis - GP32 Backend
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -16,33 +17,81 @@
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
*/
+#ifndef GP32_H
+#define GP32_H
-#include "backends/intern.h"
+/////////////////////////////////////////////////////////////////////////////
+// Header for GP32 ScummVM Backend
+/////////////////////////////////////////////////////////////////////////////
+
+//Standard ScummVM includes.
#include "common/stdafx.h"
#include "common/scummsys.h"
+#include "common/scaler.h"
#include "common/system.h"
-#include "common/scummsys.h"
-#include "common/stdafx.h"
+#include "backends/intern.h"
+
#include "base/engine.h"
-#include "scumm/saveload.h"
-#include "common/scaler.h"
+//#include "scumm/saveload.h"
+
+//Graphics wrapper - SDL Derived.
+#include "backends/gp32/graphics.h"
+
+//Pre-ScummVM Config stuff
+//#include "backends/gp32/config.h"
+
+#define LCD_WIDTH 320
+#define LCD_HEIGHT 240
+#define LCD_WIDTH_CENTER LCD_WIDTH / 2
+#define LCD_HEIGHT_CENTER LCD_HEIGHT / 2
+#define LCD_SIZE (LCD_WIDTH * LCD_HEIGHT)
+
+// Graphics Bits
+#define GAME_SURFACE 0
+#define GAME_SURFACE2 1
+#define DEBUG_SURFACE 2
-#include "portdefs.h"
-#include "sdl.h"
+extern int nflip, keydata; // Flip Index
+extern GP_HPALETTE PAL; //palette
-class OSystem_GP32 : public OSystem {
+//void Delay(int ms);
+//void FadeToBlack(int delay_time);
+
+
+#define BUFFERCOUNT 2
+extern GPDRAWSURFACE LCDbuffer[BUFFERCOUNT + 1]; //buffers
+
+#define BACKGROUND_COLOR 0 //Black color
+#define COLOUR_8BIT_MODE 8
+#define COLOUR_16BIT_MODE 16
+
+/* Assembly routines from cpuspeed.s */
+extern "C" {void cpu_speed(int,int,int);} // CPU Speed control (3 int's, clock, bus, dividor)
+
+/* Fake main() entry point */
+//int main_scummvm(int argc, char *argv[]);
+
+//Prototypes
+class OSystem_GP32 : public OSystem
+{
public:
+ OSystem_GP32();
+ virtual ~OSystem_GP32();
+
// Set colors of the palette
void setPalette(const byte *colors, uint start, uint num);
// Set the size of the video bitmap.
// Typically, 320x200
void initSize(uint w, uint h);
- int16 getHeight() { return _screenHeight; }
- int16 getWidth() { return _screenWidth; }
-
+ int16 getHeight() { return _screenHeight; }
+ int16 getWidth() { return _screenWidth; }
+
// Draw a bitmap to screen.
// The screen will not be updated to reflect the new bitmap
void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
@@ -52,13 +101,11 @@ public:
// Either show or hide the mouse cursor
bool showMouse(bool visible);
- void warpMouse(int x, int y);
-
- // Set the position of the mouse cursor
- void set_mouse_pos(int x, int y);
+ void warpMouse(int x, int y);
+
// Set the bitmap that's used when drawing the cursor.
- void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor);
+ void setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor = 255, int cursorTargetScale = 1);
// Shaking is used in SCUMM. Set current shake position.
void setShakePos(int shake_pos);
@@ -68,7 +115,7 @@ public:
// Delay for a specified amount of milliseconds
void delayMillis(uint msecs);
-
+
// Get the next event.
// Returns true if an event was retrieved.
bool pollEvent(Event &event);
@@ -77,10 +124,14 @@ public:
// Format is the sample type format.
// Only 16-bit signed mode is needed for simon & scumm
bool setSoundCallback(SoundProc proc, void *param);
- void clearSoundCallback();
+
+ // Clear Sound Sample
+ void clearSoundCallback();
+ // OLD - Delete when sure not needed.
// Get or set a property
- uint32 property(int param, Property *value);
+ //uint32 property(int param, Property *value);
+ //virtual uint32 property(int param, Property *value);
// Poll cdrom status
// Returns true if cd audio is playing
@@ -98,12 +149,17 @@ public:
// Add a new callback timer
void setTimerCallback(TimerProc callback, int timer);
- // Mutex handling
+ // Mutex handling
OSystem::MutexRef createMutex();
void lockMutex(MutexRef mutex);
void unlockMutex(MutexRef mutex);
void deleteMutex(MutexRef mutex);
-
+ // DJWillis
+
+ //helper
+ int16 get_height();
+ int16 get_width();
+
// Quit
void quit();
@@ -114,12 +170,42 @@ public:
void grabOverlay(int16 *buf, int pitch);
void copyRectToOverlay(const int16 *buf, int pitch, int x, int y, int w, int h);
- static OSystem *create(int gfx_mode, bool full_screen);
+ //static OSystem *create(int gfx_mode, bool full_screen);
+
+ int16 RBGToColor(uint8 r, uint8 g, uint8 b);
+ void colorToRBG(int16 color, uint8 &r, uint8 &g, uint8 &b);
+
+ //void *gm_yocalloc(size_t num_elem, size_t size_elem);
+ //void *gm_realloc(void *ptr, size_t size);
+
+ // New 0.6.0 +
+ const GraphicsMode *getSupportedGraphicsModes() const;
+ int getDefaultGraphicsMode() const;
+ bool setGraphicsMode(int mode);
+ int getGraphicsMode() const;
+
+ void setWindowCaption(const char *caption);
+ bool openCD(int drive);
+
+ // Determine the output sample rate. Audio data provided by the sound
+ // Callback sound be played using this rate.
+ // FIXME: GP32 Hardcodes rate currently.
+ int getOutputSampleRate() const;
+
+ bool hasFeature(Feature f);
+ void setFeatureState(Feature f, bool enable);
+ bool getFeatureState(Feature f);
+
+ //static OSystem *create();
private:
- SDL_Surface *sdl_tmpscreen; // temporary screen (for scalers/overlay)
- SDL_Surface *sdl_hwscreen; // hardware screen
- bool _overlay_visible;
+
+ // Set the position of the mouse cursor - Not part of OSystem anymore.
+ void set_mouse_pos(int x, int y);
+
+ gpSurface *_tmpscreen; // temporary screen (for scalers/overlay)
+ gpSurface *_hwscreen; // hardware screen
+ bool _overlayVisible;
ScalerProc *_scaler_proc;
@@ -128,15 +214,11 @@ private:
//uint msec_start;
//uint32 get_ticks();
- ///OSystem_GP32(); // eh?
- /// ~OSystem_GP32();
-
// unseen game screen
- SDL_Surface *_screen;
+ gpSurface *_screen;
int _screenWidth, _screenHeight;
- // CD Audio
- ///SDL_CD *_cdrom;
+ // CD Audio, Not used in GP32 backend
int cd_track, cd_num_loops, cd_start_frame, cd_end_frame;
uint32 cd_end_time, cd_stop_time, cd_next_second;
@@ -150,17 +232,20 @@ private:
int _mode;
bool _full_screen;
uint32 _mode_flags;
+ bool _modeChanged;
+
+ /** True if aspect ratio correction is enabled. */
+ bool _adjustAspectRatio;
enum {
NUM_DIRTY_RECT = 100,
-
MAX_MOUSE_W = 40,
MAX_MOUSE_H = 40,
MAX_SCALING = 3
};
// Dirty rect managment
- SDL_Rect _dirty_rect_list[100];
+ gpRect _dirty_rect_list[100];
int _num_dirty_rects;
uint32 *_dirty_checksums;
bool cksum_valid;
@@ -180,8 +265,8 @@ private:
bool _mouseDrawn;
byte *_mouseData;
byte *_mouseBackup;
- MousePos _mouse_cur_state;
- MousePos _mouse_old_state;
+ MousePos _mouseCurState;
+ MousePos _mouseOldState;
int16 _mouseHotspotX;
int16 _mouseHotspotY;
byte _mouseKeycolor;
@@ -191,10 +276,15 @@ private:
int _newShakePos;
// Palette data
- SDL_Color *_currentPalette;
+ gpColor *_currentPalette;
uint _paletteDirtyStart, _paletteDirtyEnd;
-
+ /**
+ * Mutex which prevents multiple threads from interfering with each other
+ * when accessing the screen.
+ */
+ MutexRef _graphicsMutex;
+
void add_dirty_rgn_auto(const byte *buf);
void mk_checksums(const byte *buf);
@@ -205,14 +295,22 @@ private:
void draw_mouse();
void undraw_mouse();
+ void internUpdateScreen();
+
void load_gfx_mode();
void unload_gfx_mode();
void hotswap_gfx_mode();
+ void setFullscreenMode(bool enable);
+
void get_screen_image(byte *buf);
void setup_icon();
void kbd_mouse();
-
- static OSystem_GP32 *create();
+ //static OSystem_GP32 *create();
};
+
+#else
+ #warning GP32.H Called more then once.
+#endif /* GP32_H */
+