There may still be some of you out there who still, after all this time, prefer flashing the Classic NES GBA games to pocketnes or HVCA. Personally, I prefer the official series because it seems to be the only way to run the Japanese Mario 2 with good audio on an EZ FLASH IV. I think for a long time it wasn't even a viable option to run the series because of the intense copy protection and finally the inability for there to be a sleep mode. Today, that's pretty much all taken care of, though.
I found kuwanger's info in this thread a while ago, explaining what to look for when manually editing out the sleep interrupt using VBA's disassembler to find where to change a value in hex.
This is actually really useful on its own as a tool to fix games like Yoshi's Island which have a built-in sleepmode that doesn't work on flashcarts.
It turns out this method doesn't ordinarily work for the Classic NES games, as the line of code you end up with when putting the games into sleep mode doesn't have the code pattern you're looking to locate and edit around!
...Or does it?
Here's what you need to do to get sleep working on your Classic NES game of choice, courtesy of kuwanger's instructions that I heavily modified:
1. Run an affected rom under VBA (in this day and age, VBA-M-WX or whatever.) Make sure it isn't yet patched with those helpful patches lying around that let you run Classic NES games and Famicom Minis on your flashcart, because the roms give a cartridge error in the emulator if they're patched already.
2. Open the disassembler (under Tools) and set it to "automatic update." but keep a close eye on it during the rest of the process.
3. Pause the rom and enter sleepmode in the L+R menu by holding the enter button while hitting CTRL-N once.
4. Keep pressing CTRL-N until the code jumps to an area with lines like this:
That is to say, an area with the first block starting with 08 and the second block being only 4 characters long.
5. Scroll down or up around 25ish lines until you see something like this (the first line, mainly.
6. Make note of the address where that first line is (0800045c into hex is 0x00045c) and go there using a hex editor to open the rom. Overwrite (do not add to the rom) the C0 you find there with a 40.
tl;dr to get sleep mode on classic nes games, use frame-by-frame when going into sleepmode for when it jumps to the 08000000 0000 area. find and replace the C0 at (21c0 mov r1, #0xc0) with a 40 in a hex editor. When you patch it and send the game to your cart its built-in sleep mode will work.
tl;drII use pocketnes.
Edit: There are a lot of values for the North American and even Japanese Classic NES games down there, provided by Gyron generously, along with improved hex edits for some regular GBA games. Enjoy!!
I found kuwanger's info in this thread a while ago, explaining what to look for when manually editing out the sleep interrupt using VBA's disassembler to find where to change a value in hex.
This is actually really useful on its own as a tool to fix games like Yoshi's Island which have a built-in sleepmode that doesn't work on flashcarts.
It turns out this method doesn't ordinarily work for the Classic NES games, as the line of code you end up with when putting the games into sleep mode doesn't have the code pattern you're looking to locate and edit around!
...Or does it?
1. Run an affected rom under VBA (in this day and age, VBA-M-WX or whatever.) Make sure it isn't yet patched with those helpful patches lying around that let you run Classic NES games and Famicom Minis on your flashcart, because the roms give a cartridge error in the emulator if they're patched already.
2. Open the disassembler (under Tools) and set it to "automatic update." but keep a close eye on it during the rest of the process.
3. Pause the rom and enter sleepmode in the L+R menu by holding the enter button while hitting CTRL-N once.
4. Keep pressing CTRL-N until the code jumps to an area with lines like this:
Code:
080fb8e8 0189
That is to say, an area with the first block starting with 08 and the second block being only 4 characters long.
5. Scroll down or up around 25ish lines until you see something like this (the first line, mainly.
Code:
0800045c 21c0 mov r1, #0xc0
0800045e 0189 lsl r1, r1, #0x06
08000460 1c08 add r0, r1, #0x0
08000462 3a02 sub r2, #0x2
08000464 8010 strh r0, [r2, #0x0]
6. Make note of the address where that first line is (0800045c into hex is 0x00045c) and go there using a hex editor to open the rom. Overwrite (do not add to the rom) the C0 you find there with a 40.
tl;dr to get sleep mode on classic nes games, use frame-by-frame when going into sleepmode for when it jumps to the 08000000 0000 area. find and replace the C0 at (21c0 mov r1, #0xc0) with a 40 in a hex editor. When you patch it and send the game to your cart its built-in sleep mode will work.
tl;drII use pocketnes.
Edit: There are a lot of values for the North American and even Japanese Classic NES games down there, provided by Gyron generously, along with improved hex edits for some regular GBA games. Enjoy!!
Last edited by themojius,