2015年05月21日の日記です


68000はグラフィックに強かったのか  2015-05-21 12:24:44  コンピュータ

X68kのページに、当時 CPU 68000はグラフィックに強いとされていた、と言うようなことをちらっと書いていたのだけど、理由が知りたい、という人がいた。


このページ、20年近く前に書いたものなので、当時は当たり前だったことが全く書かれていない。

今となってはわかりにくいのは事実で、補足しようと思った。


でも、いろいろと調査すると、どうも 68000だからグラフィックに強い、ということもなさそうな印象も受ける。


結論としては「当時は雰囲気的にそういわれていた」程度になってしまうのだけど、一応の説明をしておこうと思う。



▼前提条件


前提として、X68k の開発が開始されたころは、当時はインテルは 80286 を発売していて、80386 はまだ出ていないと思われる。

(X68k 発売時には出ているのだけど、おそらく設計時点では存在しない)


68020 は設計時に出ていたかどうか微妙。

もし出ていても、68020 は 32bit 設計で、まだ 8bit 機も販売されていた時代にいきなり 32bit 機を作ることはできなかったと思う。


他の CPU もあっただろうけど、メジャーどころは 68000 か 80286 か、ということになる。



▼VRAMの構造


わかりやすいところで、IBM PC/AT で採用された VGA のメモリ構造を解説しよう。

当時の、一般的な VRAM (画像表示用 RAM)の構造だと思う。


VGA では、640x480 ドットで 16色を扱えた。

1ドットは 4bit ということになる。すると、150Kbyteのメモリが必要だ。


VGA では、横8ドットを 1byte で表現していた。

これは、VGA の前身となる CGA (IBM PC で使われた規格)で使われた方式と、ある程度互換性を持たせるためだ。


8ドットを 1byte で表すと、点の有無しか表現できない。白黒だ。

そこで、この白黒画面を4枚用意して、それぞれが「色フィルタ」だと考えて重ね合わせる。


赤・青・緑・そして明るさ。この4枚を重ねれば、16色を表現できる。


この場合、1画面は 37.5Kbyte となる。



VGA には、もう一つの画面モードがあった。こちらは、1ドットを1バイトで表現するため、256色が出せる。

ただし、画面解像度は 320x200 になってしまう。全部で 64000 ドット。64Kbyte 弱のメモリが必要となる。



16色モードのように、白黒画面(プレーン)を重ねる方式を「プレーナ方式」と呼ぶ。

1バイトが横方向に並ぶから、水平型 VRAM、という言い方もある。


256色モードのように、1ドットを必要なビット数で表現する方式を「パックドピクセル方式」と呼ぶ。

複数ビットが1ドットに(奥行きとして)並ぶから、垂直型 VRAM 、という言い方もある。



X68k では、テキスト画面として水平型を、グラフィック画面として垂直型を使っていた。




さて、グラフィックを扱うのにどちらがやりやすいかと言えば、パックドピクセル方式の方だった。

プレーナ方式は、省メモリというメリットはあるのだけど、グラフィックを扱う際には面倒なのだ。


省メモリ? どういう構造で持とうが、メモリの量は同じでしょ? と思ったあなたは鋭い。


実は、プレーナ方式は 8bit 機で主に使われていたやり方だ。

PC-8801 の場合、640x200 8色のグラフィックが扱えたが、計算するとこれだけで 48Kbyte のメモリが必要となってしまう。


8bit 機では、メモリは全部で 64Kbyte しか扱えない。その 3/4 をグラフィックだけに取られるのだ。


そこで、プレーナ方式が活用される。

メモリ上は、16Kbyte の「白黒画面」しか CPU から見えない。

ただし、この白黒画面を、CPU から制御できるスイッチによって切り替えて、3画面持つのだ。


(画面のメモリは当然 48Kbyte 持っているが、CPU からは 16Kbyte 分しか見えないことになる)



切り替えればよい、という点では、別にパックドピクセルでメモリを途中で切り替えたって構わない。

ただ、その場合は画面の途中で不連続な場所が現れることになる。線を一本引くだけで、途中で切り替えるタイミングなどを考慮せねばならず、プログラムは面倒になる。


それよりは、色ごとに画面がわかれていたほうが、「まだまし」なのだ。

