2012年11月28日水曜日

出口が見えてきた

今週は辛い作業になるだろうと思っていたが、意外と簡単に出口が見えてきた。
10年前の俺が残した文書がずいぶん役立った。
ありがとう。10年前の俺。確かに受け取ったぞ。

今日は早めに帰って来たので、先週までやっていたラインアセンブラのしらみつぶしテスト用コードの改造作業を始めた。
今日はそのコードを探すだけ。
今年の3月にUbuntuに乗り換えたので、古い機械のHDD内をあさらなければならない。
もうずいぶん前に書いたものなので、どこにしまったか忘れてしまった。数年前、異常に忙しい暑い夏にPCが壊れ、応急的に安いPCを買ってきて作業を続行し、その冬に新型機を買い、暑さで壊れたPCと応急PCから、少しずつデータをコピーしていた(なかなかまとまった時間がとれなかった)。
そのせいで、非常にごちゃごちゃしたディレクトリ構成になっていた。
また、何で開発していたかもよく覚えていない。Virtualマシン上のLinuxでの開発だったか、Cygwin上での開発だったか、Borland C++ Builderを使っていたか、Eclipseを使っていたか。Eclipseは、Windows上で動くものが3本(一本は特定のマイコン専用)入っていて、Linux上で動くものが1本あった。
findで探そうにも、ファイル名を忘れているので手がでない。

しばらく探して、やっと見つかった。
その他、懐かしいものも色々見つかった。
タイムスタンプを確認すると2010年12月にいじったのが最後だ。つまり、その時点でdisasmの作業は終わっていた。
約2年放置していた事になる。
最後にいじってから、しばらく東京をはなれており、その後年度末のドタバタが始まり、3.11があった。
妙に忙しかったり、暇でも電気がなかったりして、いつの間にやらほったらかしモードになった。
今年になってだいぶ落ち着いたが、3月にUbuntuへの乗り換えをしてしまったため、使い方の習得や開発環境の再構築、VAIO C1-VRX/K用のFrameBufferドライバ改造など、余計な事をたくさんやっていた。

この数年だけでも色々なことがあったものだ。
夜に一時間だけで書いているコードなので、あまり頭を使わないでもいい書き方になっている。
しかしながら、重要な部分へのコメントは書いてあり、その当時の努力を感じる。
未だに、昼にばっちり働いて、夜に別の作業をするには勢いをつけないといけない。帰宅途中に「帰ったら、やるぞ!」みたいに気分を盛り上げておいて、帰り着いたらすぐに作業を始める。
その当時もそのように踏ん張っていたのだろう。

どんなに困難な作業でも、諦めずに続ければ、いつかは出口に到達できる。
自宅での作業も出口が見えてきた。
明日は発掘されたソースの改造方法を検討しよう。

2012年11月25日日曜日

雲見で潜ってエネルギー充填

雲見へ行ってきた。最高の海況で楽しめた。

天気は最高。水温20℃(俺のダイコンでは19℃)。透明度20m以上。
ロクハンなので、寒くない。水温的には、5mmでもイケたかも。
わずかに流れがあるが、流れる方向へのダイビング。
ドリフトダイビングになるほどでは無かったが、結構な距離を移動してもほとんど疲れない。
波、うねりはほ無し。

今回は、生姜のお茶を持っていって、みんなで飲んだ。
フィリピンで買ったフィリピン製、日本で買った日本製、日本で買った中国製の3種類を持っていったが、みんな日本製の生姜茶を選んでいた。「フィリピン製もピリリとして、おいしいよ。」と奨めてみたが、ダメだった。
自分はフィリピン製の生姜茶と中国製の生姜茶を飲んだ。
生姜茶をたくさん持っていったので、カメラは無し。

