PC98

VRAM構造


PC-9801を使う様子

アナログ16色

PC-9801といえば、16色の職人が作ったイラストを思い出します。
この16色のグラフィックですが、画像に対してパレットを持つスーパーファミコンとは違い、画面に対して1つのパレットを持つという仕組みでした。
そのため、ゲームを作るにはUIもキャラも背景もパレットを厳密に管理しないと、 青い髪のキャラが赤い髪のキャラと入れ替わったらライフやマジックパワーのUIが青から赤に変わってしまうというような難易度の高い仕組みでした。

しかし、それ以上に難易度が高いのがVRAM構成です。
通常、Windowsパソコンも現代のゲーム機も、VRAMは1ドットごとにRGBRGBRGB...というように赤緑青の強さが順番に保存されています。
また16色のパレットインデックスでも4ビットずつ並べていくのが現代的な作り方です。
このようなデータ配列をChunky(チャンキー)方式と言います。
一方、PC-9801が採用していたのはPlanar(プレーン)方式でした。

互換性を重視した設計

PC-9801は、Planar方式のVRAMを持っていました。
これは、PC-88のデジタル8色時代に起源があります。
デジタル8色は、名前の通りRGBの光の三要素があるかないかデジタルで色を表現しています。
白・黒・赤・青・緑・黄・紫・シアンの8つの純色をRGBの光源が点灯するか消灯するかで制御していました。
そして、ディスプレイの電気回路的には赤を光らせる回路・緑を光らせる回路・青を光らせる回路が独立していたため、RGBRGBRGB...というChunkyではなく、赤のプレーンと緑のプレーンと青のプレーンのようにVRAMのデータ置き場所を分けていました。
これは、電気回路的には正しいものの、たとえば画面に白いドットを1つ打とうとすると、赤のプレーンと緑のプレーンと青のプレーンにそれぞれビット操作をして3か所に書き込む必要があったのです。
PC-9801は16色に対応する際にこのデジタル8色との互換性を維持するため、プレーンを1つ増やしてRGBIという4プレーンを用意しました。
そして、たとえばパレット番号11番のドットを1つ打つためには、二進法で1011という値をバラバラにして4プレーンに別々に書き込む必要があったのです。

横スクロールの難易度

このプレーン方式は4回書き込まなければならないだけでなく、ビット演算地獄でした。
なぜならコンピュータの最小処理単位は1バイトつまり8ビットだからです。
たとえば、ひとつのプレーンの1バイトのデータには8ドット分のデータが保存されていました。
ここで1ドットだけ操作しようとすると、残りの7ドットはそのまま残してあげなければなりません。
これはゲームなどの画面スクロールをするには非常に不向きな構造でした。
たとえば、11010011-01100100-00001101という1バイトごとのドット情報がプレーンに保存されていて全体を右にシフトしようとしたら、まず1バイト目を右に1ビットずらして01101001にしたあと、溢れた1を次のバイトの頭に移動させたいけど、その前に次のバイトも1つ右にずらして、それから先ほどの1をくっつけて、というカオスなビット演算を永遠としなければなりません。
しかも、それが4プレーンもあるのですから、当時のCPUでは到底リアルタイムでできませんでした。
そのため、日本ファルコムやアートディンクといった技術力の高いゲームメーカーでも横スクロールは8ドット単位にしているのが普通でした。

これは画面全体の話だけでなく、マウスカーソルなどでも同じでした。
しかし、マウスカーソルはさすがに8ドット単位で動かすには雑すぎるので、マウスカーソルの画像を8つ内部で作っておき、1ドット右版、2ドット右版というように画像を切り替えて表示するのが一般的でした。

縦スクロールの難易度

ちなみに縦スクロールはバイト単位で動かせるため1ドット単位で動かせました。
東方などのPC-98向けシューティングが縦なのも、このVRAM構造が1つの理由だと思います。

テキストVRAM

スクロールにおいてはスーパーファミコンの専用回路であるPPUの足元に及ばないPC-9801でしたが、これはビジネスパソコンという目的を考えるとやむを得ないかもしれません。
その代わりPC-9801には高速で文字を表示できる画像とは別のテキストVRAMという仕組みと、漢字を含めた日本語を大量に収録したROMを搭載していました。
これにより、ビジネスソフトでも高速で日本語を表示でき、フォントをフロッピーディスクに収録しなくてもテキストアドベンチャーゲームを遊ぶことができたのです。
グラフィックの上にテキストスプライトを重ねるような作りは、当時のグラフィック処理が弱い環境では極めて有利だったのです。