レトロマイコン86ボードの構想(その5)HEXファイルローダーの製作 [8086]
前回の記事で書いたように8088互換のV20とPICとのインターフェース部の動作確認が出来たので、今回はインテルヘキサファイルのローダーの製作について書いてみます。
インテルヘキサファイルのフォーマットに関してはネット上に色々あります(例えばIntel HEX)ので情報は豊富です。
レコードタイプは
に対応しました。メモリへのダウンロードが目的なのでタイプ3については空読みするようにしています。
★2019/08/12 追記
CP/M-86のASM86独自のレコードタイプ(81H~88H)に下記のソースも含めて対応しました。
HexLoader自体はアセンブリ言語で書き、nasmを使ってアセンブルしています。
アセンブルは下のようなバッチファイルで行い、アセンブルで生成されたたbinファイルを自作のbin2state(バイナリからpicleのステートメントへ変換するツール)で変換し、picleのソースに埋め込んでいます。
nasm -l %1.lst -o %1.bin %1.asm
bin2state <%1.bin >%1.txt
ソースは以下のとおりです。
HexLoaderのアセンブリソース
★2020/10/26 最新版に変更
テスト用のヘキサファイルは手で作るよりは一般的なツールで作った方がいいのでLASMを使いました。LASMはソースが100行以下であれば無料で使えます。
テスト用データ作成のためのLASM用ソース
上のソース内にアセンブルとリンクの方法をコメントで書いていますが、dsegの値を0030Hにしてリンクして生成されたヘキサファイルの内容はこんな感じです。
:020000020030CC
:10000000303132333435363738394142434445464E
:00000001FF
下記がHexLoaderのpicleのリスト表示後、実行し、上のヘキサファイルをTeraTermにコピペした際のログです。
スタートメッセージを表示後、「201」と表示されていますが、これはV20側の処理で受信したヘキサファイルのレコードタイプを出力しているものです(81H~88Hは'a'~'h'で表示)。
HexLoader実行時のログサンプル
★2020/09/02 最新版に変更
ヘキサファイルをダウンロード後のメモリ内容を確認した結果を以下に貼っておきます。
0x0300からのデータがヘキサファイル内容のように「0123・・・DEF」になっていることから正常にダウンロードできたものと判断できます。
ヘキサファイルロード結果の確認
★2019/08/12 追記
CP/M-86のasm86が出力するhexファイルの中にタイプが81H等のインテルヘキサファイルフォーマットに反するレコードがありました。
調べてみたところ、CP/M-86システムガイドの中にasm86だけが使う拡張タイプについて書いてありましたので貼っておきます。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
インテルヘキサファイルのフォーマットに関してはネット上に色々あります(例えばIntel HEX)ので情報は豊富です。
レコードタイプは
- 00 : data record(CP/M-86独自の81H~84Hも含む)
- 01 : end of file
- 02 : segment(CP/M-86独自の85H~88Hも含む)
- 03 : start address
に対応しました。メモリへのダウンロードが目的なのでタイプ3については空読みするようにしています。
★2019/08/12 追記
CP/M-86のASM86独自のレコードタイプ(81H~88H)に下記のソースも含めて対応しました。
HexLoader自体はアセンブリ言語で書き、nasmを使ってアセンブルしています。
アセンブルは下のようなバッチファイルで行い、アセンブルで生成されたたbinファイルを自作のbin2state(バイナリからpicleのステートメントへ変換するツール)で変換し、picleのソースに埋め込んでいます。
nasm -l %1.lst -o %1.bin %1.asm
bin2state <%1.bin >%1.txt
ソースは以下のとおりです。
|
テスト用のヘキサファイルは手で作るよりは一般的なツールで作った方がいいのでLASMを使いました。LASMはソースが100行以下であれば無料で使えます。
|
上のソース内にアセンブルとリンクの方法をコメントで書いていますが、dsegの値を0030Hにしてリンクして生成されたヘキサファイルの内容はこんな感じです。
:020000020030CC
:10000000303132333435363738394142434445464E
:00000001FF
下記がHexLoaderのpicleのリスト表示後、実行し、上のヘキサファイルをTeraTermにコピペした際のログです。
スタートメッセージを表示後、「201」と表示されていますが、これはV20側の処理で受信したヘキサファイルのレコードタイプを出力しているものです(81H~88Hは'a'~'h'で表示)。
|
ヘキサファイルをダウンロード後のメモリ内容を確認した結果を以下に貼っておきます。
0x0300からのデータがヘキサファイル内容のように「0123・・・DEF」になっていることから正常にダウンロードできたものと判断できます。
|
★2019/08/12 追記
CP/M-86のasm86が出力するhexファイルの中にタイプが81H等のインテルヘキサファイルフォーマットに反するレコードがありました。
調べてみたところ、CP/M-86システムガイドの中にasm86だけが使う拡張タイプについて書いてありましたので貼っておきます。
asm86での拡張ヘキサファイルフォーマット |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
ヘキサファイルのレコードタイプについて、CP/M-86のasm86が使う拡張タイプがあることを追記しました。
by skyriver (2019-08-12 15:27)