ゲームROMの吸出しの歴史


日本のゲーム史はインベーダーゲームを嚆矢とする。インベーダーゲームがゲームセンターから消えて10年ぐらい経ったのちも、中学校の校則には「インベーダーゲーム店への入店を禁ずる」とか書かれていたケースも少なくはない。それほどインベーダーゲームの影響は絶大だった。


インベーダーゲーム」とはタイトーが1978年に出した「スペースインベーダー」とこの類似ゲームおよびクローン(模倣品)に対する総称である。タイトースペースインベーダーを発表すると同時に一大ムーブメントが巻き起こり、各社一斉にシューティングゲームを作りはじめた。


例えばナムコ(現ナムコバンダイ)は翌年(1979年)にギャラクシアンを発表し、その2年後(1981年)にギャラガ1984年にギャプラスを発表している。


パックマンのゲーム学入門
NHKスペシャル 新・電子立国〈4〉ビデオゲーム・巨富の攻防


このころの著名な作品のROMを吸出し競合他社がリバースアセンブルして研究するのは普通であった。


えー、要出典?


うーん。そういう話が「NHKスペシャル 新・電子立国〈4〉ビデオゲーム・巨富の攻防 」(asin:414080274X)に出てきていたと思う。「パックマンのゲーム学入門 」(asin:4757717520)にもちらっと書いてあったと思う。あとは直接私がゲームメーカーの人に聞いた。


そこでROM吸出しがどのようにして成されていたかというところまで話を進める。


当時のゲーム機版で使われている部品はほとんどが汎用部品であり、どこかのCPU(典型的にはZ80MC68000)や汎用ROMを用いて構成されていた。CPUの命令セットは当然既知であるから、ROMさえ吸い出せればそこに書かれているプログラムを解読できた。


当時のROMはいまのSDRAMのように複雑な制御は必要なく、単にアドレスピンに読み出したいアドレスを設定し、read/writeを指定するピンにはread(読み出し)を指定すれば、データピンにそのアドレスに書かれているデータが現れるというものであった。


汎用ROMなのでROMの書き込み装置(市販のROMライター)で読み出せたはずだが、当時ROMライターは比較的高価だったし、どんなROMでも読み書き出来るROMライターというものはなく、手持ちのROMライターだけでは対応していないこともあった。


そこで、ROMの吸出し機を自作することもあったのではないかと思うのだが、そのへんの事情は私はよく知らない。自作していたと仮定して、空想で話をもう少し進める。


当時のPC(たとえばPC-8001。1979年発売)でこの手のI/Oとして使われていたのはプリンターポート(いまで言うパラレルポート)だったはずだ。


PC-8001のプリンターポートはセントロニクス社仕様だから、つまり8bitのデータ送受信ピン(≒汎用I/Oピン)とacknowledge,write strobe信号ピンなどで構成される。要するに汎用I/Oとしてみなしたとき、これらの8〜10bit程度が自由にCPU側から扱える。


当時のROMのアドレス空間は12〜14bit程度であり、データが8bitであるから、ROMを吸いだすためにはI/Oピンが不足することになる。だから、ひと工夫必要になる。


アドレスは0にリセットしたあとインクリメントしていけば(1ずつ足していけば)いいので、74HC393に代表されるようなインクリメンタルカウンタ(バイナリカウンタ)を用意する。


またデータは1ビットずつ選択して取得出来ればそれでいいので74HC299に代表されるようなshift registerを用意して1ビットずつ取り出すようにする。


あとは、TTL/CMOSのレベル変換(≒電圧の変換)のために74HC645などを間に入れればハードとしては完成である。


これはそのあとに流行ったファミコンのROM吸出し機などの典型的な構成例である。


本当にこのようなハードをゲームメーカー各社が作ったのかどうかは知らないが、まあこれに相当する何かを作ったのではないかと私は思う。(いまであれば、I/Oピンの多いUSB対応の1チップマイコンが安価にて手に入るのでこのようなことをする必要はないだろうが。)


