X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fcli%2Fsdl-video.c;h=b805a8a76ce297421748aa7debafda0d597dd05c;hb=e7f5287861e2da956537a6db8abb26f9a26255f8;hp=f2d404c4745c6f5d076e3ace5b37ccd99aef4659;hpb=5232c20c0fa2c80964fe1d3f597c239bcf93d6fc;p=fceu.git diff --git a/drivers/cli/sdl-video.c b/drivers/cli/sdl-video.c index f2d404c..b805a8a 100644 --- a/drivers/cli/sdl-video.c +++ b/drivers/cli/sdl-video.c @@ -21,165 +21,24 @@ #include #include #include -#include -#include #include "sdl.h" #include "../common/vidblit.h" - -#ifdef GP2X -#include "minimal.h" - -char* fps_str=NULL; -#endif -extern int showfps; - -int stretch_offset=32; - -unsigned long framesRendered; -unsigned long fps; -unsigned long fps_samplecount=0; -unsigned long total_fps=-1; -unsigned long ticks; - -pthread_t gp2x_video_thread=0; -uint8 * XBufHelper=NULL; - - #define _sline srendline #define _eline erendline -#ifndef GP2X SDL_Surface *screen; -#endif static int tlines; static int inited=0; static int exs,eys,eefx; #define NWIDTH (256-((eoptions&EO_CLIPSIDES)?16:0)) -#define NOFFSET (eoptions&EO_CLIPSIDES?8:0) - - - -int paletterefresh; -#ifdef GP2X -static int screenSizeInBytes = 320 * 240; -#endif -#define FPS_COLOR 61 - +#define NOFFSET (32-8+(eoptions&EO_CLIPSIDES?8:0)) - - -static unsigned char fontdata8x8[] = -{ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x3C,0x42,0x99,0xBD,0xBD,0x99,0x42,0x3C,0x3C,0x42,0x81,0x81,0x81,0x81,0x42,0x3C, - 0xFE,0x82,0x8A,0xD2,0xA2,0x82,0xFE,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x64,0x74,0x7C,0x38,0x00,0x00, - 0x80,0xC0,0xF0,0xFC,0xF0,0xC0,0x80,0x00,0x01,0x03,0x0F,0x3F,0x0F,0x03,0x01,0x00, - 0x18,0x3C,0x7E,0x18,0x7E,0x3C,0x18,0x00,0xEE,0xEE,0xEE,0xCC,0x00,0xCC,0xCC,0x00, - 0x00,0x00,0x30,0x68,0x78,0x30,0x00,0x00,0x00,0x38,0x64,0x74,0x7C,0x38,0x00,0x00, - 0x3C,0x66,0x7A,0x7A,0x7E,0x7E,0x3C,0x00,0x0E,0x3E,0x3A,0x22,0x26,0x6E,0xE4,0x40, - 0x18,0x3C,0x7E,0x3C,0x3C,0x3C,0x3C,0x00,0x3C,0x3C,0x3C,0x3C,0x7E,0x3C,0x18,0x00, - 0x08,0x7C,0x7E,0x7E,0x7C,0x08,0x00,0x00,0x10,0x3E,0x7E,0x7E,0x3E,0x10,0x00,0x00, - 0x58,0x2A,0xDC,0xC8,0xDC,0x2A,0x58,0x00,0x24,0x66,0xFF,0xFF,0x66,0x24,0x00,0x00, - 0x00,0x10,0x10,0x38,0x38,0x7C,0xFE,0x00,0xFE,0x7C,0x38,0x38,0x10,0x10,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x18,0x00,0x18,0x18,0x00, - 0x6C,0x6C,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x7C,0x28,0x7C,0x28,0x00,0x00, - 0x10,0x38,0x60,0x38,0x0C,0x78,0x10,0x00,0x40,0xA4,0x48,0x10,0x24,0x4A,0x04,0x00, - 0x18,0x34,0x18,0x3A,0x6C,0x66,0x3A,0x00,0x18,0x18,0x20,0x00,0x00,0x00,0x00,0x00, - 0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x00,0x0C,0x06,0x06,0x06,0x06,0x06,0x0C,0x00, - 0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, - 0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x00,0x00, - 0x38,0x4C,0xC6,0xC6,0xC6,0x64,0x38,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x7E,0x00, - 0x7C,0xC6,0x0E,0x3C,0x78,0xE0,0xFE,0x00,0x7E,0x0C,0x18,0x3C,0x06,0xC6,0x7C,0x00, - 0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x00,0xFC,0xC0,0xFC,0x06,0x06,0xC6,0x7C,0x00, - 0x3C,0x60,0xC0,0xFC,0xC6,0xC6,0x7C,0x00,0xFE,0xC6,0x0C,0x18,0x30,0x30,0x30,0x00, - 0x78,0xC4,0xE4,0x78,0x86,0x86,0x7C,0x00,0x7C,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00, - 0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x18,0x30, - 0x1C,0x38,0x70,0xE0,0x70,0x38,0x1C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00, - 0x70,0x38,0x1C,0x0E,0x1C,0x38,0x70,0x00,0x7C,0xC6,0xC6,0x1C,0x18,0x00,0x18,0x00, - 0x3C,0x42,0x99,0xA1,0xA5,0x99,0x42,0x3C,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0x00, - 0xFC,0xC6,0xC6,0xFC,0xC6,0xC6,0xFC,0x00,0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00, - 0xF8,0xCC,0xC6,0xC6,0xC6,0xCC,0xF8,0x00,0xFE,0xC0,0xC0,0xFC,0xC0,0xC0,0xFE,0x00, - 0xFE,0xC0,0xC0,0xFC,0xC0,0xC0,0xC0,0x00,0x3E,0x60,0xC0,0xCE,0xC6,0x66,0x3E,0x00, - 0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00, - 0x06,0x06,0x06,0x06,0xC6,0xC6,0x7C,0x00,0xC6,0xCC,0xD8,0xF0,0xF8,0xDC,0xCE,0x00, - 0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00, - 0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, - 0xFC,0xC6,0xC6,0xC6,0xFC,0xC0,0xC0,0x00,0x7C,0xC6,0xC6,0xC6,0xDE,0xCC,0x7A,0x00, - 0xFC,0xC6,0xC6,0xCE,0xF8,0xDC,0xCE,0x00,0x78,0xCC,0xC0,0x7C,0x06,0xC6,0x7C,0x00, - 0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, - 0xC6,0xC6,0xC6,0xEE,0x7C,0x38,0x10,0x00,0xC6,0xC6,0xD6,0xFE,0xFE,0xEE,0xC6,0x00, - 0xC6,0xEE,0x3C,0x38,0x7C,0xEE,0xC6,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, - 0xFE,0x0E,0x1C,0x38,0x70,0xE0,0xFE,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, - 0x60,0x60,0x30,0x18,0x0C,0x06,0x06,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, - 0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, - 0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3C,0x00, - 0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, - 0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x3C,0x00, - 0x1C,0x30,0x78,0x30,0x30,0x30,0x30,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x3C, - 0x60,0x7C,0x76,0x66,0x66,0x66,0x66,0x00,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x00, - 0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x38,0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0x00, - 0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0xEC,0xFE,0xFE,0xFE,0xD6,0xC6,0x00, - 0x00,0x7C,0x76,0x66,0x66,0x66,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, - 0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06, - 0x00,0x7E,0x70,0x60,0x60,0x60,0x60,0x00,0x00,0x3C,0x60,0x3C,0x06,0x66,0x3C,0x00, - 0x30,0x78,0x30,0x30,0x30,0x30,0x1C,0x00,0x00,0x66,0x66,0x66,0x66,0x6E,0x3E,0x00, - 0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x7C,0x6C,0x00, - 0x00,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C, - 0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x0E,0x18,0x0C,0x38,0x0C,0x18,0x0E,0x00, - 0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,0x70,0x18,0x30,0x1C,0x30,0x18,0x70,0x00, - 0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x54,0xAA,0x44,0x00,0x00, -}; - -static void gp2x_text(unsigned char *screen, int x, int y, char *text, int color, int flip) -{ - int i,l,slen; - slen=strlen(text); - - screen=screen+x+y*320; - - for (i=0;ipitch*screen->h; @@ -187,55 +46,27 @@ void CleanSurface(void) if(SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); - memset((uint8*)screen->pixels, 0x3F, x); + memset((uint8*)screen->pixels, 0x80, x); if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); SDL_UpdateRect(screen, 0, 0, 0, 0); -#endif } - +static int paletterefresh; void KillVideo(void) { -#ifdef GP2X - if (fps_str) - free(fps_str); - inited&=~1; - - -#else if(inited&1) { SDL_QuitSubSystem(SDL_INIT_VIDEO); } inited=0; -#endif } int InitVideo(void) { -#ifdef GP2X - - - fps_str=malloc(3); - fps_str[0]='5'; fps_str[1]='0'; fps_str[2]=0; - - CleanSurface(); - - - inited|=1; - - puts("Initialized GP2X VIDEO via minimal"); - - srendline=0; - erendline=239; - return 1; - - -#else const SDL_VideoInfo *vinf; int flags=0; @@ -300,14 +131,11 @@ int InitVideo(void) SDL_WM_SetCaption("FCE Ultra","FCE Ultra"); paletterefresh=1; - printf("srendline %d, erendline %d\n", srendline, erendline); return 1; -#endif } void ToggleFS(void) { -#ifndef GP2X KillVideo(); _fullscreen=!_fullscreen; @@ -320,11 +148,7 @@ void ToggleFS(void) exit(1); } } -#endif } - - -#ifndef GP2X static SDL_Color psdl[256]; void FCEUD_SetPalette(uint8 index, uint8 r, uint8 g, uint8 b) @@ -348,206 +172,21 @@ static void RedoPalette(void) { SDL_SetPalette(screen,SDL_PHYSPAL,psdl,0,256); } -#else - - - -void FCEUD_SetPalette(uint8 index, uint8 r, uint8 g, uint8 b) -{ - gp2x_video_color8(index, r, g, b); - gp2x_video_setpalette(); - - - paletterefresh = 1; -} -void FCEUD_GetPalette(uint8 index, uint8 * r, uint8 * g, uint8 * b) -{ - *r = (uint8) gp2x_palette[(index << 1) + 1]; - *g = (uint8) (gp2x_palette[(index << 1) + 0] >> 8); - *b = (uint8) gp2x_palette[(index << 1) + 0]; -} - -static void RedoPalette(void) -{ -} - - - -unsigned int gp2x_ticks_per_ms=7372800; -int needfpsflip=1; -#ifdef FRAMESKIP -int skipval=16; -int framecount=0; -int numrepeats=0; -int doskipping=0; -#endif - - -INLINE void printFps(uint8 *screen) -{ - int y; - int* destt; - - if (needfpsflip) - { - if (stretch_offset > 0) - { - y=240; - while (y--) - { - - int* dest=(int *) (screen+((y << 8) + (y << 6))+stretch_offset); - - destt=dest - 8; - destt[0]=0x3F3F3F3F; destt[1]=0x3F3F3F3F; destt[2]=0x3F3F3F3F; destt[3]=0x3F3F3F3F; - destt[4]=0x3F3F3F3F; destt[5]=0x3F3F3F3F; destt[6]=0x3F3F3F3F; destt[7]=0x3F3F3F3F; - - destt=dest + 64; - destt[0]=0x3F3F3F3F; destt[1]=0x3F3F3F3F; destt[2]=0x3F3F3F3F; destt[3]=0x3F3F3F3F; - destt[4]=0x3F3F3F3F; destt[5]=0x3F3F3F3F; destt[6]=0x3F3F3F3F; destt[7]=0x3F3F3F3F; - } - if (showfps) - { - gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0); - } - } - - if (needfpsflip <= 3) - { - if (showfps) - { - gp2x_text(screen, 0, 0, fps_str, FPS_COLOR, 0); - } - needfpsflip++; - } - else - { - needfpsflip=0; - } - } -#ifdef FRAMESKIP - if ((fps < 59) && doskipping && ((framesRendered % skipval) == (skipval-1))) - { - FCEUI_FrameSkip(1); - } -#endif - if ((framesRendered & 0x3F) != 0x3F) - { - return; - } - - unsigned long currTime=gp2x_timer_read_ms(); - fps= (unsigned long)( framesRendered * 7372800 / (currTime - ticks)); - if (fps > 90) - fps=90; - - if (fps > 30) - { - fps_samplecount++; - total_fps+=fps; - } - if (stretch_offset && showfps) - { - sprintf(fps_str, "%d", (int)fps); - needfpsflip=1; - fps_str[2]=0; - gp2x_text(screen, 0, 0, fps_str, stretch_offset, 0); - } - -#ifdef FRAMESKIP - if (fps < 59) - { - numrepeats++; - if (numrepeats >= 4) - { - if (skipval > 4) - { - skipval-=2; - } - doskipping=1; - printf("skipping every %dth frame, currfps=%d\n", skipval, fps); - numrepeats=0; - } - } - else - { - numrepeats=0; - } -#endif - ticks = currTime; - framesRendered = 0; -} -#endif - - - - - - - - - - void LockConsole(){} void UnlockConsole(){} - - -#ifdef GP2X - -void BlitScreen(uint8 * XBuf) -{ - - int x, y, yinc; - if (!XBuf) return; - XBufHelper=XBuf; - framesRendered++; - XBuf = XBuf ; - - y=240; - yinc=272*(y-1); - while (y--) - { - int* dest=(int *) (gp2x_screen8+((y << 8) + (y << 6))+stretch_offset); - - int* src=(int *) (XBuf+yinc); - x=64; - while (x--) - { - dest[x]=src[x]; - } - yinc-=272; - } - - if (paletterefresh) - { - gp2x_video_setpalette(); - paletterefresh = 0; - } - - printFps(gp2x_screen8); - gp2x_video_flip(); -} - - - - -#else -extern void SpeedThrottle(); void BlitScreen(uint8 *XBuf) { uint8 *dest; int xo=0,yo=0; - SpeedThrottle(); - if(paletterefresh) { RedoPalette(); paletterefresh=0; } - XBuf+=_sline*272; + XBuf+=_sline*320; if(SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); @@ -571,11 +210,6 @@ void BlitScreen(uint8 *XBuf) SDL_UnlockSurface(screen); SDL_UpdateRect(screen, xo, yo, NWIDTH*exs, tlines*eys); - - if (0) - { - gp2x_text(NULL, 0, 0, NULL, 0, 0); - } } uint32 PtoV(uint16 x, uint16 y) @@ -592,4 +226,3 @@ uint32 PtoV(uint16 x, uint16 y) } return(x|(y<<16)); } -#endif