技術書典6に出展します

技術書典6に出展します。

2018/10/08(月) 池袋サンシャインシティ 文化会館ビル2F 展示ホールD「う11」

頒布予定は毎度おなじみのCPU本「あなたCPUなんか創ってどうするのかしら?!」です。
新元号特需前に入稿できるのか?!

ぜひお越しください。

電卓が完成しました

自作 4bit CPU TD4EX4 による電卓が完成しました!
2桁の整数による四則演算(加減乗除)が出来る電卓です。

入力は2桁ですが、演算結果は0~±99までの表示できます。
=キー連打による連続計算、四則演算キーによる連続計算ができます。
2桁であること以外は普通の電卓です。

7セグメントLEDは3桁ありますが、最上位桁はマイナス表示用です。ただし1を表示することは出来るので、答えが±100~±199の場合には正しく表示して停止します。
答えが±200以上になるとエラー表示(Eを表示)して停止します。

字幕に説明を入れましたので、併せてごらんください。

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