PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

2011年6月17日更新

私の書いた この記事がどこかオカシイとの ご意見により、記事を 分かりやすいように加筆修正します。以下
この際ですので、一般に使われている、変なPSP用語も掲載して指摘します。

・1.50カーネル
  これは、システムソフトウェア v1.50という OS が、Homebew起動可能である、という事から
  1.50 の カーネル という意味づけで 1.50カーネルという言葉になったのか?

・カーネル3.xx以降
  これは、1.50カーネル に対して 3.xx以降カーネル と呼ばれなければならないと思う。

・カーネル ってなんだ?
  Wiki で調べて再認識 → カーネル(コンピュータ用語) - Wikipedia
  Wikiの記事を要約すると、カーネルとは、OS の 非常に大事な部分(核に相当する)で、仲介屋ってトコ。
  アプリケーションの起動可否は、カーネル次第でどうともなるそうだ。
  各自、お勉強して下さい。


以下、PSPのCPUについて知っているコトを書きます。

PSP に採用されている、MIPS系 R4400 というMPU(CPU)には、2種類の動作モードがあります。

「カーネルモード」と、「ユーザーモード」

さらに、プログラムの書き方では VSHモードというのもあります(現在調査中)

PSPの実行ファイルにも カーネルモードのプログラム と、ユーザーモードのプログラム が存在します

●CPUがカーネルモードの場合 別名:特権モード
 PSPの全てのメモリやハードウェアに対して無制限にアクセス可能。取り扱いは 多少危険です。

●CPUがユーザーモードの場合 別名:保護モード。
 PSPのメモリやハードウェアの内、保護されている部分だけのみアクセス可能。


実行ファイルが カーネルモード記述の場合は、冒頭で「特権モードである」という宣言がされています。
初期のPSP、PSP-1000でのエミュレータ等のカーネルモード記述のHomebrewが起動してしまうシステムソフトウェア v1.00や v1.50 のOS が、カーネルモード推進していた模様。

PSP-1000用のエミュレータが登場してしまったので、メーカーは緊急に対策を取り、ユーザーモードのOSである、システムソフトウェア1.51以降に切り替えていき、現在のシステムソフトウェア6.39に至る(2011/06/17現在)。
PSPのメーカーは、PSP Homebrewを認めていません。


実行ファイルが ユーザーモード記述の場合は、冒頭で「保護モードである」という宣言がされています。

PSPのメーカーは、OS(システムソフトウェア)だけでは物足らず、ハードウェアまでユーザーモードがメインの、PSP-2000を製作し、PSP2号とした。




ところで、皆さんは、PSPのリカバリーモードの Configuration 項目、

> Game folder homebrew (currentry: 5.XX kernel)

の部分を、1.50カーネル や 5.XXカーネル にする方法は知っていても、本来、何を意味するのか考えたことがありますか?偉そうなこと言ってますが、私は、PSPのCPUの動作モードを、カーネルモード(1.50Kernel)とユーザーモード(3.xxKernel)に切り替える処理をしているのだと考えています。

この答えは、カスタムファームウェアの開発者のみ知ることなのですが、QJ.net さんにて、カスタムファームウェア3.10OE-Aと3.40OE-A のプログラムソースコードが配布中なので、機会があったら解読してみようと思います。 ソースは削除されているっぽいです。アメリカのGoogle でも見つかりませんでした。

ちなみに、1.50カーネルとか、3.xxカーネル、4.XXカーネル、5.XXカーネルとかのカーネル数値は、PSPのシステムソフトウェアのバージョンを意味します。

・1.50カーネル
  システムソフトウェア1.50にちなんで付けられた カーネル名。PSP Homebrew の起動を推進する。

・3.xx以降カーネル
  システムソフトウェア3.xx等の後期システムソフトウェアにちなんで、私が勝手に呼んでみるカーネル名。
 一般では、カーネル3.xx以降とか言うらしい。1.50カーネル用のアプリの起動を抑止する。


1.50カーネル上でしか起動しない事になっているカーネルモードの自作ソフトを、3.xx以降のカーネル上で起動させるには、色々な手段が生み出されました

