/* -*- mode: c; tab-width: 4; c-basic-offset: 3; c-file-style: "linux" -*- */
//
// Copyright (c) 2009, Pal_Bazzi.
//
// All rights reserved.
//
// This file is part of SDLPAL.
//
// SDLPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include
#include
#include
#include
#include
#include
#include
#define PSP_HEAP_MEMSIZE 12288
PSP_MODULE_INFO("SDLPAL", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(PSP_HEAP_MEMSIZE);
//
//Exit callback
//
int PSPExitCallback(int arg1, int arg2, void *common)
{
exit(0);
return 0;
}
//
//Reopen MKF files when resume from suspend
//
int PSPSuspendCallback(int arg1, int pwrflags, void *common)
{
if (pwrflags & PSP_POWER_CB_RESUME_COMPLETE)
{
UTIL_CloseFile(gpGlobals->f.fpFBP);
UTIL_CloseFile(gpGlobals->f.fpMGO);
UTIL_CloseFile(gpGlobals->f.fpBALL);
UTIL_CloseFile(gpGlobals->f.fpDATA);
UTIL_CloseFile(gpGlobals->f.fpF);
UTIL_CloseFile(gpGlobals->f.fpFIRE);
UTIL_CloseFile(gpGlobals->f.fpRGM);
UTIL_CloseFile(gpGlobals->f.fpSSS);
gpGlobals->f.fpFBP = UTIL_OpenRequiredFile("fbp.mkf");
gpGlobals->f.fpDATA = UTIL_OpenRequiredFile("data.mkf");
gpGlobals->f.fpFIRE = UTIL_OpenRequiredFile("fire.mkf");
gpGlobals->f.fpSSS = UTIL_OpenRequiredFile("sss.mkf");
gpGlobals->lpObjectDesc = PAL_LoadObjectDesc(va("%s%s", PAL_PREFIX, "desc.dat"));
SOUND_ReloadVOC();
}
int cbid;
cbid = sceKernelCreateCallback("suspend Callback", PSPSuspendCallback, NULL);
scePowerRegisterCallback(0, cbid);
return 0;
}
//
//setup callbacks thread
//
int PSPRegisterCallbackThread(SceSize args, void *argp)
{
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", PSPExitCallback, NULL);
sceKernelRegisterExitCallback(cbid);
cbid = sceKernelCreateCallback("suspend Callback", PSPSuspendCallback, NULL);
scePowerRegisterCallback(0, cbid);
sceKernelSleepThreadCB();
return 0;
}
//
//setup exit callback
//
int PSPSetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", PSPRegisterCallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0)
sceKernelStartThread(thid, 0, 0);
return thid;
}
//
//Init on PSP
//
void sdlpal_psp_init(void)
{
// Init Debug Screen
pspDebugScreenInit();
// PSP set callbacks
PSPSetupCallbacks();
// Register sceKernelExitGame() to be called when we exit
atexit(sceKernelExitGame);
// set PSP CPU clock
scePowerSetClockFrequency(333 , 333 , 166);
}