標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第190回]

●ADD、SUB、CMP命令の回路の説明です

[第179回]でALU(Arithmetic Logic Unit、算術論理演算ユニット)回路のうちの、論理演算部分の回路について説明をしました。
そのあと続いて、算術演算回路の説明をするつもりだったのですが、とんでもない道草をくってしまいました。
やっとのことで、ようやく本線に復帰、です。

この算術演算回路が、いうならばCPUの最もコアになるところでしょう。
でも、算術演算といったって、8080は、四則のうち加減算、足し算と引き算しかできません。
加算はなんとか16ビットの計算もできますが、減算については8ビットしかできません(Z80には16ビットの減算命令もあります)。
なんともまあ、あわれなものです。
いまどき、100円ショップでも売っている小型電卓だって10進の、しかもなんと浮動小数点での加減乗除までやってくれるというのに、です。
それで、ALUとは、聞いてあきれる、と言いたいところなのですが。

ところがところが、8080が並の電卓と違って、とりわけてすごいところは、プログラムが組める、という点です。
当時、8080の開発にたずさわった技術者でさえ、果たしてその秘めた能力について、どこまで認識していたでしょうか?
その後のZ80の登場によって、パーソナルコンピュータが本格的に発展をとげることとなったのは、周知のことなのですが、しかし、Z80ではなくて、8080でも、プログラムを組むことで、10進数の浮動小数点計算はおろか、平方根だって、対数だって、三角関数だって、計算することができるのです。

2進数の加減算命令しかもっていない、という点では8080とZ80は同等の能力です。
加減算ももとをただせば加算に他なりません。
8080もZ80もつまるところ、数値演算としては8ビットか、せいぜい16ビット同士の加算命令しか持ち合わせてないのです(しかも10進数ではなくて2進数の加算です!)。
8ビット2進数の加算については、[第14回]を中心にして、その前後でかなりとりとめもなく説明しています。お忘れになってしまわれたかたは、お暇でしたら、ぜひもう一度お読みくださいませ。

●2進数の加減算命令だけを使って、なんと倍精度浮動小数点計算だってできる

またまた脱線してしまいますが…。
8080がどれほどすごいICだったのか、という実例をひとつお目にかけたいと思います。

当社のZ80BASIC制御ボードを、USB接続でWindowsパソコンにつないで、BASICプログラムを表示させているところです。

画面はDOSプロンプト(DOS窓)ですが、ここで動いているDOSプログラムは、キーボードから入力したデータや、DOS窓に表示するデータを、Z80BASICボードとの間でやりとりしているだけの、「交信」プログラムです。
このプログラムの一部を切り取ってアレンジしたのが、前回公開した232C送信プログラムです。
もちろん、BASICの機能は、そのDOSプログラムにはありません。

USBを通じてつながっている、Z80BASICボード上のROMに、そのプログラムは書かれています。
その機能によって、今、簡単なBASICのプログラムのLISTを表示しているところです。

このBASICプログラムリストも、WindowsパソコンのDRAMにあるのではなくて、Z80BASICボード上のRAMに書かれています。
Windowsパソコンのキーボードから入力した”LIST”コマンドが、「交信プログラム」によって、Z80BASICボードに送信され、そこでZ80CPUによって解読されて、RAM上に書かれているBASICプログラムリストが、送信されてきたのです。

さきほどからの繰り返しですが、USBの先につながっているBASICボードのCPUはZ80ですけれど、その演算機能は基本的には、8080と同じレベルです。
整数1桁の掛け算命令すら持っていません。
なんとまあ、電卓にも劣るそのCPUに対して、上のBASICプログラムを実行せよ、と命令してみたら、どうなることでしょう?
BASICでの実行開始コマンドは、”run”です。


いかがでしょうか?

SQR()は、BASICの関数で、平方根(square root)です。
変数のうしろに#をつけると、倍精度実数になります。
なんと、プログラムさえ組めば、2進数の加減算命令しかないCPUに、倍精度の浮動小数点演算をさせて、ルートを求めることだってできてしまうのです。

どうせ、ROMの中に、平方根表でも仕込んであるのだろう?ですって?
ちがいますよぉ。

適当な計算をさせてみましょうか。
1234.56789/89.012345は、どうでしょう?

今度はダイレクトモードで、即、実行させてみました。
BASICはこんな芸当もできるのです。

ちょいと、自慢になってしまいますけれど、このBASICシステムプログラムは、全部オリジナル、私の手作りです。
コンパイラなど使っていませんよぉ。
これも自作のZ80アセンブラを使って、いわばマシン語だけで、作り上げました。
全部で約50KBもあります(ま。あれです。一種の、きちがい、ですな)。

いやぁ、しっかり自慢してしまいました(ごめんなさい)。

でも、これでおわかりいただけたでしょうか?
たかが8ビットのCPUと、侮ることなかれ、です。

あ。あ。あ。やっぱり脱線してしまいました。
次回こそ、本当に、回路の説明に入ります。
2009.3.24upload

前へ
次へ
ホームページトップへ戻る