ええっ⁈ CPU創ったの⁈ すっごーい! 第2章 第6節
~あんたCPUなんか創ってどうするのよ?! Vol.2~
2017/8/11
 コミックマーケット C92 1日目 東7そ11b
第2章 第6節 完成したTD4EX1
これで完成です。
使うICはTD4よりも1つ増えて11個になりました。最終的な命令コードを以下に示します。
| 命令 | 命令コード | 説明 | |
|---|---|---|---|
| bit 7~4 | bit 3~0 | ||
| ADD A, B | 0000 | 0000 | Aレジスタの内容にBレジスタの内容を加算 | 
| ADD B, A | 0001 | 0000 | Bレジスタの内容にAレジスタの内容を加算 | 
| ADD A, Im | 0010 | Im | Aレジスタの内容に命令中で指定された定数(Im)を加算 | 
| MOV B, A | 0011 | 0000 | BレジスタにAレジスタの内容を転送 | 
| IN A | 0110 | 0000 | 入力ポートからデータを取り込み、Aレジスタに格納 | 
| IN B | 0111 | 0000 | 入力ポートからデータを取り込み、Bレジスタに格納 | 
| MOV A, B | 1000 | 0000 | AレジスタにBレジスタの内容を転送 | 
| MOV A, Im | 1010 | Im | Aレジスタに命令中で指定された定数(Im)を格納 | 
| MOV B, Im | 1011 | Im | Bレジスタに命令中で指定された定数(Im)を格納 | 
| OUT B | 1100 | 0000 | Bレジスタの内容を出力ポートに出力 | 
| JNC Im | 1101 | Im | キャリー(C)がゼロならば指定アドレス(Im)にジャンプ | 
| OUT Im | 1110 | Im | 命令中で指定された定数(Im)を出力ポートに出力 | 
| JMP Im | 1111 | Im | 指定アドレス(Im)にジャンプ | 
予定通りアキュムレータ間加算命令を追加できました。
TD4との命令コードの互換性は無いものの、ほとんどの命令は共通なのでプログラムの移植は簡単だと思います。唯一の心残りは ADD B, Im 命令が無いことですが、これはどうしようも無いので諦めてください。
以下にTD4EX1の回路図を示します。
このTD4EX1はTD4にアキュムレータ間加算命令を追加しただけですので、最大プログラムサイズは16バイトのままです。しかし前作Vol.1と同じ手法を使って最大プログラムサイズを拡大することは可能です。
具体的な検討はしていませんが、TD4EX1のジャンプ命令と条件ジャンプ命令はTD4をほぼそのまま踏襲していますので、さほど難しくは無いと思います。興味のある方はチャレンジしてみてください。
 
