少し早めに帰着。TVを観ながら、気がつくとウトウトと寝てたり。
floppyコードの調査再開。
最後は結局、FDCのリセットが
うまくゆかないというものでしたが、NGになっている直接の原因がよく
判らないという所で終ってました。もう一度、思い出しで追っかけて
みました。user_reset_fdc()からWAIT()であるところの
wait_til_done()を実行し、その中のfor(;;)ループの脱出に、非同期
にセットされるcommand_statusにFD_COMMAND_ERRORがセットされて
ループ脱出してしまうため、結果user_reset_fdc()が失敗するという
ものでした。メモリプローブ機能を少し強化して範囲内アクセスを
検出できるようにして、更に追いかけてみたところ、command_statusを
セットしているのはgeneric_done()で、そのgeneric_done()は
floppy_shutdown()のcont->done(0)で実行されていることが判りました。
そもそもfloppy_shutdown()は直接別の関数から呼んでいる訳では
なく、fd_timeout構造体のタイムアウトハンドラとして設定されており、
reschedule_timeout()内で設定されているようです。で、結局、
どこを見てタイムアウトになっているのかまで判らず。
因みに、bochsのbiosプログラムのリセットコードは、ドライブなど
の引き数をチェックして、それに対応した戻り値をセットしている
だけで、実際にリセットコマンドをFDCに送っているような感じには
なっていないようでした。うーむ。
少し早めに帰着。
linux本体のコンパイル。make終了後、objdumpで逆アセンブルして眺めた
のですが、ppcのそれと全然違いますよ(^^; という事が判りました。うーむ。
floppyコードの観察。少し思い出してきたかも。ppcsimをちょっといじる
事になりそうだったので、取りあえず今の最新をcvs commitしておく。
取りあえずリリース。御参考まで。
少し早めに帰着。
i386ターゲットでlinuxコンパイルテスト。何も考えずにCygwinネイティブ
gccでコンパイルしようとしたのですが、ずっこけ(^^;。binutilsから
buildし直し。gcc-3.0.3でずっこけたりして、結局buildするだけで終了。
初めてmake menuconfigを使ってみたのですが(ppcの時はmake config)、
戻れるところは良いのですが、どこに何があるかが判らないので、結局
make configに戻ったりして(^^; 設定を追加する分にはmake menuconfigの
方が良いと思いましたが、削るのは脊髄反射でNを入れまくれば
良い make config の方が簡単に思いました。
コンパイルしながらbochsのbiosプログラムを眺める。
以前拾った資料と付き合わせて
みると、なんとなく合っていそう。それとlinuxのfloppyコードと付き合わせ。
あぁ、すっかり忘れてしまってて、合ってるかどうかがやっぱりすぐ判らない
や。
少し早めに帰着。
先日読んだ記事を参考に、Linuxファイルシステムのディスクイメージ
を作成してみることに。取りあえずExt2ファイルシステムの作成にmke2fsと
いうプログラムが必要なようなので、
mke2fsのマニュアルから
E2fsprogsのページに。ダウンロードして、makeして(コンパイル
するのにちょっと手を入れた)、取りあえず目的のmke2fsはできました。
ところが、やり方ではフロッピーを使用してmke2fsでExt2ファイル
システムを作成して、それをネイティブLinux上でmountしてファイルを
入れるというものでした。うーむ、ネイティブLinuxが必要では意味が
無いのですが。うーん、なんかむずかしいなぁ。以前、romfsを作成した
ときの様に、あるディレクトリ以下のファイルをルートファイルシステム
にしてくれるようなツールがあればそれで十分なのですが......
少し早めに帰着。
Interface誌読み。Bochs
なるPCエミュレータを使用してブートローダから、Linuxカーネル
を起動しているのにキラリ。他、オリジナルルートファイルシステムの
構築記事を斜めに読んだり、BIOSのFD操作についての記事を読んだり。
Bochsにもオリジナルのbiosプログラムが付いているので、そちらと
合わせて読むとFD操作の方法が判るかも知れないようなそうでもないような
予感。でも眠くて死亡(ぉい。
色々実験してて結局寝たのが明け方で起きたのが昼過ぎ。今日で休日は終り。
テレビを見て、飽きたら彩でお絵描きしたりしてダラダラ過ごす。
夕立の中、買い物に出かけて洗濯して一日終了。長い連休かなと思っていたけど
あっという間に終了って感じ。
描いている最中に加藤あいになったり色々。
サイズを少し大きめで描いたので、実際はもう少し下の方まであるのですが、
力が入らなくなってきたので、結局512x512で収まるサイズでトリミング(^^;
因みに2000x2000だとなにやらスワップがガタガタ動いて動作速度的に
いまいちでした。ちょろっと円を描く程度だったのになんで?っていう気が
しなくはありませんでしたが......。
あと、サイズを大き目に変更すると、最初に思いっきりメモリを取りに
行っているのは何でしょうか?因みに、GIMPで同じく2000x2000とかやって
みましたが、そのような動作は無いようだったので、彩だけの話だと
思いますが......
本当に一日中寝てた。休みは明日で終りなのですが社会復帰できるのか?!
本屋に。今月のInterface誌はLinuxのブート&ルートファイルシステムに
ついての記事が載っていたので参考に買ってみた。
すんません、今日、キーを受け取ったのでこれから試してみます。
昼頃起床。しばらくゴロゴロしてたのですが飽きたので(ぉぃ;
先日買ってきたDVDを観ることにしました。
いきなりメモ。PS2で画面の表示比率(16:9と4:3)を変える手順。DVD再生が
始まったら、一度停止状態にして、「設定」→「画面設定」→「TVタイプ」を
変更する。DVD再生中にこの操作を行おうとしても、「TVタイプ」が変更でき
ない。30分格闘したけど結局変え方が思い出せず、観終わってから判って
寂しい思いをしてみました。
まずは「人狼」。劇場で一度観たのですが、何気にもう一度見て見たくなった
だけ。架空の歴史の一端を切り取ったドラマですが、どういったアニメなのかは
私なんぞが説明する間でも無いので省略。個人的に思うのは押井監督作品は出て
くるキャラのしゃべりが小声で聞き取り辛いのが難点。まぁ、聞き取っても
何言ってるんだか判らないという話はありますが(^^;
観終わって出かけようとしたら激しい夕立のため取りやめ。結局、もう一本
観ることに。
「BLOW」。こちらは洋画で、麻薬王 ジョージ・ユングの半生を描いた
実話を元にしたドラマです。映画通が観るっぽい作品なのですが、白状
すると、テレ朝の番組で井筒のおっさん(<おっさん呼ばわりかよ)が、
自腹で映画を観てその評価を行うというコーナーがあって、それで
最高評価を下したというのをたまたま覚えてたから、観てみようと
思っただけ(^^;。井筒のおっさんは号泣してましたが、私はまだ歳の
重ね方が足りないせいか、そこまで感情移入はしませんでした。しかし、
恐らく観る人、観る年齢によって色んな感想を持つのではないかと
思われる作品です。
特典映像では、未公開シーンやコメンタリーなど、本当に細かい
シーンにまで監督のコメントが入っているのが面白かったです。
未公開シーンでは切った理由などが細かく述べられており、
一度本編を通しで観た後でこの未公開シーンの説明を観ると、
そのシーンを挟もうとしていた部分をもう一度観たくなってしまいました。
DVDなので、音声トラックや字幕を複数持てるというメリットを最大限に
生かした特典だと思いましたが、他の作品でもここまではやらない予感が
します。機会があれば是非とも。
観終わって、飯食って、眠くなって寝た。
昼前起床。今日で休暇も半分終了。で、映画を観に行きました。
観たのはスパイダーマン。平日にも関わらず、入る時に列が出来ていたりして、
かなり不思議に思いました。つーか、明らかに映画を観るような格好では
ないネクタイ姿のおっさんとかが居て、日本の将来に少し不安を感じました。
つーか、「仕事しやがれ!」。いや、むしろヲレもか?!
テヘっ(テヘっじゃねーよ)
映画の方は素直に面白かったです。もう最近のは映像が凄過ぎて、
まばたきする暇無いもんですから目が乾く乾く。そんな感じ。
秋葉原の書泉に寄ったり、石丸でDVDを買ってみたり、神田の三省堂まで
くるっと周ってみたりして帰着。久々に運動した気分。以前は一日中歩い
てられたのに、寄る年波には勝てませんな。ゲフゲフっ(ぉ;
帰って飯食ったら眠くてそのまま寝たりして。
起きてWebぐるしたら彩の新版が出てたのでダウンロード。上のCGは
それで描いてみたのこころ。マスク→レイヤー変換は修正されて
ました。後、上のCGだとJPEGノイズで潰れて判りませんが、細い線が
良い感じでした。前描いたゴスロリちゃんの時はあまり判らなかった
のは何故だったのやら。
昼頃ふにゃふにゃと起きて(昨日と同じかよ!)散髪に出かける。しばらく
待たされている間に最近のマンガ雑誌など閲覧。連載を続けて読んでいないのも
あるのですが、あまり面白げなマンガが無いのは気のせいか?
そのまま本屋によって電撃王を査収して帰着。
先日の続き。複合スプライトをなんとかしようと真面目に見直し。何故か
REFデータにへんてこりんな値が入っていてSegfault。先日のエンディアンの罠に
引き続き、新たに構造体のパディングの罠が。そこを直してどうにか複合スプライトまで
出せたのですが、パレットのサポートが面倒臭いのと、左右反転が面倒臭いのとが
合わさって死亡。手間の割に得られるものが少ない気がしてきたので、
作業打ち切り。
これまでの作業を通してのメモ。
struct XSP_DAT{ short x ; short y ; short pat ; short info ; } ; struct USER_DAT{ struct XSP_DAT xsp ; int left ; int power ; int etc ; } ship ; xsp_set_st( &ship.xsp ) ;
ふにゃふにゃと昼頃起きてダラダラと過ごす。散髪に出かけたら本日休業。
行きつけの床屋は何故かヘンなときに休みだったりする謎。
先日の敵が出ない件、ステージデータの読み込みでエンディアン問題が
あったのが発覚。つーか、気づけよってレベルでした(^^;。何やら敵
らしきものが出て動いてはいるのですが、あんま攻撃が激しくない
なぁなどと思ってみたり。キャラ数で60くらい(SP数ではない)が平均
で、自弾が20くらい取っているようなので確かにそれほどではないかも。
明け方に宿題終了。ぴひゅ〜、臨時休暇が無ければ死んでいる所でした。
そんな感じで今週まるまる休業。
日中は眠くて死亡。
gdb内蔵MIPSシミュレータを使って遊んでみました。最初gdb-5.1をmakeして
ELFの実行ファイルを生成したのですが、何故かdwarfの読み込みでエラー
してしまいました。一応、ppcも同様にgdbをmakeして同じように実行した
所、こちらもやはりエラー。-gdwarfとかやると何気にちゃんと読めたので、
こういうものかと思いつつ、やっぱり怪しい気がしたのでgdb-5.2をmakeした
ところ、全然問題無し(^^;。むしろ-gdwarfなどとやると余計変なことに
なりましたよ。で、gdb+PSIM(ppcのgdb内蔵シミュレータのコア)では、
システムコールを使用しないプログラムでは問題なく実行することができます。
当然、Cソースコードレベルでのデバッグが可能です。ところがMIPSの方は
どうもイマイチ。以下メモ。
gdbをmakeしたりしつつ宿題。
夕方起床(汗;。ほげーんと過ごす。
宿題の提出先確認の為にメールを取った所、別のメールも入って
ました。つーか、受け取るのが遅くてすみませんm(_'_;m
そんな訳で実験でMIPSクロスコンパイラをbuildしてみたり。
binutilsはよさげですが、gccの方がイマイチちゃんとしてなくて、
buildに苦労してみたり。取りあえず動きそうなものがbuild
できたので、newlibコンパイルまで行って(ただしsyscallが
デタラメなので100%動かない事を保証(ぉぃ)、いくつか手持ちの
プログラムをコンパイルしてみたり。リンクはできました。
あぁ、もう宿題を始めないと!時間的に限界! そんな訳なので、
メールの返事は少し待ってくだされ(>関係者各位)。
少し早めに帰着。
色々いじってみたのですが、状況変わらず。面指定すると敵キャラ
らしきものが出ましたが、ちょっと出て次が続かないって感じ。
-Wallにするとwarningが結構出ていたので、取りあえずそれらを潰して
みる事にしてみました。char型の引き数を持つ関数に 32*8とか
入れている部分があったりしてますが、この辺は実害は無さそうな
予感。でも状況変わらず。うーむ、いくらエンディアンが違っている
といっても、ここまでポートが難しいのは初めてかも........
眠くていつもより早めに死亡。あぁ、宿題をやらなくてはならない
のに.....
少し早めに帰着。
ちょこりいじりの続き。何かしら絵が出る様にはなったのですが、
どうもキャラが動いていない予感。よく調べてみるとエンディアンの罠
が(^^;
*((short *) (&player->lx))
int x = 1; x = *(char*)&x; // 0:ビッグエンディアン/1:リトルエンディアン
本日休業(-_-;
Cygwinでもネイティブコンパイルできるようにハードウェアレジスタを
直接触っている部分をコメントアウト。xspの部分をちゃんと書いて
絵が出るようにしようとしたのですが、X68kのPCGのデータ構造を
すっかり忘れてしまっててInsideX68000で調査。あぁ、こんな面倒
臭い構造でしたっけ?それよりもpcgデータを読み込んだ時点では
パレットが保証されていないので、フルカラー変換できないとか。
うーむ。面倒臭くなって途中で死亡。xsp_set系関数で、画面の
外だったら戻り値が0になるというを初めて知った(^^;
ppcsimのfork()戻り値を直してテストをしていたら、予め設定した
カレントプロセスID+2のブレークポイントが消えてしまうバグが発覚。
fork()でプロセスをコピーした際にプロセス構造体に含めてしまった
ブレークポイント情報までコピーしてしまうのが原因でした。うーむ。
後藤弟がEE-JUMPを脱退したってのを初めて知った。
少し早めに帰着。
書き換え作業。iocsやdosコール系は用事のないものを除いて空関数に
置き換え。恐らく使えないだろうと思われる音系やグラフィック系
関数はコメントアウト。最終的にxsp系だけを残す状態までで終了。
その後、とりあえずxspライブラリを空関数にしてリンク。maketblが
コンパイルできなくて謎だったのですが、拡張子をmaketbl.ccにして
g++コンパイラを使用すればOKでした。取りあえず、maketblだけはCygwin
ネイティブでコンパイルして実行しておき、本体をppcクロスコンパイル。
リンク成功。テキスト領域を直接触っていると思われる所がある
ので、プロセスサイズを16MBに変更してppcsimを再コンパイル。そして
実行。適当なところでCntl-Cで止めると、Title()内でループしている
模様。一応動作している感じ。うむ。
数ヶ月ぶりに普通の時間で帰着。時間がありあまりまくり!うひょ!でも今日は
ちょっと眠かったので、横になってちょっと目をつぶったら、すっかりいつもの
帰着時間(ぉい;;
何気に先日書いたppcsimの使い方を読み返していたら、wait()の説明がちょっと
嘘を含んでいたのに気づいて修正しようと思った所、ふとfork()を実行した
親プロセスへのfork()の戻り値ってどうなってるんだっけ?という事が思い出せ
なくてソース確認。う、親プロセスへのfork()戻り値設定が抜けてる(^^;
運が悪いと親プロセスでもfork()の戻り値が0になって、場合によってはexec()
を実行してしまい、プロセスが塗りつぶされてしまうかも。使う人はあまり
いないと思いますので近日中に修正致しますm(_'_)m
何気にシューティングデモを適当なループで切ってppcsimで実行してみました。
実行後のsumコマンドの結果をちょっと加工した結果が以下。
shoot_ppc> grep '%' exec.log | sort -nr +3 | cat -n | head -10 1 lwz = 1477037808 20.592410 % 2 bc = 975735750 13.603410 % 3 add = 711364873 9.917632 % 4 subfic = 521054143 7.264378 % 5 adde = 500472575 6.977436 % 6 addi = 449131869 6.261659 % 7 rlwinm = 370506120 5.165483 % 8 lwzx = 350819015 4.891012 % 9 cmp = 265155471 3.696717 % 10 xori = 250250035 3.488910 %
昼頃起床。
newlibコンパイルの手順のまとめ。configureを実行しただけでは
ppcクロスmakeではMakefileに不具合が生じる問題は、結局スクリプトで
強引に書き換えてからmakeを実行するという方式にしました。恐らく
一発でOKになっていると思います。むしろ1.9.0の方はコンパイラのインストールの
状態によっては、エラーする可能性があったので、うまくコンパイルでき
なかったのではなかろうかと思われます(^^;
ppcsimのリリース準備やらnewlibコンパイル手順のページの作成など
しつつダラダラと過ごす。
あまりに部屋が汚いため唐突に掃除。雑誌の山を片付けたり(つっても
読まなくなったものを邪魔にならないところによけただけ(汗;)。そうして
掃除が終った後で、何気に必要な本を探したところ、どこにやったか判らなく
なったり(汗;。片付けると何故かモノが無くなる世の中の不思議(<違います)。
ふだん、本は買ってきたら
ちょっと読んですぐにそばの山に積んでしまいます。良く読むものについては
常に山の上の方にあり、読まなくなると新しい本が上に積まれていくため、
自動的に下の方に下がるというキャッシュ効果を利用してます。超整理法的
手法で効率よく情報を引き出している気分になっていますが、超整理法との
違いは横積みでなく縦積みになっているところで、一度下の方に降りていった
本をもう一度、山の上の方にキャッシュインするとき、山を崩してえらい目に
あうというのをいつもやってたりします(汗;。ちゅうか、ちゃんと本棚に
入れて、普段から整理しとけって感じですね(^^; 因みに、
プログラミング言語C(第二版)は結局見つからずじまい.........
そんな感じでppcsim-0.84とnewlib-1.10.xベースでのppcsim用ライブラリの
ページを置きました。因みに、newlibの方ですが、dirent.hを使用する
プログラムでは、Cygwinのバージョンが微妙に関係したりしますが、
使わなければその限りではありません。色々試してみてください。
という事で御参考まで。
昼過ぎ起床。寒かったので調子悪げ。ちょっこり出社。
うむ、やはり以前より遅くなっているようです。繰り返しになりますが、
恐らくgccの違いによるもので、newlib自身のコードの差では無い
と思われます。
ppcsimでのニセshテストで、exec()システムコールエミュレーションで
チョンボが発覚したり色々(汗; 修正ついでに
ちょっと機能追加してみたり色々。まとまったらリリースする予定。
本屋に。何気に雑誌置き場を眺めていたら、何やらオーラを発している
雑誌が目に付きました。その名も「Gothic & Lolita Bible vol.4」!
なんじゃこりゃ?と思い手に取って見てみたのですが、フリフリの服が
満載です。これをネタとして買わずに居られましょうか!?(<普通居られます)
不勉強なもので、初めて「ゴスロリ(ゴシック&ロリータの略)」なる
テクニカルターム(<ちげー)を聞いたのですが、そういうファッションの
ジャンルを指す言葉のようです。具体的にはビジュアル系バンドで
ある所の「MALICE MIZER」とかはゴスとロリの中間といった所で、
「アダムスファミリー」はゴス、FF10だかに出てきたルルとかいうねぇさん
はゴス寄り、エロゲーなんかに出てくるフリルだらけの服はロリ、
PINK HOUSEの服は(柄が派手でないので)ロリ寄りといった所。
雑誌の中に「暮らしの手帳」と題したゴスとロリの一日の生活だとか、
マナーだとかの事が書いてあるのですが、ほんまかいな?って感じの事が
真面目に書かれているのがシュールで笑えます(笑うと怒られそうですが(汗;)。
また、パーティー用お菓子で「ショコラ・ド・コルセット」
だとか「くもの巣のタルト」だとか、わざと選んだようなへんなお菓子
が紹介されていたり、ドクロのオブジェ(主にゴス用)だとか、
呪いがかかってそうなちょっと恐い感じの人形(ゴスロリ両用?)だとか
も紹介されています。最後には写真の服の型紙が付いていて、自分で作ろう
ってな記事もあったりと、
その筋には大満足だと思われる内容になっているようです(<その筋では
ないのでよくわかっていない)。
見てて思ったのは、ゴスとロリは完全に裏と表の関係にあるように見える
のですが、何故かゴスロリとして一つのジャンルにまとまっています。
相反であるが故対立とかありそうなのですが、そこはゴスロリのマナーとして
紳士淑女であるべき(いや、そう書いてありましたので(汗;)という所が効いて
いるのかも知れません。因みに、
コスプレと同じでは?という感じがしなくもありませんが、あくまで
ファッションであるというのが筋として通っていて、我が道を行く
オリジナルである事がポイントのようです。従って、ファイティング
バイパーズの「ハニーの服」はゴスロリ調だけど、「ハニー本体」は
コスプレ女という定義なので、ちょっと違うって感じなのでしょうか。
そんな感じで仕入れた知識をフル活用して描いてみました。
一つわかった事。ゴスロリ(ロリ寄り)ファッションは描くのが大変
です(汗;;; 因みに「ゴスロリ」をキーにWeb検索すればイヤっちゅうほど
引っかかりました。
そういや、彩の0.8.0.4を使用しましたが、マスクからレイヤーへの変換で
左端が変換されないバグは直っていないようです。
少し早めに帰着。
ふいにnewlibの1.10.0がリリースされていたのを思いだし、少し古くなって
いるppcsim用ライブラリを更新しようとmakeを行ってみました。
ヘッダを1.9.0と比較してみるとsys/dirent.hが違っている事が発覚。
しかもCygwin-1.3.xで変更された旨がかかれており、構造体メンバが
変更になっているため、このままではニセlsが動きませんよ!(事実
動きませんでした(涙;) 他にもスタートアップの
コンパイルでエラーしたり、libmのコンパイルでi386専用の
チューニングライブラリをコンパイルしようとしてppc用asでエラーしたり
色々。で、取りあえずmakeはできました。一部makeのエラーを回避する
ためMakefileの書き換えを行う部分があり、その辺どうやって一発OKに
なるようにするべきか考える必要がありそう。
性能を比較するため、MegaPOVをライブラリリンクだけをし直す形で
buildしppcsimで実行した所、遅くなってました(笑。恐らく、gcc-3.0.x
系列での実行命令量増加の影響だと思われますが、ライブラリ自体に
は問題は無さそうです。もう少し時間のかかる奴を実行して寝る。
そういや彩の0.8.0.4がリリースされていましたが試せず。
日付け越え。
こんな感じかな という訳で完成。次は実際の実行コード生成&実行部分の
コーディングを行ってみようかと思っているのこころ。
少し早めに帰着。
Cygwinアップデートをかけたらlibpngが更新されていたのですが、
インストールするとコンパイル用ヘッダがアンインストール
されたりして謎。「development libraries and headers」を選んで
インストールするとOKに。最近はruntimeライブラリだけインストール
して終了って感じになってるのかしら?
インタープリタの続き。関数の引き数は専用スタックに積んで、
引き数の数が合わない場合は取りあえずずっこけない様にしてみる
方法でインプリメント中。ちょっとごちゃごちゃしてきたので、
一度仕様を整理した方が良いかと思っていんぐ。
日付け越え前に帰着。
関数使用の仕込みの続き。どうやって引き数の数をチェックしようかと
少し悩む。C言語の様にプロトタイプを宣言するか、ボトムアップ方式で
枝葉の関数をファイルの先頭の方から順に書くかすれば、参照の
前に必ず宣言が行われるため、チェックを行う事が簡単になるのですが、
プロトタイプ宣言は面倒だし、記述に制限が付くと使うのが面倒臭く
なりそうだし、ついでにボトムアップ方式は個人的に好きでないので、
全ソースを舐めた後で関数の参照チェックを行うようにする方法で
考え中。
昼過ぎ起床。体調すぐれず
インタープリタで関数を使うための仕込みをしてみたり。定義されてないと
参照できないとかbuiltinキーワードとの衝突チェックの仕込みなど。
そういや、先日の ++i, i++ の話ですが、ppcクロスコンパイラで出てくる
コードを見てみました。すると、-O0では
2 9
6 10
i=1 ; 10034: 38 00 00 01 li r0,1 10038: 90 1f 00 08 stw r0,8(r31) j=1 ; 1003c: 38 00 00 01 li r0,1 10040: 90 1f 00 0c stw r0,12(r31) i=i++ + i++ + i++ ; 10044: 81 5f 00 08 lwz r10,8(r31) 10048: 81 7f 00 08 lwz r11,8(r31) 1004c: 7d 49 53 78 mr r9,r10 10050: 7d 60 5b 78 mr r0,r11 10054: 7d 09 02 14 add r8,r9,r0 10058: 81 3f 00 08 lwz r9,8(r31) 1005c: 7d 20 4b 78 mr r0,r9 10060: 7c 08 02 14 add r0,r8,r0 10064: 90 1f 00 08 stw r0,8(r31) 10068: 39 29 00 01 addi r9,r9,1 1006c: 91 3f 00 08 stw r9,8(r31) 10070: 39 6b 00 01 addi r11,r11,1 10074: 91 7f 00 08 stw r11,8(r31) 10078: 39 4a 00 01 addi r10,r10,1 1007c: 91 5f 00 08 stw r10,8(r31) j=++j + ++j + ++j ; 10080: 81 3f 00 0c lwz r9,12(r31) 10084: 38 09 00 01 addi r0,r9,1 10088: 7c 0b 03 78 mr r11,r0 1008c: 91 7f 00 0c stw r11,12(r31) 10090: 81 3f 00 0c lwz r9,12(r31) 10094: 38 09 00 01 addi r0,r9,1 10098: 90 1f 00 0c stw r0,12(r31) 1009c: 7d 6b 02 14 add r11,r11,r0 100a0: 81 3f 00 0c lwz r9,12(r31) 100a4: 38 09 00 01 addi r0,r9,1 100a8: 90 1f 00 0c stw r0,12(r31) 100ac: 7c 0b 02 14 add r0,r11,r0 100b0: 90 1f 00 0c stw r0,12(r31)
1002c: 38 80 00 06 li r4,6 10030: 38 63 82 b0 addi r3,r3,-32080 10034: 38 a0 00 0a li r5,10 10038: 90 01 00 14 stw r0,20(r1) 1003c: 4c c6 31 82 crclr 4*cr1+eq 10040: 48 00 01 55 bl 10194 <printf>
昼過ぎ起床。
うだうだと過ごしながら何気に先日の実験コードのサンプリングを16x16から
256x256にしてみたり。実行時間は256倍になったけど(汗; 見た目の変化は無し。
ふむ。
そんな感じでちょっとお出かけ。うひー、今日は暑いっす。「怒首領蜂大往生」
が入荷されていたのでやってみました。のっけからえらい弾の量なんです
けど(汗; なんか最初から怒首領蜂の5面以降をやっているような気分なの
ですが、それよりは緩いかしら?二面で全滅。うーむ。
TVを観たりCGを描いたり。
なんだか昨日から風邪気味気分が治らずヘコリ。この季節に風邪にかかると
気温が微妙なだけに、暑くて寝てられないとかもろもろの理由で治りにくい
んですよね。ピンチ。
昼前に起きてフェスタ68に行ってきました。
いつものごとく昼過ぎてからの到着でしたが、もうすっかりまたーり気分になって
ました。これもいつもの事なのですが(^^; 村上さんとしんさんにお会いして、
色々お話をし、それからくるっと回って久々な方々とご挨拶。少し痩せてて最初
本人かどうか判らなかった潤ちゃんに、すっかりX68kから足を洗ったKOCKYさん、
たまたま隣に居た立花えりこさん、また更に太ったSaTa.氏に、商品品切れで追加
増産を行っていたただちょんさん、いつもコスプレのK-GIRLさん、みなさんお元気
そうでなによりでした。そして食事にでかけていた まさちくさんにご挨拶。
途中私が携帯の着信音を切っていてKOJIさんからまさちくさんの携帯に私宛の
電話がかかってきたりして(^^;どうも申し訳ありませんでした。
今回はセリカさんを見るのが目的でしたが、別の製品にお客さんが集まっていた
ようで、近況などはお話でうかがうだけでしたが、まだ色々とありそうな
予感でした。性能の方についてはまだこれから測ってみるといった感じ。
その後、KOJIさんと合流してうろうろしながらOSの話をしたり、酒を飲みながら
彩の話をしたり。
帰ってから細い線のアンチエリアスについて少し実験コードを書いてみたのですが、
オーバーサンプリングで面積反映しても、ピクセル間のダマは発生してしまいますな(^^;
単純に輝度が1.0のピクセル一つと、輝度0.5のピクセル二つや輝度0.25ピクセル四つは
見ため的に別と考えるのが正しい模様。じゃあ正解は?と聞かれるとうーむ。
昼前に起きて休出。
帰ってきた後、スターウォーズ特別編を見て力尽きて死亡。
いきなり休業(汗;;;;
色々はまって、どうにかそれっぽいコード生成できるようになりました(^^;
以下のようなコードに対して(コードの内容に意味は無し)、
while( $val0<10 ){ $val0=$val0+1 ; for( $val1=0,$val2=0 ; $val1<10 ; $val1=$val1+1 ){ $val3=$val3+$val1 ; if( $val3>20 ) { break ; } $val0=$val0+2 ; } }
label50 : push val[0] --+-- $val0<10 while_cond push 10 | lt --+ btrue label52 push val[0] --+-- $val0=$val0+1 push 1 | add | pop val[0] --+ push 0 --+-- $val1=0,$val2=0 for_1st pop val[1] | push 0 | pop val[2] --+ label53 : push val[1] --+-- $val1<10 for_2nd push 10 | lt --+ btrue label54 b label55 label56 : push val[1] --+-- $val1=$val1+1 for_3rd push 1 | add | pop val[1] --+ b label53 label54 : push val[3] --+-- $val3=$val3+$val1 push val[1] | add | pop val[3] --+ push val[3] --+-- $val3>20 push 20 | gt --+ bfalse label57 b label55 label57 : push val[0] --+-- $val0=$val0+2 push 2 | add | pop val[0] --+ b label56 label55 : b label50 label52 :
日付け越え前に帰着。
for文のフロー制御を考えてみました。
取りあえず「for(1st;2nd;3rd){statement_list}」を一つのfor文と
考えた場合、基本的な流れとしては、 1st→2nd→statement_list→3rdと
なるのですが、bisonで構文解析した場合、パターンがマッチした時点で
アクションが起こってしまうため、3rdのコードをどこかに覚えておく
機構が必要になります。それだとちょっと面倒なので、どうにかして
3rdのコードをパターンがマッチしたその場で生成してしまいたい
所です。そこで、コードは構文の順に生成するようにして、
ラベルを付けまくって無理矢理流れを繋いでしまうように考えてみました。
┏━━━━━┓ ┃ 1st code ┃ ┗━━┯━━┛ │ ┏━━┷━━┓ ┃ 2nd code ┃←──┐ ┗━━┯━━┛ │ ┌────┘ │ │ ┌────┐ │ │ ┏━━┷━━┓ ↑ │ │ ┃ 3rd code ┃ │ │ │ ┗━━┯━━┛ │ │ │ └────│─┘ ├true──┐ │ │ ┏━━┷━━┓ │ false ┃ ┃ │ │ ┃statement ┃ │ │ ┃ ┃ │ │ ┗━━┯━━┛ │ │ └────┘ └────┐ ↓ フローチャート(うわっ!(笑)
| LEX_IF '(' if_cond ')' { printf(" btrue label%d\n",$<label>9) ; /** trueの時 labelにブランチするコードの生成 **/ } '{' statement_list '}' { printf("label%d :\n",$labelID) ; /** labelを置く **/ $<label>$=labelID++ ; } ;