ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.1
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆ND80ZVでBASICを(2)
ND80ZVに搭載予定のBASICはハンパではありません。
浮動小数点演算をこなし、さらに三角関数、対数計算までできるのです。
しかも、倍精度での演算もできてしまいます。

[第63回]

●SIN、COS、TAN

ここしばらくはZ80BASICの機能について書いております。
前回までのところでは、実数演算と倍精度実数演算、それにSQR(平方根)関数、ベキ乗についてご紹介しました。
前にZ80BASICはハンパではありません、と書きましたが、本当にそうなのです。
ハンパじゃありません。
なんと、SIN関数、COS関数、TAN関数も使えるのです。

下はその使用例です。

>list
     5 ON ERROR GOTO *ERR
    10 PRINT "rad","sin","cos","tan"
    20 A=0:A$="0":GOSUB *SAN
    30 A=PI/6:A$="pai/6":GOSUB *SAN
    40 A=PI/4:A$="pai/4":GOSUB *SAN
    50 A=PI/3:A$="pai/3":GOSUB *SAN
    60 A=PI/2:A$="pai/2":GOSUB *SAN
    70 A=PI:A$="pai":GOSUB *SAN
    80 A=PI*1.5:A$="1.5pai":GOSUB *SAN
    90 A=PI*2:A$="2pai":GOSUB *SAN
   100 STOP 
   110 *SAN
   120 PRINT A$,SIN(A),COS(A),TAN(A)
   130 RETURN 
   190 *ERR
   200 PRINT "***"
   210 RESUME  NEXT 

プログラムの説明はちょいと後回しにしまして、まずは実行してみましょう。

>run
rad          sin          cos          tan
0            0            1            0
pai/6        0.5          0.866025     0.57735
pai/4        0.707107     0.707107     1
pai/3        0.866025     0.5          1.73205
pai/2        1            0            ***
pai          0            -1           0
1.5pai       -1           0            ***
2pai         0            1            0
break in 100

三角関数なんて高校のとき以来で、もうすっかり忘れてしまったよ、という方も多いかもしれません。
BASICなどのプログラムでの三角関数は、普通はラジアンを使います。
1ラジアンは180°/πです。
したがって、πを使って任意の角度を示すことができます。
上のプログラム例では、
30度=π/6、
45度=π/4、
60度=π/3、
90度=π/2、
180度=π、
270度=1.5π、
360度=2π、
として、それぞれSIN、COS、TANを求めています。

プログラムの中でPIという変数を使っています。
これは特殊なシステム変数で、PI=3.14159という値を最初から持っています。

前回までのプログラム例ではFOR NEXT文を使いましたが、今回は、GOSUB文とRETURN文を使っています。
サブルーチンです。
GOSUB文は普通はサブルーチンの先頭の行番号を使って、
GOSUB 110
のようにしますが、このプログラム例のようにラベルを指定することもできます。
ラベルは先頭に*をつけて他の変数と区別します。

プログラムの先頭にON ERROR GOTO文があります。
プログラムの実行中にエラーが発生したときに、実行するエラー処理ルーチンを指定します。
ここでは行番号190の*ERRにジャンプするように指定しています。

そのエラー処理ルーチンの最後は、
210 RESUME NEXT
になっています。
ON ERROR GOTO文は割り込み処理のような動作をします。
エラーが発生したところから、いきなりエラー処理ルーチンに飛んでしまいますから、エラー処理が終わったあと、どこに戻るのかを指定してやる必要があります。
RESUME文はエラー処理後の戻り先を指定する命令文です。
ここで使っているように
RESUME NEXT
と書いておくと、エラー処理後は、エラーが発生した行の次の行に戻って実行を継続します。

なぜこのような処理が必要なのでしょうか?
上の実行結果をもう一度よく見てください。
tanの出力のところで、2箇所に***が表示されています。
π/2と1.5πのところです。90度と270度です。
TAN 90度、TAN 270度は計算できません。
だから、ON ERROR GOTO文が必要なのです。

参考までにON ERROR GOTO文をコメントアウトしておいて、実行してみましょう。

>     5'ON ERROR GOTO *ERR
>run
rad          sin          cos          tan
0            0            1            0
pai/6        0.5          0.866025     0.57735
pai/4        0.707107     0.707107     1
pai/3        0.866025     0.5          1.73205
pai/2        1            0            
ERR:12 
   120 PRINT A$,SIN(A),COS(A),TAN(A)

ほら、エラーでブレイクしてしまいました。
エラーでブレイクしたときは、エラーの種類を示すエラーコードと、エラーの発生した行が表示されます。
ERR:12は0での除算が行われたことを示しています。

いかがでしょうか?
なかなかにハンパなものなんかじゃあ、ありませんでしょう。
CPUをつくろう!第548回(2010.7.10upload)を再編集

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

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