先我假设你已经安装了cygwin(也可以不要),并且安装了DevkitPro,知道怎样生成eboot.pbp并且放入psp中运行,那就往下看。否则重新阅读前面的教程。也许你还要再修炼一下C或者C++。
在正式进行工作前,我们先要安装一些SVN的新库文件。也许你要问SVN是什么,它是一个版本管理程序,适合许多人开发一个项目。http://subversion.tigris.org/下载并安装它。我们需要使用zlib和libpng这两个
库。
运行cygwin,在窗口下键入
svn checkout svn://svn.pspdev.org/psp/trunk/zlib
得到如下结果:
这时在cygwin\home\的用户名目录中就会得到zlib文件夹
键入:
cd zlib
make
make install
得到如下结果:
继续:
cd ..
svn checkout svn://svn.pspdev.org/psp/trunk/libpng
cd libpng
make
make install
在cygwin\usr\local\psp\lib目录中就得到了libz.a和libpng.a
rm -Rf zlib
rm -Rf libpng
(其实所有的操作在dos窗口下同样可以,可以不用cygwin)
现在可以开始了,首先下载this,接着往下看:
把
framebuffer.h framebuffer.c graphics.h graphics.c ourimage.png解压到当前目录
接着新建main.c或者main.cpp(把前面文件后缀也改为cpp)加入以下代码:
/*
My Image Display Program
Author: Brad Dwyer
翻译:Fan;2006,1,1
Date: 12/28/2005
Thanks to Psilocybeing for the base code.
*/
头文件如下:
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <stdio.h>
#include <png.h>
#include "graphics.h"
/* Define the module info section */
PSP_MODULE_INFO("first_psp", 0, 1, 1);
/* Define the main thread's attribute value (optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
/* Define printf, just to make typing easier */
#define printf pspDebugScreenPrintf
void dump_threadstatus(void);
/* Exit callback */
int exit_callback(void)
{
sceKernelExitGame();
return 0;
}
/* Callback thread */
void CallbackThread(void *arg)
{
int cbid;
// printf("\nCallback Thread Status:\n");
cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", (SceKernelThreadEntry)CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
以上代码主要实现程序的退出线程
int main(int argc,char *argv[])
{
char path[255];
strcpy(path,argv[0]); //获取路径
*(path+strlen(path)-9)='\0'; //之所以-9是去掉末尾eboot.pbp字符串。
SetupCallbacks();
pspDebugScreenInit();
printf("\npath=%s\n",path); //显示路径。
char buffer[200];
Image* ourImage; //以下代码都封装在graphics.h和png.h中
initGraphics();
sprintf(buffer, "ourImage.png");
ourImage = loadImage(buffer);
printf("\nbuffer=%s\n",buffer);
if (!ourImage) {
//Image load failed
printf("Image load failed!\n");
} else {
int x = 0;
int y = 0;
sceDisplayWaitVblankStart(); //等待屏幕垂直扫描结束,可以去掉它试一下结果。
while (x < 480) {
while (y < 272) {
blitAlphaImageToScreen(0 ,0 ,32 , 32, ourImage, x, y);
y += 32;
}
x += 32;
y = 0;
}
flipScreen(); //翻转屏幕缓冲区,否则无法显示更新的内容
}
sceKernelSleepThread();
return 0;
}
主程序完成。
下面是makefile文件的设置:
TARGET = First_Psp
OBJS = main.o framebuffer.o graphics.o //目标文件
INCDIR =
CFLAGS = -O3 -G0 -Wall -mgp32 -mlong32 -g //对于大的项目可以先使用-O0或者-O1调试。
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS =
LIBS=-lpsppower -lpspgu -lpng -lz -lm //连接库
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = first_game
PSP_EBOOT_ICON = NULL
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG = NULL
PSP_EBOOT_SFO = PARAM.SFO
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
最后一步,键入:
make
如果没有错误的话,当前项目目录会生成eboot.pbp
将其转换后和ourimage.png放入psp测试。你将得到一个充满全屏幕的网格图案
这个例子显示部分用到了sceGu有关的函数,以后我会专门将它们详细介绍。要想深入psp编程就要对其内核函数熟练运用,显然这个例子不具备这个功能。
原文地址如下:
分享到:
相关推荐
标题中的"PSP刷机.rar"指的是为PlayStation Portable(PSP)掌上游戏机进行固件更新或系统修改的过程,通常是为了安装自制软件、增强功能或者运行未授权的游戏。这个压缩包文件可能包含了用于刷机的所有必要工具和...
著名黑客someone发布了6.60官方系统降级程序6xx_downgrader_v4,该降级程序支持PSP1000、2000、3000和PSPgo的主板为01G,02G,03G,04G,05G,07G,09G。 6.XX Downgrader是一款给官方系统的PSP进行降级的程序,使用它...
本主题聚焦于“psp 2000(v3)psp3000可用fc金手指”,这表示这些金手指是专门为索尼PlayStation Portable(PSP)的两个特定型号——PSP 2000 v3 和 PSP 3000 设计的。这些金手指不适用于所有PSP型号,如PSP 1000...
【PSP CTF主题与PSP美化】 在个人数字娱乐领域,PlayStation Portable(PSP)是一款备受喜爱的游戏掌机。为了使用户拥有更加个性化和独特的体验,PSP支持CTF(Custom Theme Format)主题,这使得玩家可以改变游戏...
我试过了!觉对可以将急!还蛮好用的! 1:先解压PSP6.60降级到6.20.rar ...4:复制解压的psp文件夹到(psp上),要是提示是否覆盖选择是,这里只会覆盖game文件夹! 最后 直接打开小p在游戏里运6.20就可以了
《PSP官方系统6.61详解:兼容性与功能解析》 PSP(PlayStation Portable)是由日本索尼公司推出的便携式游戏机,自2004年首次发布以来,凭借其强大的游戏性能和多媒体功能,赢得了全球众多玩家的喜爱。在PSP的发展...
【标题】"PSP6.61官方系统"是指PlayStation Portable(PSP)游戏掌机的第六次重大系统更新,版本号为6.61。这个系统固件升级主要目的是提升系统的稳定性和兼容性,同时也可能包含了一些新的功能或者对现有功能的优化...
标题"PSP官方系统6.39.rar"表明这是一个与PlayStation Portable(PSP)设备相关的文件,具体来说,是该设备的操作系统更新至版本6.39的档案。PSP是一款由索尼公司推出的掌上游戏机,具有强大的多媒体功能,包括玩...
PSP(PlayStation Portable)是一款由索尼公司推出的掌上游戏机,其系统版本历经多次更新,其中6.60是一个较为常见的系统版本。在PSP游戏社区中,“金手指”是一个术语,指的是通过修改游戏内存数据来实现作弊效果的...
标题“PSP3.71升级固件包”指的是针对PlayStation Portable(PSP)游戏机的系统固件更新,版本号为3.71。这个固件升级旨在改进设备的功能,修复已知问题,以及可能增加对新游戏或媒体格式的支持。固件更新对于保持...
在IT领域,PSP(PlayStation Portable)是一款由索尼公司推出的便携式游戏设备,它以其强大的游戏性能和多媒体功能深受玩家喜爱。本资源“PSP图标顺序管理.rar”是针对PSP用户的一个实用工具,专门用于管理PSP游戏主...
标题中的"PSP官方系统5.00.rar"指的是PlayStation Portable(PSP)游戏设备的固件更新文件,版本号为5.00。PSP是由索尼公司开发的一款掌上游戏机,它不仅用于游戏,还可以播放音乐、视频、浏览图片,甚至上网冲浪。...
标题中的“PSP光驱屏蔽插件”是指针对PlayStation Portable(PSP)游戏机的一种特殊软件工具。PSP是一款由索尼公司推出的便携式游戏设备,它配备了一个内置的光驱,主要用于读取UMD(Universal Media Disc)游戏和...
《PSP ISO Compressor 1.4:优化存储空间的高效工具》 PSP ISO Compressor 1.4是一款专为PlayStation Portable(PSP)用户设计的ISO文件压缩工具,旨在帮助玩家更加有效地管理他们的游戏库,节省宝贵的存储空间。在...
【PSP 1000 维修资料详解】 PSP(PlayStation Portable)1000是一款由日本索尼公司推出的便携式游戏机,自2004年发布以来,因其强大的游戏性能和多媒体功能,深受全球玩家喜爱。这份维修资料主要针对PSP 1000的硬件...
【psp CMF金手指】是一种在PSP(PlayStation Portable)游戏机上使用的修改工具,主要用于游戏的作弊和优化。CMF(Cheating Made Fun)金手指是PSP玩家社区中广泛流行的软件,它允许用户在游戏中开启各种作弊功能,...
【FC3.71】PSP金手指3.71是专为PSP2000型号游戏机设计的一款作弊工具,它允许玩家在游戏中启用各种修改功能,如无限生命、无限子弹、快速升级等,从而提升游戏体验。PSP金手指的概念源自早期家用游戏机的作弊代码,...
PSP,全称为PlayStation Portable,是索尼公司推出的一款便携式游戏掌机。这款设备以其强大的游戏性能和多媒体功能赢得了广大玩家的喜爱。在本文中,我们将深入探讨关于" PSP官方固件6.35升级包 "的相关知识,以及...
标题中的“idstoragemanager”指的是PSP(PlayStation Portable)设备上的一个应用程序,它主要用于管理PSP的密钥备份。在PSP游戏系统中,密钥存储着重要的安全信息,比如游戏的版权验证和系统权限。这个工具,即...
随后,在2005年6月,PSP-DEV团队发现了一种名为kxploit的方法,使自制软件能够在1.5固件版本上运行,这极大地推动了PSP Homebrew的发展。同年9月,PSP在欧洲市场正式发售,并且libTIFF漏洞被曝光,使得用户可以将2.0...