X1の背面にあるRGB出力端子は、デジタルRGB出力です。こんなページを見に来る人なら説明するまでもないですが、DVI-DとかHDMIではなく、昔のマイコン時代のデジタルRGB出力です。これをマイコンソフトのFRAMEMEISTERのRGB21ピン入力に接続してみます。
※色が違うとか長時間使ってみたらX1とかFRAMEMEISTERが壊れたとか有り得ますから自己責任で。
X1のデジタルRGB出力端子は6PIN DINコネクタです。本体付属の専用ケーブルは反対側はこんな感じのコネクタになっていて、専用モニタに接続します。NECのデジタルRGBモニタも同じ端子です(PC-6001mkIIは15色出せるようになっているので信号が若干違います)。
6ピンの用途をX1のマニュアルから抜粋します。
端子番号 | 信号名 | |
---|---|---|
1 | GND | グランド |
2 | R | ビデオ信号(赤) |
3 | ^HSYNC | 水平同期信号 |
4 | G | ビデオ信号(緑) |
5 | ^VSYNC | 垂直同期信号 |
6 | B | ビデオ信号(青) |
R,G,Bの各映像信号と2つの同期信号はTTLレベルです。同期信号は負論理になっています。
一方、FRAMEMEISTERのRGB21ピンの仕様はこのようになっています。
アナログRGB信号 | 0.7Vp-p(75Ω) |
同期信号 | 複合同期(C Sync) 0.3Vp-p負極性 |
水平同期信号周波数 | 15kHz(NTSC/PAL相当) |
垂直同期信号周波数 | 60Hz/50Hz |
音声 | ステレオ2ch |
※TTLデジタルRGBの入力には対応いたしません。
TTLデジタルRGBには対応してないと明記されています。なので、自前でTTL(+5V)信号をFRAMEMEISTERが受け付ける信号レベルに変換する必要があります。また、同期信号の送り方ですが、X1の同期信号は、水平同期と垂直同期信号が分離しているのに対して、FRAMEMEISTERでは、複合同期信号のみを受け付けるので、信号を混ぜる必要があります。
信号の混ぜ合わせには74LS08を使いました。自信ないですが、こういうことですよね?
H-SYNC | V-SYNC | 欲しい信号 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
RGBそれぞれの色信号レベルは、X1側の出力が0Vか5Vで、FRAMEMEISTER側は0.7Vp-pです。終端抵抗に75Ωが入っているようなので、テキトーに分圧すればいいのかなと150Ωの抵抗を入れました。これで映ったからOKということで。
同期信号も同様に、74LS08の5V出力を0.3Vにする必要がありますから、680Ωの抵抗を入れました。まだちょっと抵抗値が低めなのですが、次に選べる抵抗値が750Ωで、これだとちょっと大きいのです。なので、可変抵抗で調整するといいのですけど、FRAME MEISTERには、その辺をうまく合わせてくれる機能(画面特殊設定→同期LEVEL)があるので、ここを変えれば可変抵抗は無くても大丈夫です。
74LS08を動かすには+5Vが必要です。+5Vは74LS08用で、他には使わないという事です。私は+5V出力のアダプタを使いました。X1本体から+5Vが取れそうな端子は、TVコントロール用コネクタがありますが、あまり本体の電源に負担をかけたくなかったので外部から電源を取るようにしました。GNDは外部アダプタと74LS08とX1のRGB端子とRGB21ピン全てに繋ぐようにして下さい。私はこれ以外に74LS08の未使用“入力”ピンもGNDにつなぎました。
ちなみに、X1のジョイスティックコネクタは+5Vが出ていません(全PINがAY-3-8910のI/O端子につながっています)。また、X1Cには外部キーボードコネクタがあり、そこから+5Vが取れなくもないのですが、このコネクタを使うと本体側のキーボードが反応しなくなってしまいます。
参考用にTVコントロール用コネクタの端子表を掲載しておきます。
端子番号 | 信号名 | |
---|---|---|
1 | EX H-SYNC | 外部水平同期信号 |
2 | ^EX V-SYNC | 外部垂直同期信号 |
3 | TV Power ON/OFF | テレビパワー オン/オフ信号 |
4 | TV REMOTE | テレビリモート信号 |
5 | Vcc 1 | +V5 |
6 | GND | グランド |
7 | GND(SOUND) | サウンドグランド |
8 | SOUND OUT | サウンド出力 |
今回の回路には関係ありませんが、TVコントロール用コネクタから出ているH-SYNCは正論理になっているようです。
FRAMEMEISTERのRGB21ピンは音声も入れられるので、X1背面のオーディオ出力端子からの信号をつないでおくとFRAMEMEISTERのHDMI端子から音が出ます。
私は抵抗と74LS08を21ピンRGBコネクタに入れましたが、かなりギュウギュウになるのでオススメ出来ません…。
FRAMEMEISTERに接続して、そこから更にXCAPTURE-miniに接続して静止画キャプチャしてみました。
(おまけ) FRAME MEISTERの出力を1080Pにしてもちゃんと表示されます。横長ですが。
ハイドライドのロード中の画面をみると気がつくのですが、途中に太い黒線がみえています。画像を拡大すると、画面が全体的に明るいところと暗いところが交互に表示されていて、その境目になっているようです。
原因をよく調べていませんが、X1の画面サイズが320x200(640x400)なのに、640x400のサイズで切り出してみると(点線部分)、縦方向に若干長く、横方向に短いので、拡大縮小の影響かもしれません。FRAMEMEISTERは表示サイズや位置の調整が可能なので、色の輝度も含めて、設定を追い込むとよさそうです。
画質については、XCAPTURE-miniのJPG圧縮の影響もありますね。
もう一つ問題というか表題の“弱点”があって、
ザナドゥだと青色成分が表示されません。ハイドライドとザナドゥを実機&大画面で遊びたい為に回路を作ったというのに敗北感。X1版ザナドゥは、背景が青いという作りです。(X1->ブラウン管デジタルモニタに接続して写真撮影)
パレット0番を青にしてるのだと思うのですが(重ね合わせ処理高速化のため?)、FRAMEMEISTERだと青が抜けてしまいます…。これの原因は、 @oec_Nibbleslabさんから教えて頂きました。[1] [2] [3] 簡単には解決できないですね。また、青以外の色でも、パレット0番の色を変えた場合、その色が出ないことになります。例えば、BASICでpalet0,7を実行するとFRAMEMEISTERを通した表示は真っ黒になってしまいます。
XCAPTURE-miniでキャプチャした動画の情報はこんな感じでした。
[MVI_0015.MP4] 720x480 8Bit AVC/H.264 Baseline@3 Unspecified Progressive 58.89fps 42381f 3110.34kb/s AAC 48.00kHz 2.0ch(2/0 L+R) LC 189.38kb/s [Extra][2] MP4 Base Media v1 MetaData [MPEG4] 00:11:59.716 (719.716sec) / 297,935,855Bytes 真空波動研Lite 140713 / DLL 140713 Unicode
動画が58.89fpsになってしまうのは、X1側の同期信号が61.63Hzになっているからだと思います。この辺の都合もあって、キャプチャした動画をPC上で再生している分には問題ないのですが、別の動画形式に変換すると音がずれていきます。扱いが難しいです。
キャプチャした動画をYOUTUBEにUpしてみました。
やはり音がずれていきますが、映像の途中でフレームレート調整をしてずれの補正をしているようです。
XRGB-3ではうまく映りませんでした。たまに絵が出ることもあるのですが安定しません。
ダウンスキャンコンバータのXAV-2sでも試してみたのですが、こちらはアッサリと映りました。ここまでFRAMEMEISTER推しだったのに、こっちのがいいんじゃないかというくらいに簡単に。
USBキャプチャ器でXAV-2sのS端子映像をキャプチャしてみました。
良いではないですか!それなりに性能の良い液晶テレビを使うと映像や色を鮮やか補正してくれるので、さほど気になりません。ただし、画質よりも、FRAMEMEISTERのHDMIに比べてチラツキが出るので目が疲れます。
安いキャプチャ機やテレビを使うと、
S端子っぽい、うっすーぃ色に。機材次第でずいぶん変わります。
ザナドゥは青色が出るようになって、これなら遊べると思ったのですが、
魔法を使った時の画面フラッシュエフェクト時に同期信号をロストするらしく、
魔法の影響で画面が乱れてしまいます、何という魔力!魔法を使うたびに0.5秒くらい(15フレくらい)画面が映らなくなるので厳しいです、残念。
ゲームの表示領域を調べてみると、高さは400ラインでピッタリなのですが、横幅が550ドットくらいしかないです。こっちの方が正しい比率なのかな。
37インチフルHDの液晶テレビにS端子出力でつないだ画面をデジカメ撮影してみました。このテレビは、640x480のを1920x1080に拡大する時にドットをハッキリ出すので、1ドットがよく見えるようになります。
せっかくなので動画キャプチャしてみました。Mpeg2でそこそこのビットレートで録画してインタレース除去してYOUTUBEにUpしてみました。
デジタルRGBの出力はTTLで、0Vか5Vのどちらかで判断されます。一方、アナログRGB(21ピンRGB)の場合、信号(電圧)を最大値と最小値の間で変化させます。最大と最小の間で変化しないことには色が定まりません。FRAMEMEISTERの場合、0.7vppで、最大と最小の範囲は0.7Vになっています。
また、X1のパレット0番は、画面の表示領域外の色まで変化させるようです。実例を見た方がわかりやすいです。
最初の画像で画面の表示領域を青く塗りつぶしています。その後、palet命令で透明色を青に変えると、先のX1の表示領域の外側の色が(一瞬で)変わります。
X1はパレット0番の色信号を表示領域の外側で出し続けるようです。また、表示を行っていない時、つまり、ブラウン管の走査が帰線期間の時にも、色信号を出し続けるようです。
例えば、パレット0番を青にした場合、デジタルRGB出力の青信号は常に5Vになります。これをデジタル→アナログRGB変換すると、同期信号や帰線期間時にも信号が常に変化しない状態になりますから、FRAMEMEISTER側はその変化しない信号の電圧値を基準点(黒色)として決める、つまり、色が出ていない状態と判断するようです。これによって、0番パレットの色は表示されない色になってしまうようです。
最悪のケースはパレット0番を色番号7、つまり、白色(=R,G,B全信号を1)にした時で、FRAMEMEISTERからの出力は真っ黒になってしまいます(R,G,B全てが無変化なので)。
では、色信号を何かしらのタイミングで(電圧)変化させればいいのではないかと思い、映像同期信号とのANDを取ってみました。つまり、同期信号が有効な時(=0V)は色信号も0Vにするというわけです。
結果的には上手くいきませんでした。
ソフト的にも、表示領域外を青色、X1の表示内容を一部だけ青にして他は黒みたいな画面を作っても(PALET0,1:LNE(0,0)-(10,10),PSET,1,BFとか)、青色が出なくなってしまいます。
FRAMEMEISTERがどのようにして色信号の変化を決めているのかわからないのですが、同期信号以外の箇所、つまり、画面の表示領域内の信号内容で判定しているのではないかと思います。こうなると、残念ながら、X1のデジタル信号→アナログ信号化→FRAMEMEISTERという方法では解決できなさそうです。