952d1047e2da889242b827a473b1e4e979e9ac91
[libpicofe.git] / psp / main.c
1 // (c) Copyright 2007 notaz, All rights reserved.
2 // Free for non-commercial use.
3
4 // For commercial use, separate licencing terms must be obtained.
5
6 #include <string.h>
7 #include "psp.h"
8 #include "emu.h"
9 #include "menu.h"
10 #include "mp3.h"
11 #include "../common/menu.h"
12 #include "../common/emu.h"
13 #include "../common/config.h"
14 #include "../common/lprintf.h"
15
16 #ifdef GPROF
17 #include <pspprof.h>
18 #endif
19
20 #ifdef GCOV
21 #include <stdio.h>
22 #include <stdlib.h>
23
24 void dummy(void)
25 {
26         engineState = atoi(rom_fname_reload);
27         setbuf(NULL, NULL);
28         getenv(NULL);
29 }
30 #endif
31
32 int pico_main(void)
33 {
34         psp_init();
35
36         emu_prepareDefaultConfig();
37         emu_ReadConfig(0, 0);
38         config_readlrom(PicoConfigFile);
39
40         emu_Init();
41         menu_init();
42         // moved to emu_Loop(), after CPU clock change..
43         //mp3_init();
44
45         engineState = PGS_Menu;
46
47         for (;;)
48         {
49                 switch (engineState)
50                 {
51                         case PGS_Menu:
52 #ifndef GPROF
53                                 menu_loop();
54 #else
55                                 strcpy(rom_fname_reload, rom_fname_loaded);
56                                 engineState = PGS_ReloadRom;
57 #endif
58                                 break;
59
60                         case PGS_ReloadRom:
61                                 if (emu_reload_rom(rom_fname_reload)) {
62                                         engineState = PGS_Running;
63                                         if (mp3_last_error != 0)
64                                                 engineState = PGS_Menu; // send to menu to display mp3 error
65                                 } else {
66                                         lprintf("PGS_ReloadRom == 0\n");
67                                         engineState = PGS_Menu;
68                                 }
69                                 break;
70
71                         case PGS_Suspending:
72                                 while (engineState == PGS_Suspending)
73                                         psp_wait_suspend();
74                                 break;
75
76                         case PGS_SuspendWake:
77                                 psp_unhandled_suspend = 0;
78                                 psp_resume_suspend();
79                                 emu_HandleResume();
80                                 engineState = engineStateSuspend;
81                                 break;
82
83                         case PGS_RestartRun:
84                                 engineState = PGS_Running;
85
86                         case PGS_Running:
87                                 if (psp_unhandled_suspend) {
88                                         psp_unhandled_suspend = 0;
89                                         psp_resume_suspend();
90                                         emu_HandleResume();
91                                         break;
92                                 }
93                                 pemu_loop();
94 #ifdef GPROF
95                                 goto endloop;
96 #endif
97                                 break;
98
99                         case PGS_Quit:
100                                 goto endloop;
101
102                         default:
103                                 lprintf("engine got into unknown state (%i), exitting\n", engineState);
104                                 goto endloop;
105                 }
106         }
107
108         endloop:
109
110         mp3_deinit();
111         emu_Deinit();
112 #ifdef GPROF
113         gprof_cleanup();
114 #endif
115 #ifndef GCOV
116         psp_finish();
117 #endif
118
119         return 0;
120 }
121