GRCGとEGC
プレーン転送を高速化しようとしたNECの技術者たち
前回、PC-9801はプレーンのVRAM構造を持っていて、1ドット転送するのに4回のメモリーアクセスとビット演算が必要だと説明しました。
この不利な設計を高速化するチップとしてGRCG(Graphic Charger)やEGC(Enhanced Graphic Charger)が中期以降のPC-9801に搭載されていました。
これによって、ビジネスパソコンでもゲームが遊べるようになったのです。
同時に4つのVRAMへアクセスする専用回路
専用回路といっても使い方は簡単です。
PC-9801VX以降のEGC搭載機であれば特定のIOを叩くだけです。
[EGC起動シーケンス]
OUT 7Ch, C0h (GRCG/EGC有効化)
OUT 6Ah, 07h (モード変更アンロック)
OUT 6Ah, 05h (EGCモードへ移行)
OUT 6Ah, 06h (モード変更ロック)
[EGC終了(封印)シーケンス]
OUT 6Ah, 07h (アンロック)
OUT 6Ah, 04h (EGCモード解除)
OUT 6Ah, 06h (ロック)
OUT 7Ch, 00h (GRCG/EGC無効化)
OUT 6Ah, 01h (通常16色モードへ復帰)
この操作を行うと、EGCが有効化される流れになっていました。
そして、GRCGやEGCが有効な状態ではCPUで普通に1プレーンだけ転送を行うと、それを検知して専用回路が4つのVRAM領域にデータを同時転送できるという仕組みを持っていました。
まるでCPUに4つのアームが付いたパワードスーツを着せるような設計です。
仕様が非公開と言われるEGC
ゲームのスプライト描画においては、単に4つに領域に転送するだけではなく、もともと書かれている背景にマスクさせつつキャラを描画したりキャラを移動させてスクロールさせたりしなければなりません。
EGCは、その希望に答えようとマスク処理やROP(Raster Operation)などを行う仕組みを持っていました。
しかし、これらの仕様は公には公開されず、NEC公式のPC-9801テクニカルデータブックにも誤植があったり、何よりもインターネットのない時代では情報が手に入りませんでした。
一説には、NECがEPSON互換機との優位性を保つためにゲームに関わるEGCの仕様を公開しなかったという説もありますが、定かではありません。
現在、数あるPC-9801のエミュレータソフトでも、このEGC回路の挙動については実機との差異が残っている状態です。