PS1のゲームをUbuntuでバックアップする方法です。
※自分が調べた結果を残しておきます。
【免責事項とご注意】
- 本記事は、所有するゲームソフトの経年劣化対策(保存)を目的とした技術的な解説記事です。
- 記載内容は、ご自身が所有しているゲームソフトのバックアップを、私的使用の範囲内で行うことを前提としています。
- バックアップした後、元のソフトを売却したり譲渡したりした場合、手元のバックアップデータは削除しなければなりません(所有権がなくなるため)。
- 違法にアップロードされたデータをダウンロードすることや、作成したバックアップデータを他者に譲渡・配布することは法律で固く禁じられています。
- コピープロテクト(技術的保護手段)を回避・解除しての複製は、著作権法により規制されています。
- 本記事の内容を実行した結果、発生したいかなるトラブルや損害についても、著者は一切の責任を負いません。自己責任において行ってください。
バックアップ手順
「cdrdao」を使用することで、Ubuntu上でPS1のゲームディスク(CD-ROM)からデータを吸い出し、バックアップを作成することができます。
cdrdaoインストール
「cdrdao」がインストールされていない場合は、aptコマンドを使用してインストールしてください。
$ sudo apt update $ sudo apt install cdrdao
バックアップの方法
以下のコマンドを実行することで、PS1のCD-ROMからゲームのデータを吸い出してバックアップできます。
cdrdao read-cd --device デバイス名 --driver generic-mmc:0x20000 --speed 4 --paranoia-mode 3 -v 2 --read-raw --datafile "ゲーム名.bin" "ゲーム名.toc" && eject
吸い出しが完了すると、以下の2つのファイルが作成されます。
- ゲーム本体:ゲーム名.bin
- CDのトラック構成情報:ゲーム名.toc
実行例
実際の実行例です。(ゲームの名前を、例としてACとしています)
$ cdrdao read-cd --device /dev/cdrom --driver generic-mmc:0x20000 --speed 4 --paranoia-mode 3 -v 2 --read-raw --datafile "AC.bin" "AC.toc" && eject Cdrdao version 1.2.4 - (C) Andreas MuellerWARNING: SCSI device is currently in use. Only read commands are supported. /dev/cdrom: Optiarc DVD RW AD-7740H Rev: 1.V0 Using driver: Generic SCSI-3/MMC - Version 2.0 (options 0x20000) Reading toc and track data... Track Mode Flags Start Length ------------------------------------------------------------ 1 DATA 4 00:00:00( 0) 51:29:46(231721) Leadout DATA 4 51:29:46(231721) PQ sub-channel reading (data track) is supported, data format is BCD. Raw P-W sub-channel reading (data track) is supported. Cooked R-W sub-channel reading (data track) is supported. Copying data track 1 (MODE2_RAW): start 00:00:00, length 51:29:46 to "AC.bin"... Reading of toc and track data finished successfully.
「AC.bin」と「AC.toc」2つのファイルが作成されました。
$ ls AC.bin AC.toc
コマンドとオプションの解説
コマンド内で指定している各オプションの意味を解説します。
read-cd
CDのデータを読み込み、イメージファイルを作成するメインコマンドです。
--device デバイス名
使用するCD/DVDドライブを指定します。
※Ubuntuでは通常「/dev/sr0」や「/dev/cdrom」が割り当てられます。
--driver generic-mmc:0x20000
ドライブを制御するドライバーに「generic-mmc:0x20000」を指定します。
データ部分と音楽部分が別れているMiexd Modeのゲームの場合、Track 1(データ)から Track 2(音楽)に切り替わる「Pre-gap(プリギャップ)」という部分があります。
「generic-mmc:0x20000」を使うと、ドライブがこの境目を正しく認識しながらデータを送ってくれるため、「曲の頭出しがおかしい」「前の曲が少し混じる」といった事が減ります。
コピーガード(LibCrypt)が含まれている「サブチャンネルデータ(Sub-channel data)」についても、バックアップを行ってくれます。
※以前の記事では「generic-mmc-raw」ドライバを使用していましたが、「generic-mmc:0x20000」ドライバーを使用したほうがより正確にデータを読み込めることがわかったので変更しました。
※一部のドライブでは「generic-mmc:0x20000」に対応していなことがあるので、その場合は「generic-mmc-raw」ドライバを使用してみてください。
--speed 4
読み込みスピードの速度を「4倍速」に制限します。
古いゲームディスクは経年劣化していることも多いため、読み込み速度を落とすことで物理的な読み取り精度を向上させ、エラーを防ぐ効果があります。
※低速(4倍速〜8倍速程度)での読み込みが推奨されています。
--paranoia-mode 3
音声トラック(CD-DA)の読み取り補正モードを最大(レベル3)にします。
PS1のゲームには、BGMがCD-DA(音楽CDと同じ形式)で収録されているものが多くあります。
ディスクに傷があるとノイズ(音飛び)が発生しやすいため、このオプションで強力に補正を行い、正確な音質で吸い出します。
このオプションは「cdparanoia」という技術を使い、読み取りミスをリトライ・補正して、完璧な音質で吸い出す手助けをしてくれます。
-v 2
実行中の表示レベル(Verbosity)を「2」にします。
このオプションを指定すると、進行状況や詳細なステータスが画面に表示されるため、処理が止まっていないか確認するのに役立ちます。
--read-raw
ディスクのセクタデータ(2352バイト)を生(Raw)の状態で読み込みます。
PS1のディスク形式(Mode 2)を正しく保存するために必須のオプションです。
一部のコピープロテクト情報の保持にも役立ちます。
--datafile "ゲーム名.bin"
実際のゲームデータ(バイナリ)を保存するファイル名を指定します。
ゲーム名.toc
CDのトラック構成情報(TOC: Table of Contents)を保存するファイル名を指定します。
&& eject
吸い出しが正常に完了した場合のみ、ディスクトレイを開きます。
「cdrdao」コマンドのオプションではなくシェルの機能ですが、完了の合図として便利です。
自動的にディスクトレイを開きたくない場合は、この部分を削除してください。
tocをcueに変換する方法
toc形式ではなく、cue形式が必要な場合は「toc2cue」コマンドを使用すると、「.toc」から「.cue」に変換できます。
toc2cue "ゲーム名.toc" "ゲーム名.cue"
実際の実行例です。
$ toc2cue AC.toc AC.cue toc2cue version 1.2.4 - (C) Andreas MuellerConverted toc-file 'AC.toc' to cue file 'AC.cue'. Please note that the resulting cue file is only valid if the toc-file was created with cdrdao using the commands 'read-toc' or 'read-cd'. For manually created or edited toc-files the cue file may not be correct. This program just checks for the most obvious toc-file features that cannot be converted to a cue file. Furthermore, if the toc-file contains audio tracks the byte order of the image file will be wrong which results in static noise when the resulting cue file is used for recording (even with cdrdao itself).
「AC.cue」が作成されました。
$ ls AC.bin AC.cue AC.toc
作成されたcueファイルの中身です。
$ cat AC.cue
FILE "AC.bin" BINARY
TRACK 01 MODE2/2352
INDEX 01 00:00:00
作成後に .cue ファイルをテキストエディタで開き、「TRACK 1」の部分が「MODE2/2352」になっているか確認してください。
自分の環境では1度もこの現象に遭遇したことは無いのですが、もし「MODE1/2048」になっているとゲームが起動しないので、その場合は手動で「MODE2/2352」に書き換えてください。(古いドライブ等の環境で起きることがあるらしいです。)
※toc2cueコマンドは、cdrdaoをインストールすると一緒にインストールされます。
おまけ:バックアップ用シェルスクリプト
バックアップする枚数が多い場合、毎回長いコマンドを入力するのは大変です。
以下のようなシェルスクリプト(例: ps1_backup.sh)を作成しておくと、コマンド一発で処理できて便利です。
#!/bin/bash
# 使用法: ./ps1_backup.sh デバイス名 "ゲームタイトル"
# $1 = デバイス名
# $2 = ゲーム名
DEVICE="$1"
GAME_NAME="$2"
DRIVER="generic-mmc:0x20000"
# 引数が2つ揃っているかチェック
if [ -z "${DEVICE}" ] || [ -z "${GAME_NAME}" ]; then
echo "エラー: 引数が足りません。"
echo "使い方: $0 デバイス名 ゲーム名"
echo " 例: $0 /dev/cdrom \"gamename\""
exit 1
fi
# cdrdaoがインストールされているかチェック
if ! command -v cdrdao &> /dev/null; then
echo "エラー: cdrdao がインストールされていません。"
exit 1
fi
echo "デバイス [ ${DEVICE} ] から [ ${GAME_NAME} ] を吸い出します..."
# データバックアップ
# 成功したらトレイを開く
cdrdao read-cd \
--device "${DEVICE}" \
--driver "${DRIVER}" \
--speed 4 \
--paranoia-mode 3 \
-v 2 \
--read-raw \
--datafile "${GAME_NAME}.bin" "${GAME_NAME}.toc"
# cdrdaoの終了コードを確認(成功時のみ次へ進む)
if [ $? -eq 0 ]; then
echo "吸い出し成功。トレイを開きます。"
eject "${DEVICE}"
else
echo "エラー: 吸い出しに失敗しました。"
exit 1
fi
# tocをcueに変換
if [ -f "${GAME_NAME}.toc" ]; then
echo "cueファイルへの変換を行います..."
toc2cue "${GAME_NAME}.toc" "${GAME_NAME}.cue"
echo "完了しました。"
# PS1用にMODE設定を自動修正する(MODE1になっていたらMODE2に置換)
if grep -q "MODE1/2048" "${GAME_NAME}.cue"; then
echo "修正: CUEシートの MODE1 を MODE2 に書き換えます..."
sed -i 's/MODE1\/2048/MODE2\/2352/g' "${GAME_NAME}.cue"
fi
fi
作成したシェルスクリプトには、実行権限を与えてください。
$ chmod +x ps1_backup.sh
使用する場合は、以下のように第1引数に使用するデバイス名、第2引数にゲームの名前を指定してください。
$ ./ps1_backup.sh /dev/cdrom "ゲーム名"
これで、PS1のCD-ROMをバックアップと、「.toc」ファイルから「.cue」ファイルを自動的に作成してくれます。



コメント