科学・技術
Claude × レトロコンピューティング: QIC-117テープドライブのエミュレーション
Claude × retrocomputing: emulating a QIC-117 tape drive (dmitrybrant.com)
要約
この記事では、LLM(Claude)を活用して、86Boxエミュレータ上でQIC-117テープドライブをエミュレートするプロジェクトについて解説しています。開発者は、レトロコンピューティングとエミュレーションへの情熱を組み合わせ、実際のDOSやWindows時代のバックアップソフトウェアが仮想テープイメージにアクセスできるようにしました。QIC-117プロトコルの仕様だけでは不十分だったため、ClaudeにROMの逆アセンブルを依頼し、メーカー固有のコマンドを解明することで、エミュレーションの精度を高めました。これにより、過去のデータ復旧やデジタル保存の可能性が広がります。
全文翻訳
私の次のくだらないLLMの使い道は、エミュレートされたテープドライブを構築することです!要するに、86Boxエミュレータが現在、フロッピーコントローラーまたはパラレルポートに接続されたQIC-117テープドライブをエミュレートし、実際のDOSおよび初期Windows時代のバックアップソフトウェアを使用して仮想テープイメージに「バックアップ」を作成できるようになりました。
私は昔からエミュレータにかなり執着しています。DOS、Windows、Mac System、Amiga OS、さまざまなUnix、その他のよりマイナーなOSのほぼすべてのバージョンを含む起動可能なディスクイメージの広範なコレクションを持っており、アイコンをクリックするだけで実行できる状態になっています。DOSおよび初期Windowsベースのシステムのエミュレーションにおいて、私が最も気に入っているエミュレータの1つが、素晴らしいPCEmエミュレータを進化させた86Boxです。86Boxは、さまざまなチップセットのBIOS ROMを実際に実行し、多数のデバイスや周辺機器を非常に忠実にエミュレートする、非常に「低レベル」なエミュレータです。86Boxは、開発や拡張に対しても驚くほどアクセスしやすいです。
しばらくの間、私の2つの情熱、つまりエミュレーションとテープメディアを組み合わせるという考えが頭の片隅にありました。仮想テープカートリッジを備えたテープドライブをエミュレートし、仮想テープイメージファイルから読み取ることができたら、それは素晴らしいのではないでしょうか。
私が知る限り、現在利用可能なエミュレータでQICテープドライブ(特にQIC-80とその後のQIC-3020などの派生型)をエミュレートできるものはありません。私は定期的にQICテープからのデータ復旧を扱っています。そして、デジタル保存を気にかける者として、テープの完全なバイナリイメージを取得するように常に注意しています。これにより、元のバックアップソフトウェアが書き込んだとおりに、別のテープにイメージを再現することが可能になるかもしれません。(余談ですが、テープの真に「適切な」保存とは、高レベルのバイナリバイトではなく、実際のフラックス遷移を保存することですが、それは将来の記事のテーマです。)したがって、バイナリテープイメージを手元に置けば、エミュレータで実行されている元のバックアップソフトウェアが、実際のテープドライブと通信していると信じることで、これらのテープを読み取れるようにすることで、「ループを閉じる」ことができれば素晴らしいでしょう。
幸いなことに、私たちは、ある人のバックログがAIエージェントの最優先事項になる時代に生きています。
これらのQICテープドライブ(Colorado 250、Travanなど)は、QIC-117と呼ばれる特別なプロトコルを使用してフロッピーコントローラーと通信します。このプロトコルの完全な仕様は、ウェブ上で容易に入手できます。したがって、必要なのは、エミュレートされたドライブがQIC-117仕様全体を実装することだけで、すべてうまくいくはずだと考えるでしょう。
残念ながら、そうではありません。標準のQIC-117機能に加えて、仕様ではメーカー固有の「診断」コマンドが許可されており、これらは基本的にメーカーが望む任意の動作に対して仕様を開放します。そして実際、メーカーはこれらの診断コマンドを、ホストドライバーが接続されているドライブの種類を判断しようとする検出フェーズで、惜しみなく使用しています。
ベアボーンのQIC-117仕様を実装しただけでは(Claude Opus 5が3〜4回のプロンプトで完了しました)、MS-DOS用のバックアップユーティリティのうち、HP Colorado Backup 7(QBACKUP)だけが、ドライブを検出して読み取ることに同意しました。これは実際に私が最初に試したユーティリティであり、当初は希望を与えてくれましたが、その後、さまざまなユーティリティがこれらのドライブを検出するために非常に異なる方法を採用しており、QBACKUPはメーカー固有のトリックを最も少なく採用していたことに気づきました。
例えば、Microsoft Backup for Windows 95のようなツールを使おうとすると、ドライブを診断モードにし、メーカー固有のコマンドを発行しようとすることがわかりました。Coloradoドライブをエミュレートしていたため(QIC-117仕様では、ドライブは既知のベンダーの事前定義されたリストから「ベンダーコード」を返す必要があります)、MS Backupは明らかにドライブに対してColorado固有の、どこにも文書化されていないことを行おうとしていました。
診断機能が何をするのかを明らかにするには、2つの方法があります。実際のColoradoドライブを接続し、実際のフロッピーコントローラーを流れるトラフィックを監視しようとするか…あるいは、ドライブからROMチップをはんだ付けし、ROMの逆アセンブルを実行し、ドライブがサポートするすべてのコマンド、すべての診断ビットを含む完全な理解を得ることができます!
ROMのダンプとPCボードの写真以上のものは何も持たずに、私はClaudeに「これで何ができるか見て」と言いました。すると、Claudeは忠実にROMを逆アセンブルし、ドライブがサポートするカスタムコマンドと、特定の標準コマンドに対してドライブが仕様からどのように逸脱するかを正確に示しました。
ColoradoドライブのROM逆アセンブルの結果、および私のコレクションにある他のいくつかの関連ドライブの分析をまとめたリポジトリをご覧ください。リポジトリには、これらの非常に興味深い情報がすべて含まれています。
- ドライブがサポートするすべてのコマンドの詳細な内訳を含むFINDINGS.mdドキュメント。以前は読み取り不可能と考えられていたテープの読み取りを可能にする将来の作業の非常に興味深い可能性、およびカスタムコントローラー(Greaseweazleなど)をドライブ制御と真に適切なデジタル保存のための生フラックス遷移の読み取りを可能にする可能性が含まれています。
- ドライブを制御するメインICであるIntel 8051プロセッサ用の逆アセンブラ(Pythonで記述)。数個の他のドライブで使用されているZilog Z8プロセッサ用の逆アセンブラもあります。これらの逆アセンブラは両方とも、LLMがその作業の容易な前提条件として作成したものです。
これにより、86Boxで利用可能になったエミュレートされたQIC-117ドライブを完成させるために必要なすべての欠けていたピースが埋まりました。
その後、完全性のために、これらのドライブのパラレルポートバージョン(LPTポートとEPP)のサポートも実装しました。これはIomega Dittoドライブをエミュレートします。このドライブは実際には内部的にはQIC-117ドライブですが、MicroSolutionsによって開発されたBackpackと呼ばれるプロトコルを使用してパラレルポート経由で通信できる追加チップが含まれています。特にIomega Ditto 2GBドライブは、QICカートリッジの読み取りによく使用するドライブの1つです。これは、Dittoの第一世代カートリッジだけでなく、Travan、QIC-3020、さらにはQIC-2080のような他の小容量テープも読み取ることができる優れた後方互換性を持っています。これらすべてが、パラレルポート上のエミュレートされたDittoドライブを構成する際に、86Boxでエミュレートされたカートリッジとしてサポートされるようになりました。
1つの小さな注意点として、Dittoカートリッジは常にプリフォーマットされており、エンドユーザーが完全に空のテープイメージをフォーマットする方法はありません。そのため、フォーマット済みのテープイメージのリポジトリを作成し、自分でダウンロードして使用できるようにしました。リポジトリには、希望する容量とカスタムラベルを持つテープイメージを生成できるPythonスクリプトも含まれています。
楽しんでください!