コード例 #1
0
ファイル: psp1_gfx.c プロジェクト: maddox/RetroArch
static void psp_free(void *data)
{
   psp1_video_t *psp = (psp1_video_t*)data;

   if(!(psp) || !(psp->main_dList))
      return;

   sceDisplayWaitVblankStart();
   sceGuDisplay(GU_FALSE);
   sceGuTerm();

   if (psp->main_dList)
      free(psp->main_dList);
   if (psp->frame_dList)
      free(psp->frame_dList);
   if (psp->frame_coords)
      free(TO_CACHED_PTR(psp->frame_coords));
   if (psp->menu.frame_coords)
      free(TO_CACHED_PTR(psp->menu.frame_coords));
   if (psp->menu.dList)
      free(psp->menu.dList);
   if (psp->menu.frame)
      free(psp->menu.frame);

   free(data);

   sceKernelDisableSubIntr(PSP_VBLANK_INT, 0);
   sceKernelReleaseSubIntrHandler(PSP_VBLANK_INT,0);
}
コード例 #2
0
ファイル: hook_interrupt.c プロジェクト: p2world/remotelite
/*------------------------------------------------------------------------------*/
void TranceAsyncOff( void )
{
	if ( IndexUseNow == -1 ){ return; }
	sceKernelDisableSubIntr( 30, IndexUseNow );
	sceKernelReleaseSubIntrHandler( 30, IndexUseNow );
	IndexUseNow = -1;
}
コード例 #3
0
ファイル: vblank.c プロジェクト: HomerSp/pspautotests
void suspendUsage() {
	int counter;
	sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0, vblank_counter, &counter);

	counter = 0;
	sceKernelEnableSubIntr(PSP_VBLANK_INT, 0);
	int flag = sceKernelCpuSuspendIntr();
	sceKernelDelayThread(300000);
	sceKernelCpuResumeIntr(flag);
	sceKernelDisableSubIntr(PSP_VBLANK_INT, 0);

	printf("Interrupts suspended: %d\n", counter);

	counter = 0;
	sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0, vblank_counter, &counter);
	sceKernelEnableSubIntr(PSP_VBLANK_INT, 0);
	sceKernelDelayThread(300000);
	sceKernelDisableSubIntr(PSP_VBLANK_INT, 0);

	sceKernelReleaseSubIntrHandler(PSP_VBLANK_INT, 0);

	printf("Interrupts resumed: %d\n", counter);
}
コード例 #4
0
ファイル: dispatch.c プロジェクト: Raimoo/pspautotests
void checkDispatchInterrupt() {
	dispatchCheckpoint("Interrupts while dispatch disabled:");

	sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0, &vblankCallback, NULL);
	sceKernelEnableSubIntr(PSP_VBLANK_INT, 0);

	++ignoreResched;
	int state = sceKernelSuspendDispatchThread();

	int base = sceDisplayGetVcount();
	int i, j;
	for (i = 0; i < 1000; ++i) {
		if (sceDisplayGetVcount() > base + 3) {
			break;
		}
		for (j = 0; j < 10000; ++j)
			continue;
	}

	dispatchCheckpoint("vblanks=%d", sceDisplayGetVcount() - base);

	sceKernelResumeDispatchThread(state);
	--ignoreResched;

	base = sceDisplayGetVcount();
	for (i = 0; i < 1000; ++i) {
		if (sceDisplayGetVcount() > base + 3) {
			break;
		}
		for (j = 0; j < 10000; ++j)
			continue;
	}
	
	dispatchCheckpoint("vblanks=%d", sceDisplayGetVcount() - base);

	sceKernelDisableSubIntr(PSP_VBLANK_INT, 0);
	sceKernelReleaseSubIntrHandler(PSP_VBLANK_INT, 0);
	flushschedf();
}
コード例 #5
0
extern "C" int main(int argc, char *argv[]) {
	int result;

	sceKernelRegisterSubIntrHandler(30, 1, (void *)&handler, (void *)0xDEADBEEF);

	checkpointNext("sceKernelEnableSubIntr:");
	result = sceKernelEnableSubIntr(70, 1);
	checkpoint("  Invalid intr: %08x", result);
	result = sceKernelEnableSubIntr(30, 70);
	checkpoint("  Invalid subintr: %08x", result);
	result = sceKernelEnableSubIntr(30, 1);
	checkpoint("  Registered: %08x", result);
	result = sceKernelEnableSubIntr(30, 1);
	checkpoint("  Twice: %08x", result);
	result = sceKernelEnableSubIntr(30, 3);
	checkpoint("  Unregistered: %08x", result);
	sceKernelDisableSubIntr(30, 2);
	sceKernelDisableSubIntr(30, 1);

	checkpointNext("Interrupts run when enabled:");

	checkpoint("  With handler first:");
	result = sceKernelEnableSubIntr(30, 1);
	sceKernelDelayThread(17000);
	sceKernelDisableSubIntr(30, 1);

	checkpoint("  With handler after:");
	result = sceKernelEnableSubIntr(30, 2);
	sceKernelRegisterSubIntrHandler(30, 2, (void *)&handler, (void *)0xDEADBEEF);
	sceKernelDelayThread(17000);
	sceKernelDisableSubIntr(30, 2);
	sceKernelReleaseSubIntrHandler(30, 2);

	checkpoint("  Without handler:");
	result = sceKernelEnableSubIntr(30, 3);
	sceKernelDelayThread(17000);
	sceKernelDisableSubIntr(30, 3);

	checkpoint("  Released while enabled:");
	sceKernelRegisterSubIntrHandler(30, 4, (void *)&handler, (void *)0xDEADBEEF);
	result = sceKernelEnableSubIntr(30, 4);
	sceKernelReleaseSubIntrHandler(30, 4);
	sceKernelRegisterSubIntrHandler(30, 4, (void *)&handler, (void *)0xDEADBEEF);
	sceKernelDelayThread(17000);
	sceKernelDisableSubIntr(30, 4);
	sceKernelReleaseSubIntrHandler(30, 4);

	checkpointNext("sceKernelDisableSubIntr:");
	result = sceKernelDisableSubIntr(70, 1);
	checkpoint("  Invalid intr: %08x", result);
	result = sceKernelDisableSubIntr(30, 70);
	checkpoint("  Invalid subintr: %08x", result);
	sceKernelEnableSubIntr(30, 1);
	result = sceKernelDisableSubIntr(30, 1);
	checkpoint("  Registered: %08x", result);
	result = sceKernelDisableSubIntr(30, 1);
	checkpoint("  Twice: %08x", result);
	result = sceKernelDisableSubIntr(30, 3);
	checkpoint("  Unregistered: %08x", result);

	sceKernelReleaseSubIntrHandler(30, 1);

	return 0;
}