mirror of
https://github.com/yawut/SDL.git
synced 2026-08-02 08:28:28 -05:00
Preliminary support for Blowup and Screen Blaster 3 extensions on Atari Falcon 030
This commit is contained in:
parent
54d5471cf7
commit
4de6d491f3
|
|
@ -7,4 +7,8 @@ libvideo_xbios_la_SOURCES = $(XBIOS_SRCS)
|
|||
# The SDL XBIOS video driver sources
|
||||
XBIOS_SRCS = \
|
||||
SDL_xbios.c \
|
||||
SDL_xbios.h
|
||||
SDL_xbios.h \
|
||||
SDL_xbios_blowup.c \
|
||||
SDL_xbios_blowup.h \
|
||||
SDL_xbios_sb3.c \
|
||||
SDL_xbios_sb3.h
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ static char rcsid =
|
|||
#include "SDL_atarimxalloc_c.h"
|
||||
#include "SDL_atarigl_c.h"
|
||||
#include "SDL_xbios.h"
|
||||
#include "SDL_xbios_blowup.h"
|
||||
#include "SDL_xbios_sb3.h"
|
||||
|
||||
#define XBIOS_VID_DRIVER_NAME "xbios"
|
||||
|
||||
|
|
@ -138,7 +140,7 @@ static unsigned long F30_palette[256];
|
|||
|
||||
static int XBIOS_Available(void)
|
||||
{
|
||||
unsigned long cookie_vdo, cookie_mil, cookie_hade;
|
||||
unsigned long cookie_vdo, cookie_mil, cookie_hade, cookie_scpn;
|
||||
|
||||
/* Milan/Hades Atari clones do not have an Atari video chip */
|
||||
if ( (Getcookie(C__MIL, &cookie_mil) == C_FOUND) ||
|
||||
|
|
@ -165,6 +167,11 @@ static int XBIOS_Available(void)
|
|||
case VDO_F30:
|
||||
if ( Montype() == MONITOR_MONO)
|
||||
return 0;
|
||||
if (Getcookie(C_SCPN, &cookie_scpn) == C_FOUND) {
|
||||
if (!SDL_XBIOS_SB3Usable((scpn_cookie_t *)cookie_scpn)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
|
|
@ -242,6 +249,7 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
|
|||
{
|
||||
int i,j8,j16;
|
||||
xbiosmode_t *current_mode;
|
||||
unsigned long cookie_blow, cookie_scpn;
|
||||
|
||||
/* Initialize all variables that we clean on shutdown */
|
||||
memset (SDL_modelist, 0, sizeof(SDL_modelist));
|
||||
|
|
@ -369,6 +377,13 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
|
|||
current_mode++;
|
||||
}
|
||||
|
||||
/* Initialize BlowUp or SB3 stuff if present */
|
||||
if (Getcookie(C_BLOW, &cookie_blow) == C_FOUND) {
|
||||
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);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
93
src/video/xbios/SDL_xbios_blowup.c
Normal file
93
src/video/xbios/SDL_xbios_blowup.c
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
/*
|
||||
Blowup extension definitions
|
||||
|
||||
Patrice Mandin
|
||||
*/
|
||||
|
||||
#include "SDL_xbios.h"
|
||||
#include "SDL_xbios_blowup.h"
|
||||
|
||||
void SDL_XBIOS_BlowupInit(_THIS, blow_cookie_t *cookie_blow)
|
||||
{
|
||||
int i, num_mode, bank, keep_old;
|
||||
xbiosmode_t *current_mode;
|
||||
blow_mode_t *blow_mode;
|
||||
|
||||
current_mode = XBIOS_modelist;
|
||||
for (i=0;i<XBIOS_nummodes;i++) {
|
||||
keep_old=1; /* use default mode */
|
||||
blow_mode = NULL;
|
||||
switch (current_mode->depth) {
|
||||
case 1:
|
||||
num_mode=0;
|
||||
break;
|
||||
case 2:
|
||||
num_mode=1;
|
||||
break;
|
||||
case 4:
|
||||
num_mode=2;
|
||||
break;
|
||||
case 8:
|
||||
num_mode=3;
|
||||
break;
|
||||
case 16:
|
||||
num_mode=4;
|
||||
break;
|
||||
default:
|
||||
num_mode=-1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check which bank of modes to use */
|
||||
if (num_mode>=0) {
|
||||
bank = cookie_blow->num_mode[num_mode];
|
||||
blow_mode = &(cookie_blow->blowup_modes[num_mode+(bank*5)]);
|
||||
|
||||
/* Check extended mode enabled */
|
||||
if (blow_mode->enabled == 0) {
|
||||
/* Check monitor needed for this mode */
|
||||
if ((blow_mode->monitor == cookie_blow->montype)
|
||||
|| ((blow_mode->monitor == MONITOR_TV)
|
||||
&& (cookie_blow->montype == MONITOR_RGB))
|
||||
|| ((blow_mode->monitor == MONITOR_RGB)
|
||||
&& (cookie_blow->montype == MONITOR_TV)))
|
||||
{
|
||||
keep_old = 0; /* we can use this extended mode */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (keep_old) {
|
||||
/* disable blowup for this mode */
|
||||
current_mode->number |= (1<<15);
|
||||
} else {
|
||||
/* Update mode size */
|
||||
current_mode->width = blow_mode->width +1;
|
||||
current_mode->height = blow_mode->height +1;
|
||||
}
|
||||
|
||||
current_mode++;
|
||||
}
|
||||
}
|
||||
85
src/video/xbios/SDL_xbios_blowup.h
Normal file
85
src/video/xbios/SDL_xbios_blowup.h
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
/*
|
||||
Blowup extension definitions
|
||||
|
||||
Patrice Mandin
|
||||
*/
|
||||
|
||||
#ifndef _SDL_xbios_blowup_h
|
||||
#define _SDL_xbios_blowup_h
|
||||
|
||||
#include "SDL_xbios.h"
|
||||
|
||||
/*--- Types ---*/
|
||||
|
||||
typedef struct {
|
||||
/* 64 bytes */
|
||||
unsigned short enabled; /* Extended mode enabled ? 0=yes, <>0=no */
|
||||
unsigned short dummy10[6];
|
||||
unsigned short registers_0E; /* value for register 0xffff820e */
|
||||
unsigned short registers_10; /* value for register 0xffff8210 */
|
||||
unsigned short dummy11[23];
|
||||
|
||||
/* 64 bytes */
|
||||
unsigned short width; /* width-1 */
|
||||
unsigned short height; /* height-1 */
|
||||
unsigned short dummy20;
|
||||
unsigned long screensize; /* screensize in bytes */
|
||||
unsigned short dummy21[8];
|
||||
unsigned short virtual; /* Virtual screen ? */
|
||||
unsigned short virwidth; /* Virtual screen width */
|
||||
unsigned short virheight; /* Virtual screen height */
|
||||
|
||||
unsigned short dummy22;
|
||||
unsigned short monitor; /* Monitor defined for this mode */
|
||||
unsigned short extension; /* Extended mode defined ? 0=yes, 1=no */
|
||||
unsigned short dummy23[13];
|
||||
|
||||
/* 64 bytes */
|
||||
unsigned short dummy30;
|
||||
unsigned short registers_82[6]; /* values for registers 0xffff8282-8c */
|
||||
unsigned short dummy31[9];
|
||||
|
||||
unsigned short dummy32;
|
||||
unsigned short registers_A2[6]; /* values for registers 0xffff82a2-ac */
|
||||
unsigned short dummy33[9];
|
||||
|
||||
/* 64 bytes */
|
||||
unsigned short registers_C0; /* value for register 0xffff82c0 */
|
||||
unsigned short registers_C2; /* value for register 0xffff82c2 */
|
||||
unsigned short dummy40[30];
|
||||
} __attribute__((packed)) blow_mode_t;
|
||||
|
||||
typedef struct {
|
||||
blow_mode_t blowup_modes[10];
|
||||
unsigned char num_mode[6];
|
||||
unsigned long dummy;
|
||||
unsigned short montype;
|
||||
} __attribute__((packed)) blow_cookie_t;
|
||||
|
||||
/*--- Functions prototypes ---*/
|
||||
|
||||
void SDL_XBIOS_BlowupInit(_THIS, blow_cookie_t *cookie_blow);
|
||||
|
||||
#endif /* _SDL_xbios_blowup_h */
|
||||
80
src/video/xbios/SDL_xbios_sb3.c
Normal file
80
src/video/xbios/SDL_xbios_sb3.c
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
/*
|
||||
ScreenBlaster 3 functions
|
||||
|
||||
Patrice Mandin
|
||||
*/
|
||||
|
||||
/*--- Includes ---*/
|
||||
|
||||
#include "SDL_xbios.h"
|
||||
#include "SDL_xbios_sb3.h"
|
||||
|
||||
/*--- Defines ---*/
|
||||
|
||||
const int SDL_XBIOS_scpn_planes_device[]={
|
||||
SCPN_DEV_1BPP,
|
||||
SCPN_DEV_4BPP,
|
||||
SCPN_DEV_8BPP,
|
||||
SCPN_DEV_16BPP,
|
||||
SCPN_DEV_2BPP,
|
||||
SCPN_DEV_4BPP,
|
||||
SCPN_DEV_1BPP
|
||||
};
|
||||
|
||||
/*--- Functions ---*/
|
||||
|
||||
int SDL_XBIOS_SB3Usable(scpn_cookie_t *cookie_scpn)
|
||||
{
|
||||
scpn_screeninfo_t *scrinfo;
|
||||
int bpp;
|
||||
|
||||
/* Check if current SB3 mode is usable, i.e. 8 or 16bpp */
|
||||
scrinfo = cookie_scpn->screen_info;
|
||||
bpp = 1<<(SDL_XBIOS_scpn_planes_device[scrinfo->device]);
|
||||
|
||||
if ((bpp==8) || (bpp==16)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SDL_XBIOS_SB3Init(_THIS, scpn_cookie_t *cookie_scpn)
|
||||
{
|
||||
xbiosmode_t *current_mode;
|
||||
scpn_screeninfo_t *scrinfo;
|
||||
|
||||
/* SB3 prevent changing video modes, we can only use current one */
|
||||
|
||||
XBIOS_nummodes = 1;
|
||||
current_mode = XBIOS_modelist;
|
||||
current_mode->number = -1;
|
||||
|
||||
scrinfo = cookie_scpn->screen_info;
|
||||
current_mode->width = scrinfo->virtual_width;
|
||||
current_mode->height = scrinfo->virtual_height;
|
||||
current_mode->depth = 1<<(SDL_XBIOS_scpn_planes_device[scrinfo->device]);
|
||||
scrinfo->h_pos = scrinfo->v_pos = 0;
|
||||
}
|
||||
81
src/video/xbios/SDL_xbios_sb3.h
Normal file
81
src/video/xbios/SDL_xbios_sb3.h
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
/*
|
||||
ScreenBlaster 3 definitions
|
||||
|
||||
Patrice Mandin
|
||||
*/
|
||||
|
||||
#ifndef _SDL_xbios_sb3_h_
|
||||
#define _SDL_xbios_sb3_h_
|
||||
|
||||
/*--- Defines ---*/
|
||||
|
||||
#ifndef C_SCPN
|
||||
#define C_SCPN 0x5343504EL
|
||||
#endif
|
||||
|
||||
#define SCPN_DEV_1BPP 0
|
||||
#define SCPN_DEV_2BPP 1
|
||||
#define SCPN_DEV_4BPP 2
|
||||
#define SCPN_DEV_8BPP 3
|
||||
#define SCPN_DEV_16BPP 4
|
||||
|
||||
extern const int SDL_XBIOS_scpn_planes_device[];
|
||||
|
||||
/*--- Types ---*/
|
||||
|
||||
typedef struct {
|
||||
unsigned short virtual_width; /* Virtual screen width */
|
||||
unsigned short virtual_height; /* Virtual screen height */
|
||||
unsigned short visible_width; /* Visible width */
|
||||
unsigned short visible_height; /* Visible height */
|
||||
unsigned short h_pos; /* Horizontal position in virtual screen */
|
||||
unsigned short v_pos; /* Vertical position in virtual screen */
|
||||
unsigned short dummy;
|
||||
unsigned long size; /* Size of screen in bytes */
|
||||
unsigned short device; /* Device number to find planes = getRez() */
|
||||
/* = Index in scpn_planes_device[] */
|
||||
} __attribute__((packed)) scpn_screeninfo_t;
|
||||
|
||||
typedef struct {
|
||||
unsigned long magic; /* just a BRA assembler jump */
|
||||
unsigned short version;
|
||||
void *dummy1;
|
||||
unsigned short ptsout0_1;
|
||||
unsigned short ptsout0_2;
|
||||
unsigned short dummy3;
|
||||
unsigned char date[8]; /* Date of program build */
|
||||
unsigned char asm_string[30]; /* 10 times the 'ASM' string */
|
||||
unsigned short dummy4;
|
||||
scpn_screeninfo_t *screen_info;
|
||||
unsigned short dummy6;
|
||||
} __attribute__((packed)) scpn_cookie_t;
|
||||
|
||||
/*--- Function prototypes ---*/
|
||||
|
||||
int SDL_XBIOS_SB3Usable(scpn_cookie_t *cookie_scpn);
|
||||
|
||||
void SDL_XBIOS_SB3Init(_THIS, scpn_cookie_t *cookie_scpn);
|
||||
|
||||
#endif /* _SDL_xbios_sb3_h_ */
|
||||
Loading…
Reference in New Issue
Block a user