ええっ⁈ CPU創ったの⁈ すっごーい! 第1章 第4節

あんたCPUなんか創ってどうするのよ?! Vol.2

2017/8/11
コミックマーケット C92 1日目 東7そ11b

第1章 第4節 TD4は本当に加算が出来るのか

TD4で加算が出来るかどうかをYESかNOかで問われれば、答えはYESです。

問題なのは、その加算の質です。

前作Vol.1の冒頭を思い出してください。

とは言え、足し算をするための機能に疑いを持つ人はいないでしょう。たとえ桁数が少なくても、数値を二つ入力して、両者の和を求めることができると思うのではありませんか?
TD4というCPUの存在を知ったとき、筆者もそのように考えました。しかし、それこそがそもそもの間違いの始まりだったのです。

この文章が全てを表しています。

TD4には加算機能はありますが、質が不十分なのです。なぜならイミディエイトデータとの加算しか出来ないからです。そのため数値を2つ入力して、その和を計算することはできません。そのように設計されていないのです。

問題は二つあります。数値を二つ入力できないことと、その和を計算することが出来ないことです。

  • 数値を2つ入力できない

    入力ポートが1つしかない事が原因です。

    しかしこれは簡単に回避できるので、大した問題ではありません。TD4にはクロックを押しボタンスイッチで供給する機能がありますから、そのモードにして、入力ポートから2回に分けて入力することが出来ます。

    具体的には以下のようにします。「CPUの創りかた」の275~277ページをご覧ください。

    プログラムとしてはIN命令2個で十分です。

    Address Instruction Mnemonic
    0000 00100000 IN A
    0001 01100000 IN B

     

    1. SW21をManual側に切り替えます。
    2. リセットします。
    3. 入力ポート(SW1)に1個目の数値を入力します。
    4. SW18を1回押してIN A命令を実行させます。
    5. 入力ポート(SW1)に2個目の数値を入力します。
    6. SW18を1回押してIN B命令を実行させます。

    これで2個の数値を入力できます。

    電子回路に詳しい方なら、IN命令を実行すると停止するようにTD4を改造できるでしょう。そうすればクロックを押しボタンスイッチで供給しなくても、2つ(あるいはそれ以上)の数値を入力できるようになりますが、本書では割愛します。

  • 数値2個の和を計算できない

    こちらは致命的な問題です。もともとTD4は2個の数値の和を計算できるように設計されていません。

    図1にTD4の加算回路周辺のブロック図を示します。

    図1 TD4の加算回路周辺のブロック図

    図1 TD4の加算回路周辺のブロック図

    TD4は加算回路として74HC283を使用しています。その入力は2系統あり、片方はセレクタを経由してアキュムレータと入力ポートに接続され、もう片方はROMに接続されています。入力の片側がROMに固定されているのですから、当然ROMとの加算しか出来ない事になります。表1の命令コード表を見ても分かる事ですがTD4の加算命令はイミディエイトデータとの加算だけです。

    つまりAレジスタとBレジスタの和を求めることは出来ないのです。もし仮に2個の数値を入力できたとしても、それ合計する機能はありません。

TD4がなぜこのような設計になっているのか全く不明です。おかげでTD4では計算らしい計算は何もできません。加算が出来るとは言え、加算したい数値はあらかじめプログラムとして記述しておく必要があるからです。

いくらディップスイッチで簡単にプログラムを変更出来るからと言っても、加算したい数値が変わるたびにプログラムを書き換えるのでは、CPUではない純粋な加算回路のみの加算装置と大差がありません。そんなものをCPUとは呼べないと筆者は考えます。