melonDS-emu / melonDS

DS emulator, sorta
https://melonds.kuribo64.net
GNU General Public License v3.0
3.27k stars 542 forks source link

MelonDS is unable to boot up a ROM Hack of Pokémon White (1) #1358

Closed LOuroboros closed 1 year ago

LOuroboros commented 2 years ago

Title. MelonDS doesn't seem to be able to boot up a ROM of Pokémon Volt White 1, ROM Hack of Pokémon White 1 created by Drayano. Desmume can do it though.

https://user-images.githubusercontent.com/4485172/152613102-0344c865-b952-4cb3-9d2d-89856b43a38d.mp4

I'm not sure if it's gonna be helpful, but here's my MelonDS .ini: melonDS.txt I renamed it to a .txt file because GitHub is picky about file formats.

I checked if disabling the JIT Recompiler and swapping the graphics renderer helped, but no dice. The game refuses to boot up.

patataofcourse commented 2 years ago

IIRC this happens because melonDS emulates the IR stuff in Pokémon B/W, while most ROMs online stub it for use with flashcarts (see #1158). This hack does the same thing. For fixing it, what you could try is opening the ROM in a hex editor and patching the title ID to D/P/Pt's

LOuroboros commented 2 years ago

IIRC this happens because melonDS emulates the IR stuff in Pokémon B/W, while most ROMs online stub it for use with flashcarts (see #1158). This hack does the same thing. For fixing it, what you could try is opening the ROM in a hex editor and patching the title ID to D/P/Pt's

The title ID being the first 18 bytes, correct? I replaced them with 50 4F 4B 45 4D 4F 4E 20 50 4C 00 00 43 50 55 45 30 31, Pokémon Platinum's, but it didn't work :eyes:

patataofcourse commented 2 years ago

in theory it would be whatever shows as the four character string INBx (x being E/P/J/etc depending on region), but maybe you can try loading it in melonds 0.9.1, because 0.9.2 was when IR emulation was added

LOuroboros commented 2 years ago

in theory it would be whatever shows as the four character string INBx (x being E/P/J/etc depending on region), but maybe you can try loading it in melonds 0.9.1, because 0.9.2 was when IR emulation was added

That seems to work, thanks :eyes:

Gonna leave this ticket opened if you don't mind though. Ideally, this workaround shouldn't be required imo.

LOuroboros commented 2 years ago

Still happening in v0.9.5 :eyes:

Epicpkmn11 commented 1 year ago

Tested on real hardware and IR works fine in Pokemon Volt White when running from nds-bootstrap, with the exact same ROM that freezes melonDS.

RSDuck commented 1 year ago

doesn't nds-bootstrap patch the saving on SDK level?

Epicpkmn11 commented 1 year ago

Yeah, nds-bootstrap does some kinda patching to saving so I suppose that could be affecting something, but what #1597 is saying about IR being stubbed out in ROM hacks is clearly not true given that IR works perfectly fine in the ROM hack mentioned

I'm really not sure what's going on in the save patching so I'm not sure exactly if it's doing anything special to IR games or not, @RocketRobz might be able to say if there's anything that would affect this

Edit: Here's the NDSBTSRP.LOG from Volt White: NDSBTSRP.LOG.txt

RocketRobz commented 1 year ago

I'm really not sure what's going on in the save patching so I'm not sure exactly if it's doing anything special to IR games or not, @RocketRobz might be able to say if there's anything that would affect this

How the save patching works in nds-bootstrap is the branches to the save chip R/W functions being replaced with branches to our own save file R/W code. For games using THUMB arm7 binaries, the actual code gets replaced with jumps to our code, due to branch distance limitations.

RSDuck commented 1 year ago

Ok you were right afterall, it was something different.

This commit "broke" them: https://github.com/melonDS-emu/melonDS/commit/cd4ef575ee6e85e607e9a26a38af9d69d1cc69f3#diff-fd84b14d29012a982d0193020e7cba8e84f997806627e7b1fd81bde261b8b3a0

The romhack blanks the DSi header (likely happened during recalculation of some header checksums with a tool which wasn't aware).

https://github.com/melonDS-emu/melonDS/commit/ca7fb4f55e8fdad53993ba279b073f97f453c13c detects this and makes the cartridge a regular DS cartridge instead to fix it.

Tosh0kan commented 12 months ago

This problem is still very much present in the latest release. Any fix on the horizon?

RSDuck commented 12 months ago

the fix was commited after the lastest release.

Tosh0kan commented 12 months ago

Ah, okay. So I either have to wait for a new release or build it myself with the commit. Since I don't know how to do the latter, any idea when the former may happen?

LOuroboros commented 8 months ago

Ah, okay. So I either have to wait for a new release or build it myself with the commit. Since I don't know how to do the latter, any idea when the former may happen?

Just so you know, you can download dev builds from the Actions tab of this repository.

melonDS_20240314_023015380

firefox_20240314_022035381