2018年02月04日

修正版

PC88版で使用していたOPNの動作がうまくいっているので、X68k版のOPMも
本腰を入れて動作するように改造しました。といっても、元はOPNを
タイマだけでもとりあえず動くように、ということで該当部等の
レジスタアドレスだけちょっと変えた中身はOPNという物でしたが。
OPNは3チャネル×4スロットで、本物は1サイクル144クロックで
計算等を行っているようです。(3ch×4slot/ch=計12スロットなので
スロット当たり12クロック)
僕の実装ではOPN回路に突っ込むクロックが速いので、その分サイクル当たりの
クロック数を増やしていました。
OPMの場合は8チャネル×4スロットなので計32スロットありますが、
それを64クロックで1サイクルで動かしているようです。
でも、これではレジスタとして使用している同期RAMや内蔵IPでの
乗算は1クロック消費してしまうため、2クロックではスロットの計算が
困難です。その為、実機は4MHzクロックですが、FPGAでは8倍の32MHzで
駆動することで1スロット最大16クロック、1周期512クロックで動作する
回路としました。あとはスロット当たりの計算式等はOPNと同じです。
LFOやでチューンの類は何も実装していませんが、まぁそれなりに違い音が
出ているのかな?と思います。
また、FDDのエミュレーションが従来はかなりソフトで対応しているため、
シーク中に1トラック毎トラックデータを読み直す(実際には読み終わらないので
飛ばしながらロード)等によって実機よりもトラックデータを読み出すのに
時間がかかり、タイムアウトが発生している状況でしたが、処理の一部を
ハードウェア化すること(+NiosIIの動作クロックアップ)によって
ディスクイメージに対する正常な読み書きができるようになりました。
尚、従来はd88フォーマットを使用していましたが、今回からは
トラック内のデータをギャップやセクタヘッダ含め、ミッシングクロック情報も
含めて全データを保存するようにしたオリジナルフォーマット .ddiに変更しました。
.d88から.ddiに変換する変換ソフトはd88toddi.zipとしてソースをアップロードします。
通常のCプログラムですのでコンパイルして使用してください。(セグメント超えが
必要なデータサイズなのでDOS用C環境では正常動作しないと思います)

最新版FPGAソースは:
release-F68k_DE0CVDEMU.180203.qar
今回、コメントで要求がありましたのでdiskエミュレータ用のNiosIIプログラムのソースも
同梱してあります。
posted by プー at 00:04| Comment(0) | リリース/X68k | 更新情報をチェックする