ベストではないけど、限界を考えればベターな方法だった。


2015.5.29 追記

当初、FM-77AV の VRAM 構造はどうだったのだろう、と書いておいたら、教えていただいた。

その後も情報が集まり、書くと長くなりそうなので、別記事にまとめました。

(追記終り)



▼メモリの連続性


さて、VGA ではハイレゾ画面でプレーナ方式を使い、ローレゾ画面でパックドピクセル方式を使っている。

ハイレゾ画面は 150Kbyte の容量になってしまうため、「省メモリ」の必要性があったのだと思う。


8bit じゃないのになんで? と思う方もいるだろうけど、8086 は 8bit との互換性を重視した設計で、80286 になっても、IBM PC では 8086 互換モードで動いていた。


8086 では、アドレスレジスタが 16bit しかない。つまり、64Kbyte までしかアクセスできない、8bit と同等の性能しかない。

ただし、「セグメントレジスタ」というやはり 16bit のレジスタがあった。


このセグメントレジスタは、16byte 単位でメモリ内のアクセスの起点を決められた。

アドレスレジスタは、この「起点」から 64Kbyte の範囲をアクセスできる。

この 64Kbyte を、8086 では「セグメント」と呼ぶ。


全体としては、1Mbyte のメモリを扱えるのだけど、プログラム単位では 64Kbyte で制限がある、と考えてもいい。


このため、VGA のハイレゾ画面は、プレーナ方式を使うことで 37.5Kbyte という「セグメント内に収まる」サイズに制限している。

ローレゾ画面も、ハイレゾの縦横半分ではなく、縦方向をさらに縮めることで 64Kbyte という「セグメント内に収まる」サイズに制限している。


VGA の画面構成は、制限内でどうやればよいかを考えた、良く工夫されたものなのだ。


でも、これは逆に、制限がきついという事実を突き付けているだけにも思える。




X68k の場合、テキスト画面は 1024x1024 で16色だった。

(画面表示範囲は最大で 1024x848)

これだけで、白黒1画面は 128Kbyte に達する。


グラフィック画面では、1024x1024 では同じく 16色、512x512 だと 65536色だった。

こちらは、512Kbyte になる。


どちらも、8086 のセグメントの中ではアクセスできない。


こうしたメモリを連続して扱えるのは、68000 の強みだった。



当時は、色数と解像度が急激に上がっていった時代であり、それは大量のメモリを扱わなくてはならない、ということに他ならなかった。

80286 にはそれが難しく、68000 なら可能だったことが、「68000 はグラフィックに強い」と言われる一因だったとは思う。


(80286 も、互換モードではなく性能を引き出せる「プロテクトモード」にすると、セグメントレジスタが 24bit となり、16Mbyte のメモリの好きな点を示せるようになる。

 アドレスレジスタは 0 に固定し、セグメントレジスタを動かす…というようにすれば、非連続ではなくなるだろうが、セグメントレジスタはアドレスレジスタよりも扱える命令が少なかった。

 また、80286 は 8086 の資産が扱えるのが利点であり、プロテクトモードで動かすのであれば、資産のない 68000 を使ったって同じだった)



▼アドレス計算


グラフィック画面というのは、巨大な2次元配列変数と変わらない。


パックドピクセルであれば、Y * width + X + BaseAddr でアクセスすべきメモリを求めることができる。


プレーナ方式であれば、8ドットが1バイトにまとめられるのでもう少しややこしい。

その上、必要な分だけ他の画面にもアクセスしないといけない。

(この点では、3次元配列になる)


しかし、2次元配列のアドレス計算が必要、という点は、どちらの方式でも変わらない。


上に書いたような式程度なら、80286 でも 68000 でも難なく計算することは出来る。

でも、そこを起点にさらに周囲のアドレスにアクセス…などとなってくると、話はややこしくなってくる。


68000 は、アドレスレジスタを 8本持っていた。80286は、目的別の(自由に使えるわけではない)アドレスレジスタ 3本だけだ。

また、メモリアクセスの際のアドレス計算(アドレッシングモード)も、68000 の方が豊富だった。


ここら辺もまた、68000 がグラフィックに強いとされた一因だと思う。



