Mercurial > sdl-ios-xcode
view src/video/xbios/SDL_xbios_centscreen.h @ 3899:081aecdb0911 SDL-1.2
From: Gabriel Gambetta
To: SDL Mailing List <sdl@libsdl.org>
Date: Fri, 17 Nov 2006 00:39:29 -0200
Subject: [SDL] Alpha blending bug - fixed?
It turns out mm5 never got the correct value. This failed :
[...]
"movd %1, %%mm5\n\t"
: : "m" (amask), "m" (sf->Ashift) );
mm5 got 0xFF000018 instead of 0x00000018. However I did this :
Uint32 ashift = sf->Ashift;
[...]
"movd %1, %%mm5\n\t"
: : "m" (amask), "m" (ashift) );
and everything worked fine.
The only thing I could find out was that ashift is 32-bit aligned but
sf->Ashift isn't:
printf("ashift %8X [%d]\n", &ashift, (int)(&ashift) % 4);
printf("sf->Ashift %8X [%d]\n", &sf->Ashift, (int)(&sf->Ashift) % 4);
ashift at BFF0E0C4 [0]
sf->Ashift at 08AFB9CD [1]
Could this be the problem? If it is, the fix is extremely trivial.
Should I submit a patch?
--Gabriel
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Tue, 21 Nov 2006 23:17:00 +0000 |
parents | d910939febfa |
children | 782fd950bd46 c121d94672cb a1b03ba2fcd0 |
line wrap: on
line source
/* 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" /* Centscreen extension definitions Patrice Mandin */ #ifndef _SDL_xbios_centscreen_h #define _SDL_xbios_centscreen_h #include <mint/falcon.h> /* 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 ---*/ int SDL_XBIOS_CentscreenInit(_THIS); void SDL_XBIOS_CentscreenSetmode(_THIS, int width, int height, int planes); void SDL_XBIOS_CentscreenRestore(_THIS, int prev_handle); #endif /* _SDL_xbios_centscreen_h */