ユーザ用ツール

文書の過去の版を表示しています。


デジタルRGBをVGAモニタに出力したい

概要

PC-6001mkII以降には15色表示のデジタルRGB出力があり、専用モニターに接続することで鮮明な像を得ることができる。 エミュレータであれば、既に鮮明な画面表示を得ているので、必要性は低いが、折角ある機能を活用したいと思う。

流石に、専用モニターを入手するのは方法として、イマイチなので、アナログVGAモニタへ出力することを最終目標とする。

ハードウェア

PC-6001シリーズのRGB IFは、物理的にはDIN 8PINなので、最低限、これをD-SUB15に形状変更する必要がある。 実際、そういったケーブルもあるようだが、RGBのON/OFFによる8色表示しかできない。

従って、15色表示可能なように、RGBを0-1の他に中間レベルで出力できるハードウェアが必要になる。

更に、モニターが水平回帰15KHzをサポートしていればいいがVGAは31kHzと倍速なので、15kHz非対応の場合にはアップスキャンコンバータも必要になる。

RGB15色対応

TTLロジック版

部品
部品点数メモ
74LS0232入力NORゲートx4
74LS0822入力ANDゲートx4
74LS1251Tri-State Bufferx4
74LS8612入力XORゲートx4 H-Sync/V-Sync混合用。なければNORとANDの空いている回路で代替可能
抵抗100Ω6
電解コンデンサ 100uF 16V3
半固定抵抗(500Ω)6
VGAコネクタ1D-SUB 15pin メス
DIN 8pinプラグ1基板用ソケットがあればそれでも可
8芯ケーブル1
電源用USB Micro Bコネクタ15Vの電源入力が可能なら何でもいい

PIC版

部品
部品点数メモ
PIC16F18271PIC16アーキテクチャ/16GPIO/DIP18ピンなら何でもいい
抵抗100Ω6
電解コンデンサ 100uF 16V3
半固定抵抗(500Ω)6
VGAコネクタ1D-SUB 15pin メス
DIN 8pinプラグ1基板用ソケットがあればそれでも可
8芯ケーブル1
電源用USB Micro Bコネクタ15Vの電源入力が可能なら何でもいい

PIC版とか書いたが、どうもPIC版は動かないかもしれない。 というのも、PICが思ったより遅いから。

15KHzの水平回帰だと、320ドットを描くには、ドット当たり4.8MHzくらい(1/15000/320)で描いていかないと間に合わない。

が、PIC16F1827をフルスピードで動かしても32MHz。 となれば、構成する命令が全部1サイクルで終わるものだとしても、わずか6ステップですべてを終わらせる必要がある。 ま、ポートから値を読んで、テーブル引いて出すとかなら間に合うだろうと思っていた、実は。

が、ここでPIC16のアーキテクチャの罠があったのを今更知った。

なんかするたびに、Wレジスタを経由せざるを得ない。

最初、Cでコード吐かせてみて絶望した。 最適化を-O3とか-Osとか指定してみたが、芳しくなかった。 とりあえず、ごりごり、アセンブラで書いてみた。

loop:
        movlb   0       ; BANK 0に切り替える
        clrf    0x76    ; レジスタ 0x76 をクリアする
        ; HV混合信号を生成する (C = H ^ V ^ 1)
        movlw   8       ; Wレジスタに8 (b00001000)をセットする
        btfsc   12,6    ; RA6が1ならレジスタ0x76にb00001000を設定する
        movwf   0x76
        btfsc   12,7    ; RA7が1ならWをクリアする (W=RA7 ^ 1)
        clrw
        xorwf   0x76,f  ; レジスタ0x76 = W ^ レジスタ0x76
        ; RB - xxxxCBGR で出力する
        movf    12,w    ; W=PORTA & 7 (RGBコードだけ取り出す)
        andlw   7
        iorwf   0x76    ; W=W | レジスタ0x76
        movwf   13      ; PORTB = W
        ; TRISBにハイインピーダンスにするポートを出力する(IN にセットすると出力としてはハイインピーダンスになる)
        movf    12,w    ; W=PORTA & 0x0f
        andlw   15
        addlw   0x20    ; FSR1 に 0x20 + W (0-15に対応する出力値を書いたテーブル)をセット
        movwf   6
        movf    1,w     ; W = INDX1 (W = ds[PORTA & 0x0f])
        movlb   1       ; BANK 1に切り替える
        movwf   13      ; TRISB = W
        goto    loop

頑張って、20命令まで減らせたが、これでも予定より3.5倍くらい多い感じになるので、もうクロックを100MHzくらいにおーばくロックするしかないような気がしている。 多分、このまま実装すると、色が3ドットごとにしか変わらない、PC-8001みたいなことになりそうな気がする。

無念。

そう考えると、TTLロジック速いな。

アップスキャンコンバータ

自作する、というか、上の基板に組み込みたかったのだが、ラインバッファが必要だったり、FPGAで自作している人がいたりと、それなりに大規模になりそうなので、断念。

アマゾンで、GBS 8200 Ver 4.0のボードを見つけ、これを利用することにした。

GBS 8200 Ver 4.0

アップスキャンコンバータであるが、癖が強いので注意が必要。 まず、入力にD-SUB 15pin の口があり、シルクパターンを見るに、RGB + H + Vの信号を受け取りそうだが、先人たちによれば、H-Syncの代わりに、H/V 混合信号が、それとは別にV Syncも必要になるようだ。

実際、製品に添付されていたケーブルは、RGBとS(H/V混合信号)とVのみが結線されており、これら信号を入力してやる必要があるようだ。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information