146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    SDL - Simple DirectMedia Layer
346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Copyright (C) 1997-2006 Sam Lantinga
446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is free software; you can redistribute it and/or
646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    modify it under the terms of the GNU Lesser General Public
746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License as published by the Free Software Foundation; either
846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    version 2.1 of the License, or (at your option) any later version.
946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is distributed in the hope that it will be useful,
1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    but WITHOUT ANY WARRANTY; without even the implied warranty of
1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Lesser General Public License for more details.
1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    You should have received a copy of the GNU Lesser General Public
1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License along with this library; if not, write to the Free Software
1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Sam Lantinga
2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    slouken@libsdl.org
2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h"
2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef _SDL_xbios_h
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define _SDL_xbios_h
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_stdinc.h"
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_sysvideo.h"
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Hidden "this" pointer for the video functions */
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define _THIS	SDL_VideoDevice *this
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* TT video modes:	2
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   Falcon RVB:		16 (could be *2 by adding PAL/NTSC modes)
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   Falcon VGA:		6
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner   ST low:		1
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_NUMMODES 16
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnertypedef struct
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 number;		/* Video mode number */
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 width;		/* Size */
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 height;
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 depth;		/* bits per plane */
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool doubleline;	/* Double the lines ? */
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} xbiosmode_t;
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Private display data */
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define NUM_MODELISTS	2		/* 8 and 16 bits-per-pixel */
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct SDL_PrivateVideoData {
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	long cookie_vdo;
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int old_video_mode;				/* Old video mode before entering SDL */
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *old_video_base;			/* Old pointer to screen buffer */
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *old_palette;				/* Old palette */
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint32 old_num_colors;			/* Nb of colors in saved palette */
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int num_modes;					/* Number of xbios video modes */
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	xbiosmode_t	*mode_list;			/* List of xbios video modes */
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *screens[2];		/* Pointers to aligned screen buffer */
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *screensmem[2];	/* Pointers to screen buffer */
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	void *shadowscreen;		/* Shadow screen for c2p conversion */
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int doubleline;			/* Double line mode ? */
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int frame_number;		/* Number of frame for double buffer */
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int pitch;				/* Destination line width for C2P */
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	int width, height;		/* Screen size for centered C2P */
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_bool centscreen;	/* Centscreen extension present ? */
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	SDL_Rect *SDL_modelist[NUM_MODELISTS][SDL_NUMMODES+1];
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	xbiosmode_t *videomodes[NUM_MODELISTS][SDL_NUMMODES+1];
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* _VDO cookie values */
7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerenum {
7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDO_ST=0,
7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDO_STE,
7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDO_TT,
8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	VDO_F30
8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Monitor types */
8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerenum {
8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MONITOR_MONO=0,
8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MONITOR_TV,
8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MONITOR_VGA,
8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	MONITOR_RGB
8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* EgetShift masks */
9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ES_BANK		0x000f
9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ES_MODE		0x0700
9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ES_GRAY		0x1000
9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ES_SMEAR	0x8000
9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* TT shifter modes */
9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ST_LOW	0x0000
9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ST_MED	0x0100
10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define ST_HIGH	0x0200
10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define TT_LOW	0x0700
10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define TT_MED	0x0300
10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define TT_HIGH	0x0600
10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Hidden structure -> variables names */
10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define SDL_modelist		(this->hidden->SDL_modelist)
10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_mutex		    (this->hidden->mutex)
10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_cvdo		    (this->hidden->cookie_vdo)
10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_oldpalette	(this->hidden->old_palette)
11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_oldnumcol		(this->hidden->old_num_colors)
11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_oldvbase		(this->hidden->old_video_base)
11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_oldvmode		(this->hidden->old_video_mode)
11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_nummodes		(this->hidden->num_modes)
11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_modelist		(this->hidden->mode_list)
11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_screens		(this->hidden->screens)
11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_screensmem	(this->hidden->screensmem)
11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_shadowscreen	(this->hidden->shadowscreen)
11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_videomodes	(this->hidden->videomodes)
11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_doubleline	(this->hidden->doubleline)
12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_fbnum			(this->hidden->frame_number)
12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_pitch			(this->hidden->pitch)
12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_width			(this->hidden->width)
12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_height		(this->hidden->height)
12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define XBIOS_centscreen	(this->hidden->centscreen)
12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*--- Functions prototypes ---*/
12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid SDL_XBIOS_AddMode(_THIS, Uint16 modecode, Uint16 width, Uint16 height,
12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	Uint16 depth, SDL_bool flags);
13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* _SDL_xbios_h */
132