インテルヘキサ(機械語)を転送しよう

インテルヘキサとは

先にポケコンのBASICプログラムは内部的には「中間コード」で扱われており、パソコンとの間で送受信するためには「テキスト形式」に変換する必要があることを説明しました。

機械語プログラムも同じで、パソコンとの間で送受信するためには0と1の機械語プログラムを、テキスト形式にしなければなりません。

機械語プログラムをテキスト形式に変換する方法の一つが「インテルヘキサ」です。
インテルヘキサ形式の拡張子は.ihxで、ポケコンの機械語プログラムもこの形式で配布されていることが多いようです。

ポケコンの機械語モニタの特性

ポケコンには機械語プログラムをインテルヘキサ形式で送受信する機能が装備されています。
機械語モニタのRコマンドとWコマンドがそれですが、単純にRコマンドでインテルヘキサを受信しようとしてもエラーになってしまいます。

MACHINE LANGUAGE MONITOR *USER 0FEB FREE:0100-0FEB *R I/O DEVICE ERROR

これは、ポケコンがインテルヘキサを1行受信するごとに変換処理をしており、この間に送られてきたデータを取りこぼすために発生します。
フロー制御を用いても取りこぼすので少々厄介です。

この問題を回避するためには、ポケコンが変換処理をしている間、データの送信を待ってやる必要があります。
1行送るごとに少し待てばいいのですが、そのような処理ができるターミナルソフト「Tera Term」を使った方法を紹介します。

Tera Termのダウンロード

Tera TermはSourceForgeやVectorなどでダウンロードできます。

Tera Termプロジェクト日本語トップページ - SourceForge.JP
上のリンクからダウンロードする場合はzipファイルではなくexeファイルをダウンロードして下さい。インストーラ形式のため簡単にインストールできます。

TeraTermの設定

インストールが終了したら、さっそく立ち上げてみましょう。
まず「新しい接続」ダイアログが表示されるはずです。

「シリアル」を選択し、ポートはポケコンを接続しているポートを選択します。

英語表記の場合は、日本語に変更しましょう。
メニューバーの Setup > General... から、Lungage UI:を「Japanese.lng」にしてOKを押します。

ターミナルの設定

メニューバーの 設定(S) > 端末(T)... から

シリアルポートの設定

メニューバーの 設定(S) > シリアルポート(E)... から

このサイトで紹介している「簡易型レベルダウンコンバータ」「改良型USBシリアルコンバータ」を使用する場合は、フロー制御を「hardware」にして下さい。

ここまで設定が終わったら、現在の設定内容をデフォルトにするため、メニューバーの 設定(S) > 設定の保存(S)... を選び、名前を変更せずに保存します。

ポケコン側の準備

機械語プログラムを受信するためには、当然ポケコンに機械語ユーザ領域を確保する必要があります。
配布されているプログラムを受信する場合は、必要な容量が明示されているはずですから、機械語モニタでユーザ領域を確保します。

機械語モニタはRUNモードで「MON」です。

MACHINE LANGUAGE MONITOR *USER 0FEB FREE:0100-0FEB

読み込みはRコマンドです。

*R

Tera Termからの送信

ポケコン側の読み込み準備ができたら、インテルヘキサを送信します。

メニューバーの ファイル(F) >: ファイル送信(S)... から、送信するインテルヘキサファイルを指定して「開く」を押すと、送信が開始されます。

送信が完了すると、ポケコン側に表示されます。

*R INFO:0100-0FEB

ここでポケコンに I/O DEVICE ERROR が表示される場合は、シリアルポートの設定の送信遅延を増やします。

エラーは表示されないのにポケコン側に INFO: が表示されない場合は、パソコンで CTRL + Z を押します。