static void *vout_buf;
static void *vout_buf_ptr;
-static int vout_width, vout_height;
+static int vout_width = 256, vout_height = 240, vout_pitch = 256;
static int vout_fb_dirty;
static int psx_w, psx_h;
static bool vout_can_dupe;
fb.height = vout_height;
fb.access_flags = RETRO_MEMORY_ACCESS_WRITE;
- if (environ_cb(RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, &fb) && fb.format == RETRO_PIXEL_FORMAT_RGB565)
- vout_buf_ptr = (uint16_t *)fb.data;
+ vout_pitch = vout_width;
+ if (environ_cb(RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, &fb) && fb.format == RETRO_PIXEL_FORMAT_RGB565) {
+ vout_buf_ptr = fb.data;
+ if (fb.pitch / 2 != vout_pitch && fb.pitch != vout_width * 2)
+ SysPrintf("got unusual pitch %zd for resolution %dx%d\n", fb.pitch, vout_width, vout_height);
+ vout_pitch = fb.pitch / 2;
+ }
else
vout_buf_ptr = vout_buf;
}
{
unsigned short *dest = vout_buf_ptr;
const unsigned short *src = vram;
- int dstride = vout_width, h1 = h;
+ int dstride = vout_pitch, h1 = h;
int port = 0;
if (vram == NULL || dims_changed || (in_enable_crosshair[0] + in_enable_crosshair[1]) > 0)
out:
#ifndef FRONTEND_SUPPORTS_RGB565
- convert(vout_buf_ptr, vout_width * vout_height * 2);
+ convert(vout_buf_ptr, vout_pitch * vout_height * 2);
#endif
vout_fb_dirty = 1;
pl_rearmed_cbs.flip_cnt++;
{ NULL, 0x12800000, 0x010000, MAP_TAG_OTHER }, // 0x1f800000
{ NULL, 0x12c00000, 0x080000, MAP_TAG_OTHER }, // 0x1fc00000
{ NULL, 0x11000000, 0x800000, MAP_TAG_LUTS }, // 0x08000000
- { NULL, 0x12000000, 0x200000, MAP_TAG_VRAM }, // 0x00000000
+ { NULL, 0x12000000, 0x201000, MAP_TAG_VRAM }, // 0x00000000
};
void *pl_3ds_mmap(unsigned long addr, size_t size, int is_fixed,
typedef struct
{
void *buffer;
- uint32_t target_map;
size_t size;
enum psxMapTag tag;
+ int used;
} psx_map_t;
-void *addr = NULL;
+static void *addr = NULL;
psx_map_t custom_psx_maps[] = {
- { NULL, NULL, 0x210000, MAP_TAG_RAM }, // 0x80000000
- { NULL, NULL, 0x010000, MAP_TAG_OTHER }, // 0x1f800000
- { NULL, NULL, 0x080000, MAP_TAG_OTHER }, // 0x1fc00000
- { NULL, NULL, 0x800000, MAP_TAG_LUTS }, // 0x08000000
- { NULL, NULL, 0x200000, MAP_TAG_VRAM }, // 0x00000000
+ { NULL, 0x800000, MAP_TAG_LUTS },
+ { NULL, 0x080000, MAP_TAG_OTHER },
+ { NULL, 0x010000, MAP_TAG_OTHER },
+ { NULL, 0x201000, MAP_TAG_VRAM },
+ { NULL, 0x802000, MAP_TAG_VRAM }, // enhanced renderer
+ { NULL, 0x210000, MAP_TAG_RAM },
};
int init_vita_mmap()
addr = malloc(64 * 1024 * 1024);
if (addr == NULL)
return -1;
- tmpaddr = ((u32)(addr + 0xFFFFFF)) & ~0xFFFFFF;
- custom_psx_maps[0].buffer = tmpaddr + 0x2000000;
- custom_psx_maps[1].buffer = tmpaddr + 0x1800000;
- custom_psx_maps[2].buffer = tmpaddr + 0x1c00000;
- custom_psx_maps[3].buffer = tmpaddr + 0x0000000;
+ tmpaddr = (void *)(((size_t)addr + 0xFFFFFF) & ~0xFFFFFF);
+ custom_psx_maps[0].buffer = tmpaddr + 0x0000000;
+ custom_psx_maps[1].buffer = tmpaddr + 0x0800000;
+ custom_psx_maps[2].buffer = tmpaddr + 0x0880000;
+ custom_psx_maps[3].buffer = tmpaddr + 0x0900000;
custom_psx_maps[4].buffer = tmpaddr + 0x1000000;
+ custom_psx_maps[5].buffer = tmpaddr + 0x2000000;
#if 0
for(n = 0; n < 5; n++){
sceClibPrintf("addr reserved %x\n",custom_psx_maps[n].buffer);
void deinit_vita_mmap()
{
+ size_t i;
+ for (i = 0; i < sizeof(custom_psx_maps) / sizeof(custom_psx_maps[0]); i++) {
+ custom_psx_maps[i].buffer = NULL;
+ custom_psx_maps[i].used = 0;
+ }
free(addr);
}
for (; custom_map->size; custom_map++)
{
- if ((custom_map->size == size) && (custom_map->tag == tag))
+ if (custom_map->size == size && custom_map->tag == tag && !custom_map->used)
{
+ custom_map->used = 1;
return custom_map->buffer;
}
}
{
if ((custom_map->buffer == ptr))
{
+ custom_map->used = 0;
return;
}
}
void retro_get_system_av_info(struct retro_system_av_info *info)
{
- unsigned geom_height = vout_height > 0 ? vout_height : 240;
- unsigned geom_width = vout_width > 0 ? vout_width : 320;
+ unsigned geom_height = vout_height;
+ unsigned geom_width = vout_width;
memset(info, 0, sizeof(*info));
info->timing.fps = is_pal_mode ? 50.0 : 60.0;
{
if (strcmp(var.value, "game") == 0)
pl_rearmed_cbs.screen_centering_type = 1;
- else if (strcmp(var.value, "manual") == 0)
+ else if (strcmp(var.value, "borderless") == 0)
pl_rearmed_cbs.screen_centering_type = 2;
+ else if (strcmp(var.value, "manual") == 0)
+ pl_rearmed_cbs.screen_centering_type = 3;
else // auto
pl_rearmed_cbs.screen_centering_type = 0;
}
LoadCdrom();
}
+ set_vout_fb();
print_internal_fps();
/* Check whether current frame should
}
video_cb((vout_fb_dirty || !vout_can_dupe || !duping_enable) ? vout_buf_ptr : NULL,
- vout_width, vout_height, vout_width * 2);
+ vout_width, vout_height, vout_pitch * 2);
vout_fb_dirty = 0;
-
- set_vout_fb();
}
static bool try_use_bios(const char *path, bool preferred_only)