シマシマが無くなって、顔が黒くなっている超巨大イシダイを何匹も目撃した。
透明度の高さから広範囲が見渡せるためだろう。たぶん見えにくいだけで、ふだんからそれくらいはいるのだろう。
24アーチのテングダイも穴からでて外にいた。
キラキラ光るキビナゴの群れを下から見上げたり、ムレハタタテダイの群れがいたりと、群れモノも多かった。
ショップのボスの後ろをついて行っているとき、ボスのキックでイソギンチャクがひらりと舞い上がった。
そして、その下に小さなタコがいた。
タコはビックリして、すぐに穴に逃げ込んでいった。
エビがいるのでタコも多いと思うが、いつも隠れていてあまりみえない。

帰りに、大渋滞に巻き込まれ、19時ごろに厚木。
下道で移動していたので、厚木で夕食にした。厚木に住んでいたころ、しゃぶしゃぶ食べ放題だったお店が、ビフテキ、ハンバーグ、パスタを注文すると、サラダバー、カレーライス、パン、デザートが食べ放題になるお店になっていた。
そのお店で、ビフテキを食べた。
もちろん、サラダ、カレーライス、デザートも食べた。

明日からは、10年以上前に作った機械の中へ深く潜航して問題の調査をしなければならない。
しばらくは本当の海には潜れないだろう。
年末年始を心置きなく楽しむには、この仕事を綺麗に解決する必要がある。
デバッガ無しで作った装置だ。しかもOSにBugがあったため、メーカに少し修正してもらったものだ。
OSはその当時でも、もう少し良いものもあったが、そのメーカが出していたミドルウエア(FATドライバとTCP/IPプロトコルスタック)を利用したかったので、そのOSになった。
結局、装置開発時、OSやミドルウエアの不具合修正やチューニングをかなり行った(もちろんデバッガ無しで)。
その当時は今よりも若かったからできたが、今またそこへ潜るとなると、体力的にきついだろう。
わかっていても、またやらねばならない。

今日の海と食事が明日からのエネルギーとなってくれることを望む。

2012年11月24日土曜日

ラインアセンブラ3

結局、昨日の夜、食後にPUSHM, POPMも書いた。
過去に作ったMotorola-Sレコードにしたバイナリを逆アセンブラでアセンブリ言語化して、それをラインアセンブラに食わせた。
昨日の段階で、サイズが同じになることは確認していた。

今日になって、バイナリを逆アセンブラに食わせて、そこから出てくるコードをラインアセンブラに食わせて、それを最初に入力したバイナリと比較するテストプログラムを作成した。

色々な部分で間違いが見つかった。
対向試験で逆アセンブラにも間違いが見つかるかとも思ったが、間違いがみつかったのはラインアセンブラのみだった。夜1時間ずつ、2週間で書いたものだ。特にバイナリの合成なんて、昨日半日で書いたものだ。こんなもんだろう。
1~2時間で完全に一致するようになった。
テストに用いたデータはCコンパイラが吐いたバイナリなので、あまりトリッキーなコードではない。
多分まだまだBugがあるだろう。

洗濯物をしたり、なんだかんだで、今日はこれくらいしかできなかった。
明日は海へ潜りに行く予定。

2012年11月23日金曜日

ラインアセンブラ2

例のこれが、だいたいまとまってきた。
字句解析、構文解析、命令とオペランドのデコード、Emulated命令→Native命令変換までは、先週と今週の月~木までかけて帰宅後1時間ずつで実装した。
ダイビングに行ったり、飲み会に行ったりしていたので、あまり集中できず時間がかかった。

今日の朝、Emulated命令→Native命令の動作確認をした。
いくつか間違いが見つかった。
毎日1時間ずつだと、途中で考えが変わったり、また全体を見ないので、不整合を見落としやすい。
昼には単体の動作確認も終わり、いよいよバイナリコードの合成処理を実装し始めた。

