malloc()こねくりまわしの続き。malloc()の出口から順に止めながら逆トレースして
みると、sbrk()の値がどうも良くないらしい感じ。x68klibcの説明通りに作ったのですが、
それによれば、「正常にブレーク値を変更できた場合は0を返し、失敗した場合には
-1を返して、変数errnoにその原因を示すエラーコードを設定する。」とありました。
ところが、GNUソフトウェアプログラミング(O'REILLYの黒鳥本)の、sbrk()のスタブ関数例
を見てみると、正常な時に返す値が全然違ってますよ。うーむ、x68klibcの実装では
heapの先頭とか不明な点があるので、よく考えればうまくいかないと判った様な気が
してきたりして。修行が足りませぬ。
後はstdioを、テキストモードの無いライブラリとしてコンパイルしたので、open()
時にO_BINARYでフォースするとか色々。
でも、まだdjpegは正しく動いてません(T_T)。strlen()で、
すっ飛んだアドレスをアクセスしている模様。ついでに djpeg -h で出てくるメッセージ
のプログラム名など所々(null)だったりしてかなり怪しい。ぷぅ。
malloc()こねくりまわし。コメントを読むもどうにも判らず。つーか、猛烈に
眠いので寝る。
newlibこねくりまわしの続きの続き。argを渡せるようにしてみました。多分OK。
でも、malloc()で確保した領域にfread()するとargが壊れました。原因はmalloc()
で確保される領域の先頭が0x00000000の為、0x200に設定したarg領域が破壊された
模様。でも、malloc()で確保される領域の先頭アドレスをどうやっても変更でき
ない。なじぇ? いじりまわすも変わらず。ぐぅ。寝る。
newlibこねくりまわしの続き。いきなりdjpegというのは無謀だという事に気づいた
ので、もっと簡単なテストを通す事にしました。Unknown System Callなsbrk()と
fstat()をエミュレーションした所、printf()はあっさり動きました。ただ、
fdに下駄を履かせる方法になっていない為、コンソールにそのまま表示されるのが
良いのか邪魔臭いのか微妙な所。でも、いくつか動作不良が見つかりました(T.T)
朝、もよおした(生理現象)ので起きました。なにげにテレビ
をつけてみると、セーラームーンの再放送をやってました。まだ月野うさぎがピン
でしか登場していなかったので、かなり最初の頃だと思われます。弟が居る設定とか
初めて知ったので衝撃的でした(^^; 絵がものすごくしょぼかったです。エンディング
で「平成4年に放送されたものです」とテロップが出てました。まさかこの数年後に
リカちゃん人形の地位を脅かしたり、半社会現象になったりするなんて
思ってませんでしたよ。逆に、もう8年も前になるのか...とか思うと時間の流れの
速さを思わず実感してみたりしました。日曜の朝から重いよネっ!
床屋に行って帰ってきて、だらだらとソースコードクルージング。取りあえず、
newlibを使ってdjpegのリンクができる所までもってきましたが、ストリームの
実装や必要なシステムコールが今までとかなり違っているので、地味な修正
(インターフェースを理解してそれに合わせる作業)が必要です。
まぁ こんなもんですね。
所で、sbrk()という関数(POSIX的にはシステムコール?)がありますが、Linuxなど
(libcX68kも)はbrk()をシステムコールとしてそれを使用する形でsbrk()を
ライブラリ実装しています。なんでLinuxではsbrk()をシステムコールとして
実装していないのかご存じの方がいらっしゃいましたら、是非教えていただきたい
です。
Cygwinの方は最新のgccをダウンロードしてVer1.00と思われるCygwinで使えた
のですが、何故か一緒にダウンロードしたgdbが立ち上がらなかったり、今まで
コンパイルしたバイナリが使えない場合があったりで、面倒臭くなってきたので
ほったらかし(^^;
makeがきちんと動作するという点は捨てがたいだけにあきらめきれないのが
しくりです。
GRAY-1,2が出ました。ロックオンサイトを後方に動かせないのが
こんなに辛いとは思いませんでした。スペシャルアタックはGRAY-1,2の方がWR
のそれより強力な様でした。
前日呑んで、今日は昼まで寝てました。ダメな休日の始まり方です。
起きてゲーセンに出かけました。ダメさ加減を加速している感じがしますが、
どうせダメなら程度の差など無いから良いのです
(<開き直るなよ)。もちろん、
サイヴァリアをやりにです(^^;。で、特に目新しい進展は無し。うまいっぽい
人が居たので観てました。
ショット撃たずに(少しは撃ってますが)先に進んで
いるのはどういう事ですか?! BUZZのチェインで体当たりをかまして
進むという少々インチキ臭い感じのしなくもない、でも真似のできない方法で
やってました(^^; でも、死ぬと終わりって感じで、最終面まで進むという訳では
なく、ちょっとガッカリだったかも(この辺が"っぽい"にかかっています)。
で、RAYCRISISを買いました(<脈絡無し)。多分、私的に最後になるであろう
PSソフトの購入です。アーケード版の移植なのですが、当時、本物お仕事が
忙しかった事もあり、殆どゲーセンに行くことができなかった間に消え去って
いました(^^;
デキの方は、まぁ良好。読み込みが遅いので、PS2互換モード専用なのか?と
も思ったのですが、PS2を持っていないので改善されるものなのかどうかは
よく判らづ。処理落ちが激しい感じがしなくもないですが、丁度良い具合に
弾がよけやすくなっている感じがします。
絵の方はそのまんまなので良いです(^^) てゆーか、このごちゃごちゃ感が
実は好きです。
コンティニューしまくりでクリア。最後の"卵"の非道い仕打ちに泣きそうに
なりましたが、背景のグラフィックがなんか凄かったので許す(<何様?)。
この辺、PS2(ネイティブ)でやればもっとスムーズに動く様な感じがしたので、
PS版として出すより、グラフィックを強化したPS2専用ソフトにすれば、もっと
良い感じになるんでないかなぁと思いました。
そんなことよりも、ストーリーがRAYFORCEに繋がっているという事実に
驚きましたよ。この事実が判った後、ゲームにも色々隠しのモードとかありそう
なので、思わず
「もしやRAYFORCEが入っているのでは?」
とか勘ぐってしまいました。って、ある訳無いか(^^;
なにげにCygwinのダウンロードサイトを眺めていたら、latestというディレクトリ
の中が最近更新されているっぽい事を発見。もしかしたら、makeがこけるのも直って
いるかも......という期待を込めてダウンロード。所が、なにやらDLLが無いとか
言って怒られてしまいました。そんな!もう一度よくlatestを見てみるとcygwin
というディレクトリもあるじゃないですか。これぁcygwinごとダウンロードしろと
いう事ですかっ!で、ダウンロード。でも、DLLと.EXEがいくつか入っているだけ
で、どれを入れ替えれば良いのならさっぱり。なんだか、ディレクトリ構成も
変わっていて、usr/binとかいうディレクトリも存在している様子。これって、
Ver1.0という奴なのでは?
インストール方法がよく判らないので、B20のそれを見ながら入れてみました。
で、起動。sh.exeはB20のでも動作するちっく。で、問題だったppcのlibmを
makeしてみると.......OKですよ!(^^)v
問題はB20のgccが、新しいCygwinで動作しないという所(^^; これもgccをダウンロード
してくれば解決するのかしら?
あと、環境が特殊な感じになってきているのがいまいちですなぁ.......
glibcの方は、結局無限ループに違いないとの判断で、configureからやり直しました。
mathの部分だけ手でmakeを実行して、終わった所で続きをmakeした所どうやらうまく
いった感じ。でも、寝てる間に終わってたので、いまいちよく判らず。
突然思い出したので、newlib
という組み込み用Cライブラリをおもむろに展開してみました。
こっちを先にコンパイルする事を考えればよかった.......そんな感じ。
それとなくコンパイルしてみた所、なんなくmakeできたので使ってみようと思った
のですが、_startとか全然用意されていない様だったので、あえなく撃沈。まぁ、
当然と言えば当然ですが。しかた無いので、glibcのcsuディレクトリ(C Start Upの
短縮形だと勝手に予想)からそれっぽいものを拾って来ようとしたら、glibcの
迷路の様なincludeファイルの依存関係にはまって、萎え萎え。
で、
萎え萎え中
(<動けよ)
私的にnewlibが良いなと思った所は、
乳として.....いやいや、遅々として進まず。POV-Rayの方はほったらかしにして
いた浮動小数点関連関数をバリバリ実行している為、全く正しい結果が得られない
事が判明。というか判ってたのですが(<だったら直せよ)。
strtodとかも使わないから大丈夫と放っておいたのが、そろそろまずくなってきた
様です。しかたないので、glibcのフルコンパイルに挑戦中。Humanでやっていた
時は、makeが実メモリで8MB以上必要とするという、とんでもない結果により惨敗
してほったらかしになっていました。今回はメモリの方は大丈夫な様ですが、
makeが赤○白×
を出す事があるという不安定っぷりで、へろへろになっています( __)/□
現在、部分makeを実行中。うまくコンパイルできる様ならば、glibcをそのまま
使ってしまうというのも、悪くはないかなぁと密かに思ってみたりしている中。
make中にエロCGサイトを順調に閲覧(ぉぃ; やっぱマルチタスク動作してくれる
というのは便利ですな。
ハイテクの無駄遣い臭い気ははしなくもありませんけどネっ!
(<無駄遣いです)
うーん、なんだかmakeが無限ループしているちっくな予感....
サイバリア((c)SUCCESS)をやりました。カスりでパワーアップする(BUZZるという
らしい)というのだけを噂で聞いていたのですが、カスらせるなんて余裕はまるで
無しな感じで
瞬殺されましたよ。 うまい人が居たので、
しばらく見てました。偉い勢いで弾が出ているのですが.....なんで?
よーく観察していると、ジョイスティックをぐりぐり動かしていると、速射され
るらしいという事が判りましたよ。
む、これで鬼に金棒です!再度やってみる
も、あえなく撃沈(ToT) キーっっっっっっ!!!
大人げなくコインをつっこみ、気が付くと1000円があっさり吸い込まれていたりしま
した。シューティング好きとしてダメ過ぎます(<社会人としてもです)。結局、
一番簡単なルート(DARIUSの様なRayCrisisの様なそんな感じでルート選択ができます)
で、まぐれで5面いった所で終了。ふぅ、今日の所は許してやるか(<何様?)。
グラフィックは綺麗だし、ハイリスクハイリターン(得点には返ってこなかった気も
しましたが)のゲームシステムだしで、いきなりお気に入りですよ。ただ、速射の為
にジョイスティックを動かすそのサマが、見ため的にどうかという気がしますが。
で、HSPの本を見つけました。以前、マイコンBASICマガジンを立ち読みした時に、
このHSPシステム対応プログラムというのが掲載されていました。その時は
何なのか判りませんでした(Winパソコンも無かったので興味も無かった)が、
これ、ちょっとよさげなんでない?
「HSP(Hot Soup Processor)はMicrosoft Windows上で手軽に使えるスクリプト言語
システムです。テキストによるスクリプトを書くだけで、誰にでも簡単にWindows上
で画像表示、メニューシステムの構築ができます。多彩な命令セットを使いこなす
ことでCG集や音楽集、デモンストレーション、そしてゲームアプリケーションまで
作成することができます。」
だそうです。早速インストールしてみましたよ。いきなりProgressiveJPEGを表示
しようとして、赤○白×
が出たりしましたが(^^;、全然OK!むしろバッチリです。
また、単にスクリプトとして実行するだけでなく、.exeを生成する事もできる様
なので、X-BASICとBCを使うよりもお手軽です。言語的には昔のMicrosoft系列のBASIC
臭く、goto/gosubを使ってフロー制御を行うのが基本っぽかったり、switch文が
無い様なので、if文を並べなくてはならなかったりで、なんだかすぐにもつれて
しまいそうですが、一応関数宣言もできる様なので、それっぽく書けば大丈夫っぽい
感じがします。それを引いても、ちょっとした事をやるには十分だと思います。
う〜ん、すばらしい。
数年ぶりにボーリングをやりました。筋肉痛で右腕が上がりません。 あまり
にも運動不足過ぎるかも(^^;
povrayの方はしばらく実行したのですが、0x7fffffffカンストを10回以上出しても
終わらないので、怪しいという事で止めました。入力ファイルのparseまで到達して
いないという事で、それらしい所まで進めて止めてみると、
__ieee754_sqrt()内で無限ループしている事が発覚しました(^_^; -gでコンパイル
して追っかけようと思い再コンパイルした所、無限ループしなくなってしまいました。
まあ、よくある話ですね。
取りあえず、先に進めた所、今度はUnknown SystemCall Number.ときたもんです。
getcwd()は確かに無かったので、追加して再び実行。またUnknown Syscall。
今度はtell()が無いときました。このコールはLinuxのシステムコールとしては
存在して無い様だったのですが、X68k-libcでは使用されているので、No.200と
して勝手に付け加えたものだったのです。Cygwinのライブラリでも、これに相当
するSyscallは無かったので、コメントアウトしていたものでした。うーーん、
どうすれば良いのかなぁ........
仕方ないので、PSIMの方を試してみました(<脈絡無し)。gdb-4.18に入っていたの
で、makeしてみました。PSIMのリファレンスマニュアル通り、
CC=gcc ./configure --enable-sim-powerpc
--target=powerpc-unknown-eabi --prefix=/applications/psim でconfigure
を実行して、makeを実行するだけ。最後のリンクで、いくつか関数が足りないと
怒られ、リンクできなかったのですが、readline/kill.c内でのカット&ペースト
に関連すると思われる関数だったので、全部コメントアウトして逃げました(^_^;
問題なのは #if defined (__CYGWIN32__) の中のルーチンだったので、関数が
無い事自体が変という所だったりしますが。
で、テストプログラムをダウンロードして、いくつか実行してみました。実行の仕方も
リファレンス通りに実行すれば良い様です。全くgdbを使っているのと変わらない
感覚なので、本当にPSIM上で動作してるんかいな?という感じですが、target sim -I で
シミュレータを起動すると、gdb終了時に実行した命令のプロファイルが出てくる
ので、動いている様です(たぶん......)。
一部 target sim -I -e netbsd とかやって、
システムコールエミュレーションする事を明示的に宣言しないと標準出力に出て
くるハズの結果が出なかったりする様です。povrayの方をこのシミュレータで
読み込んで実行してみたのですが、あえなく撃沈(T-T) _startとかが全然違う
ので、どうにかしないとなんともならないといった感じでしょうか。
PSIMのソースはsim/ppc の下に入っていたので、少し眺めてみました。キャッシュ
モデルもきちんと作られている様で、かなり巨大なソースとなっています。
というか、一部のソースは自動生成されている様です。
sim/の下には mipsやshもある様なので、ppcと同じ様にシミュレーションモード
で動作できそうな感じです。ただ、ppcの様にキャッシュなどまで作り込んでは
いない様なので、色々できるかどうかは不明です。
取りあえず-hの方を調べるのはヤメにして、シーンファイルを食わせてみる事に
しました。しばらく実行すると終わったのですが、ログが途中で切れていました。
よーーっくシミュのログを見てみると、実行命令数が-1で止まっていました。
0x7fffffffステップ実行して停止した様です(^^; まさか、カンストするとは
思いませんでしたよ(^^;;; ちょっこり修正して再び実行していますが、
終わりませんよ。
しかたないのでうぇぶぐるぐる(ぉぃ; Vectorからマンデルブロ集合を描くプロ
グラムをダウンロードしてみる。微妙に好きかも(^_^; 好きな所を拡大して再描画
できるので、特異点っぽい所を拡大して遊んでみたり。何度繰り返してもマンデル
ブロですよ(あたりまえ)。ひとしきり遊んだのですが、まだ povrayの方は実行
されてますよ。マンデルブロを描かせてたからか?(^^;
うぇぶくるーず にはまっておりました。どんどん深い方に沈んでいってしまうので、
危うく戻れなくなる所でしたよ。思ったこと。
「世の中には色んな事を思いつく人がいるんだなぁ」
なにげにCygnusのページを見ていると、
http://sourceware.cygnus.com/projects.html
に、PSIM
なるものを見つけました。PowerPCのシミュレータで
すよ奥さん! 組み込み用プログラムの開発などで使用するものの様なの
ですが、同じ事を考える人は居るものだなぁと思いました。なんでも、gdbの方に
組み込まれている様なので、PPCクロスgccで開発したプログラムを、シミュPPCを
駆動するgdb上で実行してデバッグできるというすばらしい事になっているらしい
です。これ、誰か使った事ある人いないかなぁ。というか これを使って組み込み
PPCハードウェアの為のソフトを作った経過を日本語のページで公開している人が
いないかなぁ(<注文多すぎ)と、とちょっとだけ思ってみたりして。
近いうちに試してみようかと考え中。
システムコールのエミュレーションもできる様なので、システムコールの
動作を似せるという条件で、このgdb上でPPCネイティブのコンパイラが動けば、
もしかしてそのまま使えてしまうのでは?とか思ったりして。おおぅ、なんだか
楽しい事になってきたのぅ(^^)(<一人盛り上がり)
POV-Rayをクロスコンパイルしてみました。リンクには成功したので、
povray -h を実行してみたのですが、すっとんだアドレスをアクセスしてしまって
いる模様。確かに、レジスタの値が変なので、もっと手前から値を追っかけないと
ダメかも.......ぷぅ。
連日、夜遅くまで遊んでいるものですから、眠くて死にそうですよ。つーか、今日は
死んでました(^_^;
Cygwin関連のページを作ってみました。役に立つかどうかは判りませんが、私的には
Cygwinはヒットソフトなので、地味に使っていこうと思っています。
ページを更新した後で、なにげに「浮動小数点系って壊れてないかなぁ?」と思い、
djpeg -dct float ..... を実行してみました。
即死でした(T-T)。
原因は...... floatのload/storeで、doubleの上位4byteをそのままload/storeしていた
というのを始め、そこらじゅう間違いだらけ(T-T)。
ダメ過ぎです。
なんとか修正して正しくロードできる様になりました。ふぅ。
GIMP for Winをダウンロードして入れてみました。ちょっと触ったら落ちたので、
ほったらかしにしました。
ppcライブラリの一部(libc.aとlibm.a(これは数学関数ライブラリ))をコンパイルテストして
みました。あっという間に終わりますよ。
しかも、-O0でないとgccがハングしていた関数も-O付きでバッチリコンパイルできました。
ただ、glibcから持ってきたlibmのリンクでmakeが赤丸白×出して止まってしまいます。手で
arコマンドを実行すれば大丈夫の様ですが.....ううむ、いまいち。
小物ツールをCygwinで動く様にして、djpeg-ppcを最初から作ってシミュで動作させる所まで
やってみました。バッチリです(^^)v とは言うものの、実はIJGのライブラリが一番敷居が
低かったりするので、まだまだこれからなのですが。
で、なにげに、ネットで拾った少し大きめ(500*912)のエロエロ画像を試しにX68kで展開
テストしてみたのですが、そこで驚愕の事実が発覚しました。X68k+Xellent30(33MHz)で
djpeg -ppm (もちろんm68kネイティブ)で、42秒かかったのですが、PentiumIII(550MHz)
+ppcsim上のdjpegが23秒で終わりました。
シミュの方が倍近く速いというのはどういう事ですか?!
Windowsマシンはエロに強いのですか?!(<関係ありません)
色々比べてみましたが、X68kの実機より速いです。あわわ....m68kとPentiumIIIの速度差
って一体.......計算するのイヤになってきましたよ。 昨日、速度が変わらなかったと
いうのは、かなりな気のせいだったらしいです。因みに、Cygwinのコンソールは驚くほど
遅いので、コンソール表示するかリダイレクトでファイルに落とすかで、ずいぶん速度が
変わる様です。それにしてもっ!これってどうよ?
ちょっこりぐるぐるした所、AltIMEというソフトがちょうどよさげな感じ。早速拾って入れてみま
したが、もうバッチリですよ!
.emacsに日本語に関する設定を追加して、font-lock-modeを足してみました。はぅ〜〜〜っ、
幸せのc-modeですよ!(^o^)ちう訳で、現在HTMLモードで書き中。幸せすぎて死にそうです(ちょっ
と嘘)。
ppcsimのMakefileをよくみると、オプティマイズしていなかった事が判明。そんな!つーか、それ
であの速度なのですか?! 期待して -O6 とか加えてました。でもほとんど実速度が変わった様に
感じませんでした。しくり。というか何故?
クロス環境も、エディタも揃ったので、Winでppcライブラリのメンテとかできそうです。メモリが
足りなくてしくりな思いをした関数も大丈夫かも。楽しみです(^^)
白羽の矢がっ。帰れないし。しくり。
くじけていたMeadowのインストール。何が大変ってアーカイブを拾うのが大変というのがしおしお
です。かなりトホリな方法でなんとかゲット。インストールは簡単で良いですね。
で、使えましたとも、えぇ。でも、CntlキーとCapsキーが逆なもんですから、全然ダメダメざます。
キーを入れ替えるソフトを探すけど、なんだかいまいちどれが良いのやらよく判らず。つーか、
眠くて判断できず(ぉぃ 今日はもう寝るです。
ミーティング1回目。食って呑んでお話して へろへろです〜〜〜〜。
Zzzzzzzzzzzzzz............
KOJIさんからの電話で起きる(^^; 時間までppcsimをいじってみたり。うーん、もうちょい
なんだけどなぁ。で、ミーティング2回目に出撃。
Venus-Xのまさちくさんと奥さんのU子さん(漢字が判らなくてすみません)、Interface誌の村上さん、
ベンチで色々とご協力をいただいているしんさんに、KOJIさんと私。めちゃめちゃリアル
&熱い話で、すげー盛り上がり。あまりに凄すぎてここにはちょっと書けません(^^;
へろへろでppcsimいじりの続き。色々勘違い部分を修正。標準IOの動作がいまいちですが、
動きました(^^)v
PentiumIII(550MHz)+Cygwin上でのppcsim.exeで、djpeg -ppm foo.jpg -outfile foo.ppm が
約10秒,djpeg -gif ... で約25秒でした........
って、速すぎですよ奥さん!!
それぞれ、Xellent30でのシミュ時間が2時間と12時間
だったのにっ!!! 力ずくで書いてあるコードでこれですから、まじめに作ればm68k(10MHz)の
実機並に動く様な気がっ!今まで騙されてました(<そうか?)。つー訳で、KOJIさん、
バーチャルマシンの方をよろしく(^^)/(と煽っておくテスト)
SYSTEMAXのKOJIさんの許可をいただいたので、リニューアルオープンされた(ハズ)の
SYSTEMAXのHPにリンクを張ってみました。「(部分的に)まだできてないし」との事でしたが、
しっかり張らせてもらいましたよ。Power-Xのバーチャルマシンに期待っす〜。
ppcsimの方を先にいじる事にしてみました。とりあえずバイトオーダをひっくり返してフェッチ
/ストアできる様にしてみました。が、セグメンテーションバオレーション(^^; 原因は.......
しおしおなバグでした(^^;;
でも、いまいちうまくゆかず。どうやら、sc命令のエミュレーションでopen()のフラグが異なっ
ている事が原因みたい。ありがちな話ですね。うーむ、どうしよう。
とりあえず(関数の戻り値などから)結果の方はそれなりのものが出ている様なので、そこそこは
動いているかなぁ。
今日は夕方からPower-Xミーティングです(^^)