upergrafx cd 互換機能ソフト個別リスト

https://docs.google.com/spreadsheets/d/1wsMjm5DMLgWVzfab49cX-TYCAgx0fXAiLJ6UL7AwNAM/edit#gid=1608184984
致命度は低い物の(つまりなぜかとまらない)重要な問題をいくつか直しました.

command 0xdd, 0xde

databus を hardware handshake にしてから安定していませんでした.
この2つはゲーム起動後には安定しなくても動いていたのが謎でしたが、 0xde のほうは起動時のみ, 0xdd は CD player ぐらいでしかつかわないのでゲーム起動中はあまり関係がないということでした.

hardware handshake の不安定の原因は6280バスの監視の設計が根本的におかしかったことが判明しましたので直しました.

adpcm status (その1)

通常 ADPCM は再生完了の割り込みを受けてレジスタを再度更新するはずなのですが、割り込みを受けないソフトの対応をしました.

0x1ff80b.w = 1


6280 からみてwrite 側の対応よりかは read 側の対応も必要でした.
これにより HCD5080 (銀河婦警伝説) と HCD4067 (がろすぺ) がまともに遊べるようになりました. HECD6026 (てきぱき)はいままでまともに起動しませんでしたが、オープニングが動いてゲーム本編でいきなり停まるところまでです.
がろすぺとてきぱきは問題のBIOS外でのレジスタ操作の部分のソースがまったく同じでソースを流用した可能性があります. *1

0x1ff80b.r 側の対応をしたためなのか charawrong がいくつか改善しています. NAPR-1018 (download2) は全く直ってないので別の原因かもしれません. これは毎回起きるわけではなかったのでしばらく様子見です.

fadeout

fadeout 完了後に音量が0%の場合にもう1度 fadeout とすると音量が100%に戻ってfadeoutをし直すという問題の対応をしましたがこれが不十分で、銀河婦警伝説はそこがおかしくなりました. ゲーム本編はまったく問題ありません.

adpcm status (その2)

途中で adpcm が再生できなくなっておかしくなっていました.
原因は state machine の state で fifo の empty での条件更新が同じ複数レジスタが一部矛盾していました(まれに発生). empty flag を 1 度 latch してから条件にいれたら安定しました. これは warning で文句いうのか伝搬遅延で高い値がでるはずなんですが、見落としてたのかもしれません.
ただ empty flag の使い方は複雑な条件を混ぜてるわけではなく, dual clock fifo の write 側の empty を見ているので勝手が違うのかもしれません. (通常は empty を見るのは read 側が大半)

*1:意外なことに餓狼2とがろすぺのソース流用はないらしい