aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/wii
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/wii')
-rw-r--r--backends/platform/wii/Makefile99
-rw-r--r--backends/platform/wii/gx_supp.cpp47
-rw-r--r--backends/platform/wii/gx_supp.h7
-rw-r--r--backends/platform/wii/main.cpp4
-rw-r--r--backends/platform/wii/osystem.cpp34
-rw-r--r--backends/platform/wii/osystem.h7
-rw-r--r--backends/platform/wii/osystem_gfx.cpp75
7 files changed, 199 insertions, 74 deletions
diff --git a/backends/platform/wii/Makefile b/backends/platform/wii/Makefile
index a52ceb1774..90ebcccb66 100644
--- a/backends/platform/wii/Makefile
+++ b/backends/platform/wii/Makefile
@@ -1,26 +1,32 @@
+# this enables port specific debug messages and redirects stdout/err over
+# usbgecko in memcard slot b
DEBUG_WII = 1
-ENABLE_SCUMM = 1
-ENABLE_SCUMM_7_8 = 1
-ENABLE_HE = 1
-# ENABLE_AGI = 1
-ENABLE_AGOS = 1
-ENABLE_CINE = 1
-ENABLE_CRUISE = 1
-ENABLE_DRASCULA = 1
-ENABLE_GOB = 1
-ENABLE_IGOR = 1
-ENABLE_KYRA = 1
-ENABLE_LURE = 1
-ENABLE_M4 = 1
-ENABLE_MADE = 1
-ENABLE_PARALLACTION = 1
-ENABLE_QUEEN = 1
-ENABLE_SAGA = 1
-ENABLE_SKY = 1
-ENABLE_SWORD1 = 1
-ENABLE_SWORD2 = 1
-ENABLE_TOUCHE = 1
+# builds a gamecube version. cleanup object files before flipping this
+GAMECUBE = 0
+
+ENABLE_SCUMM = STATIC_PLUGIN
+ENABLE_SCUMM_7_8 = STATIC_PLUGIN
+ENABLE_HE = STATIC_PLUGIN
+# ENABLE_AGI = STATIC_PLUGIN
+ENABLE_AGOS = STATIC_PLUGIN
+ENABLE_CINE = STATIC_PLUGIN
+ENABLE_CRUISE = STATIC_PLUGIN
+ENABLE_DRASCULA = STATIC_PLUGIN
+ENABLE_GOB = STATIC_PLUGIN
+ENABLE_IGOR = STATIC_PLUGIN
+ENABLE_KYRA = STATIC_PLUGIN
+ENABLE_LURE = STATIC_PLUGIN
+ENABLE_M4 = STATIC_PLUGIN
+ENABLE_MADE = STATIC_PLUGIN
+ENABLE_PARALLACTION = STATIC_PLUGIN
+ENABLE_QUEEN = STATIC_PLUGIN
+ENABLE_SAGA = STATIC_PLUGIN
+ENABLE_SKY = STATIC_PLUGIN
+ENABLE_SWORD1 = STATIC_PLUGIN
+ENABLE_SWORD2 = STATIC_PLUGIN
+ENABLE_TINSEL = STATIC_PLUGIN
+ENABLE_TOUCHE = STATIC_PLUGIN
DISABLE_HQ_SCALERS = 1
DISABLE_SCALERS = 1
@@ -30,7 +36,11 @@ USE_MAD = 1
USE_TREMOR = 1
USE_FLAC = 1
USE_MPEG2 = 1
+ifeq ($(GAMECUBE),1)
+USE_MT32EMU = 0
+else
USE_MT32EMU = 1
+endif
srcdir = ../../..
VPATH = $(srcdir)
@@ -54,21 +64,28 @@ MKDIR = mkdir -p
RM = rm -f
CP = cp -f
+ifeq ($(GAMECUBE),1)
+TARGET = scummvm-gc
+MACHDEP = -DGEKKO -DGAMECUBE -mogc -mcpu=750 -meabi -mhard-float \
+ -ffunction-sections -fdata-sections -fmodulo-sched
+LIBDIR = $(DEVKITPRO)/libogc/lib/cube
+LIBS = -lstdc++ -lfat -logc -lm
+else
TARGET = scummvm-wii
-
MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float \
-ffunction-sections -fdata-sections -fmodulo-sched
+LIBDIR = $(DEVKITPRO)/libogc/lib/wii
+LIBS = -lstdc++ -lfat -lwiiuse -lbte -logc -lm
+endif
INCDIR = $(srcdir) . $(srcdir)/engines/ $(DEVKITPRO)/libogc/include
-LIBDIR = $(DEVKITPRO)/libogc/lib/wii
CXXFLAGS = -g -Os -Wall $(MACHDEP) -D__WII__ -Wno-multichar -Wno-long-long \
- -Wno-unknown-pragmas -Wno-reorder -fno-exceptions -fno-rtti
+ -Wno-unknown-pragmas -Wno-reorder -fno-exceptions -fno-rtti
CXXFLAGS += $(addprefix -I,$(INCDIR))
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(TARGET).elf.map
LDFLAGS += $(addprefix -L,$(LIBDIR))
-LIBS = -lstdc++ -lfat -lwiiuse -lbte -logc -lm
CXXFLAGS += -I$(DEVKITPRO)/3rd/wii/include
LDFLAGS += -L$(DEVKITPRO)/3rd/wii/lib
@@ -138,19 +155,27 @@ distclean-wii:
@-$(RM) dist
upload:
+ifeq ($(GAMECUBE),1)
+ $(DEVKITPPC)/bin/geckoupload $(TARGET).dol
+else
$(DEVKITPPC)/bin/wiiload $(TARGET).dol
+endif
dist:
- $(MKDIR) dist/apps/scummvm
- $(CP) $(TARGET).dol dist/apps/scummvm/boot.dol
- $(CP) $(DISTPATH)/meta.xml dist/apps/scummvm/
- $(CP) $(DISTPATH)/icon.png dist/apps/scummvm/
- $(CP) $(DISTPATH)/READMII dist/apps/scummvm/
- $(CP) $(srcdir)/AUTHORS dist/apps/scummvm/
- $(CP) $(srcdir)/COPYING dist/apps/scummvm/
- $(CP) $(srcdir)/COPYRIGHT dist/apps/scummvm/
- $(CP) $(srcdir)/NEWS dist/apps/scummvm/
- $(CP) $(srcdir)/README dist/apps/scummvm/
- $(CP) $(DIST_FILES_THEMES) dist/apps/scummvm/
- $(CP) $(DIST_FILES_ENGINEDATA) dist/apps/scummvm/
+ $(MKDIR) dist/scummvm
+ifeq ($(GAMECUBE),1)
+ $(CP) $(TARGET).dol dist/scummvm/
+else
+ $(CP) $(TARGET).dol dist/scummvm/boot.dol
+ $(CP) $(DISTPATH)/meta.xml dist/scummvm/
+ $(CP) $(DISTPATH)/icon.png dist/scummvm/
+endif
+ $(CP) $(DISTPATH)/READMII dist/scummvm/
+ $(CP) $(srcdir)/AUTHORS dist/scummvm/
+ $(CP) $(srcdir)/COPYING dist/scummvm/
+ $(CP) $(srcdir)/COPYRIGHT dist/scummvm/
+ $(CP) $(srcdir)/NEWS dist/scummvm/
+ $(CP) $(srcdir)/README dist/scummvm/
+ $(CP) $(DIST_FILES_THEMES) dist/scummvm/
+ $(CP) $(DIST_FILES_ENGINEDATA) dist/scummvm/
diff --git a/backends/platform/wii/gx_supp.cpp b/backends/platform/wii/gx_supp.cpp
index 4c7b8ed58a..436deddbb8 100644
--- a/backends/platform/wii/gx_supp.cpp
+++ b/backends/platform/wii/gx_supp.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
* Generic GX Support for Emulators
* softdev 2007
+* dhewg 2008
*
* 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
@@ -21,12 +22,13 @@
* These are pretty standard functions to setup and use GX scaling.
****************************************************************************/
-#include <gccore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
+#include "gx_supp.h"
+
#define DEFAULT_FIFO_SIZE (256 * 1024)
#define HASPECT 320
@@ -39,18 +41,19 @@ extern "C" {
/*** 2D ***/
static u32 whichfb;
static u32 *xfb[2];
-static GXRModeObj *vmode;
+GXRModeObj *vmode = NULL;
/*** 3D GX ***/
static u8 *gp_fifo;
/*** Texture memory ***/
-static u8 *texturemem;
+static u8 *texturemem = NULL;
static u32 texturesize;
-GXTexObj texobj;
+static GXTexObj texobj;
static Mtx view;
static u16 vwidth, vheight, oldvwidth, oldvheight;
+static float tex_xT = 0.0f, tex_yT = 0.0f;
/* New texture based scaler */
typedef struct tagcamera {
@@ -74,6 +77,10 @@ static camera cam = {
void GX_InitVideo() {
vmode = VIDEO_GetPreferredMode(NULL);
+
+ vmode->viWidth = 678;
+ vmode->viXOrigin = (VI_MAX_WIDTH_PAL - 678) / 2;
+
VIDEO_Configure(vmode);
xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer(vmode));
@@ -93,6 +100,15 @@ void GX_InitVideo() {
VIDEO_WaitVSync();
}
+void GX_SetTexTrans(float xT, float yT) {
+ tex_xT = xT;
+ tex_yT = yT;
+}
+
+void GX_SetCamPosZ(float f) {
+ cam.pos.z = f;
+}
+
/****************************************************************************
* Scaler Support Functions
****************************************************************************/
@@ -128,7 +144,7 @@ static void draw_square(Mtx v) {
Mtx mv;
guMtxIdentity(m);
- guMtxTransApply(m, m, 0, 0, -100);
+ guMtxTransApply(m, m, tex_xT, tex_yT, -100);
guMtxConcat(v, m, mv);
GX_LoadPosMtxImm(mv, GX_PNMTX0);
@@ -144,9 +160,9 @@ static void draw_square(Mtx v) {
* StartGX
****************************************************************************/
void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) {
+ static bool inited = false;
Mtx p;
-
- GX_AbortFrame();
+ GXColor gxbackground = { 0, 0, 0, 0xff };
/*** Set new aspect ***/
square[0] = square[9] = -haspect;
@@ -156,9 +172,20 @@ void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) {
/*** Allocate 32byte aligned texture memory ***/
texturesize = (width * height) * 2;
+
+ if (texturemem)
+ free(texturemem);
+
texturemem = (u8 *) memalign(32, texturesize);
+ memset(texturemem, 0, texturesize);
- GXColor gxbackground = { 0, 0, 0, 0xff };
+ /*** Setup for first call to scaler ***/
+ oldvwidth = oldvheight = -1;
+
+ if (inited)
+ return;
+
+ inited = true;
/*** Clear out FIFO area ***/
memset(gp_fifo, 0, DEFAULT_FIFO_SIZE);
@@ -184,12 +211,8 @@ void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect) {
guPerspective(p, 60, 1.33f, 10.0f, 1000.0f);
GX_LoadProjectionMtx(p, GX_PERSPECTIVE);
- memset(texturemem, 0, texturesize);
GX_Flush();
-
- /*** Setup for first call to scaler ***/
- vwidth = vheight = -1;
}
/****************************************************************************
diff --git a/backends/platform/wii/gx_supp.h b/backends/platform/wii/gx_supp.h
index 9393e93a26..108a94f0e7 100644
--- a/backends/platform/wii/gx_supp.h
+++ b/backends/platform/wii/gx_supp.h
@@ -1,6 +1,7 @@
/****************************************************************************
* Generic GX Scaler
* softdev 2007
+* dhewg 2008
*
* 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
@@ -23,11 +24,17 @@
#ifndef _WII_GX_SUPP_H_
#define _WII_GX_SUPP_H_
+#include <gccore.h>
+
#ifdef __cplusplus
extern "C" {
#endif
+extern GXRModeObj *vmode;
+
void GX_InitVideo();
+void GX_SetTexTrans(float xT, float yT);
+void GX_SetCamPosZ(float f);
void GX_Start(u16 width, u16 height, s16 haspect, s16 vaspect);
void GX_Render(u16 width, u16 height, u8 *buffer, u16 pitch);
diff --git a/backends/platform/wii/main.cpp b/backends/platform/wii/main.cpp
index 5753ecefe4..8bb1bff904 100644
--- a/backends/platform/wii/main.cpp
+++ b/backends/platform/wii/main.cpp
@@ -62,7 +62,9 @@ int main(int argc, char *argv[]) {
printf("startup\n");
SYS_SetResetCallback(reset_cb);
+#ifndef GAMECUBE
SYS_SetPowerCallback(power_cb);
+#endif
if (!fatInitDefault()) {
printf("fatInitDefault failed\n");
@@ -75,7 +77,7 @@ int main(int argc, char *argv[]) {
if (!strcmp(buf, "fat:/"))
chdir("/apps/scummvm");
- //fatEnableReadAhead(PI_DEFAULT, 32, 128);
+ fatEnableReadAhead(PI_DEFAULT, 32, 128);
}
g_system = new OSystem_Wii();
diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp
index 9e708345c5..505f93c820 100644
--- a/backends/platform/wii/osystem.cpp
+++ b/backends/platform/wii/osystem.cpp
@@ -19,8 +19,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include "osystem.h"
#include "backends/fs/wii/wii-fs-factory.h"
+#include "common/config-manager.h"
+
+#include "osystem.h"
#include <unistd.h>
@@ -51,7 +53,9 @@ OSystem_Wii::OSystem_Wii() :
_currentHeight(0),
_supportedGraphicsModes(NULL),
- _activeGraphicsMode(-1),
+ _activeGraphicsMode(0),
+
+ _fullscreen(false),
_mouseVisible(false),
_mouseX(0),
@@ -89,11 +93,17 @@ OSystem_Wii::~OSystem_Wii() {
void OSystem_Wii::initBackend() {
_startup_time = gettime();
+
+ char buf[MAXPATHLEN];
+ if (!getcwd(buf, MAXPATHLEN))
+ strcpy(buf, "/");
- _savefile = new DefaultSaveFileManager();
+ _savefile = new DefaultSaveFileManager(buf);
_mixer = new Audio::MixerImpl(this);
_timer = new DefaultTimerManager();
+ _fullscreen = ConfMan.getBool("fullscreen");
+
initGfx();
initSfx();
initEvents();
@@ -108,14 +118,28 @@ void OSystem_Wii::quit() {
}
bool OSystem_Wii::hasFeature(Feature f) {
- return f == kFeatureCursorHasPalette;
+ return (f == kFeatureFullscreenMode) ||
+ (f == kFeatureCursorHasPalette);
}
void OSystem_Wii::setFeatureState(Feature f, bool enable) {
+ switch (f) {
+ case kFeatureFullscreenMode:
+ _fullscreen = enable;
+ setGraphicsMode(_activeGraphicsMode);
+ break;
+ default:
+ break;
+ }
}
bool OSystem_Wii::getFeatureState(Feature f) {
- return false;
+ switch (f) {
+ case kFeatureFullscreenMode:
+ return _fullscreen;
+ default:
+ return false;
+ }
}
uint32 OSystem_Wii::getMillis() {
diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h
index 7fbc560b1a..94c0fa76b3 100644
--- a/backends/platform/wii/osystem.h
+++ b/backends/platform/wii/osystem.h
@@ -22,9 +22,9 @@
#ifndef _WII_OSYSTEM_H_
#define _WII_OSYSTEM_H_
-#include "common/system.h"
#include "base/main.h"
-
+#include "common/system.h"
+#include "common/fs.h"
#include "common/rect.h"
#include "common/events.h"
@@ -73,6 +73,8 @@ private:
OSystem::GraphicsMode *_supportedGraphicsModes;
s32 _activeGraphicsMode;
+ bool _fullscreen;
+
bool _mouseVisible;
s32 _mouseX, _mouseY;
u32 _mouseWidth, _mouseHeight;
@@ -110,7 +112,6 @@ public:
virtual bool getFeatureState(Feature f);
virtual const GraphicsMode *getSupportedGraphicsModes() const;
virtual int getDefaultGraphicsMode() const;
- bool setGraphicsMode(const char *name);
virtual bool setGraphicsMode(int mode);
virtual int getGraphicsMode() const;
virtual void initSize(uint width, uint height);
diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp
index 1e54233c93..faad41d5f0 100644
--- a/backends/platform/wii/osystem_gfx.cpp
+++ b/backends/platform/wii/osystem_gfx.cpp
@@ -27,7 +27,12 @@
#define MAX_FPS 30
enum GraphicModeID {
- GM_DEFAULT
+ GM_DEFAULT = 0,
+ GM_OVERSCAN1,
+ GM_OVERSCAN2,
+ GM_OVERSCAN3,
+ GM_OVERSCAN4,
+ GM_OVERSCAN5
};
void OSystem_Wii::initGfx() {
@@ -42,6 +47,11 @@ void OSystem_Wii::initGfx() {
_overlayWidth = 640;
_overlayHeight = 480;
+#ifndef GAMECUBE
+ if (CONF_GetAspectRatio() && _fullscreen)
+ _overlayHeight = 360;
+#endif
+
_overlaySize = _overlayWidth * _overlayHeight * 2;
_overlayPixels = (OverlayColor *) memalign(32, _overlaySize);
@@ -51,17 +61,32 @@ void OSystem_Wii::initGfx() {
_cursorPalette = (u16 *) memalign(32, 256 * 2);
memset(_cursorPalette, 0, 256 * 2);
- _supportedGraphicsModes = new OSystem::GraphicsMode[2];
- _supportedGraphicsModes[0].name = strdup("gx");
- _supportedGraphicsModes[0].description = strdup("wii hardware scaler");
+ _supportedGraphicsModes = new OSystem::GraphicsMode[7];
+ _supportedGraphicsModes[0].name = strdup("standard");
+ _supportedGraphicsModes[0].description = strdup("standard");
_supportedGraphicsModes[0].id = GM_DEFAULT;
- _supportedGraphicsModes[1].name = 0;
- _supportedGraphicsModes[1].description = 0;
- _supportedGraphicsModes[1].id = 0;
-
- _texture = (u16 *) memalign(32, _overlaySize);
-
- GX_Start(_overlayWidth, _overlayHeight, 320, 240);
+ _supportedGraphicsModes[1].name = strdup("overscan1");
+ _supportedGraphicsModes[1].description = strdup("overscan 1");
+ _supportedGraphicsModes[1].id = GM_OVERSCAN1;
+ _supportedGraphicsModes[2].name = strdup("overscan2");
+ _supportedGraphicsModes[2].description = strdup("overscan 2");
+ _supportedGraphicsModes[2].id = GM_OVERSCAN2;
+ _supportedGraphicsModes[3].name = strdup("overscan3");
+ _supportedGraphicsModes[3].description = strdup("overscan 3");
+ _supportedGraphicsModes[3].id = GM_OVERSCAN3;
+ _supportedGraphicsModes[4].name = strdup("overscan4");
+ _supportedGraphicsModes[4].description = strdup("overscan 4");
+ _supportedGraphicsModes[4].id = GM_OVERSCAN4;
+ _supportedGraphicsModes[5].name = strdup("overscan5");
+ _supportedGraphicsModes[5].description = strdup("overscan 5");
+ _supportedGraphicsModes[5].id = GM_OVERSCAN5;
+ _supportedGraphicsModes[6].name = 0;
+ _supportedGraphicsModes[6].description = 0;
+ _supportedGraphicsModes[6].id = 0;
+
+ _texture = (u16 *) memalign(32, 640 * 480 * 2);
+
+ setGraphicsMode(_activeGraphicsMode);
}
void OSystem_Wii::deinitGfx() {
@@ -111,13 +136,24 @@ int OSystem_Wii::getDefaultGraphicsMode() const {
return GM_DEFAULT;
}
-bool OSystem_Wii::setGraphicsMode(const char *mode) {
- setGraphicsMode(GM_DEFAULT);
+bool OSystem_Wii::setGraphicsMode(int mode) {
+ s16 xar, yar;
- return true;
-}
+ printf("setGraphicsMode %d\n", mode);
+
+ xar = vmode->viWidth / 2;
+ yar = vmode->xfbHeight / 2;
+
+#ifndef GAMECUBE
+ if (CONF_GetAspectRatio() && !_fullscreen)
+ xar /= 1.33f;
+#endif
+
+ GX_SetCamPosZ(400 - mode * 10);
+ GX_Start(640, 480, xar, yar);
+
+ _activeGraphicsMode = mode;
-bool OSystem_Wii::setGraphicsMode(int mode) {
return true;
}
@@ -129,6 +165,8 @@ void OSystem_Wii::initSize(uint width, uint height) {
if (_gameWidth != width || _gameHeight != height) {
printf("initSize %u %u\n", width, height);
+ assert((width <= 640) && (height <= 480));
+
_gameWidth = width;
_gameHeight = height;
@@ -136,12 +174,15 @@ void OSystem_Wii::initSize(uint width, uint height) {
free(_gamePixels);
_gamePixels = (u8 *) memalign(32, _gameWidth * _gameHeight);
+ memset(_gamePixels, 0, _gameWidth * _gameHeight);
if (!_overlayVisible) {
_currentWidth = _gameWidth;
_currentHeight = _gameHeight;
updateEventScreenResolution();
}
+
+ setGraphicsMode(_activeGraphicsMode);
}
}
@@ -320,6 +361,8 @@ void OSystem_Wii::unlockScreen() {
}
void OSystem_Wii::setShakePos(int shakeOffset) {
+ GX_SetTexTrans(0, (float) -shakeOffset * ((float) vmode->efbHeight /
+ (float) _currentHeight));
}
void OSystem_Wii::showOverlay() {