Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Commit

Permalink
refactor screen sizing + pal/ntsc handle
Browse files Browse the repository at this point in the history
  • Loading branch information
r-type committed Oct 31, 2017
1 parent e789375 commit b1f0497
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 73 deletions.
47 changes: 27 additions & 20 deletions libretro/libretro-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -744,7 +736,6 @@ static void update_variables(void)

}


void Emu_init(void)
{
#ifdef RETRO_AND
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand All @@ -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<<PIXEL_BYTES);
video_cb(Retro_Screen,retroW,retroH,retrow<<PIXEL_BYTES);

if(want_quit)retro_shutdown_core();
}
Expand Down
31 changes: 7 additions & 24 deletions libretro/libretro-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@

extern unsigned vice_devices[ 2 ];

#define TEX_WIDTH 384
#define TEX_HEIGHT 272

//LOG
#if defined(__ANDROID__) || defined(ANDROID)
#include <android/log.h>
Expand All @@ -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
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion vice/src/arch/libretro/video.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
32 changes: 4 additions & 28 deletions vice/src/arch/libretro/vsyncarch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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) {

Expand Down
23 changes: 23 additions & 0 deletions vice/src/video/video-canvas.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand Down

1 comment on commit b1f0497

@tschak909
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That works great for me, spent this afternoon beating it up. 👍

Please sign in to comment.