◆エミュレート
・eLoader v1.000 を起動させて、そこから自作ソフトを起動させる方法
(リバースエンジニアリングして調べたわけではありませんが、多分こんなことをやっているのだろうと推測)
まず、読み込まれる予定のカーネルモードのPRXモジュールなどを、ユーザーモードのPRXモジュールを読み込むように置き換える。
実行ファイルはエミュレートする。ユーザーモードで実行できる処理は行なわれるが カーネルモードでしか実行できない処理はエミュレートできず そこで停止してしまう。

◆ユーザーモードへ実行ファイルを変換
(「カーネル1.50のソフトをCFW3.xx用に変換するソフト」というアプリを使用)
実際は、実行ファイルに eLoaderを埋め込む処理がされます。eLoaderで実行できないカーネルソフトには、この変換をやっても無駄なだけです

◆OSにカーネルモードの動作をサポートする機能を追加
・カスタムファームウェア5.00M33-6 に LEDA Legacy Software Loader beta0.2 を導入し、カーネルモードを1.50固定にしておく方法
カーネルモードを切り替える必要が無くなり、どっちのモードのソフトでも、ある程度 起動可能にさせてしまう

私の製作した PSP自作ソフトは、殆ど ユーザーモード(保護モード)の仕様です。

なので、PSP-2000 でも 素で起動したりします(笑)。カーネルモードで作っていたらPSP-2000では起動できなかったハズ…。eLoader使用で起動したよ報告が あったな。


判明している事は、PSPのソフトウェアには、3種類のタイプがあるという事実です。
・カーネルモード専用(カーネルハードウェアやカーネルメモリなどにアクセスするアプリとか)
・ユーザーモード専用(メディアエンジンを作動させるアプリとか)
・どっちのモードでも動作する

俺作PSPソフウェア
「じゃんけんゲーム for PSP パワードX」 1.50 or 3.xx どっちでも起動可能
「みくねぎっと。」 初音ミクで ハタあげならぬネギあげゲーム 3.xx以降専用(配布終了)
「PSPデスクトップ ドドド 改」 1.50 or 3.xx どっちでも起動可能
「千早が765衣装で吹っ切れた!? PSP」 3.xx以降専用


おまけで書いておくこと。
この記事は、「PSPそうごう」カテゴリだったけど、「PSPプログラミング」カテゴリに引越ししました。

PSPの、カーネルモード、並びに、ユーザーモード の プログラムの書き方。
参考したもの = CPS1/CPS2 のソース

プログラムの冒頭で、こう記述します。↓↓

カーネルモード発動!

PSP_MODULE_INFO("プログラム名", PSP_MODULE_KERNEL, VERSION_MAJOR, VERSION_MINOR);
PSP_MAIN_THREAD_ATTR(0);


解説
(赤い文字の部分は、自由に書き換えて下さい)
PSP_MODULE_KERNELは、ヘッダーファイルにて、0x1000 という数値が記述されています。
カーネルモードのプログラムである、と宣言しています。

"プログラム名" の部分は、半角の英数字記号で、好きな名前を記述して下さい。

VERSION_MAJOR は、整数 数値。そのプログラムのバージョンの、整数部分(値は何でも可能)
VERSION_MINOR は、整数 数値。そのプログラムのバージョンの、小数点以下部分(値は何でも可能)

PSP_MAIN_THREAD_ATTR(0); は、このプログラムが、CPUをカーネルモードにして実行するというおまじない。


ユーザーモード発動!

PSP_MODULE_INFO("プログラム名", PSP_MODULE_USER, VERSION_MAJOR, VERSION_MINOR);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);


解説
(赤い文字の部分は、自由に書き換えて下さい)
PSP_MODULE_USER は、ヘッダーファイルにて、0 という数値が記述されています。
ユーザーモードのプログラムである、と宣言しています。

"プログラム名" の部分は、半角の英数字記号で、好きな名前を記述して下さい。

