PSP自作ソフト開発スレ ver.13
■ このスレッドは過去ログ倉庫に格納されています
*****完全sageマターリ進行!*****
自作ソフト開発者向けスレッドです。
要望・クレクレなどは作者本人が望んだ場合以外スルーで。
前スレ
PSP自作ソフト開発スレ ver.12
http://yuzuru.2ch.net/test/read.cgi/gameurawaza/1298123458/ >>409
プラグインのstubにパッチするなら競合はしないんじゃ?
人任せにするより自分で対応できるならそっちの方がいいかなと 設定ファイルのパスを調整するためにわざわざプラグインをもう一つ作る意味がわからん 対応してないプラグイン作者に一人一人お願いしたりアップデート毎にバイナリ弄ったりするよりかは
プラグイン一つで全てのプラグインを対応させてしまう方が楽だと思うが
意味分からんか? 無駄にプラグイン増やすのは不具合起こすリスク上がるし得策とは思わねーわ
ms0をef0に置き換えるくらい文字数同じだから楽だろ >>413
元は>>402ここ
ms0/ef0はあまり関係ない アプリにしろプラグインにしろ、インストールする場所を変更できないのは
間違っているわけではないが、変更できるように柔軟な作りをしたほうが丁寧であると思う
さらに、PSPのシステム側で起動時のフルパスをmainやmodule_startに渡しているんだから
利用するに越したことは無いと思う
>>410
stubにパッチするプラグインが二つあったら競合するような気がするんだが? ただやり方は複数あるって話でしょ。
どれもメリットデメリットがあるんだし。
一番いいのは開発者が対応することだろうけど。 dxlibpの音楽再生関数使って、プチ音なしに再生できたヤシいる?
効果音再生するたびにプチプチ言ってうざいんだがw 効果音をロードするタイミングが重要
自分はBGMより先に読み込むとうまくいった PS3のダウングレードに使用するPSPプログラムを作ろうと
いろいろなサイトや実験である程度ヒントがつかめました。
具体的には3.73->3.55にダウングレードをPSPのみ本体改造なしで
できそうな感触です。
プログラミングはスキルは中の下のレベルですが開発のヒントになりそうな
情報をいただければ幸いです。
現状を幾つか分割して説明します。 今現在基本的なソースは
int copyFile(char* from,char* to){
printf("GO!\r\n");
fd = sceIoOpen(from, PSP_O_RDONLY, 0777);
fd2 = sceIoOpen(to, PSP_O_RDWR|PSP_O_TRUNC , 0777);
long remain = 200000000;
while (size!= 0) {
size = sceIoRead(fd, buff, 131072*64);
remain = remain - size;
sceIoWrite(fd2, buff, size);
printf("Remaining: %d \r\n",remain);
}
printf("DONE!\r\n");
sceIoClose(fd);
sceIoClose(fd2);
return 0;
}
です。やりたいことはWhile以下のソースが実行される前に
ms0:PS3/UPDATE/PS3UPDATE.PUPがPS3に何バイト転送されたかを
プラグインで計測したいのです。 そして計測された値が特定の値に達した場合、既存のPUPファイルを
上書きし、3.73のファイルと3.55のファイルをすり替えて
確認シーケンスをパスしようとしています。
今のところの実験ではリカバリモードでの試しで
4つある認証のうち3つまで上記のプログラムでパスできてます。
4つめの認証は自動販売機のぼたん・つり銭同時押しなみに難しく
いくつかパターンがあります。
PS3解析に書くべきか迷ったのですが、どうか宜しくお願い致します。 PS3ってファイルすり替えでダウングレードできちゃう糞セキュリティなの?w そこに山があるから登るように、と申しましょうか。
クソとまでは言えないと思います。100回以上確認してますが
ファイルスワップでは簡単にはいけません。
PS3のファイルすり替えに関してですが以下のようになっています。
リカバリモードを例にとると
・USBストレージを一度でもとると(他のものに効果したり)アウト
・自己バージョン以上のファイルでないとアップデータが見つからない
あるいはファイルが壊れています、とでる。
などなど。
いまのところシステム領域をわざと破壊して(トロフィーとかは残る)
リカバリモードに入り、特定のタイミングで3.73のファイルを3.55のファイル
に上書きすることで3.73のインストール画面+アップデータをチェックしています
の画面にまでには達しています。(当然そこまででエラーが発生しますが)
要点は特定のタイミングで(今はストップウォッチで計測w)ここでいう
上書きのタイミングを手動ではなく、自動でできないか、PS3にUSBストレージ
から転送されたバイト数をカウントしてそこから上書きが開始されないか。
です。
考えられる他の手法としてはUSBストレージのファイルが読み込まれている時は
他のプロセスからアクセスを禁止できないものでしょうか?
C#とかはできそうなんですが、対応外ですし・・・
出来たら面白そうだなぁ
やるならとりあえずUSB関係の関数をフックして
パケットを解析するならディレイ入れてみるなりしてみると良いんじゃないかね
Remotejoyliteとか参考になるかと思ったが、使うドライバが違うんだよなたしか・・ >>428
フックですか・・・これは大変だ。
参考資料とかございますか?
一応個人的にはPRXの作り方とUSB周りのイジリ方の参考ってことで
USB.prxのソースコード参考にしてます。
PS3持ってるの人間はPSPも大抵持ってるので
プログラム一つで分解なしでダウングレードできたなら
結構なことですよね。また対策されるでしょうけど。 PS3関係のPSPプラグインって
usbversionfake.prxぐらいしか無いよね。 >>430
それもソースがなさそうなのでデコンパイラ通さないと
参考にするのはむずかしいという・・・ >>433
おお・・・ありがとうございます。
余談ですが、PS3UPDAT.PUP自体をリネームして
3.55と3.73を入れ替えるプログラム作って見ましたが
こいつはよそう通りだめでした。PS3側でファイルのポインタを
持ってしまっているのでどう名前が変わっても途中から名前が変わっても問題ない
ってことですかね。
>>434
PS3のダウングレードについて調べてみたんだが、特殊な機器が必要みたいだぞ?
ファイルのすり替えでダウングレードできるほど甘くないのでは? >>434
スワップははい、当初からだめだろうと思ってました。
過去のDGはドングルとかが必要ですが、3.56以降のDGについては
おっしゃるとおりプログスキート等ハンダ付けをする何れにしても
PS3を解体しないといけないのですが、そこにあえて>>436さんが
おっしゃっているように安価・容易なPSPでDGに挑戦してみるか、が
趣旨です。場合によっては脱線してマイコンいじりだすかもw 海外のハッカーでもできなかったPSPのUSBドングル化が日本人の手によって実現するのか。
もしかして>>437はスーパーハッカーなのか!?
どう見ても釣りだろ
もしくは知ったか
PS3UPDAT.PUPがダイレクトリードなのかポインタリードなのかさえ分かってないし
たとえUSBドライバを改変できたとしてもデバイスID自体変えることが出来ないから海外勢が諦めたんだぞ
libusbからドングルをスニファしてみ
某ハッカーが公開してたマジックキーとスニファしたパケット内のマジックキー同じだと思う? アップデータを読み込むバッファーの差し替えもしくは上書きもダメかな。
アドホック通信関係のプログラムの解説サイトって何か無いでしょうか? >>442
昔見つけたやつ。(英語)
>this programme NEEDS to be started in kernel mode for this to work.
らしいので注意
http://forums.qj.net/guides-psp-development/55788-adhoc-tutorial.html >>443
ありがとうございます。なかなか情報が見つからないので困っていました。
ところでkernel modeとはどういったものでしょうか?
CFWの状態であればkernel modeだと認識しているのですが合っていますでしょうか? >>444
KernelModeってのはカーネルメモリーに読み込まれたコードが実行されるれること。
これに対し、ユーザーメモリーからはUserModeと呼ばれる。 え、モードと言うように権限(特権)の違いだと思うが >>445->>447
皆さんありがとうございます
wikiにも詳しい解説がありましたのでそちらも参考にしました
>>448
探し方不足かもしれませんが見つかりませんでした。
ヘッダファイルとにらめっこしながら書くことにします
ありがとうございました 横だけど
■ ELF_UserMode形式
C:/pspsdk/psp/sdk/samples/template/elf_template
通常ELFのサンプル。「ユーザーモード。」
■ PRX_UserMode形式
C:/pspsdk/psp/sdk/samples/template/prx_template
通常PRXのサンプル。「ユーザーモード。」
■ PRX_KernelMode形式
C:/pspsdk/psp/sdk/samples/template/kprx_template
カーネルモードPRXのサンプル。「カーネルモード。」
■ ただのライブラリ(形式もへったくれもない)
C:/pspsdk/psp/sdk/samples/template/lib_template
ライブラリのサンプル。
ライブラリの場合、特別な処理は要らないと言いたいらしい。
「ユーザーモード/カーネルモード自体関係無い。」
■ 上記サンプルに無いけど、順列組み合わせでいけば、当然
通常ELFのサンプル。「カーネルモード。」
ELF_KernelMode形式 ってのも考えられるよね?
★ 初期OFW1.50では ELF_KernelMode形式 は起動出来る。
これは「1.5カーネル」とかあだなで言われる。
(この1.5とはOFW1.50の事を指す。OFW1.50で起動できた形式って意味)
初期自作ゲームでソースが公開されていないものは、
大抵「1.5カーネル」で作ってあり、現在は起動できない。
「1.5カーネル」をサポートするプラグインとか入れても(実際は)起動できなかったりする。
そこで「TimeMachine」という方法で起動する。
この方式の「EBOOT.PBP」をweb公開する場合は、
どう頑張っても起動できないpspがあるので、ソース添付するなどの配慮が必要。
★ つまりアドホックのサンプルをそのまま動かす為には、最低 2台以上のpspで
CFWのversionを下げたり「TimeMachine」を導入したりする必要がある。
■ アドホックのサンプルが要求しているのは、この「1.5カーネル」の事。
しかし、サンプルを少し書き換えて、
PRX_KernelMode形式(UserModeELF形式EBOOT.PBP + 外部_KernelMode形式PRX)でも
外部PRXの内部だけならアドホックは動作すると思われる。
CFWのversionを下げたり「TimeMachine」を導入したりする必要がないので、
現在では「アドホック」対応は、この方法が最も良いと思われる。
■ まとめると「アドホック」に対応していないのは、
「開発に2台以上pspが必須」+「めんどくさい」+「動作するpspを選ぶ」という問題点がある。 ライブラリーにもKernelとUserの二種類あるよ。
Kernel用のライブラリはUserじゃ使えない ソースあるんだから今のバージョンに合わせて作れば良いだけじゃん
開発中はトレースするプログラムでも作っとけよ 誰か時刻取得の方法教えてくれないか?
ggってもなかなかでないw >>453
LiteMP3kaiって使ってなかったけ? >>453
psprtc.h見るとわかるよ。
sceRtcGetCurrentClockLocalTimeで取得。
連投スマソ。
rtc使うときはMakefileのLIBSに-lpsprtcを追記。 >>453
ヘッダをtimeでgrepすれば出てくる
その他のライブラリもヘッダを適当な単語でgrepすればある程度出てくる
PS3JIGのPRX移植版作ってみて2000以降のPSPに対応できるようになったけど
もともとも本当に成功率低いらしいですね。
ナンダッタンダオレノドリョクハ >>460
もともとのPS3JIGの使い方がよく分からない、サービスモードに入るものだと
考えてたんですが違うんでしょうか・・・ 環境は4.00で試してみて反応無しで
3.55だと微かに画面にデータが吐き出されるだけでした。
というレベルの人間が突っ走って作ってみたんですが、ご希望があればうpします。 >>453
検索の仕方が悪いのにgoogleのせいにするのはどうかと。
×時刻取得の方法
○現在時刻の取得方法 453の者ですが
皆さんのおかげで無事できました!
これからは検索の仕方にも気おつけます。。。 >>459
元々2000で動いたような気がするんだが・・
>>460
お前はちゃんとPS3JIGについて調べたのか? もしかしてv1.50じゃないとusb\storage のサンプルってもしかしてフツーにメイクしても動かない?
Vitaでエミュの動作に期待
でもVita自体PSPをエミュレートしてるわけだから
PSP以上の速度出せるのかな? >>472
エミュレートしてるけどオーバースペックだから
それでも性能はPSP以上 >>473
おお
HBLが出たらまた盛り上がりそうだ
wololo氏達頑張ってくれ あけましておめでとうございます
今年もよろしくお願いいたしますほしゅ 深度バッファって2Dの場合は必要ないもの?
必要ないなら削りたいんだけど >>477
使うなら必要だし、使わないなら必要ない。
PSP自作ソフトプログラミング/開発wiki の過去ログを辿ってきたんですが、
psptoolchainの質問はここでおkですか?
このスレでも何度か名前の挙がっている、Wololo氏のサイトに関するものなのですが。 http://wololo.net/wagic/2010/07/10/compiling-aquaria-on-the-psp-download-included/
またお前か! と言われかねないのですが、Wololo氏の上記ページに記されている作業を、
素人なりに自力だったり助力を得たりしつつ後追いしながらやってます
質問は、上記ページ Tweaking the Makefile 項目内の、
004-newlib-1.16.0.shの再インストールで手詰まりしてまして、
どのようにしたら良いかアドバイスをもらえないか、という事でさせていただきました
エラー内容は ターミナルで psptoolchain/scripts に移動後、
sudo ./004-newlib-1.16.0.sh を行うと、最後に
/bin/bash psp-cc: ファイルが見つかりません というエラーが出てしまいます
スクリーンショット
http://www5.puny.jp/uploader/download/1327649795.png (パス2ch)
ここまでやった全作業をテキストにまとめたもの
http://www5.puny.jp/uploader/download/1327649421.txt (パス2ch)
解決方法わかる方いらっしゃいましたら、アドバイスをお願いしたいです ccとcppとc++は拡張子が違うだけ というような記述をネットで得たので、
cp コマンドで psp-cppなどを /binに移動し、
rename で psp-cc と改名したら、ファイルが見つからないではなく別のエラーになったので、
素人知恵ながら、この方面でいいのかな、と予測していますが、どうなのでしょうか
また、その直後の作業で、
psptoolchain/scripts/newlib-1.16.0/newlib/stdlib.h
psptoolchain/scripts/newlib-1.16.0/newlib/libc/stdlib/strtod.c
の2つを編集する必要があると思うのですが、004-newlib-1.16.0を再インストールできていないからか、
この2つが該当ディレクトリ存在していないようです
長文になってしまったので、二分割になりました
宜しくお願いします >>487
psp-cc: psp-cc: "-c"はプリプロセッサに対する正常なオプションではありません
リネームの必要のない /usr/local/pspdev/psp/bash/psp-cc を /bash へコピーしても同じでした もしubuntuを使ってるならreadme-ubuntu.txtの通りにやれば出来るはずだけど。
.profileか.bashrcにpathの記述してないとかは無いと思うけど。 どうしてもこの作業を最後までやりとげたいので、もう一度最初からやってみます
sceGumMatrixMode( GU_MODEL );
sceGumLoadIdentity();
sceGumRotateX( X );
sceGuDrawArray( GU_SPRITES, GU_TEXTURE_32BITF|GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, v );
こういった感じのコードを書いたんですけど
何故か回転してくれません(描画自体はされます)
何か回転を無効化する関数などがあるのでしょうか
原因に思い当たる節のある方が居らっしゃるようでしたら教えてください
お願いします × sceGuDrawArray
○ sceGumDrawArray
つC:/pspsdk/psp/sdk/samples/gu/cube/cube.c >>493
その関数について調べてみたら正にそれが原因だと思われたので
早速sceGumDrawArrayに書き換えて実行してみたのですが何故か回転してくれませんでした…
とはいえ貴重かつ重要な情報ありがとうございました
GU_SPRITESやGU_DEPTH_TEST周辺の関係も調べてみます GU_TRANSFORM_3Dじゃないと、座標変換されないんじゃね? >>495
どうしてこんなことにも気付かないのかと落ち込みながら実行してみたのですが駄目でした。
まず初めにGU_TRANSFORM_2DからGU_TRANSFORM_3Dへの書き換えのみで
実行してみたのですが表示自体されなくなってしまいました
また深度バッファを疑い、sceGuDisable(GU_DEPTH_TEST)を加筆
vertex構造体のzが0.0fになっているのを確認し再度実行してみるも変わらず
ワールド変換の方法がいけないのかと思い
sceGumMatrixMode(GU_PROJECTION);
sceGumLoadIdentity();
sceGumOrtho(0, 480, 272, 0, -1, 1500);
を加えて再度実行してみたのですが相変わらず表示されません
他にも表示したい対象に sceGumTranslate や sceGuColor を試したのですが表示されませんでした
難しく考え過ぎでしょうか…何かもっと基本的なところに見落としがありそうな気がします
とにかく>>495さん貴重なアドバイスありがとうございました
他の見落としの可能性を探ってみます >>496
前やったことあるけどなぜか3DだとGU_SPRITESはうまく表示されなかった。
(やり方が間違ってたかもしれないが、3DサンプルでもGU_SPRITESは見たことない)
ほかのGU_TRIANGLESとかだと表示できたから一度試してみたら? >>497
はい。それらも既に試していますがやはり表示されませんでした
GU_SPRITESのサンプルはGUフォルダのspriteにあるのがそうです
GU_SPRITESはPC上のエミュレータで実行すると回転も出来るのですがPSP上だと正常に回転してくれません
PSP上では表示する時に頂点座標同士の関係が3軸それぞれに対して平行、または垂直になるように
自動補正されるのが原因のようです >>498
これ以上はもう少し具体的にコード晒してくれないと
断片的過ぎて原因わかんない。 >>499
やはりそうですか
と言っても実はintraFontに回転機能を付けようとしていただけなんです
ですが一応ソースファイルを貼っておきます
http://www1.axfc.net/uploader/Sc/so/320356.zip
私には何が原因か分かりませんでした
分かる方どうか啓蒙の一言をお願いします。
>>500
アップしたソースからは削り忘れてしまいましたが
sceGuEnable(GU_CULL_FACE)は使用していないので恐らくその線は無いかと思います libmenuで画面に文字表示しようと思ってるんですが、うまくいきません。(*.prx)
ビルドは通るんですが、いざPSPに入れて有効にすると何も表示されない
詳しい方教えて下さい
http://pastebin.com/ggpNCAhu 自分ではlibmInitBuffersの使い方が怪しいんだけど、よく分からない・・・ >>502
while(1)
{
libmInitBuffers(LIBM_DRAW_BLEND,PSP_DISPLAY_SETBUF_NEXTFRAME);
libmPrintXY(0,0,0xff20C0E6,0,"TEST");
sceDisplayWaitVblankStart();
sceKernelDelayThread(10000);
}
これでおk >>504
ありがとう
だがそうしてみたが動かなかった。。。 PSP_MODULE_INFO( "printf", PSP_MODULE_USER, 0, 0 );
のPSP_MODULE_USEをPSP_MODULE_KERNELに変える必要がある。
あと、delayは多いとちらつくので注意 >>505
libmenu付属のサンプルをいじって勉強してみるといいんじゃないかな
一から全て自分でやろうとすると打ち間違いや勘違いで動かない PSPプログラミングに半年ぶりに追加しました。
時刻の取得です。世界時計を作ってみました。
ぜひご覧ください。
http://chitoku.symphonic-net.com/pspprograming/
また、エラーコード一覧も作成しましたのでこちらもぜひご覧ください。 ■ このスレッドは過去ログ倉庫に格納されています