DragonMinded
Professional
I've spent the last month RE'ing various parts of the Naomi since I just got into net-booting. There didn't seem to be any existing published research on how the Naomi saves system or game settings, the ROM header format, or anything around making the hacks that exist currently. So, I spent a solid month banging my head against a brick wall figuring out how things work. Why? I mean, you can just press the service switch a few times to coin up right? Well, yeah if you have a Vewlix, Astro or a supergun setup. Just leave the coin door open and reach in. But if you have a NNC you have to open the CP to get to the service switch. Not great for guests, and a huge pain since you can't leave it open! I know, a month of effort to be lazy and not open up the service menu for five seconds. I guess I can't underestimate the amount of effort I'll go to in order to be lazy.
The result is what I think is a semi-universal patch creation program which can force a game to free-play on net-boot, and another which can force a game to be quiet on attract mode when net-booting. They can be applied independently or together, and work with existing hacks that metallic and darksoft put out to do various other things. These patches also work in MAME/demul/nulldc. I've tested on a handful of games, all which work perfectly on my Naomi. However, it would be great if I could get confirmation that others have success. I don't think this will work on converted Atomiswave games, but the method of discovering their secrets should be approximately the same as documented below. The existing patches (as well as a few of the force-unlock patches) are available here if you want to manually hex-edit them into your games that you are net-booting: https://github.com/DragonMinded/netboot/tree/master/patches
I documented basically everything I learned (not much) from doing this RE here: https://github.com/DragonMinded/netboot/blob/master/docs/naomi.md
In the process of doing this, I successfully compiled and ran code on my Naomi hardware, so it is 100% possible to start writing homebrew given the docs. I'm probably not going to myself since the Naomi is CURSED and there are so many issues I ran into with cache in the SH-4 on real hardware that worked fine in all emulators. Most things are similar to Dreamcast so there's gonna be some figuring out to do but all the necessary pieces for how to get your code on the Naomi are documented. I've proven that it works by writing code which dynamically alters the 'Now loading game...' text in MvsC2. This is how I was able to debug various register values on actual hardware without going through the struggle of initializing video myself. Its kinda fun, you see a raw register print hex and then the game loads like normal, completely unaware that you messed with the loading screen to turn it into a debug printf.
Okay so how can you help? The netboot repo I work under is https://github.com/DragonMinded/netboot and if you check it out and install the requirements (its python 3 code) and run the free-play and no-attract patch generators on ROMs I haven't tried yet, you can verify that the patcher program finds an offset to modify, test it on your own Naomi and then report back the verified offsets for that game. I also accept pull requests to add the patches directly to the repo. Known working patches are as follows:
force free-play hack:
- CvS: 0xFF358: 42 84 -> 1A E0
- CvS2 MOTM: 0x116E58: 42 84 -> 1A E0
- CvS2 MF: 0x1161F8: 42 84 -> 1A E0
- Guilty Gear X: 0x72A28: 42 84 -> 1A E0
- Ikaruga: 0x52626: 42 84 -> 1A E0
- Illvelo: 0x620C6: 42 84 -> 1A E0
- Karous: 0x6135A: 42 84 -> 1A E0
- MvsC2: 0x1D8138: 42 84 -> 1A E0
- Monkey Ball: 0x6BE30: 42 84 -> 1A E0
- PowerStone 2: 0x158F88: 42 84 -> 1A E0
- PyuoPuyo Da: 0x44F86: 42 84 -> 1A E0
- PuyoPuyo Fever: 0x37EAE: 42 84 -> 1A E0
- Quiz K QMode: 0x29A58: 42 84 -> 1A E0
- Radirgy: 0x6136E: 42 84 -> 1A E0
- Street Fighter Zero 3 Upper: 0xE8832: 42 84 -> 1A E0
- Tetris Kiwamemiti: 0x7FAB2: 42 84 -> 1A E0
- Trigger Heart Exelica: 0x13E522: 42 84 -> 1A E0
- Trizeal: 0xBE782: 42 84 -> 1A E0
- Under Defeat: 0x43FD6: 42 84 -> 1A E0
force silent attract mode hack:
- CvS: 0xFF3EC: 40 63 -> 00 E3
- CvS2 MOTM: 0x116EEC: 40 63 -> 00 E3
- CvS2 MF: 0x11628C: 40 63 -> 00 E3
- Guilty Gear X: 0x72ABC: 40 63 -> 00 E3
- Illvelo: 0x6214E: 40 63 -> 00 E3
- Karous: 0x613E0: 40 63 -> 00 E3
- MvsC2: 0x1D81CC: 40 63 -> 00 E3
- Monkey Ball: 0x6BEC4: 40 63 -> 00 E3
- PowerStone 2: 0x15901C: 40 63 -> 00 E3
- PuyoPuyo Da: 0x4500C: 40 63 -> 00 E3
- PuyoPuyo Dever: 0x37F36: 40 63 -> 00 E3
- Quiz K QMode: 0x29AEC: 40 63 -> 00 E3
- Radirgy: 0x613F4: 40 63 -> 00 E3
- Street Fighter Zero 3 Upper: 0xE88B8: 40 63 -> 00 E3
- Tetris Kiwamemiti: 0x7FB38: 40 63 -> 00 E3
- Trigger Heart Exelica: 0x13E5AA: 40 63 -> 00 E3
- Trizeal: 0xBE808: 40 63 -> 00 E3
- Under Defeat: 0x4405C: 40 63 -> 00 E3
EDIT: There is a Naomi-supported way to force free-play and no-attract that MetalliC revealed later in the thread. I haven't had a chance to test yet, so I am not generating any patches with this info yet. Also, I removed Ikaruga's force silent attract mode patch since the game already does it. I've updated the above list with more tested working patches.
EDIT again: I've rolled the header information into a ROM header tool and updated the freeplay/no attract patch generators to prefer modifying the header for the "supported" force options. I've stopped updating this patch list, so you should go to https://github.com/DragonMinded/netboot/tree/master/patches to see all available patches.
Final EDIT: Updated with information on how to set up Atomiswave conversions to apply settings on boot that you select in an emulator. With the info and tools linked here you *should* be able to netboot any naomi game and force it to free-play or silent attract mode, and if you are adventurous you could set to different settings as well.
The result is what I think is a semi-universal patch creation program which can force a game to free-play on net-boot, and another which can force a game to be quiet on attract mode when net-booting. They can be applied independently or together, and work with existing hacks that metallic and darksoft put out to do various other things. These patches also work in MAME/demul/nulldc. I've tested on a handful of games, all which work perfectly on my Naomi. However, it would be great if I could get confirmation that others have success. I don't think this will work on converted Atomiswave games, but the method of discovering their secrets should be approximately the same as documented below. The existing patches (as well as a few of the force-unlock patches) are available here if you want to manually hex-edit them into your games that you are net-booting: https://github.com/DragonMinded/netboot/tree/master/patches
I documented basically everything I learned (not much) from doing this RE here: https://github.com/DragonMinded/netboot/blob/master/docs/naomi.md
In the process of doing this, I successfully compiled and ran code on my Naomi hardware, so it is 100% possible to start writing homebrew given the docs. I'm probably not going to myself since the Naomi is CURSED and there are so many issues I ran into with cache in the SH-4 on real hardware that worked fine in all emulators. Most things are similar to Dreamcast so there's gonna be some figuring out to do but all the necessary pieces for how to get your code on the Naomi are documented. I've proven that it works by writing code which dynamically alters the 'Now loading game...' text in MvsC2. This is how I was able to debug various register values on actual hardware without going through the struggle of initializing video myself. Its kinda fun, you see a raw register print hex and then the game loads like normal, completely unaware that you messed with the loading screen to turn it into a debug printf.
Okay so how can you help? The netboot repo I work under is https://github.com/DragonMinded/netboot and if you check it out and install the requirements (its python 3 code) and run the free-play and no-attract patch generators on ROMs I haven't tried yet, you can verify that the patcher program finds an offset to modify, test it on your own Naomi and then report back the verified offsets for that game. I also accept pull requests to add the patches directly to the repo. Known working patches are as follows:
force free-play hack:
- CvS: 0xFF358: 42 84 -> 1A E0
- CvS2 MOTM: 0x116E58: 42 84 -> 1A E0
- CvS2 MF: 0x1161F8: 42 84 -> 1A E0
- Guilty Gear X: 0x72A28: 42 84 -> 1A E0
- Ikaruga: 0x52626: 42 84 -> 1A E0
- Illvelo: 0x620C6: 42 84 -> 1A E0
- Karous: 0x6135A: 42 84 -> 1A E0
- MvsC2: 0x1D8138: 42 84 -> 1A E0
- Monkey Ball: 0x6BE30: 42 84 -> 1A E0
- PowerStone 2: 0x158F88: 42 84 -> 1A E0
- PyuoPuyo Da: 0x44F86: 42 84 -> 1A E0
- PuyoPuyo Fever: 0x37EAE: 42 84 -> 1A E0
- Quiz K QMode: 0x29A58: 42 84 -> 1A E0
- Radirgy: 0x6136E: 42 84 -> 1A E0
- Street Fighter Zero 3 Upper: 0xE8832: 42 84 -> 1A E0
- Tetris Kiwamemiti: 0x7FAB2: 42 84 -> 1A E0
- Trigger Heart Exelica: 0x13E522: 42 84 -> 1A E0
- Trizeal: 0xBE782: 42 84 -> 1A E0
- Under Defeat: 0x43FD6: 42 84 -> 1A E0
force silent attract mode hack:
- CvS: 0xFF3EC: 40 63 -> 00 E3
- CvS2 MOTM: 0x116EEC: 40 63 -> 00 E3
- CvS2 MF: 0x11628C: 40 63 -> 00 E3
- Guilty Gear X: 0x72ABC: 40 63 -> 00 E3
- Illvelo: 0x6214E: 40 63 -> 00 E3
- Karous: 0x613E0: 40 63 -> 00 E3
- MvsC2: 0x1D81CC: 40 63 -> 00 E3
- Monkey Ball: 0x6BEC4: 40 63 -> 00 E3
- PowerStone 2: 0x15901C: 40 63 -> 00 E3
- PuyoPuyo Da: 0x4500C: 40 63 -> 00 E3
- PuyoPuyo Dever: 0x37F36: 40 63 -> 00 E3
- Quiz K QMode: 0x29AEC: 40 63 -> 00 E3
- Radirgy: 0x613F4: 40 63 -> 00 E3
- Street Fighter Zero 3 Upper: 0xE88B8: 40 63 -> 00 E3
- Tetris Kiwamemiti: 0x7FB38: 40 63 -> 00 E3
- Trigger Heart Exelica: 0x13E5AA: 40 63 -> 00 E3
- Trizeal: 0xBE808: 40 63 -> 00 E3
- Under Defeat: 0x4405C: 40 63 -> 00 E3
EDIT: There is a Naomi-supported way to force free-play and no-attract that MetalliC revealed later in the thread. I haven't had a chance to test yet, so I am not generating any patches with this info yet. Also, I removed Ikaruga's force silent attract mode patch since the game already does it. I've updated the above list with more tested working patches.
EDIT again: I've rolled the header information into a ROM header tool and updated the freeplay/no attract patch generators to prefer modifying the header for the "supported" force options. I've stopped updating this patch list, so you should go to https://github.com/DragonMinded/netboot/tree/master/patches to see all available patches.
Final EDIT: Updated with information on how to set up Atomiswave conversions to apply settings on boot that you select in an emulator. With the info and tools linked here you *should* be able to netboot any naomi game and force it to free-play or silent attract mode, and if you are adventurous you could set to different settings as well.
Last edited: