2014-06-14 Sat [ 昔のこと::古の技術 ]
遥か遠い昔、PCエンジン版R-TYPEのコトという記事を書いたのだけど、最近、これについてTwitterで聞かれて「どうしてオーバークロックになるのか?」という説明がうまく出来なくて、ずっと考えていたのだけど、どうしてこれがオーバークロックになるのか、うまい(と思う)説明を思いついたので、説明してみたい。
まず縦1ドット、横Nドットの紐のように細い横長の画面があると考えて欲しい。
当時のゲームマシンは今のように複数画面分のフレームバッファを持たず(持てるわけもないメモリ事情だった)、この1ドットの横長の線を水平帰線期間毎に、1ドットずつ下に下りながら、だいたい250回ほど描くことで画面を作っていた。
この1ドットの線をラインバッファと呼ぶ。ここで1本のラインバッファを作るのではなく、スプライト用のラインバッファとバックグラウンド(背景画面)用のラインバッファがあり、この2つを水平帰線期間毎に描画して、合成して画面を作っている…と想像して欲しい(この説明は正確には違うのは百も承知だ)。
そしてPCエンジンが横256ドットモードで動いているとする。
バックグラウンド(背景画面)のラインバッファは当たり前だけど256ドット。
次にスプライトはというとPCエンジンのスプライトは最大横が32ドットになるので、32ドット*16個が最大になり、512ドット分ということになる。
つまりPCエンジンの256ドットモードでは、256+512=768で、水平帰線期間毎ごとに最大768ドット分の絵を描くことになる。
では、これが320ドットモードになるとどうなるのか?
バックグラウンドが320ドットになるので320+512=832ドット。
832ドット分の絵を描くことになり、256ドットモードより、64ドット増えることになる。
ところが水平帰線期間は一定の長さで変わらない。
だから追加の64ドット分を描くために、832/768=1.08で、8%ほど速いスピードで描画することが要求される。すなわち8%ほど速いスピードでVRAMやイロイロなところにアクセスすることになる。
そして、8%ほどいろんなところに速くアクセスする(可能性がある)のは、当時使われていたRAMの保証の範囲を超えていた。
だからNECに「使っちゃダメ!」と、怒られたわけだ。
ここでスプライトの幅が32ドット最大だったことを思い出して欲しい。増えた64ドットはスプライト2つ分。なので横に並ぶスプライトの数を最大14個に設定すると…768ドット分の描画になり、256ドットモードと同じ描画量で済むことになる。
かくして、PCエンジンの320ドットモードではスプライトは14個しか並ばなかったわけである。
まず縦1ドット、横Nドットの紐のように細い横長の画面があると考えて欲しい。
当時のゲームマシンは今のように複数画面分のフレームバッファを持たず(持てるわけもないメモリ事情だった)、この1ドットの横長の線を水平帰線期間毎に、1ドットずつ下に下りながら、だいたい250回ほど描くことで画面を作っていた。
この1ドットの線をラインバッファと呼ぶ。ここで1本のラインバッファを作るのではなく、スプライト用のラインバッファとバックグラウンド(背景画面)用のラインバッファがあり、この2つを水平帰線期間毎に描画して、合成して画面を作っている…と想像して欲しい(この説明は正確には違うのは百も承知だ)。
そしてPCエンジンが横256ドットモードで動いているとする。
バックグラウンド(背景画面)のラインバッファは当たり前だけど256ドット。
次にスプライトはというとPCエンジンのスプライトは最大横が32ドットになるので、32ドット*16個が最大になり、512ドット分ということになる。
つまりPCエンジンの256ドットモードでは、256+512=768で、水平帰線期間毎ごとに最大768ドット分の絵を描くことになる。
では、これが320ドットモードになるとどうなるのか?
バックグラウンドが320ドットになるので320+512=832ドット。
832ドット分の絵を描くことになり、256ドットモードより、64ドット増えることになる。
ところが水平帰線期間は一定の長さで変わらない。
だから追加の64ドット分を描くために、832/768=1.08で、8%ほど速いスピードで描画することが要求される。すなわち8%ほど速いスピードでVRAMやイロイロなところにアクセスすることになる。
そして、8%ほどいろんなところに速くアクセスする(可能性がある)のは、当時使われていたRAMの保証の範囲を超えていた。
だからNECに「使っちゃダメ!」と、怒られたわけだ。
ここでスプライトの幅が32ドット最大だったことを思い出して欲しい。増えた64ドットはスプライト2つ分。なので横に並ぶスプライトの数を最大14個に設定すると…768ドット分の描画になり、256ドットモードと同じ描画量で済むことになる。
かくして、PCエンジンの320ドットモードではスプライトは14個しか並ばなかったわけである。