欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[轉]我也玩PSP開發!(2)—— PSPSDK示例 源碼

系統 1613 0

放假啊,這叫玩啊,天天不務正業,還玩些可能和未來工作無關的技術!內心充滿了罪惡感啊

寫HelloWorld太無聊了,轉了一圈PSPSDK發現有自帶sample,方便快速上手的好東西,位置在開發包/psp/sdk/samples下 面,其中包括聲音,控制器,紅外,usb,wifi,電源等等。還真不少,先挑簡單的看看。恩~~我看controller挺簡單!就看這個!


打開controller/base目錄,只有一個main.c 和 Makefile。肯定不會很難,先make一個試試,還好很順利,編譯得到四個文件: main.o controller_basic.elf EBOOT.PBP PARAM.SFO。
main.o 不用說肯定是main.c的生成的目標文件。
controller_basic.elf 我知道ELF是linux下的二進制文件格式,可能PSP也是這個格式。
EBOOT.PBP 這個就是最終的執行文件了,這個應該是包裝過的,其中包含一些圖標文件什么的。
PARAM.SFO 這個我就不知道,有高手可以告訴我,(我懷疑!我猜測!是源碼中定義的那些宏有關,是一些信息,最后打包到EBOOT.PBP。不要太相信,只是個思路)。

然后就是插上usb,靠到psp/game下,建個文件夾,叫什么名都可以!然后把EBOOT.PBP(不要改名字!)放進去,運行就可以了。

也看了運行后什么模樣了!下面就是分析源碼了,分析都寫成注釋了!

以下是源碼:

/**/ /*
*PSPSoftwareDevelopmentKit-
http://www.pspdev.org
*-----------------------------------------------------------------------
*LicensedundertheBSDlicense,seeLICENSEinPSPSDKrootfordetails.
*
*main.c-BasicInputdemo--readsfromcontrolpadandindicatesbutton
*presses.
*
*Copyright(c)2005MarcusR.Brown<mrbrown@ocgnet.org>
*Copyright(c)2005JamesForshaw<tyranid@gmail.com>
*Copyright(c)2005JohnKelley<ps2dev@kelley.ca>
*Copyright(c)2005DonourSizemore<donour@uchicago.edu>
*
*$Id:main.c10952005-09-2721:02:16Zjim$
*/


/**/ /* psp的一些頭文件,從文件名應該能看出來時干嘛使得 */
#include
< pspkernel.h >
#include
< pspdebug.h >
#include
< pspctrl.h >

/**/ /* pspsdk中自帶標準c庫和標準c++庫 */
#include
< stdlib.h >
#include
< string .h >


/**/ /* 定義模塊信息包括版本 */
/**/ /* Definethemoduleinfosection */
PSP_MODULE_INFO(
" CONTROLTEST " , 0 , 1 , 1 );

/**/ /* 定義主線程屬性還沒具體研究,有時間再改上 */
/**/ /* Definethemainthread'sattributevalue(optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER
| THREAD_ATTR_VFPU);


/**/ /* 這個純屬為了方便pspDebugScreenPrintf的用法和c庫中的printf用法完全一樣,不過pspDebugScreenPrintf只能用在初始化了DebugScreen以后 */
/**/ /* Defineprintf,justtomaketypingeasier */
#define printfpspDebugScreenPrintf

void dump_threadstatus( void );

/**/ /* 下面的代碼會看見,這是控制主循環推出的條件變量 */
int done = 0 ;

/**/ /* 當用戶按下home鍵退出時的回調函數 */
/**/ /* Exitcallback */
int exit_callback( int arg1, int arg2, void * common)
... {
/**/ /* 讓主循環推出 */
done
= 1 ;
return 0 ;
}


/**/ /* 這么看來需要一個專門的線程來監聽用戶的操作,建立這么一個線程監聽用戶來調用相應的回調函數 */
/**/ /* Callbackthread */
int CallbackThread(SceSizeargs, void * argp)
... {
int cbid;
/**/ /* 創建一個ExitCallback回調函數返回一個類似handle的東西 */
cbid
= sceKernelCreateCallback( " ExitCallback " ,exit_callback,NULL);
/**/ /* 在把這個回調函數注冊商 */
sceKernelRegisterExitCallback(cbid);
/**/ /* 讓他睡眠當用戶要退出的時候會喚醒 */
sceKernelSleepThreadCB();

return 0 ;
}


/**/ /* 這個純粹是為了模塊化了,把安裝回調函數的代碼都寫著里了 */
/**/ /* Setsupthecallbackthreadandreturnsitsthreadid */
int SetupCallbacks( void )
... {
int thid = 0 ;

/**/ /* 創建那個回調函數線程 */
thid
= sceKernelCreateThread( " update_thread " ,CallbackThread,
0x11 , 0xFA0 , 0 , 0 );
if (thid >= 0 )
... {
/**/ /* 開始執行 */
sceKernelStartThread(thid,
0 , 0 );
}


return thid;
}


