2019年04月14日

少し修正しました

BG画面でキャラクターの水平反転が切り替わった直後のbitが正常に反転しない問題がありましたので修正しました。
スプライトは前後1クロック、書き込まない期間があるため問題は発生していませんでしたが無駄なレジスタを使用していたのでこちらも同様に修正しました。

おまけで、FDエミュレーションのイメージ読み書き進捗ゲージがディスク番号行で進むようにしていましたが、書き込み時に同じ行が選択状態にあると見えないので、ゲージ表示は最下行に移動しました。それと、FDエミュレーションのイメージ読み書きを微妙に高速化しています。
release-F68k_DE0CVDEMU.190414.qar
posted by プー at 09:49| Comment(2) | リリース/X68k | 更新情報をチェックする

2019年04月11日

画面周り割込み修正版

画面周りやタイマ/カウンタの動作に間違いがありましたので修正しました。
ラスタ割込みはどこからどう数えての数値で割り込みを掛ければいいのかがいろいろな資料を読んでも分からなかったので適当に実装していましたが、どうやら垂直表示期間が終わってブランクに入ったラスタを0として、ラスタ毎にカウントアップするのが正しそうで、インターレース表示の時には奇数行・偶数行関係なくラスタをカウントすればいい?ようなのでそのように修正しました。
もともと僕の実装では表示期間があって、ブランク/同期期間がある、という順番(数値)になっていましたが、実機では先にブランク/同期でその後に表示期間のようです。
また、タイマ・カウンタはカウント値が1になった次にトリガがかかった時に割り込みを掛け、次のトリガでカウント値を初期化していましたが(カウント値0が存在する)、実機では同時にカウント値を初期化するのが正しいようです。
そのように修正しました。

release-F68k_DE0CVDEMU.190411.qar

垂直同期割込みやラスタ割込み等使用しているソフト、且つ15kHz水平同期の物ではタイミングが改善されると思います。
posted by プー at 18:37| Comment(0) | 日記 | 更新情報をチェックする

2019年04月03日

特殊プライオリティ修正

前々回の投稿のコメントに記載しましたが、特殊プライオリティに誤りがありましたので修正しています。

release-F68k_DE0CVDEMU.190402.qar

それと、デバグ設定をgeneric文にまとめてON/OFFしやすく変更しています。
posted by プー at 08:23| Comment(0) | 日記 | 更新情報をチェックする

2019年03月26日

修正版

テキスト画面の同時アクセスで正常に書き込みができないプレーンがあるのと、FDエミュで
イメージの読み込み中にSASIにアクセスがあると暴走する問題がありましたので
修正しました。
テキスト画面の同時アクセスは、キャッシュ回路及びSDRAMアクセス回路がMPUの
タイミングに合わせて設計してあるため同じタイミングでアクセスしないと書き込みに
失敗するようで、合わせたのでMPUで4アドレスに書き込む時間と同じ時間が掛かって
しまいます。
そのため、あまり同時アクセスしたからと言って高速には動かない、という回路になって
しまいました。
FDイメージ読み込み中(トラック単位)は割り込み禁止にしましたので(SASIは割り込みで
動作するがファイルI/Oが多重アクセスに非対応にしてあるため)SASIが未反応で
IOCS等がエラーを出すと思いますが、大抵はリトライで対応可能だと思います。
release-F68k_DE0CVDEMU.190326.qar
posted by プー at 22:07| Comment(1) | リリース/X68k | 更新情報をチェックする

2019年03月22日

画面周り等修正版

今まで半透明や特殊プライオリティには対応していませんでしたが、画面の重ね合わせに
異常な部分があり、その修正のついでに半透明と特殊プライオリティにも対応させました。
従来、色コード0を指定したところは透明でプライオリティが低い画素の色が表に出るように
コードを書いていましたが、エミュレータ等の動作を見ると、色コード0だけではなく、
パレット="0000"の場合も透けるようです。その場合、例えばテキストとスプライトで
プライオリティが高い画面の色コードが0以外の時には高い画面のコードを、0の場合は
低い画面の色コードをパレットに回せばよかったのでパレットが1つで済みましたが
パレット出力も見て判断が必要なのでパレットも別々に準備する必要があるようです。
それほど大きなRAM容量ではないので同じ内容のパレットRAMを2種類用意して対応
しました。
ついでに半透明でも複数のパレットが必要ですので半透明・特殊プライオリティにも
対応させました。
ただし、動作確認用のソフトが無いので、「たぶんこれでいいと思う」レベルですが。

