電卓用CPUの命令コード

まだ電卓は完成していませんが、電卓用CPUの命令コードをご紹介します。
元となったTD4とはジャンプ命令が似ている程度で、事実上の別物になっています。

TD4EX4の命令コード
命令 1バイト目 2バイト目 説明
bit 7~4 bit 3~0
ADD A, [Adr] 0000 Adr Adrで指定されたアドレスの内容をRAMから読み出しAレジスタに加算
ADD B, [Adr] 0001 Adr Adrで指定されたアドレスの内容をRAMから読み出しBレジスタに加算
ADD A, Im 0010 Im 命令中で指定された定数(Im)をAレジスタに加算
ADD B, Im 0011 Im 命令中で指定された定数(Im)をBレジスタに加算
MOV A, [Adr] 0100 Adr Adrで指定されたアドレスの内容をRAMから読み出しAレジスタに格納
MOV B, [Adr] 0101 Adr Adrで指定されたアドレスの内容をRAMから読み出しBレジスタに格納
MOV A, Im 0110 Im 命令中で指定された定数(Im)をAレジスタに格納
MOV B, Im 0111 Im 命令中で指定された定数(Im)をBレジスタに格納
SUB A, [Adr] 1000 Adr Adrで指定されたアドレスの内容をRAMから読み出しAレジスタから減算
SUB B, [Adr] 1001 Adr Adrで指定されたアドレスの内容をRAMから読み出しBレジスタから減算
MOV [Adr], A 1010 Adr RAMのAdrで指定されたアドレスにAレジスタの内容を格納
MOV [Adr], B 1011 Adr RAMのAdrで指定されたアドレスにBレジスタの内容を格納
JNC Im 1110 Im キャリー(C)がゼロならば指定アドレス(Im)にジャンプ
JMP Im 1111 Im 指定アドレス(Im)にジャンプ

非常にシンプルな命令コードですね。
これだけシンプルであっても、命令デコーダーはそれなりに複雑です。
特にRAMへの格納命令と、キャリーフラグの更新抑止が面倒でした。
(表には掲載していませんが、キャリーフラグはADD命令とSUB命令で変化し、それ以外では変化しません)

アドレスは4bit幅しかないのでRAMの容量は最大で16語 (1語4bit) となります。
ただしこれはメモリマップドI/Oと共有するため、使用する入出力機器によってRAMの容量は減少します。
電卓に使用する場合はテンキーからの入力とLEDへの出力に合計2語のメモリマップドI/Oを必要とするため、RAMの容量は14語となります。

電卓用CPUの動作テスト動画

TD4EX4のデモンストレーション動画を紹介します。
1桁の加減算が出来る電卓です。CPUの動作確認用に作成しました。
https://youtu.be/U_bZbLZOHGY

TD4EX4とはTD4というCPUを拡張して2桁の電卓を作成可能にしたものです。
TD8とは異なり4bit CPUのまま各種の拡張を行っています。

これでCPUが正常に動作する事が確認できましたので、あとはソフトウエアの作成を行い、2桁の加減乗除のできる電卓を実現します。

電卓用CPU完成

TD4EX4

TD4EX4 (TD4+4KB ROM+16語 RAM+加減算)

電卓用CPUが完成しました。
TD4を魔改造して以下の拡張を行った4bit CPUです。

  • 使用IC数16個
  • 4KBのROM(8ビット可変長命令)
  • 16語のRAM(アドレスの一部はメモリマップドI/Oと共用)
  • アキュムレーター ⇔ RAM間での加算・減算

これらの機能をTD8よりも少ないIC数で実現しているところが肝です。
このCPUをベースに2桁の電卓を作成します。