# プログラムのダウンロード

### プログラムの記述

内蔵された機能によって、シリアルインターフェイス経由で ホストコンピュータ（例えばIBM PCや互換機） からEyeBotのRAMまたはFlash-ROMへユーザープログラムの転送を行います。 これはEyeBotハードウェアに提供されている多数のシステムルーチンのひとつで、ユーザーが独自のアプリケーションを設計して実行することを可能にしています。

### ホストコンピュータとEyeBotの設定

- ホストパソコンからのシリアルデータ

転送ルーチンを使うためには、ユーザーがホストパソコン上に端末プログラムをインストールし、EyeBotのシリアルプロトコルと一致させる必要があります。 端末プログラムはS-Record形式ファイルをダウンロードルーチン制御の下でEyeBotに転送します。

- EyeBotで設定するパラメータ

コマンド系列（下記）はEyebotのキーを順番に押すことによって表示され、ダウンロード用パラメータを指定する。このキー操作がダウンロードルーチンで使用する唯一のユーザー入力方法になります。

- 通信速度： 9600、19200、38400、57600、115200
- フロー制御： None、RTS/CTS

- シリアルプロトコルのリスト（PC/Mac）

- Unixシステムの場合にはKermitを使用するか、または下記の行に適切な速度を設定してください（COM2の場合）。

stty speed 57600 crtscts < /dev/ttyS1

現在の設定は下記のように確認することができます。（COM2の場合）

stty -a < /dev/ttyS1

Unixのデータ転送（COM2の場合）は下記のように極めて簡単です。

cat myfile.hex > /dev/ttyS1

ダウンロードには提供されているシェルスクリプトを使うこともできます。転送速度57600、フロー制御 RTS/CTSでCOM2ポートを使うことを仮定すると：

dl myfile.hex

### データの転送

転送中、ダウンロードプログラムはロード中のプログラム名と受信済みのバイト数で転送経過を示します。 最後に正常終了画面を表示し、ロードされたプログラムの実行を促します。

### 例外の報告

ダウンロードプログラムは無効な転送事象に遭遇したときEyeBotオペレーティングシステムに対してリターンコードを返します。ダウンロードはエラーが起こった時点で中断されます。転送中にエラーが起こった場合には、いかなるユーザープログラムも実行できません。エラーの原因を正して再度ダウンロードをしなければなりません。簡潔なエラーメッセージがLCD上に表示されます。

- 例外と解決事例

### プログラムの制限

- 利用可能なメモリー

BIOSに使用されていないEyeBotの標RAMの領域は１６進表示で20000番地から40000番地で、ユーザープログラム用に128KBの利用可能な空間が用意されています。RAMは最大で1MBまで拡張できます。

- 通信速度

最大通信速度はは57600です。115200を試みましたが、受信した文字ごとに回避不能な構造エラーを引き起こしました。

- 転送経過表示

このバージョンのダウンロードルーチンはRTS/CTSフロー制御を使用しているときのみ経過報告します。しかし、この機能を使用すると転送時間を顕著に増加させます。 したがって、「経過報告はあるが転送が遅くなる方法」あるいは「経過報告はないが転送が速くなる方法」が選択肢としてあることになります。

この制限は、ダウンロードルーチンがポーリングを行い、 割込みによる入出力ではないことによります。 ポーリング処理中に送信側を停止させずにLCDに書き込もうとすると、データ超過状況エラーを引き起こします。すなわち、一つまたはそれ以上の文字が失われます。RTS/CTSフロー制御を使用するときには、EyeBot上のダウンロードルーチンはディスプレイに書き込こまれている間にパソコンがデータを送るのを防ぐためにClear To Send（CTS）信号をオフにします。

### コマンド入力手順

- 必要なハードウェア：ダウンロード用コネクタをEyeBotとホストコンピュータ（例えばパソコン）のシリアルポートに接続すること。

- まず、プログラムをコンパイルまたはアセンブルし、S-record ファイル（".hex"）を生成するためのオブジェクトファイル作成します。

- １６進表示で20000番地以下のアドレスを使用できません。これらはオペレーティングシステムのために予約されています。

- S-recordファイル（".hex"）をホストシステム上に用意します。

- 通信速度(例えば、57,600)を設定するためにEyeBotのメニューからSet/Serを選択し、ホストコンピュータとEyebotの両方の通信速度とフロー制御を設定し一致させます。

    SerSetup:
    Serial Speed: *
       9600
    Handshake:
       RTS/CTS

     +  -  Nxt END

- EyeBot のメニューからUsr/Ldを選択します。

    Ready to
    download at
    57600, RTS/CTS:
    Downloading:

              END

- DOSのKermitまたはWindowsの端末ソフトを使用して、ホスト（パソコン）から"myprog.hex "ファイルを転送します。

    Ready to
    download at
    57600, RTS/CTS:
    Downloading:
        myprog.hex
    Bytes:
      80260
    Ld Run Rom END

- EyeBotは転送完了を表示します。この時点でプログラムを実行したり消去したりできます。もしエラーが起こった場合にはプログラムはエラーを表示します。

    User Prog.:

     Program loaded:
       myprog.hex

     Ld Run Rom END

- 大容量のFlash-ROMを装備したEyeBot上では、"Rom"ボタンによってユーザープログラムをROMに格納できます。RAMとROMのサイズによって、３つまでのユーザープログラムをFlash-ROMに格納/掃出しできます。

    ---Flashdrive---
    Program in RAM:
       myprog.hex
    Programs in ROM:
         NONE.hex *
         NONE.hex
         NONE.hex
    Sav Ld Nxt END

- 大容量のFlash-ROMを装備したEyeBot上では、"turnkey" システムを 構築できます。すなわち、EyeBotの電源を入れられるかリセットされたりするたびに、 ユーザープログラムが自動的にROMからロードされ実行されるシステムです。そのためには、ダウンロードされるプログラム名をstartup.hexにしてROMスロットに保存します。ROM内にこの名前のプログラムが一つ以上ある場合には、最小のスロットナンバーのものが実行されます。

EyeBotの起動中にどれかのキーが押された場合には、ユーザープログラムの自動実行機能は無効になります。

Thomas Bräunl, Barbara Linn, and Klaus Schmitt, 1997