SBC1802でDiskless Elf/OSを動かしたことは前回紹介したが、その際に作ったディスアセンブラ
前回紹介のとおりSBC1802のハードを修正したが動かずソフトを疑った。しかしcdp1802のディスアセンブラはなかなか手頃なものがない。そこで逆アセンブラをrubyで書いてみた。せっかく高級言語で作るのであればということで、cursesを使い必要部分だけ逆アセンブル出来ること。ラベルやコメントをつけられるようにした。(実際にはハードの問題でソフトは関係なかったが)
せっかく作ったので、i8080の逆アセンブル機能もつけgithubに登録している。
https://github.com/ishihara-h/idis
- - - - - - - - - - - - - - - - - - - - - - -
インタラクティブに動作するディスアセンブラ
バイナリあるいはインテルhexフォーマットのファイルをディスアセンブルする
cursesを使用し、必要部分のみをディスアセンブルすることが出来、
インタラクティブにラベル、コメントを付加することが可能
付加された情報は別ファイルに保存することが出来る。
起動方法
ruby idis.rb [target_file]
コマンド
j または DOWNキー 1行下へ
k または UPキー 1行上へ
スペース 1ページ分進める
c-] または RIGHTキー オペランドが示すアドレスへ移動
c-t または LEFTキー c]で移動した元のアドレスへ
o 入力したアドレス分のオフセットを設定
(例えばCP/MのCOMファイルでは0100のオフセットをつける必要あり)
: 入力したアドレスへ移動
l 現在行へラベルをつける
; 現在行へコメントをつける
q 終了
b 入力した数分DB定義。zを入力で0終端文字列、dを入力で0d終端文字列を定義
w 入力した数分DW定義
e 入力したファイルを対象とする
W 付加情報(ラベル、コメント、オフセット等)を保存する(ファイル名.cfg)
S 逆アセンブル結果をファイルに書き出す(ファイル名.asm)
注意点
・idis.rb内のrequireを書き換えることで、ターゲットを切り替える。
require "./cdp1802.rb"でCOSMACに対応し、require "./i8080.rb"で8080に対応する
・インテルhexフォーマットは必要最小限しか理解しない
・Windowsでは「Curses.ESCDELAY=」でエラーが発生するが、
コメントアウトすれば動作可能. ただしWindowのリサイズに対応出来ない