2020年4月4日土曜日

小ネタ:ファミコンの色

 GUIでパラメータを調整できるようなモノを作って動かしてる。



 色相はx0が-V側、x3が+U側、x6が+V側、xAが-U側、で、30度ステップ、ただしx0は無色彩(fsc正側固定)、xDは無色彩(fsc負側固定)、xEとxFは未使用(未定義? ペデスタル固定?)、という感じ。
 輝度は、まぁ、特に言うことはないか。

 拘束条件として、1Dが輝度0IRE、20が100IRE、00と2Dが同値、10と3Dが同値、という感じっぽい。資料によっては20と30が同値というものがあるが、これは設定不可能なので無視する。
 他に、NTSCの拘束として、最小-33、最大133、振幅66、が与えられる。

 これらを満たそうとすると、まず1xの負側が0に固定される。また2xの正側が100に固定される。それ以外は任意値となる。
 上図では振幅をすべて60に設定している。ただ、この拘束だと1xと2xの輝度変化が大きすぎる気がする。かといって1xと2xの端部は拘束されているから、輝度変化を小さくしようとすると振幅を増やす(拘束を外す)ように調整するしかない。
 それに1箇所を動かすと他も連動して動くから、例えば1xの負側を下げると0xの正側が下がるので、0xと1xの輝度差が大きくなる。

 元の特許に書かれている図だと、それぞれの正側・負側を個別に調整できるような感じになっているが、あくまでも説明用の図だろうし、実際に作った場合に合わない部分が出てくるので、この特許の図を鵜呑みにする必要はないはず。

 特許の図ではDACの抵抗は9個だが、相互に連動する場合は、抵抗が7個になる。かつ、トランジスタの使用数も微減できる。RAMみたいに積でTr数が増えるような代物ではないので、神経質にリソースを減らす努力はしなくてもいい気がする。LSI内部の抵抗とTrが数個増えて表現力が上がるなら、そちらを選択するはず。

 そもそも、00と2D、10と3Dの拘束もどこまで信用できるのか、という疑問も出てくる。
 2010年代に書かれたファミコンの色に関する話題は、エミュレータで表示した画面を元にしている話が多い気がする。とすると、エミュレータを開発した人間が決めたパラメータの再現でしかない。

***

 自分はファミコンで遊んだことはほぼ皆無だが、実はウチにはファミコン本体は有る。貰い物だが、RFスイッチの同軸線が途中で切ってあって、ACアダプタがないという代物。これでどうやって遊べと……
 試しに裏蓋開けてRP2のビデオ出力をオシロで覗いてみたら、一応NTSCっぽい信号が出ているのは確認できた。電源? 安定の安定化電源。7805入ってるんだから常識的な電圧設定しとけば動く。さすがに006Pだと厳しいかな、って程度には電気食うが。コネクタも秋月で多く扱ってるタイプだし。ただしセンターマイナスなので、買ってきたやつそのまま使うと死ぬが。
 ちなみに、ラインでトリガかけようと思ったらかからなかった。大本のNTSCはインターレースを識別できる信号だけど、ファミコンの信号はそういうふうにはなっていない。
 カラーサイクルも、厳密に作ってあるわけでない、という気がする。0Dとかでカラーサイクルを出してるのかな、という気もするけど、そうすると彩度がそれに拘束されるから、色の表現が自由にできなくなる。

 ファミコン本体はあるので、これをリファレンスにすれば色を確認できるが、どーやって表示するか…… コンポジット出す改造は面倒なのでやりたくない。
 と思いつつ試しにぐぐったら、1815でも良いらしい。それなら手持ちがある。1815って結構すごいのな。トランジション周波数、最大で500MHzくらいまである。相当熱くなりそうだけど。NTSCくらいなら低電流でも十分通る。
 あるいは、後期型であれば、Trは必要ない、という情報も。ウチのは後期型。でっかいコンデンサと75Ωだけで良いそうだ。DC結合でいいならインピーダンスだけ合わせてやればそれで足りそう。
 気が向いたらもう一度本体開いてちゃんと確認してみよう。

***

 Wikipediaによると、ファミコンって1.79MHz動作らしいんだよね。回路図見ると6fsc入ってるけど、中で12分周してるんだろうか?
 クロック1.8MHzというと、STM32F4の90分の1くらいなんだよな。ってことは、STM32F4でもファミコンのエミュレータ動くんじゃね? という気がしてくる。RAMは4KiB程度らしいし、十分にマイコンに入る。
 表示はNTSCで出してもいいし、所謂PSP液晶に出してもいい。ちなみにファミコンの解像度は256x240pxなので、PSP液晶を縦置きにすると、横が左右8pxずつ余って、ちょうどファミコン2画面分を表示できる。水平走査の関係とか、そもそも2画面表示してどーすんだ、って話もあるが、水平に置いて上下16px左右112pxをブランクにするよりは、縦置きのほうが面白い使い方ができそうな気がする。
 FPGAでファミコンのエミュレータを作る、とかは結構いろいろな作例があるけど、ワンチップマイコンでファミコンのエミュレータ、は、あんまり多くないと思う。バックライトLEDのドライバを外部チップとしてカウントすると厳密にはワンチップと言えなくなるのが悩みどころだな。昇圧はFETやインダクタを組んで、マイコンで制御するか? さすがに面倒すぎる。専用IC使えば定電流駆動で輝度制御まで1個でできるし。。

***

 最初はNTSCレコーダの気分転換でNTSC出すやつ作ろうとしてただけなのに、思えば遠くへ来たもんだ…… 遠くっていうか、実際は10歩くらい歩いて速攻泥沼にハマってもがいてる感じだけど。 

0 件のコメント:

コメントを投稿