int main( void )
... {
SceCtrlDatapad;
/**/ /* 控制器的結構體 */


pspDebugScreenInit();
/**/ /* 初始化DebugScreen這樣可以用pspDebugScreenPrintf在上面輸出了 */

/**/ /* 那個回調函數線程 */
SetupCallbacks();

/**/ /* 好像是什么取樣周期,莫非可以設置游戲時連發的速度,默認是0 */
sceCtrlSetSamplingCycle(
0 );

/**/ /* 控制器的模式有數字(PSP_CTRL_MODE_DIGITAL)和類比(PSP_CTRL_MODE_ANALOG)兩個這里用的是類比的 */
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);

/**/ /* done!那個主循環變量 */
while ( ! done) ... {
/**/ /* 設置光標的位置 */
pspDebugScreenSetXY(
0 , 2 );

/**/ /* 讀取用戶的輸入,psp沒鍵盤,就是那些按鍵了 */
sceCtrlReadBufferPositive(
& pad, 1 );

/**/ /* 類比搖桿的坐標 */
printf(
" AnalogX=%d " ,pad.Lx);
printf(
" AnalogY=%d " ,pad.Ly);
/**/ /* 其他按鍵的判斷,按了哪個就輸出相應的文字,用宏都表示出來了,看名字可以看出來 */
if (pad.Buttons != 0 ) ... {
if (pad.Buttons & PSP_CTRL_SQUARE) ... {
printf(
" Squarepressed " );
}

if (pad.Buttons & PSP_CTRL_TRIANGLE) ... {
printf(
" Trianglepressed " );
}

if (pad.Buttons & PSP_CTRL_CIRCLE) ... {
printf(
" Ciclepressed " );
}

if (pad.Buttons & PSP_CTRL_CROSS) ... {
printf(
" Crosspressed " );
}


if (pad.Buttons & PSP_CTRL_UP) ... {
printf(
" Uppressed " );
}

if (pad.Buttons & PSP_CTRL_DOWN) ... {
printf(
" Downpressed " );
}

if (pad.Buttons & PSP_CTRL_LEFT) ... {
printf(
" Leftpressed " );
}

if (pad.Buttons & PSP_CTRL_RIGHT) ... {
printf(
" Rightpressed " );
}


if (pad.Buttons & PSP_CTRL_START) ... {
printf(
" Startpressed " );
}

if (pad.Buttons & PSP_CTRL_SELECT) ... {
printf(
" Selectpressed " );
}

if (pad.Buttons & PSP_CTRL_LTRIGGER) ... {
printf(
" L-triggerpressed " );
}

if (pad.Buttons & PSP_CTRL_RTRIGGER) ... {
printf(
" R-triggerpressed " );
}

}

}


/**/ /* 徹底退出了 */
sceKernelExitGame();
return 0 ;
}

以上就是這個sample了,一點也不難!還算是再玩得程度,不過開發包公布出來的函數還真是少的可憐啊!要想寫出更好的東西,那就要看對開源代碼庫的移植了!

[轉]我也玩PSP開發!(2)—— PSPSDK示例 源碼分析


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成片免费观看视频大全 | 中文字幕亚洲一区二区三区 | 欧美jizzjizz在线播放 | 午夜在线精品偷拍 | 国产一区二区免费 | 欧美一级久久 | 亚洲精品成A人在线观看拍拍拍 | 色噜噜影院 | 欧美视频三区 | 成人三区 | 女人一级毛片免费视频观看 | 日韩精品视频美在线精品视频 | 久久久精 | 网站在线观看 | 欧美精品免费在线 | 亚洲一区二区三区久久 | 欧美一级片在线看 | 性夜影院爽黄a爽免费看网站 | 欧美色伊人 | 亚洲第一视频区 | 日本高清18xxxx | 成人爽a毛片免费啪啪红桃视频 | 斗罗破苍穹在线观看免费完整观看 | 欧美地区一二三区 | 国产精品综合色区小说 | 久久国产精品一区二区 | 亚洲天天更新 | 午夜视频直播 | 国产男女交性视频播放 | 天天成人综合网 | 亚洲一区在线免费观看 | 亚洲欧美色国产综合 | 毛片免费软件 | 91网站在线看 | 鲁丝片一区二区三区免费 | 亚洲日本视频 | 91看片官网 | 爱爱视频网站 | 亚洲a网 | 久久人 | 国产成人91高清精品免费 |