⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 psp开发用的所有头文件。包含所有系统API。需要psp-gcc编译器。在www.psp-dev.com上有
💻 C
字号:
/* * PSP Software Development Kit - http://www.pspdev.org * ----------------------------------------------------------------------- * Licensed under the BSD license, see LICENSE in PSPSDK root for details. * * main.c - sceKernelLoadModule() sample. * * 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 $ *//* WARNING: This sample currently crashes, due to a bug in the PSP's kernel.  We're working on a fix. */#include <pspuser.h>#include <pspdebug.h>#include <pspsdk.h>#include <string.h>/* Define the module info section, note the 0x1000 flag to enable start in kernel mode */PSP_MODULE_INFO("SDKTEST", 0x1000, 1, 1);PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);/* Define printf, just to make typing easier */#define printf	pspDebugScreenPrintf/* List of modules to load - type is 0 if the module belongs to the kernel, 1 if it's a user module. */struct module_list {	int			type;	const char *path;} module_list[] = {	{ 0, "flash0:/kd/ifhandle.prx" },	{ 1, "flash0:/kd/pspnet.prx" }};const int module_count = sizeof(module_list) / sizeof(module_list[0]);SceUID load_module(const char *path, int flags, int type);void MyExceptionHandler(PspDebugRegBlock *regs){	printf("\n\n");	pspDebugDumpException(regs);}/* This function is called by the startup code before main() is called.  Since   it runs in kernel mode we can access kernel-only features. */__attribute__((constructor))void KernelSetup(void){	pspDebugScreenInit();	pspDebugInstallKprintfHandler(NULL);	pspDebugInstallErrorHandler(MyExceptionHandler);	/* Very important - patch the module manager so that we can load modules from user mode. */	pspSdkInstallNoDeviceCheckPatch();}/* 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;	/* Note the use of THREAD_ATTR_USER to ensure the callback thread is in user mode */	thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, NULL);	if(thid >= 0)	{		sceKernelStartThread(thid, 0, 0);	}	return thid;}SceUID load_module(const char *path, int flags, int type){	SceKernelLMOption option;	SceUID mpid;	/* If the type is 0, then load the module in the kernel partition, otherwise load it	   in the user partition. */	if (type == 0) {		mpid = 1;	} else {		mpid = 2;	}	memset(&option, 0, sizeof(option));	option.size = sizeof(option);	option.mpidtext = mpid;	option.mpiddata = mpid;	option.position = 0;	option.access = 1;	return sceKernelLoadModule(path, flags, &option);}int main(void){	int i;	SetupCallbacks();	printf("Loadmodule sample program.\n\n");	/* Try loading and starting the network modules. */	for (i = 0; i < module_count; i++) {		SceUID modid;		int res, status;		modid = load_module(module_list[i].path, 0, module_list[i].type);		if (modid < 0) {			printf("sceKernelLoadModule('%s') failed with %x\n", module_list[i].path, modid);			break;		}		res = sceKernelStartModule(modid, 0, NULL, &status, NULL);		if (res < 0) {			printf("sceKernelStartModule('%s') failed with %x\n", module_list[i].path, res);			break;		}		printf("Load and start '%s' - Success\n", module_list[i].path);	}	printf("\nAll done!\n");	sceKernelSleepThread();	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -