2019年1月に投稿した記事

電卓用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語となります。