特集

Raspberry PiがレトロPCの光学ドライブに早変わり!USBODE導入ガイド

 レトロPCを実機で維持し続ける者にとって、避けては通れない「最後の壁」がある。

 それは光学ドライブやメディアの寿命だ。数十年が経過したドライブは、トレイが開かなくなり、ピックアップレンズは曇り、読み込みエラーを連発する。かといって、今の時代にデッドストックのATAPI(IDE)ドライブを探し回るのも現実的ではない。

 メディアに関しても同様で、50枚入りスピンドルのCD-RやDVD-Rを買い、毎日のように書き込んでいた青春時代の記録も、今では読めなくなっているかもしれない。もちろん、プレスされたCD/DVDもプレス品質や保存状態によっては注意が必要だ。そのようなこともあり、筆者は光学メディアについてはイメージ化した上でHDDにバックアップを保存している。HDD自体も寿命はあるが、筆者の場合2つの拠点でデータを同期させつつ、5年程度で新しいHDDに交換している。

筆者が直近押し入れから発掘してイメージ化したWindows Me
現在筆者が使用しているHDD(Seagate Exos X16 14TB リファービッシュ)。モデルは新しくなるがデータは秘伝のタレのように受け継がれていく。

 ここまでは良いが、問題はHDD上にあるCDやDVDのイメージをどうやって使うかという点だ。

 OS上で動く仮想ドライブソフトは便利だが、レトロPCの貴重なリソースを消費してしまう上に、OSインストール時には使えないという弱点もある。

 「物理ドライブの挙動を、ハードウェアレベルで再現したい」

 そんな要求を叶える製品として、過去にバッファローから発売されていたポータブルHDDの「HD-PSGU2シリーズ」があった。この製品はCD/DVDの仮想化ソフトが内蔵されており、筆者自身もOSインストール時に重宝していたものだ。しかし、イメージの切り替えにはPC上でHDD内に格納されたアプリを立ち上げる必要があった。そもそも、いまさら2008年の製品を引っ張り出しても、入手性の面から見て現実的ではない。

 そんなワガママな望みを叶えるのが、今回紹介する「USBODE」だ。Raspberry Piを「USB接続のCD/DVDドライブ」として認識させるプロジェクトとなる。

「汎用PC」を「専用ハードウェア」に変える“ベアメタル”

 特筆すべきは、Raspberry Pi OS(Linux)を介さず、ハードウェアを直接制御するベアメタル環境「Circle」を採用している点にある。電源を入れれば10秒以内にマウントが完了するそのレスポンスは、もはや周辺機器そのものだ。

 Circleはいわゆる「OS」ではない。Raspberry Piのハードウェア(CPU、メモリ、USBコントローラ、GPIOなど)をC++から直接叩くための、ベアメタル(Bare Metal)プログラミング用フレームワークだ。決して硬そうな熊ではない。

 通常、アプリがハードウェアを操作するには、Linuxカーネルという巨大な仲介者を通す必要がある。これは便利だが、裏側で動くさまざまなプロセスが予期せぬ遅延(ジッター)を生んだり、起動に時間を要したりする原因にもなる。対して、Circleの上で動くUSBODEは、CPUを100%自分たちのためだけに使い切る。この「OS抜き」という選択が、周辺機器として動作させる際の強みとなる。

USBODEではブートタイムに貢献

 USBODEの旧バージョンではCircleを採用していない時代があったが、当時は起動に45秒~1分程度時間がかかっていた。そのため、OSのインストールなど、PCの電源を入れてからUSBドライブをすぐに使用したい場合には不便だった。現在のCircleで再構築されたUSBODEでは認識までわずか10秒以内となり、より「周辺機器らしい」動作に近づいた。

必要な機器を準備する

 動作させるための機器を準備しよう。基本的には、デバイス側として機能するUSB OTG(On-The-Go)に対応したRaspberry Pi本体と、データを格納するmicroSDカード、そしてUSBケーブルさえあれば問題ない。オプションとしてRaspberry Pi用OLEDディスプレイがあるが、これは「あれば便利だが必須ではない」。

