NEC 7220A (GDC) SYNCコマンドに関する説明の矛盾
PS/55についてディスプレイ表示フォーマットの比較表を作ろうとして、PC-98で使われている24 kHzモードがどうだったか疑問が生じた。ミリ秒・マイクロ秒といった時間単位でのざっくりしたパラメーターは知っていたが、実際にディスプレイコントローラー μPD7220A (GDC)に入力されているパラメーターは知らなかったので調べていた。
GDCではRESETまたはSYNCコマンドに続いて入力される8バイトのパラメーターで表示フォーマットが決まる。この内容はGDCのマニュアルを参照すれば分かるが、今さらその資料を入手するのは難しい。Webで入手できる情報では、GDCの設計者である小口哲司氏がWebに公開している資料に掲載されている。
→ Tetsuji Oguchi - Publications (Japanese)(トランジスタ技術1984年2月号 p.358)
データはビット単位で区切られていて、P2からP8の7バイトで表示フォーマット(水平同期・垂直同期のタイミングなど)が決まる。
DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | |
---|---|---|---|---|---|---|---|---|
P1 | 0 | 0 | Chr | Flash | Interlace | DRAM | Grph | Shrink |
P2 | Characters in Row | |||||||
P3 | Vertical Sync (L) | Horizontal Sync | ||||||
P4 | Horizontal Front Porch | Vertical Sync (H) | ||||||
P5 | DS | PH | Horizontal Back Porch | |||||
P6 | VH | VL | Vertical Front Porch | |||||
P7 | Lines per Frame (L) | |||||||
P8 | Vertical Back Porch | Lines per Frame (H) |
PC-98の24kHzモードにおけるGDCマスターに入力される初期値は、np2/gdc.c at master · MaddTheSane/np2 · GitHubのdefsyncm24という定数の通り。この値は私が抽出した実機ROM (PC-9801F) にも出てくることを確認している。
static const UINT8 defsyncm24[8] = {0x10,0x4e,0x07,0x25,0x07,0x07,0x90,0x65};
これを先のパラメーターに当てはめていく。いくつかのパラメーターはこれに1または2を足した数字が実際の表示フォーマットにおける値になることに注意する必要がある。
- Characters in Row = 4Eh + 2 = 78 + 2 = 80 characters
- Horizontal Sync = 7 + 1 = 8 characters
- Vertical Sync = 8 lines
- Horizontal Front Porch = 9 + 1 = 10 characters = 3.800μs
- Horizontal Back Porch = 7 + 1 = 8 characters = 3.040μs
- Vertical Front Prch = 7 lines
- Lines per Frame = 190h = 400 lines
- Vertical Back Porch = 25 lines
ここでおかしいことに気付く。PC-98ではピクセルクロックが21.0526 MHzかつ1文字の幅は8ピクセルであることから、上記のパラメーターを時間に換算した値を右に併記したが、この数値はPC-9800シリーズテクニカルデータブック HARDWARE編(アスキー、1993年)では水平同期のフロントポーチとバックポーチが逆になっている。その表記がテクニカルデータブックの上だけならアスキーお馴染みの誤植だろうと済ませるところだが、PC-KD854Nカラーディスプレイのカタログにも同じ数字が確認できる。
なお、VESA規格などを見るに通例はフロントポーチよりバックポーチが大きく取られる場合が多く、これに基づくならGDCのマニュアルは誤記で、ディスプレイカタログやテクニカルデータブックの表記が正となる。
どちらが正なのかは実際のディスプレイ出力の波形を調べれば分かるだろうが、残念ながら実機もオシロスコープも手放してしまったので確かめる術がない。
後日調査した結果 → ArduinoでNEC 7220A (GDC)の同期信号フォーマットを調べる