static const float VOUT_4_3 = (4.0f / 3.0f);
static const float VOUT_CRT = (1.29911f);
-static bool show_overscan = false;
-
-/* Required to allow on the fly changes to 'show overscan' */
+/* Required to allow on the fly changes to 'renderer' */
static int vm_current_start_line = -1;
static int vm_current_line_count = -1;
static int vm_current_start_col = -1;
if (vout_16bit)
PicoDrawSetOutBuf(vout_buf, vout_width * 2);
- if (show_overscan)
- {
- vout_height = line_count + (start_line * 2);
- vout_offset = 0;
- }
- else
- {
- vout_height = line_count;
- /* Note: We multiply by 2 here to account for pitch */
- vout_offset = vout_width * start_line * 2;
- }
+ vout_height = line_count;
+ /* Note: We multiply by 2 here to account for pitch */
+ vout_offset = vout_width * start_line * 2;
/* Redundant sanity check... */
vout_height = (vout_height > VOUT_MAX_HEIGHT) ?
void retro_get_system_av_info(struct retro_system_av_info *info)
{
- int common_height;
+ float tv_height = (vout_height > 144 ? Pico.m.pal ? 240 : 224 : 144);
float common_width;
memset(info, 0, sizeof(*info));
info->geometry.max_height = vout_height;
common_width = vout_width;
- common_height = vout_height >= 192 && vout_height <= 224 ? 224 : vout_height;
if (vout_aspect != 0)
- common_width = vout_aspect * common_height;
+ common_width = vout_aspect * tv_height;
- info->geometry.aspect_ratio = common_width / common_height;
+ info->geometry.aspect_ratio = common_width / vout_height;
}
/* savestates */
PsndRerate(0);
PicoDrawSetOutFormat(vout_format, 0);
+ if (vout_format == PDF_8BIT)
+ PicoDrawSetOutBuf(Pico.est.Draw2FB, 328);
/* Setup retro memory maps */
set_memory_maps();
}
static const unsigned short retro_pico_map[] = {
- 1 << GBTN_B,
- 1 << GBTN_A,
- 1 << GBTN_MODE,
- 1 << GBTN_START,
- 1 << GBTN_UP,
- 1 << GBTN_DOWN,
- 1 << GBTN_LEFT,
- 1 << GBTN_RIGHT,
- 1 << GBTN_C,
- 1 << GBTN_Y,
- 1 << GBTN_X,
- 1 << GBTN_Z,
+ [RETRO_DEVICE_ID_JOYPAD_B] = 1 << GBTN_B,
+ [RETRO_DEVICE_ID_JOYPAD_Y] = 1 << GBTN_A,
+ [RETRO_DEVICE_ID_JOYPAD_SELECT] = 1 << GBTN_MODE,
+ [RETRO_DEVICE_ID_JOYPAD_START] = 1 << GBTN_START,
+ [RETRO_DEVICE_ID_JOYPAD_UP] = 1 << GBTN_UP,
+ [RETRO_DEVICE_ID_JOYPAD_DOWN] = 1 << GBTN_DOWN,
+ [RETRO_DEVICE_ID_JOYPAD_LEFT] = 1 << GBTN_LEFT,
+ [RETRO_DEVICE_ID_JOYPAD_RIGHT] = 1 << GBTN_RIGHT,
+ [RETRO_DEVICE_ID_JOYPAD_A] = 1 << GBTN_C,
+ [RETRO_DEVICE_ID_JOYPAD_X] = 1 << GBTN_Y,
+ [RETRO_DEVICE_ID_JOYPAD_L] = 1 << GBTN_X,
+ [RETRO_DEVICE_ID_JOYPAD_R] = 1 << GBTN_Z,
};
#define RETRO_PICO_MAP_LEN (sizeof(retro_pico_map) / sizeof(retro_pico_map[0]))
double new_sound_rate;
unsigned short old_snd_filter;
int32_t old_snd_filter_range;
- bool old_show_overscan;
var.value = NULL;
var.key = "picodrive_input1";
PicoIn.opt &= ~POPT_DIS_SPRITE_LIM;
}
- old_show_overscan = show_overscan;
- var.value = NULL;
- var.key = "picodrive_overscan";
- show_overscan = false;
- if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
- if (strcmp(var.value, "enabled") == 0)
- show_overscan = true;
- }
-
var.value = NULL;
var.key = "picodrive_overclk68k";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
if (vout_format == PDF_NONE)
PicoIn.opt |= POPT_ALT_RENDERER;
PicoDrawSetOutFormat(vout_format, 0);
+ if (vout_format == PDF_8BIT)
+ PicoDrawSetOutBuf(Pico.est.Draw2FB, 328);
}
var.value = NULL;
}
/* setup video if required */
- if (show_overscan != old_show_overscan || vout_format != old_vout_format)
+ if (vout_format != old_vout_format)
{
if ((vm_current_start_line != -1) &&
(vm_current_line_count != -1) &&
* with the fast renderer this is improving performance, at the expense of accuracy.
*/
/* This section is mostly copied from pemu_finalize_frame in platform/linux/emu.c */
- unsigned short *pd = (unsigned short *)vout_buf;
+ unsigned short *pd = (unsigned short *)((char *)vout_buf + vout_offset);
/* Skip the leftmost 8 columns (it is used as an overlap area for rendering) */
- unsigned char *ps = Pico.est.Draw2FB + 8;
+ unsigned char *ps = Pico.est.Draw2FB + vm_current_start_line * 328 + 8;
unsigned short *pal = Pico.est.HighPal;
int x;
if (Pico.m.dirtyPal)
PicoDrawUpdateHighPal();
- /* Copy up to the max height to include the overscan area, and skip the leftmost 8 columns again */
- for (i = 0; i < VOUT_MAX_HEIGHT; i++, ps += 8) {
+ /* Copy, and skip the leftmost 8 columns again */
+ for (i = 0; i < vout_height; i++, ps += 8) {
for (x = 0; x < vout_width; x+=4) {
*pd++ = pal[*ps++];
*pd++ = pal[*ps++];
unsigned short *pd = (unsigned short *)vout_buf;
unsigned short *ps = (unsigned short *)vout_ghosting_buf;
int y;
- for (y = 0; y < VOUT_MAX_HEIGHT; y++) {
+ for (y = 0; y < vout_height; y++) {
if (vout_ghosting == 1)
v_blend(pd, ps, vout_width, p_075_round);
else