PIC32MX2013年8月10日PIC32MX150F128Bを用いて、8色320x240ピクセルの、グラフィックディスプレイを作ってみた。bytesはぎりぎりである。同じPICマイコンを使ったグラフィックディスプレイとしては、ケンケンさんの32768色240x224ピクセルの作品があって、これは素晴らしい。今回の物は、性能的には劣るが、一石で仕上げるということ、目標とするMZ-700のディスプレイの規格は満たせること、私自身のカラービデオシグナル作成の勉強を兼ねるということで、8色320x240ピクセルで作ってみた。NTSCビデオ信号タイミング規格の概要が詳しいので、そちらを参照して頂きたい。ここで、カラーシグナルを生成するためには、カラーバーストと呼ばれる基準信号とカラーサブキャリアと呼ばれる信号(どちらも、3579545Hz)との間で、位相のずれと呼ばれているものが大事なようである。これは、ケンケンさんのページやそのほかのページでも詳しく解説されているので、そちらを参照して欲しい。Vの3種類の電圧変化で良かったためで、カラーだとそうはいかない。マイクロチップ社のアプリケーションノート・AN655を参考にして、5ビットのD/Aコンバーターを作成して利用した。回路図は、次の通りである。Vの電圧が得られる仕様。Ω)を考えれば、それより少し低い電圧になるはずで、たいていのディスプレイに対応できると思う。MHzで動かしている。MHzより若干オーバークロックだが、これぐらいのオーバークロックなら実用範囲内だろうと思う。結果として、カラーサブキャリア周波数・3579545Hzは、14サイクルのCPU命令に対応することになる。バーストシグナルは、ビデオモニターにカラー信号であることを認識させるのに重要だから、なるべく正確に出力したいので、14サイクルすべてでD/Aコンバーターによる電圧を変化させ、次のような波形を出力することとした。カラーサブキャリア信号の方は14サイクルすべてで電圧変化させることは出来ないので、14サイクル中に4回、電圧を変化させる仕様とした。ところで、webでカラーサブキャリア信号の事を色々調べた結果、バーストシグナルとの位相のズレで表現されることは理解できたのだが、この「位相のズレ」というのが、どこの解説でも0°から360°までの角度で表現されいる。赤を出力する場合は103.4°となっているのだが、このズレを信号で表現する場合、103.4°ぶん早く出力するのか遅く出力するのか、よく分からなかった。両方の可能性について実際にテストして色をビデオモニターで出力させた結果、次のグラフのように出力すれば良いとくことが分かった。7命令の間に2回電圧を変化させるので、画像データーの読み込みには5命令しか使えないことになるが、試行錯誤の結果、なんとか5命令でぎりぎり実装できた。上記の動画に使用したPIC32MX150F128Bのプログラムは、次のリンクからダウンロードできるので、興味がおありの方は、参照して頂きたい。ver051.zipは、ここからダウンロードできます。ライセンスはLGPL2.0。カラーバーに続いて、数秒おきに4枚の画像を順に表示する。うち3枚は160x120ピクセルの写真から作成した物で、これは添付の8color.htmlでCのコードに変換して埋め込んである。残りの1枚は、MZ-700のカラーキャラクターディスプレイを模した物で、たぶん本物ほど綺麗ではないのだろうが、ちゃんと文字も読み取れるし、実用の範囲内で表示できることが分かった。05:32:34)さすがに当時目を疑った、アイマスMADをMZ-700実機で再生する、みたいな無茶はできなさそう。カラーになるとサブキャリアを作るのが大変なので、コンポーネント信号でD端子でTVに繋ぐ方が簡単になってしまうという。01:41:34)偶然たどりつきました。自分の名前が出ていてちょっと驚きました。RAMが32KBあると、結構遊べそうですね。ところで、横320ドットをテレビに出力しようとすると、縦に細い線が変な色になってしまって、きれいに出ませんでした。?KM-Z80すごいですね。私はPC-8001ユーザーだったので、できればそちらも期待したいのですが。13:05:58)ケンケンさんコメントをどうも有り難うございます。ケンケンさんのPICでのカラー出力にずいぶん刺激されて、大いに参考にさせて頂いています。パックマンは、本当にびっくりしました。変な色になるという件、上記の条件(ライン262本)では確認できていません。この条件では文字の細かな所が綺麗に表示されないのでライン525本のモードを色々試しているのですが、525本モードだと文字が綺麗に表示されるものの、おっしゃるようにカラーバーで色むらが出ます。試行錯誤していますが、私の技術力ではいかんともしがたい所まで来ているように感じています。カラーに関してはNTSCよりVGAの方が扱いやすそうなので、そちらを使う方を準備中です。PC-8001もやってみたいですね。日立ベーシックマスターも。これらのマイコンを扱う場合、ROMの著作権の問題があって、色々難しいです。互換ROMを開発するなどの方法は取れそうです(TK-80のケースではこれをやりました)が、私が実機を手に入れる事が必要で、なかなかそうも行かない環境にいます。22:41:25)ちょっと書き方がよくなかったのか、伝わらなかったようですが、例えば黒バックに白い文字などを表示しようとすると横320ドットの解像度だとピンクとか緑とかの色が出てきて、正常な色になりません。エッジがなまっているのでしょうか。VGAなら問題ないでしょうね。エミュレータ製作には著作権という苦労があるんですね。放棄してくれればいいのに、と思います。最近、PICでテレビに映すテトリスを作って公開しました。よかったら見てください。13:05:55)そちらのテトリス(いいですね!)をみて、おっしゃる不具合の詳細が分かりましたので、こちらの環境でもテストしてみました。おっしゃるとおり、黒地に白で文字を表示させてみると、あちらこちらで色が出てしまいますね。ビデオ出力にキャパシタを入れたり、ダンピング抵抗を入れたりしても直らないので、エッジの問題ではなさそうです。AV機器やTV放送ではどうなっているのだろうと思ってみてみると、同じぐらいの細かさの白い字がくっきり写っています。どの画面でも共通点があって、バックが黒ではなく青なんですね。それで、私の環境でもバックを黒から青に変えてみました。一部の例外(市松模様のキャラクタ)を除いて、変な色が出なくなりました。このあたりがNTSCの限界のような気がします。実際の運用ではそういった不具合が出にくい条件を使っているのでは無いでしょうか。MZ-700でも、起動直後は青地に白の文字になっているので、なるほどと思いました。09:58:03)なるほど、MZ-700の青い画面にはそういう意味があったのですか。(?)確かに背景色によって影響の出やすさとかがあるのでしょうね。私もPIC32MX150F128Bを入手したので、これからちょっと実験していきたいと思います。