SASIエミュレータのホストプログラム

X68000のSASIコマンドについて、いくつか不明な点はありますが、
実用上必要な機能である読み書きアクセスについてわかりましたので、
PICマイコンとUSB経由で通信して、セクタデータの蓄積、参照をするための
ホストプログラムを開発することにします。

こちらのソフトウェアについては、Visual C++で開発しています。

ホストプログラムの要件

今回のホストプログラムの仕事は、SASIコマンドのうちの08(READ)と0A(WRITE)について解釈し、
仮想的なハードディスクイメージをアクセスして要求されたデータを参照または書き換えることです。

幸いにして、USB経由の通信はCOMポートを開いて(ファイル名は"\\.\COMn")、ReadFile,WriteFileの
APIでバッファを指定するだけで実装できます。

PICからは、定型フォーマットでコマンドが送られてくるようにしてあり、その受信データを解析すれば、
・装置番号および論理ユニット番号
・コマンドの内容
・セクタアドレス(5+8+8bit)
・転送セクタ数
は容易に抽出できます。
アドレスの範囲だけ確認したら、要求セクタ数分の配列データブロック(256バイト)を読み書きすればOKです。

これだけの情報があれば、あとはプログラムにするだけです。

取り扱うデータはせいぜい40Mバイト×16個分のハードディスクイメージですから、
PC側の潤沢なメモリ上に起動時に一括ロードしてしまえば、難しく考えなくても任意に読み書きできます。

PC上のディスクへの書き戻しのタイミングは、データの破損が無いように配慮すべきですが、
管理人のようなホビーユースであれば、ホストプログラム終了時に書き戻す仕様で十分役に立ちます。

結局のところ、何も躓く要素もなく簡単に基本的なホストプログラムは作れてしまいました。
人様に使っていただくなら、設定メニューとか、表示方法とか工夫するのでしょうが、
自分用のプログラムなので、そこらへんは最小限になっています。

動作確認

読み書きアクセスをSASIコントローラらしくきっちり振る舞いさえすれば、
X68000からは何の疑いもなくハードディスクとして扱ってもらえます。

format.xで装置初期化、領域確保はもちろん、システム転送すれば普通に起動できました。

動作速度については、起動についてはフロッピーより遥かに高速でしたが(エミュレータほどではないですが)、
dirコマンドでフォルダを読むときに、ハードディスクの場合、参照するディレクトリ数が多いのか
結果が表示されるまでに若干、もたつく印象があります。

また、通信エラーなど障害があった場合には、X68000本体を再起動し、ホストプログラムとUSB接続を
リセットするしか回復手段がありませんが、まあ、ハードディスクのバックアップもPC側なら一瞬で終わりますし、
それほど重要なファイルを作成するつもりはありませんから、神経質にエラー処理を作ることはしませんでした。

ハードディスクイメージファイル(hdf)

ホストプログラムが扱うハードディスクイメージのファイルは、とても単純です。
256バイトのセクタを、セクタアドレスの0番から順番に、何のヘッダも付けずにベタ書きしただけのものです。

SASIのハードディスクには10MB,20MB,40MBの3種類しかありませんし、実用上、最大値の
40MB(41,496,576バイト=162,096セクタ)だけサポートしていれば十分だと思います。

なお、拡張子は'.hdf'としました。
X68000のエミュレータで作るSASIハードディスクイメージと同じですが、
お察しのとおり、拙作のホストプログラムで保存したディスクイメージは、
エミュレータでそのまま使用することができました。

もちろん、逆も大丈夫です。

エミュレータ環境でwindrv.sysが組み込んであると、実機では起動中にバスエラーになり、
command.xまでたどり着けませんので注意してください。

目標達成!

ここまでできてしまえば、あとは使い方の問題だけです。
X68kエミュレータを使ってハードディスクイメージにreadfd.xなどの実機で使いたいファイルを保存し、
ホストプログラムを準備してからX68000実機を立ち上げれば、当初の目的であったフロッピー抽出作業が
実行できそうです。

その際40MBという制約はありますが、それでもフロッピー30枚ぐらいはXDF化できますので、
仮想HDDに保存してからエミュレータでWindowsドライブに転送という作業なら、苦にならないと思います。

今度実家に帰ったときには、5インチフロッピー入りの段ボール箱を抱えて持って来ることになりそうです。


トップページへ

Copyright©2014 甘亀庵管理人

inserted by FC2 system