extend mmap wrapper functionality
[libpicofe.git] / psp / main.c
index 0d12196..952d104 100644 (file)
@@ -1,19 +1,46 @@
+// (c) Copyright 2007 notaz, All rights reserved.
+// Free for non-commercial use.
+
+// For commercial use, separate licencing terms must be obtained.
+
+#include <string.h>
 #include "psp.h"
 #include "emu.h"
 #include "menu.h"
+#include "mp3.h"
 #include "../common/menu.h"
 #include "../common/emu.h"
+#include "../common/config.h"
 #include "../common/lprintf.h"
-#include "version.h"
 
-int main()
+#ifdef GPROF
+#include <pspprof.h>
+#endif
+
+#ifdef GCOV
+#include <stdio.h>
+#include <stdlib.h>
+
+void dummy(void)
+{
+       engineState = atoi(rom_fname_reload);
+       setbuf(NULL, NULL);
+       getenv(NULL);
+}
+#endif
+
+int pico_main(void)
 {
-       lprintf("\nPicoDrive v" VERSION " " __DATE__ " " __TIME__ "\n");
        psp_init();
 
+       emu_prepareDefaultConfig();
        emu_ReadConfig(0, 0);
+       config_readlrom(PicoConfigFile);
+
        emu_Init();
        menu_init();
+       // moved to emu_Loop(), after CPU clock change..
+       //mp3_init();
 
        engineState = PGS_Menu;
 
@@ -22,23 +49,51 @@ int main()
                switch (engineState)
                {
                        case PGS_Menu:
+#ifndef GPROF
                                menu_loop();
+#else
+                               strcpy(rom_fname_reload, rom_fname_loaded);
+                               engineState = PGS_ReloadRom;
+#endif
                                break;
 
                        case PGS_ReloadRom:
-                               if (emu_ReloadRom())
+                               if (emu_reload_rom(rom_fname_reload)) {
                                        engineState = PGS_Running;
-                               else {
+                                       if (mp3_last_error != 0)
+                                               engineState = PGS_Menu; // send to menu to display mp3 error
+                               } else {
                                        lprintf("PGS_ReloadRom == 0\n");
                                        engineState = PGS_Menu;
                                }
                                break;
 
+                       case PGS_Suspending:
+                               while (engineState == PGS_Suspending)
+                                       psp_wait_suspend();
+                               break;
+
+                       case PGS_SuspendWake:
+                               psp_unhandled_suspend = 0;
+                               psp_resume_suspend();
+                               emu_HandleResume();
+                               engineState = engineStateSuspend;
+                               break;
+
                        case PGS_RestartRun:
                                engineState = PGS_Running;
 
                        case PGS_Running:
-                               emu_Loop();
+                               if (psp_unhandled_suspend) {
+                                       psp_unhandled_suspend = 0;
+                                       psp_resume_suspend();
+                                       emu_HandleResume();
+                                       break;
+                               }
+                               pemu_loop();
+#ifdef GPROF
+                               goto endloop;
+#endif
                                break;
 
                        case PGS_Quit:
@@ -52,8 +107,14 @@ int main()
 
        endloop:
 
+       mp3_deinit();
        emu_Deinit();
+#ifdef GPROF
+       gprof_cleanup();
+#endif
+#ifndef GCOV
        psp_finish();
+#endif
 
        return 0;
 }