atari:xbios: Move all TT specific stuff to specific backend file. SDL-1.2
authorPatrice Mandin <patmandin@gmail.com>
Wed, 30 Jul 2014 13:30:09 +0200
branchSDL-1.2
changeset 9029 533ad1d44120
parent 9028 50e0a2f1333d
child 9035 23be72ff017a
atari:xbios: Move all TT specific stuff to specific backend file.
src/video/xbios/SDL_xbios.c
src/video/xbios/SDL_xbios.h
src/video/xbios/SDL_xbios_tt.c
--- a/src/video/xbios/SDL_xbios.c	Wed Jul 30 13:02:00 2014 +0200
+++ b/src/video/xbios/SDL_xbios.c	Wed Jul 30 13:30:09 2014 +0200
@@ -92,11 +92,6 @@
 
 /* Default list of video modes */
 
-static const xbiosmode_t ttmodes[2]={
-	{TT_LOW,320,480,8, XBIOSMODE_C2P},
-	{TT_LOW,320,240,8, XBIOSMODE_C2P|XBIOSMODE_DOUBLELINE}
-};
-
 static const xbiosmode_t falconrgbmodes[16]={
 	{BPS16|COL80|OVERSCAN|VERTFLAG,768,480,16,0},
 	{BPS16|COL80|OVERSCAN,768,240,16,0},
@@ -254,6 +249,8 @@
 			/* Already done as default */
 			break;
 		case VDO_TT:
+			SDL_XBIOS_VideoInit_TT(device);
+			break;
 		case VDO_F30:
 			device->SetColors = XBIOS_SetColors;
 			break;
@@ -327,15 +324,6 @@
 	}
 }
 
