https://youtu.be/lHL6hkaX_AM
debug terminal をみる限りでは推測不明
00] 00 00 00 00 00 00 [40/1836]
disc #0011
DE.00]x01
DE.01]x01
DE.02]x02
08> 000E06 02-> 6280
08> 000E08 01-> 6280
08> 000E09 01-> 6280
08> 000E0A 12-> 6280
08> 000E1A 08-> 6280
08> 000E3A 0C-> 6280
08> 000E9A 20-> ADPCM RAM 02
08> 00111E 04-> 6280
08> 001122 18-> 6280
08> 00113A 10-> 6280
08> 0011DC 04-> 6280
08> 00114A 10-> ADPCM RAM 02
D8> 01:23:70 play
audio play
drive stop
08> 0011E0 04-> 6280
08> 00115A 0C-> 6280
08> 001166 14-> 6280
08> 00117A 08-> 6280
08> 001182 08-> ADPCM RAM 02
08> 001198 08-> ADPCM RAM 02
D8> 02:19:64 play
audio play ここで停まる
6280 の動作を見ていると 0x1ff80c.r.0 == 1 を期待しているが 0 のままなので進行停止になっていた.
MAME の動作 (以前の実装)
- 0x1ff80d.w.7 = 1 の時点で 0x1ff80c.r.0 = 1 とする.
Mednafen の動作 (現在の実装)
- 0x1ff80d.w.7 = 1 で rw_length = 0 を代入 (実装していなかった)
- 0x1ff80d.w.7 = 1 で 0x1ff80c.r.0 = 0 (実装済み)
- 6280 から ADPCM 用 RAM を読むときに rw_length == 0 なら 0x1ff80c.r.0 = 1 とする (実装していなかった)
0x1ff80d.w.7 = 1 のほうは完全に実装し忘れだったが問題になるソフトが Valis II 以外になかった.
0x1ff80c.r.0 の参照は ADPCM の再生後にやるのが普通で, 6280 から読んだあとを想定していなかったので mednafen のソースもちゃんと読んでいなかった.
0x1ff80c.r.0 = 1 の更新条件はソース上では 2つになってしまった.
当実装では 6280 からの read と MSM5205 からの read で別にしているが本物では同じかもしれない. MSM5205 への fifo が空にしてから更新しないと早めに ADPCM 再生がとまることがあるので統合できない.