めざせ4004! IC24個で電卓用CPUを作ってみた: Chapter 5-3 電卓用I/Oユニット

 I/OユニットにはRAMと入出力回路が搭載されています。今回は7桁の電卓を作成するので符号含む8個のLEDとテンキーを搭載しています。これらの入出力回路はRAMと同じアドレス空間に割り当てられており、いわゆるメモリマップドI/Oとなっています。
 アドレス空間に余裕があるためLEDとテンキーへのアクセスはTD4EX4よりも簡単です。
 TD4EX4ではアドレス空間が16語しかなかったため、たった2語のメモリマップドI/Oで制御していましたが、EX4-2024では0xF0番地から0xFF番地の16語をメモリマップドI/Oに割り当てています。
 図21をご覧ください。LEDとテンキーは同じアドレスを共有していて、書き込み(Write)はLED、読み込み(Read)はテンキーと判断します。
 LEDは最下位桁から順番に0xF0番地から0xF7番地に割り当てられています。このうち最下位桁から7桁目までは数字表示となっており、各桁に対応するアドレスに0~9の数値を書き込むと、その数字が7セグメントLEDに表示されます。
 最上位桁は符号表示となっており数字表示はできません。各ビットには表7の表示パターンが割り当てられており、これらを組み合わせることでマイナス(-)、エラー(E)、計算中(C)を表示します。
テンキーは0xF0番地から0xF3番地に割り当てられており、ここから読み込みを行うことで各キーの状態を検出します。表8の横一列が各アドレスに割り当てられていて、アドレスとビットでキーを判別します。
 このキーの判別は全てCPUのJNC命令で行っているので、プログラムは本当に酷いコードになっています。4004であればROM内に変換テーブルを持たせる機能があるのですっきりしたプログラムにできるのですがEX4-2024では不可能です。