more unification; replace some magic bits to defines
[libpicofe.git] / psp / emu.c
index 015c320..4063a04 100644 (file)
--- 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");
 }
 
 
@@ -633,9 +637,8 @@ void emu_startSound(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);
@@ -750,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)
@@ -779,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);
                }
@@ -805,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)
        {
@@ -821,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");
        }
 }
 
@@ -832,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;
 
@@ -930,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;
@@ -1127,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;
                }