Home | History | Annotate | Download | only in xbios
      1 /*
      2     SDL - Simple DirectMedia Layer
      3     Copyright (C) 1997-2012 Sam Lantinga
      4 
      5     This library is free software; you can redistribute it and/or
      6     modify it under the terms of the GNU Library General Public
      7     License as published by the Free Software Foundation; either
      8     version 2 of the License, or (at your option) any later version.
      9 
     10     This library is distributed in the hope that it will be useful,
     11     but WITHOUT ANY WARRANTY; without even the implied warranty of
     12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13     Library General Public License for more details.
     14 
     15     You should have received a copy of the GNU Library General Public
     16     License along with this library; if not, write to the Free
     17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     18 
     19     Sam Lantinga
     20     slouken (at) libsdl.org
     21 */
     22 #include "SDL_config.h"
     23 
     24 /*
     25 	Centscreen extension definitions
     26 
     27 	Patrice Mandin
     28 */
     29 
     30 #include <mint/falcon.h>
     31 
     32 #include "SDL_xbios.h"
     33 #include "SDL_xbios_centscreen.h"
     34 
     35 int SDL_XBIOS_ListCentscreenModes(_THIS, int actually_add)
     36 {
     37 	centscreen_mode_t curmode, listedmode;
     38 	unsigned long result;
     39 	int cur_handle;	/* Current Centscreen mode handle */
     40 
     41 	/* Add Centscreen modes */
     42 	Vread(&curmode);
     43 	cur_handle = curmode.handle;
     44 	curmode.mode = curmode.physx = curmode.physy = curmode.plan =
     45 		curmode.logx = curmode.logy = -1;
     46 
     47 	result = Vfirst(&curmode, &listedmode);
     48 	if (result==0) {
     49 		while (result==0) {
     50 			/* Don't add modes with virtual screen */
     51 			if ((listedmode.mode & CSCREEN_VIRTUAL)==0) {
     52 				/* Don't add modes with bpp<8 */
     53 				if (listedmode.plan>=8) {
     54 					xbiosmode_t modeinfo;
     55 
     56 					modeinfo.number = listedmode.mode;
     57 					modeinfo.width = listedmode.physx;
     58 					modeinfo.height = listedmode.physy;
     59 					modeinfo.depth = listedmode.plan;
     60 					modeinfo.flags = (modeinfo.depth == 8 ? XBIOSMODE_C2P : 0);
     61 
     62 					SDL_XBIOS_AddMode(this, actually_add, &modeinfo);
     63 				}
     64 			}
     65 			SDL_memcpy(&curmode, &listedmode, sizeof(centscreen_mode_t));
     66 			curmode.mode = curmode.physx = curmode.physy = curmode.plan =
     67 				curmode.logx = curmode.logy = -1;
     68 			result = Vnext(&curmode, &listedmode);
     69 		}
     70 	} else {
     71 		fprintf(stderr, "No suitable Centscreen modes\n");
     72 	}
     73 
     74 	return cur_handle;
     75 }
     76 
     77 void SDL_XBIOS_CentscreenSetmode(_THIS, int width, int height, int planes)
     78 {
     79 	centscreen_mode_t newmode, curmode;
     80 
     81 	newmode.handle = newmode.mode = newmode.logx = newmode.logy = -1;
     82 	newmode.physx = width;
     83 	newmode.physy = height;
     84 	newmode.plan = planes;
     85 	Vwrite(0, &newmode, &curmode);
     86 
     87 #ifdef SDL_VIDEO_DISABLE_SCREENSAVER
     88 	/* Disable screensaver */
     89 	Vread(&newmode);
     90 	newmode.mode &= ~(CSCREEN_SAVER|CSCREEN_ENERGYSTAR);
     91 	Vwrite(0, &newmode, &curmode);
     92 #endif /* SDL_VIDEO_DISABLE_SCREENSAVER */
     93 }
     94 
     95 void SDL_XBIOS_CentscreenRestore(_THIS, int prev_handle)
     96 {
     97 	centscreen_mode_t newmode, curmode;
     98 
     99 	/* Restore old video mode */
    100 	newmode.handle = prev_handle;
    101 	newmode.mode = newmode.physx = newmode.physy = newmode.plan =
    102 		newmode.logx = newmode.logy = -1;
    103 	Vwrite(0, &newmode, &curmode);
    104 }
    105