▼反証:AMIGA と Mac


…と、ここまでなら「68000 はやっぱりグラフィックに強かった」で終わりなのだけど、最初に書いた「理由を知りたいと言っている人」と話をしているときに、AMIGA や Mac の VRAM はどうなんですかね、という話になった。


先に書いておくと、その人は別に反証を出したわけではなくて、X68k の話で納得していたようだ。

でも、僕は AMIGA をそれほど知らなかったので調べているうちに、これは反証を出されたのかな、と思ったのだ。



AMIGA は、CPU に 68000 を使用し、「グラフィックに強い」とされていたマシンだ。

テレビ信号との親和性を重視した設計で、画面をスーパーインポーズできたりする。


テレビ業界でも編集作業などに使われ、当時はウゴウゴルーガというテレビ番組でもリアルタイムに CG を動かすのに利用されて話題になっていた。


#あらかじめ用意してある(プリレンダリングの)CG を動かしているだけだけど、スタジオで子供と掛け合いをしながら、すぐに表情などを動かしていたのが当時としては驚きの技術だった。


以下、僕は AMIGA を使ったことは無くて、当時の雑誌で読んだ記憶と、今ネットで調べた情報で構成しているので、間違いがあるかもしれないと断っておきます。




AMIGA の VRAM は、プレーナ方式なのだそうだ。

そして、当初のグラフィック性能は、最大で 360x576 32色だった。


実は 4096色モードもあるが、基本は 16色モードになっている。

追加で2プレーン持っていて、これを特殊用途に使い、周囲の色信号を共有して見た目の色数を増やしている。


ドットごとに自由に色を指定できない MSX2+ の自然画モードみたいな感じ。


後継機では、720x576 を扱えるようになったけど、いずれにしても1プレーンは 64Kbyte 以内に収まってしまう。

ということは、68000 でなくても扱えるね。



AMIGA は CPU がアクセスできる、メインメモリ空間に VRAM を置いている。

これは別に当時としては珍しくない。


でも、ビデオコントローラーにアドレスをセットすることで「どこにでも」VRAM を確保できたのが珍しい。

普通、VRAM は最初からアドレス固定で与えられるものだったのだけど、好きな場所を VRAM にできる。


これにより、メモリの許す限り裏画面を作り、高速に切り替えることが可能になる。

ウゴウゴルーガなどでリアルタイムにアニメを表示していたのも、こういうテクニックが使えたからのようだ。


たしか当時の Oh!X で読んだ記憶では、「走査線を境に VRAM を切り替える」ようなこともやっていたとか。

それぞれの VRAM には全く違うことを描いてあっても表示できるわけで、走査線で分割されるマルチウィンドウ環境が実現できると書いてあったと思う。


これを見ると、AMIGA がグラフィックに強かったのは「68000 だから」ではなくて、「チップセットが強力だったから」だ。



Macintosh も重要な役割を果たしたと思うが、最初は白黒で 512×342 という解像度だった。

22Kbyte 程度なので、こちらも 68000だからグラフィックに強い、という感じではない。


特段ハードウェアが強力だったわけでもない。

でも、ソフトウェア、特にグラフィックを扱う内部ルーチンである、QuickDraw は強力だった。

(実は、白黒表示の初代Macから、内部の QuickDraw はカラー対応だった)


その、強力なグラフィックを使って、文字を使わない OS 操作を考案したプロジェクトチームもすごい。

実際のグラフィック性能の問題ではなく、操作している映像は衝撃的だった。


つまり、Mac がグラフィックに強かったのは「68000 だから」ではなくて、「プログラマの腕や、チームの発想がすごかったから」だ。



▼反証:演算速度


実は、68000 は、同クロックの 80286 と比べると半分程度の処理性能しか出ない、という事実がある。

そして、同時期の出荷チップの最大クロックを比べると、80286 は 68000 の半分よりも高クロックに対応していたようだ。


商売にするのはコストなどの問題もあると思うが、値段を考えなければ 80286 の方が性能が良かった、ということになる。


グラフィックは、大量の処理を必要とするもので、処理性能が高いほうが有利ではある。


連続したメモリが必要な X68000 のようなハードウェア構造ならともかく、AMIGA や Mac のような構造なら、80286 の方がグラフィックを高速に描画できた可能性もある。