-static void XBIOS_ListTTModes(_THIS, int actually_add)
-{
-	int i;
-
-	for (i=0; i<2; i++) {
-		SDL_XBIOS_AddMode(this, actually_add, &ttmodes[i]);
-	}
-}
-
 static void XBIOS_ListFalconRgbModes(_THIS, int actually_add)
 {
 	int i;
@@ -410,29 +398,8 @@
 			(*XBIOS_listModes)(this, 0);
 			break;
 		case VDO_TT:
-			XBIOS_oldvmode=EgetShift();
-
-			switch(XBIOS_oldvmode & ES_MODE) {
-				case TT_LOW:
-					XBIOS_oldnumcol=256;
-					break;
-				case ST_LOW:
-				case TT_MED:
-					XBIOS_oldnumcol=16;
-					break;
-				case ST_MED:
-					XBIOS_oldnumcol=4;
-					break;
-				case ST_HIGH:
-				case TT_HIGH:
-					XBIOS_oldnumcol=2;
-					break;
-			}
-			if (XBIOS_oldnumcol) {
-				EgetPalette(0, XBIOS_oldnumcol, XBIOS_oldpalette);
-			}
-
-			XBIOS_ListTTModes(this, 0);
+			(*XBIOS_saveMode)(this, vformat);
+			(*XBIOS_listModes)(this, 0);
 			break;
 		case VDO_F30:
 			XBIOS_oldvmode=VsetMode(-1);
@@ -523,7 +490,7 @@
 			(*XBIOS_listModes)(this, 1);
 			break;
 		case VDO_TT:
-			XBIOS_ListTTModes(this, 1);
+			(*XBIOS_listModes)(this, 1);
 			break;
 		case VDO_F30:
 			/* ScreenBlaster 3 ? */
@@ -725,7 +692,7 @@
 			(*XBIOS_setMode)(this, new_video_mode);
 			break;
 		case VDO_TT:
-			EsetShift(new_video_mode->number);
+			(*XBIOS_setMode)(this, new_video_mode);
 			break;
 		case VDO_F30:
 			if (XBIOS_centscreen) {
@@ -878,17 +845,6 @@
 	int		r,v,b;
 
 	switch( XBIOS_cvdo >> 16) {
-		case VDO_TT:
-			for(i = 0; i < ncolors; i++)
-			{
-				r = colors[i].r;	
-				v = colors[i].g;
-				b = colors[i].b;
-					
-				TT_palette[i]=((r>>4)<<8)|((v>>4)<<4)|(b>>4);
-			}
-			EsetPalette(firstcolor,ncolors,TT_palette);
-			break;
 		case VDO_F30:
 			for(i = 0; i < ncolors; i++)
 			{
@@ -923,11 +879,7 @@
 			(*XBIOS_restoreMode)(this);
 			break;
 		case VDO_TT:
-			Setscreen(-1,XBIOS_oldvbase,-1);
-			EsetShift(XBIOS_oldvmode);
-			if (XBIOS_oldnumcol) {
-				EsetPalette(0, XBIOS_oldnumcol, XBIOS_oldpalette);
-			}
+			(*XBIOS_restoreMode)(this);
 			break;
 		case VDO_F30:
 			Setscreen(-1, XBIOS_oldvbase, -1);
--- a/src/video/xbios/SDL_xbios.h	Wed Jul 30 13:02:00 2014 +0200
+++ b/src/video/xbios/SDL_xbios.h	Wed Jul 30 13:30:09 2014 +0200
@@ -135,6 +135,9 @@
 /* SDL_xbios_st.c */
 void SDL_XBIOS_VideoInit_ST(_THIS, unsigned long cookie_cvdo);
 
+/* SDL_xbios_tt.c */
+void SDL_XBIOS_VideoInit_TT(_THIS);
+
 /* SDL_xbios_milan.c */
 void SDL_XBIOS_VideoInit_Milan(_THIS);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/xbios/SDL_xbios_tt.c	Wed Jul 30 13:30:09 2014 +0200
@@ -0,0 +1,125 @@
+/*
+    SDL - Simple DirectMedia Layer
+    Copyright (C) 1997-2012 Sam Lantinga
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library 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
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+#include "SDL_config.h"
+
+/*
+	TT Xbios video functions
+
+	Patrice Mandin
+*/
+
+#include <mint/cookie.h>
+#include <mint/osbind.h>
+
+#include "../SDL_sysvideo.h"
+
+#include "SDL_xbios.h"
+
+static const xbiosmode_t ttmodes[]={
+	{TT_LOW,320,480,8, XBIOSMODE_C2P},
+	{TT_LOW,320,240,8, XBIOSMODE_C2P|XBIOSMODE_DOUBLELINE}
+};
+
+static void listModes(_THIS, int actually_add);
+static void saveMode(_THIS, SDL_PixelFormat *vformat);
+static void setMode(_THIS, xbiosmode_t *new_video_mode);
+static void restoreMode(_THIS);
+static int setColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors);
+
+void SDL_XBIOS_VideoInit_TT(_THIS)
+{
+	XBIOS_listModes = listModes;
+	XBIOS_saveMode = saveMode;
+	XBIOS_setMode = setMode;
+	XBIOS_restoreMode = restoreMode;
+
+	this->SetColors = setColors;
+}
+
+static void listModes(_THIS, int actually_add)
+{
+	int i;
+
+	for (i=0; i<sizeof(ttmodes)/sizeof(xbiosmode_t); i++) {
+		SDL_XBIOS_AddMode(this, actually_add, &ttmodes[i]);
+	}
+}
+
+static void saveMode(_THIS, SDL_PixelFormat *vformat)
+{
+	XBIOS_oldvbase=Physbase();
+	XBIOS_oldvmode=EgetShift();
+
+	switch(XBIOS_oldvmode & ES_MODE) {
+		case TT_LOW:
+			XBIOS_oldnumcol=256;
+			break;
+		case ST_LOW:
+		case TT_MED:
+			XBIOS_oldnumcol=16;
+			break;
+		case ST_MED:
+			XBIOS_oldnumcol=4;
+			break;
+		case ST_HIGH:
+		case TT_HIGH:
+			XBIOS_oldnumcol=2;
+			break;
+	}
+
+	if (XBIOS_oldnumcol) {
+		EgetPalette(0, XBIOS_oldnumcol, XBIOS_oldpalette);
+	}
+}
+
+static void setMode(_THIS, xbiosmode_t *new_video_mode)
+{
+	Setscreen(-1,XBIOS_screens[0],-1);
+
+	EsetShift(new_video_mode->number);
+}
+
+static void restoreMode(_THIS)
+{
+	Setscreen(-1,XBIOS_oldvbase,-1);
+
+	EsetShift(XBIOS_oldvmode);
+	if (XBIOS_oldnumcol) {
+		EsetPalette(0, XBIOS_oldnumcol, XBIOS_oldpalette);
+	}
+}
+
+static int setColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
+{
+	int	i, r,g,b;
+
+	for(i = 0; i < ncolors; i++) {
+		r = colors[i].r;	
+		g = colors[i].g;
+		b = colors[i].b;
+					
+		TT_palette[i]=((r>>4)<<8)|((g>>4)<<4)|(b>>4);
+	}
+	EsetPalette(firstcolor,ncolors,TT_palette);
+
+	return(1);
+}