TD4 エミュレータを作ってみた
対象読者
解決すること
内容
CPU の仕組みを知るた時にお世話になった本、「CPUの創りかた」。 ここに載っている TD4 という 4bit CPU のエミュレータをウェブ上に作成。
この本、大変楽しく読ませてもらった記憶があります。先日Cのコンパイラを作った後、ネタ探しでネットを徘徊していたら結構この CPU の自作やエミュレータの記事が出ていたので、自分もやってみた次第。
作成したエミュレータのサイトはこちら。
ROM を 「+」ボタンから編集したり、「dump」ボタンでテキストにしたり、「import」してROM を書き換えたり出来ます。4bit CPU TD4のVerilog実装simpleTD4の解説 に紹介されているROM などで遊んでました。
実装は typescript/javascript で書きましたし、TD4 はシンプルな設計なので CPU の部分は難しくなく、インストラクションを関数にマップして、プログラムカウンタの場所にある ROM 命令を呼び出して状態を更新するだけ。キャリーフラグを毎回処理するのを忘れそうになるくらい。
Web 上に書くので React を使ったのですけど時間的にはこっちがほとんど。
最初に CPU の部分を作ってコマンドライン上でオッケー!と完成させても、React の状態保持に組み込もうとすると全部関数言語みたいな処理に書き直して、React 側で状態保持をするようにしないといけないのって、どうにかならないんでしょうか...。クライアントだけだし DB とかを使うほどじゃないけど、別の場所で状態を保持して React 側と連携させたい時って結構あって、singleton でなんとかならないかとか毎回悩むんですけど。結局いつも useContext() 使って書き直してる気がする。
参考文献: