目次

基本操作

 LPC1114にインプリメントしたForthインタプリタで
 操作を説明しますが、Forthインタプリタを実装して
 いるマイコン基板があるとし、環境を合わせたなら
 ほぼ同じことができるはずです。

 自分が利用している環境は、以下。




 Personal Computerは、端末ソフトが動けばよいので
 OSとしてWindows、Unix、MacOSXのいずれかが動いて
 いれば充分。

 Serial Cableは、USBでもレガシータイプでもよいです。

 自作基板では、シリアルインタフェースを実装してUSB
 でも、レガシータイプでも使えるようにしてます。

 LPC1114基板の回路図は、以下。



 端末接続するために、小信号トランジスタを利用しています。
 このトランジスタは、小信号のシリコントランジスタならば
 どんなものでもOK。

 端末ソフトを利用して、Forthインタプリタを実装した
 LPC1114基板と接続しています。
 Windowsでは、フリーで入手できる端末ソフトのTeraTerm
 を使っています。

 環境パラメータは、以下。

 Personal Computer上の端末ソフトの環境パラメータを
 設定してから、Forthマシンの電源を入れます。



 オープニングメッセージが表示されて、カーソルが点滅します。

 加算処理を入力してみると、次のようになりました。
 (赤の下線が入力部分)



 この加算は、次のように日本語で説明できます。

 12と34を足して、結果を表示しなさい。

 Forthではスタックを利用するので、12、34はスタックに
 入れられます。

 加算の演算子(Forthの世界ではワードと呼びます)を使って
 スタック上にある2数を加算し、結果をスタックに入れます。

 スタックトップを取出したいときは、ワードの「.」を使います。

 Forthの世界では、ワードと呼ぶ単位でスタックへの出入れと
 演算を扱います。ワードの中で、加減乗除をするための記号
 が+、−、*、/となります。

 ワードをすべて入力し終わったならば、ENTERを押して
 インタプリタに処理を依頼します。

 端末ソフトを利用しているので、コマンドインタプリタが
 Forthインタプリタの中に含まれると考えればよいでしょう。

 スタックとワードが、どのように使われているのかを
 図示すると、以下となります。




 達磨落としをイメージすると、スタックを使った処理を
 理解できると思います。平たい円盤がデータで、木槌を
 ワードと見ればよいでしょう。スタックトップに達磨が
 鎮座していると考えれば、高さでデータがどれくらい
 スタックに入っているのかわかります。

 組込みワードは、どれくらいあるのかとみると、300程度。
 次のURLで、一部のワードとその機能を見られます。

http://mecrisp.sourceforge.net/glossary.htm

 一部を覗いてみると、次のようになってます。



 ワードの右に括弧がありますが、これを理解しておかないと
 Forthのスタック操作がどうなるかを掴めません。

 ワードの右に括弧をかいて、何を説明しているのかと
 なると、ワード実行の前後で、スタックの状態がどう
 変化するのかを、簡潔に表現しています。

 左括弧、右括弧の中に「−−」がありますが、「−−」の
 左端の左にあるのが、スタックのトップになります。また
 右括弧の左にあるのが、スタックトップです。

 -rotで説明すると、スタックの動きは、以下。




 上下にスタックの変化を描くと面倒なので、左右に
 もってきて簡単にしているだけ。

 括弧を使うと、左括弧と右括弧でサンドイッチした内容は
 コメントとして扱われます。処理内容を残しておきたいと
 思ったなら、積極的に使うべきでしょう。

 コメントには、¥もあります。こちらは、{enter}を入力する
 までの内容を、コメントにします。
 括弧で、ワードの実行前後のスタックの状態を表示します。

 変数、定数を定義して、値を設定するには、ワードの
 「variable」、「constant」を利用。




 変数の場合、値を確認するには、スタックに入れるため
 ワードの「@」を使わなければなりません。

 値を16進数で確認したいときには、ワード「hex.」を使います。
 ワード「.」は、スタックトップのデータを取出し、表示ですが
 hexで16進数での表示と指定していることになります。



 変数に値を格納するには、ワード「!」を使います。



 定数をアドレスとして、そのアドレスのデータを設定する
 ときも、ワード「!」を使います。例は、以下。



 LPC1114のポート1をGPIOで利用するために
 Data Direction Registerのアドレスをワード「constant」で
 ラベルに関連付け。
 その後で、ラベル利用で、アドレスとデータを確認。
 データを設定して、変更されたかを確かめています。

 メモリあるいはI/Oのアドレスを指定して、値を設定する
 ワードが「!」であると言い換えられます。

 スタックに値を保存するときには、そのまま入力しますが
 スタックではないメモリやI/Oに値を設定したときには
 ワード「!」を使うと言ってもよいでしょう。

 変数の値を取得したいときには、スタックに入れます。
 その場合は、ワード「@」を利用。これで、スタックには
 変数の値がコピーされているので、ワード「.」で取出し。

 数値を16進数で表現するときには、$を先頭につけておきます。

 Forthでは、メインルーチン、サブルーチン等の区別はありません。
 ワードの組み合わせで、スタックを操作することがプログラムに
 なります。

 スタックにデータを出し入れすることが
 基本操作と覚えておけば充分です。

 計算や処理の優先順序を指定するために、他の言語では
 括弧を使いますが、Forthでは、コメントです。

 優先順位決定は、ユーザーの仕事であるとのスタンス。
 これを忘れなければ、日本語語順でプログラムを書いて
 いけます。


目次

inserted by FC2 system