見出し画像

自分で吸い出したRomがMAMEでCRCエラーとなる時の対処法(アーケード基板)

以前、「アーケード基板を吸出してエミュレーターに入れる(SEGA)」の記事を書きましたら沢山のビジターがあり驚きました。Xで感想も頂きましてありがたく思います。今回は吸出しに関して基本の手順では進まなかったときに調べて分かったことをまとめます。ググれば出てくるような中身の薄いアフィ記事は嫌いなので予めいろいろ検索したりCopilotに聞きましたがかなり散らかってました。

MAMEについて
詳しくは書きませんが、あらゆるエミュレーター群の源流となるようなもの。ロムの形式は.CHDがあるが90年代のセガ基板は吸い出したbinファイルをzipでまとめたものとなる。ロムダンパーで読むと拡張子がbinとなるが別になくても良い。前に記事に書いた通り、ファイル名は決められており詳細は下記ページに掲載されている。重要なのはフォルダ名とチェックサム(CRC)だ。MAMEはデータの欠損があるかどうかファイル1つ1つCRCにてデータベースの値と照合する。もしロムの吸出しがトラブっているとデータ容量が同じであっても起動しない。極論、1か所僅か01データ化けただけでゲーム全体が起動しない仕組みになっている。MAMEの設計思想としてゲームエミュ機ではなく老朽化した過去作品を博物館化させる役割を目指しているのも関係あるだろう。尚セガModel2エミュレーターも同様にチェックサムでロムを弾くので同じような問題がおきる。

データ化けについて
EPROMは紫外線や太陽光で僅かながら劣化していく。すでに30年近くたちビット化けしてしまったロムもあるだろう。マスクロムは書き換え不能の量産ロムなのでデータ化けやデータ蒸発はしないはず、それでも時代が進むとエラーがでることもあるらしい。今回手に入れたマスクロムが一部分だけデータ化けしてしまった。ほとんどの場合、画面に一部テクスチャ落ちが出るとか特定のステージのフレームにノイズが出るとかだろう。サウンドロムであれば音が少し壊れる程度だろうか。当然不良品は不良品なので90年代当時であればゴミ箱行き確定だが、ここまで基板が高騰してくると多少のエラーも含めてプレイに支障なければ所有しておきたい。そのためにエラー回避する方法を記しておく。

MAMEのCRC-32チェックを強制的に偽装して書き換える
チェックサムは本来データ化け、欠損がないかを見分ける値であるから、それを偽装して正常な「ふりをする」こと自体が矛盾している。それでもMAMEで動かすために背に腹は代えられぬ。のちにロムコレクションを見返すとき、「そういえばどっかのロム、吸出し失敗してたな。だけどCRC偽装してるから今から探し出して特定できないや」とならないように、実ロムにマーカーを書くとかメモ等することを推奨する。
UNDER CONSTRUCTION様ブログで紹介のあるとおり、Project Nayuki様が作った「Forcing a file’s CRC to any value」というツールを作る。フリーなのでソースコードが載っています。それを上記ブログ様がWindows 11のコマンドプロンプトで起動できるツール化して公開しています。

【1】まずはWin64用のforcecrc32.exeをダウンロード。たいていはダウンロードフォルダに入る。コマンドプロンプトで起動
【2】forcecrc32.exeフォルダにデータ化けしたxxxx.BINを入れる。
【3】コマンドは「forcecrc32.exe xxxx.BIN データの総容量から4を引いたバイト 正しいCRCチェックサム値」となります。たとえば2MB(2097152バイト)の999.BINファイルをCRC-32値12345678にしたければ「forcecrc32.exe 999.BIN 2097148 12345678」です。
【4】修正したBINをロムフォルダに突っ込んでzip化に戻しておわり

ロムが故障している場合のほかに、時代に合わせて表現規制や商標表記の更新、テキストの修正等でロム自体に手直しが入ると当然当時のデータとは差分が生まれ動かなくなります。
Steam等で正規購入したロムを(純正のランチャー以外のMAMEで起動させるのが許諾されているかどうかは一旦置いておいて)MAME等エミュレーターで起動させるときにCRCエラーが出る場合、だいたい上記のようです。スト2とか国旗関連の描写変わってたり結構あるみたいですよ。

おまけ
最近のMAMEバージョンでセガ基板必須ファイルとなったSEGABILL.zipについて
MAMEのバージョンが上がると、それまでエミュレートしていなかった部分が動作するようになり別途必要となるファイルやBIOSがでてきます。Model2でSEGABILL.zipが必要となりました。詳細は不明ですが2P連動や対戦で必要なデータなのか、大元はセガバーサスシティ筐体に入っているサブボードのBIOSのようです。(一部掲示板情報では、ST-V基板の任意のBIOSでも動いたとの報告アリ)。
サブ基板に入っているEPROMを吸い出せばOK。
ソースのない会話がネット上で飛び交いますがソースは下記



この記事が気に入ったらサポートをしてみませんか?