Texas Instruments Voyage200 でプログラミング

Text by kinoko(1M 山田)

Voyage 0 はじめに
 はじめまして、一年のkinokoです。今回は人とは違う何かをしたいという方のため、一味違ったものをご紹介したいと思います。これはTexas Instruments Voyage200という関数電卓のお話です。
 なお、このHTML版は紙原稿版とは多少異なる箇所がございますのであらかじめご了承ください。
 また、画面は横800ドット以上、フォントサイズは最小くらいで作りましたのでご参考にしてください。

Voyage 1 Voyage200とは & 何故
 まずはV200とは何ぞや、ということですがこれはテキサスインスツルメンツ社より発売されている関数電卓の一つです。詳しいことはナオコのホームページで見てください。若しくは新宿紀伊国屋に置いてあるパンフレットでも見てください。結構大きく形から見てもポケコンとかいわれることもありますが置いてあるところは関数電卓売り場なので自分は関数電卓と言うことにしています。
 以上が「とは」の部分、此処からは「何故」です。他のデバイス、自分の中では携帯性の高い携帯やGBAなど、はすでに開拓済み、ということがあります。あれらは高性能であるがゆえに「ちょっと作ってみる」が難しいように思います。その上GBAでは自作してもそれをロムに流すのが容易ではありません。パソでやるだけならGBAで作る意味はない、携帯にしても自分の環境(au A5304T,ezplusではなくBREW搭載)ではBREWとかいう奴のせいで金はかかるしネットに繋がないと携帯に流し込めないのです(詳しくはQUALCOMM BREWホーム参照、ここの認証を受けないと実機で動作しない)。V200ではこれらの問題はありません。さらに元はといえば関数電卓ですからいろいろな場面・用途で使えます。初期投資に¥35Kほどかかりますが。

Voyage 2 何をしようか
 パンフなどを見ていただけるとわかるようにこの電卓は結構高機能・高性能なので(CPU:MC68000-10MHz、メモリ2.7MB、液晶240x128px、微分方程式も解ける)ただ電卓として使っているだけだったらもったいないです。何かに使えないでしょうか。で、プログラミングですよ。とはいっても私の能力など∞^-1なのでほんのさわり程度しか出来ませんが。
 この電卓、もともと計算の補助的な役割としてプログラミングができます。TI-BASICというのですがこれはとても遅いです。なんせインタプリタな上にCPUは10MHzです。ついでにいうとM68kです。まさに68にふさわしい一品といえましょう。
 BASICじゃ遅い、となると後はCです(単純)。喜ばしいことにTI電卓用のGCCコンパイラを作った人々が居ました。詳しいことは後で挙げるサイトでも見てください。さらに嬉しいことにこのTIGCCというものはIDEを持っているため私のようなWindows世代でも楽々開発できるのです。ここら辺はGBAよりいいかもしれません(私の知る限り)。

Voyage 3 環境を整える
 開発するとなるとまず環境を整備せねばなりませんが、technoplazaに行けばほとんどのことは事足ります。ちょっとまとめると、PCとV200をつなぐケーブル、ソフトは同梱されているので必要なものは、
TIGCC …Cコンパイラ。M68k用のアセンブラも使えるみたいです。
Virtual TI …出来たプログラムを実行するのに必要なエミュレータ。
持っている電卓のROMイメージ若しくはOS …エミュを実行するのに必要なファイル。
 これらすべて上記のサイトからたどっていくことで入手できます。3番目のものは、直接吸い出すかTIのアップデートサイトで入手できますが前者はめんどくさい、意味不明、無駄に時間がかかるので後者がお勧めです。しかしこれも直接TIのページから探すよりも始めのサイトから飛んでいくほうが迷子にならずにすみます。そして、入手したらセットアップ開始なわけですがこれも亦最初のサイトに図入りで詳しく書いてありますので何も難しいことはありません。が、少し気になるのはVirtualTIを立ち上げていないと作ったプログラムをテストできないことと、VirtualTIはVoyage200を想定していないことです。後者はたいした問題ではないのですが(もともとVoyage200はTI-92+という電卓のかっちょいいVer.)、前者もつい忘れてしまいがちです。ただしこれの煽りでTI-92+用のOSファイルでないと使えません。結局吸い出しても意味ないってことですね。どうも実機を持っていなくても開発は出来るみたいです(もっといた方がいいとは思いますが)。

Voyage 4 Hello,Samples!!
 最後はサンプルですが、去年の部誌を見たところHelloWorldもアリみたいだったのでそれでお茶を濁すことにします。やり方は簡単。まずIDEを立ち上げます。次に[File]メニューから[New][Project]でプロジェクトを作り、同じく[New]から[C Source File]でファイルを追加します。このときダイアログが出てきていろいろとオプションを選択することになりますがこれも亦最初のサイトの指示に従えばOKです。気を付けるのは二回目のダイアログで”Optimize ROM call”と”Minimum AMS version”のチェックを逆にすることだけです。すると新しいファイルが作られ自動的に最低限の記述がなされます。それにはコメントもついているので解説せずとも良いでしょう。で、” // Place your code here.”とか書いてあるところの下に
