CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

ICU用アセンブラ

ICUニーモニックを受け付けるアセンブラを作ってみました。
 
マシンコード自体は16ビット固定長で上位4ビットは16種類のインストラクション、下位12ビットはそのまま操作対象の実効アドレスなので非常に単純な構造です。
初めはMASMのマクロ定義で展開しようとしたのですが、データアドレスの参照は容易なのですがJMP命令で飛び先アドレスの解決がうまくいかず行き詰ってしまいました。
 
そこで思いついたのがEXCELのワークシートを使う方法です。
オペランドとオペコードをそれぞれセルに書き込むと、あらかじめ定義しておいた表からvlookup関数で対応するインストラクション、アドレス値を引き当て、上位下位合成することでマシンコードを得ます。
JMPの飛び先は合致するラベルを検索して行番号からわかります。
 
こうすることで1行ごと入力するたびにリアルタイムでアセンブルされ、検索に失敗すればエラーコードも表示するツールになりました
 
イメージ 1