2020年03月29日

基板を作ってもらいました

前の記事にコメントを頂いたkunichiko様が、X68k用にI/O基板を起こされたとのことで、サンプルを一枚頂きましたので早速、取り付けてみました。
実機の様に黒く、ということで、かなり格好良く出来ています。僕の感光基板バージョンとは月と鼈です。(画面の手前にあるのが僕の感光基板バージョン)
X68k_PCB.jpg
ユニバーサルに使用できる領域が確保されていますので、僕はI2C接続のRTCを(従来通り)接続しています。
この基板、DE0-CVの上に乗っかる設計のため、DiskEmulation切り替えスイッチの切り替えが困難になるためI/O基板上にも専用スイッチを準備してくれてありますのでそちらも使用できるよう、RTLの修正を行いました。どちらのスイッチでも切り替え可能です。スイッチの出力は手配線で好きなところにつなげてください、というスタンスのようで、kunichiko様はGPIO 0の40番ピンに接続されたようですが、僕はGPIO1の9番ピンが中途半端に開いており、もったいない(貧乏性)のでそちらに接続しました。
また、FPGAマガジンNo.1の第5章の記事に合わせ、HDMI関係のIO属性を従来LVDSにしていましたが、LVDS_E_3Rにしたほうが電圧レベルが高い?とのことで、kunichiko様から頂いた基板では確かにLVDS_E_3Rにしないと正常に画面表示が出来ませんでしたのでIO設定をLVDS_E_3Rに変更しています。従来回路ではどちらの設定でも表示は出来るようです。
release-F68k_DE0CVDEMU.200329.qar
posted by プー at 11:11| Comment(0) | リリース/X68k | 更新情報をチェックする

2020年03月08日

実メディアリード関係修正

PC-88の実メディアリード関係で、メディアからのリードが失敗する問題が発覚しました。
ディスクエミュレータ・実メディアのリード/ライトにSDRAMのクロックを使用していましたが、クロック周波数が高く、FDDからのパルス周期フィードバック分解能が高すぎることでフィードバックがかかるまでの時間がかかりすぎていたことが原因ではないかと思われます。
X68kと同様、システムクロック(20MHz)で動作するように修正しています。(SDRAMのFDエミュレータ関係処理もクロックが変わったことで修正)

release-de0cvdemu2.200308.qar

ついでに、FDD用新規メディア作成時の処理をバイト単位からSDカードのセクタサイズと同じ512Bのブロック単位で処理することで高速化を行っています。

ちなみにd88ファイルのフォーマットですが、他のエミュレータ用に作られたファイルの読み書きには互換性がありますが、本機で新規作成したフォーマットでは、トラック領域の実際の長さを計算することなく、最大容量で確保してしまいます。余った領域には適当なデータを詰め込んでいますので、他のエミュレータでは読み書きできないものもあるようです。
posted by プー at 09:42| Comment(0) | リリース | 更新情報をチェックする

2020年03月03日

実メディアコピー対応(PC88)

PC-88版も、同様に実メディアコピー対応しています。
使用方法等はX68k版と同じなのでそちらを参照してください。
なお、PC-88の2HDは0シリンダは単密度(FM)フォーマットらしいですが、読み出しはすべて倍密度(MFM)フォーマットとして処理していますので読み込みはできないのではないかと思われます。(FDCからはFMフォーマットの書き込み、d88からの変換もFMフォーマットに対応しています。メディアへの書き込みもFMに対応しています。)

ついでに、一時期DE0バージョン(DE0-CVではなくCyclone3を積んだ旧バージョン)でもOPNAに対応させられないか検討しており、でバグ用の不要な回路を削ったり、BlockRAMやDSPブロックに置き換えたりしましたが、どうやっても収まりきらないので諦めています。ですがその時の変更は有効になっていますので、若干回路が変更になっています。

release-de0cvdemu2.200303.qar
posted by プー at 23:14| Comment(0) | リリース | 更新情報をチェックする

実メディアコピー対応

ソフトウェアが入った実FDを持っているんだけど、寿命もあるのでイメージ化して使いたい、という場合は一昔前ならDitt系ソフトを用いるのが一般的だったと思います。
ですが、Ditt系ソフトはPC内FDCを直接アクセスしており、USB-FDDでは使用できません。

ということで、ディスクエミュレータに実メディアからd88に変換する機能、およびd88から実メディアに書き戻す機能を追加しました。
SDRAMに展開される、FDイメージを介して読み書きしますので、下記のような手順になります。

実メディアからd88への変換:
使用する論理FDドライブを選択→NEW→ファイル名入力→読み込み元ドライブ選択(Blankを選ぶと従来の空きイメージ作成)
内部動作としては空きイメージを作成し、メディアからSDRAMにコピーし、SDRAMからファイルに書き込む、という動作をします。
d88から実メディアへの変換:
使用する論理ドライブを選択→FILE→書き込むファイルを選択→WRITE(WRITEは該当論理ドライブがディスクエミュレーションモードになっていないと表示されません)
内部動作はSDRAM内イメージをそのままメディアに書き戻します。

release-F68k_DE0CVDEMU.200303.qar
posted by プー at 21:24| Comment(0) | リリース/X68k | 更新情報をチェックする

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) | リリース | 更新情報をチェックする