\r
int g_screen_width = 320;\r
int g_screen_height = 240;\r
+int g_screen_ppitch = 320; // pitch in pixels\r
\r
const char *PicoConfigFile = "config2.cfg";\r
currentConfig_t currentConfig, defaultConfig;\r
ret = emu_read_config(cd_fname, 0);\r
if (!ret) emu_read_config(NULL, 0);\r
\r
- if (PicoRegionOverride) {\r
- *region = PicoRegionOverride;\r
+ if (PicoIn.regionOverride) {\r
+ *region = PicoIn.regionOverride;\r
lprintf("override region to %s\n", *region != 4 ?\r
(*region == 8 ? "EU" : "JAP") : "USA");\r
}\r
static char id_string[3+0xe*3+0x3*3+0x30*3+3];\r
int pos, swab = 1;\r
\r
- if (PicoAHW & PAHW_MCD) {\r
+ if (PicoIn.AHW & PAHW_MCD) {\r
strcpy(id_string, "CD|");\r
swab = 0;\r
}\r
- else if (PicoAHW & PAHW_SMS)\r
+ else if (PicoIn.AHW & PAHW_SMS)\r
strcpy(id_string, "MS|");\r
else strcpy(id_string, "MD|");\r
pos = 3;\r
\r
- if (!(PicoAHW & PAHW_SMS)) {\r
+ if (!(PicoIn.AHW & PAHW_SMS)) {\r
pos += extract_text(id_string + pos, media_id_header + 0x80, 0x0e, swab); // serial\r
id_string[pos] = '|'; pos++;\r
pos += extract_text(id_string + pos, media_id_header + 0xf0, 0x03, swab); // region\r
// buffer must be at least 150 byte long\r
void emu_get_game_name(char *str150)\r
{\r
- int ret, swab = (PicoAHW & PAHW_MCD) ? 0 : 1;\r
+ int ret, swab = (PicoIn.AHW & PAHW_MCD) ? 0 : 1;\r
char *s, *d;\r
\r
ret = extract_text(str150, media_id_header + 0x50, 0x30, swab); // overseas name\r
const char *sys_name, *tv_standard, *extra = "";\r
int fps;\r
\r
- if (PicoAHW & PAHW_SMS) {\r
+ if (PicoIn.AHW & PAHW_SMS) {\r
sys_name = "Master System";\r
#ifdef NO_SMS\r
extra = " [no support]";\r
#endif\r
- } else if (PicoAHW & PAHW_PICO) {\r
+ } else if (PicoIn.AHW & PAHW_PICO) {\r
sys_name = "Pico";\r
- } else if ((PicoAHW & (PAHW_32X|PAHW_MCD)) == (PAHW_32X|PAHW_MCD)) {\r
+ } else if ((PicoIn.AHW & (PAHW_32X|PAHW_MCD)) == (PAHW_32X|PAHW_MCD)) {\r
sys_name = "32X + Mega CD";\r
if ((Pico.m.hardware & 0xc0) == 0x80)\r
sys_name = "32X + Sega CD";\r
- } else if (PicoAHW & PAHW_MCD) {\r
+ } else if (PicoIn.AHW & PAHW_MCD) {\r
sys_name = "Mega CD";\r
if ((Pico.m.hardware & 0xc0) == 0x80)\r
sys_name = "Sega CD";\r
- } else if (PicoAHW & PAHW_32X) {\r
+ } else if (PicoIn.AHW & PAHW_32X) {\r
sys_name = "32X";\r
} else {\r
sys_name = "MegaDrive";\r
}\r
\r
// make quirks visible in UI\r
- if (PicoQuirks & PQUIRK_FORCE_6BTN)\r
+ if (PicoIn.quirks & PQUIRK_FORCE_6BTN)\r
currentConfig.input_dev0 = PICO_INPUT_PAD_6BTN;\r
\r
menu_romload_end();\r
PicoSetInputDevice(0, indev);\r
PicoSetInputDevice(1, indev);\r
\r
- PicoOpt |= POPT_DIS_VDP_FIFO; // no VDP fifo timing\r
+ PicoIn.opt |= POPT_DIS_VDP_FIFO; // no VDP fifo timing\r
if (movie_data[0xF] >= 'A') {\r
if (movie_data[0x16] & 0x80) {\r
- PicoRegionOverride = 8;\r
+ PicoIn.regionOverride = 8;\r
} else {\r
- PicoRegionOverride = 4;\r
+ PicoIn.regionOverride = 4;\r
}\r
PicoReset();\r
// TODO: bits 6 & 5\r
else\r
{\r
system_announce();\r
- PicoOpt &= ~POPT_DIS_VDP_FIFO;\r
+ PicoIn.opt &= ~POPT_DIS_VDP_FIFO;\r
}\r
\r
strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1);\r
void emu_set_defconfig(void)\r
{\r
memcpy(¤tConfig, &defaultConfig, sizeof(currentConfig));\r
- PicoOpt = currentConfig.s_PicoOpt;\r
- PsndRate = currentConfig.s_PsndRate;\r
- PicoRegionOverride = currentConfig.s_PicoRegion;\r
- PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
+ PicoIn.opt = currentConfig.s_PicoOpt;\r
+ PicoIn.sndRate = currentConfig.s_PsndRate;\r
+ PicoIn.regionOverride = currentConfig.s_PicoRegion;\r
+ PicoIn.autoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
}\r
\r
int emu_read_config(const char *rom_fname, int no_defaults)\r
}\r
\r
pemu_validate_config();\r
+ PicoIn.overclockM68k = currentConfig.overclock_68k;\r
\r
// some sanity checks\r
#ifdef PSP\r
} \\r
}\r
\r
-mk_text_out(emu_text_out8, unsigned char, 0xf0, g_screen_ptr, 1, g_screen_width)\r
-mk_text_out(emu_text_out16, unsigned short, 0xffff, g_screen_ptr, 1, g_screen_width)\r
+mk_text_out(emu_text_out8, unsigned char, 0xf0, g_screen_ptr, 1, g_screen_ppitch)\r
+mk_text_out(emu_text_out16, unsigned short, 0xffff, g_screen_ptr, 1, g_screen_ppitch)\r
mk_text_out(emu_text_out8_rot, unsigned char, 0xf0,\r
- (char *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
+ (char *)g_screen_ptr + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)\r
mk_text_out(emu_text_out16_rot, unsigned short, 0xffff,\r
- (short *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
+ (short *)g_screen_ptr + (g_screen_ppitch - 1) * g_screen_height, -g_screen_height, 1)\r
\r
#undef mk_text_out\r
\r
for (h = 0; h < 8; h++) {\r
unsigned short *p;\r
p = (unsigned short *)g_screen_ptr\r
- + x + g_screen_width * (y + h);\r
+ + x + g_screen_ppitch * (y + h);\r
for (i = len; i > 0; i--, p++)\r
*p = (*p >> 2) & 0x39e7;\r
}\r
lprintf("END OF MOVIE.\n");\r
} else {\r
// MXYZ SACB RLDU\r
- PicoPad[0] = ~movie_data[offs] & 0x8f; // ! SCBA RLDU\r
- if(!(movie_data[offs] & 0x10)) PicoPad[0] |= 0x40; // C\r
- if(!(movie_data[offs] & 0x20)) PicoPad[0] |= 0x10; // A\r
- if(!(movie_data[offs] & 0x40)) PicoPad[0] |= 0x20; // B\r
- PicoPad[1] = ~movie_data[offs+1] & 0x8f; // ! SCBA RLDU\r
- if(!(movie_data[offs+1] & 0x10)) PicoPad[1] |= 0x40; // C\r
- if(!(movie_data[offs+1] & 0x20)) PicoPad[1] |= 0x10; // A\r
- if(!(movie_data[offs+1] & 0x40)) PicoPad[1] |= 0x20; // B\r
- PicoPad[0] |= (~movie_data[offs+2] & 0x0A) << 8; // ! MZYX\r
- if(!(movie_data[offs+2] & 0x01)) PicoPad[0] |= 0x0400; // X\r
- if(!(movie_data[offs+2] & 0x04)) PicoPad[0] |= 0x0100; // Z\r
- PicoPad[1] |= (~movie_data[offs+2] & 0xA0) << 4; // ! MZYX\r
- if(!(movie_data[offs+2] & 0x10)) PicoPad[1] |= 0x0400; // X\r
- if(!(movie_data[offs+2] & 0x40)) PicoPad[1] |= 0x0100; // Z\r
+ PicoIn.pad[0] = ~movie_data[offs] & 0x8f; // ! SCBA RLDU\r
+ if(!(movie_data[offs] & 0x10)) PicoIn.pad[0] |= 0x40; // C\r
+ if(!(movie_data[offs] & 0x20)) PicoIn.pad[0] |= 0x10; // A\r
+ if(!(movie_data[offs] & 0x40)) PicoIn.pad[0] |= 0x20; // B\r
+ PicoIn.pad[1] = ~movie_data[offs+1] & 0x8f; // ! SCBA RLDU\r
+ if(!(movie_data[offs+1] & 0x10)) PicoIn.pad[1] |= 0x40; // C\r
+ if(!(movie_data[offs+1] & 0x20)) PicoIn.pad[1] |= 0x10; // A\r
+ if(!(movie_data[offs+1] & 0x40)) PicoIn.pad[1] |= 0x20; // B\r
+ PicoIn.pad[0] |= (~movie_data[offs+2] & 0x0A) << 8; // ! MZYX\r
+ if(!(movie_data[offs+2] & 0x01)) PicoIn.pad[0] |= 0x0400; // X\r
+ if(!(movie_data[offs+2] & 0x04)) PicoIn.pad[0] |= 0x0100; // Z\r
+ PicoIn.pad[1] |= (~movie_data[offs+2] & 0xA0) << 4; // ! MZYX\r
+ if(!(movie_data[offs+2] & 0x10)) PicoIn.pad[1] |= 0x0400; // X\r
+ if(!(movie_data[offs+2] & 0x40)) PicoIn.pad[1] |= 0x0100; // Z\r
}\r
}\r
\r
\r
if (is_sram)\r
{\r
- strcpy(ext, (PicoAHW & PAHW_MCD) ? ".brm" : ".srm");\r
+ strcpy(ext, (PicoIn.AHW & PAHW_MCD) ? ".brm" : ".srm");\r
romfname_ext(saveFname, sizeof(static_buff),\r
- (PicoAHW & PAHW_MCD) ? "brm"PATH_SEP : "srm"PATH_SEP, ext);\r
+ (PicoIn.AHW & PAHW_MCD) ? "brm"PATH_SEP : "srm"PATH_SEP, ext);\r
if (!load)\r
return saveFname;\r
\r
int sram_size;\r
unsigned char *sram_data;\r
int truncate = 1;\r
- if (PicoAHW & PAHW_MCD)\r
+ if (PicoIn.AHW & PAHW_MCD)\r
{\r
- if (PicoOpt & POPT_EN_MCD_RAMCART) {\r
+ if (PicoIn.opt & POPT_EN_MCD_RAMCART) {\r
sram_size = 0x12000;\r
sram_data = Pico.sv.data;\r
if (sram_data)\r
- memcpy32((int *)sram_data, (int *)Pico_mcd->bram, 0x2000/4);\r
+ memcpy(sram_data, Pico_mcd->bram, 0x2000);\r
} else {\r
sram_size = 0x2000;\r
sram_data = Pico_mcd->bram;\r
ret = fread(sram_data, 1, sram_size, sramFile);\r
ret = ret > 0 ? 0 : -1;\r
fclose(sramFile);\r
- if ((PicoAHW & PAHW_MCD) && (PicoOpt&POPT_EN_MCD_RAMCART))\r
- memcpy32((int *)Pico_mcd->bram, (int *)sram_data, 0x2000/4);\r
+ if ((PicoIn.AHW & PAHW_MCD) && (PicoIn.opt&POPT_EN_MCD_RAMCART))\r
+ memcpy(Pico_mcd->bram, sram_data, 0x2000);\r
} else {\r
// sram save needs some special processing\r
// see if we have anything to save\r
static int set_Frameskip, set_EmuOpt, is_on = 0;\r
\r
if (set_on && !is_on) {\r
- set_PsndOut = PsndOut;\r
+ set_PsndOut = PicoIn.sndOut;\r
set_Frameskip = currentConfig.Frameskip;\r
set_EmuOpt = currentConfig.EmuOpt;\r
- PsndOut = NULL;\r
+ PicoIn.sndOut = NULL;\r
currentConfig.Frameskip = 8;\r
currentConfig.EmuOpt &= ~4;\r
currentConfig.EmuOpt |= 0x40000;\r
emu_status_msg("FAST FORWARD");\r
}\r
else if (!set_on && is_on) {\r
- PsndOut = set_PsndOut;\r
+ PicoIn.sndOut = set_PsndOut;\r
currentConfig.Frameskip = set_Frameskip;\r
currentConfig.EmuOpt = set_EmuOpt;\r
PsndRerate(1);\r
is_on = 0;\r
// mainly to unbreak pcm\r
- if (PicoAHW & PAHW_MCD)\r
+ if (PicoIn.AHW & PAHW_MCD)\r
pcd_state_loaded();\r
}\r
}\r
return;\r
\r
/* handle other input modes */\r
- if (PicoPad[0] & 1) pico_pen_y--;\r
- if (PicoPad[0] & 2) pico_pen_y++;\r
- if (PicoPad[0] & 4) pico_pen_x--;\r
- if (PicoPad[0] & 8) pico_pen_x++;\r
- PicoPad[0] &= ~0x0f; // release UDLR\r
+ if (PicoIn.pad[0] & 1) pico_pen_y--;\r
+ if (PicoIn.pad[0] & 2) pico_pen_y++;\r
+ if (PicoIn.pad[0] & 4) pico_pen_x--;\r
+ if (PicoIn.pad[0] & 8) pico_pen_x++;\r
+ PicoIn.pad[0] &= ~0x0f; // release UDLR\r
\r
lim_x = (Pico.video.reg[12]&1) ? 319 : 255;\r
if (pico_pen_y < 8)\r
PicoPicohw.pen_pos[1] = pico_inp_mode == 1 ? (0x2f8 + pico_pen_y) : (0x1fc + pico_pen_y);\r
}\r
\r
-static void do_turbo(int *pad, int acts)\r
+static void do_turbo(unsigned short *pad, int acts)\r
{\r
static int turbo_pad = 0;\r
static unsigned char turbo_cnt[3] = { 0, 0, 0 };\r
pl_actions[0] = actions[IN_BINDTYPE_PLAYER12];\r
pl_actions[1] = actions[IN_BINDTYPE_PLAYER12] >> 16;\r
\r
- PicoPad[0] = pl_actions[0] & 0xfff;\r
- PicoPad[1] = pl_actions[1] & 0xfff;\r
+ PicoIn.pad[0] = pl_actions[0] & 0xfff;\r
+ PicoIn.pad[1] = pl_actions[1] & 0xfff;\r
\r
if (pl_actions[0] & 0x7000)\r
- do_turbo(&PicoPad[0], pl_actions[0]);\r
+ do_turbo(&PicoIn.pad[0], pl_actions[0]);\r
if (pl_actions[1] & 0x7000)\r
- do_turbo(&PicoPad[1], pl_actions[1]);\r
+ do_turbo(&PicoIn.pad[1], pl_actions[1]);\r
\r
events = actions[IN_BINDTYPE_EMU] & PEV_MASK;\r
\r
\r
events &= ~prev_events;\r
\r
- if (PicoAHW == PAHW_PICO)\r
+ if (PicoIn.AHW == PAHW_PICO)\r
run_events_pico(events);\r
if (events)\r
run_events_ui(events);\r
\r
void emu_cmn_forced_frame(int no_scale, int do_emu)\r
{\r
- int po_old = PicoOpt;\r
+ int po_old = PicoIn.opt;\r
+ int y;\r
\r
- memset32(g_screen_ptr, 0, g_screen_width * g_screen_height * 2 / 4);\r
+ for (y = 0; y < g_screen_height; y++)\r
+ memset32((short *)g_screen_ptr + g_screen_ppitch * y, 0,\r
+ g_screen_width * 2 / 4);\r
\r
- PicoOpt &= ~POPT_ALT_RENDERER;\r
- PicoOpt |= POPT_ACC_SPRITES;\r
+ PicoIn.opt &= ~POPT_ALT_RENDERER;\r
+ PicoIn.opt |= POPT_ACC_SPRITES;\r
if (!no_scale)\r
- PicoOpt |= POPT_EN_SOFTSCALE;\r
+ PicoIn.opt |= POPT_EN_SOFTSCALE;\r
\r
PicoDrawSetOutFormat(PDF_RGB555, 1);\r
Pico.m.dirtyPal = 1;\r
else\r
PicoFrameDrawOnly();\r
\r
- PicoOpt = po_old;\r
+ PicoIn.opt = po_old;\r
}\r
\r
void emu_init(void)\r
config_readlrom(path);\r
\r
PicoInit();\r
- PicoMessage = plat_status_msg_busy_next;\r
- PicoMCDopenTray = emu_tray_open;\r
- PicoMCDcloseTray = emu_tray_close;\r
+ PicoIn.osdMessage = plat_status_msg_busy_next;\r
+ PicoIn.mcdTrayOpen = emu_tray_open;\r
+ PicoIn.mcdTrayClose = emu_tray_close;\r
\r
sndout_init();\r
}\r
\r
static void snd_write_nonblocking(int len)\r
{\r
- sndout_write_nb(PsndOut, len);\r
+ sndout_write_nb(PicoIn.sndOut, len);\r
}\r
\r
void emu_sound_start(void)\r
{\r
- PsndOut = NULL;\r
+ PicoIn.sndOut = NULL;\r
\r
if (currentConfig.EmuOpt & EOPT_EN_SOUND)\r
{\r
- int is_stereo = (PicoOpt & POPT_EN_STEREO) ? 1 : 0;\r
+ int is_stereo = (PicoIn.opt & POPT_EN_STEREO) ? 1 : 0;\r
\r
PsndRerate(Pico.m.frame_count ? 1 : 0);\r
\r
printf("starting audio: %i len: %i stereo: %i, pal: %i\n",\r
- PsndRate, PsndLen, is_stereo, Pico.m.pal);\r
- sndout_start(PsndRate, is_stereo);\r
- PicoWriteSound = snd_write_nonblocking;\r
+ PicoIn.sndRate, Pico.snd.len, is_stereo, Pico.m.pal);\r
+ sndout_start(PicoIn.sndRate, is_stereo);\r
+ PicoIn.writeSound = snd_write_nonblocking;\r
plat_update_volume(0, 0);\r
memset(sndBuffer, 0, sizeof(sndBuffer));\r
- PsndOut = sndBuffer;\r
+ PicoIn.sndOut = sndBuffer;\r
}\r
}\r
\r
emu_update_input();\r
if (skip) {\r
int do_audio = diff > -target_frametime_x3 * 2;\r
- PicoSkipFrame = do_audio ? 1 : 2;\r
+ PicoIn.skipFrame = do_audio ? 1 : 2;\r
PicoFrame();\r
- PicoSkipFrame = 0;\r
+ PicoIn.skipFrame = 0;\r
}\r
else {\r
PicoFrame();\r