[FR] Support magnification control in GSM
Is your feature request related to a problem? Please describe. Yes: Some games have the wrong aspect ratio for higher resolution outputs, like 720p / 1080p, which possibly is a spcific game thing. Besides that some TVs don't allow changing the aspect ratio to 4:3 in game mode, so this could also help with that.
Describe the solution you'd like DISPLAY1 and DISPLAY2 registers on the EE not only support moving the image around (which is currently supported with the X/Y offsets in GSM menu). But also change the horizontal and vertical "magnification" (stretch factor) with the MAGH / MAGV registers. So adding an option on the GSM submenu to also influence these two parameters could address the issue. It also possibly adds interesting zoom functions for other use cases (e.g. cropping away hard-matted widescreen bars in games).
Describe alternatives you've considered So the games I tested that do have aspect ratio issues with higher resolutions, tend to work with lower ones (e.g. DTV 480p and such). They are not as crisp though as with 720 / 1080p resolution, especially when taking the 4:3 active area inside the 16:9 display area into account.
Additional context I got the idea looking at this thread explaining the details. Looking at the OPL code, adding the menu options should be rather easy:
- https://github.com/ps2homebrew/Open-PS2-Loader/blob/426014779e42465c8f0fbfe4bde6e5f3089d34f8/src/dialogs.c#L444
- https://github.com/ps2homebrew/Open-PS2-Loader/blob/426014779e42465c8f0fbfe4bde6e5f3089d34f8/src/gsm.c#L29
However I'm not entirely sure how those settings are then propagated / how GSM is actually done? I could find this command line building:
- https://github.com/ps2homebrew/Open-PS2-Loader/blob/426014779e42465c8f0fbfe4bde6e5f3089d34f8/src/gsm.c#L141
- https://github.com/ps2homebrew/Open-PS2-Loader/blob/426014779e42465c8f0fbfe4bde6e5f3089d34f8/src/system.c#L784
Which is passed on to an ELF:
- https://github.com/ps2homebrew/Open-PS2-Loader/blob/426014779e42465c8f0fbfe4bde6e5f3089d34f8/src/system.c#L838
But how it continues from there, I'm not sure ...
Also the above linked post quotes this formular:
Height_in_pixels=(DH+1)/(MAGV+1);
... which suggests a more complex relationship between the registers, which may need to be replicated in the command line building / ELF being called.
Feel free to ask any questions of course :smile:
And also: awesome project, it greatly improved my gaming experience, thanks a lot! :+1:
I hope this feature can be realize soon :)