| 
期間前半はデモ機の試作や学会発表を、後半は評価基板の配布サポートや資料公開などを中心に行った。言語処理系の改良は期間を通じて進めた。
開発結果として以下を達成した。
ア.コンパイラの改良
割り込み機構の実装(R8C/Tiny, ATmega88)、アセンブラ記述による辞書検索の高速化を行った。また、日本語プログラミングのための拡張や32bit
版の作成を行った。
イ.各種CPUへの実装
つぎのマイクロコントローラに実装した。
Microchip: PIC12F683, PIC16F88
ATMEL: ATmega88
ルネサステクノロジ: R8C/Tiny, M32R
USB インターフェースは評価基板2号(ATmega88+ATtiny45)に組み込んだ。
ウ.開発支援環境の整備
コンパイル時にプログラム中のスタックレベルの変動を監視し構文誤りを検出する機能を、PC上のコンパイラのなかに組み込んだ。実機でのデバッグが困難なときに用いれば迅速に不具合を検出できる。また、言語環境に馴染むためのグラフィックアプリケーションも試作した。
エ.評価・デモ用ボード製作
応用事例として、分散マルチプロセッサシステムへの差分コンパイル配信機構を拡張して小型ロボットに実装し、学会などで発表した。評価ボード600
枚を作成し、モニターへの配布と評価を継続している。一部のモニターから感想、不具合報告、作成したプログラムや、ハードウェアの製作事例が寄せられている。
オ.資料作成とWeb公開
Web上で、マニュアル、ソースコード、サポート情報などの技術資料を公開した。また、英語ページも一部公開し、継続して整備している。
今回のプロジェクトで得られたこれらの成果の中から、いくつかの主要な内容について詳細を以下に示す。
(1) 多品種のマイクロコントローラへ移植
プロジェクト開始時点ではPIC16F88 で動作するのみであった。まず分散システムの実験を兼ねて、R8C/Tiny およびPIC12F683
に移植した。R8C/Tiny には後に割込み機構を追加した。また、評価基板の作成に向け、R8C/Tiny と同等の機能をATmega88に移植した。これまでホストPC
との通信速度が2400bps でコンパイルの待ち時間が長かったため、辞書検索処理をアセンブラ記述にして高速化し、4800bps
での通信を可能とした。また、漢字コード(Shift-JIS)処理も追加するなどして簡易な日本語プログラミングにも対応した。

図1 マイクロコントローラのメモリ配置(PIC16F88)
その他、ローエンドマイコン以外の例として、32ビットRISCマイコンである
M32Rにも移植を行った。移植は容易であり、FPGAボード上のM32Rソフトマクロコアでも動作を確認することができた。
(2) 分散制御用に拡張
小型軽量コンパイラであることを活かした応用例として、言語処理系自体を機器組み込みするとともに、分散マルチプロセッサシステムの制御に拡張する試みを行った。
R8C/Tiny へコンパイラとインタープリタを、PIC12F683 にはインタープリタのみを実装した。いずれもインタープリタ部分はアセンブラで記述した。これにより、R8C/Tiny
をマスターとし多数の PIC12F683 をスレーブとするマルチプロセッサシステムを構成した。R8C/Tiny は自身とスレーブのプロセッサ向けにコンパイルし、スレーブプロセッサへ中間コードを配信、起動するしくみを整えた。差分プログラミングのための拡張も行った。

図2、写真1
分散マルチプロセッサの実験
(3) 32ビット符号付整数版
ハイエンドの組み込みマイコンへの実装や、組み込みでないPC環境での応用を想定して、より汎用的に使える版を作成した。また、中間コードが冗長であっても実行時の性能を優先するような修正も施した。
・スタックを32bit 幅とし、演算は符号付整数化。
・中間コード中のイミディエイト値やオフセット値がワード境界にかからないよう配置し、インタープリタ実行を効率化。
・バイト順をインテル系(Little Endian)のままで中間コード生成、実行する版を作成。
(4) 割り込み機構
組み込み機器への現実的な応用に際しては、タスク管理や一定時間ごとの処理起動のためのしくみが重要となる。割込みやタスク管理は組み込みプログラミングでは上級の課題となるが、これをインタープリタのスレッドループの狭間で呼び出す方式でR8C/Tiny
およびATmega88 に実装した。10m 秒または 1 秒間隔で、ベクタ登録した任意の関数を起動できるため、I/O ポートの監視やタスク切り替えに利用できる。

リスト1 割込み機構の使用例
(5) 日本語対応
日本語のままでプログラミングすることにより、プログラミング言語を知らずとも即座に処理動作を把握できる利点がある。FORTH のような後置記法型言語は日本語文法との親和性が高いため、僅かの拡張でそれらしい記述ができる。試みに、Shift-JIS
の漢字コードを扱えるようにするとともにコメント挿入を容易にするしくみを導入し、可能性を探った。つぎのようなプログラム記述をそのままマイクロコントローラに送り込み実行することができる。
以下で末尾が’ ,’となるワードはコメントとして無視される。

リスト2 日本語的プログラム記述例
(6) グラフィック
処理系が軽量であることを、組み込み以外の面に応用できるか検討した。数Kバイトで実装できることから、汎用のアプリケーションに組み込んでのスクリプト制御が考えられる。その第一歩としてグラフィック機能を追加したプログラミング環境をWindows
に実装した。ウィンドウにグラフィック描画するコマンドを追加したものであるが、LEGO 言語のように教育現場で用いることを想定してタートルグラフィックスができるようにした。簡単なプログラムで多彩な描画を楽しめる。

リスト3、図3 グラフィック描画アプリケーション
(7) スタックトレース機能
後置記法型言語でスタックを想定したプログラミングでは、スタックの増減を意識したコーディングが必要とされるが、バグの多くもこのスタックレベルの整合がとれないことに起因する。コンパイル時に、スタックの増減を自動的にトレースし、制御構造のなかで整合がとれないところを検出するしくみを実装した。
|