211109 AXエミュ製作 [12]JEGA 640x480モードのピクセルクロック
写真はJEGA Video Adapter YS-90047H by htomari (CC BY-SA 2.0ライセンス)より。
オリジナルのVGAにはピクセルクロックの生成用に25.175MHzと28.322MHzの2つのオシレーターがあって、画面モード(ざっくり言うと縦のライン数)によって使い分けられている。640x480の画面モードなら480ラインになるため、この場合は25.175MHzが使われている。
VGAの前身であるEGAの場合、DOSBoxのソースコードを見た所は14.31818MHzと16.257MHzの2つがクロックソースに使われているらしい。
EGA上位互換のJEGAの場合はどうだったのか。クロックが高い方の16.257MHzを用いたとしても、640x480という比較的高い画面解像度に用いるには水平同期周波数や垂直同期周波数(リフレッシュレート)が低くなり、当時のCRTディスプレイでは画面がフリッカーして見づらくなる可能性がある。
実際のJEGAボードの写真を見ると16.257MHzと25.175MHzの2つのオシレーターが使われている。14.31818MHzはボード上に見当たらないが、基板のパターンを追いかけるとISAバスのB30ピン (OSC) に繋がっているように見える。オリジナルのEGAボードもボード上には16.257MHzのオシレーターしかなく14.31818MHzはバスから供給されるクロックを使用しているらしい。
まあとにかく、JEGAボードでは25.175MHzというオシレーターが追加され、480ライン時はこれを使用している可能性が高いことが分かった。問題はこれをEGAチップから制御できるかという話だが、JEGAボードに使われている82A436にはMiscellaneous Output Register (3C2h) にClock Select 0とClock Select 1というビットがあって、これはチップのCLKSEL0, 1の2つのピンのオン・オフと繋がっているらしい。このピンにマルチプレクサ (74153など) を介して最大4種類のオシレーターを選択使用することができる。
実際のJEGAボードではビデオBIOSでオシレーターを切り替えるんだろうが、DOSBoxではVGA_SetupDrawingのコードで480ラインモード時に25.175MHzを使用するように改変すればいいだろう。