text: /*
   * PSP Software Development Kit - http://www.pspdev.org
   * -----------------------------------------------------------------------
   * Licensed under the BSD license, see LICENSE in PSPSDK root for details.
   *
   * main.c - Basic sample to demonstrate the profiler
   *
   * Copyright (c) 2005 Marcus R. Brown <mrbrown@ocgnet.org>
   * Copyright (c) 2005 James Forshaw <tyranid@gmail.com>
   * Copyright (c) 2005 John Kelley <ps2dev@kelley.ca>
   *
   * $Id: main.c 1095 2005-09-27 21:02:16Z jim $
   */
  #include <pspkernel.h>
  #include <pspdebug.h>
  #include <pspdisplay.h>
  #include <string.h>
  
  PSP_MODULE_INFO("PROFILER", 0x1000, 1, 1);
  /* Define the main thread's attribute value (optional) */
  PSP_MAIN_THREAD_ATTR(0);
  
  /* Define printf, just to make typing easier */
  #define printf	pspDebugScreenPrintf
  
  /* Exit callback */
  int exit_callback(int arg1, int arg2, void *common)
  {
  	sceKernelExitGame();
  
  	return 0;
  }
  
  /* Callback thread */
  int CallbackThread(SceSize args, void *argp)
  {
  	int cbid;
  
  	cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
  	sceKernelRegisterExitCallback(cbid);
  
  	sceKernelSleepThreadCB();
  
  	return 0;
  }
  
  /* Sets up the callback thread and returns its thread id */
  int SetupCallbacks(void)
  {
  	int thid = 0;
  
  	thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0);
  	if(thid >= 0)
  	{
  		sceKernelStartThread(thid, 0, 0);
  	}
  
  	return thid;
  }
  
  int main(void)
  {
  	int i;
  
  	pspDebugScreenInit();
  	SetupCallbacks();
  
  	/* Clear the existing profile regs */
  	pspDebugProfilerClear();
  	/* Enable profiling */
  	pspDebugProfilerEnable();
  
  	for(i = 0; i < 600; i++)
  	{
  		pspDebugScreenSetXY(0, 0);
  		/* Print profile information to the screen */
  		pspDebugProfilerPrint();
  		sceDisplayWaitVblankStart();
  	}
  
  	/* Let's bug out */
  	sceKernelExitDeleteThread(0);
  
  	return 0;
  }
  