2012年11月13日火曜日

ラインアセンブラ

既に2年前になる。

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

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

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

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

それで結局作り直し。

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

0 件のコメント:

コメントを投稿