目次
前
次
基本操作
LPC1114にインプリメントしたForthインタプリタで
操作を説明しますが、Forthインタプリタを実装して
いるマイコン基板があるとし、環境を合わせたなら
ほぼ同じことができるはずです。
自分が利用している環境は、以下。
Personal Computerは、端末ソフトが動けばよいので
OSとしてWindows、Unix、MacOSXのいずれかが動いて
いれば充分。
Serial Cableは、USBでもレガシータイプでもよいです。
自作基板では、シリアルインタフェースを実装してUSB
でも、レガシータイプでも使えるようにしてます。
LPC1114基板の回路図は、以下。
端末接続するために、小信号トランジスタを利用しています。
このトランジスタは、小信号のシリコントランジスタならば
どんなものでもOK。
端末ソフトを利用して、Forthインタプリタを実装した
LPC1114基板と接続しています。
Windowsでは、フリーで入手できる端末ソフトのTeraTerm
を使っています。
環境パラメータは、以下。
- 文字コード ASCII
- 送信デリミタ CR
- 受信デリミタ LF
- エコーバック なし
- データ転送速度 115200bps
- データ長 8ビット
- ストップビット 1ビット
- パリティ なし
- フロー制御 なし
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では、コメントです。
優先順位決定は、ユーザーの仕事であるとのスタンス。
これを忘れなければ、日本語語順でプログラムを書いて
いけます。
目次
前
次