65:天外魔境Ⅱ 卍MARU/特定箇所で音が出ない

最終状態:完了
report#65.1
投稿者:dualfumi
時刻:2018-06-12 01:07:43
状態:新規
頻度:必ず起きる
再現方法:
スタート直後の火多 高山村でのイベント動画中
スタート直後の火多 高山村でのイベント動画(高山祭の山車~暗黒ラン登場)中、一切音が出ない。
report#65.2
投稿者:MAT0603
時刻:2018-06-13 04:27:02
状態:新規
頻度:必ず起きる
この現象が起こった後のイベント動画中にRUN+SELECTでリセットし、タイトル画面に戻った後、RUNを押してAudio CD Playerに移行し、PLAYを押して再生を始めても、各イメージの最初の5秒の音声が一切出ませんでした。(リセットしてどれかのゲーム開始後は音が出て、再度リセットした後はAudio CD Playerでも音が出るようになりました。)
report#65.3
投稿者:na6ko
時刻:2018-06-14 20:14:21
状態:受付済
頻度:必ず起きる
調査いたします.
現在開発者の状況としまして開発に集中できない状況です.
落ち着きましたら必ずお調べします.
report#65.4
投稿者:na6ko
時刻:2018-06-17 22:56:25
状態:受付済
頻度:必ず起きる
原因がわかりました.
音量制御レジスタで fadein 機能を使っていますが、わたしが実装途中でそのまま忘れてしまったようです.

単純に実装していないだけでした. そして fadein は今まで使われたことがないです.
report#65.5
投稿者:na6ko
時刻:2018-06-18 02:45:20
状態:受付済
頻度:必ず起きる
先ほどわたしが書いた fadein の未実装はそのあとの調査ではあまり重要ではないことが判明しました.

タイクーンのADPCMのボイスのあとに CD-DA の fadeout が効いたままになっているのが原因のようです. ユーザーからのレポートはタイクーンのあとに西の宿にいってオープニングのビジュアルシーンにするのでそれで音が出ないとおっしゃっているようです.
西の宿にいかずに外に出ると CD-DA の音がでていないことが確認できます.

回避策としてはタイクーンのADPCMボイスのあとに別の人のADPCMボイスを聞くとこの問題はおきません.
軽く調査したところこれらの音量レジスタの制御は同じように見えるのでタイクーンの後だけ問題が出るのが謎です.
report#65.6
投稿者:na6ko
時刻:2018-06-18 14:34:25
状態:受付済
頻度:必ず起きる
深く調査できる高スペックの開発機が物理的に不調のようです.
これを直してから、再度調査いたします. 再開までに時間がかかりそうです.
report#65.7
投稿者:na6ko
時刻:2018-06-22 04:14:06
状態:受付済
頻度:必ず起きる
タイクーンのADPCMボイスの再生が終わると, 6280 clock -> audio clock への fifo の書込みが固定され続けている. これは明らかにおかしい動作で、固定され続けている原因を調査する.

東の宿2階のこの現象が発生するのは上段では真ん中(名前知らない)、下段ではタイクーンの2人. 上段左右の2人は発生しない.
report#65.8
投稿者:na6ko
時刻:2018-06-22 14:40:24
状態:修正済
頻度:必ず起きる
* 6280 clock -> audio clock での fifo への書込みが固定され続けている原因
adpcm controller の ADPCM 再生完了フラグを書込みに利用していた.
これを書込み条件から削除.

* 書込みが固定され続けると音量がかわらない理由
clock がかわるため dual clock fifo を利用する. これは内部回路を結構使用するので共有する. 共有するコードは下記の4つだった.
- ADPCM 再生完了フラグ (最優先,今回削除)
- 6280 address 0x1ff80d への書込み
- 同 0x1ff80e への書込み
- 同 0x1ff80f への書込み

このため問題発生時は 0x1ff80f の書込みが無視されて CDDA の音量が更新されなかった.

* 書込み条件から削除した理由
ADPCM 再生完了フラグを元に ADPCM data fifo を clear するのだが、ADPCM 再生完了フラグを立てる条件が ADPCM data fifo が empty であること. これはまったく意味ない.
おそらく開発時は別の意味で必要だったかもしれないが現在は不要で悪影響まであったので削除した.

* このバグが頻出しなかった理由
通常 ADPCM 再生完了フラグを元に ADPCOM controller を reset する処理をいれるのが普通で、これをもとに ADPCM 再生完了フラグは 0 になる. 
このゲームの該当人物では ADPCM 再生完了のあとにレジスタを何も書き込んでいないというあまりよくないコードになっていた.
report#65.9
投稿者:na6ko
時刻:2018-06-22 14:49:13
状態:修正済
頻度:必ず起きる
バグは修正しましたので次回配布時の内部データに適用されます.
report#65.10
投稿者:na6ko
時刻:2018-07-20 16:49:37
状態:完了
頻度:必ず起きる
続報がないため終了.