diff --git a/libretro/libretro-core.c b/libretro/libretro-core.c index d283a0d046..88bdacae0f 100644 --- a/libretro/libretro-core.c +++ b/libretro/libretro-core.c @@ -67,22 +67,14 @@ int CROP_WIDTH; int CROP_HEIGHT; int VIRTUAL_WIDTH; -#if defined(__CBM2__) -int retrow=704; -int retroh=266; -#elif defined(__CBM5X__) -int retrow=448; -int retroh=284; -#elif defined(__VIC20__) -int retrow=448; -int retroh=284; -#elif defined(__PLUS4__) -int retrow=384; -int retroh=288; -#else -int retrow=384; -int retroh=272; -#endif +int retroXS=0; +int retroYS=0; +int retroW=1024; +int retroH=768; +int retrow=1024; +int retroh=768; +int lastW=1024; +int lastH=768; #include "vkbd.i" @@ -744,7 +736,6 @@ static void update_variables(void) } - void Emu_init(void) { #ifdef RETRO_AND @@ -879,10 +870,19 @@ void retro_get_system_info(struct retro_system_info *info) } +void update_geometry() +{ + struct retro_system_av_info system_av_info; + system_av_info.geometry.base_width = retroW; + system_av_info.geometry.base_height = retroH; + system_av_info.geometry.aspect_ratio = (float)4.0/3.0; + environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &system_av_info); +} + void retro_get_system_av_info(struct retro_system_av_info *info) { /* FIXME handle PAL/NTSC */ - struct retro_game_geometry geom = { retrow, retroh, retrow, retroh,4.0 / 3.0 }; + struct retro_game_geometry geom = { 320, 240, retrow, retroh,4.0 / 3.0 }; struct retro_system_timing timing = { 50.0, 44100.0 }; info->geometry = geom; @@ -924,13 +924,20 @@ void retro_run(void) static int mfirst=1; bool updated = false; + if(lastW!=retroW || lastH!=retroH){ + update_geometry(); + printf("Update Geometry Old(%d,%d) New(%d,%d)\n",lastW,lastH,retroW,retroH); + lastW=retroW; + lastH=retroH; + } + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) update_variables(); if(mfirst==1) { mfirst++; - printf("MAIN FIRST\n"); + printf("First time we return from retro_run()!\n"); retro_load_ok=true; Emu_init(); @@ -949,7 +956,7 @@ void retro_run(void) else if (pauseg==1)app_render(1); //app_render(pauseg); - video_cb(Retro_Screen,retrow,retroh,retrow< @@ -36,27 +33,9 @@ extern unsigned vice_devices[ 2 ]; #define uint32 uint32_t #define uint8 uint8_t -#if defined(__CBM2__) -#define WINDOW_WIDTH 704 -#define WINDOW_HEIGHT 266 -#define WINDOW_SIZE (704*266) -#elif defined(__CBM5X__) -#define WINDOW_WIDTH 448 -#define WINDOW_HEIGHT 284 -#define WINDOW_SIZE (448*284) -#elif defined(__VIC20__) -#define WINDOW_WIDTH 448 -#define WINDOW_HEIGHT 284 -#define WINDOW_SIZE (448*284) -#elif defined(__PLUS4__) -#define WINDOW_WIDTH 384 -#define WINDOW_HEIGHT 288 -#define WINDOW_SIZE (384*288) -#else -#define WINDOW_WIDTH 384 -#define WINDOW_HEIGHT 272 -#define WINDOW_SIZE (384*272) -#endif +#define WINDOW_WIDTH 1024 +#define WINDOW_HEIGHT 768 +#define WINDOW_SIZE (1024*768) #ifdef FRONTEND_SUPPORTS_RGB565 #define M16B @@ -114,6 +93,10 @@ extern int retrow ; extern int retroh ; extern int cpuloop; extern int vice_statusbar; +extern int retroXS; +extern int retroYS; +extern int retroH; +extern int retroW; //FUNCS extern void maincpu_mainloop_retro(void); diff --git a/vice/src/arch/libretro/video.c b/vice/src/arch/libretro/video.c index a25e5d830a..b7045dd9e7 100644 --- a/vice/src/arch/libretro/video.c +++ b/vice/src/arch/libretro/video.c @@ -55,7 +55,7 @@ video_canvas_t *video_canvas_create(video_canvas_t *canvas, { canvas->videoconfig->rendermode = VIDEO_RENDER_RGB_1X1; - //canvas->width=retrow;canvas->height=retroh; + printf ("canvas width wants to be : %d\ncanvas height wants to be : %d\ncanvas depth wants to be : %d\n", canvas->width, canvas->height, canvas->depth); canvas->depth = 8*PITCH; diff --git a/vice/src/arch/libretro/vsyncarch.c b/vice/src/arch/libretro/vsyncarch.c index 13296a7d60..875bc47103 100644 --- a/vice/src/arch/libretro/vsyncarch.c +++ b/vice/src/arch/libretro/vsyncarch.c @@ -37,28 +37,6 @@ #include "libretro-core.h" -#if defined(__X64SC__) -//XS:0 YS:16 XI:0 YI:0 W:384 H:272 XSC64 -#define XS 0 -#define YS 16 -#elif defined(__PLUS4__) -#define XS 28 -#define YS 19 -#elif defined(__VIC20__) -//XS:576 YS:28 XI:0 YI:0 W:448 H:284 -#define XS 588 -#define YS 28 -#elif defined(__CBM2__) -//XS:0 YS:8 XI:0 YI:0 W:704 H:266 -#define XS 0 -#define YS 8 -#else -//CBM5x -//XS:104 YS:16 XI:0 YI:0 W:384 H:272 X64 -#define XS 104 -#define YS 16 -#endif - extern void retro_poll_event(int joyon); extern void app_vkb_handle(); @@ -124,13 +102,11 @@ void vsyncarch_presync(void) #if defined(__VIC20__) RCANVAS->videoconfig->rendermode = VIDEO_RENDER_RGB_1X1; #endif - video_canvas_render(RCANVAS,(BYTE *)bmp/*Retro_Screen*/, - retrow,retroh,//384, 272, - XS,YS,//xs, ys, + video_canvas_render(RCANVAS,(BYTE *)bmp, + retroW,retroH, + retroXS,retroYS, 0,0,//xi, yi, - retrow*PITCH,8*PITCH);//384*4, 32); - - //app_vkb_handle(); + retrow*PITCH,8*PITCH); if (uistatusbar_state & UISTATUSBAR_ACTIVE && vice_statusbar==1) { diff --git a/vice/src/video/video-canvas.c b/vice/src/video/video-canvas.c index baddb83802..183ff60250 100644 --- a/vice/src/video/video-canvas.c +++ b/vice/src/video/video-canvas.c @@ -111,6 +111,8 @@ void video_canvas_render(video_canvas_t *canvas, BYTE *trg, int width, viewport); } +extern int retroXS,retroYS,retroH,retroW; + void video_canvas_refresh_all(video_canvas_t *canvas) { viewport_t *viewport; @@ -123,6 +125,27 @@ void video_canvas_refresh_all(video_canvas_t *canvas) viewport = canvas->viewport; geometry = canvas->geometry; +#ifdef __LIBRETRO__ +#ifdef RETRO_DEBUG + printf("canvas:XS:%d YS:%d XI:%d YI:%d W:%d H:%d\n", + viewport->first_x + + geometry->extra_offscreen_border_left, + viewport->first_line, + viewport->x_offset, + viewport->y_offset, + MIN(canvas->draw_buffer->canvas_width, + geometry->screen_size.width - viewport->first_x), + MIN(canvas->draw_buffer->canvas_height, + viewport->last_line - viewport->first_line + 1)); +#endif + retroXS=viewport->first_x + + geometry->extra_offscreen_border_left; + retroYS= viewport->first_line; + retroH=MIN(canvas->draw_buffer->canvas_height, + viewport->last_line - viewport->first_line + 1); + retroW=MIN(canvas->draw_buffer->canvas_width, + geometry->screen_size.width - viewport->first_x); +#endif video_canvas_refresh(canvas, viewport->first_x + geometry->extra_offscreen_border_left,