#include "psp.h"
#include "emu.h"
#include "../common/lprintf.h"
+#include "version.h"
extern int pico_main(void);
#ifndef FW15
-PSP_MODULE_INFO("PicoDrive", 0, 1, 35);
+PSP_MODULE_INFO("PicoDrive", 0, 1, 50);
PSP_HEAP_SIZE_MAX();
int main() { return pico_main(); } /* just a wrapper */
#else
-PSP_MODULE_INFO("PicoDrive", 0x1000, 1, 35);
+PSP_MODULE_INFO("PicoDrive", 0x1000, 1, 50);
PSP_MAIN_THREAD_ATTR(0);
int main()
static int power_callback(int unknown, int pwrflags, void *common)
{
static int old_state = PGS_Menu;
+ int i;
lprintf("power_callback: flags: 0x%08X\n", pwrflags);
/* check for power switch and suspending as one is manual and the other automatic */
if (pwrflags & PSP_POWER_CB_POWER_SWITCH || pwrflags & PSP_POWER_CB_SUSPENDING || pwrflags & PSP_POWER_CB_STANDBY)
{
- if (engineState != PGS_Suspending) {
+ if (engineState != PGS_Suspending && engineState != PGS_SuspendAck) {
old_state = engineState;
engineState = PGS_Suspending;
}
+ for (i = 0; i < 10 && engineState != PGS_SuspendAck; i++)
+ sceKernelDelayThread(100*1024);
+
}
else if (pwrflags & PSP_POWER_CB_RESUME_COMPLETE)
{
main_thread_id = sceKernelGetThreadId();
+ lprintf("\n%s\n", "PicoDrive v" VERSION " " __DATE__ " " __TIME__);
lprintf("running on %08x kernel\n", sceKernelDevkitVersion()),
lprintf("entered psp_init, threadId %08x, priority %i\n", main_thread_id,
sceKernelGetThreadCurrentPriority());
SceUID fd;
int i;
for (i = 0; i < 30; i++) {
- fd = sceIoOpen("dummy.txt", PSP_O_WRONLY|PSP_O_APPEND, 0777);
- if (fd != 0x80010013) break; // device not available
- sceKernelDelayThread(32 * 1024);
+ fd = sceIoOpen("EBOOT.PBP", PSP_O_RDONLY, 0777);
+ if (fd >= 0) break;
+ sceKernelDelayThread(100 * 1024);
}
if (fd >= 0) sceIoClose(fd);
sceDisplayWaitVblankStart();
psp_unhandled_suspend = 0;
if (i < 30)
- lprintf("io resumed after %i tries\n", i);
- else lprintf("io resume failed\n");
+ lprintf("io resumed after %i tries\n", i);
+ else {
+ lprintf("io resume failed with %08x\n", fd);
+ sceKernelDelayThread(500 * 1024);
+ }
}
/* alt logging */
static log_entry *le_root = NULL;
#endif
+/* strange: if this function leaks memory (before psp_init() call?),
+ * resume after suspend breaks on 3.90 */
void lprintf(const char *fmt, ...)
{
va_list vl;