ClrScr(); ←他にclrscr()というのもあります。画面消去。
DrawStr(100,50,”Hello World!”,A_NORMAL); ←TI-BASICだと行列の要素扱いのため50,100とかなります。
ngetchx(); ←キー入力待ち
の三文を追加すれば完成です。単純ですね。ヘルプもしっかりしているのでわからない関数やちょっとしたテクニックも大丈夫。それでもだめなら始めに紹介したサイトやticalc.orgでソースつきのプログラムをダウンロードして参考にしてみたり、某chのポケコン関係スレなどに行ってみるのも手かもしれません。ただしまだまだマイナーなのであまり人の手は借りられないのが現状です。
 上のプログラム、一応全画面を使えるということが直感的にわかってもらえるかもしれませんが、一番下の数ドットはシステム関連の情報に使われてしまいます。ちょっとしたプログラムなら気にしないかもしれませんがAVGやRPGの一番の感動シーンで右下にBATT(バッテリー切れかけ)なんて表示された日にゃせっかくの気分もぶち壊しですね。これは自動割込みが機能しているためなのでそれを無効にするなりする必要が出てくるのですが、そうすると一部の便利な機能が制限を受けることになります。特にキー入力関連やグレースケール関係(白黒の画面を高速切り替えした残像を利用することで4階調ほど実現できる。場合によっては結構ちらちらする。)は本格的なものを作ろうとした時には致命傷です。そこで割り込みを別な方向へ向けてやるためにSetIntVecとDUMMY_HANDLERという物を用います。こうするとグレースケールが使えるのですね、ステキですネ。グレースケールに関しては割愛するとしてキー入力ですが、割り込みに頼らないときは_rowreadという直接キーマトリクスを読みにいく関数を使います。しかし半端に割り込みを無効にすると間違ったキーまで拾ってくるようになります。これは多くの人がつまずく所のようで海外の掲示板なんかでも良く見かけます。色々と試した結果多くのところで言われるように自動割込み1番を無効にするだけでなく5番もやることでやっと思ったような動作をするようになりました。ヘルプを見てみるとどちらもタイマー関連の割り込みのようですが、何故キーマトリクスと関連があるのか良くわかりません。まぁ一学期、数学の先生も「考えるんやない、覚えるんや」と言っておられたことですし此処はそれで行きましょう。具体的にはこんな感じです。見にくくてすみません。
INT_HANDLER SaveInt1=GetIntVec(AUTO_INT_1);
INT_HANDLER SaveInt5=GetIntVec(AUTO_INT_5);
//元の設定を保存
SetIntVec(AUTO_INT_1,DUMMY_HANDLER);
SetIntVec(AUTO_INT_5,DUMMY_HANDLER);
//Vectorをnothingにするんだそうです。此処でグレースケール関係の処理をしたりする。
//ESCキー待ちならこんな感じで→while( !( _rowread(0xFEFF) & 0x0040 ) );
SetIntVec(AUTO_INT_1,SaveInt5);
SetIntVec(AUTO_INT_5,SaveInt5);
//元に戻しましょう
 という感じで紙原稿版では逃げたわけですがHTML版ではちゃんとやりますよ、サンプル。ところで、見栄えの良いものを作るとなるとグレースケールを活用したいところですがそのままプログラムを組もうとすると先に述べた理由によりグラフィック関係のコードを約二倍書く羽目になり、見にくく大変になるので「人の手はかりねぇ」とかではないなら何かしらライブラリを導入するのが良いです。そこら辺のサンプルをいくつか見ていただければわかるようにほとんどの人が同じものを使っています。ExtGraph Library (in ticalc.org)です(最新版ではない可能性もあるので注意してください)。行って落とせばほとんど説明は要らないでしょう。ここではもう導入したとして話を進めます。今回はグレースケール、割り込み無効化、キー入力、スプライトと、すべてを盛り込んだ欲張りなサンプルを示してみたいと思います。適当なプロジェクトを作って[Project][Add Files...]から"extgraph.h"と"extgraph.a"を追加しリンク先のソースをコピーアンドペーストしてください。

サンプルのスクリーンショット。右に進んでいきます。

参考:グレースケールの画像
明部用画像 0 1 0 1
暗部用画像 0 0 1 1
合成結果

Voyage 5 最後に
 なんかどうでもいいことをけっこうな量書いてきた気もしますがこれで終わりです。肝心なところは駆け足で、伝えられなかったところも多いですが少しでも興味を持っていただければ幸いです。あと、紙原稿版のVoyage 4ではHelloWorldでお茶を濁しましたがそれなりに開発しているということは付け加えさせていただきます。
 ここまで読んでいただきありがとうございました、そしてさようなら。

Voyage 6 航海への扉
Techno-Plaza THE TI-68k Learning Resource! まずはここから
ticalc.org TIの電卓に関することなら何でもござれ
Texas Instruments 本家。OSの入手およびアップデートはこちら
株式会社ナオコ 日本での輸入販売元。紀伊国屋に行けない方はこちらから
ExtGraph Library (in ticalc.org) 入れると入れないとじゃ大違い
ImageStudio BMP to Sprite Data. Very very useful!

Voyage 7 スペースあまった
 スペースが余ったのでちょっとしたことを。
  • どうも実機を持っていなくても開発は出来るみたい。
  • ナオコのHPに以前、活用例として母校の授業風景が取り上げられていた。
  • 人は初めて触れたメーカーのものに惹かれるというのは本当のようだ。
  • 大学生は暇で遊び放題なんて言ったの誰ですか?

Enjoy your calc life!!