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