左側の小さい画像が元画像、右側の画像が実際にテレビに映っている画像です。テレビの画面はテレビとデジカメの相性のせいか、へんなモアレが出ていますが実際に肉眼で見るともうすこし綺麗です。
背景の微妙なグラデーションが消えているのが残念ですが、はじめから16階調を意識して元絵を描けばもうすこし綺麗になると思います。
当初、16階調じゃ写真なんか綺麗に出ないだろうな、と思っていたのですが意外といい感じです。
12×12ドットの文字を出してみました。日本語表示はちょっと苦しいかもしれません。半角文字で良ければもっとたくさん文字を出せます。(たとえば6×8ドットのフォントなら22桁×12行出せます)
回路図です。基本的な構成は、電流加算型D/Aコンバータでアナログにして、エミッタフォロワでインピーダンスを下げるという回路です。D3〜D0の入力全てが”H”のとき出力は約1Vになり、全て”L”のとき出力は約0.3Vになります。
下側のトランジスタは同期パルス用で、SYNCに”H”のパルスが入ると出力は0Vになります。
全体像です。左のコネクタでG2436コントローラとつながります。右側に出ているのがビデオ出力で、私の手持ちのテレビに合わせてミニプラグにしました。
部品面のアップです。
ハンダ面のアップです。
まず、G2436コントローラを作ってください(液晶モジュールG2436自体は今回は必要ありません)。なお、メモリは628512 55ns専用になっています。628128は使えませんので注意してください。
また、G2436コントローラ上のH8/3052には「超ミニBASIC for H8/3048」に同梱されている cmb3052.mot を書き込み、CPUモードを6にしておきます
次に、回路図どおり簡易D/Aコンバータを作ってつなぎます。毎度のことですが、配線チェックはしっかり行ってください。
配線に問題が無ければ、G2436コントローラ上のCPLD(Xilinx XC95108 PC84)をモノクロCRTC用に書き換えます。(VHDLソースはこちら)
うまく動いていればこの時点で、ビデオ出力にはたまたまそのときRAM上にあったランダムなパターンが出ていると思います。
次に、以下のBASICプログラムを実行してください。
(80番までがバスの設定で、実際に描画しているのは100番〜120番です。110番のPOKE文を見ると、VRAM構造が非常に素直で理解しやすい構造になっていることがわかると思います)
10 POKE &P1DDR,$FF:POKE &P2DDR,$FF 'ADDRESS BUS 20 POKE &P4PCR,$FF ' PULL-UP ON 30 POKE &P5DDR,$FF ' ADDRESS BUS 40 POKE &P6DDR,$FF ' OUTPUT 50 POKE &P8DDR,$FF ' OUTPUT (USE CS) 60 POKE &PADDR,$FF ' OUTPUT 70 POKE &PBDDR,$FF ' OUTPUT 80 POKE &WCER,$0 ' DON'T USE WSC 100 FOR Y=0 TO 95:FOR X=0 TO 127 110 POKE X+Y*128+$200000,X/8 120 NEXT:NEXT |
例によって、画像データをPOKE文スクリプトに変換するコンバータを作りました。今回のは、カラー画像もちゃんとモノクロ16階調に変換してくれます。(ディザリングなどは行わず、単純に輝度を16レベルに変換します)
このツールが欲しい人はメールください。
変換開始前
変換後
出力されるPOKE文スクリプト
POKE $200000,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D POKE $200010,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D POKE $200020,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D POKE $200030,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D POKE $200040,$D,$D,$D,$D,$D,$2,$5,$5,$5,$5,$4,$D,$F,$F,$F,$F POKE $200050,$F,$F,$F,$F,$F,$F,$F,$A,$5,$5,$5,$5,$5,$5,$5,$5 POKE $200060,$A,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$3,$5,$5,$5 POKE $200070,$5,$5,$4,$5,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D,$D : (中略) : POKE $202FE0,$B,$A,$7,$8,$6,$B,$B,$D,$C,$B,$B,$B,$B,$B,$B,$B POKE $202FF0,$B,$B,$B,$B,$A,$8,$8,$D,$D,$D,$D,$D,$D,$D,$D,$D |