MEってのがあるらしい。 | //www.旧型、PSP開発幼稚園.game.jp/(本館)

MEってのがあるらしい。

MEってのがあるらしい。

■えええと、ちょっと前。yoyoFrに行った時。通常版とME版ってゆーのがあってさ。
その頃から「ME」ってなんじゃらほい。って思ってた事は思ってた気がする。

どうやら、
October 27, 2005 20:39:40 http://ameblo.jp/pspusr-ls/entry-10005551939.html#cbox

去年の10月...半年以上オクレテル。ちうか、去年の10月はマダあちしインターネットなかつたでしゅ。

で、http://www.stashbox.org/uploads/1129672725/meccode.zipがサンプルコードの例。(環境がないと無意味)

ちなみにこの辺の話は、 http://rukapsp.hp.infoseek.co.jp/cgi-bin/bbs03/yybbs.cgi?page=5&bl=0
からたずねた。

■えええと、手抜きしないで説明すると。 PSPには「CPU」とは別に「CPUみたいなもの」があって、「それ」は333MHzで駆動できるそう。 で、その「CPUみたいなもの」の名前が「メディアエンジン=MediaEngine=ME」ちう訳。 「CPUみたいなもの」ぢゃなくってタブンCPUそのものだと思う、常識で考えて。 PS2はGPUをEE(エモーションエンジン)とかゆー用語で呼んでたし、まーそーにーらしい用語の付け方だが、 つまりべたな用語で言えば「サブCPU」だな。 で、「サブCPU」ちうのは、まーそれなりに苦労にたえない歴史がある。 古くは「FM7」(というPCが太古の昔あった)ハッカー以外には活用されなかった。 「サターン」「メガCD」「32X」(というゲーム機が古代にあった)SEGAの極一部以外には活用されなかった。 ACは比較的かつよーしたけど、「パフォーマンス向上」が目的ではなくて、「分業」が目的だったり。 ■で、あちしは初心者であつて。んなもん使った事ないケド。(っていうかやり方すらワカラン) e氏やruka氏は使ってみたそーな。
■そゆーわけで、ここから妄想記事モードON。 メガドラエミュの場合、絶対ひつよーな気がする。だって、「PSPE」で動かす必要は絶対にない。 (それならPCのGENS辺りで遊んでくれ) で、「メインCPU」と同期が出来ないそうだから、「音源用途」が最適だよな。 「音源」は重い処理だし、そもそも「メインCPU」と同期する必要性がまったくない。 なぜなら「人間の耳」の「工学特性」として、「(時間的な)位相」には「とてつもなく鈍感」だからだ。 たとえば、44100でレンダリングするとして、「正確な時間で鳴らした音」と、(1フレーム=1/60秒) 「わざと5フレーム遅らせてた時間で鳴らした音」の区別が付く「人間」はいない。(耳の仕組みではなく、 脳みそが音を理解する仕組みの都合上らしい) (注:「近くに基準の時間の音」があれば、「時間位相差の区別は付く」し、「絶対的な音の長さ」の「区別も付く」。 それらの「区別」とこの場合の(位相ずれの)「区別」とは話が別なんで「混同」しない様に) 「視力」の方は「1フレーム」遅らせれば「区別が付く」癖に、実は「音」はこの体たらくなんである。 もちろん「(時間的な)位相だけ鈍感」なんであって、「解像度(量子化ビット数)」や「帯域(サンプリング周波数)」に、 関しては、(個人差があるが)それなりに敏感なんである。あと、時間的な位相であっても、「ワウフラッター」の様な 相対的なズレに関してはもちろん敏感だ。それは視力で言えば「エッジ検出」のよーなもんだからな。アタリマエだ。
そのうちなんとかしなきゃナラン問題な気がスル。 (2006-06/22、00:38)
■で、ちと先ほどのMEのサンプル眺めてみた。(PSPSDKインストールが前提だから、眺めるダケ) えっと、エーゴでコメントがありますやね。で、エート。0x80000000から0x80200000はスタックで、はじめのほー は使ったらイカンが適当に大きさを取って、最後のほーはMEでのわーくに使ってヨシ。って書いてある。 それからMEは「kernel-mode」で起動するひつよーがある。(startup.Sさんしょー、あちしは「user-mode」しか使った事ない) で、「kernel-mode」の場合は「HOME終了」が出来ねー。って書いてある。(が、古い情報かも知れない) ふうん。変数の受け渡しは、アドレスに、 unsigned int g_counter;//CPU側の普通ーのへんすー。 void me_func(void){//この関数はME側(あとで丸ごとメインからMEへコピーしちゃう)(もしかして直接呼ぶのかも??) unsigned int *pctr; pctr = (unsigned int *)(((int)&g_counter)|0x40000000);//(ME用に強制)アドレス加工しちゃうにゃご。 while(1){//無限ループ(ME終わっちゃうとめんどい) (*pctr) += 12345;//でME側から弄れる。(MEが動いてる限り弄り続ける) } }
で、me_funcの登録は、
#define vsync sceDisplayWaitVblankStart void xmain(void){ 中略(初期化) me_startproc((u32)me_func,0x10000);//ME登録 { unsigned int *pctr; pctr = (unsigned int *)(((int)&g_counter)|0x40000000);//(メイン用に強制)アドレス加工しちゃうにゃご。 while(1){//無限ループ(メイン終わっちゃうとめんどい) pspDebugScreenPrintf("ME Counter: %08x\n", *pctr);//でメイン側から(MEの挙動を)読める?? //HOME終了はできんから自前で処理(って出来るジャン) sceCtrlReadBufferPositive(&ctl, 1); if(ctl.Buttons & PSP_CTRL_HOME)//(そっか「kernel-mode」なら「HOMEキー」直接読めるんだあ) { sceKernelExitGame();//おちまい } vsync(); }
me_startprocの中身は、
static void me_startproc(u32 func, u32 param) { memcpy((void *)0xbfc00040, me_stub, (int)(me_stub_end - me_stub));//これが噂の丸ごとコピー。MEスタートアップルーチンのコピー?? _sw(func, 0xbfc00600); _sw(param, 0xbfc00604); sceKernelDcacheWritebackAll(); sceSysregMeResetEnable(); sceSysregMeBusClockEnable(); sceSysregMeResetDisable(); }
よくワカランにゃあ。_swって何?STUB_WRITE?あとで調べにゃ。そうそう「me_stub」ってのは、 アセンブラのかんすー。えっと、
; file:"mestub.S" ; this stub is from the melib package, (c)mrbrown #include &ltregdef.h> #define STATUS $12 #define CAUSE $13 #define CONFIG $16 #define TAGLO $28 #define TAGHI $29 #define IXIST 0x01 #define DXIST 0x11 .global me_stub .global me_stub_end .set noreorder .set noat me_stub: li k0, 0xbc100000 li t0, 7 sw t0, 80(k0) mtc0 zero, TAGLO mtc0 zero, TAGHI ;;--------------------------------まつです li k1, 8192 a: addi k1, k1, -64 bne k1, zero, a ;; cache IXIST, 0(k1) ;;--------------------------------まつです li k1, 8192 b: addi k1, k1, -64 bne k1, zero, b ;; cache DXIST, 0(k1) ;;--------------------------------で、 mtc0 zero, CAUSE li k0, 0x20000000 mtc0 k0, STATUS sync li t0, 0xbfc00000 //べーすあどれすでし(つまり0xbfc00000+0x604==0xbfc00604) lw a0, 0x604(t0) //こっちが引数? lw k0, 0x600(t0) //ここが関数? li sp, 0x80200000 //ここにガシガシ積めばいいの?MEのかんすー(me_func)で、暗黙に使われるスタック? jr k0 //ほーい、オツカレーMEの登録かんすー(つまりme_func)実行?? nop me_stub_end:
しろーとにはむずかしーにゃー?ってゆーか、「PSPSDKなしで書くの」むづかしそーにゃん。STUBの辺りがさ。 (2006-06/22、11:39)