-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Digimon World HLE bios issue #46
Comments
Thanks for the fixes, I'll incorporate them asap, though, I'm not in active development now. |
Well i kinda figured that you're not working actively right now. Just thought i would let you guys (senquack and you) know, especially since no one cares. If you only care about fixing the memory card issue, then check out buopen and card_info. |
I'd already caught the one PAD_init type-argument checking bug, while checking mem alignment bugs elsewhere in the project (Need for Speed 2,3 need this fix). Thanks for notifying of the other HLE issues. I am currently doing unrelated work in HLE regarding removal of unneeded ResetIoCycle() calls. I am working on other things right now, but will revisit HLE in the future. For now, just advise users to use a real BIOS, HLE has many issues as I'm sure you're aware. Issue I see with some of your HLE patches:
|
I'd also like to add that some of these patches from Steward are useful (4-pixel, 16-pixel sprite rendering optimization is good, I know this because I've verified something similar myself). However, part of his solution involves this: If someone is going to go through the trouble of adding an ASM memcpy, it better be better than what C could generate on its own! This code would take (assuming no L1 misses) a minimum of 10 cycles each loop. It could be cut down to 7 cycles with just 30 seconds of effort, and C likely would have done that for you. Furthermore, your libc likely already includes a MIPS ASM memcpy that does much better than even 7 cycles per loop, massively unrolling the entire copy and reducing L1 miss effects. Now, this |
.. (left from other message) |
Alright so i managed to narrow down the boot issue in Digimon World to two commits. This one, which fixes strcat and add some checks to it Now, the game will boot but input will not work at all and this can be fixed with this (i explain above what it does) But then, the game will refuse to start a game and behave very strangely with memory cards. You can start a new game but if you reboot and try to continue your game, well you can't. After that, the game will now behave properly with saves. Unfortunately, the issues with missing sound effects & music still remain but this does allow the game to be played properly now. |
Are all your commits in hle_improvements branch are essential? Or some of them are random? Don't get me wrong, I appreciate your work, but for now it seems easier for me to squash your changes into one mega patch, fix codestyle and commit as-is. |
Not of them are not essential, they are general improvements to the HLE. |
It's better to squash Digimon patches into one with a descriptive commit message. Btw, are you aware of 'git rebase -i' ? :) It's an easy way to work with existing commits and move them around, merge or delete. Other improvements should stay separate, I suppose. It's ok to accept them if they don't break existing games. |
Alright, i did as you said and only did a pull request for allowing the game to boot here : It doesn't fix the memory card issues yet, i will issue another pr for that but the game still boots and can be played with the pr. (it also properly fixes other unrelated games) |
Digimon World had two issues with the HLE implementation
The first one occurs when it uses the strcat by attaching ;1 to a string. Disabling the function lead to the game to boot, which led me to nocash's psx documentation and it turns out the function is not correctly implemented. It also needs psxRegs.CP0.n.Status |= 0x401; for it to work properly and go past the lock up, whatever this does. (related to IRQ ?)
The second one is input related : it would not detect button presses.
After much frustration trying to debug it, it turns out to be yet another missing check.
Doc says that Bx015 (OutdatedPadInitAndStart) will only work if type is 0x20000000 or 0x20000001.
If it's not, then it will refuse to do anything. Implementing this behaviour also fixed input in digimon.
You can see my fixes to those here
gameblabla/pcsx4all@79411d3
Unfortunately, while the game is playable, it still has some issues.
The other one is that sound effects will not playback (but other sounds will work ok). The other, more annoying issue is related to memory cards. If you start a game in Digimon World, save it, exit the emulator and try to continue the game from the game itself, it will fail to detect the saves in there.
And when you attempt to start a new game over the one you were using, it will refuse to start the game. I believe that the game will not create a new game and overwrite it over an existing one.
But it still shows as if no saves exists. Card_info function is used for checking saves (apparently).
So yeah, while i did allow the game to bootup and be playable, there are still other issues. I would be happy if anyone could fix these. (i will also let pcsx-rearmed about it but notaz isn't too active so i doubt)
The text was updated successfully, but these errors were encountered: