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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第7回]



●サンプルプログラム(3)I/Oポートへの出力

[第5回]でお見せしたサンプルプログラムはI/OポートPORTCに値を出力するプログラムでした。
そこでお見せしたことと同じになりますがそのときのプログラムをもう一度ロードして実行しました。
下はその実行画面です。

ソースプログラムファイル(BSOUTT1.TXT)をロードしてリスト表示をしたあと/RUNコマンドでいきなり実行しています。
一見するとBASICインタプリタのように見えますが、実は[第5回]で書きましたように/LOADコマンドと/RUNコマンドの実行時にソースプログラムからPICのマシン語コードに翻訳し(コンパイル)、それをPICに書き込む作業を行なってからPIC上のマシン語プログラムを実行しています。
上の画面ではそのあと[Ctrl][B]を入力してブレークしました。
ブレーク時の表示を少し変更しました。
^Bは[Ctrl][B]を入力することでブレークしたことを示す表示です。
break [2004]は今回追加した表示です。
マシン語プログラムの2004番地でブレークしたことを示しています。
BASICコンパイラですから最終的にはマシン語に翻訳されたプログラムが実行されるのですが一般のユーザーにとってはそこはよくわからない領域かもしれません。
しかし実際に実行されていて、それがブレークしたときのマシン語プログラムのアドレスを知ることが時にはなにかの参考になるかも知れないと考えてこの表示を追加しました。
実際にマシン語コードに翻訳されてPICに書き込まれたマシン語プログラムも[第5回]でお見せしました。
上の画面でも同じことを実行しています。
/PMRDコマンドを実行することでPICに書き込まれたマシン語の命令コードを読み出すことができます。

以上はこれから説明することの参考として[第5回]と同じことをしてみました。
上のプログラムリストではI/Oポートに値を出力する命令としてOUT文を使っています。
BASICではI/Oポートに出力する命令としてOUT文を使うのが普通です。
できるだけ違和感を感じることがないようにということでPICBASICコンパイラでもOUT文が使えるようにしてあります。
何を当たり前のことを言っているのだ?
とお思いかもしれませんが。
実はPICはI/OポートもタイマーやADコンバータなどのいろいろな機能レジスタと同じ「レジスタ」なのです。
このあたりがZ80などのマイクロプロセッサと大きく異なっているところです。
Z80などではCPU内部にあるのがレジスタでCPUの外部のメモリーバスに接続されているのがメモリーでI/Oバスに接続されているのがI/OポートなどのI/O回路です。
それぞれアクセスする命令が異なっていてメモリにアクセスするのがロード命令(LD、8080ではMOV)でI/OにアクセスするのがOUT、IN命令です。
それぞれCPUから見たハードウェア上の違いからそのように分かれています。
しかしPICの場合にはI/Oポートも機能などを設定したり定義したりするためのレジスタもそれからユーザー用のレジスタも全部同じ「レジスタ」です。
ということは。
PICの場合マシン語レベルではI/Oポートもそのほかのレジスタも同じレジスタとして扱っているので、実はPICのマシン語コードには「OUT」命令はありません。
うーん。
うまく説明できません。
こういうことです。
実際に見ていただいたほうがわかりやすいと思います。

サンプルプログラムBSOUTT2.TXTをロードしました。
このプログラムはその上でロードしたBSOUTT1.TXTと全く同じ動作をするプログラムです。
両者の違いがお分かりいただけますでしょうか?
上のプログラムではPORTCを(Z80等と同じ)I/Oポートとして扱っているためOUT文を使っています。
下のプログラムではPORTCをレジスタとして扱っています。
BASICではレジスタは普通の変数として扱いますからごく普通に=を使って代入文で表記します。
慣れないうちはI/Oポートに出力するのに代入文を使うのには抵抗があるかもしれません。
でもこのことを理解することでPICのプログラムをより柔軟に扱うことができるようになります。

説明の途中ですが本日は時間がなくなってしまいました。
続きは次回にいたします。

PICBASICコンパイラ[第7回]
2023.4.10upload

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