1998年の4月に発売になっています。
「テクモ」と名前に入っている通り、テクモのゲームです。
ゲーム基板は ST-V 。ST-V のタイトル数を増やすために営業の人がテクモに交渉し、開発してもらったゲームでした。
以前も少し書きましたが、ST-V のタイトル数を増やすために、営業の人がセガサターンで面白いゲームの「業務用移植」を頼んでいました。
テクモワールドカップはサターンには出ていないようですが…
1997 年に、サターン用に「Jリーグ GO GO GOAL!」というゲームを出しています。
画面構成などずいぶんと違うのですが、おそらくはこれの業務用アレンジが「ワールドカップ '98」。
生産・販売はセガ。だから、セガ社内の書類事務や、生産工場に対する申し送り業務を誰かがやらなくてはなりません。
この「誰か」とは、ST-V に対するサードパーティサポートをやっていた部署…つまりは、AM1 研のテクニカルサポート、僕のことです。
生産と流通はセガが行いましたが、セガがお金を出したゲームではありません。
だから、ゲーム内容には口を出さない。通り一遍のバグチェックを行い、発売するための社内規定を満たしているかのチェックを行い、書類を整えて申し送りをするだけです。
ゲームは、開発用のフラッシュロムカートリッジに入れられた状態で送られてきました。
まずは、このデータを他のカートリッジにコピーし、部内でチェックプレイを行う必要があります。
ところが、ここで問題発生。
コピーすると、なぜか実物と違って、ゲーム中の速度が速く…なんだか、2倍速で回しているような動きになってしまい、ゲームにならないのです。
コピーミスかと思って、いろんなカートリッジを使い、何度コピーしても同じ。
テクモの担当者に電話をして何が起きているのか聞きました。
「その症状は、コピープロテクトに引っかかってしまっている」とのこと。
ここで初めて知りました。
セガ社内でも使っていなかった「コピープロテクト対応 ST-V カートリッジ」というものがあり、このゲームはそれに対応していたのです。
普通のカートリッジにコピーすると、プロテクトに引っかかってしまうのでした。
ハードウェア部署に、対応カートリッジについて問い合わせます。
通常のカートリッジを改造して作ったもので、貸し出せる在庫はないとのこと。
つまり、マスターとなっているカートリッジをそのまま使うしかありません。
うまく動かなかったとはいえ、コピーの際にデータはファイル化していました。
この内容を信じて、ROM 化するためのデータを作ります。
このゲームに限ったことではないのですが、ST-V ゲームの大量生産用のマスターロム作成は、少しおかしなことになっていました。
生産する ROM と同容量の EP-ROM がないため、半分の容量の ROM で作成し、それぞれの ROM のチェックサムをつけて申し送るのです。
ROM にチェックサムをつけていると言っても、出来上がってくる ROM は2つあわせた容量になっているため、チェックサムは異なります。
生産を頼む段階でのミスは防げますが、上がってきたものが正しいかどうか確かめる方法はない、という状態でした。
しかしまぁ、そういう慣例だったので書類などもそのように作ります。
その間に、マスターのカートリッジの方のチェックプレイもある程度やってもらいました。
ゲームにもおかしそうなところはありませんし、各種テスト項目も満たしていました。
これで、ROM 生産の申し送りは出来ました。
次に、今回の特例として、コピープロテクト用の LSI チップを生産しなくてはなりません。
このための申し送り書類と、ROM が上がってきた時にチェックプレイなどを行うための、テスト用の LSI チップを数個、手作りします。
この LSI チップを作るための道具は、特別なカスタマイズ品でハードウェア部署に1つあるだけでした。
プロテクトのための情報が何も書かれていない LSI と、この「道具」を借りてきて数個生産します。
使ったことのない機械、やったことのない作業で、プロテクトがらみのため「一度失敗したら使えなくなる」LSI だったので、緊張しました。
プロテクトの仕組みについて説明しましょう。
まず、もともとこの LSI は、プロテクト用途に開発されたものではなかったそうです。
じつは、静的ハフマン圧縮されたデータを展開するハードウェアチップ。セガのハードウェア部署が開発したものでした。
ハフマン圧縮というのは、zip や gzip などで使用されている圧縮方法です。
特徴の一つは、圧縮を「辞書」によって行うこと。
展開のためには、圧縮データ中にこの「辞書」を一緒に入れておく必要があります。
辞書を入れることでデータが増えますが、それによって圧縮できる割合が増加分以上であれば、入れる価値があります。
そのため、一つの圧縮データ中でも、時々辞書を入れ替えるのが一般的な方法です。
局所的にデータの特徴が変わることは多いので、場面ごとで適切な辞書を使うことで圧縮率を上げるのですね。
しかし、ハードウェア部署が作成したチップでは、静的ハフマン圧縮を使っていました。
「辞書」を回路の中に最初から作りこんでしまい、交換できません。
辞書自体は、交換はできないとはいえ、LSI チップごとに1度だけ書き込むことが出来ました。
なので、ゲームが完成してから最適な辞書を求め、専用のカスタマイズ LSI を作れば、それなりの効果があります。
…いや、あまり効果なかったそうです。ゲーム中に使われる多くのデータを「全部まとめて」圧縮できるような辞書を作ると、データの特徴が平均化されてしまい、圧縮効率が上がりません。
そのままでは、圧縮用途としては使えません。そこで、「プロテクト用」と目的を変えて使うことにしたのです。
この LSI チップは、ROM カートリッジのバスの途中に挟み込まれていました。
通電した最初は「互換モード」になっています。
データを読み込む際、LSI は特に何もせず、アドレスバスに示されたデータアドレスからデータを読み出し、データバスに返します。
しかし、I/O ポート経由で「展開モード」にすると、実際のカートリッジのデータを加工して返すようになります。
アドレスを最初に指定してから連続して読み出しを行うと、最初に指定したアドレスからのデータを「展開して」データバスに返すのです。
最初は互換モードで、ゲームの初期化を行うプログラムを読み込み、動き始めたとします。
このプログラムが「展開モード」を指定し、ゲーム本体プログラムを読み込んだとしましょう。
これで、圧縮されていたゲームプログラムが展開されながらメモリに読み込まれます。
当たり前のことながら、ゲームプログラムを呼び出せばゲームが動きます。
ここで、LSI チップが入っていない通常のカートリッジや、LSI チップが入っていても別のゲームのものだったりしたらどうなるでしょう?
ゲームプログラムは正しく展開されず、呼び出しを行った時点で「暴走」します。
LSI チップの中には「辞書」が含まれていて、この辞書はゲームごとに異なるものです。
そして、この LSI は一般的なものではなく、セガだけが持っているものです。
これは、ゲームのコピーを防ぐための仕組みになりえます。
元々圧縮展開用の LSI でしたが、コピープロテクト用としても十分に使えるのです。
テクモのゲームでは、ほぼ完成間近になってから、この LSI に対応したのだそうです。
そのため、プログラムを圧縮するような方法は使いませんでした。
画面に表示するテクモの会社ロゴを、圧縮と非圧縮の2つ持っている、と聞いたように思います。
アドバタイズの冒頭にはテクモのロゴが表示されますが、これは圧縮データを展開したもの。
この表示の際に、展開後の表示データと、非圧縮データを比較します。
あっていれば正規の ROM 、違っていれば、違法コピーです。
そして、違法コピーなら「事実上ゲームにならない」ように、2倍速で動かすようにしました。
#参考:
MAME では、現状「2倍速」の部分にパッチが当たり、遊ぶことはできるようです。
もし、「ゲームが止まる」ようなプログラムを組めば、その部分を探し出して回避されてしまうかもしれない、と考えたようです。
それよりも、一見動いているように見えて実はゲームにならない、というようなものであれば、コピーに失敗していることにすら気づかず、回避策はとられないかもしれません。
ここら辺、8bit 時代の PC ゲームのコピープロテクトなんかでも使われた考え方ですね。
このプロテクト用の…というか、ハフマン展開 LSI 、僕はこれ以外のゲームで見たことがありません。
カートリッジ開けない限りわかるものでもありませんし、もしかしたら他にも使われているのかもしれませんが。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |