diff options
Diffstat (limited to 'backends/platform/wii')
| -rw-r--r-- | backends/platform/wii/Makefile | 99 | ||||
| -rw-r--r-- | backends/platform/wii/gx_supp.cpp | 47 | ||||
| -rw-r--r-- | backends/platform/wii/gx_supp.h | 7 | ||||
| -rw-r--r-- | backends/platform/wii/main.cpp | 4 | ||||
| -rw-r--r-- | backends/platform/wii/osystem.cpp | 34 | ||||
| -rw-r--r-- | backends/platform/wii/osystem.h | 7 | ||||
| -rw-r--r-- | backends/platform/wii/osystem_gfx.cpp | 75 | 
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() {  | 
