Here's where my copy of Mario Kart picks which resolution it's going to run at:
(
setTvResolution is the 1080p setting I took a screenshot of above.) "un know" takes best misspelling in a commercial product of the week btw.
All the
setTvResolution functions jump to the DRC init stuff and never return so that OSReport shouldn't be called under normal circumstances.
findTvResolution is called from a strangely familiar location (guess you were right to look there, sorry):
(I suspect
setTvResolution480p is there in case the TV is in 576i mode which GX2 doesn't seem to support, instead upscaling 480p stuff).
(Also worth noting that GX2 won't render in 1080i, only 1080p. That means we only need to worry about 1080p, 720p and 480p).
Anyway, the real meat of this is the
setTvResolution720p and
setTvResolution480p functions. Here they are:
Note the first two instructions of each function - setting the resolution.
You can find the 0x1E0 from
setTvResolution480p at offset 0x1BB6A in my copy of Mario Kart, while the 0x300 is at 0x1BB6E.
Here's an image of that in HxD if you want the surrounding values (check the 0A and 0E columns of the first line for values):
As for
setTvResolution720p, 0x2D0 is at 0x1BC2A and 0x500 is at 0x1BC2E. Here's another image (again, 0A and 0E in the first line):
So there you go, some nice offsets showing how this could be fixed for non-1080p users. As I mentioned before, you don't have to worry about 576i (or 1080i for that matter) since GX2 doesn't support those resolutions.
Enjoy! I'm curious to know whether this could be done as a cheat code.