余談になるが、X68000 では、65536色モードでも、16色モードでも、同じ方法でアドレス計算できるようにしてあった。


これは、プログラムは楽になるのだけど、16色モードでは 16bit を書き込んでもハード的にマスクされてしまって 4bit しか書きこまれない。

連続したメモリに高速に書き込むテクニックがあったのだけど、16bit のうち 4bit しか使われないので速度が上がらない。


ただでさえ遅い 68000 で、さらに遅くなってしまうためにゲームなどではグラフィック画面は使いづらかった。

68000 だからグラフィックに強かった、なんてとても言えない。


#そのために、プレーナ方式のテキスト画面があるともいえる。

 スプライト BG 画面ならさらに高速に書き変えられるので、ゲームではこちらが主に使われた。



▼まとめ


ここまで考慮すると、自分で書いたことだけど「68000 はグラフィックに強い」と当時言われていたことの根拠は何だったのかな、と悩んでしまう。


X68000 を見る限りでは、大量の VRAM を積んでいて、セグメントなしにアクセスできることは、確かに強みになっている。



でも、「68000はグラフィックに強い」という雰囲気を作り出したのは、おそらく AMIGA と Mac。

どちらも「周辺チップセットが強力」だったり「プログラマが凄腕」なだけで、68000 だからグラフィックが優れていたわけではない。



というわけで、最初の結論が導かれる。


当時の言葉は、特に根拠があったわけではなく、雰囲気で言われていただけじゃないのかな。

AMIGA や Mac のような「グラフィカルなマシン」が 68000 だったから、そういう雰囲気が生まれただけ、というように思う。



ちなみに、話の間 8086系としては 80286 を前提としていたけど、80386 以降はセグメントは撤廃された。

(8086 互換モードでは使える)


80386 からはメモリを自由自在に扱えるわけで、グラフィックにも強くなった、と言える。

実際、Windows も 3.1 日本語版以降は 80386 以上でないと使えなかった。


80386 を前提として設計された FM-Towns は、十分にグラフィックに強いマシンだった。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

X68kのハードデザイン

素人プログラマから見たX68k【日記 23/04/10】

8bit 時代のグラフィック【日記 15/05/29】

別年同日の日記

03年 楽園を求めて…

05年 お掃除ロボ

12年 姪の結婚式

18年 フェスとフェスタと祭りと開放日

19年 あーすフェスタ

20年 Chromebook を買ったのだけど

23年 ディスクイメージ公開


申し訳ありませんが、現在意見投稿をできない状態にしています

【ACTH】 書き込み元データを考慮しないと。キャラアニメしたりすると元データのパターンは軽くVRAM容量を凌駕する。この時に68000にリニアアドレスが物を言う。つまり、多彩なデータを書き込めるのが6800の真の強み。 (2017-10-03 11:11:09)

【ACTH】 PC80系SR以降や (2017-10-03 11:06:03)

【wasi】 私自身は8086系しか触れたことがないのですが、68000のメモリ空間の広さとレジスタ幅が32ビットで汎用レジスタが8本もあったのは、プレーナー構成のVRAMの場合、ピクセル単位での移動・合成操作などに大いに役だったのではないかと想像しますが如何でしょう。 (2017-08-16 21:20:46)

【meridianstar】 私も以前X68000XVIを所有しており、懐かしく記事を拝見しました。確かにMC68000はグラフィックスに強いというより、メモリマップドI/Oと豊富なアドレッシングモードでハードウェア制御に向いているCPUという感じがします。でも、X68000もMC68000がグラフィックスに強いと思わせるのに貢献していると思いますよ。ただ、実際のところX68000がすごかったのはシャープ製カスタムチップである、CRTコントローラ、ビデオコントローラー、スプライトコントローラーだった訳ですが(笑)。ほとんど当時のアーケードゲーム基盤をパソコンにしましたみたいな感じですからね。 (2016-03-10 21:39:52)

【1】 68000はグラフィックに強いハードウエアを作りやすいcpuだったと言うことは言えるのでは (2015-06-02 02:11:55)


戻る
トップページへ

-- share --

3006

-- follow --




- Reverse Link -