[1chipMSX改]

V9958調査資料 〜表示系〜

V9958 は、NTSC出力・PAL出力の2種類の出力を持っており、1chipMSX の V9938互換回路は VGA出力機能を持っている。

PC の VGA 出力は 60Hz をサポートしており、NTSC のタイミングと近いため、NTSC 用のタイミングで少し細工をすれば
表示を得られる。
PAL の場合、50Hz になってしまうため、50Hz をサポートしていない VGA 出力で不都合が出る。
(もしかすると 50Hz-VGA をサポートしているモニタはあるかもしれないが、サポートしていないのが一般的である。少なくとも私の所持するモニタは対応していない)
VGA 出力は、NTSC出力の走査線をちょうど2倍した感じで出力すればいいため、1chipMSX では2ライン分の表示保持用メモリ
を確保して、一つは更新用、一つは表示用として、交互に役割を入れ替えながら利用している。
表示用は2回読み出されて、2ラインに垂直拡大される。表示用が2回読み出されている間に、更新用は1回更新される。
これにより、2倍速の VGA との速度差を埋めて正常な表示を得ている。

21.477MHz のクロックで動作する場合、1ラインは NTSC, PAL ともに 1368clk となる。
このうち、1024clk が MSX の表示領域に使われ、他は画面外の領域やブランキング期間(バックポーチ、シンク、カラーバースト、フロントポーチ)である。

インターレースの場合はフィールドの切り替えがラインの中央になり、VGA 出力の場合は2倍速(つまり 1368clk の半分で1ライン出力)であるため、
1368clk の半分をカウンタの繰り上がり単位とすると都合がいい。
その単位でフィールドの切り替わり目を示したのが下記の図である。



このような信号を生成するために、基準となるカウンタが必要となる。
カウント周期が早いものから実装し、その循環タイミング信号を使って、より低速なカウンタをインクリメントするように構成することで
カウンタ自体を非常に単純に構成できる。
なぜならば、カウントを循環させる折り開始地点と、別のカウンタをインクリメントする地点の判定を共通の回路で処理できるため、
判定演算回路が少なくてすむからだ。
そのように考慮して構成した回路を下記に示す。



階層の出力にあたる信号は、必ず FF出力をダイレクトに出す。
多少の分岐くらいなら問題ないが、ロジックが入るとその分微妙な遅延が発生する。
接続側の回路設計時にそれらを意識せずにすむように、必ず FF出力を出力していると決めておく。

出力信号は、H_CNT, V_CNT, RIGHT_SIDE, FIELD の4本あるが、H_CNT は水平位置を決める基準、V_CNT は垂直位置を決める基準である。
ただし、V_CNT は、0.5ライン単位でインクリメントしているため、画面の中央から右側であるかどうかを判断できるように RIGHT_SIDE 信号を
用意している。これは、たとえば Hブランキング期間を決めるのに使われる。
FIELD はフィールド番号であるが、インターレース時の V_CNT から走査線番号へ変換するための補助情報であり、また StatusRegister #2 に
出てくる VR ビットを決めるための情報として使われる。

[▲上へ]