Raspberry Pi Zero WH

 USBODEでサポートされているRaspberry Piは以下の通り

  • Raspberry Pi Zero
  • Raspberry Pi Zero W/WH
  • Raspberry Pi Zero2 W/WH
  • Raspberry Pi 3 Model A+
  • Raspberry Pi 4B

 その中から今回はRaspberry Pi Zero WHを使用することにした。USBODEには32bit版と64bit版があり、今回使用するRaspberry Pi Zero WHは32bitしか対応していない関係上、32bit版を使用する。

 なお、USBODEのプロジェクトとしては現状32bit版の方がテストされているとのことだ。もしこれからUSBODEのためにRaspberry Piを購入しようと考えているのであれば、32bit、64bitどちらにも対応しているRaspberry Pi Zero 2 WHがベストだろう。

 ピンヘッダーが付いていないRaspberry Pi Zero WやRaspberry Pi Zero 2 Wはダメなのか?といえばそういうわけではない。オプションとなるRaspberry Pi用OLEDディスプレイを接続する場合には必要になるが、使用しない場合は不要だ。万が一必要になったとしても、後からGPIOピンヘッダーをはんだ付けすれば問題ない。

今回は筆者が少なくとも昨年末ではないクリスマスに購入したGoogleのAIスピーカーキット(未開封)に同梱されているRaspberry Pi Zero WHを使うことにした。

microSDカード

 microSDカードについては、光学メディアのイメージが入れば基本的に何でもいいのだが、今回は秋葉原にて500円台で販売されていた64GBのmicroSD XCカードを使用する。

Micro USBケーブル

 ごく一般的なUSB 2.0をサポートしたMicro USB to USB Type-Aのデータ転送対応ケーブル。充電専用ケーブルはNGだ。

Pirate Audio Line-out for Raspberry Pi (PIM483) ※オプション

 Pimoroni製のDACとボタン、OLEDがセットになった拡張ボード「Pirate Audio Line-out for Raspberry Pi (PIM483)」を使用する。こちらは今回オプション扱いになるが、本体を直接操作することで、CD/DVDイメージの切り替えや設定変更ができるようになる。逆に、Wi-Fiを使ってスマートフォンなどのWebブラウザ上から操作できればOK、という場合は不要だ。

 独自の機能として、ラインアウトからサウンドカードへ接続するケーブルを自作すればアナログ再生も可能になるが、活躍の場としては主にWindows 95よりも前の環境になるだろう。Windows 98以降はデジタル再生が主流になってきたからだ。

 USBODEはあくまでもUSB外付けCD/DVDドライブとして振る舞うが、USBASPIドライバを使うことで、DOSやWindows 3.1といった環境でもハードウェアとしてUSBポートを搭載していれば使用することができるという。こういったUSBが主流になる以前のOSを使う場合、本機のラインアウトから再生されるアナログ出力は重宝するはずだ。

 また、執筆時点でPirate Audio Line-out for Raspberry Pi (PIM483)は日本では取り扱いが終了しつつあるようで、入手性はあまり良くない。代替品としてはWaveshare製のRaspberry Pi用 1.3インチOLED HATも使用可能だ。ただしこちらはconfig.txtの設定変更が必要なことに加え、機能としてラインアウトがなかったり、モノクロ表示になったりと違いがあるため注意しよう。

秋葉原の店頭でも販売していることは確認した

実際に組み立て、インストールをする

 まずはイメージをmicroSDカードに書き込み、Raspberry Piに入れて起動する。

イメージのダウンロード

 USBODEのGitHubのページにアクセスする

 ページ右側のReleasesの下に表示されているリンクが現在の最新版だ。そこに、拡張子がxzのファイルが2つある。ファイル名に64bitと記載があれば64bit版のイメージ、記載がなければ32bit版のイメージとなる。執筆時点の最新版となるUSBODE v2.20.3 RC6.3では、以下の2つのファイルのどちらかをダウンロードすることになる。

  • usbode-2.20.3-910-main-2b2e549-64bit.img.xz
  • usbode-2.20.3-910-main-2b2e549.img.xz

Raspberry Pi Imagerで書き込む

 イメージが準備できたら、用意したmicroSDカードに書き込んでいく。

 まずはRaspberry Pi Imagerをインストールする。

Raspberry Pi Imagerのダウンロード先

 Raspberry Pi Imagerを起動し、使用するRaspberry Piのモデルを選択する。

筆者の場合はRaspberry Pi Zeroを選択した

 OS選択画面では一番下の「カスタムイメージを使う」を選択。

Raspberry Pi Imagerを起動していきなりOSをクリックしても問題ない

 するとイメージを選ぶ画面になるため、ここで先ほどダウンロードしたUSBODEの拡張子xzファイルを指定する。イメージの容量が表示され、次へボタンが押せるようになるので、次へをクリックする。

 カードリーダを選択する画面になるため、ここでmicroSDカードを挿入したドライブを選択し、次へをクリックする。

