X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=psp%2Femu.c;h=4063a0489d58c03dd44b611661b9a760d57e5a1e;hb=388947f33d88ce3de0d9cb3e873244fbb5162a59;hp=91bd5634f3d47532487f264f75fea5d9b42e289b;hpb=f11bad75edc8966e9f84b040163cc86e830c46c6;p=libpicofe.git diff --git a/psp/emu.c b/psp/emu.c index 91bd563..4063a04 100644 --- a/psp/emu.c +++ b/psp/emu.c @@ -33,9 +33,8 @@ int sceAudio_E0727056(int volume, void *buffer); // blocking output int sceAudioOutput2GetRestSample(); -char romFileName[PATH_MAX]; unsigned char *PicoDraw2FB = (unsigned char *)VRAM_CACHED_STUFF + 8; // +8 to be able to skip border with 1 quadword.. -int engineState = PGS_Menu, engineStateSuspend; +int engineStateSuspend; static unsigned int noticeMsgTime = 0; int reset_timing = 0; // do we need this? @@ -49,8 +48,14 @@ static void sound_deinit(void); static void blit2(const char *fps, const char *notice, int lagging_behind); static void clearArea(int full); -void emu_noticeMsgUpdated(void) +void plat_status_msg(const char *format, ...) { + va_list vl; + + va_start(vl, format); + vsnprintf(noticeMsg, sizeof(noticeMsg), fmt, vl); + va_end(vl); + noticeMsgTime = sceKernelGetSystemTimeLow(); } @@ -87,8 +92,7 @@ void emu_msg_cb(const char *msg) static void emu_msg_tray_open(void) { - strcpy(noticeMsg, "CD tray opened"); - noticeMsgTime = sceKernelGetSystemTimeLow(); + plat_status_msg("CD tray opened"); } @@ -609,7 +613,7 @@ static void sound_init(void) lprintf("sceKernelCreateThread failed: %i\n", thid); } -static void sound_prepare(void) +void emu_startSound(void) { static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0; int ret, stereo; @@ -633,9 +637,8 @@ static void sound_prepare(void) ret = sceAudio_38553111(samples_block/2, PsndRate, 2); // seems to not need that stupid 64byte alignment if (ret < 0) { lprintf("sceAudio_38553111() failed: %i\n", ret); - sprintf(noticeMsg, "sound init failed (%i), snd disabled", ret); - noticeMsgTime = sceKernelGetSystemTimeLow(); - currentConfig.EmuOpt &= ~4; + plat_status_msg("sound init failed (%i), snd disabled", ret); + currentConfig.EmuOpt &= ~EOPT_EN_SOUND; } else { PicoWriteSound = writeSound; memset32((int *)(void *)sndBuffer, 0, sizeof(sndBuffer)/4); @@ -648,7 +651,7 @@ static void sound_prepare(void) } } -static void sound_end(void) +void emu_endSound(void) { int i; if (samples_done == 0) @@ -667,6 +670,14 @@ static void sound_end(void) sceAudio_5C37C0AE(); } +/* wait until we can write more sound */ +void emu_waitSound(void) +{ + // TODO: test this + while (!sound_thread_exit && samples_made - samples_done > samples_block * 4) + psp_msleep(10); +} + static void sound_deinit(void) { sound_thread_exit = 1; @@ -742,10 +753,10 @@ static void RunEventsPico(unsigned int events, unsigned int keys) if (pico_inp_mode != 0) { PicoPad[0] &= ~0x0f; // release UDLR - if (keys & BTN_UP) { pico_pen_y--; if (pico_pen_y < 8) pico_pen_y = 8; } - if (keys & BTN_DOWN) { pico_pen_y++; if (pico_pen_y > 224-PICO_PEN_ADJUST_Y) pico_pen_y = 224-PICO_PEN_ADJUST_Y; } - if (keys & BTN_LEFT) { pico_pen_x--; if (pico_pen_x < 0) pico_pen_x = 0; } - if (keys & BTN_RIGHT) { + if (keys & PBTN_UP) { pico_pen_y--; if (pico_pen_y < 8) pico_pen_y = 8; } + if (keys & PBTN_DOWN) { pico_pen_y++; if (pico_pen_y > 224-PICO_PEN_ADJUST_Y) pico_pen_y = 224-PICO_PEN_ADJUST_Y; } + if (keys & PBTN_LEFT) { pico_pen_x--; if (pico_pen_x < 0) pico_pen_x = 0; } + if (keys & PBTN_RIGHT) { int lim = (Pico.video.reg[12]&1) ? 319 : 255; pico_pen_x++; if (pico_pen_x > lim-PICO_PEN_ADJUST_X) @@ -771,10 +782,10 @@ static void RunEvents(unsigned int which) int keys; sceGuSync(0,0); blit2("", (which & 0x1000) ? "LOAD STATE? (X=yes, O=no)" : "OVERWRITE SAVE? (X=yes, O=no)", 0); - while( !((keys = psp_pad_read(1)) & (BTN_X|BTN_CIRCLE)) ) + while( !((keys = psp_pad_read(1)) & (PBTN_X|PBTN_CIRCLE)) ) psp_msleep(50); - if (keys & BTN_CIRCLE) do_it = 0; - while( ((keys = psp_pad_read(1)) & (BTN_X|BTN_CIRCLE)) ) // wait for release + if (keys & PBTN_CIRCLE) do_it = 0; + while( ((keys = psp_pad_read(1)) & (PBTN_X|PBTN_CIRCLE)) ) // wait for release psp_msleep(50); clearArea(0); } @@ -797,12 +808,10 @@ static void RunEvents(unsigned int which) vidResetMode(); - if (PicoOpt&0x10) - strcpy(noticeMsg, "fast renderer"); + if (PicoOpt & POPT_ALT_RENDERER) + plat_status_msg("fast renderer"); else if (currentConfig.EmuOpt&0x80) - strcpy(noticeMsg, "accurate renderer"); - - noticeMsgTime = sceKernelGetSystemTimeLow(); + plat_status_msg("accurate renderer"); } if (which & 0x0300) { @@ -813,8 +822,8 @@ static void RunEvents(unsigned int which) state_slot += 1; if(state_slot > 9) state_slot = 0; } - sprintf(noticeMsg, "SAVE SLOT %i [%s]", state_slot, emu_checkSaveFile(state_slot) ? "USED" : "FREE"); - noticeMsgTime = sceKernelGetSystemTimeLow(); + plat_status_msg("SAVE SLOT %i [%s]", state_slot, + emu_checkSaveFile(state_slot) ? "USED" : "FREE"); } } @@ -824,43 +833,16 @@ static void updateKeys(void) static unsigned int prevEvents = 0; int i; + /* FIXME: port to input fw, merge with emu.c:emu_update_input() */ keys = psp_pad_read(0); if (keys & PSP_CTRL_HOME) sceDisplayWaitVblankStart(); - if (keys & BTN_SELECT) + if (keys & PBTN_SELECT) engineState = PGS_Menu; keys &= CONFIGURABLE_KEYS; - for (i = 0; i < 32; i++) - { - if (keys & (1 << i)) - { - int pl, acts = currentConfig.KeyBinds[i]; - if (!acts) continue; - pl = (acts >> 16) & 1; - if (kb_combo_keys & (1 << i)) - { - int u = i+1, acts_c = acts & kb_combo_acts; - // let's try to find the other one - if (acts_c) { - for (; u < 32; u++) - if ( (keys & (1 << u)) && (currentConfig.KeyBinds[u] & acts_c) ) { - allActions[pl] |= acts_c & currentConfig.KeyBinds[u]; - keys &= ~((1 << i) | (1 << u)); - break; - } - } - // add non-combo actions if combo ones were not found - if (!acts_c || u == 32) - allActions[pl] |= acts & ~kb_combo_acts; - } else { - allActions[pl] |= acts; - } - } - } - PicoPad[0] = allActions[0] & 0xfff; PicoPad[1] = allActions[1] & 0xfff; @@ -922,7 +904,6 @@ void emu_Loop(void) clearArea(1); Pico.m.dirtyPal = 1; oldmodes = ((Pico.video.reg[12]&1)<<2) ^ 0xc; - emu_findKeyBindCombos(); // pal/ntsc might have changed, reset related stuff target_fps = Pico.m.pal ? 50 : 60; @@ -944,7 +925,7 @@ void emu_Loop(void) PsndOut = NULL; if (currentConfig.EmuOpt & 4) { - sound_prepare(); + emu_startSound(); } sceDisplayWaitVblankStart(); @@ -1090,8 +1071,8 @@ void emu_Loop(void) if (PicoAHW & PAHW_MCD) PicoCDBufferFree(); if (PsndOut != NULL) { + emu_endSound(); PsndOut = NULL; - sound_end(); } // save SRAM @@ -1119,13 +1100,13 @@ void emu_HandleResume(void) // reopen first CD track if (Pico_mcd->TOC.Tracks[0].F != NULL) { - char *fname = romFileName; - int len = strlen(romFileName); + char *fname = rom_fname_reload; + int len = strlen(rom_fname_reload); cue_data_t *cue_data = NULL; if (len > 4 && strcasecmp(fname + len - 4, ".cue") == 0) { - cue_data = cue_parse(romFileName); + cue_data = cue_parse(rom_fname_reload); if (cue_data != NULL) fname = cue_data->tracks[1].fname; }