Index: backends/sdl/events.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/events.cpp,v
retrieving revision 1.9
diff -u -r1.9 events.cpp
--- backends/sdl/events.cpp	15 Oct 2004 22:28:12 -0000	1.9
+++ backends/sdl/events.cpp	25 Oct 2004 17:36:59 -0000
@@ -68,8 +68,10 @@
 	km.y = y;
 
 	// Adjust for the screen scaling
-	event.mouse.x /= _scaleFactor;
-	event.mouse.y /= _scaleFactor;
+	event.mouse.x *= _scaleFactor_hdiv;
+	event.mouse.x /= _scaleFactor_hmul;
+	event.mouse.y *= _scaleFactor_vdiv;
+	event.mouse.y /= _scaleFactor_vmul;
 
 	// Optionally perform aspect ratio adjusting
 	if (_adjustAspectRatio)
@@ -265,7 +267,7 @@
 
 
 				int newMode = -1;
-				int factor = _scaleFactor - 1;
+				int factor = _scaleFactor_hmul / _scaleFactor_hdiv - 1;
 				
 				// Increase/decrease the scale factor
 				if (ev.key.keysym.sym == SDLK_EQUALS || ev.key.keysym.sym == SDLK_PLUS || ev.key.keysym.sym == SDLK_MINUS ||
Index: backends/sdl/graphics.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/graphics.cpp,v
retrieving revision 1.15
diff -u -r1.15 graphics.cpp
--- backends/sdl/graphics.cpp	15 Oct 2004 22:28:12 -0000	1.15
+++ backends/sdl/graphics.cpp	25 Oct 2004 17:37:02 -0000
@@ -38,6 +38,7 @@
 	{"hq3x", "HQ3x", GFX_HQ3X},
 	{"tv2x", "TV2x", GFX_TV2X},
 	{"dotmatrix", "DotMatrix", GFX_DOTMATRIX},
+	{"ratio800", "Ratio800", GFX_RATIO800},
 	{0, 0, 0}
 };
 
