![]() |
|
![]() ![]() |
|
![]() まずはご存じない方のためにX1シリーズというマシンについて説明しましょう。X1は1982年にシャープから発売された8ビット機で「パソコンテレビ」というカテゴリを新しく作った存在でもありました。どこが「パソコンテレビ」かというと、推奨ディスプレイがテレビ機能を持っており、パソコン画面のスーパーインポーズ(合成表示)が可能という点です。テレビの自動ON/OFF時間なども合成画面で設定できるようになっていました。つまりパソコンにテレビ制御用のI/Oが備わっていたわけです。当時としては画期的で、価格は高めでしたが人気機種となりました。また、その二年後にはFDDや漢字ROM、2面分のグラフィックVRAM(400ライン1面)などを標準搭載したX1turboシリーズが発売になり、X1全盛期を迎えます。そしてOPM音源(FM8和音)なども備えたX1turboZシリーズが登場し、X68000シリーズにバトンタッチしていきます。 |
|
続いてスペックについて解説します。CPUはZ−80A、クロック周波数は4MHz、メインメモリ64KBという標準的なものです。これは全シリーズ共通です。初代の“マニアタイプ”以外はVRAMを48KB標準搭載しており、8色カラー640×200ドット×1面の表示ができました。これもごくスタンダードです。ちなみに当初はフロッピーディスクドライブもオプションで、標準外部記憶装置はカセットテープでした。 | |
そしてこれからがX1の特徴的なスペックです。 | |
![]() |
|
その2)画面のプライオリティが任意に設定できる。“プライオリティ”とはテキスト画面とグラフィック画面の優先順位のことです。どれを手前に表示するか、どの色を透明色にするか(後ろの画面が透けて見える部分の決定)などを自由に設定できました。ちなみにPC8801/9801シリーズは必ずテキスト画面が手前に表示されます。一見地味に感じますが、この機能はリボルティーII高速化技法に不可欠なものです。 | |
その3)ハードウェア割り込みが貧弱。これはゲームソフトを実行する際にはX1の致命的な欠点となりました。最短でも1秒の時計割り込みしか使えなかったのです。私もこのスペックを見たときは愕然としたものです。当時の私は大学生でしたが、このスペックだけでX1を購入予定機種から完全に外しました。タイマー割り込みが使えないことによる制約はあまりにも大きかったからです。例えばX1には標準でPSG(電子音3音+ノイズの音源チップ)が登載されていましたが、ゲームのBGMとして曲を鳴らそうとしても非同期に鳴らせないので、必ずゲームのメインルーチンから定期的に演奏ルーチンを呼び出す必要がありました。当然、メインルーチンで時間のかかる処理が発生すると演奏テンポが遅くなります。回避策が無いわけでもありませんが、あまりにも面倒かつ非効率的です。 ただし、turbo以降はCTC(割り込みタイマーチップ)が内蔵され、標準搭載のOPN(FM3和音+PSG音源チップ)が持つ2本のタイマー(割り込みは1系統のみ)や、マウス用のインターバルタイマなど、いくつも使えるようになりました。 |
|
その4)キー入力をサブCPUが担当。これもX1のウイークポイントのひとつ。PC9801シリーズやDOS/V機も同様のシステムなので「なぜ?」と思われるかもしれません。ところがこれが原因でX1はリアルタイムキー入力が苦手なマシンなのです。サブCPU自体はi8049コンパチでPC9801と実質上変わらないのですが、サブCPU上のプログラム(ROMに内蔵)がマズいというか、メインCPUとの連携がマズいとうか、レスポンスのよいリアルタイムマルチキー入力ができないのです。リボルティーIIは『ジョイスティック専用』ということで回避(?)しています。 | |
![]() |
|
しかし、グラフィックVRAMアクセスが決して速かったわけではありません。X1のCRTコントローラは、ベーシックマスターL3などと同じくオーソドックスな日立のHD46505チップを使用していたので、VRAMのアドレスが変則的で、グラフィックを操作するにはお世辞にも扱いやすいとはいえませんでした。このため、X1ではグラフィック画面を使った高速なスクロールゲームは不可能であると囁かれていたのです。 | |
X1シリーズは、およそ以上のような特徴を持つマシンです。ちょっと知識のある人なら、このマシンでスムーススクロールのシューティングゲームを作ろうとは思いもしないことと思います。事実、X1/turbo用の数多くのゲームソフトが発売されましたが、リボルティーIIのように2ドット単位でフルカラー(8色)スクロールするような製品は見たことがありません。当時、ソフト流通やゲーム雑誌の担当者の方にも見てもらいましたが、目を丸くして首をかしげておられました。 当然、この高速スクロールの仕組みは二重丸の社外秘でした。X1が廃れても、カラーPCGと画面プライオリティ機能を持つ新型マシンが発売されれば、このテクニックは応用できたからです。 しかし現在(というかDirectXが普及してから)、2D表現であればどんなマシンでも簡単に高速&スムーズなスクロールゲームが作れるようになっています。CPUの能力は1万倍、インテリジェントなビデオチップは大容量の高速RAMと数百MHzの高クロックで動作していますから当然です。リボルティーIIの秘密技術も秘密である必要が全くなくなってしまいました。よってここに全容を公開することといたしました。 |
|
高速スクロールの仕組みを解説する前に、リボルティーIIの動作環境について補足しておきます。リボルティーIIは全X1/turboシリーズで動作しますが、グラフィックVRAM、漢字ROM、FDD2台、アタリ社仕様ジョイスティックが必須です。つまり、X1turboシリーズでは標準で動作しますが、それ以前の機種ではオプション拡張が必要です。グラフィックVRAMと漢字ROM(無いとメッセージが読めない)は当然として、FDDは大量のデータを高速に読み込むため、ジョイスティックはシューティングゲームをストレスなくプレイするため、それぞれ必要となるのです。また必須ではありませんが無印のX1にはFM音源カードも事実上は必要であるといえました。タイマー割り込みの使えない環境のPSGによるBGMではさすがに寂しいので・・・・(でも、ちゃんとPSGでも演奏されます)。 | |
では本題の高速スクロールの仕組みについて解説していきましょう。 8ビット機でスムーズスクロール型シューティングゲームを作る場合、MZ-2500のようにハードウェアによるグラフィック画面のスムーズスクロール機能がない限り、非常に処理の重いグラフィック画面のスクロールを高速化するため、色数を落とす方法が一般的でした。つまり、青・緑・赤の3枚の画面を重ねて8色を表現していることを利用し、スクロールする背景を2色または4色で描いて、スクロール処理自体にかかる時間を削減するわけです。そして残りの4色または2色で弾丸やビーム、機体などを描けば、見た目は地味ですが、何とかゲームにはなるというわけです。この手法だと背景(スクロールする)と前景(機体や弾丸など)がパレット(色の割り当て)の設定だけで合成できるので、処理はさらに軽くなります。 ![]() あとは残った2つのグラフィック画面で4色(白・赤・黒・透明)の機体や弾丸を合成描画しています。もちろんスクロールルーチンやキャラクタ表示ルーチンなども独自のアルゴリズムにより最適化しています。 |
|
![]() |
|
スクロールはDMAを使用せずフトウェアのみで行っています。書き換える必要のない部分は極力そのままになるように工夫を凝らしています。一般的な8ドットや16ドット単位でスクロールするような場合(アマランス1〜3などもこのパターン)は、同一パターンのPCGか否かをチェックするだけで書き換えの必要性を判断できます。2ドットスクロールの場合も上下のパターンブロック(リボルティーIIの場合は32×16ドット構成)が縦方向にベタなパターン(床や縦パイプ、道など)である場合は応用が利きます。マップデータに「スクロール不要ビット」を設けて、それをチェックするようになっています。![]() |
|
|
また、リボルティーIIはPC9801とのクロス環境で開発されています。CGデータなどの多くは98上で作成されており、専用のデータコンパータなどもすべて98のMS−DOS上でC言語によって開発されています。グラフィックツールなどもX1シリーズに合わせて200ライン用のものを作成したり、市販の400ライン用のものを200ライン用に改造するなどして使用していました。 データの通信も現在のような便利なLAN環境などありませんから、X1のCP/M環境用のフロッピーフォーマットと相互変換して通信していました。これによって無駄なく人とマシンを開発に当てることができました。ちなみにオープニングのアニメーションは98上の3Dグラフィックツールで骨格を作成してあります。 |
おまけにもう一点。リボルティーIIにはコピープロテクトがかけられていました。当時はゲームソフトのプロテクトは常識になっていましたので、それなりに強力なプロテクトがかけられました。X1シリーズに使用されていたFDC(フロッピードライブコントローラLSI)は富士通のMB8876(オリジナルはウエスタンデジタル社)というNECのμPD765Aとともにスタンダードとなっていたものでしたが、フォーマット機能がとても強力で、いろいろなプロテクトをかけることができました。しかし反面、フォーマット解析機能も強力だったので、コピーツールに自動でコピーされないようにするにはかなり工夫が必要でした。![]() でもちょっと気になりませんか?まともに解析できないような情報をどうやってチェックするのかっていうこと。答えは「根性」です(^^!)。当然チェックするときも肝心のチェック用キーワードはビットずれを起こして滅茶苦茶な状態です。でも「ビットずれ」を起こしていることは判っているので、キーワード周辺のデータを実際に1ビットずつずらしてみて、キーワードと符合するか試行錯誤するのです。妙なズレ方をして単純にビットシフトするだけでは合致しないこともあるので、何度かリトライしてみます。面倒な方法ですが、この不確実性が本コピープロテクトの実体でもあるのです。解析時にズレて読み込まれたデータをそのまま書き込んでコピーしても、そのコピーを読み込んだときにはさらにズレてしまうため、プロテクトチェックをくぐり抜ける確率は極端に低くなってしまうのです。 ちなみにリボルティーIIは2Dタイプ(両面倍密)のフロッピーでしたから、ギャップの値はすべて4EH(十進数で78)が基本ですので、すべてのトラックのギャップ4を地道にチェックしていけば、このプロテクトの正体はおおよそ推測できます。しかし実際にはICE(インサーキットエミュレータ)を使用してFDCへのアクセスをトラップすれば、ほとんどのプロテクトは簡単にはずされてしまいます。つまりプロテクトチェックしている部分のプログラムの“ありか”を探し出して、そこを潰してしまうわけです。リボルティーIIも発売一週間後には「ファイラー」によってプロテクト解除されてしまっていました。杉之原名人が虚しさを覚えながらも「ファイラー不能」のプロテクトを考案するまでに時間はかかりませんでした。次回作の「ビートバイス」にその新技術が適用されることになるのですが、そのお話しは次回のお楽しみといたします。 |
|
※参考文献 : 絵夢絶党刊 「零壱複合心理VOL.1 ゲームメイキングハイテクBOX」 近江 慎一郎
|
|