2002.9.15

X1turboをVGAモニタに繋ぐ

 X1TurboをVGAモニタに接続する試験です

 モニタのスペースはないがX1turbo本体だけならPCの傍らに置けるかた、ビデオ出力で目をちかちかさせながら使っているかた、あなたのPCのVGAモニタにX1を繋いで見ませんか?

X1turboのRGB出力仕様について

 X1turboのハイレゾモード時には、水平周波数=24KHzで古いPC9801等と同等のタイミングになります。
 X1turboZ以降の機種であればアナログRGB出力がありますので、PC9801用ディスプレイがそのまま使用できる他、水平周波数24KHz対応のVGAにもコネクタの変換アダプターのみで直結することができます。

 しかしX1turboZ以前の機種にはアナログRGB出力が無いため、デジタルRGB対応のモニタしか繋ぐことが出来ません。

 さらにPC9801が死滅しかかっている今日、水平周波数24KHz対応のVGAモニタも少なくなっています。

 でもね、X1turboのアナログRGBインターフェースの追加って実は簡単なんですよ
 それにCRTCをチョイといじってやれば、制限付きではありますがVGA標準のタイミングで出力することも実は可能なんです。
 ソフトのみでVGAモニタ対応...究極の8bit機の底力、ここにあり!

簡易デジタルRGB to アナログRGB変換ケーブル

 ここにアナログRGBインターフェースの回路図を置いておきます。
 回路は図面にする程のものではなく、R,G,B信号に150Ωの抵抗を入れてデジタルRGB出力のDIN6ピンからVGAコネクタ等に変換するだけです。
 抵抗はDSUB15ピンのケース内に収まるので、見た目普通のケーブルとして仕上げることができます。

ケーブル画像
 デジタルRGBのRGB信号はTTLレベルですが、X1turboからのRGB出力レベルはオープンコレクタで、Hレベル時は270Ωで+5Vにプルアップされた状態になります。
 一方アナログRGBのRGB信号は、DC成分をカットしたAC信号で、インピーダンス75Ω、0.75Vppという仕様です。

 抵抗なしでRGB信号を直結するとどうなるか...
 詳細説明は省きますが、振幅幅約1Vppになりレベルオーバーしてしまいます。
 これでも私の所では結構綺麗に映りましたが、150Ωを直列に入れると振幅幅が約0.75Vppとなり規定値に収まる計算です。
 同期信号の仕様はデジタルのアナログも全く同じなので、直結できます。

 ただし、X1のデジタルRGBのボーダー部分はグラフィックのパレットコード0のカラーが表示されますが、アナログRGBではDCレベルを固定するための期間なのでボーダーカラーが0(黒)以外の時は正常に表示されない制限があります。

標準VGA 31KHz対応へのアプローチ方法

 X1turboでは、表示タイミングを42.95454MHzのクリスタルオシレーターから発生させています。
 これを54.5MHz以上のオシレーターに交換してしまえば、ソフトに手をふれることなく31KHzになる計算になります。
 これがセオリーなのですが、クロックの交換はハードの改造が必要だし、ビデオ回路全体を25%のオーバークロックで動かすことになるので置いといて...

 X1ではCRTのタイミングを直接設定出来るので、31KHz/60Hzの標準VGAタイミングをソフトだけで作り出すことも実は可能なのです。
 ただ、ピクセルクロックは固定のため、そのまま31KHzにするとドットが横に間延びしてして80桁表示出来なくなります。
 それでもゲームくらいなら左右が少々かけでも問題ないでしょう?
 それがイヤというなら、24KHz対応モニタか、クロック交換、はたまた実機を捨ててエミュレータに走るべきでしょう。

31KHz無理矢理設定プログラム

X1/turboは汎用CRTCが搭載されているので、画面タイミングを変更することが可能です。
ピクセルクロックは固定されているので調整範囲は限定的ですが、24.8KHzに対応していないモニタでも表示できる可能性があります。

まずcrt31k.basを手入力などでX1で入力し、CZ8FB02上で実行させます。
この時点でVGA 640x480,31KHz/60Hzに近似した周波数に切り替わるので、24.8KHzで表示できないVGAモニタでもX1turboの画面が表示されるはずです。

このままでは横方向に表示がちょんぎれていると思いますので、最良ポイントへ調整を行います。

1.ディスプレイ側の調整で、可能な限り水平方向に縮めて全体を表示させます。
2."4","6"キーを押して水平周波数が変更できるので、モニタが追従する範囲でR0値が出来るだけ大きな値にします。
 ※R0=91(29KHz)あたりまで設定出来れば、80桁表示できる可能性が高いです
 ※ディスプレイの保証範囲を超えた値に設定した場合、ブラウン管モニタでは痛める場合があるので注意
3."2","8"キーを押してR2の値を、表示が良好になる値に調整していきます。
 ※R2<81だと80桁表示出来ず、クランプ期間と表示がぶつかるため、右端の画像によっては色落ちすることがあります。
4.DEFCHRスイッチを押してCRTCレジスタを固定すれば終了です。

 以後、IPLスイッチを押して好きなソフトを起動するなども可能です。
 PCG定義の問題は、Hi.REZOモードでX1用Standardモードのソフトを起動する方法と同じ制限になります。
 プログラムは実験用のため、80桁x25行(640x200/400)しか対応していませんが 40桁も原理は同じなので、WIDTHを40に、R0,R2の値を半分程度にして、各自実験してみてください。

 プログラムの140〜170行は垂直同期(リフレッシュレート)用で、無くてもほとんどのディスプレイで問題なく動作すると思います。
 リフレッシュレートが上がってちらつきが多少減るので、可能であれば削除しましょう。

crt31k.basの説明

110-120 : セットアップ
140-170 : 垂直ラスター数を525に設定(VF=約60Hz/HF=31Khz)
190-220 : セットアップ
240-300 : 水平周波数/水平同期位置設定、調整

最後に

 私はX1turboZと24KHzモニタを所有しているので、実はまったく必要ありません。
 X1の底力試してみたかったので、実験を行ってみました
 31KHz対応のIPL-ROMか、IPL起動の設定ディスクがあると実用性が上がると思います。
 一人でも多くの方にX1turboを復活させてもらいたいので、実際にこのプログラムを使ってX1を復帰させたい方がいらっしゃるなら、メールでご連絡ください
 要望があれば、時間が許す範囲でトライしてみるつもりです。