あんたCPUなんか創ってどうするのよ?! Vol.1 第3章 第1節
~TD4とかいうCPUがあまりにも残念だったので拡張してみた~
2016/8/14
コミックマーケット C90 3日目 西g16b
第3章 第1節 TD8をより深くディスってみる
第1章でTD8について簡単に書きましたが、技術的な観点から改めてTD8 を評価してみます。
① 最大プログラムサイズを256 ステップに拡大
これについては異論ありません。TD4はたった16 ステップしかプログラムサイズがありませんので、まともなプログラムは作れませんでした。TD4を拡張するならばアドレス空間の拡大は必須と言えます。
ただしTD8で達成している256 ステップで十分かどうかは議論の余地があります。
② データ幅を8 ビットに拡大
最大プログラムサイズを拡大するための手段としてデータ幅を拡大しています。これには反対です。無意味に部品点数が増えるからです。純粋にデータ処理能力を増強する必要がある場合にのみデータ幅を拡大すべきです。
③ 必要なIC の数が倍近い
データ幅を拡大した結果、必要なIC の数が倍近い17 個になりました。増えた数に見合うだけの機能が増強されていれば納得できますが、残念ながらTD8 は全く機能不足です。
以下にTD4 とTD8 の部品一覧を示します。
IC | TD4 | TD8 | ICの機能 | 使用箇所 |
---|---|---|---|---|
74HC161 | 4個 | 8個 | 4ビットカウンタ | レジスタA とB, プログラムカウンタ, OUTポート |
74HC153 | 2個 | 4個 | 4ビットセレクタ | 加算器への入力選択 |
74HC283 | 1個 | 2個 | 4ビット加算器 | 加算回路 |
74HC74 | 1個 | 1個 | フリップフロップ | キャリーフラグ |
74HC10 | 1個 | 1個 | 3入力NAND | 命令デコーダー |
74HC32 | 1個 | 1個 | 2入力OR | 命令デコーダー |
合計 | 10個 | 17個 |
④ 全ての命令が12ビット幅に増える
元々のTD4の命令のうち、アドレスに関係するのはジャンプ命令と条件ジャンプ命令だけです。従ってアドレス区間の拡大に伴って、この2つの命令の長さが増えるのは当然でしょう。しかしTD8ではアドレス空間の拡大の手段としてデータ幅を拡大してしまいました。その結果、すべての命令の長さが12ビットになってしまっています。
これは無駄です。
特にAレジスタとBレジスタの間のデータ転送のように、イミディエイトデータを使わない命令も12ビット幅なのは全くの無駄です。
以下にTD8の命令一覧を示します。
命令 | 命令コード | 説明 | |
---|---|---|---|
bit 11~8 | bit 7~0 | ||
ADD A, Im | 0000 | Im | Aレジスタの内容に命令中で指定された定数(Im)を加算 |
MOV A,B | 0001 | 00000000 | AレジスタにBレジスタの内容を転送 |
IN A | 0010 | 00000000 | 入力ポートからデータを取り込み、Aレジスタに格納 |
MOV A, Im | 0011 | Im | Aレジスタに命令中で指定された定数(Im)を格納 |
MOV B,A | 0100 | 00000000 | BレジスタにAレジスタの内容を転送 |
ADD B, Im | 0101 | Im | Bレジスタの内容に命令中で指定された定数(Im)を加算 |
IN B | 0110 | 00000000 | 入力ポートからデータを取り込み、Bレジスタに格納 |
MOV B, Im | 0111 | Im | Bレジスタに命令中で指定された定数(Im)を格納 |
OUT B | 1001 | 00000000 | Bレジスタの内容を出力ポートに出力 |
OUT Im | 1011 | Im | 命令中で指定された定数(Im)を出力ポートに出力 |
JNC Im | 1110 | Im | キャリー(C)がゼロならば指定アドレス(Im)にジャンプ |
JMP Im | 1111 | Im | 指定アドレス(Im)にジャンプ |
付け加えるなら、市販の半導体のROM のほとんどが8 ビット幅だという問題もあります。命令幅を12ビットにしてしまうと、8 ビット幅のROM を2 個並列にして使うしかないため、事実上16 ビット幅と変わらなくなってしまいます。
⑤ イミディエイトデータ(Im)との加算しか出来ない
ビット幅を拡張したものの、演算回路を全く改良していないので、結局のところ演算機能はイミディエイトデータ(Im)との加算のみという、TD4 からの欠点は全く変わりません。
⑥ 命令も機能も全く増えない
命令デコーダーを改良していないため、何の命令も追加されていませんし、何の機能も増えていません。せめてイミディエイトデータ(Im)との加算しか出来ない問題は修正して欲しかったと思います。