細かな話題
目次
SCU
サターンのシステムは大雑把に言えば3つに分かれています。
・メインCPU(SH-2)と周辺メモリ
・画像・音源関係とそのメモリ
・CD-ROMや拡張スロット周辺
この3つの部分は、それぞれ独立したデータバスを持っています。
このため、VDP1 がスプライトを描くためにバスを使用していたり、CD-ROM が先読み中でも、CPU のデータアクセスには悪影響は与えません。
でも、CPU から VDP にアクセスを行いたい場合もあります。そんなときにバスをつなぎ合わせるのが、SCU (System Control Unit)の役割でした。
SCU は、DMA 機能を持ちます。DMA とは CPU を経由しないで大量のデータを転送することです。
たとえば、CD-ROM から先読みしておいたデータを、一気にメモリに読み込みたい。
そんな時は DMA で転送を行えば、CPU で転送するより高速でした。
ここから先はちょっと記憶があいまいなのですが、たしか SCU はメイン RAM のリフレッシュも担当していたはずです。
DRAM や SDRAM はコンデンサをたくさん集めたようなもので、電気を「充電」して内容を記憶するのですが、ほおっておくと自然放電して内容が消えてしまいます。
そこで、時々内容を読出し、改めて書き込むことで消えてしまうのを防ぎます。これが「リフレッシュ」です。
リフレッシュを行うために、SCU は時々メインメモリのバスを使用します。
ところが、メイン以外の2つのシステム…CD-ROM 部分と画像・音楽部分の間で DMA 転送を行っていると、メインメモリのバスにアクセスできない状態となります。
DMA 転送のメモリ量が少なければ問題はないのですが、余りにも大きなデータを送った場合、リフレッシュができないことでメインメモリの RAM 内容が「消えて」しまうことがあります。
そうなると、当然のことながらプログラムが壊れてしまい、暴走します。
…これによって生じたバグでずいぶん悩みました。
コンデンサの自己放電みたいなものなので、必ず壊れるわけではなく「非常にまれに」壊れるのですね。
だから再現性がないし、ハードの仕様なのでプログラムをいくら眺めてもわからない。
しかも、これセガが書いた仕様書ではたしか「CD-ROM 部からの DMA 転送で」と書いてあった。
ST-V の場合カートリッジは CD-ROM 部に位置するのですが、仕様書がサターン基準で、ST-V のカートリッジでも同じことが起こるとわかりにくい書き方だった。
結局、DMA 転送を何回かに分けて行うことで解決しました。
リフレッシュは SH2 が行っていました。でも、SCU が DMA 転送でバスを占有してしまうと、SH2 がリフレッシュ信号を出せなくなり、同じ結果になります。
メイン CPU
プログラム可能な LSI を紹介してきたので、最後にメイン CPU も。
すでに書いた通り、 SH-2 を2つ搭載。有名な話ですね。
32bit のデュアルプロセッサなので 64bit 級! …という宣伝に当時は苦笑したものです。
メインメモリ
メモリは「プログラム可能」ではないのですが、関連話題としてここで扱いましょう。
サターンのメインメモリは 2Mバイトあるのですが、半分は高速な SDRAM 、残り半分は低速な通常の DRAM、という変則的な構成でした。
この変則構成の理由は謎なのですが、SDRAM が高価だったからとも、未発売に終わったジュピターとの互換性を考慮したとも言われています。
メモリが不連続で困った、という話題も聴くのですが…僕はあまり困った覚えがないのです (^^;
僕が作っていた ST-V のプログラムだと、ROM 読み込みもCD-ROM 程低速ではなかったので、メモリにすべてを読み込んでおく必要性が低かったせいもあるかもしれません。
以上、やたらとプログラム可能な LSI が多いマシンです。
VDP1、VDP2、音源、DSP、MC68000、SCU(DMA)、SH-1、H8、SH-2×2
全部で 10個。SH-1とH8 は「プログラム可能」ではなかったので除外しても8個。音源とDSP は一つの LSI に同居していたから7個かな?
いずれにしても、当時としては驚くほど分散処理していました。
設定項目が多すぎて…「すごい機械を扱っている」という感覚があり、僕は好きでした :-)
でも、現在は PC でも CPU がマルチコアだったり GPU が並列演算だったりするので、DMAや音源を含めて 10個くらいなら珍しくもありません。