それと、SDRAMが1つしかありませんので、10MHzのMPUだけSDRAMを使用するので
あればキャッシュは使用しませんが、画像関係でテキスト・グラフィックスと多くの
データをSDRAMから読む必要があるため、その間MPUができるだけ止まらないように
キャッシュを持たせています。
(PC-88ではグラフィックスの容量が少ないのでキャッシュがなくても十分に回せた)
読み出しキャッシュにSDRAMからデータを読み出している間はキャッシュ外への
アクセスにはウェイトが入るので、容量の多いキャッシュを少し積むよりは適度な
サイズのキャッシュを沢山積んだほうが効率よく動作します。
そのため、キャッシュのサイズと数量を可変できるようにしました。
1個当たりのキャッシュサイズはX68DE0CVDEMU2.vhdのarchitecture分の先頭にある
brsizeで8=256word,7=128word...という指定です。9以上は指定禁止です。
キャッシュの個数はcachecont.vhdのarchitecture分先頭のbrblocksで個数をそのまま記入します。
個数が多いほど本来であればパフォーマンスは上がるはずですが、増やしすぎると
配線長や回路が複雑になるため正常に動作しなくなります。
現在の設定(brsize=7,brblocks=8)あたりがパフォーマンスは最適になるようです。
(ソフトによって異なるでしょうが)

ちなみに従来の回路はbrsize=8,brblocks=4に相当します。

release-F68k_DE0CVDEMU.190322.qar
posted by プー at 20:40| Comment(3) | リリース/X68k | 更新情報をチェックする

2019年03月09日

DiskEmu変更

初期バージョンのFDディスクエミュレータはトラック毎にNiosIIプロセッサでSDカードから
データを読み出し、トラックイメージに展開していましたが、NiossIIプロセッサは
遅いためタイムアウト等で正常に動作しないソフトウェアがあったようです。

2番目のバージョンはトラック毎にNiosIIプロセッサはSDカードからデータを読み出しますが、
ハードウェアでトラックイメージに展開することで高速化しました。
ですが、まだ稀にタイムアウトが発生していたようです。

NiosIIでトラック毎イメージを展開するのは限界のようですので、今回のバージョンでは
FDファイルを選択した時点でディスクイメージを丸ごとSDRAMに展開する方法に
変更しました。
ですのでファイルを選択したときに変換時間分待たされますが、ロードは実FDDと等速で
動作できるようになったため、エラー発生はほぼなくなったようです。
FDへの書き込み時には、書き込みが終わった時点でSDカードに書き戻しを行います。
ですのでエミュレータBUSY(一番右のLED)が点滅している間はSDカードを抜いたり
電源を切らないでください。
別のファイルに切り替えたりする操作を行うと未保存のイメージは書き戻しを行います。

同時に、SASIエミュレータがリセット信号を無視していたため、反応するように変更しています。

release-F68k_DE0CVDEMU.190309.qar

PC88の方はSDカードアクセス方法が異なるため、エミュレータ自体は対応できる
設計にしてありますが、移植はまだです。また、2HD以外での確認もできていません。
単密度(FMフォーマット)時の動作は正確ではないことは分かっています。
(トラック長さが倍になっていますのでディスク1回転にかかる時間が倍の時間に
なってしまっています)
posted by プー at 19:37| Comment(8) | リリース/X68k | 更新情報をチェックする

2019年01月12日

ADPCM修正

前回の修正でも、無関係部分の修正を少し加えると変な音になる、という問題があり、
ADPCMとOPMのミキシング前に同期化させてみたり、ミキシングとDACの前で同期化させてみたりしましたが、
どうもADPCM回路への入力がおかしいということに気づきました。
「音」回路とプロセッサ周り、画像周り、FDC周り、ディスクエミュレータ周りでそれぞれ別のクロックを
使用していますが、ADPCM回路でプロセッサクロックでの制御信号を音クロックで動作するADPCM回路に受け渡す部分で
タイミングに問題があったようです。あと、ADPCMからDMAへのリクエストもたまに失敗するようです。
プロセッサ側クロックでラッチするレジスタを間に1段入れることで正常に受け渡しができるようになりました。
複数のクロックが絡むと検証が難しいです。
release-F68k_DE0CVDEMU.190112.qar
posted by プー at 20:06| Comment(0) | 日記 | 更新情報をチェックする

2019年01月09日

ADPCM等修正版

新年あけましておめでとうございます。2019年もよろしくお願いいたします。

さて、以前からADPCMの音が抜けたような音になっているという感想があり、
ADPCMの再生を少し見直しました。
内容としてはADPCMの更新期間内に内挿(補間)を入れています。
また、DMA CH2でデータ転送中にADPCMの転送要求が来る、ということも想定されるため
従来は優先順位は転送開始時にしか参照していませんでしたが、バイト・ワード単位での
タイミングで優先順位の参照をするように更新しました。
release-F68k_DE0CVDEMU.190108.qar
posted by プー at 08:10| Comment(0) | リリース/X68k | 更新情報をチェックする