競合他社のROMの吸出しが各社可能であったというところまで話を進め、次にその対策などについて書いていく。


当時、ゲーム基板のクローン自体は法的にはグレー(もしくは合法)であったため、他社からクローン基板も多数発売された。クローン基板が安くで流通してしまうとゲームの開発・販売元としては商売があがったりになるので、これらのクローン対策のために何らかのプロテクトを施しはじめた。


そのプロテクトは電気的なもの、ソフト的なものなどいろいろあり、枚挙にいとまがない。
これについては機を改めて書きたいと思う。


電子部材用途におけるエポキシ樹脂 (CMCテクニカルライブラリー―エレクトロニクスシリーズ)


そのなかでもとりわけシンプルな例としては、チップに刻印されているIC名を削ったり、エポキシ樹脂で基板全体やROMを固めてしまうというものだった。


ただ、エポキシ樹脂はこれを本当にやってある基板は数が少なかったと思う。その理由には、基板は売れ残ったあと、破棄するのはもったいないのでROMだけ差し替えて別のゲーム基板として発売する意図があったからだと思われる。実際、「スペースインベーダー」は大量に残り、タイトーではROMだけ別のゲームに差し替えて出荷している。(スペースチェイサー、バルーンボンバーetc…) あるいはエポキシ樹脂自体は溶剤で綺麗に溶かせるので競合他社への対策としてはあまり意味がないのかも知れない。(私はよく知りません。)


ともかく、ここではROM吸出しに関して技術的にもう少し突っ込んだ話をする。


オールドゲームの保全のためにROMを吸いだしている人達がこのエポキシ樹脂で固められたROMの中身をどうやって吸いだしているかという点にフォーカスを絞る。


たとえば、「SUPER RIDER」(Venture Lineが開発。1983年タイトーが販売)では12kBのROMがエポキシ樹脂によって固められていた。これを吸いだしたAaron Giles氏のブログ記事によると、これを吸いだすためにトロイの木馬を書いたとのこと。(http://aarongiles.com/old2004.html)


具体的には、下図のようになる。(下図は私が書いた。)



CPUは既知であり、そのCPUにエポキシ樹脂で固められたROMがぶら下がっている。このROMはパレットデータ等ゲームの動作のために必須の情報が入っていると思われる。それとは別に、ゲームのプログラムコードは、別のROM(上図の「original game ROM」)に入っており、ゲームはここから起動する。


このCPUの命令セットは既知であるから、このCPU用のプログラムコードを書くことは出来る。


ゆえに、この「original game ROM」の部分を「epoxy ROMS」をダンプするプログラム(トロイの木馬)に差し替えれば、「epoxy ROMS」の内容を吸い出せるというわけだ。


なぜ「original game ROM」の部分自体をエポキシ樹脂で固めないかと言うと、それだと売れ残った基板のROMを差し替えて販売することが出来なくなるし、また、CPUのどのピンが接続されているかを見れば、どこがアドレスピンで、どこがデータピンであるかが確定してしまうためあまり意味がないからである。ゆえに、エポキシ樹脂で固められたROMはCPUのI/Oピンにでもぶら下げておくのが普通だったのではないかと思う。


このようにトロイの木馬を書いてROMを吸いだすという手法はROM吸出し方面の人には比較的ポピュラーなものである。しかし、ゲーム開発会社でこのような行為が行われてきたということに関しては私は否定的である。


というのも、プログラムの参考のためにリバースアセンブルするだけであれば、大作を数本やれば十分だっただろうし(そんなに延々とリバースアセンブルばかりしているゲーム開発会社は存在しなかっただろうし)、クローン基板の製作業者にとってはクローン基板が作れるかどうかは死活問題なので吸出しには懸命だっただろうけど、それでも吸出しのためにここまで手間暇をかけると元が取れるかどうかが微妙になってくる。


結果として、ゲーム開発会社にとっては上に書いたようなトロイを作成する方法はあまり馴染みがないのではないかと思う。