/x68kzremotedrv

X68000Z Remote Drive service with Raspberry Pi Pico W

Primary LanguageC

x68kzremotedrv - X68000Z Remote Drive service with Raspberry Pi Pico W

概要

X68000Z の ver.1.3.1 エミュレータでサポートされた Pseudo SCSI 機能を用いて、ネットワーク上の Windows PC 内のファイルを SCSI ディスクイメージやリモートドライブとして利用します。

X68000Z にはネットワーク機能がありませんが、無線 LAN を搭載したボードコンピュータ Raspberry Pi Pico W がネットワーク共有されたファイルを USB メモリ上の HDS ファイルに見せかけることで、X68000Z から間接的にネットワーク上のリソースを利用できるようにしています。

  • SCSI ディスクイメージファイル (HDSファイル)
    Windows PC 内にある HDS ファイルを SCSI ディスクイメージとして X68000Z から参照でき、ここから起動することもできます。 既存の X68k エミュレータで使用している HDS ファイルを PC 上に置いたまま利用することができます。
  • リモートドライブ
    Windows PC 内の特定のフォルダ以下のファイルをリモートドライブとして X68000Z から参照できるようにします。 PC 上のファイルを直接 X68000Z から利用できます。HUMAN.SYS や CONFIG.SYS など、起動に必要なファイルがあればリモートドライブからの起動も可能です。

更に、X68000Z の起動時に時刻を Windows PC の時刻に合わせる機能を追加しました。

(従来 x68kzrmthds として公開していたアプリを、リモートドライブ対応に伴い名称を変更しました)

必要なもの

X68000Z 本体に加えて以下が必要です。

  • Raspberry Pi Pico W (以下、ラズパイ Pico W)
    • ラズパイ Pico にはいくつか製品バリエーションがありますが、W が付かないものは無線 LAN 機能を持たないため使用できません
    • Pico W (ヘッダピンなし)、Pico WH (ヘッダピン付き) のどちらでも使用できます
  • USB micro-B ケーブル
    • ラズパイ Pico W を X68000Z に接続したり、ファームウェア書き込みのため PC に接続したりするために必要です

使用方法

  • ラズパイ Pico W のファームウェア書き込み後、設定はすべて X68000Z の画面上で行えるようになりました。 クイックスタートガイド を参照してください。
  • HDS ファイルやリモートドライブの設定によって、SCSI IDは以下のように割り当てられます。
    • リモートドライブからの起動を行わない場合 (RMTBOOT=0)
      • ID 0 : HDS0 に設定した HDS ファイル (起動時の A ドライブになる)
      • ID 1 : HDS1 に設定した HDS ファイル (起動時の B ドライブになる)
      • ... (最大で ID 3 まで使用される)
      • ID 6 : (リモートドライブとの通信用に使用)
      • ID 7 : (本体ID)
    • リモートドライブからの起動を行う場合 (RMTBOOT=1)
      • ID 0 : (リモートドライブの起動用に使用)
        • リモートドライブの台数によって、起動時の A ~ D ドライブまでが割り当てられます
      • ID 1 : HDS0 に設定した HDS ファイル (リモートドライブの最後のドライブ名の次)
      • ID 2 : HDS1 に設定した HDS ファイル (HDS0 のドライブ名の次)
      • ... (最大で ID 4 まで使用される)
      • ID 6 : (リモートドライブとの通信用に使用)
      • ID 7 : (本体ID)

注意と制約事項

  • ネットワーク接続のパスワード情報などはラズパイ Pico W の中に平文で記録されます。接続情報を設定した Pico W の管理にはご注意ください。
    • 設定画面で 設定クリア を選択することで、ラズパイ Pico W 内の設定データをクリアできます。ラズパイ Pico W を別の用途に使用する際などに利用してください。
  • ラズパイ Pico W の USB 機能がフルスピード (12Mbps) までと遅いため、通常の USB メモリからの起動に比べるともっさりします(FD イメージと比べれば十分速いですが…)。
  • リモートドライブには現状、以下の制約事項があります。
    • リモートドライブ上ではファイルアトリビュートの隠しファイルやシステム属性、書き込み禁止属性などは無視されます
    • Human68k の DSKFRE が 2GB 以上のディスクサイズを想定していないため、ドライブの残容量表示は不正確です
    • リモートドライブ上のファイルは作成日時を変更できません。

ビルド方法

ソースコードからのビルドを行う際には、事前に Raspberry Pi Pico SDK のセットアップが必要です。

  1. Pico SDK をセットアップした PC に本リポジトリを clone します。
  2. make を実行すると、追加で必要なリポジトリを clone してビルドを開始します。
  3. ビルドが完了すると生成されるファイル、build/x68kremotedrv.uf2 がラズパイ Pico W へ書き込むファイルとなります。

謝辞

Human68k のリモートドライブの実装は以下を参考にしています。開発者の皆様に感謝します。

リモートドライブ起動機能は、X68k エミュレータ XEiJ のホストファイルシステム機能 (HFS) に大きく触発されて開発されました。 ホストマシンのファイルシステムからの直接起動という素晴らしい機能を実装された Makoto Kamada 氏に感謝します。

Windows ファイル共有のアクセスについては、ライブラリ libsmb2 の存在に大きく助けられました。 当初ラズパイ Zero W を用いて Linux ベースでの開発を検討していましたが、起動速度や消費電力の点で現実的でないことが分かり、ターゲットをラズパイ Pico W に変更して FreeRTOS ベースでの開発に切り替えました。これが可能だったのも libsmb2 の存在あってのことでした。開発者の Ronnie Sahlberg 氏に感謝します。

ライセンス

本プログラムは、オリジナルで開発したソースコードについては MIT ライセンスとします。その他利用されている以下のソフトウェアについてはそれぞれ開発元のライセンス条件に従います。

  • Pico SDK (3-clause BSD)
  • TinyUSB (MIT)
  • lwIP (3-clause BSD)
  • FreeRTOS kernel (MIT)
  • libsmb2 (LGPL-2.1)

本プログラムは LGPL を採用している libsmb2 を静的リンクしているため、ビルド生成物のバイナリ配布の際には LGPL が適用されます。独自の修正を加えてビルドしたバイナリを配布する際にはソースコードの開示が必要となります。