VERSION_MAJOR は、整数 数値。そのプログラムのバージョンの、整数部分(値は何でも可能)
VERSION_MINOR は、整数 数値。そのプログラムのバージョンの、小数点以下部分(値は何でも可能)

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER); は、このプログラムが、CPUをユーザーモードにして実行するというおまじない。


本来、R4400というCPUは、カーネルモード動作時にはカーネルモードのプログラム、あるいは、ユーザーモードのプログラムを実行でき、ユーザーモード動作時にはユーザーモードのプログラムを実行できる、というお約束があるみたいです。どっちのモードでも動作するのは、ユーザーモード記述のプログラムです。
プログラマーが正しくコードを記述して使い分けないと、R4400は悩んでしまうカモ知れず。

PSP-2000のCPUもR4400なので、カーネルモードがあります(メーカー側が、抑止させているだけなのか?)

現に、PSP-2000で カーネルモードのプラグインは動作できるし(例:PSP画面キャプチャ・プラグイン)


本日は、ここまで。では、明日!


皆さん、意見をどうぞ。 コメント欄へ

関連記事
スポンサーサイト

[edit]

CM: 17
TB: 0

page top

この記事に対するコメント

1.50カーネルや3.xxカーネルってのはカーネルモードの中にある分類ってことでOKなのですかね?

solve #- | URL | 2009/10/03 13:51 * edit *

ん?

『カーネルモード』は、一般に『1.50カーネル』の事らしいぞ。

記事にチコっと加筆してみた。

猫山猫宗 #0DT7YplU | URL | 2009/10/03 14:28 * edit *

でも…3.xxとかでカーネルモードは入れるのはなんだ??
1.50カーネル入れているわけでもないし・・・

solve #- | URL | 2009/10/03 15:35 * edit *

それは…

CPU の 動作モードを切り替えているのでは?

猫山猫宗 #XqdwbOcU | URL | 2009/10/03 17:48 * edit *

1.50にもユーザーモードがありますし、3.xxにもカーネルモードはあります。
1.50とか3.xxとかはだたのFW(カーネル)のバージョンです。
ユーザーモードやカーネルモードはプログラム側の話なので、FWのバージョンは関係ありません。
Windowsも同じく。
ただ単に1.50kernelではカーネルモードでの起動が許可されてるというだけの話です。

七次元 #sGvNOJjo | URL | 2009/10/04 05:04 * edit *

七次元さんへ。

>1.50にもユーザーモードがありますし、3.xxにもカーネルモードはあります。
>1.50とか3.xxとかはだたのFW(カーネル)のバージョンです。

はい、そうなんですが、私は、PSPのリカバリーモードでの、1.50カーネルに設定する時と、3.xx(5.XX)カーネルに設定する時の事を、何人が意味を理解して行っているのか疑問だったのですよ。

>ユーザーモードやカーネルモードはプログラム側の話なので、FWのバージョンは関係ありません。
>Windowsも同じく。

モトローラのMPU、MC680x0 には、ユーザーモードとスーパーバイザーモードって名称で、似たような物になってますな。インテルCPUとかも。

>ただ単に1.50kernelではカーネルモードでの起動が許可されてるというだけの話です。

イエース、ごもっとも。
分かりやすく、若干 意味が違うような事を書いたかもしれないな。加筆修正してみよかの。

猫山猫宗 #/Ov0WeyI | URL | 2009/10/04 14:39 * edit *

CPUの特権モードとしてのカーネルモードとファームウェアに伴って更新されるカーネルソフトウェアがごっちゃになってませんか?

あと、確か1.50じゃなくてもカーネルモードで起動できたような…

憂煉 #- | URL | 2009/10/04 19:42 * edit *

Re: タイトルなし

> CPUの特権モードとしてのカーネルモードとファームウェアに伴って更新されるカーネルソフトウェアがごっちゃになってませんか?
うん。ソレを整理する為に、今から記事の加筆修正します~。

> あと、確か1.50じゃなくてもカーネルモードで起動できたような…
そりゃそうだ。PSP-2000でもカーネルモードが使えないと出来ない処理があるのだだだっ!!

