//www.旧型、PSP開発幼稚園.game.jp/(本館) -81ページ目

DE、「TerrainSrc2.zip」簡単そうだから、さくっと済ませちゃお。(02/11)

前回までのあらすじ。
ドイツのサイト(品揃えが良い)→ソース21個DL→使えるサンプルは短い方が優秀→
reflectionsrc.zip人を舐めてんのか!→お!、「TerrainSrc2.zip」なら簡単そう

多少前回の流れとは違うような気もしますが、気のせいって事で。 真のタイトル:DE、「TerrainSrc2.zip」簡単そうだから、さくっと済ませちゃお。(2006-02/11) の巻。
あ、まだ頭がDGENから離れない方。このページは全く関係ないですよ。さくっと過去記事に飛ばそう。 (もう今日の事なんて過去過去)2006-02/11 D #11 UPdate1合成 えーと、今20:55、アーカイブ開けたばっかり、1時間もありゃおわるでしょ? で、今make書いた。 「startup.s」なんて危険な名前になってる。「startup.S」に変えないと消されちゃう。 で、Make、エラーでんがな。また例のレジスタ置換か。GCC対応してよ。めんどいよ。まあ直すか。 えーと、 $v0は$2 $a2は$6 $a3は$7 $t0は$8 $t1は$9 $a0は$16 $a1は$17 $raは$31 に直せば、アセンブル通ります。管理人だってPSPのアッセンブラ一片も判りませんから、 ご安心ください。今回はDGENのStartup.Sと突き合わせて考えましたが、 どうもこれはHOME終了じゃなくて、きちんと終われるタイプのSTARTUP.Sので、 お魚さんのソースから引っ張ってくれば、まったく同じかも知れない。責任は持ちませんが。 (上記をエディターで置換した方が安全です。) 例によってここで、ワーニングでるから。rodataをxodataにしましょうね。
.section .rodata.entrytable,"wa",@progbits __entrytable:
.section .xodata.entrytable,"wa",@progbits __entrytable:
もうこれくらい、覚えたでしょ?なぬ。いいかげん覚えろー何度もやってるんだから。
src/glvox.c:30:17: error: Sky.c: No such file or directory なぬーーーっ。そんなもんアーカイブに入ってないとりゃせんじゃないか。 で、glvox.cを見る。 // ******************************************************************* // Not yet used.. yet.. #include "Sky.c" //#include "Water1.c" 訳:まだ作って無いけどいるんでちゅ。 くううぅぅ。。..どいつもこいつもふざけたマネを。ああそお。で、コメントアウト。 src/glvox.c:437: error: 'SkyData' undeclared (first use in this function) ああそう、世界の何処にもなくてもいる訳ね。じゃあしょうがない。さっきのこめんとアウトを 外して、"Sky.c"を作る。中身はHelloWorldからでも抜いてこよう。どおせ適当な長さがあれば、 何でもいいんだろ。自分の作った別館からHW2A.ZIPを落としてくる。 落としてきて解凍したら即効消去。なーんかインターネットの使い方間違ってるかもしれんが、 既にそおいう時代だ。こいつのbitmap.cをSky.cにリネーム。 そんで、中身空けてこんな感じに直した。 // bitmap image for Hello World PSP const unsigned short SkyData[]={ 0x5881,0x54E6,0x54E6,0x54E6,0x54E6,0x以下略
なんかエラーでてる。 src/_clib.c: In function '_memset': src/_clib.c:151: error: invalid lvalue in increment src/_clib.c: In function '_memcmp': src/_clib.c:158: error: invalid lvalue in increment src/_clib.c:158: error: invalid lvalue in increment src/_clib.c: In function '_memcpy': src/_clib.c:166: error: invalid lvalue in increment src/_clib.c:166: error: invalid lvalue in increment make: *** [obj/_clib.o] Error 1 ソース見るとこんなん。 void _memset(void *d, const long s, unsigned long n) { for (; n>0; n--) *(((char *)d)++)=s; } int _memcmp(const void *s1, const void *s2, unsigned long n) { for (; n>0; n--) { if (*(((unsigned char *)s1))>*(((unsigned char *)s2))) return 1; if (*(((unsigned char *)s1)++)<*(((unsigned char *)s2)++)) return -1; } return 0; } void _memcpy(void *d, const void *s, unsigned long n) { for (; n>0; n--) { (*(((unsigned char *)d)++)=*(((unsigned char *)s)++)); } }
はいはい、直してあげますよ
void _memset(void *d, const long s, unsigned long n) { for (; n>0; n--) *(((char *)d++))=s; } int _memcmp(const void *s1, const void *s2, unsigned long n) { for (; n>0; n--) { if (*(((unsigned char *)s1))>*(((unsigned char *)s2))) return 1; if (*(((unsigned char *)s1++))<*(((unsigned char *)s2++))) return -1; } return 0; } void _memcpy(void *d, const void *s, unsigned long n) { for (; n>0; n--) { (*(((unsigned char *)d++))=*(((unsigned char *)s++))); } } で、いいんでしょ?で、コンパイル。outpatchがとうらんからそいつも治して(直す)。 と思ったけど、"USERPROG"だ。 「elf2pbp.exe」と「outpatch.exe」をDGENのフォルダから持ってこよう。念のため「*.out」を消して。 「ICON0.png」がないから、エラー。も一回。 今度はOK。なんかできた。でもこれなんのプログラムか知らんぜよ。仕方がない。ソース見よう。 怪しいことはしてないな。PG呼んで線かなんか書いてるだけの模様。 じゃあPSPに持ってってみるよ。仕方がない。 ぐげぇ動かない[HOME]も効かない。
のんびりやってるからそろそろ1時間立っちゃうよ。時間の無駄のような気もしてきたが、 こっちも意地だ。デバッグしたる。 まず、startup.sどおせ古いタイプだ。関数をSTABしまくってるSTAB登録マクロのところまで、 削除し、DGENのSTARTUP.Sを貼り付け。 関数のアドレスがいっしょでも、関数名は、いつも違うので、そこは残すんだよ。
元々入ってた奴。 略 \funcname: jr $ra nop .section .rodata.stubidtable .word \funcid .set pop .endm ここが切れ目 STUB_START "sceDisplay",0x40010000,0x00030005 STUB_FUNC 0x0E20F177,sceDisplaySetMode 略
DGENの奴(注:管理人が勝手に改造) 略 .word \funcid .set pop .endm ここが切れ目 STUB_START "sceDisplay",0x40010000,0x00110005 STUB_FUNC 0x0e20f177,sceDisplaySetMode # STUB_FUNC 0xdea197d4,sceDisplayGetMode 略
だからな。 切れ目以降は残すんだぞ。切れ目までが「頭」。切れ目以降が「体」だとすると、 「頭」を削除して、DGENの「頭」をコピーして貼り付け、保存だからな。判ったな。 で、エラー。 psp-gcc-4.0.0 obj/startup.o obj/glvox.o obj/pg.o obj/_clib.o -nostartfiles -Wl ,-Ttext=0x08900000 -o moya.out obj/pg.o: In function `pgExit': pg.c:(.text+0xff0): undefined reference to `__exit' obj/pg.o: In function `pgMain': pg.c:(.text+0x2060): undefined reference to `__exit' collect2: ld returned 1 exit status make: *** [moya.out] Error 1 訳:「__exit」なんてねーよ。 はいはい、わかったよ。[HOME]終了のスレ追加して、PGのexit消したる。 が、ちとトイレ。(管理人人間です。ロボットじゃありません。いいからはよトイレ逝け!!) なんだか管理人疲れてきたし、アメブロも混んできたからこの辺で止めるか。(今22:07) でも、あとちょっとなんだよなぁ。
もういいや[]
// while(app_running) for(;;) {
void pgExit(int n) { pg_terminate=1; // terminate subsystem preprocess pgaTermPre(); // terminate subsystem pgaTerm(); // __exit(); }
にした。一番はじめにコメントになってるのとふぉrが管理人のいじった所。 これで動かなければ、ねる。動いたら、終了できないから、電源スイッチ長押し。 これでいいだろ!
動きやがった。 もわもわしてる地面。コマンチみたいなデモだ。 しょうがない。別館に上げとくが、終了できんぞ。明日終了を付け加える。今日はもう寝る。 お休めなさい。