少し早めに離脱できたので、帰りに「ZANAC×ZANAC」を買って帰りました。
KOJIさんにサンプルソールをいただきました。そのソースの中にBMPINFO構造体の
メンバbmiHeader.biHeightについて、「(負数を指定する事で左上を原点にする)」
とあったのですが、まさかと思って先日の512を-512にするとOKでしたよ(^^;
これを意識してWin32APIのリファレンス本を見ると、そう書かれていますし(汗;
そんな訳で色々助言をいただきありがとうございましたm(_'_)m(>KOJIさん&しんさん)。
これでちょっと遊んでみます。
「ZANAC×ZANAC」をやってみました。懐かしい感じのタイトルBGMから入り、
なにげにNEOの方からやってみたのですが、グラフィックは今風に綺麗になって
いるのですが、ゲーム本体の方がなんだか今までのZANACの影を見せようと
するばかり、なんだかしょぼしょぼな感じがしました。
で、昔のバージョンをやってみました。GAME SELECTにDISK VERSIONとROM VERSION
があるのですが、ROM VERSIONって? 疑問を残しつつDISK VERSIONで始めて
みました。以前東京ゲームショーで
みたときに少し触った感じと変わる所はありませんでした。
いかんせん後半面の記憶の方が曖昧になっていますが、非常に良く再現され
ていると思います。で、ラストまでやってみてふぅ。こんなに残機が
ガンガン増えてたっけ?て感じでしたが、爽快感は今のシューティング
ゲームには及ばないものの、サブウェポンを選べば無茶な弾避けというの
は無くなるので、まぁ遊べるかも。弾幕は弾幕で先に進むことよりも
避けるのを楽しむと割りきってしまえば、それはそれで遊べるのですけど
も。さておき、彼方の記憶と比べて少し違うと思った点など。
「(1)ちらつかない」。当たり前かも知れません(^^;。「(2)
面クリア時の背景フェードアウト」。こんなに色階調がありまし
たっけ?
で、もう一度NEOの方をやってみたのですが、少し しょぼしょぼ感が
減ってました。旧作をやって騙されている訳ではないと思いますが、
やっぱり騙されているのでしょう(ぉぃ;。でもやっぱりNEOの方は
いまいち肌に合わない感じ。恐らく最近のシューティングゲームって、
弾幕を意識してか、こちらのショットも最初から強力だったりするの
で敵の体当たり死にってあまりしないように思います。GIGAWING2や
MARS MATRIX なんかは敵キャラとの当たり判定無しという割り切りよう
ですし。で、それに慣れると、こちらの武器がショボいのを良いことに
敵にトリッキーな動きをさせて、体当たり死にしやすくされていると、
とてもストレスが溜まるという感じがします。もう少しやってみると、
また感想が変わるかもしれませんので、また後日。
突然、loginというコマンドがある事を思いだし、これでログインしなお
せば「既定」が消えるのでは?と思ったのですが、
tmp> login login: tane 既定@SOTECCOMPUTER ~ $ echo $USER 既定 既定@SOTECCOMPUTER ~ $
その日のうちに帰着。
グラフィック描画の方は色々試してみたのですが、どうもうまく描画がされません。
gd->win = CreateWindow(wclass.lpszClassName, title, wstyle, CW_USEDEFAULT, CW_USEDEFAULT, w, h, NULL, NULL, wclass.hInstance, NULL); ShowWindow(gd->win, SW_SHOWDEFAULT); /* set as default */ gd->hdc = GetDC(gd->win); /* set up background bitmap */ gd->hdc_back = CreateCompatibleDC(gd->hdc); gd->bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); gd->bi.bmiHeader.biWidth = 512; gd->bi.bmiHeader.biHeight = 512; gd->bi.bmiHeader.biPlanes = 1; gd->bi.bmiHeader.biBitCount = 32; gd->bi.bmiHeader.biCompression = BI_RGB; gd->bi.bmiHeader.biSizeImage = 0; gd->bi.bmiHeader.biXPelsPerMeter = 0; gd->bi.bmiHeader.biYPelsPerMeter = 0; gd->bi.bmiHeader.biClrUsed = 1; gd->bi.bmiHeader.biClrImportant = 0; gd->bmp_back = CreateDIBSection( gd->hdc, &gd->bi, 0, &gd->vram, NULL, 0 ); SelectObject(gd->hdc_back, gd->bmp_back);
回復しないため、本日休業。結局、一日寝てました。
夕方になって復活。なにげにメモリ増設などを考えてみたので、近所のパソコン屋
に行ってみました。本当に安くなっててびっくりしたのですが、あるのは値札ばかり
でモノが全然置いてありません。店員に聞いてみるも、目に見える分が全てだと
言いう事でした。つーか、なにそれ?
ppcsimではグラフィック描画と言いましても、PPC命令のシミュレートにかかる時間
がバカにはできませんので、グラフィックデモの一つであるところのtspを
Cygwinネイティブに書き換えてみました。といっても、VRAM描画になる部分の先に
ppcsimと同じようなグラフィック描画ルーチンを加えただけなのですが。で、
色々やってみたのですが、どうにも異常に遅くてヘコリ。
再描画部分は以下のようにしてみました。
int WINAPI gdev_refresh_thread (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { while(-1){ if( GdevSyncReady!=0 ){ SendMessage(gd->win,WM_PAINT,0,0) ; GdevSyncReady=0 ; } Sleep(1000/GdevRefRate) ; //GdevRefRateには 60 をセットしています } return(0) ; }
for( GdevSyncReady=1 ; GdevSyncReady!=0 ; ) ; /* wait for complete draw graphic */
あぁ、調子悪い一日でした。
あまりの寒さに耐えかね、ホットカーペットをゲット。本当はベッド
とかでほんの少し高い位置に居るだけでエアコンの恩恵を大幅に
受けられるところなのですが、まぁよしとしたところ。ごろごろ
してると眠くなるのが麻薬です。
PS2値下げ。シャギャーーっ!わずか一週間で
これですか!これは罠かも!そうかも!(<違います)。
ハンドルネーム占い
を試してみました。中吉。「中途半端に良いですね」
ですって。あまりに言い得て妙って感じだったので、思わず笑って
しまいましたよ(^^;
既定についてですが、確かにユーザ登録時の事は疑ったのです。
以前、HDDを入れ替えた時に再インストールをせざるを得なかったので、
その時、一応ユーザ名をきっちり入れたつもりだったの
です。Cygwinもそのときに入れなおしたので、それでイケると思った
のにNGだったのです。で、最後の砦として複数ユーザ管理だったの
ですが、撃沈という始末だった訳です。$USERについては1.1.8では
すでにどうだったか覚えてないのですが、確かごく最近の奴から、
起動時に$HOMEが定義されていなければ、$USERの名前で、/home
(実際にはcygdrive/home)の下にユーザ名でホームディレクトリを作成する
ようになっていたと思います。因みに、我が家では昔のCygwinの
しがらみから、$HOMEをAUTOEXEC.BATに指定しているため、/homeの下に
ユーザ毎のディレクトリは作成されませんが、これを外して再起動し、
Cygwinを起動すると、やっぱり「既定」というホームディレクトリが作成
されました(^^;。なもんですから、お手上げ中って感じなのです。
あぁ....今日もダメ......パタ。
調子が悪くてほんの少しだけ早く帰着。
threadの止め方をBBSにて教えていただき、手を入れてみたのですが、
作り的にppcsimに合うかどうか微妙な感じでした。と言いますのは、VRAM描画は
基本的にネックではないため、用事の無い時でもバックバッファからの描画転送を
行ってしまうことは、それ自体がムダ描画になってしまうのです。従いまして、
先日調査したように、VRAM描画がネックにならないバッファサイズを探すのが
一番効率が良いようです。
何気にpxas,pxlkをCygwinでコンパイルしてみようとしたのですが、asmマクロが
散りばめられていてNG。コンパイルできればPPCネイティブコンパイルしてみよう
かと思ったのですがヘコリ。先々の手間を考えると、CPU依存のプログラム
にしてしまうのは、今は得策では無い(CPU依存部分の書き換えよりも、
書き換えた部分にバグがないか確認する手間の方が心配)ように思うのですが
どうでしょうか。
あぁ....だんだん調子が悪くなってきたので、もう寝ます(X_X)
昼頃起床。
先日の自己シミュレートNGの件を一応調査。なんの事は無い、メモリアクセス
マクロのちょんぼなだけでした。で、djpeg on ppcsim on ppcsim.exeの実行
時間は以下。ちなみに展開したデータは
です。
Sun Nov 25 05:27:15 2001 ./ppcsim.ppc Exec Start exec ppcsim djpeg.ppc djpeg.ppc Exec Start exec djpeg -bmp -outfile aaa.bmp title_c.jpg called exit. done. called exit. done. Sun Nov 25 05:36:55 2001
昼頃起床。日記の日付けが変だし(^^;
グラフィックデバイスがらみで一件バグ発覚。pxvmサンプルのputchr.z
の実行でx座標が奇数のドットが抜ける。原因はVRAMへのストアを
stfd(64bitストア)で行っていますが、ppcsimの描画ルーチンは32bitアクセス
を期待しているため、下位ワードの描画が反映されないというものでした。
うーむ、簡単に対応できそうで できない.........
結局、メモリアクセスマクロ関連にフラグを埋め込んで処理することに
しました。ついでにVRAMロードについては再描画対象にならないように
処理してみましたが、大して速度アップには貢献していなさげ。
因みに、gdemosの1周分でpxvm1.01とppcsimとの実行速度比較を行って
みたところ、実行時間比が pxvm:ppcsim=27:528 ということで、pxvmの
方が19.5倍くらい速いです(^^;。
「自己シミュレータが必要か?」とPowerX-BBSで書いたのですが、ハードウェア
自己診断に使えるような感じがしてきたので、試しにppcsimをPPCクロス
コンパイルしてみました。変更したのは、すっかり形骸化している
HOST_ORDER_IS_LITTLE_ENDIANでない方のメモリアクセスマクロと、
SCエミュレーションのエンディアン反転ルーチンの二つ。とりあえず
コンパイルでき、ppcsim -hは実行できたのですが、ppcsim.exe上で実行した
ppcsim(ややこしい(汗;)の方で、djpeg --helpを実行したところ、
標準IOがうまくオープンできていないようで、すぐにexit()を実行して
終了してしまうようです。命令実行自体はできているので、SCエミュレーション
部分で不具合がありそうな予感。
以下、ppcsim.exe 上で ppcsimを実行し、その上でdjpegをブレークポイント
命令で止めてpsコマンドを実行し、ステップ実行で10命令ばかり実行した
様子。
bigendian% ../ppcsim.exe ./ppcsim.ppc ./ppcsim.ppc Exec Start exec ppcsim djpeg.ppc djpeg.ppc Exec Start #ここからppcsim.exe上でのppcsimのメッセージ bp 0x10000 + Setting bp=0x00010000 , ID=1 exec djpeg --help Exec stop by break point. pc=0x00010000 inst=0x54210036 ps ID size 0 65536 1 4194304 #プロセスサイズ8MBの中で8MBのプロセスをforkすると当然失敗するので4MBに変更した s 10 pc=0x00010000 inst=0x54210036 pc=0x00010004 inst=0x38000000 pc=0x00010008 inst=0x9421fff0 pc=0x0001000c inst=0x7c0803a6 pc=0x00010010 inst=0x90010000 pc=0x00010014 inst=0x48016669 pc=0x0002667c inst=0x9421ffe0 pc=0x00026680 inst=0x7c0802a6 pc=0x00026684 inst=0x90010024 pc=0x00026688 inst=0x7d2b4b78 done. #ここまで called exit. done. bigendian%
起きたら既に暗くなっててびっくりしましたよ(激汗;
なにげにppcsimでグラフィックデモコードであるところのgdemosを実行してみた
ところ、メモリアクセス領域越えでずっこけますよ(汗; PowerX-VMではOKなのですが
何故?!ということで調査。
ずっこけているのはzoomルーチン内で、転送元VRAMアドレスがヘンな結果の
ため、アクセスエラー越えしている模様。問題なのは、ルーチンの一番最初で
こける訳ではなく、画像の半分くらいを描いたところでエラーするところ。
すなわちデータ依存性があるという点。ただ、データ依存と言っても座標
だけの問題なので、どの点の座標変換でエラーしているのかを調査。
そして、x=0,y=99という点を得られたところで、プログラムを書き換えてすぐ
エラーするようにし、レジスタダンプを取りながらトレース実行。で、
ppcsimのバグ発覚(激汗;。mulhwにおいて、負×正もしくは正×負の時、
正しい結果に+1されたものが返ってました。うぅっ、今頃こんなのが見つかる
なんて......怖過ぎ。なんかヘンな事やっているので少し見直した方が
良いかも。
そんな訳でPS2のソフトなど買ってみました(脈絡無し)。
「SILPHEED THE LOST PLANET」と「花火の」こと「FNTAVISION」。
店員の兄ちゃんがSILPHEEDの見本パッケージを見て、「ACE COMBAT 4」の
商品を取り出したのは秘密(笑。
SILPHEEDはPC-88版(古過ぎ)以来なのですが、それとは比べものにならない
ほど美しいグラフィックに仕上がっています。って当たり前か(^^; いや、
PC-88版でも斜め見下ろしだったし、ポリゴン使ってたし、あれはあれで
凄かったのですが。さておき、ゲーム中随所に「RAY CRISIS」に似た
(というかほぼ同じ)画面効果が使われていて、なんだか関係のありそうな
匂いが漂ってました。ゲームの方は割と簡単な方で、少しもの足りない
感じがしなくもありませんが、まださわりの4面くらいしかやってませんので、
PC-88版のように10面くらいあったりすると、泣きそうになるかも知れません。
ダメージ制なので、何度か敵の攻撃に当たってもOKというのはPC-88版のそれと
変わりませんが、PC-88版は死ぬ間際になると、武器の片方が使えなくなったり、
動きが遅くなったり、表現がリアルなだけに難しかったりしたのですが、
そういった細かい話は無いようなので、やっててストレスがあまり溜まらない
ように思いました。接近破壊でハイスコアを狙うという要素がありますので、
スコアアタックで遊んでみるのも良いかも。
「花火の」の方は、パズルというよりは、なんとなく押してればそれっぽく
遊べるといった感じ。4面くらいまではそれでもまぁまぁ遊べますが、5面
から急に狙わないと、すぐにゲームオーバーになってしまいます(^^;。やりこみ
が足りないのでチェインなんかが全然取れません。ただ、玉をキャッチする
操作性がちょっといまいちな感じで、意図したものがなかなか取れない
感じがしますが、慣れの問題なのかも。
その日のうちに帰着。
ppcsimのグラフィックデバイスが遅い件について少し細かな調査を
行ってみました。
まず、シミュレータ上で動作するテストプログラムとして以下のようなものを用意しました。
#define VRAM_TOP 0xf0000000 #define VRAM_WIDTH 2048 #define FILL_WIDTH 512 #define FILL_HEIGHT 480 int main() { volatile unsigned int *vram=(unsigned int *)VRAM_TOP ; int x,y ; for( y=0 ; y<FILL_HEIGHT ; y++ ){ for( x=0 ; x<FILL_WIDTH ; x++ ){ vram[y*VRAM_WIDTH+x]=0x00ff00ff ; } } exit(0) ; }
#ifdef SUPPORT_GRAPHIC_DEVICE cmd = mres->mem[seg(GRAPHIC_VRAM_SYNC+3)][lad(GRAPHIC_VRAM_SYNC+3)] ; if( GdevBuf.c==GdevBuf.n || cmd!=0 ){ int i,x,y ; int r,g,b ; unsigned int ad,old_ad ; COLORREF pix ; ad=0; old_ad=0; for( i=0 ; i<GdevBuf.c ; i++ ){ ad=(GdevBuf.buf[i]/GRAPHIC_VRAM_DEPTH)*GRAPHIC_VRAM_DEPTH ; if( ad==old_ad ) continue ; x = ((ad & ~GRAPHIC_VRAM_TOP) % (GRAPHIC_VRAM_WIDTH*GRAPHIC_VRAM_DEPTH))/GRAPHIC_VRAM_DEPTH ; if( x>=GRAPHIC_SCREEN_WIDTH ) continue ; y = ((ad & ~GRAPHIC_VRAM_TOP) / (GRAPHIC_VRAM_WIDTH*GRAPHIC_VRAM_DEPTH)) ; if( y>=GRAPHIC_SCREEN_HEIGHT ) continue ; r=mres->mem[seg(ad+1)][lad(ad+1)] ; g=mres->mem[seg(ad+2)][lad(ad+2)] ; b=mres->mem[seg(ad+3)][lad(ad+3)] ; pix=RGB(r,g,b) ; DrawPix(gd,x,y,pix) ; } SendMessage(gd->win,WM_PAINT,0,0) ; GdevBuf.c=0 ; } #endif
n= 0( 1) : 385秒 n= 1( 2) : 194秒 n= 2( 4) : 97秒 n= 3( 8) : 49秒 n= 4( 16) : 25秒 n= 5( 32) : 13秒 n= 6( 64) : 8秒 n= 7( 128) : 4秒 n= 8( 256) : 2秒 n= 9( 512) : 2秒 n=10( 1024) : 1秒 n=11( 2048) : 1秒 n=12( 4096) : 1秒 n=13( 8192) : 1秒 n=14(16384) : 1秒 n=15(32768) : 1秒 n=16(65536) : 1秒
少し早めに帰着。今日一日、目がしょぼしょぼしてていやんでした。
ppcsimをちょこりいじり。先日の、あまりに遅いグラフィックデバイス
アクセスを少し改善。アクセスしたVRAMの点をバッファリングしておいて、
バッファがいっぱいになったら実際の描画に反映するという感じ。
ステップ実行すると直ぐに反映されないのがいまいちですが、連続書きこみ
を行う分については先日よりはだいぶマシになりました。それでも
遅いですけどね(^^;。
トゥナイトIIでXBOXのことなど。私的に新鮮だったのが「並ぶのが好き
なのは日本人だけじゃないんだ」と思った所(ぉぃ;。でも、先頭でも
朝の8:00ってのがまだまだ(なにがだ?)。あんま細かな事はよく判りません
でしたが、本体と同時に16タイトル揃えたってのは凄いなと思いました。
最後の性能のまとめの表でGameCubeのグラフィック性能が「△」になってた
のは「そうか?」って感じ。
GameWave。ときめも3ってトゥーンシェーダーを使っているというのに
驚いた。雑誌なんかで絵をみたとき、2のそれからいくとえらくショボい
感じの絵だなぁと思っていたのですが、そういう事だったのか。納得(<単純)。
電子ブロック復刻版。ふおぉっ、懐かしい!最初に買ってもらったのは
かれこれ20年前になりますよ。EX-150なんて当時は1.5万円くらいしたように
思います。流石に高価だったので、最初はEX-60(0.6万円)から始めて(因みに、
EX-15,30,60,80?,100,120,150,180 というモデルラインナップになっていて、
数字は組める回路の数を示しています。EX-15だと、ICアンプ、CdS,メーター
は使う回路が組めないので付属していないって感じです)、ブロック買い
足しで最終的にEX-150相当にしたのが思い出されます。最上位機はEX-180で、
見たことは無いのですが3×4ブロックのICブロックが乗っているらしいです。
当時、原理はイマイチよく判らなかったけど(それは今でもという
話はありますが(^^;)、絵の通り(回路図などとは言わなかった)並べれば
色々なものになることが単純に楽しかったです。好きだったのは、
音が出る系(夜にサイレン回路で音出しててうるさいからやめれと
親に怒られた記憶が(^^;...)とメーター動かす系。フリップフロップの
回路なんかも不思議っぽくて好きだったかも。今にして思うと、あの
ブロック数で150もの回路を組めるというのは凄いと思います。イヤホンが
マイクになるというのは、この電子ブロックで知った豆知識だったかも。
そういや、この頃の電球の回路図記号は○の中にフィラメントをイメージ
したΩのような図を入れるものでしたが、中学から高校にかけての間に、
○の中に×を描いて電球となったのをいきなり思い出しました(^^;
その日に帰着。会社にいるうちに少し風邪が治ってきた感じ。
そんなヘンに丈夫な自分の体がなんかイヤん。
先日グラフィックデバイスに手を入れて、同期コマンド無しで
グラフィック描画に反映するようにしたのですが、それにより、
PowerX-VM用のバイナリがそのまま動作するようになっているハズ。
ということでテスト。一応そのまま動作しますが、死ぬほど遅くて
ちょっとびっくり(汗;。PowerX-VMではパシパシ切り替わるcolor.zですが、
ppcsimで動かすと最初の一枚を描くのに数分を要するというのはどういう
こと?
そういや、我が家のWin98ではログインユーザ名が「既定」というわけの
わからない名前になっていて、日本語コードを受け付けられない
RCS(on Cygwin)のciなんかがうまく使えません。で、複数ユーザ環境にして
みたのですが、一応ログインしたときのユーザ名は指定したものに
なっているものの、Cygwinのbashではやっぱり環境変数USERが「既定」
になっていてヘコリ。もちのロンでRCSもやっぱダメ。一番ヤなのは、
何も解決してないのに、毎回パスワードを入れなきゃならなくなったところ。
ぐったりパンダ。
ただのメモリアクセスなら全然速い模様。ぐふっ。
とかやっているとTBSでアニメが始まりましたよ。一部で話題沸騰な
ところの「ちっちゃな雪使いシュガー」という奴らしいです。
これ自体は悪くは無いのですが、全身で「CGTV」が始まる事を期待していた
のでガッカリ感倍増。
日付け越え。風邪気味でヘロヘロ。
先日のPS2体験版ソフトの中に「花火の」があったので、入れてみたの
ですが、起動せず。しくり。
ppcsimのグラフィックデバイス周りに少し手を入れてみたり。
眠くて死亡。
昼頃起床。テレビ観ながら洗濯したり掃除したり。
なにげに日本語文字対応のrxvtがCygwinコンソールからの起動で失敗する
件を調べたり(以前の日記)。
まずgdb上で起動すると失敗しないため、printfデバッグを行おうと
したのですが、STDOUTがどこか四次元に繋がっているらしく、
rxvt起動元のコンソールにデバッグ文字を表示することができません。
しかたなく、 while(-1); という無限ループを入れて、無限ループすれば
そこまではOKという、とんでもデバッグを行うことにしました。で、
失敗原因を突き止めた結果、src/command.c内run_command()で、
fork()によりシェルプロセスを動作させるための子プロセス生成を
行っているようなのですが、このfork()が失敗するようです。
成功するまで無限ループを回すなど色々やってみましたがうまく行かず。
誤って無限ループを脱出できないようにしたまま、パッケージの
rxvt上で日本語rxvtを起動してfork()爆弾を起動させてしまったり(汗;
色々。結局、systemコールが失敗するのでは、手の出しようがなくて
ヘコリ。CygwinのソースをCVS Updateしてみたものの、あんまよく見る
気分にならず。ぐう。
そうこうしているうちに、突然、物欲アドレナリンが溢れ、
PlayStation2が欲しくなってきたので、
「PSYVARIAR -COMPLETE EDITION-」に備えて買ってみることにしました
(<気が早すぎ)。
箱がデカくて持ってかえるのが面倒臭そうという理由で、
GameCubeにしようかなどと考えてみたりしたものの(ぉい;、
DVDも見れるし(うちはPCにはDVDドライブは付いていないのだ)、
と思い直しPS2を買っちゃいました。
いわゆるGT3付きの奴。で、目に入った「R-TYPES」もついでに買って
みたりして。つーか、それってPS2ソフトじゃねーし。
あぁ、それにしてもGT3は絵が綺麗ですなぁ。ゲームショーで何度か
見た時はジャギが目立っててギラギラした感じしかなかったのですが、
全然良くなっています。デモ映像で色々エフェクトを使って
いますが、その中で少しノイズの入ったような奴なんかだと、本物の
映像のように見えるカットなんかもありますし。車体への映り込み
もちゃんとしているようで、わざとそれを見せるような車体の横に
へばり付いたようなアングルのカットなんかでは、縁せきのそばを通る
と赤と白のシマシマがちゃんと映り込んで、縁せきから離れると
消えてって、感じになってるし、トンネルを抜けて左右の森の木陰を
抜けるというところでは、ちゃんとトンネルライトのうつり込みから、
木の影、そして空という感じで周りの絵の変化がちゃんと反映されている
し。他にも、影なんかも
トンネルの中のように複数光源あるようなカットでも、ちゃんと
複数光源からそれぞれソフトシャドウが落ちているし、外のカット
でも、光源位置によって影の落ちる方向がちゃんと変わってるし。
ドライバーズアイからでは全く意味の無い所の処理でも、ここまで
やっているというのはなんかこだわりというか、執念を感じましたよ。
ところで、一番最初のオープニングは、リアルタイム映像は挟まって
いるのでしょうか?「3」の文字が出た後は全部リアルタイム映像
っぽいのですが、あまりにも沢山のコースを高速に切り替えているので、
ひょっとしてこれもムービー?とか思ったりして(^^; あぁ、でも
GT1のオープニングムービーよりも、GT3のリアルタイム映像の方が
綺麗な気がするというのはやっぱ凄いなぁと思ったり。
そんな感じでR-TYPESをやってみました。なにげにPS2にそのまま入れてみた
のですが、動くというのは知ってはいても、本当に動くのか!と思うと
今更ながら驚いてしまいます。PSは持ってないけどPSのソフトも
遊びたいし、DVDプレーヤとしても使いたいとなると、実は破格に安い
ような気がしてきました。逆に、PS2用ソフトだけしか遊べない本体だと
すると、PS2本体32000円からPSone分の9800円とDVD分7000円位?
引くと15200円?。引っ付け合わせることで、安くできている部分も
ありますので、単純に割るというわけにはいかないのでしょうが、
PS1とは非互換でかつ、DVDプレーヤーにはならないとしても、
15200円だったら躊躇無しで買ってしまいそうな感じがします。
GCが本体24000円といっても、GC用ゲーム機として以外には使えませんから、
本体価格だけを見て安いか?と言われると、「どうなんだっけ?」という
感じがします。GCでN64のソフトを動かす仕組みがあれば別かも知れません
が、それは絶対ありえないでしょうし(アングラだと判りませんが(笑;)。
話が逸れましたがR-TYPES。ベスト盤ということですが、R-TYPEのPS移植版が
出てるのを知りませんでした(^^; R-TYPE1の方はPC-Engine版で狂ったよう
にやりました。それからかれこれ13年くらいですが、もう全然覚えて
いないし(^^; ちなみにX68k版のはデキの酷さに愕然として2面までしか
やっていない始末。久しぶりに画面を見たのですが、こんなにショボかった
っけ?そんな感じ。R-TYPEΔとか、凄いのに慣れてしまっているからで
しょうか。早速やってみたのですが、1面から死ぬ死ぬ(^^;。5面のタコに
ボコボコにやられて、6面のドップ抜けのパターンとか、7面の復活パターン
とか、覚えてなくて全然ダメ。しばらく遊べそうです。因みにR-TYPE2の方は
全然やったことなかったのですが、かなり詐欺臭い敵の攻撃にゲンナリ。
難し過ぎ。
ふと、以前「プレイステーションフェスティバル」というPS2発売と同時
くらいに催されたイベントで、PS2用体験版ソフトをごちゃまんと貰った事を
思い出しました。その中にまだ「GRAN TURISMO 2000」と呼ばれていた
頃のGT体験版が入っていたので、思わず動かしてみました。やっぱ全然チゲー。
同じ本体で動作しているソフトじゃないみたい(^^;。
そういや、世の中にはヘッドマウントディスプレイというやつがありますが、
右目と左目が独立ディスプレイだとして、ちょっと角度をずらした映像を
流せれば、完全な3D映像の表示ってできるのかしら?まぁ、首を振ると景色
が変わる所までやるのは今の所無理っぽいし、目玉の焦点を変えることで
ピンボケする個所を画像で追従することも、リーズナブルな値段では今の
ところできない感じはしますので、立体写真をみるような感じが今では
せいぜいという所かしら?首振りに絵が付いてくれば、全然違う感じに
見えると思うのですけどね。
昼頃起床。久しぶりによく寝た感じ(^^;
休出。帰りに自転車に乗ろうとしたら、何故か身に覚えの無い「空気入れ」が
何故かご丁寧にヒモでくくりつけてありましたよ。自分の自転車じゃないのか?
と思ったけれど、やっぱり自分のです。ヒモをほどいてそのまま空気入れは
置き去りにしましたが、一体なんだったんだ?
インタープリタの構文解析よりも中間コードの方にむくむくと興味が移ってきた
ので、そちらの方のコーディングをしてみたり。yacc/lexの教科書では、
内部コード内での演算オペコードはスタック同士を演算引き数にすると
いう方法を使っています。例えば C=A+B だと、
push A push B add //スタックの先頭から2つのデータを取り出しその結果をスタックにpushする pop C
(setq S (+ (* A B C) (* C D))) ;
コード ; スタックの変化 push C ; 1:C push D ; 1:D 2:C mul ; 1:X push A ; 1:A 2:x push B ; 1:B 2:A 3:x push C ; 1:C 2:B 3:A 4:x mul ; 1:y 2:A 3:x mul ; 1:z 2:x add ; 1:S pop S ;
飲み会から帰ってきたら直ぐ死亡。えらい勢いで寝てしまいました。
日付け越え。
トゥナイトIIの山本監督コーナーを見たりしているうちに時間が過ぎて
しまうのこころ。
最近Cygwinが頻繁に
アップデートされている模様。インストーラが新しくなっていたの
ですが、新しいインストーラはアプリケーションカテゴリ毎に別れて
いるものの、新しくインストールされるものが直ぐに判らなくて
いまいち。と思ったら「VIEW」というボタンを押すと表示が色々切り
替わるのね(^^;
日付け越え。
特に何も進まず。む〜ん。
パトレイバーをやってました。再放送なのかしら?
何気にチャンネルを回していると「24人の加藤あい」のスペシャルを放送
していました。この番組、DoCoMoのCMでおなじみなところの加藤あい
を被写体として、その筋で有名なところの映像作家(最終的に計23人?)が、
100万円の予算で映像を製作するというものでした。出来あがる映像は
まさに十人十色で、中には撮影の途中ではどうなるのか判らないような
ものが、CGなどを使うことであっと驚く映像になったりするものとか
あったりして、結構面白かったのです。20歳になったら、またやるよう
なので、少し楽しみかも。そういや、最後のXYZは各シーンが意味あり映像で、
それらからストーリーを連想するというものでしたが、8年くらい前に、
これに似たような謎解き番組があったのを思い出してしまいました。
日付け越え。
ちょこーりコーディング。ふーむ。
日付け越え。
帰ってTV付けたらアメリカで航空機墜落事故のニュースが。
Cygwinの1.3.5がリリースされた模様。1.3.5-4を入れていたのですが、
ちょっと不具合がありアレだったのですが、説明書を勘で読んでみた感じ、
それらが全て直っている予感。
何気に足の裏を見てみたら、両足とも内出血をしたような痕が付いてて
なんかいやん。身に覚えが無いだけに一体なぜ?って感じ。
寒くて起きて、「超GALS寿蘭」とか観てみたり。意外と面白かった(ぉい
何気にPOV-Ray(MegaPOVでない方)のPPCクロスコンパイルテスト。古いPNG
ライブラリをとっておこうとリネームしたまでは良いですが、その後
/bin/rm *.o と入れるつもりが/bin/rm *>oとなってしまって、ディレクトリ
内丸ごと消去(激汗;;(<大バカ者)。後に寂しくoという名の空ファイルが
残っただけでした。
本屋に行ってふと目に入った「TrueTypeフォントパーフェクトコレクション」
という本を買ってみました。時々、筆記体風のやつ(スクリプト系というらしい)
が欲しいなと思うときがあったのですが、買うと高いのしかなかったので、
手が出ずじまいでした。入っているのは
欧文フォントだけなのですが、種類が結構入っていたので買ってみた次第。
帰ってフォントのインストールを行ったのですが、そのとき新規フォントの
インストールでディレクトリを選んでも、何故かファイルが認識されず、
別にエクスプローラでディレクトリを開いておくと認識されて、インストール
できたりと、なんか謎の振る舞いが起こりましたが無事インストール完了。
GIMPで描画して満足。終了(ぉぃ。いちいち1フォント毎にディレクトリに
入っているため、まとめてインストールする事ができないのが面倒だと思った
のこころ。
打ち合わせ。というか、色々な話題がありましたがヤバ過ぎるのもありますので
ここでは割愛(汗;。今日のキーワードは「ぷてぃさらだ」(意味不明すぎ)。
ともあれお疲れさまでした。
帰ってきたらPOV-Ray実行は終わってました。以下のような感じ。次回
コンパイラ性能テスト用のメモ。
povray31/scenes/advanced/fish13/fish13.pov Statistics, Resolution 640 x 480 ---------------------------------------------------------------------------- Pixels: 307840 Samples: 559528 Smpls/Pxl: 1.82 Rays: 823555 Saved: 3 Max Level: 5/5 ---------------------------------------------------------------------------- Ray->Shape Intersection Tests Succeeded Percentage ---------------------------------------------------------------------------- Box 621300 331121 53.29 Cone/Cylinder 77791 11814 15.19 CSG Intersection 1891531 259071 13.70 CSG Union 919854 171071 18.60 Plane 1434952 795404 55.43 Quadric 3326437 843687 25.36 Sphere 25858063 4925454 19.05 Clipping Object 190712 181889 95.37 Bounding Box 20246387 11366519 56.14 Light Buffer 33633434 19954957 59.33 Vista Buffer 11050953 8219227 74.38 ---------------------------------------------------------------------------- Calls to Noise: 600327 Calls to DNoise: 1582444 ---------------------------------------------------------------------------- Shadow Ray Tests: 2921565 Succeeded: 85220 Reflected Rays: 250601 Total Internal: 31 Refracted Rays: 13258 Transmitted Rays: 168 ---------------------------------------------------------------------------- Smallest Alloc: 12 bytes Largest: 12828 Peak memory used: 1259858 bytes ---------------------------------------------------------------------------- Time For Parse: 0 hours 0 minutes 27.0 seconds (27 seconds) Time For Trace: 10 hours 51 minutes 29.0 seconds (39089 seconds) Total Time: 10 hours 51 minutes 56.0 seconds (39116 seconds) called exit. Number of executed instructions=0x80000000*34 + 88986926
休日。雨のためと寒いのとでダラダラ過ごしてみました。
インタープリタの続き。つっても、教科書のサンプルを打ち込んだだけ(^^;
打ち間違い多数で挙動不信だったもののなんとか動作。ちょっといい感じかも。
そういや、yylinenoという外部変数を参照していて、parseエラー時に
問題のある行番号を表示させるようなサンプルになっているのですが、
何故かyylinenoの実体が無いらしく、リンク時にエラーとなりました。
ソース上、yaccのパートで参照しているので、bisonだとそれが無いのかと
思ったら、実はlexの方に関係があって、「man flex」を勘で(ぉい 読んでみた
ところ、flexの実行時に-lオプションを付けることで、lexコンパチになるという
ことの様です。
取り合えず、サンプルには実装されていないfor文やインクリメント/デクリメント
の実装を追加してみるところから始めてみようと思うのこころ。
binutilsをppcクロスコンパイル。9月頃に作ったものとアセンブル&リンク
結果をMegaPOVのPPC実行ファイルで比較してみたのですが、全く同じファイル
ができあがりました。ここ3ヶ月間では、PPCに対する変更は無いようです。
少し早く帰ってきたものの、眠くて死亡。
先日買った「エイケン(2)」を読みました。以前
こんなことを書いた手前、
最後まで見届けずにはいられまい(<最後って....)。なんつーか、
普通(<どこの普通よ)。そんな感じ(<ってそれだけかよ!)
出張。帰着。
何故か呼び戻されたので、少しの間だけ出張生活はお休み。
そんな訳で、インタープリタの作り方を考えてみたり。ずっと昔、
Human68K用にbison/flexのコンパイルを行ったのですが、そのとき
使ってみるために、yacc/lexの参考書を買いました。ところが、サンプル
をそのまま入れてみるも、イマイチ動きが不信な節があって、本格的
に使うまでに至りませんでした(ppcクロスgccをコンパイルするときには
一応正しく動作したようですが)。で、再び掘り起こしてみたところ、
「インタープリタ」というモロ答えとも言えるサンプルが載っていたので、
これを見ながら再度勉強のしなおし。yacc/lexを使用すると、
厳密な構文解析をするパーサーは簡単に作れるようなのですが、htmlの
ように、いい加減に書かれていても、それなりに動かなくてはならないもの
は、例外に対処する必要がある分、記述が結構面倒になりそうなのですが、
どんなもんなんでしょ。
先日ビルドしたgcc-3.0.2のPPCクロスコンパイラでコンパイルしたMegaPOVの
性能比較など。
---------------------------------------------------------------------------- Smallest Alloc: 12 bytes Largest: 327688 Peak memory used: 5360261 bytes ---------------------------------------------------------------------------- Time For Parse: 0 hours 0 minutes 11.0 seconds (11 seconds) Time For Photon: 3 hours 26 minutes 14.0 seconds (12374 seconds) Time For Trace: 6 hours 17 minutes 34.0 seconds (22654 seconds) Total Time: 9 hours 43 minutes 59.0 seconds (35039 seconds) Total cache size: 16720 called exit. Number of executed instructions=0x80000000*28 + 912176139
出張。何故か呼び戻され。でも明日から出張。
はぶぶ。慌てて書いて11/03と11/04が混在されてましたよ。
積読されていたIA-64関連教科書をぱらりぱらり。ごちゃまんと詰め込まれた
感じが、ある意味凄いアーキテクチャだと思ったり(^^; 一番すげーと思った
のが、バイト反転の亜種でバイト混ぜかえとか、猛烈に特殊用途という
データ操作命令があるって所。私は面倒臭いのは嫌いなので、便利命令が
あっても使わないタイプなのでアレですが、チューニング好きな人には、
様々な組合わせが考えられる分、面白いのではないかなと少し思いました。
レジスタスタックはメモリ吐き出しも自動的に行ってくれるようなので、
切り替え自体が少なければ、高速にスイッチさせることが出来そうですね。
スレッド切り替えなどには有効そう。プロセススイッチはスイッチ間隔が
長いのであまり効かない感じです。スレッドとプロセスを混ぜてしまうと、
すぐにレジスタファイルを使い切ってしまいそうなので、スレッド切り替え
だけに特化させれば良い感じがしますが、どんなもんなのでしょう。
ひとが
やっている
のをみてしまうと自分もやってみたくなってきたりして(^^;
1年ちょいぶりにやってみたら、あまりに下手になっていてびっくりしましたよ(^^;;
シューティングゲームは少し置いてまたやると、また遊べるようになっている
ところがスルメのようで良いです。
リングレーザーは画面の一番下でかわせば、たまーにしか避けなくて良い
ので楽です。たまーに来たのは縄跳び要領でリングの切れ目に合わせて
入り込めば、ほとんど動かずに避けられます。という方法でやってます(^^;
そんな感じで明日から出張です。へこん。
出張。
colors.povは特に問題はなさげ。
とりあえずppcsimとlaymanをアップ。
そんな感じで今日から出張ですm(_'_)m。
今日は東京モーターショーに行ってきました。待ち合わせに30分も遅れて
しまい申し訳無いスタートを切ってしまいましたよ(汗; KOJIさん、けいさん、
そして会場待ち合わせでオオスカシバさん。最初に断っておきますが、
私は道路交通法的に運転をしてはいけない身分(とどのつまり運転免許がない)
なので、車種の区別とメーカーの事などいまいちよく判らない人だったりします(^^;
ですから注目点は主に
おねいさん
になっています。ええ。
あいにくの雨にも関わらず、凄い人出でした。流石、国内最大規模の
イベントです。まず食事を.....と思ったのですが、人の列が凄過ぎて、
席が一向に空きません。待っていると偉く時間がかかりそうだったので、
取り合えず時間を潰してから戻ってこようかという事にしました。流石に
腹が減っているのでヤキソバで少し腹に溜めといてから移動開始。注目する
ものがNISSANのブースにあるということで、まずはそこから見て回ることに
なりました。ブースに入ってすぐ、おねいさんに見とれてしまっているうち
にみんなとはぐれてしまいましたよ(汗;この間約30秒(<バカモノ)。
見渡しても全然見つからないので、取り合えず人だかりのある所をぐるぐる。
最近のカーナビってスゲーなどといちいち驚いているところにKOJIさんから
電波(笑。それでもしつこく迷ってやっとこさ合流(T_T)。で、バラで行動
する事に(既に一人でバラけてましたが(苦笑;)。KOJIさんの「NISSANの
おねーちゃんがかわいい」というひとこと
でステージをみてみたり(ぉい。モデルさんみたいに細くて背が高くて、
後で見て周ったおねいさんとは、ちょっと毛色が違っていました。
満足(おぃ;
その後、一人でぐるぐる。
HONDAのステージでハデに踊っているのを見たり、ヘンテコな形の車を眺めたり、
カメラ溜まりになっている所に寄って眺めたり(CG参照(汗;)。ぐるりと回ったら
丁度待ち合わせ時間に。オオスさんは、まだ見る所があるというので、
KOJIさん、けいさんと適当に休憩。そしてホタルの光が流れ始める時間で
オオスさんと合流。駅が凄いことになっていたので、少しその辺で時間を
潰してからということになりロッテリアに。で、車の話など色々。と、
気が付くと21:00前になってました(汗; 新宿で飲みという事で向かったの
ですが、電車で降りる駅を通り過ぎたり(汗;色々しているうちに、逆算で
店に到着した時点で帰らないと電車が無くなる計算になってしまって
いたため、今日は飲みはあきらめることにしました。残念。で、けいさんと
途中まで一緒に帰ってきました。お疲れさまでした。
そんな感じでまとめ絵
行きがけにKOJIさんと話をした時、スレッドはイベントループに関係
なく、勝手にスケジューリングされているハズという話があったので、
帰って確認。本当だ。で、ウインドの
生成からイベントループまでを全てスレッドの中に押し込むように変更
してみたところ、ちゃんとイベントが発生しました。で、スレッド上で
動いていたLaymanやppcsimの本体をメインで動作させると、以前問題となった
シグナル消失が解決しましたよ(^^)。やたー。
gccのcvs updateを行ってみたものの、fastjarがダメ以外にも色々
ダメになってしまっていたため、最近リリースされたgcc-3.0.2を
PPCクロスコンパイル。makeはできました。
寝る前にMegaPOVをコンパイル&実行。
出張。帰着。
眠くて死亡。
出張。