major menu unification, minor reorganization
[libpicofe.git] / psp / emu.c
index b050419..bbf07e5 100644 (file)
--- a/psp/emu.c
+++ b/psp/emu.c
@@ -21,8 +21,8 @@
 #include "../common/emu.h"
 #include "../common/config.h"
 #include "../common/lprintf.h"
-#include "../../Pico/PicoInt.h"
-#include "../../Pico/cd/cue.h"
+#include <pico/pico_int.h>
+#include <pico/cd/cue.h>
 
 #define OSD_FPS_X 432
 
@@ -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?
@@ -54,9 +53,10 @@ void emu_noticeMsgUpdated(void)
        noticeMsgTime = sceKernelGetSystemTimeLow();
 }
 
-void emu_getMainDir(char *dst, int len)
+int emu_getMainDir(char *dst, int len)
 {
        if (len > 0) *dst = 0;
+       return 0;
 }
 
 static void osd_text(int x, const char *text, int is_active, int clear_all)
@@ -155,16 +155,6 @@ void emu_prepareDefaultConfig(void)
        defaultConfig.turbo_rate = 15;
 }
 
-void emu_setDefaultConfig(void)
-{
-       memcpy(&currentConfig, &defaultConfig, sizeof(currentConfig));
-       PicoOpt = currentConfig.s_PicoOpt;
-       PsndRate = currentConfig.s_PsndRate;
-       PicoRegionOverride = currentConfig.s_PicoRegion;
-       PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;
-       PicoCDBuffers = currentConfig.s_PicoCDBuffers;
-}
-
 
 extern void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count);
 extern void amips_clut_6bit(unsigned short *dst, unsigned char *src, unsigned short *pal, int count);
@@ -272,7 +262,7 @@ static void do_pal_update(int allow_sh, int allow_as)
                localPal[0xe0] = 0;
                localPal[0xf0] = 0x001f;
        }
-       else if (allow_as && (rendstatus & PDRAW_ACC_SPRITES))
+       else if (allow_as && (rendstatus & PDRAW_SPR_LO_ON_HI))
        {
                memcpy32((int *)dpal+0x80/2, (void *)localPal, 0x40*2/4);
        }
@@ -299,7 +289,7 @@ static void EmuScanPrepare(void)
 
        if (Pico.m.dirtyPal)
                do_pal_update(1, 1);
-       if ((rendstatus & PDRAW_ACC_SPRITES) && !(Pico.video.reg[0xC]&8))
+       if ((rendstatus & PDRAW_SPR_LO_ON_HI) && !(Pico.video.reg[0xC]&8))
             amips_clut_f = amips_clut_6bit;
        else amips_clut_f = amips_clut;
 }
@@ -618,7 +608,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;
@@ -657,7 +647,7 @@ static void sound_prepare(void)
        }
 }
 
-static void sound_end(void)
+void emu_endSound(void)
 {
        int i;
        if (samples_done == 0)
@@ -676,6 +666,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;
@@ -751,10 +749,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)
@@ -780,10 +778,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);
                }
@@ -837,7 +835,7 @@ static void updateKeys(void)
        if (keys & PSP_CTRL_HOME)
                sceDisplayWaitVblankStart();
 
-       if (keys & BTN_SELECT)
+       if (keys & PBTN_SELECT)
                engineState = PGS_Menu;
 
        keys &= CONFIGURABLE_KEYS;
@@ -953,7 +951,7 @@ void emu_Loop(void)
        PsndOut = NULL;
        if (currentConfig.EmuOpt & 4)
        {
-               sound_prepare();
+               emu_startSound();
        }
 
        sceDisplayWaitVblankStart();
@@ -1099,8 +1097,8 @@ void emu_Loop(void)
        if (PicoAHW & PAHW_MCD) PicoCDBufferFree();
 
        if (PsndOut != NULL) {
+               emu_endSound();
                PsndOut = NULL;
-               sound_end();
        }
 
        // save SRAM
@@ -1128,13 +1126,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;
                }