ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.7
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆ルート計算プログラム
ND80ZVをご購入いただいたお客様からTK−80応用プログラムを送っていただきました。
プログラムを解析する過程でND80ZV組立キットに附属しているZ80アセンブラ、Z80逆アセンブラを使います。それらのプログラムの使用例としても参考になると思います。

[第113回]

●ルート計算プログラム(TK−80応用プログラム)

ND80ZV組立キットをご購入いただいた北海道のM様から、TK−80応用プログラムを送っていただきました。
01〜99の範囲の整数のみですが、ルート(平方根)を求めるプログラムです。
オリジナルは1977年当時の雑誌「マイコン」に載っていた記事がもとなのだそうです。
その雑誌記事で紹介されていたTK−80を使った平方根の計算プログラムは計算結果のみを表示するプログラムでしたが、M様はそれに改良を加えて、置数もLEDに表示するようにしたのだそうです。

ちゃんとTK−80用のプログラムがそのまま動きましたよ、ということでプログラムファイルをメール添付で送っていただきました。
M様。大変興味深いプログラムをお送りいただき有難うございました。

じつは送っていただいたのはもう1週間以上も前のことなのです。
さっそく皆様にご紹介させていただこうと思ったのですが、またまた突発的にいろいろちょいと大変な作業に首を突っ込んでしまったものですから、この1週間ほどは、ご紹介するための時間的な余裕がなかったのです。

それはまた何をやっていたのか、ということにつきましてもいろいろ紹介申し上げなくてはいけません。
途切れ途切れで続いてきましたPIC18F14K50のHIDプログラムの説明なのですが、そういうわけで、またしばらく中断することになりそうです。
うう。時間をみつけて少しずつでも、せめて下書きかメモ書き程度でも書きとめておかないと、またすっかり忘れてしまいそうです。

●ND80ZVでルート2を計算させてみました

まずは定番で、ルート2を計算させてみました。



プログラムは8000番地から始まります。
TK−80のために書かれたプログラムですからTK80モードで実行します。
ディップスイッチを全部下にするとTK80モードになります。
[8][0][0][0][ADRSSET][RUN]と入力すると、キー入力待ちになります。
置数は2桁で入力します。
ルート2の場合には、[0][2]と入力します。
瞬時に計算が終わって、上の写真のように表示されます。

今度はルート3です。



おお。ちゃんと合っていますねえ。
どうやって計算しているのでしょう。

今度はルート5です。

次はルート99です。このプログラムで計算できる一番大きな数です。



電卓で計算してみましたら、ちゃんと合っていました。
計算は小数第3位未満切り捨てです。
小数点が表示されていますが、実際の計算は十進の整数で行なっています(16進ではありません)。

2桁の整数だけだとしても、ルートの計算ということになれば、かなり複雑な計算が必要なはず…。
と思いましたが、たったこれだけのプログラムでした。

>dm 8000,80b5
8000  06 0A 21 AC 82 AF 77 23-05 C2 06 80 CD 16 02 07  ..!ャ.ッw#.ツ..ヘ...
8010  07 07 07 21 AC 82 77 E5-CD 16 02 E1 86 77 7E 11  ...!ャ.w.ヘ....w~.
8020  F4 83 12 3E 01 32 B3 82-CD 70 80 DA 37 80 CD 90  ...>.2ウ.ヘp.レ7.ヘ.
8030  80 CD A0 80 C3 28 80 21-B4 82 06 02 11 F6 83 7E  .ヘ.テ(.!エ......~
8040  12 23 13 05 C2 3F 80 CD-C0 01 21 FA 83 11 F9 83  .#..ツ?.ヘタ.!.....
8050  1A 77 21 F9 83 11 F8 83-1A 77 21 FB 83 3E 48 77  .w!......w!..>Hw
8060  21 F8 83 3E 0E 77 21 FC-83 3E 80 B6 77 C3 00 80  !..>.w!..>.カwテ..
8070  21 B3 82 11 AF 82 06 04-AF 1A 9E 27 12 2B 1B 05  !ウ..ッ...ッ..'.+..
8080  C2 79 80 C9 00 00 00 00-00 00 00 00 00 00 00 00  ツy.ノ............
8090  21 B5 82 7E C6 01 27 77-2B 7E CE 00 27 77 C9 00  !オ.~ニ.'w+~ホ.'wノ.
80A0  06 03 21 B3 82 7E C6 02-27 77 17 E6 01 2B 86 27  ..!ウ.~ニ.'w...+.'
80B0  77 05 C2 AA 80 C9 66 6F-0E 00 CD 5D 10 CD 1B 10  w.ツェ.ノfo..ヘ].ヘ..

8000〜80B5までですから180バイトほどしかありません。
しかもその中にはLED表示をするところも含まれているわけですから、ルートの計算をしているところはもっと短いことになります。
えー、こんなに短くて、ルートの計算ができる?

私は倍精度浮動小数点計算のできるZB3BASICを作りましたから、Z80でルート計算をさせるプログラムは知っております。
もちろんそれはバイナリ(2進数)で計算します。
かなりすごい計算プログラムです。

ですから、たとえ整数2桁だけだとしても、ルートの計算がこんなに短いプログラムでできてしまうなんて、ちょっと信じられない気持ちでした。
M様はメールで、「この計算方法はかなり有名です」と書いていらっしゃいますが。
ええ。不勉強で、私は全く知りませんでした。

いったいどのような計算をしているのだろう。
そりゃあもう、興味津々ですから、何をやっているのか、プログラムを解析してみることにいたしました。
CPUをつくろう!第654回(2010.11.7upload)を再編集

ワンボードマイコンをつくろう![第113回]
2011.7.7upload

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