dgrfactory / spcplay

SNES SPC700 Player + Improved SNESAPU.DLL
https://dgrfactory.jp/spcplay/
GNU General Public License v2.0
142 stars 7 forks source link

[APU.asm] EmuAPU で 2147483648 サイクル以上を指定すると負の値と判定され EmuSPC が実行できず、更に cycLeft が上書きされる。 #39

Closed GodGnilda closed 2 years ago

GodGnilda commented 2 years ago

平素よりお世話になっております。

仕様では EmuAPU の len の型は u32 ですが、 https://github.com/dgrfactory/spcplay/blob/cd9d358703f1e160f454d7b208b101c6bccecff4/snesapu.dll/APU.asm#L488-L498 サンプル数の場合は 491 行、サイクル数の場合は 497 行の EAX + cycLeft で 2147483648 サイクル以上を指定しますと負の値と判定され、EmuSPC が実行されず https://github.com/dgrfactory/spcplay/blob/cd9d358703f1e160f454d7b208b101c6bccecff4/snesapu.dll/APU.asm#L520-L521 更に 521 行で cycLeft が EAX + cycLeft で上書きされてしまうようです。

dgrfactory commented 2 years ago

@GodGnilda さん 平素よりお世話になっております。 不具合のご報告をいただき、ありがとうございます。

こちらでも不具合を確認いたしました。 後続処理の EmuSPC の引数が s32 であるため、条件判定を変えただけでは動作しませんでしたので、 内部的に1秒ごとに区切ってエミュレーションする方式に変更いたします。

修正まで、いましばらくお待ちくださいませ。

dgrfactory commented 2 years ago

@GodGnilda さん 以下リリースにおいて修正いたしました。 たいへんお手数ですが、ご確認いただきますようお願い申し上げます。 https://github.com/dgrfactory/spcplay/releases/tag/2.19.1.7539

GodGnilda commented 2 years ago

@dgrfactory 様

最新版で 2147483648 サイクル以上を指定した場合でも EmuSPC が実行されることを確認いたしました。

EmuAPU2147483648

ご修正いただきありがとうございます。

dgrfactory commented 2 years ago

ご確認いただき、ありがとうございます。 本件、クローズいたします。