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

2019年10月20日

ADPCM修正

ADPCM対応ソフトが無く、シミュレーションで波形を送り込んで何となく動くことを確認だけしていたのですが、どうやらADPCM再生時にそもそもRAMにデータを取りに行っておらず、SDRAMコントローラもADPCMからのリード動作に異常があり異常動作になることが判明しました。
その修正版になります。とりあえず、音は出ます。喋ります。
release-de0cvdemu2.191020.qar
posted by プー at 21:50| Comment(0) | 日記 | 更新情報をチェックする

2019年10月16日

色々修正版

主にOPNA周辺の修正を行っています。
いつの間にか、4MHz/8MHz切替信号がCPUに伝わらなくなっていましたのでそれも修正しています。
OPNAはまだ完成度が高くないのでOPNを使用したい場合はS88DE0CVDEMU2.vhdのgeneric文の
USE_OPNA
の数値を0にすると従来のOPNに切り替わります。(0以外だとOPNA)
(OPNA対応に合わせ、OPNとOPNAのFM部分を共通にするためFM部分だけ共通の別componentにしましたのでもしかしたら従来と一部動作が異なるかもしれません)
release-de0cvdemu2.191016.qar
posted by プー at 23:37| Comment(0) | リリース | 更新情報をチェックする

2019年10月14日

BIOS、どうしようか

Zet/98ですが、ハードウェア側の設計はおそらく、ROM BASICが起動する程度まで書けています。
ただ、BIOSがありません。手持ちのPC-9821X...なんだっけ?486デスクトップとPC-9801N...なんだっけ?386ノート、共にV30非搭載機なので、どちらもIA-32でしか使用できない386で拡張された命令(EAXレジスタを叩いたり、プロテクトモード用セグメントを初期化したり。。。)を使用しているので該当部分を通ると暴走します。
巷には実機BIOSを持っていなくてもとりあえず起動するエミュレータがあるのでそこから拝借することも考えてみたのですが、
・Neko Project…比較的BIOSで処理しているが、ハードウェア初期化等をエミュレータ側で行っており該当部分コード無
・Anex86…ほぼエミュレータ側で処理しており、BIOSはほぼ空
・T-98 NEXT…こちらもBIOSはほぼ空
となっています。
Neko projectさんの方は、BIOS部分も含めソースが公開されておりますのでこのソースをベースにエミュレータ側処理もCPU側で書き換えるのが一番手っ取り早いと思うのですが、Z80ならともかく8086のアセンブラは、セグメントが絡むので苦手で。。。.com形式なら過去にアセンブラでプログラムを書いたことがありますが、.exe形式でもものの本を読めばわかると思うのですが、BIOSの方は。。。基本は.comベースで書いてセグメントは自分勝手に好きなように動かせばいい、という事でしょうが今まで書いたことが無いので難航しています。
Neko projectさんのBIOSはMASMで書かれたものとNASMで書かれたものが混在していますがセグメント部分の記述が両社だいぶ違うようで。。。
posted by プー at 09:03| Comment(0) | Zet/98 | 更新情報をチェックする