2023.4.1

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


PICBASICコンパイラ

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

[第1回]



●PIC専用BASICコンパイラ!只今開発中!

およそ1年近くの間PICUSBIOボードを制御するためのBASICについて書いてきました。
それは整数型のBASICインタプリタです。
そのインタプリタはPICの上にあるのではなくてWindowsパソコンに主体があります。
もともとPICそのものの制御が本来の目的ではなくて、その昔パソコン内蔵のI/Oポートをユーザーが自由にプログラムでコントロールできたように、Windowsパソコンの外に接続したI/Oを制御できるものを作ろうというのがそもそもの開発の目的でした。
そのあたりのことについては「PIC−USBIO using BASIC」[第1回]に書いています。
とっかかりの最初は端的に言ってしまえば「82C55をWindowsマシンで制御する」のが目的でした。
しかし回を進めていくうちに「せっかく間にPICが入っているのにこれを使わないというのは勿体無いのではないか?」と思うようになりました。
たとえばND80Z3.5などでもPICを使っていますがそれはPICをUSBインターフェースICであると割り切って使っています。
PICUSBIOボードでも最初は同じ考えでスタートしたのですが、PICUSBIO−03なんてボードを作ってしまったことから考えが変わってきました。

PICにだってI/Oはある。
もっとも82C55に比べれば使えるポートの数はうんと少ないけれど。
[注]82C55に近いくらいの数のポートをもつボードもあります(PICUSBIO−08、PICUSBIO−09)。
PICのポートで間に合うならばPICの外にさらにI/Oを置くのは無駄ではないか。
それにPICにはただのI/O以外にもタイマーとかADコンバータとかいろいろな機能もついている。
コイツを使わないというテはないだろう。

