めざせ4004! IC24個で電卓用CPUを作ってみた: Chapter 2 RAM容量拡大の方針

 TD4EX4のRAM容量を拡大するにあたり、まずベースとなるTD4EX4の仕様をおさらいしましょう。表2に命令コードを示します。
 【※注】 前作でのMOV命令の表記が分かりにくかったのでLD命令とST命令に変更しました。

表2 TD4EX4の命令コード
命令 1バイト目 2バイト目 キャリー
フラグ
説明
bit 7~4 bit 3~0
ADD A, [Adr] 0000 Adr (無し) ※1 指定アドレスのRAMの値をAレジスタに加算
ADD B, [Adr] 0001 Adr ※1 指定アドレスのRAMの値をBレジスタに加算
ADD A, Im 0010 Im ※1 定数(Im)をAレジスタに加算
ADD B, Im 0011 Im ※1 定数(Im)をBレジスタに加算
LD A, [Adr] 0100 Adr 指定アドレスのRAMの値をAレジスタに格納
LD B, [Adr] 0101 Adr 指定アドレスのRAMの値をBレジスタに格納
LD A, Im 0110 Im 定数(Im)をAレジスタに格納
LD B, Im 0111 Im 定数(Im)をBレジスタに格納
SUB A, [Adr] 1000 Adr ※2 指定アドレスのRAMの値をAレジスタから減算
SUB B, [Adr] 1001 Adr ※2 指定アドレスのRAMの値をBレジスタから減算
ST [Adr], A 1010 Adr Aレジスタの値を指定アドレスのRAMに格納
ST [Adr], B 1011 Adr Bレジスタの値を指定アドレスのRAMに格納
JNC Im 1110 ROM Adr キャリーがゼロなら指定アドレス(Im)にジャンプ
JMP Im 1111 ROM Adr 指定アドレス(Im)にジャンプ
※1 最上位ビットからの繰り上げが発生した場合に1になる。発生しない場合には0になる。
※2 結果が正(ゼロ以上)になった場合に1になる。結果が負の場合には0になる。

 TD4EX4は最大16語のRAMをサポートしているので、RAMのアドレス指定は4ビットで行います。表2ではこれを [Adr] と表記しており、実際のアドレスは命令1バイト目の下位4ビットで指定します。RAMの容量を256語に拡大するためには、このアドレス指定のビット数を8ビットに増やす必要がありますが、命令の1バイト目にはそのようなスペースはありませんので、必然的に2バイト命令にする事になります。

 表2を見るとRAMへのアクセスを行う命令は8個あります。つまり14個ある命令のうち 半分以上を占めています。これを2バイト命令にすると、元から2バイト命令だったジャンプ命令2個も含めて計10個が2バイト命令となり、残りの4個が1バイト命令となります。 ここまで2バイト命令が増えてしまうと、いっそのこと可変長命令を止めて、全ての命令を2バイト化した方が良いでしょう。コード効率は悪化しますが、命令長の判定回路を省略できますので、使用IC数を減らせる筈です。