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


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第45回]



●倍精度SIN関数

前回はやっとのことで倍精度平方根計算プログラムのバグを発見して、一件落着いたしました。
それでちょいと気をよくしまして、次は倍精度のSIN、COSのテストをしてみるか、と軽い気持ちでテストプログラムを打ち込んで走らせてみたのでありますが。
なんじゃあ、これは?

SINどころか、左側のA#の値も変です。
下はこのときのログです。

logfile nd80klog\06240934.txt open

ND80KL/86に接続しました
0001 001D - z
0003 0339 - 
*** nd80kl/86(am188) basic ****
>/ld 86rom4v.bin,0100
loading 86ROM4V.BIN ...7ef5(32501)bytes loaded,from 0100 to 7FF4
>cm 1878
1878 F0-00
1879 BF-
>jp 1000
>10 for a#=0 to pi#/2 step pi#/36
>20p.a#,sin(a#)
>30n.a#
>.
    10 FOR A#=0 TO PI#/2 STEP PI#/36
    20 PRINT A#,SIN(A#)
    30 NEXT A#
>r.
0            0
4908738521229726          3871330400915380
9817477042459451          7730839969302792
0.1472621556368918        0.1156673635005261
0.196349540849189         0.1536728407431759
0.2454369260614863        0.1931258042966716
0.2945243112737835        0.2304594265264533
0.3436116964860808        0.269778193922194
0.392699081698378         0.3090523545461337
0.4417864669106753        0.3481715876572565
0.4908738521229725        0.3870277934915233
0.5399612373352698        0.425515353692363
0.589048622547567         0.4635313857457345
0.6381360077598643        0.5009759908406301
0.6872233929721615        0.5377524945262422
0.7363107781844587        0.5795201075739995
0.785398163396756         0.6150679339126802

>n.
>10a#=pi#/36
>20b#=sin(a#)
>.
    10 A#=PI#/36
    20 B#=SIN(A#)
>r.

倍精度の平方根プログラムは演算レジスタを表示させるチェックプログラムが功を奏して、当初の予想よりも割と楽にバグを発見できたのですが、今回はかなり難題でありました。
SIN以前に、倍精度の実数を表示するプログラムにもおかしいところがありそうです。

いきなりSINのテストに入ったのはどうやら早すぎたようで、PI#/6の計算にも問題がありそうです。

ND80Z3.5で同じことをやってみました。

ND80Z3.5のシステムプログラムは検証済みです。
そのND80Z3.5と同じプログラムを実行して、結果が異なったらそこにはなんらかのバグがある、ということになります。
しかしそれにしてもこれはひどいです。
A#の末尾が5桁も違っています。
ということでこの日(6月24日)はやっぱりホットな日曜日になってしまいました。

それからおよそ12時間(!)。
やっとここまでできました。

まだ上から2行目の表示がおかしいですが、これは浮動小数点数の2進→10進変換プログラム部分のバグのようです。

こちらはND80Z3.5での実行結果です。

上から2行目の値は0.087…という小さな値ですが、8086プログラムではそのような小さな値のときに10進数への変換でミスが発生するようです。
数字の並びは一致しています。

もうあと一息のところです。

前にも書いたと思いますが、ホームページを書くのはどうしても実際の作業の進行よりも遅くなってしまいます。
今回のところも約1週間前のことを整理して書いています。
ですので今回の問題もすでに解決済みですが、それを整理してホームページに書くためにはそれだけ時間が必要です。
プログラムのデバッグも大変なのですが、こうやって画像なども整えてホームページを書くこともそれに劣らずなかなかにエネルギーを必要とする作業です。

そういう次第で、本日のところはここまでといたします。

16ビットマイコンボードの製作[第45回]
2018.6.30upload

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