From cc878848a45db22abe284649c7e19f896a0abeb9 Mon Sep 17 00:00:00 2001 From: gameblabla Date: Tue, 8 Oct 2019 14:43:37 +0200 Subject: Fix up Retrostone support and other minor fixes. --- shell/video/retrostone/video_blit.c | 111 ++++++++++-------------------------- shell/video/sdl/video_blit.h | 9 +-- 2 files changed, 34 insertions(+), 86 deletions(-) (limited to 'shell/video') diff --git a/shell/video/retrostone/video_blit.c b/shell/video/retrostone/video_blit.c index be84dd1..26bc298 100644 --- a/shell/video/retrostone/video_blit.c +++ b/shell/video/retrostone/video_blit.c @@ -24,22 +24,26 @@ #include #include #include -#include "mednafen.h" -#include "mempatcher.h" -#include "wswan/gfx.h" -#include "wswan/wswan-memory.h" -#include "wswan/sound.h" -#include "wswan/interrupt.h" -#include "wswan/v30mz.h" -#include "wswan/rtc.h" -#include "wswan/gfx.h" -#include "wswan/eeprom.h" +#include "main.h" +#include "snes9x.h" +#include "soundux.h" +#include "memmap.h" +#include "apu.h" +#include "cheats.h" +#include "display.h" +#include "gfx.h" +#include "cpuexec.h" +#include "spc7110.h" +#include "srtc.h" +#include "sa1.h" +#include "scaler.h" #include "video_blit.h" #include "scaler.h" #include "config.h" -SDL_Surface *sdl_screen, *backbuffer, *wswan_vs, *wswan_vs_rot; + +SDL_Surface *sdl_screen, *backbuffer; uint32_t width_of_surface; uint32_t* Draw_to_Virtual_Screen; @@ -50,39 +54,25 @@ void Init_Video() SDL_ShowCursor(0); - sdl_screen = SDL_SetVideoMode(0, 0, 16, SDL_HWSURFACE); + sdl_screen = SDL_SetVideoMode(680, 448, 16, SDL_HWSURFACE); backbuffer = SDL_CreateRGBSurface(SDL_SWSURFACE, HOST_WIDTH_RESOLUTION, HOST_HEIGHT_RESOLUTION, 16, 0,0,0,0); - - wswan_vs = SDL_CreateRGBSurface(SDL_SWSURFACE, INTERNAL_WSWAN_WIDTH, INTERNAL_WSWAN_HEIGHT, 16, 0,0,0,0); - - wswan_vs_rot = SDL_CreateRGBSurface(SDL_SWSURFACE, INTERNAL_WSWAN_HEIGHT, INTERNAL_WSWAN_WIDTH, 16, 0,0,0,0); Set_Video_InGame(); } void Set_Video_Menu() { - if (sdl_screen->w != HOST_WIDTH_RESOLUTION) - { - memcpy(wswan_vs->pixels, sdl_screen->pixels, (INTERNAL_WSWAN_WIDTH * INTERNAL_WSWAN_HEIGHT)*2); - sdl_screen = SDL_SetVideoMode(HOST_WIDTH_RESOLUTION, HOST_HEIGHT_RESOLUTION, 16, SDL_HWSURFACE); - } } void Set_Video_InGame() { - if (sdl_screen->w != HOST_WIDTH_RESOLUTION) sdl_screen = SDL_SetVideoMode(HOST_WIDTH_RESOLUTION, HOST_HEIGHT_RESOLUTION, 16, SDL_HWSURFACE); - Draw_to_Virtual_Screen = wswan_vs->pixels; - width_of_surface = INTERNAL_WSWAN_WIDTH; } void Video_Close() { if (sdl_screen) SDL_FreeSurface(sdl_screen); if (backbuffer) SDL_FreeSurface(backbuffer); - if (wswan_vs) SDL_FreeSurface(wswan_vs); - if (wswan_vs_rot) SDL_FreeSurface(wswan_vs_rot); SDL_Quit(); } @@ -91,65 +81,26 @@ void Update_Video_Menu() SDL_Flip(sdl_screen); } -static void rotate_90_ccw(uint16_t* restrict dst, uint16_t* restrict src) -{ - int32_t h = 224, w = 144; - src += w * h - 1; - for (int32_t col = w - 1; col >= 0; --col) - { - uint16_t *outcol = dst + col; - for(int32_t row = 0; row < h; ++row, outcol += w) - { - *outcol = *src--; - } - } -} - void Update_Video_Ingame() { - uint32_t internal_width, internal_height, keep_aspect_width, keep_aspect_height; - uint16_t* restrict source_graph; + uint32_t *s, *d; + uint32_t h, w; + uint8_t PAL = !!(Memory.FillRAM[0x2133] & 4); - if ((Wswan_IsVertical() == 1 && option.orientation_settings != 2) || option.orientation_settings == 1) - { - rotate_90_ccw((uint16_t* restrict)wswan_vs_rot->pixels, (uint16_t* restrict)wswan_vs->pixels); - internal_width = INTERNAL_WSWAN_HEIGHT; - internal_height = INTERNAL_WSWAN_WIDTH; - source_graph = (uint16_t* restrict)wswan_vs_rot->pixels; - keep_aspect_width = ((HOST_HEIGHT_RESOLUTION / INTERNAL_WSWAN_HEIGHT) * INTERNAL_WSWAN_WIDTH) / 2; - if (keep_aspect_width > HOST_WIDTH_RESOLUTION) keep_aspect_width -= HOST_WIDTH_RESOLUTION/2; - keep_aspect_height = HOST_HEIGHT_RESOLUTION; - } - else - { - internal_width = INTERNAL_WSWAN_WIDTH; - internal_height = INTERNAL_WSWAN_HEIGHT; - source_graph = (uint16_t* restrict)wswan_vs->pixels; - keep_aspect_width = HOST_WIDTH_RESOLUTION; - keep_aspect_height = ((HOST_WIDTH_RESOLUTION / INTERNAL_WSWAN_WIDTH) * INTERNAL_WSWAN_HEIGHT); - if (keep_aspect_height > HOST_HEIGHT_RESOLUTION) keep_aspect_height -= HOST_HEIGHT_RESOLUTION/4; - } + SDL_LockSurface(sdl_screen); - if (SDL_LockSurface(sdl_screen) == 0) + switch(option.fullscreen) { - switch(option.fullscreen) - { - // Fullscreen - case 0: - bitmap_scale(0,0,internal_width,internal_height,internal_width*2,internal_height*2,internal_width, HOST_WIDTH_RESOLUTION - (internal_width*2),(uint16_t* restrict)source_graph,(uint16_t* restrict)sdl_screen->pixels+(HOST_WIDTH_RESOLUTION-(internal_width*2))/2+(HOST_HEIGHT_RESOLUTION-(internal_height*2))/2*HOST_WIDTH_RESOLUTION); - break; - // Fullscreen - case 1: - bitmap_scale(0, 0, internal_width, internal_height, HOST_WIDTH_RESOLUTION, HOST_HEIGHT_RESOLUTION, internal_width, 0, (uint16_t* restrict)source_graph, (uint16_t* restrict)sdl_screen->pixels); - break; - case 2: - bitmap_scale(0,0,internal_width,internal_height,keep_aspect_width,keep_aspect_height,internal_width, HOST_WIDTH_RESOLUTION - keep_aspect_width,(uint16_t* restrict)source_graph,(uint16_t* restrict)sdl_screen->pixels+(HOST_WIDTH_RESOLUTION-keep_aspect_width)/2+(HOST_HEIGHT_RESOLUTION-keep_aspect_height)/2*HOST_WIDTH_RESOLUTION); - break; - // Hqx - case 3: - break; - } - SDL_UnlockSurface(sdl_screen); + case 0: + bitmap_scale(0,0,IPPU.RenderedScreenWidth,IPPU.RenderedScreenHeight,IPPU.RenderedScreenWidth*2,sdl_screen->h, SNES_WIDTH*2, sdl_screen->w - (IPPU.RenderedScreenWidth*2),(uint16_t* restrict)GFX.Screen,(uint16_t* restrict)sdl_screen->pixels+(HOST_WIDTH_RESOLUTION-(IPPU.RenderedScreenWidth*2))/2+(HOST_HEIGHT_RESOLUTION-((HOST_HEIGHT_RESOLUTION)))/2*HOST_WIDTH_RESOLUTION); + break; + case 1: + case 2: + bitmap_scale(0, 0, IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, sdl_screen->w, sdl_screen->h, SNES_WIDTH*2, 0, GFX.Screen, sdl_screen->pixels); + break; } + + + SDL_UnlockSurface(sdl_screen); SDL_Flip(sdl_screen); } diff --git a/shell/video/sdl/video_blit.h b/shell/video/sdl/video_blit.h index ea28ba9..b34518b 100644 --- a/shell/video/sdl/video_blit.h +++ b/shell/video/sdl/video_blit.h @@ -3,13 +3,10 @@ #include -#define HOST_WIDTH_RESOLUTION 320 -#define HOST_HEIGHT_RESOLUTION 240 +#define HOST_WIDTH_RESOLUTION sdl_screen->w +#define HOST_HEIGHT_RESOLUTION sdl_screen->h -#define INTERNAL_SNES_WIDTH_NTSC 256 -#define INTERNAL_SNES_HEIGHT_NTSC 224 - -extern SDL_Surface *screen, *backbuffer; +extern SDL_Surface *sdl_screen, *backbuffer; extern uint32_t width_of_surface; extern uint32_t* Draw_to_Virtual_Screen; -- cgit v1.2.3