あんたCPUなんか創ってどうするのよ?! Vol.1 第4章
~TD4とかいうCPUがあまりにも残念だったので拡張してみた~
2016/8/14
コミックマーケット C90 3日目 西g16b
第4章 TD4EX2解説
TD4を拡張して可変長命令を実現し4KBのROMアドレス空間を実現する方法を解説します。
必要なICの数はたった4個[10]です。
- プログラムカウンタの拡張
- 74HC161を2個追加し、プログラムカウンタを12ビットに拡張します。
- 命令ラッチの新設
- 74HC753を1個追加し、現在実行中の命令を記憶させます
- 命令デコーダーの拡張
- 74HC00を1個追加し、ジャンプ命令を2バイト命令化します。
第4章 第1節 なぜ4KBなのか
実はTD4EX2の4KBというアドレス空間は、別に根拠があってこの広さにした訳ではありません。作ってみたら4KBになった、というだけの理由です。しかしこの4KBという広さは奇しくもインテル4004と同じなので4ビットCPUとしては妥当な広さだろうと思います。
TD4EX2のジャンプ命令は2バイト命令になっており、ジャンプ先のアドレスを指定するオペランドは命令の1バイト目に4ビット、2バイト目に8ビット、合計12ビットあります。その結果4KBのアドレス空間が実現できた訳です。
TD4EX2の設計時点で、果たして4KBもの広いアドレス空間が必要か? という疑問が無かった訳ではありません。TD8と同じ8ビットのアドレス空間だけでも十分かも知れないと思ったのです。
しかし設計を進めていくと、元々のTD4で使用していた命令1バイト目の4ビットのアドレス指定を止めるのは意味が無い事が分かったのです。必要なICの数も、アドレス空間が8ビットか12ビットかによる違いはほとんどなく、唯一プログラムカウンタ用のICが増えるだけでした。
という訳でTD4の回路はそのまま使い、命令の1バイト目のオペランドをジャンプ先アドレスの最下位の4ビットとして使う事にしました。そして命令の2バイト目の8ビットを、ジャンプ先アドレスのbit4~bit11として使う事で、合計12ビット、つまり4KBのROMアドレス空間が出来上がったのです。
写真2 筆者が製作したTD4の拡張4KB ROMバージョン、通称TD4EX2
[10] 第2節で解説するEEPROMも数に含めるなら5個