80:コブラII 伝説の男/ケンカのシーンでとまる

最終状態:完了
report#80.1
投稿者:na6ko
時刻:2018-09-13 23:07:21
状態:修正済
頻度:未回答
<BTS:71> #5 の続き.
自前コードで CD-ROM2 レジスタの address 0x1ff803.r.6 == 0 であることを期待して停まっていた.
address 0x1ff803.r.6:5 は CD drive の IRQ event とその mask があり下記の接続となる.
6280.IRQ2 = (event[1] & mask[1]) | (event[0] & mask[0]);
0x1ff803.r.6:5 は下記のようにしていた.
0x1ff803.r.6:5 = event[1:0]; 
これを下記に変更するとソフト側の期待値になる.
0x1ff803.r.6:5 = event[1:0] & mask[1:0]

bios 外の自前コードで勝手に見ているだけなので影響は少ないと思うが、期待する値に変更した. 変更はしたが、参考になるオープンソースのエミュレータのソースコードも読みづらくてこれがいいのか自信がない.
report#80.2
投稿者:na6ko
時刻:2018-09-13 23:16:03
状態:受付済
頻度:未回答
HuVideo のユナが起動しなくなったのでこの修正は没...
report#80.3
投稿者:na6ko
時刻:2018-09-14 00:17:42
状態:受付済
頻度:未回答
emulator のソースコードを見なおすと address 0x1ff800.w = 8'hxx とすると, event[1:0] = 0 とすると期待通りになるようだ.
それはsoftでの変数だと簡単に 0 に設定できるが、このレジスタは MCU が管理しているので MCU へ割り込みをかけてはじめて event[1:0] = 0 とできる. しかし address 0x1ff800.w = 8'hxx は MCU への割り込み条件にしていない.
address 0x1ff803.w.6:5 とは別の and 演算 mask を付ければいいが、 mask を 0 にするところがわかっていても 1 にする場所の調査がいる.
report#80.4
投稿者:na6ko
時刻:2018-09-14 13:30:04
状態:修正済
頻度:未回答
#3 の対策は効果がなかった.
address 0x1ff803.r.6 == 0 であることの期待は下記の手順であった.
- read(6) 発行, 転送先 ADPCM 用 RAM
- 読み込み完了後レジスタの操作
- address 0x1ff803.r.6 == 0 を期待
- そのあと CD-ROM2 側が address 0x1ff803.r.6 = 1 とする.

問題のレジスタの確認タイミングは 1->0 になる場所と思っていたが実際には 0->1 であった. ロード時間を落とした上, そのレジスタを設定する MCU の処理に待ち時間をいれることで動作した.
この待ち時間は scsi.c の disc_done_cdrom() で転送先が 6280 向け fifo のときはいれていたが、転送先が ADPCM 用RAM の場合もその待ちをいれることにした.

この部分は mednafen の pce_fast でも発生する問題.
report#80.5
投稿者:na6ko
時刻:2018-10-30 19:56:11
状態:修正済
頻度:未回答
https://twitter.com/yamada_arthur/status/1056174730342887425
PCE(CDR) コブラⅡ 伝説の男(ハドソン)のタイトル画面で上を押しながらⅡ、左を押しながらⅠ、右を押しながらⅠ、下を押しながらⅡの順に入力するとシナリオ選択などができるメニューが出現します。
report#80.6
投稿者:na6ko
時刻:2018-10-30 20:00:38
状態:完了
頻度:未回答
まだ不安なところがあるがデバッグメニューのやり方もわかったので終了.
問題が見つかれば復活するかもしれない.