--- unix/svga.cpp | 5 +++-- unix/unix.cpp | 26 +++++++++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) Index: snes9x-sdl-1.39/unix/unix.cpp =================================================================== --- snes9x-sdl-1.39.orig/unix/unix.cpp +++ snes9x-sdl-1.39/unix/unix.cpp @@ -146,8 +146,10 @@ } else if (strcmp (argv [i], "-nso") == 0) nso = TRUE; - else if (strcmp (argv [i], "-x2") == 0) + else if (strcmp (argv [i], "-x2") == 0) { vga = TRUE; + Settings.SupportHiRes = TRUE; + } else if (strcmp (argv [i], "-xs") == 0) { if (i + 1 < argc) @@ -636,10 +638,11 @@ } } else { for (register uint32 i = 0; i < Height; i++) { - register uint16 *dp16 = (uint16 *)(screen->pixels) + ((i + cl) * xs) * 2 + 64; + register uint16 *dp16 = (uint16 *)(screen->pixels) + ((Height - 1 -i) + cl) * 2 + 64 * screen->pitch/2; register uint16 *sp16 = (uint16 *)(GFX.Screen) + (i << 9) + cs; - for (register uint32 j = 0; j < 256; j++, dp16+=2, sp16++) { - *dp16 = *(dp16+1) = *sp16; + for (register uint32 j = 0; j < 256; j++, sp16++) { + *dp16 = *(dp16 + screen->pitch/2) = *sp16; + dp16 += 480 * 2; } } } @@ -652,7 +655,7 @@ SDL_UpdateRect(screen,0,0,0,0); ++ffc; } else - SDL_UpdateRect(screen,64,0,512,480); + SDL_UpdateRect(screen,0,64,480,512); } else { if (Settings.SupportHiRes) { if (Width > 256) { @@ -672,7 +675,16 @@ } } } - } + } else { + for (register uint32 i = 0; i < Height; i++) { + register uint16 *dp16 = (uint16 *)(screen->pixels) + ((Height - 1 - i) + cl) + 32 * 240; + register uint16 *sp16 = (uint16 *)(GFX.Screen) + (i * 320) + cs; + for (register uint32 j = 0; j < 256; j++, sp16++) { + *dp16 = *sp16; + dp16 += 240; + } + } + } if (Settings.DisplayFrameRate) S9xDisplayFrameRate ((uint8 *)screen->pixels + 64, 640); if (GFX.InfoString) @@ -682,7 +694,7 @@ SDL_UpdateRect(screen,0,0,0,0); ++ffc; } else - SDL_UpdateRect(screen,32,0,256,Height); + SDL_UpdateRect(screen,0,32,Height,256); // SDL_Flip(screen); } return(TRUE); Index: snes9x-sdl-1.39/unix/svga.cpp =================================================================== --- snes9x-sdl-1.39.orig/unix/svga.cpp +++ snes9x-sdl-1.39/unix/svga.cpp @@ -91,7 +91,7 @@ } atexit(SDL_Quit); keyssnes = SDL_GetKeyState(NULL); - screen = SDL_SetVideoMode(xs, ys, 16, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); + screen = SDL_SetVideoMode(ys, xs, 16, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); if (screen == NULL) { printf("Couldn't set video mode: %s\n", SDL_GetError()); @@ -102,7 +102,8 @@ GFX.Screen = (uint8 *)gfxscreen->pixels; GFX.Pitch = 512 * 2; } else { - GFX.Screen = (uint8 *)screen->pixels + 64; + gfxscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 240, 16, 0, 0, 0, 0); + GFX.Screen = (uint8 *)gfxscreen->pixels + 64; GFX.Pitch = 320 * 2; } GFX.SubScreen = (uint8 *)malloc(512 * 480 * 2);