マルチモニタモードについて云々

6/29 2000
8/2 2001 更新
5/7 2002 更新
5/26 2002 更新

過去の駄文が未だに引用されているようなので注意を喚起しておきます。
過去の内容はすでに情報古いです。ドライバがらみの障害の多くはドライバの更新によって解決されています。また、WindowsXPのマルチモニタ環境は2000、WindowsMeのマルチモニタ環境は98に準じますが、古いカードの場合OS付属ドライバがなくなっていることがあります。
筆者がマルチモニタを使い始めた時期には単チップでの2画面出力機能はお粗末で、タスクバーが2画面にまたがるような救いがたい仕様が横行していました。筆者はDirectDraw(3D含)フルスクリーン環境にて独立した解像度の別スクリーンを持ちたいという願望からマルチモニタ環境を構築しました。chatなどのActiveにする必要はないが、常時表示しておきたい物をスレーブ側に表示する必要があり、これは単チップの物で行うとスレーブ側が止まってしまう問題がありました。現在単チップで片側をDirectDrawフルスクリーン、もう片側をWindowsGDIによる通常画面とし、DirectDraw側をActiveにしたとき通常画面側が静止してしまわないかどうかは試していません。PCIでスレーブ動作するセパレートRAMDACのカードを抱えているので単チップで2画面にしたいという願望は薄いのです。
よって、単チップで2画面の用法についての詳細な話はこのサイトでは行いません。
DVD-Max,TheaterModeなどの特殊機能に関しても、筆者はPCでDVDを見ませんので検証しません。webサイトはたくさんあるのですから、もっと詳しく語れる人のサイトを見てもらえばよいと考えます。
本題の複チップマルチモニタ環境について軽くまとめてみます。
原則として、OS付属ドライバ(Windows2000/XP、Windows98/Meはあてにならないので各OSのdisplay.txtを参考にしてください)や最近書かれたドライバはマルチモニタ環境を許すように書かれています。VGA-BIOSを含めたチップの初期化構造などから、マルチモニタ環境を作れない場合がある、がもっとも近い表現だと思います。
初期化に関しては、Winsows98/Me系はOS起動途中にカード上のVGA-BIOSを使用して行う設計思想となっており、逆にWindows2000/XPはVGA-BIOSに依存しない作り方になっています。BIOSのPOST画面を表示しない側のカードは、98/Me系ではVGA-BIOSをEnable、2000/XP系ではVGA-BIOSをDisableにするとうまく行く傾向があります。
未だに最新OS用ドライバをチップベンダが起こしているようなPCIのカード群はおおむねマルチモニタ用として使用できます。そうでない物はHCLなりOS付属ドキュメントを参照してください。マルチモニタ用PCIカードは、おそらくセパレートRAMDACの遺物か最近の多機能高速なカードのどちらかに需要が偏ると思いますので、半端な時期の、対応が怪しいカード群について調べる必要をあまり感じません。
セパレートRAMDACの遺物は、S3チップのものは2000/XPではスレーブ動作しないようです。Weitekは2000では偶然じみて動くことがありますが、XPにはドライバがありません。#9はどのチップも2000/XPにてBIOSをDisableにすると問題なく動作します。T2R/T2R4は98/Meにて#9製ドライバを使用し、VGA-BIOSをEnableとすることでスレーブ動作しますが、ドライバの完成度には難があります。Matroxは古いチップ用の新しいOS用ドライバを精力的に起こしているベンダなので、問題なさそうに見えますが、検証はしていません。

(追記)
少なくともHydraVision(ATi RADEON8500)では1側画面をDreactDrawでフルスクリーン表示とし、2側をGDI表示としたときに一方の描画がもう一方に大きな影響を与える現象は見られなかった。
これはPCIカードを追加する、複チップマルチモニタではよく起こる問題で、これが起きないだけでもHydraVisionは複チップマルチモニタより優れていると言える。他の単チップマルチモニタ機能(DualHead,nViewなど)はどうなのかはまだ調べていないが、同様の能力があるのなら、正直、複チップマルチモニタなど不要ではないかと考えはじめている。
単チップマルチモニタはチップの設計だけでなくソフトウェア部分による改良の余地が大きく、ドライバのバージョンによって別物と言っていい振る舞いをする事は予想に難くない。単チップマルチモニタについて詳しいwebでもあれば私がわざわざ調べる必要はないのだろうが、いくらか情報を集めてみて不足があるようなら、単チップマルチモニタについて書き起こしても良いのではないかという気がしてきた。
もっとも、私は今日使い始めたわけで、そんな奴に書けることなど大したことはないだろうが。

