Sony PSP程序开发简介

来源:互联网 发布:js中写点击事件方法 编辑:程序博客网 时间:2024/05/02 18:21
原文地址:http://gxcooo.spaces.live.com/blog/cns!5C98D9EBE201B94C!232.entry?_c=BlogPart
7个月前PSP在日本发售,4个月前在美国发售,2个月内即将在欧洲发售。然而, 在家里开发PSP程序已经成为现实.在这篇文章里我会介绍在这个小巧平台上进行编程的基本知识。
和其他console游戏平台一样,Sony从未想过让最终用户拥有在PSP平台上开发程序的能力。但是,通过逆向工程专家们的努力,几乎每个平台诞生的同时便可以在家里进行这个平台上的开发了。就PSP平台而言,两件事使这变为现实。第一件事是第一个发布版的PSP firmware中存在一个bug,这个bug只存在于最初几个月在日本售出的PSP中,利用这个bug可以执行未经签名的程序代码.第二件事是 nemnem写的'hello world'程序的发布.nemnem拆开了PSP,取下保存着firmware的闪存芯片并反汇编fireware.通过反汇编出的信息,nemnem 写出了他的'hello world'程序.在此基础上,ps2dev社区反向工程了剩下的fireware,终于制作出了一个可用的toolchain(译者注: toolchain 是 指一连串的编译工具,因为在编译源代码的过程中,会以序的被执行到,因此被称为toolchain)和sdk.
PSP内核基于 MIPS R4000.它包含CPU、FPU、和一个向量处理单元(vector unit : 进行向量和矩阵操作的协处理器)。这些单元组成一个Allegrex CPU核心。CPU的时钟频率可以在1Mhz和333Mhz之间任意调节。Sony为了保证PSP的使用时间将CPU频率限制在222Mhz。和CPU搭配使用的还有一个专用媒体处理CPU,它具有MP3、ATRAC3和h.264硬件解码能力。图形方面,PSP有一颗专用GPU,其具有光照、贴图、细分、像素操作和其他一些功能。PSP的主内存容量为32mb(译者注:原文是'mb',疑为MB,下同),其中8mb为内核使用,另外24mb供运行中的游戏使用。视频存储器容量为2mb。整个硬件配置和PS2非常相似,PS2有一个MIPS R5900内核,2个向量处理单元,32mb主内存和4mb视频存储器。任何熟悉PS2编程的人都会很适应PSP开发。
在家里进行PSP开发的前提条件是:1)熟悉c编程,2)toolchain,3)SDK,4)测试代码的平台。图形开发方面如果熟悉 framebuffer和OpenGL将会有很大帮助。现在PSP模拟器还处在初期阶段,离让人满意还差很大距离。可以用一个运行firmware1.0 或1.5版本的PSP作为测试平台。现在还没有办法在更高的firmware版本上运行未签名的程序。toolchain可以从http://www.oopo.net/consoledev或使用subversion在svn://svn.pspdev.org/psp/trunk/psptoolchain取得。toolchain包含 binutils、newlib和一个用来使gcc4支持Allegrex CPU的补丁。直接在linux或Cygwin的命令行下执行toolchain.sh就可以安装toolchain了。安装和配置Cygwin的细节并不属于本文所讨论的范畴,你可以在其他地方找到相关资料。toolchain.sh会从subversion服务器上下载并安装SDK。PSP SDK在开发时的一个目标就是完全合法化。这意味着没有一行代码是从泄露的商业SDK中拿来的。PSP SDK中的任何内容都是通过反向工程firmware和已经发布的游戏得来的。pspdev论坛上有如何将SDK集成到几种IDE中的介绍。
当安装完上述的工具并其可以工作时,你就可以开始在PSP上写代码了。看一下SDK带的例子是一个很好的开端。在linux上例子安装在 /usr/local/pspdev/psp/sdk/samples目录下。我们从sdktest这里例子开始。首先需要包含一些头文件:
#include <pspkernel.h>
#include <pspdebug.h>
#include <stdlib.h>
#include <string.h>
接下来是设置二进制文件的一些属性:
PSP_MODULE_INFO("SDKTEST", 0, 1, 1);
这些参数按顺序依次是:名称,标记,主版本号,次版本号。现在将标记设置为0。

接下来是一些相当标准的事情。下面几个函数用来设置相应home按键的退出回调函数。这些代码基本上是可以表达其含义的-大多数情况下你可以直接在程序中使用例子中的这些代码。在那些代码之后是通常的main()函数。这些对于书写可以编译并执行的代码来说已经足够了。(编译并允许一次sdktest还是值得的,这可以检验SDK是否配置正确)。在运行firmware1.0的PSP上,只需要复制make出的EBOOT.PBP到$ PSP/psp/game/sdktest就可以了($PSP代表你的PSP记忆棒在你的OS上的路径)。在运行firmware1.5的PSP上,使用 'make kxploit'代替'make'命令,这样会生成两个目录,将其全部复制到$PSP/psp/game/目录下。最后在PSP里选择UMD图标下面的 Memory Stick图标后,程序就会出现在PSP屏幕上了。
自此,你可以开始写一些代码了。你可以查看剩下的例子和SDK文档学会如何使用SDK。第二篇介绍图形和输入硬件细节的文章即将发布。
推荐资源:
http://wiki.pspdev.org, the ps[2,p] wiki
http://forums.ps2dev.org, the ps2dev 论坛。在发帖前请先搜索一下已有资源
http://www.pspwiki.org, 一个关于PSP信息的wiki.虽然 有些信息不太可靠,但是还是有一些有用的信息。
注意:不论何时提到ps2dev或pspdev,它们是可以互换的,代表同样的含义 :http://www.pspdev.orghttp://www.ps2dev.org 是可以互换的。但是psp-dev并不是ps2dev或pspdev,他们发布了1.5版的firmware exploit.

原文地址:
http://www.osix.net/modules/article/print.php?id=713
译者:
gxcoo Ω hotmail.com