先日、68000はグラフィックに強かったのか、という内容で書かせてもらった。
詳しくは読んでもらうとして、X68k は CPU の特徴を活かしていて「68000ならでは」のグラフィックだったのだけど、同じく 68000を使ってグラフィカルだとされていた Mac も AMIGA も、 68000 でなくても大丈夫な構造しているよね…という内容。
その中に、8bit 機種の中では色数の多さで異彩を放っていた FM-77AV はどうなってたのかな、と書いたら、情報を頂いた。
まずは先日の日記に追記したのだけど、その後も情報を頂いて追記レベルではなくなったので、新たにまとめておこうと思う。
(FM-77AV に限らず、グラフィックに関する思いついたことを片っ端から)
まずおさらい。
画面を作るためのメモリを VRAM というのだけど、当時の VRAM 構造は、横8ドットを1バイトで表現するのが普通。
これだと白黒画面になっちゃうのだけど、3画面持って「赤青緑」の画面だと考えれば、重ねて8色が出せる。
この方式の利点は、白黒1画面が小さなメモリに収まること。
扱えるメモリが小さい 8bit 時代には重要な事だった。
カラーを扱うには、CPU の「外側」で、メモリ切り替え回路を作っておく。
赤青緑の画面を順番に書き変えれば終わり。
1ドット描くのに3回アクセスする必要があるけど、それぞれの画面の中でのメモリ計算は同じなので、計算を何度もやる必要はない。
でも、そもそもメモリアクセスというのは遅いものだし、1バイトが8ドットにあたるので、周囲のドットに影響が出ないように点を描くにはそれなりの処理が必要になる。
で、先日の記事では「FM-77AV はどうなっていたのだろう」と、ちょっとだけ書いといた。
FM-77AV は 4096 色が出せる機械で、これは 12bit に相当する。
12枚画面を持っていて、12回描き込まなくてはならなかったとしたら大変だと思ったのだ。
で、情報が寄せられた。
やっぱ、12画面持っている、という情報だった。
こちらのサイトの情報は、市販の本の正誤表(というより、アップデート情報)だが、元の本が無くてもある程度知識があれば理解できる。
赤青緑各4プレーン、計12プレーンを使って 4096色を発色していたのがわかる。
ただ、FM-77AV はサブ CPU を持っていて、サブ側のメモリのほとんどが VRAM に割り振られていたので、メモリのスイッチ切り替えは1度だけでいい。
後の FM-77AV40 になると 26万色モードがあるのだけど、こちらは2回スイッチを切り替えて、18画面にアクセスする必要があった。
サブ CPU があるから実用的な速度が出たのだろうけど、大変な構造だ。
…と書いたところ、さらに追加情報。
専用の LSI を持っていて、線を引いたり矩形を塗りつぶしたりと言ったことが高速に出来たのだそうです。
さらには、FM-77AV には「多色」であることを活かしたビデオデジタイズ機能があって、ほぼ遅延なく 1/60秒で画像を取り込めた、とのこと。
こちらも、おそらくは専用 LSI に機能を搭載してたんでしょうね。
#ビデオ信号というのは CPU から見れば非常に速いわけだけど、VRAM から読出しが可能なので、同じように書き込むことも可能だったと思う。
画面まるごと取り込むときは、「元に書いてあった画像を壊さないように処理」なんて手間も不要だしね。
77AV の対比としての、X1 turboZ。
X1 / X1 turbo の後継にあたる第3のシリーズで、上位互換。
上位互換、ということは、下位機種からアップグレードする方法はない。
#同じシリーズなら、後付けの拡張ボード買ったら何とかなったりする。
FM シリーズは、CPU を2つもっていて、1つでは 64K しか扱えないメモリを、128K まで扱えるようにしてあった。
そして、片側 64K の中に VRAM を持っている。
X1 シリーズは、CPU は1つしかないのだけど、Z80 は 64K までのアドレス空間を、2セット持っていた。
正確に言えば、1つはメインメモリで、プログラムなどはそこに入れる必要がある。
もう一つは I/O 空間で、スペック上は 256本(8bitアドレス)しかないことになっていた。
しかし、Z80 のバグで 16bitアドレスを制御できた。
X1 では、このアドレス空間に VRAM を置いている。
ちなみに、FM で使われた 6809 はメモリマップド I/O ね。
メモリ空間の一部を I/O として使う。メモリも I/O も、CPU から見れば「読み書きできる外部デバイス」ってことで違いはない。
(実際にはメモリとデバイスは違うのだけど、その違いは外付けの LSI で解消してもらう。)
Z80 の遠い祖先は 4004 なのだけど、これは「ハーバードアーキテクチャ」だった。
プログラムとデータを厳密に区別してて、プログラム用とデータ用にメモリ空間が別れている。
Z80 に進化するまでに、プログラムとデータの区別は無くなるのだけど、やっぱり「2つのメモリ空間」は残された。
X1 はそれをうまく使って、Z80 1個で FM-7 並の 128Kbyte の空間を用意してあった。シンプルで美しい設計だった。
でも、先に書いたように 16bit アドレスで扱うには、Z80 の実装上の「バグ」を突く必要があった。
特別な方法(BC レジスタ間接アクセス)でないと使えない。プログラムが制約を受ける。
それに、I/O は RAM より遅いことが命令の前提になっている。
RAM なら 7クロックでアクセスできるのに、I/O空間だと 11クロックかかる。
つまりは、X1 は設計を見ると美しいのだけど、実用的には、あまり良くできていたと言い難い。
ただ、キャラクタという概念がなく、すべてグラフィックで1本化された(これはこれでシンプルで良い)FM-7 に対し、X1 はPCG(書き換え可能なキャラクタ)を持っていた。
PCG を使うと、高速にグラフィックを動かせるので、アクションゲームを作る前提では X1 の方が速かった。
「キャラクタ」なので、ドット単位に動かせない、重ね合わせないなど、いろいろと問題はあるのだけど。
さて、そこに持ってきて、FM-77AV に対抗して、4096 色モードを付けたのが X1turboZ になる。
バンク切り替えを含めて、12画面をアクセスする必要がある。
77AV には先に書いたように専用 LSI が作られたけど、turboZ にはそんなものはなかった。
ただ、X1 の時から、複数画面に「同時アクセス」することはできた。
全く同じものが書かれてしまうので、1ドットを書き変えることはできず、画面クリア位にしか使えないのだけど。
つまりは、X1turboZ は FM-77AV にスペック上は対抗していたのだけど、全然使い物にならなかったようだ。
X1turboZ と X68000 は同時発表だったので、比較機種が FM-77AV ではなくて X68000 だと思われてしまうと…スペック上もかなり見劣りしてしまう。
あまり売れなかったようだ。
さて、FM-77AV が専用 LSI を持っていた、と知った時に思ったのは「98 の EGC とどっちが先だろう」ということ。
調べたら、77AV の方が1年先でした。
98の EGC というのは、画面描画専用の LSI 。
98 は CPU が直接 VRAM にアクセスする構造だったのだけど、EGC に命令を与えると、簡単なことは超高速でやってくれた。
線を引く、四角を描く、なんてのは当然。円を描くことも出来た。
塗りつぶし(結構大変な処理だ)とか、画面スクロール(全画面ブロック転送)なんかも出来たみたい。
98 BASIC からはこれを使ってグラフィックを描くようになっていて、すごい速度なので「98スゲー」って思った思い出がある。
こういう「CPU 以外の力で VRAM に線を引いたりする」機能の元祖は、僕の知っている限りでは MSX2。
8bit 機だから 64K のメモリしか扱えない…というのは CPU が直接制御する場合の話で、MSX2 では 128Kbyte の VRAM が搭載されていた。
(当時は RAM が高かったので規格上は 64K でもいいことになってるが、事実上は 128K が標準だった。なお、画面表示 LSI 自体は、192K までのメモリを扱える)
MSX2 は、256x212 256色の画面を出すことができた。
FM77AV や X1turboZ に比べると解像度も色数も小さいのだけど、8色しか出せない機械が多かった中では十分綺麗な画面だった。
後継機の MSX2+ では、VRAM はそのままの容量で 19268色を出せる。
ただ、これは AMIGA の 4096色モードと同じで、周囲のドットと色情報を共有するので好きなように絵が描けない、という制約がある。
さて、一応は先日の話の続きなので、元の話を思い出すと、「68000 はグラフィックに強かったのか」って話だ。
今日書いたのは、基本的に 8bit 機。98 の EGC の話題も少し入ったけど。
68000 は大きくて連続したメモリ空間を持っていたからグラフィック向きだった、という話に対し、小さくて非連続でもグラフィックに強い機械はあった、という反証を集めた形になる。
見てもらえればわかるように、周辺 LSI が強力だったりするのが前提だ。
MSX2 に至っては、VRAM を全部画像 LSI 側で持っている。そのため、アドレス空間 16bit の制約すらなく、192K まで持てる。
CPU の話をしているのに周辺 LSI 前提では比較にならない、と思うだろうけど、AMIGA だってグラフィックに強いのは画面関連の LSI が強かったからだ、というのは先日書いた通り。
逆に、X1turboZ は Z80 の制約の中だけで頑張っている。
そのために書き換えが遅すぎて「表示できる」というだけで、実用にならないのだけど。
「表示できる」だけだというのは、実は X68000 だってそうで、65536 色モードはあまり実用にならなかった。
実用になる圧縮アルゴリズムができて、やっと「観賞用」程度にはなったけど、それでも圧縮が効きやすいアニメ絵だけ。
しかも、1bit を圧縮時のフラグに使うので、32768色でしか保存できない。
JPEG が国際規格として制定されたときに、X68000 で JPEG 表示プログラムが作られたけど、非力な 68000 10MHz では1枚の表示に数分かかった。
後で(計算精度を割り切って)劇的に改良されたけど、1枚10秒程度。
そのソフトが作られたころには、もう Window はブームになっていて、98 や IBM でも多色表示ができた。
とても「X68000 は色数が多かった」なんて言えない。
X68000 がグラフィックの扱い…特にゲームに強かったのは、グラフィックを扱える広大なメモリ空間があるからじゃなくて、強力なスプライト LSI を搭載したからだ。
これもまた、LSI が強かったというだけ。
じゃぁ、現代の PC がどうかと言えば、CPU は高速化したけどやっぱり「強力な LSI」に助けられている。
そいつに「線引いて」とか「この領域コピーして」とか、「この3Dモデルレンダリングしといて」とか頼んでいるわけで、MSX2 の頃から変わってません。
いつの時代だってグラフィックは CPU の手におえないほどのリソースなのだ、ということかもしれない。
グラフィックに強い CPU なんてないのかも。
(グラフィックチップを内蔵してしまった Core i シリーズ、なんてのはあるけど)
同じテーマの日記(最近の一覧)
関連ページ
68000はグラフィックに強かったのか【日記 15/05/21】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 【とおりすがり】 基本的に表面だけなぞるからおかしいことになってるのだと。8ビットプロセッサでは4096色はデータ量自体が不釣合いなのでどうせがんばったところで動きのある処理なんて出来るわけが無かったです。FM77AVはパレットの設定によってプレーン合成の手段として使えたことの方が動きを重視した場合、有意な構造だったと思います。ゲームしか見ないならコストが一番大きいのは重ね合わせなので、動きだけならスプライト最強の結果しか出ないですね。 (2017-06-20 20:29:11)【とおりすがり】 )って程度で、ソーサリアン辺りならX1の方が88よりマシだったはずです。88だって背景の重ねあわせが処理として圧し掛かれば言うほど早くは無いです。書き換え範囲や、望む挙動によるので全体的におかしい話になってますね。 (2017-05-13 21:23:42) 【とおりすがり】 そもそも、PCGだけでゲームなんて実装無かったと思うけど。PCGを背景にキャラクタをグラフィックにと描くことで、重ねあわせを軽減できているので言うほどは遅くなかったです。シルフィードみたいなVRAMを書き換えるものとか、ライン単位でのスクロールみたいなことは素直には無理(最近やってしまった人がいますが (2017-05-13 21:21:14) 【vandy1】 turboZユーザーでしたが、絵を描いたりレイトレしたりビデオ編集したり、ずいぶん楽しみましたけどね。何をもって実用的とするか?によるかと。88とMSX以外どれも売れたと言い難いご時勢で、ことVRAM構造の話に続けて「売れなかった」と言われるともにょるものが…(^^;(学生時代、周りにも2名ほどZユーザーがいました) (2016-08-28 21:08:06) 【うしとら】 興味深い記事でした。で、FMユーザーとして気になった点を。「FM77AV」が正解で、「FM-77AV」ではないです(よく間違えられますが)。またビデオデジタイズはオプションのビデオディジタイズカードが必要です(参考:http://fm-7.com/museum/hardware/options/options-6.html) (2016-05-31 06:19:31) |