筆者のように常に数本USBフラッシュメモリを取り付けているような環境では、しっかりとドライブレターを確認してから次へをクリックしたい

 これまで選択してきた項目が表示されるため再チェックを行ない、「WRITE」をクリックする。

 最後の確認画面となる。問題なければカウントダウン後に「I UNDERSTAND,ERASE AND WRITE」をクリックする。

 書き込みが完了したら自動的にアンマウントされるため、microSDカードを取り外す。

Wi-Fiの設定をする(オプション)

 Pirate Audio Line-out for Raspberry Pi (PIM483)のようなボタンとディスプレイを搭載した拡張ボードを「使用しない」場合や、FTPを使ったファイル転送を使用する場合は設定が必要だ。

 先ほどイメージを書き込んだmicroSDカードを再度カードリーダーに挿入し、wpa_supplicant.confをテキストエディタで開く。

USBODEはbootfsとIMGSTOREの2パーティション構成だが、カードリーダによってはどちらかしか認識しないこともあるため注意が必要だ

 テキストエディタで以下の変更を行なう。

  • countryの項目をGBからJPに変更
  • ssidの項目をMySSIDから自身のWi-FiアクセスポイントのSSID(2.4GHz)に変更
  • pskの項目をWirelessPasswordから自身のWi-Fiアクセスポイントのパスワードに変更

 今回はWPA2をサポートしているアクセスポイントのため、それ以外の項目はそのままにしてある。

デフォルト設定
このように、自身のWi-Fiアクセスポイントの設定に変更して上書き保存する

 筆者はアクセスポイントとしてバッファローの「WXR-11000XE12」をEasyMesh環境で使用しているが、USBODEがWi-Fiアクセスポイントに接続した後、フリーズしてしまう現象に遭遇した。USBODEのログではCircleのドライバ側がパニック状態になっており、フリーズしている。

[../src/drivers/driver_circle.cpp(344)] PANIC: assertion failed: params->freqs == 0

 力業だが、今回は応急処置として別のアクセスポイントの「GL.iNet GL-SFT1200」を準備してつながるようにした。

ハードウェアの組み立てとセットアップ

  • Raspberry Pi ZeroにmicroSDカードを入れる。
  • Pirate Audio Line-out for Raspberry Pi (PIM483)をGPIOピンに取り付ける。

 ただ取り付けるだけでは安定しないため、可能であればRaspberry Pi向けに販売されているスペーサーをGPIOピンの反対側に取り付けたい。今回はAIスピーカーキットに入っていたスペーサーをせっかくなので流用した。多少ピンが浮く形にはなったが、認識はした。

 最後に、データ通信対応のMicro USBケーブルをRaspberry Pi ZeroのUSB(PWR INではない)に接続し、反対側をPCに接続すれば初回セットアップが開始される。セットアップには1分ほど時間が必要なため、PCに認識されるまで待つ。

組み立てた後はこのようになる

 USBODEはセットアップが完了するとサンプルファイルも生成されるため、ここで簡単な操作方法を覚えておく。

Pirate Audio Line-out for Raspberry Pi (PIM483)を使用する場合

 ディスプレイの一番下のナビゲーションを見れば把握できるが、具体的には以下の通り。

  • Aボタン(左上)、Bボタン(左下)で上下移動
  • Xボタン(右上)で設定ページ、キャンセル
  • Yボタン(右下)でビルドインフォ表示、決定

といった割り当てとなっている。

セットアップが完了したらサンプルのimage.isoが読み込まれる
Aボタン、Bボタンでイメージを切り替え、Yボタンで決定、すぐにディスクが入れ替わる。

Webインターフェイス経由の場合

 Raspberry Piにディスプレイを取り付けない場合は、ルーターの管理画面などでUSBODEが割り当てられているIPアドレスを探すか、アドレスに「http://usbode/」と入力する。Webインターフェイスでも、Pirate Audio Line-out for Raspberry Pi (PIM483)を使用した場合と比較して基本的にできる操作は同じだ。もちろん、スマートフォンやPCからアクセスする必要がある点は手間とも言えるだろう。

Webインターフェイス画面。ログイン画面は無いため、同じネットワーク内で他の人に見られたらマズいものがある場合は注意が必要だ

CD/DVDイメージを転送する

 セットアップが完了し、サンプルのイメージも読み込めたのであれば準備は完了だ。あとは使用したいイメージファイルをmicroSDカードに転送する。

 USBODEでサポートされている形式は執筆時点でISO、BIN+CUE、MDF+MDS、CHDの4つだ。サンプルのimage.isoはフォールバック用として必要になるため上書きはOKだが、削除はしないようにしよう。

 転送するときに注意したい点として「ファイル名は半角英数字のみ認識する」という点だ。たとえば日本語が含まれていた場合はUSBODE上から見えなくなってしまう。また、DVDイメージの場合は末尾を「ファイル名.dvd.iso」のように変更する。

