豊四季タイニーBASICの移植の手引き

豊四季タイニーBASICは移植のしやすさを考慮してC言語で生真面目に記述し、なおかつ、スタートアップルーチンの仕事を最小限にとどめること、原則としてライブラリを使わないことを心掛けた。私が試した範囲でいうと、Visual C/C++とgcc系のCコンパイラでひとつの警告もなくコンパイルできる。公開した各版は、基本的な機能をttbasic.x(xはcかcppかh)で完結しており、この中の関数basicを、プラットフォームの流儀にしたがって呼び出す形式をとっている。

移植にあたって修正が必要と思われる部分はttbasic.xのコメントに「TO-DO」と入れておいた。具体的には、端末との通信に関係する関数c_putch、c_getch、c_kbhit、newlineと乱数を生成する関数getrnd。これらが要求する機能を実現するため、各版は例外的にプラットフォームに用意されたライブラリを使っている。プラットフォームに依存する機能をプラットフォームのライブラリで実現することは、別段、問題ではない。

移植しようと考えるような人なら端末との通信は比較的簡単に実現できると思う。乱数もプラットフォームのライブラリを使えば生成できるが、乱数系列の変更に悩まされる。通常srand(time(NULL));とするが、マイコンでは関数timeが機能しないケースが多い。Arduinoは幸いにして関数microsで代替できた。PIC24Fは、どうしようもないので、乱数系列を考慮していない。

これらせいぜい5個の関数を修正するだけで移植できる理由はttbasic.xが素晴らしく合理的に記述されているせいではない。豊四季タイニーBASICのリファレンスはパロアルトタイニーBASIC互換であり、手短にいって周辺装置は端末しか取り扱わないからだ。現実の電子機器はマイコンにスイッチやLEDやセンサがつながっており、これらを縦横無尽に制御するようなものだとそうはいかない。

機能拡張したものをどのように移植するかより重要なことは機能拡張のしかただろう。機能拡張の手引きは、いつか書こうと思っているが、さらりといえる話ではないのでもう少し時間をいただきたい。豊四季タイニーBASICの色キャプチャ版をもっている人は、そのソースをWin32版と比較していただくとだいたいわかるはずである。なお、色キャプチャ版は「色キャプチャ」で走るという性質からソフトウェアだけあっても使いようがないため一般に公開する予定はない(色キャプチャ版をもっている人がご自身の判断で再配布することは制限していない)。

プログラムを保存したり読み込んだりするコマンド(SAVEとLOAD)があってもいいんじゃないかという意見があるようなので補足しておく。パロアルトタイニーBASICの時代は端末がテレタイプで、これは印字内容を紙テープに記録する機能をもっていた。現在の端末はTera Termなどの端末ソフトになるだろうが、これもログをとる機能がある。こうした機能でLISTコマンドの出力を記録し、あるいはその記録をアップロードすれば、実質的にプログラムの保存と読み込みができる。古きよき時代の雰囲気を味わうという観点からも、なくてすむコマンドは作らない。Win32版は端末ソフトを使わないのでこの方法がとれないが、文法確認用と位置づけており、あまり便利でないことは勘弁していただきたい。

マイコンを応用した製作物に豊四季タイニーBASICを移植する場合は、端末なしに自立して動作するとたいへん便利だから、少し事情が違う。実際、色キャプチャ版はリストの内容をフラッシュメモリにコピーしたり、フラッシュメモリからリストへコピーしたりする機能をもっている。また、リストの末尾1バイトをブートフラグに使っており、これが立っていると電源を入れたあと自動的に読み込んで実行する。ただし、それはセンサやLEDやスイッチを制御できるように機能拡張した場合の話である。端末しかつながらないものがたとえ自立して動作したとしても使いようがないので、少なくともリファレンスはプログラムを保存したり読み込んだりするコマンドを作らない。

広告
カテゴリー: TinyBASIC パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中