Archives

17 December 2006 の記事

現在 PC 用のモニタに VGA でつないで 720p で使用しています。
(つなぐまでのあれこれ http://ch09144.kitaguni.tv/e326105.html)
(画面写真 http://ch09144.kitaguni.tv/e326652.html)
でも、なんか解像度の割りに画面が狭いなあと思っていました。
ウィンドウを立ち上げて

 デスクトップ → 設定 → 画面の解像度

をみるとなんと「1124x644」になっています。

もしかしたら TV に合わせてオーバースキャンを考慮して
有効画素数を減らしているのかもしれません。

ps3videomode コマンドのヘルプを良く見ると full screen mode なるものがあります。

X を落としてから試してみました。

 $ ps3videomode -f -v 3

この状態で startx すると、以前よりずっと広い画面になりました。
解像度を調べると 1280x720 で、今度はきちんと 720p です。
面積で 1.27倍、体感ではかなり広さの差を感じます。

起動時から fullscreen 指定するには /etc/kboot.conf を書き換える必要が
あります。

前回の記事(PS3 Linux で最初に行う設定 http://ch09144.kitaguni.tv/e327238.html)
では次のように数値指定しました。

linux="/boot/vmlinux-2.6.16 initrd=/boot/initrd.img video=ps3fb:mode:3"

1=480i
2=480p
3=720p
4=1080i
5=1080p

ps3videomode のヘルプによると、-f 指定だけでなくモードの数値に +128
しても fullscreen 指定になるようです。
mode 3 + 128 = 131 ということで、モード番号を 131 に書き換えます。

linux="/boot/vmlinux-2.6.16 initrd=/boot/initrd.img video=ps3fb:mode:131"

これで起動時から 720p の fullscreen 画面になりました。


PS3 をクライアントとしても使えて、
サーバーとしてもアクセスできるようになりました。
次は PS3 ならではの使い方として Cell の開発環境を install してみます。

インストール手順同様、こちらのページを参考にさせていただきました
http://cell.fixstars.com/ps3linux/index.php


従来のゲーム機は単なるターゲットとみなしてクロス開発するのが普通でしたが、
PS3 は HDD 搭載で Linux の動く PC として使えるため、自分自身でアプリ
開発を行うことができます。


(1) SPU 用コンパイラ

せっかくなので出たばかりの新しいバージョン CellSDK 2.0 を入れてみました。

http://www.bsc.es/plantillaH.php?cat_id=252

ここから PowerPC で動く SPU 向けの各種ツールをダウンロードします。
表のうち PowerPC の方の SPU と書かれている一式です。

●3.3-72
GNU Binutils
GNU GCC Compiler
GNU GCC C++ Compiler
GNU GDB
GNU newlib C library
GNU Toolchain debuginfo

ダウンロードした *.rpm を PS3 Linux に転送してインストールします。
パッケージのインストールなので、ファイルはどこにおいても構いません。

# rpm -i spu-binutils-3.3-72.ppc.rpm
# rpm -i spu-gcc-3.3-72.ppc.rpm
# rpm -i spu-gcc-c++-3.3-72.ppc.rpm
# rpm -i spu-gdb-3.3-72.ppc.rpm
# rpm -i spu-newlib-3.3-72.ppc.rpm
# rpm -i spu-toolchain-debuginfo-3.3-72.ppc.rpm

インストールは上記の順番で行います。



(2) SPU を使うためのライブラリ

PS3 に Linux を入れるまでの手順
http://ch09144.kitaguni.tv/e327222.html
で作った ADDON CD の Q:\spu の中にある次のファイルを PS3 Linux に
転送します。

libspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm
libspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc64.rpm
libspe2-devel-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm
libspe2-devel-2.0.1-be0647.3.20061130.1.ps3pf.ppc64.rpm
elfspe2-2.0.1-be0647.3.20061130.1.ps3pf.ppc.rpm

これらも順番に rpm -i で install します。



(3) Hello World

http://cell.fixstars.com/ps3linux/index.php/PS3%E3%81%A7Hello%2C_World%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
こちらから Hw-samples-all.tar.gz をダウンロードします。

PS3 Linux に転送してアーカイブを展開します。下記の操作は home に転送したと
仮定しています。

 $ cd
 $ mkdir src
 $ cd src
 $ tar -zxvf ../Hw-samples-all.tar.gz
 $ cd hw-samples-all
 $ make

libspe1 を install していないのでエラーが出ますが無視します。

 $ cd spe
 $ ./spe-main
[SPE] Hello, World!

SPEでコンパイルしたプログラムが動きました。



(4) SPE 用の C/C++ 言語拡張について

SPU_language_extensions_v21_j.pdf

こちらからダウンロードできます。
http://cell.scei.co.jp/

これをみると vector 型が拡張されているのがわかります。
例えば float 4 要素の 128bit 変数は

vector float v1;

のように宣言できます。
残念ながら、HLSL のように自由自在に各ベクトル要素にアクセスできるわけでは
無いようです。(例えば v1.x 等は使えない)

vector 系の演算には組み込みの intrinsics 命令を使うようです。
あとでもう少し詳しくしらべてみます。