フォルダーに対応しているため整理しやすい

カードリーダで転送する

 Raspberry PiからmicroSDカードを取り外し、PCのカードリーダに接続してCD/DVDイメージを転送するシンプルな方法だ。セットアップのところでも書いたが、カードリーダによってはマルチパーティションがうまく表示できないものもあるため、ドライブが1つしか認識しない場合は別のカードリーダで試してみよう。

2つ認識されるドライブのうち「IMGSTORE」へイメージファイルをコピーする

FTPで転送する

 Raspberry PiからmicroSDカードを取り外すのが面倒な場合は、FTPクライアントから転送することも可能だ。FTPで必要な設定はIPアドレスだけで、あとは匿名(anonymous)でアクセスが可能。Pirate Audio Line-out for Raspberry Pi (PIM483)などディスプレイがある場合は表示されているIPアドレスを入力する。

 ディスプレイがない場合はルーターの管理画面などでUSBODEが割り当てられているIPアドレスを探すか、ホスト名に「usbode」と入力する。

WinSCPを使いRaspberry Pi Zero上のmicroSDへアクセスしている
転送速度は1MB/s台となるため、正直カードリーダで転送した方が速い

実際に使ってみる

 さて、実際に試してみよう。レトロPC環境といっても筆者の家ですぐに動作できそうなものはなかったため、PC Watchでは3年ぶりの登場となるフェニックス1号を使用する。なお、この検証では電力的に少し心配だったため、USBとPWR INどちらも接続しているが、公式ではPWR INの使用は推奨されていない。

 スペックは以下の通りだ

フェニックス1号

CPU:AthlonXP 1400+(25w版)

M/B:A7V266

MEM:512MB

HDD:60GB

VGA:自慰Force2MX400

SOUND:SB Live!

 OSはWindows XP SP3を使用している(インターネット未接続)

筆者は物持ちがとても良いこともあり、3年間ずっと放置していたことは内緒だ

 今回はFF8ことファイナルファンタジーVIIIのWindows移植版(2000年に発売されたWin95/98向けバージョン)をインストールしてプレイしてみる。

当初はFF8_インストール.isoという名前でコピーしていたが、日本語未対応ということに気がつき英語にリネームした。

 USBODEでインストールディスクをマウントして、まずはフェニックス1号にFF8をインストールしていく。

懐かしさを感じるセットアップ画面
無事ゲームが起動した

 USBODEでディスク1に切り替え、ゲームを進めていく。

 FF8といえば、序盤であの名台詞「だったら壁にでも話してろよ」が有名だが、現代社会に生きる筆者のメンタルでそのシーンは3日くらい寝込んでしまいそうなので、そこまでは行かず検証に専念することにした。べ、べ、別に……チャッピー…………いるし?

ガンブレードのトリガー操作、最近はいろいろ親切なゲームをプレイしすぎたせいかタイミングを合わせることが難しい……
ディスク2をマウントしてロードした場合の画面。USBODE上でイメージを切り替えればゲームは再開する
認識しない場合は?

 USBODEはレトロPC向けに開発されていることもあり、最新のOSの場合うまく認識しない場合がある。

 筆者の場合、Windows 11のRyzen 5 9600XやRyzen 7 7700といった環境ではHigh Speed(USB 2.0)モードで認識できなかった。設定からFull Speed(USB 1.1)モードに変更することで認識できるようになるが当然速度は低下する。

 一方でIntelの場合は同じWindows 11でも13世代のCore i7-1370Pを搭載したLIFEBOOK Uではどちらの速度も問題なく動作したことから、それなりに相性はあるように思える。

レトロPCの環境構築が便利になる

 USBODEは、Raspberry Piを仮想CD/DVDドライブとして使用できるところを紹介してきたが、特にインターネットに接続していないようなレトロPC環境向けとして、OSのインストールからゲーム中に必要なディスクのマウントまでこれ1つでカバーできるところが魅力的に感じた。レトロPC側の環境にはトラブルの元となる余計なソフトは極力インストールせずシンプルにしたいところだが、USBODEではディスクの切り替え機能をデバイス側で持っているためありがたい。

 現状、用途が若干特殊なこともあり、すべての読者におすすめできるわけではないが、いざ必要になったとき「そういえばRaspberry Piを仮想CD/DVDにするヤツあったな……」と思い出してもらえるとうれしい限りだ。