猫山猫宗 #0DT7YplU | URL | 2009/10/04 20:24 * edit *

お~やっと理解できましたw

solve #- | URL | 2009/10/04 21:32 * edit *

初心者向けに書いてるので分かりやすく書くのは良いことですが、間違えた情報を与えるのはあまり良くありません。

>カーネルモード  別名:1.50カーネル
>ユーザーモード 別名:3.xxカーネル
これも聞いたことがないですし、前コメの理由により間違ってます。
3.xxkernelはPSP-2000以降となってますがPSP-1000でも起動できます。
1.50kernelでも3.xxkernelでも起動できるソフトの位置付けもおかしくなります。(1.50=カーネル、3.xx=ユーザーならどっちでも動くのは矛盾している)

言いたいことはもう憂煉さんが書いてますが、ぶっちゃけCPUの話は全く関係なく、すべてソフトウェアで完結する話です。
Windowsも同じく。

七次元 #sGvNOJjo | URL | 2009/10/04 21:41 * edit *

まだ色々間違いだらけのように思えます。
もう少ししっかりとした調査を行ってから記事にしたほうがよかったのではないでしょうか?
特に下記周辺は論理的に破綻しているように思えます。
>カーネルモード(特権モード)がファームウェア v1.50の1.50カーネルで、カーネル3.xx以降というのがユーザーモード(保護モード)です。PSP限定の意味で。

憂煉 #- | URL | 2009/10/04 23:42 * edit *

なんかすごいことになってきましたねw
ちなみにCFWのソースは削除されたと思いますが、気のせいでしょうか?
以前僕がダウンロードしようとしたときはありませんでした。

solve #- | URL | 2009/10/05 00:33 * edit *

文章だから、あやふやさっ(泣)

表(ひょう)とか、図とかにするといいかもな。

言いたいのは、

・1.50カーネル
・カーネル3.xx以降

でっす。なんか、書き方がヘン??

猫山猫宗 #XqdwbOcU | URL | 2009/10/05 00:34 * edit *

猫山猫宗さん、CFWのソースはまだ
http://pspnfo.orz.hm/index.php?Development#zdfafe1c
のサイトの左側のファイルエリアのdark_alexの項目
にありますよ!
OE-revSoueceCode-Wildcard.rarです。

lime #- | URL | 2009/10/15 21:36 * edit *

亀レス

私は、そのソースはとっくに入手済みですが まだあったのですね。見つけてくれてありがとう。

古い CFW3.03 辺りのバイナリが削除されていてダウンロードできないですな。ええけど。

あるのは、CFW3.52以降の模様。

猫山猫宗 #jjrqi.Ao | URL | 2009/10/17 01:50 * edit *

> Game folder homebrew (currentry: 5.XX kernel)
>私は、PSPのCPUの動作モードを、カーネルモード(1.50Kernel)とユーザーモード(3.xxKernel)に切り替える処理をしているのだと考えています。

切り替えられているのは「CPUの動作モード」ではなく「読み込むモジュールの種類」ですよ。

5.00M33でFW1.50向けのアプリを起動するには「1.50 kernel addon」をインストールしないといけませんよね?。あれはFW1.50のモジュールをPSPの内臓Flashに書き込んでいるんです。いわばデュアルブートです

ちょっと通りますよ #- | URL | 2010/09/14 11:09 * edit *

そう考えるのが自然ですね

>5.00M33でFW1.50向けのアプリを起動するには「1.50 kernel addon」をインストールしないといけませんよね?。あれはFW1.50のモジュールをPSPの内臓Flashに書き込んでいるんです。いわばデュアルブートです


何故、Leda v0.2 というソフトがあるのか考えると、その説が正しい気がします

でも、SONYの人が本当のことを書いてくれるはずも無くこのブログはSONYの人には笑われるんですよね、ぐはっ


eLoader は、カーネルモードをエミュレートしている、という事になるんかなぁと思った。

猫山猫宗 #jjrqi.Ao | URL | 2010/09/14 21:57 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/155-f2276c18
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-11