aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/dc/dc.h
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/dc/dc.h')
-rw-r--r--backends/platform/dc/dc.h237
1 files changed, 237 insertions, 0 deletions
diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h
new file mode 100644
index 0000000000..aaf505bd64
--- /dev/null
+++ b/backends/platform/dc/dc.h
@@ -0,0 +1,237 @@
+/* ScummVM - Scumm Interpreter
+ * Dreamcast port
+ * Copyright (C) 2002-2004 Marcus Comstedt
+ *
+ * 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$
+ * $Id$
+ *
+ */
+
+#include <common/system.h>
+#include <ronin/soundcommon.h>
+
+#define NUM_BUFFERS 4
+#define SOUND_BUFFER_SHIFT 3
+
+class Interactive
+{
+ public:
+ virtual int key(int k, byte &shiftFlags) = 0;
+ virtual void mouse(int x, int y) = 0;
+};
+
+#include "softkbd.h"
+
+class OSystem_Dreamcast : public OSystem {
+
+ public:
+ OSystem_Dreamcast();
+
+
+ // Determine whether the backend supports the specified feature.
+ bool hasFeature(Feature f);
+
+ // En-/disable the specified feature.
+ void setFeatureState(Feature f, bool enable);
+
+ // Query the state of the specified feature.
+ bool getFeatureState(Feature f);
+
+ // Retrieve a list of all graphics modes supported by this backend.
+ const GraphicsMode *getSupportedGraphicsModes() const;
+
+ // Return the ID of the 'default' graphics mode.
+ int getDefaultGraphicsMode() const;
+
+ // Switch to the specified graphics mode.
+ bool setGraphicsMode(int mode);
+
+ // Determine which graphics mode is currently active.
+ int getGraphicsMode() const;
+
+ // Set colors of the palette
+ void setPalette(const byte *colors, uint start, uint num);
+ void grabPalette(byte *colors, uint start, uint num);
+
+ // Set the size of the video bitmap.
+ // Typically, 320x200
+ void initSize(uint w, uint h);
+ int16 getHeight() { return _screen_h; }
+ int16 getWidth() { return _screen_w; }
+
+ // 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);
+
+ // Copies the current screen contents to a new surface.
+ bool grabRawScreen(Graphics::Surface *surf);
+
+ // Clear the screen to black.
+ void clearScreen();
+
+ // Update the dirty areas of the screen
+ void updateScreen();
+
+ // Either show or hide the mouse cursor
+ bool showMouse(bool visible);
+
+ // Move ("warp") the mouse cursor to the specified position.
+ 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, int cursorTargetScale);
+
+ // Replace the specified range of cursor the palette with new colors.
+ void setCursorPalette(const byte *colors, uint start, uint num);
+
+ // Disable or enable cursor palette.
+ void disableCursorPalette(bool disable);
+
+ // Shaking is used in SCUMM. Set current shake position.
+ void setShakePos(int shake_pos);
+
+ // Get the number of milliseconds since the program was started.
+ uint32 getMillis();
+
+ // 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);
+
+ // Set function that generates samples
+ bool setSoundCallback(SoundProc proc, void *param);
+ void clearSoundCallback();
+
+ // Determine the output sample rate. Audio data provided by the sound
+ // callback will be played using this rate.
+ int getOutputSampleRate() const;
+
+ // Initialise the specified CD drive for audio playback.
+ bool openCD(int drive);
+
+ // Poll cdrom status
+ // Returns true if cd audio is playing
+ bool pollCD();
+
+ // Play cdrom audio track
+ void playCD(int track, int num_loops, int start_frame, int duration);
+
+ // Stop cdrom audio track
+ void stopCD();
+
+ // Update cdrom audio status
+ void updateCD();
+
+ // Quit
+ void quit();
+
+ // Overlay
+ int16 getOverlayHeight();
+ int16 getOverlayWidth();
+ int screenToOverlayX(int x);
+ int screenToOverlayY(int y);
+ int overlayToScreenX(int x);
+ int overlayToScreenY(int y);
+ void showOverlay();
+ void hideOverlay();
+ void clearOverlay();
+ void grabOverlay(int16 *buf, int pitch);
+ void copyRectToOverlay(const int16 *buf, int pitch, int x, int y, int w, int h);
+ OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b) { return ARGBToColor(255, r, g, b); }
+ void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) {
+ uint8 tmp; colorToARGB(color, tmp, r, g, b);
+ }
+ OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b) {
+ return ((a&0xf0)<<8)|((r&0xf0)<<4)|(g&0xf0)|(b>>4);
+ }
+ void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b) {
+ a = ((color>>8)&0xf0)|((color>>12)&0x0f);
+ r = ((color>>4)&0xf0)|((color>>8)&0x0f);
+ g = (color&0xf0)|((color>>4)&0x0f);
+ b = ((color<<4)&0xf0)|(color&0x0f);
+ }
+
+ // Add a callback timer
+ void setTimerCallback(TimerProc callback, int timer);
+
+ // Mutex handling
+ MutexRef createMutex();
+ void lockMutex(MutexRef mutex);
+ void unlockMutex(MutexRef mutex);
+ void deleteMutex(MutexRef mutex);
+
+ // Set a window caption or any other comparable status display to the
+ // given value.
+ void setWindowCaption(const char *caption);
+
+ // Savefile handling
+ Common::SaveFileManager *getSavefileManager();
+
+
+ // Extra SoftKbd support
+ void mouseToSoftKbd(int x, int y, int &rx, int &ry) const;
+
+
+ private:
+
+ SoftKeyboard _softkbd;
+
+ int _ms_cur_x, _ms_cur_y, _ms_cur_w, _ms_cur_h, _ms_old_x, _ms_old_y;
+ int _ms_hotspot_x, _ms_hotspot_y, _ms_visible, _devpoll;
+ int _current_shake_pos, _screen_w, _screen_h;
+ int _overlay_x, _overlay_y;
+ unsigned char *_ms_buf;
+ unsigned char _ms_keycolor;
+ SoundProc _sound_proc;
+ void *_sound_proc_param;
+ bool _overlay_visible, _overlay_dirty, _screen_dirty;
+ int _screen_buffer, _overlay_buffer, _mouse_buffer;
+ bool _aspect_stretch, _softkbd_on, _enable_cursor_palette;
+ float _overlay_fade, _xscale, _yscale, _top_offset;
+ int _softkbd_motion;
+
+ uint32 _timer_duration, _timer_next_expiry;
+ bool _timer_active;
+ int (*_timer_callback) (int);
+
+ unsigned char *screen;
+ unsigned short *mouse;
+ unsigned short *overlay;
+ void *screen_tx[NUM_BUFFERS];
+ void *mouse_tx[NUM_BUFFERS];
+ void *ovl_tx[NUM_BUFFERS];
+ unsigned short palette[256], cursor_palette[256];
+
+ int temp_sound_buffer[RING_BUFFER_SAMPLES>>SOUND_BUFFER_SHIFT];
+
+ void checkSound();
+
+ void drawMouse(int xdraw, int ydraw, int w, int h,
+ unsigned char *buf, bool visible);
+
+ void setScaling();
+};
+
+
+extern int handleInput(struct mapledev *pad,
+ int &mouse_x, int &mouse_y,
+ byte &shiftFlags, Interactive *inter = NULL);
+extern void initSound();
+extern bool selectGame(char *&, char *&, class Icon &);
+