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


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第21回]



●中間言語型BASICインタプリタに変更することに

前回からの続きです。
TEXT型BASICインタプリタでは納得がいかんということになりますと。
結局のところND80Z3.5などと同じ中間言語型のBASICインタプリタでいくということになります。
BASICコンパイラについては当初も現在も考慮の外です。
しかし同じBASICインタプリタでもTEXT型と中間言語型ではプログラムが全く根底から違ってきます。
せっかくTEXT型のBASICインタプリタをおよそ2ヶ月かけてやっと完成近いところまで作り上げてきたといいますのに。
それをひっくり返して最初からまた作り直しです。
何をやってるんでしようね、まったく。

それはそれとしまして。
一体TEXT型と中間言語型はどこがどのように違うのか、参考までにそのあたりを簡単に説明しておきます。
下は前回説明したサンプルプログラムです。

/LOADコマンドで読み込みました。
説明のためにメモリに読み込んだプログラムがメモリの中でどのようになっているかを表示しました。
/dumpは今回の説明のために作ったデバッグ用の機能です。
LISTコマンドで表示されたプログラムがそのまま文字コードで表示されています。
今までのPIC−USBIO用のTEXT型BASICインタプリタはこの文字コード列を先頭から読んで解読し命令として実行していました。
それに対して中間言語型のBASICインタプリタではこのTEXTファイルをまず中間言語に翻訳します。

実は中間言語型でいくことに方針を転換したのはおよそ1ヶ月ほど前のことでした。
それから1ヶ月かけてとりあえずTEXT型としてできていたところまでを中間言語型で組み直しました。
今回の説明のために起動したBASICインタプリタはその中間言語型です。

TEXT型のソースプログラムを中間言語に翻訳するための仮コマンドとして/convを作りました。
これはあくまでシステム構築のために仮に用意した機能です。
最終的には/LOADかRUNコマンドに組み込むことになるかと思います。
とにかく/convを実行することでTEXT型のソースプログラムから中間言語型のプログラムが作成されます。
txtbfend=5以下の表示もデバッグのためのもので最終的にはこういう表示はわずらわしいだけなので表示させないようにするつもりです。
さてそれではTEXT型のソースプログラムがどのような中間言語型プログラムに変換されたのか見てみることにします。

/debugコマンドもデバッグのために作ったもので中間言語型のプログラムの作成や実行に必要なものではありません。
objbfi=0〜objbfi=6がTEXT型のソースプログラムから生成された中間言語型のプログラムです。
さきほどのTEXT型プログラムと比べてみてください。
printとかgoto、abc、*loopなどの文字列コードがすべて内部コードに置き換えられています。
まるで意味不明のデータ列です。
しかし勿論プログラムとしては意味があるデータ列です。
詳しい説明は省きますが前回書きましたgoto文の飛び先としての*loopの位置はこの時点でgotoを示すコードの中に埋め込まれていますから、TEXT型のように毎回プログラムの先頭からサーチする必要はありません。

runコマンドを実行しました。

前回のTEXT型での実行結果と同じですが、今回は中間言語型に翻訳されたプログラムを実行しています。

PIC−USBIO using BASIC[第21回]
2022.7.11upload

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