From 8d5f0f546f58b54182d3f80562019b7ff69990b2 Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Wed, 18 May 2005 17:02:17 +0000 Subject: [PATCH] Add Falcon Centscreen extension support --- README.MiNT | 3 +- src/video/xbios/Makefile.am | 2 + src/video/xbios/SDL_xbios.c | 6 +- src/video/xbios/SDL_xbios_centscreen.c | 53 ++++++++++++ src/video/xbios/SDL_xbios_centscreen.h | 115 +++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 3 deletions(-) create mode 100644 src/video/xbios/SDL_xbios_centscreen.c create mode 100644 src/video/xbios/SDL_xbios_centscreen.h diff --git a/README.MiNT b/README.MiNT index 5608c79d4..65fac3920 100644 --- a/README.MiNT +++ b/README.MiNT @@ -156,7 +156,8 @@ Xbios video: 320x480x8 and 320x240x8 (software double-lined mode). Falcon: All modes supported by the current monitor (RVB or VGA). - BlowUp extended modes, ScreenBlaster 3 current mode. + BlowUp extended modes, ScreenBlaster 3 current mode, Centscreen current + mode. Clones and any machine with monochrome monitor: Not supported. diff --git a/src/video/xbios/Makefile.am b/src/video/xbios/Makefile.am index 52008773e..b5b0185a0 100644 --- a/src/video/xbios/Makefile.am +++ b/src/video/xbios/Makefile.am @@ -10,5 +10,7 @@ XBIOS_SRCS = \ SDL_xbios.h \ SDL_xbios_blowup.c \ SDL_xbios_blowup.h \ + SDL_xbios_centscreen.c \ + SDL_xbios_centscreen.h \ SDL_xbios_sb3.c \ SDL_xbios_sb3.h diff --git a/src/video/xbios/SDL_xbios.c b/src/video/xbios/SDL_xbios.c index f21acc9f4..e49181a36 100644 --- a/src/video/xbios/SDL_xbios.c +++ b/src/video/xbios/SDL_xbios.c @@ -56,6 +56,7 @@ static char rcsid = #include "SDL_atarigl_c.h" #include "SDL_xbios.h" #include "SDL_xbios_blowup.h" +#include "SDL_xbios_centscreen.h" #include "SDL_xbios_sb3.h" #define XBIOS_VID_DRIVER_NAME "xbios" @@ -261,7 +262,7 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) { int i,j8,j16; xbiosmode_t *current_mode; - unsigned long cookie_blow, cookie_scpn; + unsigned long cookie_blow, cookie_scpn, cookie_cnts; /* Initialize all variables that we clean on shutdown */ memset (SDL_modelist, 0, sizeof(SDL_modelist)); @@ -415,8 +416,9 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) SDL_XBIOS_BlowupInit(this, (blow_cookie_t *)cookie_blow); } else if (Getcookie(C_SCPN, &cookie_scpn) == C_FOUND) { SDL_XBIOS_SB3Init(this, (scpn_cookie_t *)cookie_scpn); + } else if (Getcookie(C_CNTS, &cookie_cnts) == C_FOUND) { + SDL_XBIOS_CentscreenInit(this); } - break; } diff --git a/src/video/xbios/SDL_xbios_centscreen.c b/src/video/xbios/SDL_xbios_centscreen.c new file mode 100644 index 000000000..db4790325 --- /dev/null +++ b/src/video/xbios/SDL_xbios_centscreen.c @@ -0,0 +1,53 @@ +/* + 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 +*/ + +/* + Centscreen extension definitions + + Patrice Mandin +*/ + +#include + +#include + +#include "SDL_xbios.h" +#include "SDL_xbios_centscreen.h" + +void SDL_XBIOS_CentscreenInit(_THIS) +{ + centscreen_mode_t curmode; + + /* Reset current mode list */ + if (XBIOS_modelist) { + free(XBIOS_modelist); + XBIOS_nummodes = 0; + XBIOS_modelist = NULL; + } + + /* Add current active mode */ + Vread(&curmode); + + SDL_XBIOS_AddMode(this, -1, curmode.physx, curmode.physy, curmode.plan, + SDL_FALSE + ); +} diff --git a/src/video/xbios/SDL_xbios_centscreen.h b/src/video/xbios/SDL_xbios_centscreen.h new file mode 100644 index 000000000..9011e6aff --- /dev/null +++ b/src/video/xbios/SDL_xbios_centscreen.h @@ -0,0 +1,115 @@ +/* + 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 +*/ + +/* + Centscreen extension definitions + + Patrice Mandin +*/ + +#ifndef _SDL_xbios_centscreen_h +#define _SDL_xbios_centscreen_h + +#include /* for trap_14_xxx macros */ + +#include "SDL_xbios.h" + +/*--- Defines ---*/ + +#ifndef C_CNTS +#define C_CNTS 0x434e5453L +#endif + +#define CSCREEN_ENERGYSTAR (1<<9) +#define CSCREEN_SAVER (1<<10) +#define CSCREEN_VIRTUAL (1<<11) +#define CSCREEN_EXTCLOCK_CT2 (1<<12) +#define CSCREEN_EXTCLOCK (1<<13) +#define CSCREEN_STANDARD (1<<14) +#define CSCREEN_DEFAULT (1<<15) + +/*--- Structures ---*/ + +typedef struct { + unsigned short handle; /* videomode handle */ + unsigned short mode; /* Falcon videomode code */ + unsigned short physx; /* visible width */ + unsigned short physy; /* visible height */ + unsigned short plan; /* bitplanes */ + unsigned short logx; /* virtual width */ + unsigned short logy; /* virtual height */ + unsigned short eco; /* screen saver delay */ + unsigned short eco2; /* energy star screen saver delay */ + unsigned short wsize; /* screen width (mm) */ + unsigned short hsize; /* screen height (mm) */ + unsigned short dummy[21]; + unsigned char name[32]; /* videomode name */ +} __attribute__((packed)) centscreen_mode_t; + +/*--- Functions prototypes ---*/ + +#define Vread(current_mode) \ + (void)trap_14_wl((short)0x41,(long)(current_mode)) +#define Vwrite(init_vdi, inparam, outparam) \ + (long)trap_14_wwll((short)0x42,(short)(init_vdi),(long)(inparam),(long)(outparam)) +#define Vattrib(inparam, outparam) \ + (void)trap_14_wll((short)0x43,(long)(inparam),(long)(outparam)) +#define Vcreate(inparam, outparam) \ + (void)trap_14_wll((short)0x44,(long)(inparam),(long)(outparam)) +#define Vdelete(handle) \ + (long)trap_14_ww((short)0x45,(short)(handle)) +#define Vfirst(mask,mode) \ + (long)trap_14_wll((short)0x46,(long)(mask),(long)(mode)) +#define Vnext(mask,mode) \ + (long)trap_14_wll((short)0x47,(long)(mask),(long)(mode)) +#define Vvalid(handle) \ + (long)trap_14_ww((short)0x48,(short)(handle)) +#define Vload() \ + (long)trap_14_w((short)0x49) +#define Vsave() \ + (long)trap_14_w((short)0x4a) +#define Vopen() \ + (long)trap_14_w((short)0x4b) +#define Vclose() \ + (long)trap_14_w((short)0x4c) +#define Vscroll(scrollmode) \ + (long)trap_14_ww((short)0x4d,(short)(scrollmode)) +#define Voffset() \ + (long)trap_14_w((short)0x4e) +#define Vseek() \ + (long)trap_14_w((short)0x4f) +#define Vlock(cmd) \ + (long)trap_14_ww((short)0x50,(short)(cmd)) +#define SetMon(montype) \ + (long)trap_14_ww((short)0x51,(short)(montype)) +#define MultiMon(cmd) \ + (long)trap_14_ww((short)0x52,(short)(cmd)) +#define VSizeComp() \ + (long)trap_14_w((short)0x53) +#define Vsize(mode) \ + (long)trap_14_wl((short)0x54,(long)(mode)) + +/*--- Functions prototypes ---*/ + +void SDL_XBIOS_CentscreenInit(_THIS); + +#endif /* _SDL_xbios_centscreen_h */