16ビットマイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第38回]
●CODとCOS
また間が2日ほど空いてしまいました。
その間もずっとプログラム作りに専念していました。
なかなかにしんどい作業です。
こういう作業は気合を入れてちょいと根性でがんばらないと負けてしまいます。
根を詰めてやっていますと、ついつい夜遅くまでがんばってしまい、HPに手が出せないままで一日が終ってしまいます。
それでもそのようにがんばったお蔭で、かなり作業が進みました。
まだまだやらなければならないことは沢山残っていますが、なんとか峠は越えたようです。
前回までのところで三角関数のSID(度数)とSIN(ラジアン)について書きました。
その後の作業が進んだのでCOD(度数)とCOS(ラジアン)のテストを行ないました。
今回はそのテスト結果をお見せします。
こちらは8086BASICで計算したCOD(度数)のテストです。
COSとSINは片方の置数を90度から引いたものを与えると同じ結果が得られます。
そういうことなので、前回までのSID、SINの結果と逆向きに比較してみることで、計算が正しく行なわれているかどうかを検証することができます。
でもまあ、ついでですのでSID、SINのときと同様にZB3BASIC(Z80CPU)でも同じことをやってみました。
こちらがZB3BASICです。
COS(ラジアン)もテストしてみました。
こちらは8086BASICです。
こちらはZB3BASICです。
●TAN
TANはラジアンのみです。
度数での計算が必要な場合には、SID()/COD()で求めることができます。
こちらは8086BASICです。
TANはPI/2(90度)は計算できません。
本当はプログラムで除外しなければいけないのですが、幸いといいますか、ラジアンでのFOR〜NEXTでは最後のPI/2の前にループから抜けてしまいますから、上のプログラムのようにしてもエラーにはなりません。
そのためにSIN、COSのときのようにPI/2に0.1は加算していません。
ZB3BASICでも同じことをやってみました。
●ATN
ATN(アークタンジェント、逆正接)もテストしてみました。
ATNもラジアンのみです。
ATNとTANとは置数と計算結果が逆の関係になります。
その関係を利用して、下のようなプログラムでテストをしてみました。
TANで得られた計算結果をATNに置数として与えると、ATNの計算結果はもとの角度になります。
上のテストではそのように正しい結果が得られました。
ZB3BASICでも同じことをやってみました。
こういうテストをやっていますと、我ながらよくぞこんなシステムプログラムを作ったものだと、思わず自分をほめてあげたくなります。
ちょいと得意な気分です。
こういう計算を見ますと、魔法のプログラムかなにかがあって、それを使うとこういうことが簡単にできてしまう、とそんな感じになるかも知れませんが、そんな便利なものはありません。
Z80には、ご存知のように2進8ビットおよび16ビット整数の加算命令と減算命令しかありません。
8080は、16ビットについては減算命令はありません。
その程度の機能を使って上のような計算をしているのです。
裏ではとてつもないプログラムが動いている、と考えていただいても間違いではありません。
8086では8ビット、16ビットの加減算命令に加えて乗算、除算の命令がありますが、こと浮動小数点計算については、乗除算命令は使っていません。
Z80や8080と同じ方法(加減算命令のみ)で行なっています。
一体どんな計算プログラムなのか?
というところまで書いてきて、そういえば何年か前に同じようなことを書いたような、ということを思い出しました。
過去記事を確認してみましたら、しっかり書いておりました。
「MYCPU80でCP/Mを!」[第33回](2014年)あたりから後ろに書いておりました。
ホームページトップの過去記事の日付順目次で検索していただくと早いと思います。
2015年年初にも少し書いています
「MYCPU80でCP/Mを!」[第92回]〜[第94回]です。
時間がありましたら、ご一読ください。
16ビットマイコンボードの製作[第38回]
2018.6.17upload
前へ
次へ
ホームページトップへ戻る