似たような命令体系の部分でくくって、系列ごとに実装しながら、単体テストを行った。
(細かくは見ていない。来週以降、しらみつぶしにテストする予定)
テストと同時進行なので、夕方になっても実装作業が終わらなかった。
2命令(POPM, PUSHM)の実装を残して、疲れて来たので作業終了。
明日には、実装が終わるだろう。

来週からは、アセンブラ部分の結合テスト。
事前に作ってある逆アセンブラと組み合わせて、テストをする予定。
逆アセンブラ作成時に、しらみつぶしにテストするコードを用意していた。
それを使えば、テストプログラムの用意も楽だろう。

この手のコードはテストプログラムがとても大切だ。
ソースコードも重要だが、同じくらいテストプログラムも重要である。

2012年11月13日火曜日

ラインアセンブラ

既に2年前になる。

友人にたのまれて、某16bitマイコンのラインアセンブラ、逆アセンブラ付きモニタを作っている。
一回は一応動いた(その後に色々不具合が発見されている)のだが、ラインアセンブラのコードが気に入らず、作り直している。

逆アセンブラやラインアセンブラは、単純だが量がある。
特にアセンブラでどこまで受け付けるかの見極めが難しい。

例えば、リテラル値を数式で入れられるようにした。ペリフェラルレジスタの操作等でベースアドレス+オフセットのように入力できて良いなと思ってのことだ。
数式の処理を実装するときに、C言語の演算子を使うことにした。
括弧で計算順序の調整もできる。10進数、16進数、2進数に加えて、C言語のように8進数も使える。
そして、止めときゃいいのに、三項演算子にまで手を出した。
そんなものリテラル値計算のどこに役立つんだよとも思いながらも、どうせ実装するんなら、全部みたいなノリでうっかりやってしまった。
三項演算子を含め、数式処理は正常に動作しているが、無駄にコードがでかく可読性も悪い。
そんな部分が随所にある。

時間のある時に、何日間かまとめてやればすぐに終わる作業だ。
しかし、毎日30分から1時間の作業の繰り返しでは、前日の作業は忘れてしまう。
毎日作業ができれば良いが、なかなかそうもいかない。一週間や一ヶ月開いてしまうこともよくある。
このような状況では、問題を切り分け、局所化して、小さな作業単位の組み合わせにせざるおえない。
部分的に「もう少し作り込んでも良いよな。」と思ったらヤバい。全体が見えていないのに、その部分だけを掘り下げてしまうと、完成後に全体を見るとアンバランスな感じになる。

それで結局作り直し。

今日はまた全体の設計を検討した。
メモ書きをたくさん書いた。メモ書きにしておけば、通勤電車の中でも検討できる。
明日も多分検討の続き。週の中頃以降から、まとめる作業に入る。
シンプルで、改造しやすい実装にしようと思っている。

2012年11月4日日曜日

海の民、山の民

今週、海へ行かなかった。理由はこれだ。
海に入らないと、なんか調子が悪くなる。風邪気味で、くしゃみや鼻が出る。季節の変わり目だ。寒くなっている。止む終えまい。
そういえば、南国Philippine在住の江戸川氏(仮名)も同様の事を言うそうだ。

私の両親は、どちらかといえば山の民。
(特にオヤジは山奥出身)
しかしながら、それらから生まれた我々兄弟は、皆海が好きだ。
別に山が嫌いと言うわけではない。むしろ、遺伝的には山に適合しているはず。
海の方が刺激が多く、楽しく感じる。それだけだ。山もおもしろい。
あえて言えば、里がつまらない。街が嫌いなだけだ。大都市は大嫌い。

江戸川氏も、元は山の民だという話を聞いたことがある。
小さな島が集団を作った国Philippineなので、どこに住んでも海との関わりは切れないという考えもあるが、日本も大差は無いだろう。
そういった意味では、同じかもしれない。お互い元々貧乏人だし。

季節の変わり目。
この冬を乗りきるためにも、今月の中頃には海に入っておかないと。
さもなくば、余計に金がかかることになるかもしれない。