2020年02月24日

PC88も、念のため

PC88はTC信号はCPUで生成するので十分にマージにはあるので変更しなくても問題はないのですが、同じファイルなので念のため、アップします。
release-de0cvdemu2.200224.qar
posted by プー at 22:04| Comment(0) | リリース | 更新情報をチェックする

FDCの修正

先日のPC88側の修正でFDCをCPU側とコントローラ側、別クロックで動作するように修正しましたが、それによってFDDへの書き込みに失敗するようになってしまいました。

原因を調査したところ、X68kではFDCとメモリとの転送にDMAを使用していますが、セクタデータ転送完了時にDMAがFDCに転送終了としてTC信号を出力しますが、DMAからのデータ書き込みがクロックの同期で1クロックの遅延が生じ、相対的にTCが1クロック早まったため、TC信号を見逃してしまうようです。
PC-88はCPU(SUB側)がTCを生成するため多少遅延があっても問題ありませんでしたがX68kはTCもDMAが生成し、転送終了の次のクロックにはTCが出力されてしまうため、クリアTC受信とが前後してしまいました。

FDCは指定データ数の読み書きが終わった後、直前のセクタで受信したTCをクリアするためにTC保持レジスタをクリアしていますが、なにもこのタイミングでなくてもセクタデータ読み書き前に行っても問題ありませんのでデータ送受信前にTC保持レジスタのクリアを移動しました。
ディスクエミュレーション有:release-F68k_DE0CVDEMU.200224.qar
ディスクエミュレーション無:release-F68k_DE0CV.200224.qar
posted by プー at 21:19| Comment(2) | リリース/X68k | 更新情報をチェックする

2020年02月22日

DMA、再び修正です

先日、リンクアレイチェインモードの動作を修正しましたが、関連してもう1か所、修正がありました。
リンクアレイチェインモードの時はリンクアドレスに0を指定すると、ブロック転送完了で転送終了としなくてはなりませんがその処理が抜けていました。結果、永遠と無意味なADPCMデータを再生し続けるソフトがあるようです。
ディスクエミュレーション有:release-F68k_DE0CVDEMU.200222.qar
ディスクエミュレーション無release-F68k_DE0CV.200222.qar
posted by プー at 23:09| Comment(0) | リリース/X68k | 更新情報をチェックする

2020年02月21日

HDMI対応版(88)

全バージョンからRTL上では対応していましたが、GPIOにピンをマップしていませんでしたのでマップさせています。
DVIとは違い、HDMIはタイミングにシビアなようですのでドットクロックを適切に設定する必要がありますが、現状SDRAMクロック÷3=ドットクロック、SDRAMクロック÷n=CPUクロック、IO回りはこれとは別に20MHzを供給しており、SDRAMクロックを従来80MHzにしていましたが、ドットクロック26.667MHzでは映らないディスプレイ・テレビモニタがあるようですので75MHzに下げ、ドットクロックをVGAと同じ25MHzにしてみました。
ですが、IOクロックとCPUクロックが非同期でタイミングが合わなくなり、FDCが動作異常を発生させるようになったため、IO周りだけ低速なCPUクロックで動作する物に変更しています。
これでSDRAM 75MHz/ドットクロック25MHz/CPU=7.5MHz or 3.75MHzでも正常に動作し、HDMIモニタでも映るようになりました。

おまけの機能で、ディスプレイの対応モード等が読めるようにHDMIポートのEDIDを読み出す機能をつけています。
(それによって画面設定を変えたり等はしていません。ただ読み出すだけ)
IOポートの60hにEDIDアドレスを書き込み、IOポートの60hアドレスを読むと、そのまま読みだせます。
IOポート61hを読むと、HDMI未接続なら00、EDID読出し後なら01、読出し失敗していれば02を返します。
release-de0cvdemu2.200221.qar
posted by プー at 21:08| Comment(0) | リリース | 更新情報をチェックする

2020年02月19日

DMAバグフィックス

新年快楽!(と、中華圏の人たちに言うと、全然快楽じゃないわ、と言われてしまいます。新型コロナウィルスのせいですね)

ソフトによってはADPCM再生中に大きなノイズが発生する、きっとADPCMの計算式に間違いがあるのではないかと調べていましたが、ADPCMに送り込むデータが間違っており、その原因はDMAであることがわかりました。
X68kのDMACはかなりインテリジェントなコントローラなので、FPGAではまだまだバグが多く残っていると思いますが、今回判明したのはリンクアレイチェインモードでリンク構造の情報テーブルから次の情報テーブルのポインタを読み出す動作で、メモリからポインタを読み出す前にラッチしてしまい、リンク先アドレスが間違えているという問題です。
該当部分、修正しました。
DMAの修正なので、ADPCM以外でもリンクアレイチェインモードを使用していれば該当部動作は修正されたと思います。
おまけで、HDMI(DVI)出力時の色数が今までは半輝度を無視した各色5bitの32768色でしたが、半輝度を有効にした65536色に修正しました。
VGA出力は各色31諧調の29791色で従来通り、コントラストも無視されます。
ディスクエミュレーション有:release-F68k_DE0CVDEMU.200219.qar
ディスクエミュレーション無:release-F68k_DE0CV.200219.qar
posted by プー at 20:43| Comment(0) | リリース/X68k | 更新情報をチェックする