スポンサーサイト

上記の広告は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
にはプログラムウェイトでタイミングを合わせてタイマーを起動する。

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



スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。