From 96fe8ef6eb2ca2b66cc77ff240af6473ae2e3811 Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Thu, 11 Jan 2007 20:33:13 +0000 Subject: [PATCH] Disable TurboVeille screensaver if present --- src/video/xbios/SDL_xbios.c | 11 +++++ src/video/xbios/SDL_xbios_tveille.c | 52 +++++++++++++++++++++ src/video/xbios/SDL_xbios_tveille.h | 70 +++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 src/video/xbios/SDL_xbios_tveille.c create mode 100644 src/video/xbios/SDL_xbios_tveille.h diff --git a/src/video/xbios/SDL_xbios.c b/src/video/xbios/SDL_xbios.c index a3b80dd2e..9cbb4a8ac 100644 --- a/src/video/xbios/SDL_xbios.c +++ b/src/video/xbios/SDL_xbios.c @@ -49,6 +49,7 @@ #include "SDL_xbios_blowup.h" #include "SDL_xbios_centscreen.h" #include "SDL_xbios_sb3.h" +#include "SDL_xbios_tveille.h" #define XBIOS_VID_DRIVER_NAME "xbios" @@ -464,6 +465,11 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) SDL_AtariGL_InitPointers(this); #endif + /* Disable screensavers */ + if (SDL_XBIOS_TveillePresent(this)) { + SDL_XBIOS_TveilleDisable(this); + } + /* We're done! */ return(0); } @@ -928,6 +934,11 @@ static void XBIOS_VideoQuit(_THIS) } this->screen->pixels = NULL; + + /* Restore screensavers */ + if (SDL_XBIOS_TveillePresent(this)) { + SDL_XBIOS_TveilleRestore(this); + } } #if SDL_VIDEO_OPENGL diff --git a/src/video/xbios/SDL_xbios_tveille.c b/src/video/xbios/SDL_xbios_tveille.c new file mode 100644 index 000000000..461ad390a --- /dev/null +++ b/src/video/xbios/SDL_xbios_tveille.c @@ -0,0 +1,52 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2004 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" + +/* + Turbo veille screensaver + + Patrice Mandin +*/ + +#include + +#include "SDL_xbios.h" +#include "SDL_xbios_tveille.h" + +static tveille_t *cookie_veil; +static int status; + +int SDL_XBIOS_TveillePresent(_THIS) +{ + return (Getcookie(C_VeiL, (unsigned long *)&cookie_veil) == C_FOUND); +} + +void SDL_XBIOS_TveilleDisable(_THIS) +{ + status = cookie_veil->enabled; + cookie_veil->enabled = 0xff; +} + +void SDL_XBIOS_TveilleRestore(_THIS) +{ + cookie_veil->enabled = status; +} diff --git a/src/video/xbios/SDL_xbios_tveille.h b/src/video/xbios/SDL_xbios_tveille.h new file mode 100644 index 000000000..6ae9005f7 --- /dev/null +++ b/src/video/xbios/SDL_xbios_tveille.h @@ -0,0 +1,70 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2004 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" + +/* + Turbo veille screensaver + + Patrice Mandin +*/ + +#ifndef _SDL_xbios_tveille_h +#define _SDL_xbios_tveille_h + +#include "SDL_xbios.h" + +/*--- Defines ---*/ + +#ifndef C_VeiL +#define C_VeiL 0x5665694CL +#endif + +/*--- Structures ---*/ + +typedef struct { + unsigned long version; + void (*prg_ptr)(); + void (*kbd_ptr)(); + void (*vbl_ptr)(); + unsigned long vbl_count; + void (*oldkbd_ptr)(); + unsigned long off_count; + unsigned long prg_size; + unsigned long dummy1[4]; + unsigned char dummy2; + unsigned char status; + unsigned short freq; + unsigned short dummy3; + unsigned char clear_first; + unsigned char enabled; /* 0=enabled, 0xff=disabled */ + unsigned char serial_redir; + unsigned char dummy4; + void (*oldserial_ptr)(); +} __attribute__((packed)) tveille_t; + +/*--- Functions prototypes ---*/ + +int SDL_XBIOS_TveillePresent(_THIS); +void SDL_XBIOS_TveilleDisable(_THIS); +void SDL_XBIOS_TveilleEnable(_THIS); + +#endif /* _SDL_xbios_tveille_h */