BPS ファイル形式とは?
.bps は、著作権で保護されたROMデータを配布することなく、ROMハックやファン翻訳を配布するためにレトロゲームコミュニティで使用されるバイナリ・デルタ・パッチ形式です。この形式は、SNESエミュレータ bsnes の作者である byuu (Near) 氏によって2012年頃に作成され、その仕様はパブリックドメインとして公開されました。
.bps ファイルは、オフセット0にある4バイトのASCIIヘッダー BPS1(「1」は形式のバージョン番号)で始まり、その後にソースファイルサイズ、ターゲットファイルサイズ、およびオプションのメタデータブロック(UTF-8テキスト)をエンコードする可変長整数が続きます。パッチ本体は、SourceRead(ソースから変更されていないバイトをコピー)、TargetRead(新しいバイトを書き込む)、SourceCopy(任意のソースオフセットからコピー)、TargetCopy(既に書き込まれた出力からコピー)の4つのコマンドタイプを使用します。ファイルの最後には、3つの CRC32 チェックサム(各4バイト、リトルエンディアン)が含まれています。これらはソースROM用、期待される出力ROM用、およびパッチファイル自体を対象としたものです。ソースのチェックサムが一致しない場合、パッチャーは適用を拒否し、破損した出力が生成されるのを防ぎます。
BPSは、16 MBのファイルサイズ制限を撤廃し、埋め込み整合性検証を追加することで、古い IPS 形式を継承しました。SNES、GBA、NDSのROMハックで広く使用されています。
一般的なツールには、flips (Floating IPS, Windows/Linux)、MultiPatch (macOS)、UniPatcher (Android)、および RomPatcher.js などのブラウザベースのパッチャーがあります。
セキュリティと安全性
リスク: MEDIUMBPSファイル自体は単なるパッチデータであり、コードを実行することはできません。別途パッチャーツールとROMが必要です。リスクは、非公式サイトからパッチツールをダウンロードすること(アドウェアが同梱されている場合があります)、およびお住まいの地域の管轄区域におけるROM配布の合法性に起因します。推奨されるパッチャー(Floating IPS、RomPatcher.js)は、クリーンなオープンソースツールです。
形式の詳細
概要- Microsoft Works バックアップファイル - 一部のファイル情報サイトの古いエントリでは、.bps = Microsoft Works ドキュメントのバックアップと主張されていますが、これは誤認です。この関連性が実在する、あるいは広く使用されているという証拠はありません。
BPS ファイルを開くプログラム
技術的詳細
詳細仕様| マジックバイト | オフセット0に `42 50 53 31` (`BPS1`) - 「1」は形式バージョンを示す |
| バイト順序 | リトルエンディアン(可変長整数および CRC32 チェックサム) |
| コンテナ | カスタム線形バイナリ形式(標準のラッパーなし) |
| エンコーディング | バイナリ |
| 整数エンコーディング | 可変長符号なし整数(1バイトあたり7ビット、MSBを継続フラグとして使用) |
| パッチコマンド | SourceRead, TargetRead, SourceCopy, TargetCopy |
| チェックサム方式 | 3つの CRC32 チェックサム(ソースROM、ターゲットROM、パッチファイル) - 各4バイト、リトルエンディアン |
| ソース検証 | ソースの CRC32 が埋め込まれたチェックサムと一致しない場合、パッチャーは中断されます。これにより、誤ったROMへの適用を防ぎます。 |
| 一般的なファイルサイズ | 数KBから数MB(ROMの差分サイズに比例) |
| 仕様 | パブリックドメイン(byuu/Near氏により2012年頃に公開)、単一バージョン BPS1 |
| 対象プラットフォーム | SNES, GBA, NDS, およびその他のレトロゲームROMハック対象 |
| 前身の形式 | IPS(チェックサムなし、16 MBサイズ制限)、UPS |
| リリース日 | circa 2012 (byuu/beat tool) |
| 最新バージョン | BPS1 (single version in spec) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | github.com |
BPS の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。BPS ファイルについて最初の質問をしてみましょう。