この世のCPUを食べ尽くすのだ! 第4章
~あんたCPUなんか創ってどうするのよ?! Vol.3~
2018/10/8
技術書典5 け39
第4章 TD4EX3のソフトウエア
ようやくここまで来ました。
TD4EX3はTD4のROMを拡張してRAMを追加しただけですので、加算すらまともに計算できないというTD4の欠点をそのまま引き継いでいます。そのためデモンストレーション用のプログラムをどうするかが問題となりました。
毎度おなじみのラーメンタイマーは作るとしても、電卓は作れませんからテンキーを生かすことができません。LEDも3桁しかありません(数字を表示できるのは2桁だけ)ので時計を作る訳にもいきません。
結局、以下の3つのプログラムを用意しました。
- 0→99のカウントアップ
- TD4EX3の速度をデモンストレーションするためのプログラムです。0から99までのカウントアップを行います。TD4EX3の1kHzというスピードを感じていただけると思います。
- 電源ON後、テンキーの最下行のボタン(0、AC、=、+)を押すと開始します。
- ラーメンタイマー
- 毎度おなじみ3分間のタイマーです。
- 電源ON後、テンキーの2行目のボタン(1、2、3、-)を押すと開始します。
- 数字の表示は2桁しかできないので、1桁目(最下位)が10秒を表示し、2桁目(中央)が分を、そして3桁目(最上位)のマイナス記号によって1秒を点滅表示するようにしました。
- 「CPUの創りかた」に掲載されているラーメンタイマーはクロックが1Hzであることを前提にしていましたが、TD4EX3は1kHzなのでループを強化してあります。何しろ1秒を計るためには1000クロックをカウントする必要がありますが、TD4EX3は4ビットCPUなので1つのループでは16までしかカウントできません。そのため1秒をカウントするのに3重のループを使用しています。
クロックジェネレーターに使用しているSPG8640BNは誤差0.01%以下なので、理論上はきわめて正確なラーメンタイマーを作れるのですが、3重ループに加えて10秒のループ、さらには1分のループも正確に実行クロック数を計算しなければならないため挫折しました。 - 結局、誤差1秒以内ではあるものの「ほぼ3分」のタイマーとなっています。
- テンキー入力のデモンストレーション
- テンキーを押すと、対応する数字がLEDに表示されます。
- 電源ON後、テンキーの3行目のボタン(4、5、6、×)を押すと開始します。
- LEDは2桁あるので、あたかも電卓の数値入力の時のように、押したキーに対応する数値が右側のLED(最下桁)から順番に左へシフトしていきます(と言っても2桁だけですけどね)。
- 実際には+、-、×、÷、=、ACのキーを押すと16進数のA~Fが入力されるようにプログラムを作ってあるので、LED駆動用に16進数を表示できるICを使っていれば表示できたのですが、残念ながら74HC4511では消灯してしまいます。
次ページにプログラムリストを掲載します。