以下、旧文。参考程度にとどめてください。

 APIによってマウスカーソルがロックされる/されないについての記事があったが、APIのみに依存しているものではないようなので削除した。

 当webは基本的にPC/AT互換機とPC-9821しか相手にしていないので、マルチモニタについて書くと言ったら、Windows98、WindowsNT4.0、Windows2000に関する物になる。筆者はそれほどNT4環境を使わないため、NT4に関しては(実現可能なマルチモニタ環境の選択肢が狭いらしいことを含めて)特に書くことがない。ではなにを書くかというと、Windows98とWindows2000のものになるわけだが、筆者にしてもこの分野は勉強中であり、随時この記事は更新されうることをお断りしておく。
 まず、Windows98のマルチモニタに関して、プライマリとして起動するビデオカードには特に制限はない。OS起動中にセカンダリ以降のビデオカードが「VGA-BIOSを利用して」初期化されることが期待されている。セカンダリ以降のビデオカードにデスクトップを割り当てるためには画面のプロパティでその旨をOSに通知してやる必要があるわけだが、ここでどうやら二つの条件が必要となるらしいことがわかった。
 条件の一つ目は、ドライバが「セカンダリ以降として動作可能であるように記述されていること」である。MicrosoftがWindowsに標準添付しているS3やMatroxなどのカードのドライバや、まじめにWindows98用ドライバを書く気力と能力があるベンダのドライバはこの条件をクリアする。
 二つ目は、「その時点ですでにビデオカードが初期化されていること」である。また、ビデオカードの初期化はWindowsが起動する前のみ可能「らしい」ことはわかっている。つまり、ボードのVGA-BIOSがEnableとなっていて、かつ優先順位の関係でVGA-BIOSがロードされていなかった状態のみ、起動時にセカンダリとして初期化されることになる。ややこしい書き方をしたが普通のビデオカードはなにも考えなくてもこうして初期化される。なにが困るかというと、「VGA-BIOSをDisableにしてある」または「VGA-BIOSを搭載していないビデオカード」はドライバがセカンダリとして動作可能なように書かれていても、初期化できない故にセカンダリとして動作させられない、またはWindowsが暴走してしまわれる、ということに「なることが多い」と思われる。まあ、VGA-BIOSが搭載されていればこれに関しては問題はない。
 さて、次はWindows2000だが、これのマルチディスプレイは起動時にどのビデオカードのBIOSを利用して起動したかということでプライマリのカードが決定されるわけではない。どのカードであってもWindows2000用として使用可能ならばプライマリとしては使用できる(と思われる)。セカンダリとしての条件は上のWindows98同様にドライバの対応がまず第一である。対応に関しては、ATi、#9、3dfx VoodooBanshee、3DLabs PERMEDIA2が標準対応で、nVidiaのリファレンスドライバなども対応している。
 プライマリとは起動に使用されたカードを示すための便宜的な言葉で、OS上で優先的に使われる(DirectXで使用される)カードは切り替えられることに注意。このため古いプライマリ専用カードでも、メイン側のカードがセカンダリになる事が出来るなら特に問題は生じない。
 プライマリ、セカンダリという言葉を同じ意味でマスター、スレーブと呼ぶこともある。特に表現の統一などに注意して書いているわけではないので、注意して読んでいただけると幸いである。
 簡単に見えただろうか? 困ったことにWindows2000のマルチモニタ環境には根深い問題があり、特にWindows98のマルチモニタ環境との併存において支障を来しやすい問題が隠れている。
 第一に、Windows2000は根本的にビデオカードがBIOSを持たないことを期待している節がある。ビデオカードによっては、BIOSをDisableにする(物理的に引き抜いたりはがしたりSleep状態にしても良い)か自らのVGA-BIOSを使用して起動しない限り、頑としてセカンダリになろうとしない物が存在する。たとえば、#9 Imagine128 S1/2,Revolution3D/4、ATi Mach64GXなどが該当する。これらはBIOSをEnableにしたままセカンダリとして動作させようとすると、デバイスマネージャで「!」マークを出し、Code10というエラーを報告する。
 第二に、Windows2000は同じ系統のドライバを利用するビデオカードが二枚以上存在することを認めない場合がある。たとえば、RIVA-TNT以降の共通モジュール化されたnVidiaドライバまたはその派生品を利用する製品は一つのシステムで一枚までである。たとえばCanopus SPECTRA7400DDRとCanopus SPECTRA3200PCIとをプライマリ/セカンダリとして使用することは様々なドライバを駆使しても不可能だった(今は出来るようだ)。
 これらから発生しうるトラブルとして、Windows98ではプライマリから、Windows2000ではセカンダリから起動しないと望むマルチモニタ環境とならない、というものがある。何度か解決を試みたが定性的に解決可能な方法は見つけられなかった。環境を構築する手間を考えるとマルチブート環境は片方の環境のみが多く使われ、もう片方は緊急用などになる気もするので、それほどニーズのあることでもないかと諦めることになる(全然根本的な解決になってないけど)。

Return2Menu