昔の最近の出来事(2001.11)

2001/11/30

少し早めに離脱できたので、帰りに「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 ~
$ 

ぶぅ。ユーザ名ちゃうやん!

2001/11/29

その日のうちに帰着。

グラフィック描画の方は色々試してみたのですが、どうもうまく描画がされません。

  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);

って感じで、作った gd->vramに、(UINT)gd->vram[gd->bi.bmiHeader.biWidth*y+x]=pix みたいな感じでデータを入れれば、SetPixel(gd->hdc_back, x, y, pix) と同じ事になるのだと 思っているのですが違うのかしら?いまいちデバイスコンテキストハンドルと オブジェクトの関係が判ってないのがアレなので、SelectObject()が何の為に 必要なのかとか、必須のおまじないとかが判らないのが へっぽこです(^^;

メガデモとかのサイトから参考になりそうなソースが得られないかなぁと思って 少し探してみたのですが、大抵ソースはなくてヘコリ。

2001/11/28

回復しないため、本日休業。結局、一日寝てました。

夕方になって復活。なにげにメモリ増設などを考えてみたので、近所のパソコン屋 に行ってみました。本当に安くなっててびっくりしたのですが、あるのは値札ばかり でモノが全然置いてありません。店員に聞いてみるも、目に見える分が全てだと 言いう事でした。つーか、なにそれ?

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 */

てな感じの描画完了待ちのセマフォを使ってみました。1/60秒以内に再描画準備が できれば、60fpsで描画が行われるという予定です。それ以上かかる場合は同期 に間に合わなくて、30fpsに描画落ちになるという仕掛け。

で、本題。まず疑ってみたのが、ppcsimの時に判ったSendMessage()。ところが、 これについては先日教えてもらった方法で、再描画サイクルを伸ばしているので、 基本的にネックにならないハズです。実際にSendMessage()部分だけをコメントアウト しましたが、実行時間はコメントアウトしてない場合とほぼ同じということで、 速度低下には貢献していませんでした。
となると次はhdcへのピクセル描画を行っているところのSetPixel()ですが、これを コメントアウトしたところ大幅に改善。と言う訳でSetPixel()はやっぱりネック という感じです。
因みに、基本はPowerX-VMのtspと同じなので、遅さ加減を「見比べて」みたの ですが、PowerX-VMと速度が変わりません(激汗; どういうこと?!つーか、 遅過ぎですよ!ぷーっ(ぉぃ

ppcsim on ppcsim.exe ができるようになったので、PPC一命令の実行に要する シミュレータ上でのPPC命令数をカウントしてみました。平均で1ppc命令 の実行に約350ppc命令 くらい使っているようです(実際のPPC上でppcsimを動作 させると350倍くらい遅くなる予定って感じ?)。もう少し多いかと思ったのですが 意外と少ないかも。

2001/11/27

あぁ、調子悪い一日でした。

あまりの寒さに耐えかね、ホットカーペットをゲット。本当はベッド とかでほんの少し高い位置に居るだけでエアコンの恩恵を大幅に 受けられるところなのですが、まぁよしとしたところ。ごろごろ してると眠くなるのが麻薬です。

PS2値下げ。シャギャーーっ!わずか一週間で これですか!これは罠かも!そうかも!(<違います)。

ハンドルネーム占い を試してみました。中吉。「中途半端に良いですね」 ですって。あまりに言い得て妙って感じだったので、思わず笑って しまいましたよ(^^;

既定についてですが、確かにユーザ登録時の事は疑ったのです。 以前、HDDを入れ替えた時に再インストールをせざるを得なかったので、 その時、一応ユーザ名をきっちり入れたつもりだったの です。Cygwinもそのときに入れなおしたので、それでイケると思った のにNGだったのです。で、最後の砦として複数ユーザ管理だったの ですが、撃沈という始末だった訳です。$USERについては1.1.8では すでにどうだったか覚えてないのですが、確かごく最近の奴から、 起動時に$HOMEが定義されていなければ、$USERの名前で、/home (実際にはcygdrive/home)の下にユーザ名でホームディレクトリを作成する ようになっていたと思います。因みに、我が家では昔のCygwinの しがらみから、$HOMEをAUTOEXEC.BATに指定しているため、/homeの下に ユーザ毎のディレクトリは作成されませんが、これを外して再起動し、 Cygwinを起動すると、やっぱり「既定」というホームディレクトリが作成 されました(^^;。なもんですから、お手上げ中って感じなのです。

あぁ....今日もダメ......パタ。

2001/11/26

調子が悪くてほんの少しだけ早く帰着。

threadの止め方をBBSにて教えていただき、手を入れてみたのですが、 作り的にppcsimに合うかどうか微妙な感じでした。と言いますのは、VRAM描画は 基本的にネックではないため、用事の無い時でもバックバッファからの描画転送を 行ってしまうことは、それ自体がムダ描画になってしまうのです。従いまして、 先日調査したように、VRAM描画がネックにならないバッファサイズを探すのが 一番効率が良いようです。

何気にpxas,pxlkをCygwinでコンパイルしてみようとしたのですが、asmマクロが 散りばめられていてNG。コンパイルできればPPCネイティブコンパイルしてみよう かと思ったのですがヘコリ。先々の手間を考えると、CPU依存のプログラム にしてしまうのは、今は得策では無い(CPU依存部分の書き換えよりも、 書き換えた部分にバグがないか確認する手間の方が心配)ように思うのですが どうでしょうか。

あぁ....だんだん調子が悪くなってきたので、もう寝ます(X_X)

2001/11/25

昼頃起床。

先日の自己シミュレートNGの件を一応調査。なんの事は無い、メモリアクセス マクロのちょんぼなだけでした。で、djpeg on ppcsim on ppcsim.exeの実行 時間は以下。ちなみに展開したデータは これ(../title_c.jpg)です。

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

約9分(^^;。因みにdjpeg on ppcsim.exeなら1秒程度で実行終了します。 本当、まんま一番最初にX68kでやってた感じですよ。

休出予定でしたが、風邪ぶり返しで死亡。ニュースでは天気が良かった という事でしたが、別に暖かかった訳ではないのかしら。
ppcsim-0.73を置きました。ご参考まで。

2001/11/24

昼頃起床。日記の日付けが変だし(^^;

グラフィックデバイスがらみで一件バグ発覚。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% 


でもよくよく考えてみますに、ハードの自己診断と言いましても、CPUは 出来合いのものですので、実際にはOS起動から自動運転でテストプログラムを 数本動かしてずっこけなければOKという感じになると思いますので、やっぱ あまり使い手はないかも知れません。プロセッサから設計する場合なんかだと、 CPUの上で命令列をランダムに生成し、シミュレータと自己実行との結果を 比較するなんて事はやるのでしょうけどね。それを考えると、自己シミュレータ を使うことで、CPUの不良を判断する事がもしかするとできるかも知れませんが どうでしょう。

師匠なんて呼ばれるほどの者じゃないです(^^; 確かに最終面は かなりエロい感じのグラフィックなんですよね(^^; まるでギーガーの 画集のような合法さを感じます(<わかりにくいたとえ)。ラストはR-TYPE同様 「ひたすら避けてください(高橋名人)」(*1)って感じで攻略もへったくれも無いのが アレなのです。もうクリアされた頃でしょうか?(^^)。
LEOは一回しかやったことありませんが、サーチレーザーとか武器が強力だった ので、割と遊びやすかったような気がしましたけどね。でも、あれは 別物という話は、(理由は判りませんが)よく聞いたような気がします。

そそ、1-4面と5-8面の二本立て。両方買うと1万円越えるって奴。後に CD-ROM版が出ましたが、Hu-CARD版が発売されてから随分経った頃だったのと、 PC-Engine自体もCD-ROMとの一体型が発売されたのは随分後だったので、 私は大して損した感じはしませんでしたけどね。むしろ5-7面をパスワード を使って必ずフルパワー状態で始められるため、Hu-CARDの方が5-7面を 楽しむという意味では良かったかも。事実上、5-7面はノーミスで行けないと 8面クリアが死ぬほど難しいだけなのですが、その度に1-4面をやるのは 耐えられないと思います(^^;。

(*1) 十数年前にやってた「大竹まことのPCランド」とかいうPCエンジン 向けゲーム番組で高橋名人が出てて、PC-Engine版R-TYPE IIの最後の 8面を素っ裸の状態からラスボスを倒す所までの実演を行ってたのですが、 最後フォースを打ち込んだ後の攻略方法として出たセリフ。てっきり 思いもよらない安全な攻略があるのか?と思って見ていたらこれだったので、 「真似できるかーーっ!」と思わず突っ込みを 入れてしまった記憶があります。


「モーニングおっさん」にばかうけ。てゆーかナイナイ岡村、凄過ぎ。

2001/11/23

起きたら既に暗くなっててびっくりしましたよ(激汗;

なにげに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面 から急に狙わないと、すぐにゲームオーバーになってしまいます(^^;。やりこみ が足りないのでチェインなんかが全然取れません。ただ、玉をキャッチする 操作性がちょっといまいちな感じで、意図したものがなかなか取れない 感じがしますが、慣れの問題なのかも。

2001/11/22

その日のうちに帰着。

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) ;
}


で、ppcsim内でのウインドへの描画反映は以下のように行ってみました。

#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


GdevBufはVRAM領域アクセスが行われた時のアドレスを、ロード/ストアに関係なく 保持します。実際の格納コードは GdevBuf.buf[GdevBuf.c++]=ea ; で行われています。 GdevBuf.nはバッファサイズが入っており、バッファが満杯になったら、前記の 描画コードが走るという仕掛けです。

実際の測定ですが、バッファサイズGdevBuf.nを 2**n アドレスぶん確保する ようにし、n=0〜16(1〜65536個)まで変化させたときの実行時間を測定しました。 以下実行結果。

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秒


という感じ。まるで嘘のように直線になっています(^^;。n=8あたりから ほとんど変化が無いのは、ウインド描画にかかる時間よりもシミュレータ実行の 方が支配的になり、サチっているからでしょう。注目すべきところ は、実行するppc命令列自体は同じなので、VRAMアクセスするピクセルの量は いずれも同じという点。nが少ないとアドレス→ピクセル変換を行う際の、 ループコードを余計に通過するという差はありますが、このループコード を実行する時間よりもPPC命令のデコード&実行の方がよっぽど時間がかかる ため、ピクセル変換にかかる時間はほとんど無視できると考えられます。となると、 nのサイズに関係する部分は一つ、「SendMessage(gd->win,WM_PAINT,0,0) ;」 の通過回数という事になります。で、実際にSendMessage()のみ をコメントアウトして実行してみたところ、nを変化させても、全ての実行において 2〜1秒くらいで実行完了となりました。これにより、「DrawPix(gd,x,y,pix) ;」で 1ピクセルづつ関数呼び出ししている(実体はSetPixel(gd->hdc_back, x, y, pix);) ことは速度低下には貢献(?)していないことになり、単純に「SendMessage()が 遅いだけ」という事が言えます。

結局、遅い関数およびシステムコールはできるだけ呼び出し回数を減らす という極めて普通の結論に落ち着いてしまった気分です(^^;。

現状、VRAM領域の実体はmalloc()取得したメモリ領域であり、VRAMの描画は そのメモリ領域から、デバイスコンテキストハンドル内のバッファ領域に コピーしているため、VRAM領域をデバイスコンテキストハンドル内のbitmapと 共通にすれば、コピー分の時間を短縮できると思います。後は非常に 長い間隔で、SendMessage()を実行するように改善すればOKという感じでしょう か。問題はデバイスコンテキスト内のbitmapを直接操作する方法が判らないと いう点なのですが(^^;

という感じで合ってます?(^^;(>KOJIさん&しんさん)

ところで、Cygwin特有の話なのかも知れませんが、SendMessage()を短い間隔で 実行すると、signalが消失してしまうようで、Cntl-Cがなかなか伝わらなかった りするようです(テストした時は、n=0とかだとCntl+Alt+DELで殺すしかなくなり ました)。本来SendMessage()など、ウインドメッセージ系のWin32-APIは どの程度の間隔で実行するのが良いのでしょうか?

2001/11/21

少し早めに帰着。今日一日、目がしょぼしょぼしてていやんでした。

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もの回路を組めるというのは凄いと思います。イヤホンが マイクになるというのは、この電子ブロックで知った豆知識だったかも。
そういや、この頃の電球の回路図記号は○の中にフィラメントをイメージ したΩのような図を入れるものでしたが、中学から高校にかけての間に、 ○の中に×を描いて電球となったのをいきなり思い出しました(^^;

2001/11/20

その日に帰着。会社にいるうちに少し風邪が治ってきた感じ。 そんなヘンに丈夫な自分の体がなんかイヤん。

先日グラフィックデバイスに手を入れて、同期コマンド無しで グラフィック描画に反映するようにしたのですが、それにより、 PowerX-VM用のバイナリがそのまま動作するようになっているハズ。 ということでテスト。一応そのまま動作しますが、死ぬほど遅くて ちょっとびっくり(汗;。PowerX-VMではパシパシ切り替わるcolor.zですが、 ppcsimで動かすと最初の一枚を描くのに数分を要するというのはどういう こと?

そういや、我が家のWin98ではログインユーザ名が「既定」というわけの わからない名前になっていて、日本語コードを受け付けられない RCS(on Cygwin)のciなんかがうまく使えません。で、複数ユーザ環境にして みたのですが、一応ログインしたときのユーザ名は指定したものに なっているものの、Cygwinのbashではやっぱり環境変数USERが「既定」 になっていてヘコリ。もちのロンでRCSもやっぱダメ。一番ヤなのは、 何も解決してないのに、毎回パスワードを入れなきゃならなくなったところ。 ぐったりパンダ。

ただのメモリアクセスなら全然速い模様。ぐふっ。

とかやっているとTBSでアニメが始まりましたよ。一部で話題沸騰な ところの「ちっちゃな雪使いシュガー」という奴らしいです。 これ自体は悪くは無いのですが、全身で「CGTV」が始まる事を期待していた のでガッカリ感倍増。

2001/11/19

日付け越え。風邪気味でヘロヘロ。

先日のPS2体験版ソフトの中に「花火の」があったので、入れてみたの ですが、起動せず。しくり。

ppcsimのグラフィックデバイス周りに少し手を入れてみたり。

眠くて死亡。

2001/11/18

昼頃起床。テレビ観ながら洗濯したり掃除したり。

なにげに日本語文字対応の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映像の表示ってできるのかしら?まぁ、首を振ると景色 が変わる所までやるのは今の所無理っぽいし、目玉の焦点を変えることで ピンボケする個所を画像で追従することも、リーズナブルな値段では今の ところできない感じはしますので、立体写真をみるような感じが今では せいぜいという所かしら?首振りに絵が付いてくれば、全然違う感じに 見えると思うのですけどね。

2001/11/17

昼頃起床。久しぶりによく寝た感じ(^^;

休出。帰りに自転車に乗ろうとしたら、何故か身に覚えの無い「空気入れ」が 何故かご丁寧にヒモでくくりつけてありましたよ。自分の自転車じゃないのか? と思ったけれど、やっぱり自分のです。ヒモをほどいてそのまま空気入れは 置き去りにしましたが、一体なんだったんだ?

インタープリタの構文解析よりも中間コードの方にむくむくと興味が移ってきた ので、そちらの方のコーディングをしてみたり。yacc/lexの教科書では、 内部コード内での演算オペコードはスタック同士を演算引き数にすると いう方法を使っています。例えば C=A+B だと、

push A
push B
add    //スタックの先頭から2つのデータを取り出しその結果をスタックにpushする
pop  C

こんな感じになります。スタックがレジスタ代りみたいなイメージでしょうか。 因みに、コンピュータアーキテクチャの教科書の 定番であるところの「ヘネパタ本」に、このスタック同士を演算するような 実際のハードウェアアーキテクチャが紹介されていて、まんま 「スタックアーキテクチャ」と呼ぶそうです。このアーキテクチャ でインプリメントされたマイクロプロセッサも実在するようですが、 ハードウェアアーキテクチャとしては、スタックは順番にしか取り出せない ため、ループ変数をレジスタに保持しておくことでメモリアクセスを 減らし、パフォーマンスを上げるような技が使えないため、 イマイチといった感じでしょうか。 さておき、ソフトウェア的にみた場合、スタックアーキテクチャだと、 レジスタが無いため、レジスタマッピングを考える必要が無いという メリットがあります。逆ポーランド記法であれば演算命令の並びを順に 実行すれば良いです。これを考えると、ネストの一番深いところから 実行していけば良いLISPは、スタックアーキテクチャで実行するのに 構文解析するのが非常に簡単な気がします。S=A*B*C+D*Eだと、
(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  ;

てな感じにコード生成すれば良いという感じでしょうか。
実際の中間コードの実行では、スタックをできるだけレジスタに割り当てる ようにすれば、スピードが稼げそうですがどんなもんなのでしょうかね。

TRICK2(Cは左右反転)が来年から始まるですか。楽しみ。

2001/11/16

飲み会から帰ってきたら直ぐ死亡。えらい勢いで寝てしまいました。

2001/11/15

日付け越え。

トゥナイトIIの山本監督コーナーを見たりしているうちに時間が過ぎて しまうのこころ。

最近Cygwinが頻繁に アップデートされている模様。インストーラが新しくなっていたの ですが、新しいインストーラはアプリケーションカテゴリ毎に別れて いるものの、新しくインストールされるものが直ぐに判らなくて いまいち。と思ったら「VIEW」というボタンを押すと表示が色々切り 替わるのね(^^;

2001/11/14

日付け越え。

特に何も進まず。む〜ん。
パトレイバーをやってました。再放送なのかしら?

何気にチャンネルを回していると「24人の加藤あい」のスペシャルを放送 していました。この番組、DoCoMoのCMでおなじみなところの加藤あい を被写体として、その筋で有名なところの映像作家(最終的に計23人?)が、 100万円の予算で映像を製作するというものでした。出来あがる映像は まさに十人十色で、中には撮影の途中ではどうなるのか判らないような ものが、CGなどを使うことであっと驚く映像になったりするものとか あったりして、結構面白かったのです。20歳になったら、またやるよう なので、少し楽しみかも。そういや、最後のXYZは各シーンが意味あり映像で、 それらからストーリーを連想するというものでしたが、8年くらい前に、 これに似たような謎解き番組があったのを思い出してしまいました。

2001/11/13

日付け越え。

ちょこーりコーディング。ふーむ。

2001/11/12

日付け越え。 帰ってTV付けたらアメリカで航空機墜落事故のニュースが。

Cygwinの1.3.5がリリースされた模様。1.3.5-4を入れていたのですが、 ちょっと不具合がありアレだったのですが、説明書を勘で読んでみた感じ、 それらが全て直っている予感。

何気に足の裏を見てみたら、両足とも内出血をしたような痕が付いてて なんかいやん。身に覚えが無いだけに一体なぜ?って感じ。

2001/11/11

寒くて起きて、「超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


yacc/lexの勉強の続き。構文を解析する手順のイメージは掴めた感じ なのですが、具体的にそれを表現する段階でどう書けば良いかすぐに 思いつかなかったり。慣れれば自転車に乗れる感覚(どうして乗れなかった のか判らなくなっているような感じ)だと思うのですが、どうでしょ?

はぶぶ「PSYVARIAR -COMPLETE EDITION-」ですか! すげー欲しい!しかーし、うちには肝心のPS2本体が 無いし!でも、うちのゲーム機は大抵、ある決まった ゲーム専用機になるのが当たり前なので、PSYVARIAR専用機として買って しまうか?!
R13 て黒い奴でしたっけ?すっかり忘れてしまってますが、通風孔を抜けるところ で、ヘンなのにフォースを打ち込んでガッチリ刺さると、デルタアタックゲージ がガシガシ上がる状態になりつつ、紐のガードが割りと良い感じに効くので、 後は下の方で出てくる敵を瞬殺しつつスクロールと同じ速度で後ろに下がり ながら上からの弾を避けて、やばくなったらデルタアタックというパターンで どうにかなったような気がします。問題は文字で書くほど簡単ではなかった ような気がする点でしょうか(^^;でも、 6面後半から後は、R13が一番有利だったように思います。理由は、硬い敵 でも、上手くフォースを打ち込めば、掴んで離れないため、デルタアタック ゲージがすぐに溜まるからです。自ら溜めにかかるRXもしかり。なもんですから、 ほとんどフォースをコントロールできないR9はどの面でも泣きそうになるほど フォースが役立たずな感じがします。
私は6面ボスがこのゲーム中一番しんどかったような気がしますので、ここを 越えれば勝ったも同然。多分(ぉぃ; つーか、5面クリアで6面があることを知り 愕然とし、6面クリアで7面があることを知り泣きそうになったくちですけどね(^^;

2001/11/10

休日。雨のためと寒いのとでダラダラ過ごしてみました。
インタープリタの続き。つっても、教科書のサンプルを打ち込んだだけ(^^; 打ち間違い多数で挙動不信だったもののなんとか動作。ちょっといい感じかも。
そういや、yylinenoという外部変数を参照していて、parseエラー時に 問題のある行番号を表示させるようなサンプルになっているのですが、 何故かyylinenoの実体が無いらしく、リンク時にエラーとなりました。 ソース上、yaccのパートで参照しているので、bisonだとそれが無いのかと 思ったら、実はlexの方に関係があって、「man flex」を勘で(ぉい 読んでみた ところ、flexの実行時に-lオプションを付けることで、lexコンパチになるという ことの様です。
取り合えず、サンプルには実装されていないfor文やインクリメント/デクリメント の実装を追加してみるところから始めてみようと思うのこころ。

binutilsをppcクロスコンパイル。9月頃に作ったものとアセンブル&リンク 結果をMegaPOVのPPC実行ファイルで比較してみたのですが、全く同じファイル ができあがりました。ここ3ヶ月間では、PPCに対する変更は無いようです。

2001/11/09

少し早く帰ってきたものの、眠くて死亡。
先日買った「エイケン(2)」を読みました。以前 こんなことを書いた手前、 最後まで見届けずにはいられまい(<最後って....)。なんつーか、 普通(<どこの普通よ)。そんな感じ(<ってそれだけかよ!)

2001/11/08

出張。帰着。 何故か呼び戻されたので、少しの間だけ出張生活はお休み。

そんな訳で、インタープリタの作り方を考えてみたり。ずっと昔、 Human68K用にbison/flexのコンパイルを行ったのですが、そのとき 使ってみるために、yacc/lexの参考書を買いました。ところが、サンプル をそのまま入れてみるも、イマイチ動きが不信な節があって、本格的 に使うまでに至りませんでした(ppcクロスgccをコンパイルするときには 一応正しく動作したようですが)。で、再び掘り起こしてみたところ、 「インタープリタ」というモロ答えとも言えるサンプルが載っていたので、 これを見ながら再度勉強のしなおし。yacc/lexを使用すると、 厳密な構文解析をするパーサーは簡単に作れるようなのですが、htmlの ように、いい加減に書かれていても、それなりに動かなくてはならないもの は、例外に対処する必要がある分、記述が結構面倒になりそうなのですが、 どんなもんなんでしょ。

2001/11/07

先日ビルドした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


このような感じ。以前はこんな感じ。 以前よりも実行命令数が107460260と大幅に減っていますが、前回はzlibとpnglib は再コンパイルしていなかったのを、今回は行ったため減っているように見えて いるかも。zlib,pnglibはそのままのバージョンで比較しなおす必要があるかも 知れません(^^;

2001/11/06

出張。何故か呼び戻され。でも明日から出張。

はぶぶ。慌てて書いて11/03と11/04が混在されてましたよ。

積読されていたIA-64関連教科書をぱらりぱらり。ごちゃまんと詰め込まれた 感じが、ある意味凄いアーキテクチャだと思ったり(^^; 一番すげーと思った のが、バイト反転の亜種でバイト混ぜかえとか、猛烈に特殊用途という データ操作命令があるって所。私は面倒臭いのは嫌いなので、便利命令が あっても使わないタイプなのでアレですが、チューニング好きな人には、 様々な組合わせが考えられる分、面白いのではないかなと少し思いました。
レジスタスタックはメモリ吐き出しも自動的に行ってくれるようなので、 切り替え自体が少なければ、高速にスイッチさせることが出来そうですね。 スレッド切り替えなどには有効そう。プロセススイッチはスイッチ間隔が 長いのであまり効かない感じです。スレッドとプロセスを混ぜてしまうと、 すぐにレジスタファイルを使い切ってしまいそうなので、スレッド切り替え だけに特化させれば良い感じがしますが、どんなもんなのでしょう。

ひとが やっている のをみてしまうと自分もやってみたくなってきたりして(^^; 1年ちょいぶりにやってみたら、あまりに下手になっていてびっくりしましたよ(^^;; シューティングゲームは少し置いてまたやると、また遊べるようになっている ところがスルメのようで良いです。
リングレーザーは画面の一番下でかわせば、たまーにしか避けなくて良い ので楽です。たまーに来たのは縄跳び要領でリングの切れ目に合わせて 入り込めば、ほとんど動かずに避けられます。という方法でやってます(^^;

そんな感じで明日から出張です。へこん。

2001/11/05

出張。

2001/11/04

colors.povは特に問題はなさげ。
とりあえずppcsimとlaymanをアップ。

そんな感じで今日から出張ですm(_'_)m。

2001/11/03

今日は東京モーターショーに行ってきました。待ち合わせに30分も遅れて しまい申し訳無いスタートを切ってしまいましたよ(汗; KOJIさん、けいさん、 そして会場待ち合わせでオオスカシバさん。最初に断っておきますが、 私は道路交通法的に運転をしてはいけない身分(とどのつまり運転免許がない) なので、車種の区別とメーカーの事などいまいちよく判らない人だったりします(^^; ですから注目点は主に おねいさん になっています。ええ。
あいにくの雨にも関わらず、凄い人出でした。流石、国内最大規模の イベントです。まず食事を.....と思ったのですが、人の列が凄過ぎて、 席が一向に空きません。待っていると偉く時間がかかりそうだったので、 取り合えず時間を潰してから戻ってこようかという事にしました。流石に 腹が減っているのでヤキソバで少し腹に溜めといてから移動開始。注目する ものがNISSANのブースにあるということで、まずはそこから見て回ることに なりました。ブースに入ってすぐ、おねいさんに見とれてしまっているうち にみんなとはぐれてしまいましたよ(汗;この間約30秒(<バカモノ)。 見渡しても全然見つからないので、取り合えず人だかりのある所をぐるぐる。 最近のカーナビってスゲーなどといちいち驚いているところにKOJIさんから 電波(笑。それでもしつこく迷ってやっとこさ合流(T_T)。で、バラで行動 する事に(既に一人でバラけてましたが(苦笑;)。KOJIさんの「NISSANの おねーちゃんがかわいい」というひとこと でステージをみてみたり(ぉい。モデルさんみたいに細くて背が高くて、 後で見て周ったおねいさんとは、ちょっと毛色が違っていました。 満足(おぃ; その後、一人でぐるぐる。 HONDAのステージでハデに踊っているのを見たり、ヘンテコな形の車を眺めたり、 カメラ溜まりになっている所に寄って眺めたり(CG参照(汗;)。ぐるりと回ったら 丁度待ち合わせ時間に。オオスさんは、まだ見る所があるというので、 KOJIさん、けいさんと適当に休憩。そしてホタルの光が流れ始める時間で オオスさんと合流。駅が凄いことになっていたので、少しその辺で時間を 潰してからということになりロッテリアに。で、車の話など色々。と、 気が付くと21:00前になってました(汗; 新宿で飲みという事で向かったの ですが、電車で降りる駅を通り過ぎたり(汗;色々しているうちに、逆算で 店に到着した時点で帰らないと電車が無くなる計算になってしまって いたため、今日は飲みはあきらめることにしました。残念。で、けいさんと 途中まで一緒に帰ってきました。お疲れさまでした。

そんな感じでまとめ絵
cg011103.jpg

行きがけにKOJIさんと話をした時、スレッドはイベントループに関係 なく、勝手にスケジューリングされているハズという話があったので、 帰って確認。本当だ。で、ウインドの 生成からイベントループまでを全てスレッドの中に押し込むように変更 してみたところ、ちゃんとイベントが発生しました。で、スレッド上で 動いていたLaymanやppcsimの本体をメインで動作させると、以前問題となった シグナル消失が解決しましたよ(^^)。やたー。

gccのcvs updateを行ってみたものの、fastjarがダメ以外にも色々 ダメになってしまっていたため、最近リリースされたgcc-3.0.2を PPCクロスコンパイル。makeはできました。
寝る前にMegaPOVをコンパイル&実行。

2001/11/02

出張。帰着。
眠くて死亡。

2001/11/01

出張。


TOP PREV