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

📄 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 - Basic sample to demonstrate some fileio functionality. * * 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 1175 2005-10-20 15:41:33Z chip $ */#include <pspkernel.h>#include <pspctrl.h>#include <pspdebug.h>#include <pspdisplay.h>#include <pspumd.h>#include <string.h>PSP_MODULE_INFO("Dumper", 0, 1, 1);#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, 0, 0);	if(thid >= 0)	{		sceKernelStartThread(thid, 0, 0);	}	return thid;}/* Build a path, append a directory slash if requested */void build_path(char *output, const char *root, const char *path, int append){	while(*root != 0)	{		*output++ = *root++;	}	if(*(root-1) != '/')	{		*output++ = '/';	}	while(*path != 0)	{		*output++ = *path++;	}	if(append)		*output++ = '/';	*output++ = 0;}/* Define a write buffer */char write_buffer[128*1024];void write_file(const char *read_loc, const char *write_loc, const char *name){	int fdin;	int fdout;	char readpath[256];	char writepath[256];	build_path(readpath, read_loc, name, 0);	build_path(writepath, write_loc, name, 0);	printf("Writing %s\n", writepath);	fdin = sceIoOpen(readpath, PSP_O_RDONLY, 0777);	if(fdin >= 0)	{		int bytesRead = 1;		fdout = sceIoOpen(writepath, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);		if(fdout < 0)		{			printf("Couldn't open %s\n", writepath);		}		bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer));		while((bytesRead > 0) && (fdout >= 0))		{			sceIoWrite(fdout, write_buffer, bytesRead);			bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer));		}		if(fdout >= 0)		{			sceIoClose(fdout);		}		if(fdin >= 0)		{			sceIoClose(fdin);		}	}	else	{		printf("Couldn't open %s\n", readpath);	}}void DumpBootBin(void){	int i;	int fd;	i = sceUmdCheckMedium(0);	if(i == 0)	{		printf("Insert UMD\n");		i = sceUmdWaitDriveStat(UMD_WAITFORDISC);	}	i = sceUmdActivate(1, "disc0:");	printf("Mounted disc\n");	i = sceUmdWaitDriveStat(UMD_WAITFORINIT);	/* Open the UMD_DATA.BIN */	fd = sceIoOpen("disc0:/UMD_DATA.BIN", PSP_O_RDONLY, 0777);	if(fd >= 0)	{		char game_id[11];		char path[256];		sceIoRead(fd, game_id, 10);		sceIoClose(fd);		game_id[10] = 0;		build_path(path, "ms0:/", game_id, 0);		sceIoMkdir(path, 0777);		printf("Found game %s\n", game_id);		write_file("disc0:/PSP_GAME/SYSDIR", path, "BOOT.BIN");	}}/* Dump a filing system */void dump_filesystem(const char *root, const char *write_loc){	int dfd;	char next_root[256];	char next_write[256];	sceIoMkdir(write_loc, 0777);	dfd = sceIoDopen(root);	if(dfd > 0)	{		SceIoDirent dir;		while(sceIoDread(dfd, &dir) > 0)		{			if(dir.d_stat.st_attr & FIO_SO_IFDIR)			{				if(dir.d_name[0] != '.')				{					build_path(next_write, write_loc, dir.d_name, 0);					build_path(next_root, root, dir.d_name, 1);					dump_filesystem(next_root, next_write);				}			}			else			{				write_file(root, write_loc, dir.d_name);			}		}		sceIoDclose(dfd);	}}/* Dump memory */void dump_memory(void){	int fd;	printf("Dumping 28Megs from 0x8400000\n");	fd = sceIoOpen("ms0:/MEMORY.BIN", PSP_O_CREAT | PSP_O_TRUNC | PSP_O_WRONLY, 0777);	if(fd >= 0)	{		sceIoWrite(fd, (void *) 0x8400000, 28*1024*1024);		sceIoClose(fd);	}}/* Dumps flash rom in bits */void dump_flashrom(int lower){	int fdin;	int fdout;	fdin = sceIoOpen("lflash:", PSP_O_RDONLY, 0777);	if(fdin > 0)	{		int i;		int bytes_read;		if(lower)		{			fdout = sceIoOpen("ms0:/flash_lower.bin", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);		}		else		{			fdout = sceIoOpen("ms0:/flash_upper.bin", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);		}		if(fdout > 0)		{			for(i = 0; i < ((16 * 1024 * 1024) / sizeof(write_buffer)); i++)			{				bytes_read = sceIoRead(fdin, write_buffer, sizeof(write_buffer));				if(lower)				{					sceIoWrite(fdout, write_buffer, bytes_read);				}			}			if(!lower)			{				for(i = 0; i < ((16 * 1024 * 1024) / sizeof(write_buffer)); i++)				{					bytes_read = sceIoRead(fdin, write_buffer, sizeof(write_buffer));					sceIoWrite(fdout, write_buffer, bytes_read);				}			}			sceIoClose(fdout);		}		sceIoClose(fdin);	}	else	{		printf("Cannot open lflash: device\n");		sceKernelSleepThread();	}}void show_menu(void){	printf("PSP Dumping Tool - TyRaNiD 2k5. (www.pspdev.org)\n");	printf("Press triangle to dump umd boot.bin\n");	printf("Press circle to dump flash0\n");	printf("Press square to dump flash1\n");	printf("Press cross to dump memory\n");	printf("Press L trigger to dump lower 16Mb of flash rom\n");	printf("Press R trigger to dump lower 16Mb of flash rom\n");}int main(void){	SceCtrlData pad_data;	pspDebugScreenSetBackColor(0xFFFFFFFF);	pspDebugScreenSetTextColor(0);	pspDebugScreenInit();	SetupCallbacks();	sceCtrlSetSamplingCycle(0);	sceCtrlSetSamplingMode(1);	show_menu();	for(;;)	{		sceCtrlReadBufferPositive(&pad_data, 1);		if(pad_data.Buttons & PSP_CTRL_TRIANGLE)		{			DumpBootBin();			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		if(pad_data.Buttons & PSP_CTRL_CIRCLE)		{			dump_filesystem("flash0:/", "ms0:/flash0");			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		if(pad_data.Buttons & PSP_CTRL_SQUARE)		{			dump_filesystem("flash1:/", "ms0:/flash1");			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		if(pad_data.Buttons & PSP_CTRL_CROSS)		{			dump_memory();			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		if(pad_data.Buttons & PSP_CTRL_LTRIGGER)		{			dump_flashrom(1);			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		if(pad_data.Buttons & PSP_CTRL_RTRIGGER)		{			dump_flashrom(0);			pspDebugScreenClear();			printf("!!!!!!!! DONE !!!!!!!!!!\n");			show_menu();		}		sceDisplayWaitVblankStart();	}	return 0;}

⌨️ 快捷键说明

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