@@ -52,58 +53,75 @@
 bool OSystem_SDL::setGraphicsMode(int mode) {
 	Common::StackLock lock(_graphicsMutex);
 
-	int newScaleFactor = 1;
-	ScalerProc *newScalerProc;
-
 	switch(mode) {
 	case GFX_NORMAL:
-		newScaleFactor = 1;
-		newScalerProc = Normal1x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 1;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = Normal1x;
 		break;
 	case GFX_DOUBLESIZE:
-		newScaleFactor = 2;
-		newScalerProc = Normal2x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = Normal2x;
 		break;
 	case GFX_TRIPLESIZE:
-		newScaleFactor = 3;
-		newScalerProc = Normal3x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 3;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = Normal3x;
 		break;
 
 	case GFX_2XSAI:
-		newScaleFactor = 2;
-		newScalerProc = _2xSaI;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = _2xSaI;
 		break;
 	case GFX_SUPER2XSAI:
-		newScaleFactor = 2;
-		newScalerProc = Super2xSaI;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = Super2xSaI;
 		break;
 	case GFX_SUPEREAGLE:
-		newScaleFactor = 2;
-		newScalerProc = SuperEagle;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = SuperEagle;
 		break;
 	case GFX_ADVMAME2X:
-		newScaleFactor = 2;
-		newScalerProc = AdvMame2x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = AdvMame2x;
 		break;
 	case GFX_ADVMAME3X:
-		newScaleFactor = 3;
-		newScalerProc = AdvMame3x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 3;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = AdvMame3x;
 		break;
 	case GFX_HQ2X:
-		newScaleFactor = 2;
-		newScalerProc = HQ2x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = HQ2x;
 		break;
 	case GFX_HQ3X:
-		newScaleFactor = 3;
-		newScalerProc = HQ3x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 3;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = HQ3x;
 		break;
 	case GFX_TV2X:
-		newScaleFactor = 2;
-		newScalerProc = TV2x;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = TV2x;
 		break;
 	case GFX_DOTMATRIX:
-		newScaleFactor = 2;
-		newScalerProc = DotMatrix;
+		_scaleFactor_hmul = _scaleFactor_vmul = 2;
+		_scaleFactor_hdiv = _scaleFactor_vdiv = 1;
+		_scalerProc = DotMatrix;
+		break;
+
+	case GFX_RATIO800:
+		_scaleFactor_hmul = 5;
+		_scaleFactor_hdiv = 2;
+		_scaleFactor_vmul = 3;
+		_scaleFactor_vdiv = 1;
+		_scalerProc = Ratio800;
 		break;
 
 	default:
@@ -112,11 +130,7 @@
 	}
 
 	_mode = mode;
-	_scalerProc = newScalerProc;
-	if (newScaleFactor != _scaleFactor) {
-		_scaleFactor = newScaleFactor;
-		hotswap_gfx_mode();
-	}
+	hotswap_gfx_mode();
 
 	// Determine the "scaler type", i.e. essentially an index into the
 	// s_gfxModeSwitchTable array defined in events.cpp.
@@ -185,7 +199,7 @@
 	// Create the surface that contains the scaled graphics in 16 bit mode
 	//
 
-	_hwscreen = SDL_SetVideoMode(_screenWidth * _scaleFactor, effectiveScreenHeight(), 16, 
+	_hwscreen = SDL_SetVideoMode(_screenWidth * _scaleFactor_hmul / _scaleFactor_hdiv, effectiveScreenHeight(), 16, 
 		_full_screen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE
 	);
 	if (_hwscreen == NULL) {
@@ -247,7 +261,7 @@
 #endif
 
 	// keyboard cursor control, some other better place for it?
-	km.x_max = _screenWidth * _scaleFactor - 1;
+	km.x_max = _screenWidth * _scaleFactor_hmul / _scaleFactor_hdiv - 1;
 	km.y_max = effectiveScreenHeight() - 1;
 	km.delay_time = 25;
 	km.last_time = 0;
@@ -326,7 +340,9 @@
 
 	// If the shake position changed, fill the dirty area with blackness
 	if (_currentShakePos != _newShakePos) {
-		SDL_Rect blackrect = {0, 0, _screenWidth * _scaleFactor, _newShakePos * _scaleFactor};
+		SDL_Rect blackrect = {0, 0,
+		    _screenWidth * _scaleFactor_hmul / _scaleFactor_hdiv,
+		    _newShakePos * _scaleFactor_vmul / _scaleFactor_vdiv};
 
 		if (_adjustAspectRatio)
 			blackrect.h = real2Aspect(blackrect.h - 1) + 1;
@@ -432,7 +448,8 @@
 					if (dst_h > _screenHeight - dst_y)
 						dst_h = _screenHeight - dst_y;
 
-					dst_y *= _scaleFactor;
+					dst_y *= _scaleFactor_vmul;
+					dst_y /= _scaleFactor_vdiv;
 
 					if (_adjustAspectRatio) {
 						orig_dst_y = dst_y;
@@ -440,15 +457,18 @@
 					}
 
 					_scalerProc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch,
-						(byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
+						(byte *)_hwscreen->pixels + 2 * (r->x * _scaleFactor_hmul / _scaleFactor_hdiv) +
+						dst_y * dstPitch, dstPitch, r->x, r->y, r->w, dst_h);
 				}
 
-				r->x *= _scaleFactor;
+				r->x *= _scaleFactor_hmul;
+				r->x /= _scaleFactor_hdiv;
 				r->y = dst_y;
-				r->w *= _scaleFactor;
-				r->h = dst_h * _scaleFactor;
+				r->w *= _scaleFactor_hmul;
+				r->w /= _scaleFactor_hdiv;
+				r->h = dst_h * _scaleFactor_vmul / _scaleFactor_vdiv;
 
-				if (_adjustAspectRatio && orig_dst_y / _scaleFactor < _screenHeight)
+				if (_adjustAspectRatio && orig_dst_y * _scaleFactor_vdiv / _scaleFactor_vmul < _screenHeight)
 					r->h = stretch200To240((uint8 *) _hwscreen->pixels, dstPitch, r->w, r->h, r->x, r->y, orig_dst_y);
 			}
 			SDL_UnlockSurface(_tmpscreen);
@@ -890,7 +910,7 @@
 
 void OSystem_SDL::warpMouse(int x, int y) {
 	if (_mouseCurState.x != x || _mouseCurState.y != y) {
-		SDL_WarpMouse(x * _scaleFactor, y * _scaleFactor);
+		SDL_WarpMouse(x * _scaleFactor_hmul / _scaleFactor_hdiv, y * _scaleFactor_vmul / _scaleFactor_vdiv);
 
 		// SDL_WarpMouse() generates a mouse movement event, so
 		// set_mouse_pos() would be called eventually. However, the
Index: backends/sdl/sdl-common.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/Attic/sdl-common.cpp,v
retrieving revision 1.102
diff -u -r1.102 sdl-common.cpp
--- backends/sdl/sdl-common.cpp	16 Dec 2003 12:04:47 -0000	1.102
+++ backends/sdl/sdl-common.cpp	25 Oct 2004 17:37:07 -0000
@@ -15,7 +15,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Header: /cvsroot/scummvm/scummvm/backends/sdl/Attic/sdl-common.cpp,v 1.102 2003/12/16 12:04:47 kirben Exp $
+ * $Header: /cvsroot/scummvm/scummvm/backends/sdl/sdl-common.cpp,v 1.102 2003/12/16 12:04:47 kirben Exp $
  *
  */
 
@@ -504,7 +504,8 @@
 
 void OSystem_SDL_Common::warp_mouse(int x, int y) {
 	if (_mouseCurState.x != x || _mouseCurState.y != y) {
-		SDL_WarpMouse(x * _scaleFactor, y * _scaleFactor);
+		SDL_WarpMouse(x * _scaleFactor_hmul / _scaleFactor_hdiv,
+			y * _scaleFactor_vmul / _scaleFactor_vdiv);
 
 		// SDL_WarpMouse() generates a mouse movement event, so
 		// set_mouse_pos() would be called eventually. However, the
@@ -570,8 +571,10 @@
 	km.y = event.mouse.y;
 
 	// Adjust for the screen scaling
-	event.mouse.x /= _scaleFactor;
-	event.mouse.y /= _scaleFactor;
+	event.mouse.x *= _scaleFactor_hdiv;
+	event.mouse.x /= _scaleFactor_hmul;
+	event.mouse.y *= _scaleFactor_vdiv;
+	event.mouse.y /= _scaleFactor_vmul;
 
 	// Optionally perform aspect ratio adjusting
 	if (_adjustAspectRatio)
@@ -680,7 +683,7 @@
 				
 
 				Property prop;
-				int factor = _scaleFactor - 1;
+				int factor = _scaleFactor_hmul / _scaleFactor_hdiv - 1;
 
 				// Ctrl-Alt-a toggles aspect ratio correction
 				if (ev.key.keysym.sym == 'a') {
@@ -948,8 +951,10 @@
 			}
 			event->mouse.x = km.x;
 			event->mouse.y = km.y;
-			event->mouse.x /= _scaleFactor;
-			event->mouse.y /= _scaleFactor;
+			event->mouse.x *= _scaleFactor_hdiv;
+			event->mouse.x /= _scaleFactor_hmul;
+			event->mouse.y *= _scaleFactor_vdiv;
+			event->mouse.y /= _scaleFactor_vmul;
 
 			if (_adjustAspectRatio)
 				event->mouse.y = aspect2Real(event->mouse.y);
Index: backends/sdl/sdl-common.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/sdl-common.h,v
retrieving revision 1.65
diff -u -r1.65 sdl-common.h
--- backends/sdl/sdl-common.h	15 Oct 2004 22:28:12 -0000	1.65
+++ backends/sdl/sdl-common.h	25 Oct 2004 17:37:09 -0000
@@ -192,10 +192,13 @@
	bool _forceFull; // Force full redraw on next updateScreen
 	ScalerProc *_scalerProc;
 	int _scalerType;
-	int _scaleFactor;
+	int _scaleFactor_hmul;
+	int _scaleFactor_hdiv;
+	int _scaleFactor_vmul;
+	int _scaleFactor_vdiv;
 	int _mode;
 	bool _full_screen;
 	uint32 _mode_flags;
@@ -281,7 +284,7 @@
 
 	bool save_screenshot(const char *filename);
 	
-	int effectiveScreenHeight() { return (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor; }
+	int effectiveScreenHeight() { return (_adjustAspectRatio ? 240 : _screenHeight) * _scaleFactor_vmul / _scaleFactor_vdiv; }
 
 	void setup_icon();
 	void kbd_mouse();
Index: backends/sdl/sdl.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/sdl/sdl.cpp,v
retrieving revision 1.74
diff -u -r1.74 sdl.cpp
--- backends/sdl/sdl.cpp	15 Oct 2004 22:28:12 -0000	1.74
+++ backends/sdl/sdl.cpp	25 Oct 2004 17:37:09 -0000
@@ -64,13 +64,15 @@
 	cksum_valid = false;
 #ifndef _WIN32_WCE
 	_mode = GFX_DOUBLESIZE;
-	_scaleFactor = 2;
+	_scaleFactor_hmul = 2;
+	_scaleFactor_hdiv = 1;
 	_scalerProc = Normal2x;
 	_full_screen = ConfMan.getBool("fullscreen");
 	_adjustAspectRatio = ConfMan.getBool("aspect_ratio");
 #else
 	_mode = GFX_NORMAL;
-	_scaleFactor = 1;
+	_scaleFactor_hmul = 1;
+	_scaleFactor_hdiv = 1;
 	_scalerProc = Normal1x;
 	_full_screen = true;
 	_adjustAspectRatio = false;
Index: common/gameDetector.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/Attic/gameDetector.cpp,v
retrieving revision 1.115
diff -u -r1.115 gameDetector.cpp
--- common/gameDetector.cpp	22 Jun 2003 14:18:33 -0000	1.115
+++ common/gameDetector.cpp	25 Oct 2004 17:37:15 -0000
@@ -16,7 +16,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Header: /cvsroot/scummvm/scummvm/common/Attic/gameDetector.cpp,v 1.115 2003/06/22 14:18:33 kirben Exp $
+ * $Header: /cvsroot/scummvm/scummvm/common/gameDetector.cpp,v 1.115 2003/06/22 14:18:33 kirben Exp $
  *
  */
 
@@ -53,7 +53,7 @@
 	"\t-p<path>       - look for game in <path>\n"
 	"\t-x[<num>]      - load this savegame (default: 0 - autosave)\n"
 	"\t-f             - fullscreen mode\n"
-	"\t-g<mode>       - graphics mode (normal,2x,3x,2xsai,super2xsai,supereagle,advmame2x,advmame3x,tv2x,dotmatrix)\n"
+	"\t-g<mode>       - graphics mode (normal,2x,3x,2xsai,super2xsai,supereagle,advmame2x,advmame3x,tv2x,dotmatrix,ratio800)\n"
 	"\t-e<mode>       - set music engine (see README for details)\n"
 	"\t-a             - specify game is amiga version\n"
 	"\t-q<lang>       - specify language (en,de,fr,it,pt,es,jp,zh,kr,hb)\n"
@@ -102,6 +102,7 @@
 	{"tv2x", "TV2x", GFX_TV2X},
 	{"dotmatrix", "DotMatrix", GFX_DOTMATRIX},
 	{"opengl", "OpenGL", GFX_BILINEAR},
+	{"ratio800", "Ratio800", GFX_RATIO800},
 #else
 	{"flipping", "Page Flipping", GFX_FLIPPING},
 	{"dbuffer", "Double Buffer", GFX_DOUBLEBUFFER},
Index: common/scaler.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/scaler.cpp,v
retrieving revision 1.63
diff -u -r1.63 scaler.cpp
--- common/scaler.cpp	10 Aug 2004 17:46:04 -0000	1.63
+++ common/scaler.cpp	25 Oct 2004 17:37:17 -0000
@@ -108,7 +108,7 @@
  * source to the destionation.
  */
 void Normal1x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-							int width, int height) {
+					int x, int y, int width, int height) {
 	while (height--) {
 		memcpy(dstPtr, srcPtr, 2 * width);
 		srcPtr += srcPitch;
@@ -120,7 +120,7 @@
  * Trivial nearest-neighbour 2x scaler.
  */
 void Normal2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-							int width, int height) {
+					int x, int y, int width, int height) {
 	uint8 *r;
 
 	assert(((int)dstPtr & 3) == 0);
@@ -143,7 +143,7 @@
  * Trivial nearest-neighbour 3x scaler.
  */
 void Normal3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-							int width, int height) {
+					int x, int y, int width, int height) {
 	uint8 *r;
 	const uint32 dstPitch2 = dstPitch * 2;
 	const uint32 dstPitch3 = dstPitch * 3;
@@ -174,7 +174,7 @@
  * See also http://scale2x.sourceforge.net
  */
 void AdvMame2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-							 int width, int height) {
+							 int x, int y, int width, int height) {
 	scale(2, dstPtr, dstPitch, srcPtr - srcPitch, srcPitch, 2, width, height);
 }
 
@@ -183,7 +183,7 @@
  * See also http://scale2x.sourceforge.net
  */
 void AdvMame3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-							 int width, int height) {
+							 int x, int y, int width, int height) {
 	scale(3, dstPtr, dstPitch, srcPtr - srcPitch, srcPitch, 2, width, height);
 }
 
@@ -226,7 +226,8 @@
 // exercise for the reader.)
 
 void DotMatrix(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch,
-					int width, int height) {
+					int x, int y, int width, int height)
+{
 	const uint32 nextlineSrc = srcPitch / sizeof(uint16);
 	const uint16 *p = (const uint16 *)srcPtr;
 
@@ -245,3 +246,76 @@
 		q += nextlineDst << 1;
 	}
 }
+
+#define INTERPOLATE	INTERPOLATE<565>
+#define Q_INTERPOLATE	Q_INTERPOLATE<565>
+
+
+void Ratio800(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, 
+					int x, int y, int width, int height)
+{
+	unsigned int nextlineSrc = srcPitch / sizeof(uint16);
+	const uint16 *p = (const uint16 *)srcPtr;
+
+	unsigned int nextlineDst = dstPitch / sizeof(uint16);
+	uint16 *q0 = (uint16 *)dstPtr;
+	uint16 *q1, *q2, *q3;
+
+	int i, j;
+	uint16 va, vb, vc, vd, ve, vf, vg, vh;
+	uint16 vbc;
+
+	if(x & 1) {
+		width++;
+		x--;
+		p--;
+		q0 -= 2;
+	}
+	if(width & 1)
+		width++;
+	for(i = 0; i < height; i++) {
+		q1 = q0;
+		q2 = q1 + nextlineDst;
+		q3 = q2 + nextlineDst;
+		vc = p[-1];
+		vd = p[0];
+
+		for(j = 0; j < width; j += 2) {
+			ve = p[-nextlineSrc];
+			vg = p[nextlineSrc];
+			va = vc;
+			vb = vd;
+			p++;
+			vf = p[-nextlineSrc];
+			vh = p[nextlineSrc];
+			vc = *p;
+			p++;
+			vd = *p;
+			/*
+			     E F
+			   A B C D
+			     G H
+			 */
+
+			vbc = INTERPOLATE(vb, vc);
+
+			*(q1++) = Q_INTERPOLATE(va, ve, vb, vb);
+			*(q1++) = Q_INTERPOLATE(ve, vb, vb, vb);
+			*(q1++) = Q_INTERPOLATE(INTERPOLATE(ve, vf), vbc, vbc, vbc);
+			*(q1++) = Q_INTERPOLATE(vf, vc, vc, vc);
+			*(q1++) = Q_INTERPOLATE(vd, vf, vc, vc);
+			*(q2++) = Q_INTERPOLATE(va, vb, vb, vb);
+			*(q2++) = vb;
+			*(q2++) = vbc;
+			*(q2++) = vc;
+			*(q2++) = Q_INTERPOLATE(vd, vc, vc, vc);
+			*(q3++) = Q_INTERPOLATE(va, vg, vb, vb);
+			*(q3++) = Q_INTERPOLATE(vg, vb, vb, vb);
+			*(q3++) = Q_INTERPOLATE(INTERPOLATE(vg, vh), vbc, vbc, vbc);
+			*(q3++) = Q_INTERPOLATE(vh, vc, vc, vc);
+			*(q3++) = Q_INTERPOLATE(vd, vh, vc, vc);
+		}
+		p += nextlineSrc - width;
+		q0 += nextlineDst * 3;
+	}
+}
Index: common/scaler.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/scaler.h,v
retrieving revision 1.26
diff -u -r1.26 scaler.h
--- common/scaler.h	21 May 2004 20:43:07 -0000	1.26
+++ common/scaler.h	25 Oct 2004 17:37:17 -0000
@@ -27,11 +27,11 @@
 extern void InitScalers(uint32 BitFormat);
 
 typedef void ScalerProc(const uint8 *srcPtr, uint32 srcPitch,
-							uint8 *dstPtr, uint32 dstPitch, int width, int height);
+							uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height);
 
 #define DECLARE_SCALER(x)	\
 	extern void x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, \
-					uint32 dstPitch, int width, int height)
+					uint32 dstPitch, int x, int y, int width, int height)
 
 DECLARE_SCALER(_2xSaI);
 DECLARE_SCALER(Super2xSaI);
@@ -45,6 +45,7 @@
 DECLARE_SCALER(DotMatrix);
 DECLARE_SCALER(HQ2x);
 DECLARE_SCALER(HQ3x);
+DECLARE_SCALER(Ratio800);
 
 FORCEINLINE int real2Aspect(int y) {
 	return y + (y + 1) / 5;
@@ -70,7 +71,8 @@
 	GFX_HQ2X = 8,
 	GFX_HQ3X = 9,
 	GFX_TV2X = 10,
-	GFX_DOTMATRIX = 11
+	GFX_DOTMATRIX = 11,
+	GFX_RATIO800 = 12
 };
 
 
Index: common/scaler/hq2x.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/scaler/hq2x.cpp,v
retrieving revision 1.12
diff -u -r1.12 hq2x.cpp
--- common/scaler/hq2x.cpp	21 May 2004 17:30:51 -0000	1.12
+++ common/scaler/hq2x.cpp	25 Oct 2004 17:37:18 -0000
@@ -35,7 +35,7 @@
 
 }
 
-void HQ2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+void HQ2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height) {
 	hq2x_16(srcPtr, dstPtr, width, height, srcPitch, dstPitch);
 }
 
@@ -139,7 +139,7 @@
 	#undef bitFormat
 #endif
 
-void HQ2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+void HQ2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height) {
 #ifdef HAS_ALTIVEC
 	if (isAltiVecAvailable()) {
 		if (gBitFormat == 565)
Index: common/scaler/hq3x.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/scaler/hq3x.cpp,v
retrieving revision 1.10
diff -u -r1.10 hq3x.cpp
--- common/scaler/hq3x.cpp	21 May 2004 17:30:51 -0000	1.10
+++ common/scaler/hq3x.cpp	25 Oct 2004 17:37:19 -0000
@@ -35,7 +35,7 @@
 
 }
 
-void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height) {
 	hq3x_16(srcPtr, dstPtr, width, height, srcPitch, dstPitch);
 }
 
@@ -141,7 +141,7 @@
 	#undef bitFormat
 #endif
 
-void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) {
+void HQ3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height) {
 #ifdef HAS_ALTIVEC
 	if (isAltiVecAvailable()) {
 		if (gBitFormat == 565)
Index: common/scaler/intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/scaler/intern.h,v
retrieving revision 1.12
diff -u -r1.12 intern.h
--- common/scaler/intern.h	21 May 2004 02:08:47 -0000	1.12
+++ common/scaler/intern.h	25 Oct 2004 17:37:20 -0000
@@ -157,7 +157,7 @@
 
 /** Auxiliary macro to simplify creating those template function wrappers. */
 #define MAKE_WRAPPER(FUNC) \
-	void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { \
+	void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int x, int y, int width, int height) { \
 		if (gBitFormat == 565) \
 			FUNC ## Template<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \
 		else \
