2018年04月29日の日記です


テクモワールドカップ'98  2018-04-29 16:25:25  業界記

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)

 MAME では、現状「2倍速」の部分にパッチが当たり、遊ぶことはできるようです。


もし、「ゲームが止まる」ようなプログラムを組めば、その部分を探し出して回避されてしまうかもしれない、と考えたようです。

それよりも、一見動いているように見えて実はゲームにならない、というようなものであれば、コピーに失敗していることにすら気づかず、回避策はとられないかもしれません。


ここら辺、8bit 時代の PC ゲームのコピープロテクトなんかでも使われた考え方ですね。




このプロテクト用の…というか、ハフマン展開 LSI 、僕はこれ以外のゲームで見たことがありません。

カートリッジ開けない限りわかるものでもありませんし、もしかしたら他にも使われているのかもしれませんが。




同じテーマの日記(最近の一覧)

業界記

別年同日の日記

13年 ハムスター

15年 ポール・バラン 誕生日(1926)

15年 「オセロ」 発売日(1973)

16年 お昼ご飯の思い出


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -