スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NEOGEO CDの複合同期信号 その2

NEOGEO CDの複合同期信号について書いてからずいぶんたってしまいましたが、
ようやく対策する気になったので公開します。

NEOGEO CDのメインクロックですが、24.167829 Mhzが乗っていて
HSYNCは15.734kHzになるようです。
ということは、14.31818MHzからHSYNCを作れるので、
以下のような回路とお試しソフトウェアを作成して試してみました。
ソフトウェアについてはお試し状態で検証不十分なので
参考にする場合は自己責任でお願いいたします。

NEOGEO_SYNC_FIX.png

http://poorcore.web.fc2.com/files/NEOGEO_SYNC_FIX_20140127.ZIP

動作ですが、VSYNCが出力されるタイミングでHSYNCのタイミングが狂っているので、
その部分をAVRの16bit Timerで作成したPWM信号に置き換えています。

結果としては以下の写真のように、画面上部の歪みはほぼ無くなっているので
効果はありました。

NEOGEO_SYNC_FIX_1.jpg


NEOGEO_SYNC_FIX_2.jpg

ただ、現状では以下の問題があるため、よく見ると画面上部が左右に微妙にふらついています。

(1) GPIOで元のHSYNCの立ち下がりを検出してからタイマーを起動しているため、
200nsec程度遅れている
(2) 本体クロックとのずれを考慮して毎フレームタイマーを起動し直しているため、
PWM信号のタイミングがフレームごとに微妙に違う

次のステップとしては次の2通りが考えられます。

(a) 回路を内蔵してしまい、CPUクロックに同期してSYNCを生成する。
これならばいちいち本体信号とPWM信号を切り替える必要がないので完璧なはず。

(b) タイマーを起動する1つ前のHSYNCのタイミングで割り込みをかけて、次のHSYNC
にはプログラムウェイトでタイミングを合わせてタイマーを起動する。

時間があればどちらかにトライしてみるつもりです。



スポンサーサイト

MVS入手

今更ながらNEOGEO CDのアクセス時間に耐えられなくなったので、
ROM版のNEOGEOを購入しようと思いましたが、本体、ソフト共に
価格がかなり高いので、ソフトが比較的安価に入手できるMVSを
購入しました。

購入した基板はMV-1Aです。
むき出しのままだと不安なので、ダイソーで購入した8リットルのタッパーに
納めました。

MVS_1.jpg

MVS_2.jpg

部品構成は以下のようになっています。

電源:余っていたFlex ATX電源
コントローラー:NEOGEO CDのコントローラー(現状1Pのみ配線)
音声:海外のホームページの情報に従ってステレオ配線
RGB:DIN8ピン NEOGEO配列 RGBにそれぞれ直列抵抗150Ω

タッパー8リットルは大きすぎですが、横差しのソフトを抜き差しするには
このくらいの幅でギリギリです。
海外ではMV-1Cを使って5V単電源でコンパクトかつかっこいいケースに収めて
いたりするので、MV-1Cを入手できることがあれば挑戦してみたいですね。

ステレオ化した音声ですが、ノイズが乗ります。
音をクリアに聞こうと思うと回路を工夫する必要がありそうです。

DT-V1910Cに映した場合ですが、NEOGEO CDと同様にスキュー歪みが出ます。
この辺は同じですね(あたりまえか)。

MVS_3.jpg





NEOGEO CDの複合同期信号

NEOGEO CDをDT-V1910Cに接続したときに画面上部にスキュー歪みが
出ている原因を調べるために、NEOGEO CDのCSYNCをNJM2257で
同期分離した信号をロジアナを使って見てみました。
NJM2257で分離した同期信号は正論理で出力されるので
EL1883で分離した同期信号とは論理が逆になっています。

NEOGEO_CSYNC_1.png

赤:CSYNC
橙:HSYNC
黄:VSYNC

PCエンジンの複合同期信号と違って、こちらは等価パルス、切り込みパルスとも
存在していて一見問題のない信号に見えます。

PCエンジンの同期信号の解析で、HSYNCの間隔がそろっていないと歪みが出ることが
わかっているので、等価パルスが挿入される前2ラインから等価パルスの挿入が
終わった後2ライン後までのHSYNCの間隔を調べてみました。
25MHzでサンプリングしているので1クロック40nsecとなります。

1589クロック:63.56usec
1589クロック:63.56usec
1589クロック:63.56usec
1589クロック:63.56usec
1762クロック:70.48usec
1540クロック:61.60usec
1589クロック:63.56usec
1589クロック:63.56usec
1464クロック:58.56usec
1589クロック:63.56usec
1589クロック:63.56usec
1589クロック:63.56usec

ということで、通常よりも間隔の長い箇所が1カ所、短い箇所が2箇所あります。
長くなっている箇所を拡大したものが下の絵で、左側より右側の方が
長くなっています。

NEOGEO_CSYNC_2.png

ということで、HSYNCの間隔が一定になっていないのが原因ということで
間違いなさそうです。

対策方法ですが、NEOGEOの場合チップからもCSYNCしか出ていないようなので
PCエンジンのように内部から分離同期信号を取り出すのは無理そうです。
やるとしたら、HSYNCのタイミングがずれている部分を正しいタイミングに
置き換えてやる必要があり、CPLDが必要になります。
VHDLかVerilog HDLを覚えなきゃいけませんね。

また、NEOGEOからどのような信号が出力されているかが
わかってないといけませんが、
海外のWebサイトで見る限り以下のような仕様のようです。

1フレーム264ライン(表示は224ライン)
ドットクロック6MHz
1ライン384ドット(表示領域は320ドット)

1フレーム264ラインは実際に数えても一致していたのでよさそうですが、
ドットクロック6MHzで1ライン384ドットだとするとHSYNCの間隔は64usec
となるはずで、ロジアナで見た結果と一致していません。
もうちょっと調べてみる必要がありそうです。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。