その考えから書き始めたのが「PIC−USBIO using BASIC」[第52回](昨年2023年9月)でした。
当初は2ヶ月もあれば片付くだろうと思って書き始めたのでしたが予想をはるかに越えてしまいなんと今年の2月([第181回]という長丁場になってしまいました。
そのあと残っておりましたPICUSBIO−08とPICUSBIO−09の説明を加えたところでそのテーマについては終わり、通常ならばこの春からはまた別のテーマについて書く、という流れになるところだったのですが。
実はPICUSBIO−03の機能のあれこれをBASICでプログラムすることについて書いていくなかで、またまた全く別の考えが膨らんできました。

ここまでPICをBASICでコントロールできるならば。
そこのところを今少し工夫することで。
今までの流れから大きくジャンプして全くの別物にチャレンジできるのでは。
PICUSBIO−03は超小型ながらなかなかに多機能なボードだと自画自賛しています。
しかし大きく2つの弱点があります。
ひとつはUSB通信であることとインタプリタであることのためプログラムの実行速度が遅いことです。
遅いことはデメリットですがそのくらい遅くても構わない程度の用途に限定すればメリットはBASICインタプリタの簡便さです。
BASICインタプリタの簡便さは何物にも勝るメリットでありましょう。
しかし遅くては使えないという用途に対してはいかにメリットを強調したとしてもどうしようもありません。
そこを何とかすることはできないものか。
それが第一のポイントです。
第二の弱点はPICUSBIOがWindowsマシンとUSBでつながっていて切り離すことができないという点です。
これはもうもともとそういうコンセプトのボードなのですから、それを言われてもねえ、ということなのですが。
PICの機能を制御するBASICプログラムを書くことができても、それはあくまでWindowsマシンにUSBで接続されているからこそできることです。
なんとなればPICUSBIO用BASICはWindowsのコマンドプロンプトで動作しているからです。
これももともとそういうコンセプトなのですからどうしようもないことです。
しかしそういうコンセプトを一旦捨ててしまって、そのなかから「よいとこどり」をしてそれを新しいコンセプトにすることができたならば。

うむむ。
めっちゃよいものができてしまうではありませんか。
そのコンセプトとは。
とにかくせっかくここまで作ってきたWindowsとUSB接続して動くPICボードです。
その状態でBASICインタプリタを使うことでPICの制御を簡単にプログラムできるというところはやっぱり外せませんでしょう。
問題は実行速度です。
どうしたらBASICプログラムで「高速」に実行することができるか?
その答えの行き着く先はコンパイラしかありませんでしょう。
しかし。
インタプリタとコンパイラは長所と短所が反対の関係にあります。
はたしてインタプリタの簡便さを損なわないようなコンパイラを作ることは可能でありましょうか?

いまどきBASICなど「前代の遺物」と思っていますけれど、念のためにインターネットでググッてみましたら。
いやあ、あるものですねえ。
PIC用BASICコンパイラが。
私はPICコンパイラはCしかないものと思っておりました。
なかにはフリーソフトもあるようですが(その中にはインタプリタもあるようです)、ぬぁんと2万円以上もするものも!
すごいですねえ。
ちょいとのぞいてみましたけれど。
再び、うわぁ、でありました。
BASICの定番でありますところの「BASICは簡単です」というところから始まっているようですけれど、そもそもの簡単なサンプルプログラム自体が簡単じゃないじゃありませんか。
I/Oポートの出力をON/OFFするという簡単なサンプルプログラムを見ましたら、なんだか余計ななんたらかんたらが必要なようです。
やっぱりそういうところに行ってしまうのでしょうかねえ。
私としてはちょいとなんだかなあと思わずにはおれませんです。

余談になりますが。
私が車の免許を取ったのははるかな昔学生のころです。
以来今日までほとんど車から離れぬ生活を送ってきました。
どなた様も同じかと思いますがその間色々な車に買い換えて乗ってきました。
唐突に、なんの話だ?
まあ、まあ。ご辛抱を。
2年に1回、車検つうものがあります(新車は3年)。
面倒でカネがかかるものであります。
今時はコーヒーを飲んでいる間にできます、なんて驚速をうたう車検屋さんもいらっしゃるようですが(一度使って懲りました)。
大抵信頼できるところですと持ち込んでから2〜3日はかかります。
その間は大抵は無料で代車を貸してくれます。
大抵は初めて乗る車種です。
最近の車種ですと「あれ?これって、スタートキーはどこに?」なんてのもありますが、車屋さんに聞くと「これはこう、ここはこう」と親切に教えてくれます。
ああ、そうか、納得、ということでそれで車検が済むまでの間借りた車で買い物に行ったりいたします。
やっと、着地点にきました。
言わんとすることがおわかりでしょうか?
考えてみればすごいことなんですよねえ。
初めての車でも数分説明を聞いただけで普通に乗れてしまいます(いえ。すごいのは、私が、ではなくて車が、です)。
(私に言わせれば、最近の車はおかしいです。あんなフロントパネルは操作不能でありまする。ジャンボ機のコックピットじゃあるまいし)。

えっと。
本題に戻ります。
私の考えるところでは。
BASICとは本来はそういうものであるべき、という認識です(あくまで個人の主張であります)。
使おうと思っても、なんたらかんたらが多くてなかなか使いこなせない、なんてちっともBASICじゃないじゃありませんか。
おお。
その最たるものが、かのVisual BASICでありましょう。
思うに。
高機能を追求するとその行き先はそうなってしまうという良い(あるいはめっちゃ悪い)見本ではありますまいか。

ふたたび本題に戻ります。
たかがI/O制御が主目的のPICです。
そんなに超高機能な開発言語が必要なのでありましょうか。
私はずっとPICはアセンブラ一本でやってきています(PICのアセンブラにはクセがありますけれど)。
PICは本来そういうものだと思っております。
もっとも近年のPIC32xxなんてのはなんだかだんだんすごいものになってきているようでありますが。
ここで私がPICと言っておりますのはPIC18、PIC24あたりのシリーズです。
故あってPIC12、PIC16は今回の対象外です(そのことについてはいずれ説明します)。
さて、それで。
私の認識ではBASICとは本来そういうものでありまして、それはほとんど「BASICインタプリタ」の特徴、利点であります。
欠点は「実行速度が遅い」であるということについては上のところに書きました。

実行速度を早くしたいのならば、そしてきめ細かな処理を望むのでしたら、やっぱり「アセンブラ」でありましょう。
しかし、それは「難しい」ということから今回は除外です。
となると行き着く先は「コンパイラ」ということになります。
しかし今時定番のCコンパイラは選択の対象外であります(「PIC−USBIO using BASIC」[第2回])。
すると。
当新連載の「BASICコンパイラ」に行き着きます。
しかし上の方に書きましたように「インタプリタ」と「コンパイラ」は長所と短所が反対の関係にあります。
「限りなくインタプリタに近いBASICコンパイラ」なんてものは果たして作成可能なのでありましょうや。
それが当連載の主テーマであります。

PICBASICコンパイラ[第1回]
2023.4.1upload


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