The last few days I’ve been fooling around with the debug modes in a few Virtual Boy games.
The biggest discovery was that Vertical Force’s debug menu is fully accessible in the retail game without hacking. I was also able to make a tiny bit of progress getting SD Gundam’s debug menu up, and lastly I made a small custom patch to change how the Virtual Bowling debug menu is launched. I want to give Parasyte huge credit for the Vertical Force discovery and my little Bowling mod, as both relied heavily on that original hacking work done some 20 years ago.
Vertical Force
Notably, Parasyte predicted in the readme for the original debug mode hack that, given its high-quality presentation, the menu might be accessible in-game. Well, it’s nice to know that hunch was right, all these years later! To access the debug menu, open the Config menu then press the following sequence of buttons:
- Left D-Pad Left
- Left D-Pad Left
- Right D-Pad Right
- Right D-Pad Right
- Left D-Pad Up
- Right D-Pad Down
- Left D-Pad Up
- Right D-Pad Down
- L
- R
- Right D-Pad Right
- Right D-Pad Right
- Left D-Pad Left
- Left D-Pad Left
- Right D-Pad Up
- Left D-Pad Down
- Right D-Pad Up
- Left D-Pad Down
- R
- L
If you don’t want to remember all that, there’s obviously Parasyte’s existing hack here on virtual-boy.com, which forces the debug menu to load on startup. Alternatively, there’s now a patch on The Cutting Room Floor’s Vertical Force page which replaces this button sequence with a single press of Select on the Config screen.
SD Gundam: Dimension War
It’s been known that SD Gundam has some sort of stage select for a while now, but as far as I know nobody has managed to trigger it in-game. I wasn’t able to get the menu working, but I did manage to get it to at least load and display on-screen.
The function at 41EE8
in the ROM is responsible for the debug menu. I wasn’t able to find if there’s anywhere in code which jumps to this function, but I’m just goofing around in an emulator. Somebody more capable (and with access to a disassembler?) may very well be able to take this further and get the debug menu fully working.
That said, you can force the game to jump to this function to at least see the menu, albeit without it actually functioning. Editing offset 7FD0
in the ROM from 01 AC E4 FE
(jal fff27eb4
) to 03 AC 18 9F
(jal fff41ee8
) will replace the main menu screen with the “SELECT GAME MODE” menu. From here, you can’t really do anything. A/Start will boot the game, but it’s not otherwise possible to navigate the menu or do anything useful. I’ve attached a screenshot of this menu, since looking at a screenshot is about as good as doing it for real with this half-baked modification.
I haven’t bothered making an IPS patch for this change because it’s basically useless, but I think it’s very likely somebody knowledgeable could get it into a completely working state. Who knows, it could even be like Vertical Force where the debug mode is accessible without hacking but nobody’s figured out how to open it yet.
EDIT: I finally managed to figure out Bob Vanderclay’s V810 Disassembler and got SD Gundam disassembled. I can confirm that there are no jumps to the debug menu function anywhere in the game (unless they’re obfuscated, but I’ll get into why I think that’s unlikely). What there is, however, is a dummy function at 7B8C
which immediately jmp [lp]
s, i.e. calling the function simply returns. There are also 28 calls (!) of this function scattered throughout the game’s program, including in conspicuous places like the start of the main menu function. Every single one of them is additionally stepped over with a jr
, so the dummy function itself is never actually called.
My supposition is that the central portion of the game’s debug code lived in this function, which was compiled out for retail. This function would have handled jumping off to the various debug functions based on what functionality was called for at any given point in execution. This means it’s substantially more difficult for debug to be re-enabled in the retail build, because whatever this function used to do is completely opaque to us from the perspective of the final build. Depending on how thoroughly the rest of the debug code was scrubbed, it could be theoretically possible to restore the functionality by reproducing this function blind, but that would be a huge undertaking and require somebody with much greater ability than I have. Sorry for the downer result!
Virtual Bowling
This one is probably the least interesting, but I made a small hack to adjust how the debug menu is launched in Virtual Bowling. Parasyte’s patch here on virtual-boy.com simply forces the debug menu to open on start-up. This sort of means you need to keep two separate Virtual Bowling ROMs around depending on whether you want debug today or not. My modified patch instead checks whether you’re holding the Select button on start-up. If you are, the debug menu is triggered, otherwise the game boots normally. You can download this modified patch from The Cutting Room Floor’s Virtual Bowling page.
- This topic was modified 8 months, 2 weeks ago by Vague Rant.
Attachments:
@ Vague Rant: do you plan to release more save patches in the future? I am not sure how far you progress with Space Invaders has been, but this is one game I would be interested in.
Just for the sake of completeness:
I got two more reprocards with save feature now, Space Squash and V-Tetris.
Space Squash with save patch 1.2, works perfectly, V-Tetris with save patch 1.1. (seems like only been released here and not on github) works, but during erasing the save by pressing L + R + Left D-Pad Down + Right D-Pad Down on the title screen the game freezes and one need to restart the console. But after that the save has been reset and everything works fine again.
EDIT: Got now also Waterworld with save patch 1.1. The highscore saves well, but you can´t delete it. The combination L + R + Left D-Pad Down + Right D-Pad Down on the title screen does not do anything.
EDIT 2: In preparation of some more reprocards with save feature I tested the save patch 1.0 for Vertical Force (US version). It does not work correctly since the hi-score only displays “M6865600” and the best time shows “99:59:59:98”.
With the save patch 1.1 from page 2 everything works correctly on my HF32 flashcart.
- This reply was modified 3 months, 3 weeks ago by abarth.
Attachments:
I am not sure if anyone is still interested in this thread, but I have to clarify that the V-Tetris save patches (both version V1.0 and V1.1) only save the highscores in mode A, not in B and C. This is quite sad.
Has anyone ever tried out the Virtual Bowling debug mode access with select during startup which is mentioned in the first post and also available for download here on PVB?
It does not work on my HF32 flashcart…