Tutorial
Updated
Forcing 4:3 display in Wii retail VC injections
Introduction
As a general rule, when you are running Wii mode software on the Wii U, it is displayed on your TV and GamePad using the aspect ratio configured in the Wii U settings. Wii BC modes inherit their aspect ratio from the Wii U, so if your Wii U is set to 16:9, then so is your vWii, and the Wii U knows to stretch the image output by the Wii to 16:9 to match. Up to a point, this is all fine, but there's one situation which isn't accounted for by this setup: even with the (v)Wii set to 16:9, some Wii games simply do not have widescreen support, and will continue to display a 4:3 image. The Wii U is broadly not prepared for this possibility, so it will continue to display those 4:3 games with an output aspect ratio of 16:9.
Now, Nintendo is not completely oblivious to the fact that some Wii software runs at 4:3. The DMCU microcontroller which receives the Wii image and passes it on to the Wii U for display is responsible for various scaling operations, one of which is a toggle between 4:3 and 16:9 scaling, independent of the Wii U's aspect ratio setting. Some time in about mid-2015, Nintendo pushed an update which used this feature to switch to 4:3 scaling when the user launched a Virtual Console game in Wii mode.
Still, there's plenty of Wii software besides the Virtual Console which only supported 4:3, including many WiiWare and retail disc titles. If you're launching these titles normally via the vWii, you can use a homebrew tool such as angelXwind's WiiU-ARToggle. Nintendont, USB Loader GX and the Nintendo 64 emulator, Not64 all have similar features in order to allow you to switch to 4:3 as needed. Then, when it comes to things like WiiWare injections, you can use FIX94's wiivc_chan_booter to enable 4:3 mode before your title launches (this tool comes bundled with TeconMoon's WiiVC Injector, so you may already be using it without realizing).
But the one scenario in which we have no way to switch to 4:3 is when launching Wii VC injections of 4:3-only retail games. That's what this tutorial aims to address.
Files Required
- some tool for extracting and replacing your Wii game's main.dol, e.g. WiiScrubber or Wiimms ISO Tools (wit)
- Wiimms StaticR Tool (wstrt)
- Force43.gct (attached to this post)
- ftpiiu_everywhere (easiest to find the correct version for your hax setup using the Homebrew App Store)
- FIX94's fork of nfs2iso2nfs
htk.bin (extracted from a Wii VC title)wii_common_key.bin (extracted or found online)
Note that this tutorial is a somewhat inefficient way to go about this, because existing all-in-one, GUI injection tools don't include this feature, but I'm using them here anyway because they're convenient and people are used to them.
You are here:
- Extract the main.dol from the Wii game you wish to inject. Using wit on the command line, you can do wit extract GAMEIMAGE DIRECTORY, e.g. wit extract STEETR.wbfs tetris, then enter the directory you created and find the main.dol under sys.
- Copy your main.dol to the wstrt directory.
- On the command line, run wstrt patch main.dol --add-section Force43.gct. It should tell you the patch was successful.
- Reinsert this patched main.dol into your disc image, e.g. in wit, you would copy the main.dol back into the sys directory where you found it, and then use wit again like so: wit copy DIRECTORY NEWGAMEIMAGE e.g. wit copy tetris Tetris43.wbfs
- Build an injection using this new patched image as you normally would in your preferred injection tool, selecting the options you want for this game, etc.
- Copy the files over and install the new injection to your Wii U. If you're overwriting a previous install of the same title, you may or may not need to delete the original first.
- Launch ftpiiu_everywhere and connect to it using your PC FTP client. Navigate to your installed title (storage_mlc or storage_usb, usr/title/00050002/, then the title ID of your game) and enter the code directory.
- Download the fw.img and htk.bin files into your nfs2iso2nfs directory.
- Obtain wii_common_key.bin and place it in your nfs2iso2nfs directory.
- Create an empty file (e.g. using Windows Notepad) named game.iso (this is the really gross and lazy part of the tutorial where we horribly misuse nfs2iso2nfs)
- Run nfs2iso2nfs -enc -fwimg fw.img -homebrew -key wii_common_key.bin on the command line. It will tell you about making various homebrew patches to your fw.img and then throw an error about your game.iso being a stupid lie that doesn't work because we're not interested in that part anyway. The error is fine!
- Upload your newly patched fw.img back into the code directory for the title you're working on.
- Launch your injected title, now with 4:3 support!
You are here:
Conclusion
Hope it worked out for you, if not, that's a shame but I don't have any further ideas to help you. Everything within this tutorial could easily be automated, so those all-in-one injection tools could definitely do all this work for you if that functionality were added to them.
[citation needed]
All of this work is really down to FIX94's efforts--we're combining their DMCU register poke from wiivc_chan_booter with their AHBPROT-removing patch for fw.img (which is required as the DMCU's registers aren't supposed to be accessible to the PowerPC CPU).
If anybody's interested, here's what's going on in the 4:3 forcing GCT. It's a quick ASM hack using code directly from wiivc_chan_booter:
Code:
3D40CD80 lis r10, 0xcd80
3D203000 lis r9, 0x3000
614A06A0 ori r10, r10, 0x6a0
61290002 ori r9, r9, 2
912A0000 stw r9, 0(r10)
7C0006AC eieio
394A0008 addi r10, r10, 8
812A0000 lwz r9, 0(r10)
7C0004AC sync 0
61290002 ori r9, r9, 2
912A0000 stw r9, 0(r10)
7C0006AC eieio
Attachments
Last edited by Vague Rant,