We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

Widescreen: Difference between revisions

From SnesLab
Jump to: navigation, search
m (Vitor Vilela moved page WidescreenRomHacking to Widescreen)
No edit summary
Line 1: Line 1:
(''first draft, please point out any mistakes and ask any questions'')
== Screen ==
== widescreen-specific code ==
We have two screen settings available:
=== objects ===
Objects are up to 64 pixels wide.<br>
For their x coordinates we have a 9 bit unsigned integer,<br>
i.e. values from 0 to 511.<br>
0 to 255 are the visible columns of the screen.<br>
To be able to have objects start off the left side and extend into the screen, the values wrap,<br>
i.e. 449 to 511 is treated as -63 to -1.<br>
256 to 448 place objects outside of the visible area.


For widescreen 16:9 we add 64 pixels to each side.<br>
1) 16:9 widescreen. There's an additional 48 columns to the left and right side of the screen. Resolution is 352x224, stretched to simulate the 8:7 pixel aspect ratio.
So the visible columns of the (wide) screen are now -64 to 319,<br>
2) 21:9 widescreen (actually 64:27). There's an additional 96 columns to the left and right side of the screen. Resolution is 448x224, stretched to simulate the 8:7 pixel aspect ratio.
or technically 448 to 511 and 0 to 319.<br>
So with objects partially off screen to the left the minimal coordinate with visible content is -127 aka 385.


Using that coordinate space you can place objects in the widescreen area quite similar to placing them in the normal screen area.<br>
== Objects ==
It should also not break support on other emulators or hardware AFAIK.
 
== emulator ==
Since OAM sprite width is 9-bit wide, allowing values between -256 to +255, the internal range is adjusted in a manner the negative range also wraps positively. You can assume the values to range between -128 and +384, which are mapped that way: if unsigned position is greater than or equal to 384, subtract 512 from it. Else, keep value as is.
https://www.reddit.com/r/emulation/comments/bmc9t9/bsneshd_beta_5_bsnes_1073_formally_hd_mode_7_mod/ <br>
 
(repo comming soon)
Sprites that already knows how to handle the left screen boundary (position -1 to -16) can be easily adapted to work with the widescreen range. Otherwise, it's recommended to port the relative screen position to use 16-bit values.
 
In addition, it doesn't break other emulators, since the additional visible area is implicitly invisible on the SNES hardware specification.
 
== Windowing ==
 
Assume that the windowing internal size is 512 lines long instead of 256 lines long. If you take the windowing calculations based from this perspective, windowing HDMA will work regardless of the aspect ratio being currently used (16:9, 21:9, etc.)
 
== Emulator ==
https://github.com/DerKoun/bsnes-hd
https://www.reddit.com/r/emulation/comments/bmc9t9/bsneshd_beta_5_bsnes_1073_formally_hd_mode_7_mod/

Revision as of 05:20, 10 April 2021

Screen

We have two screen settings available:

1) 16:9 widescreen. There's an additional 48 columns to the left and right side of the screen. Resolution is 352x224, stretched to simulate the 8:7 pixel aspect ratio. 2) 21:9 widescreen (actually 64:27). There's an additional 96 columns to the left and right side of the screen. Resolution is 448x224, stretched to simulate the 8:7 pixel aspect ratio.

Objects

Since OAM sprite width is 9-bit wide, allowing values between -256 to +255, the internal range is adjusted in a manner the negative range also wraps positively. You can assume the values to range between -128 and +384, which are mapped that way: if unsigned position is greater than or equal to 384, subtract 512 from it. Else, keep value as is.

Sprites that already knows how to handle the left screen boundary (position -1 to -16) can be easily adapted to work with the widescreen range. Otherwise, it's recommended to port the relative screen position to use 16-bit values.

In addition, it doesn't break other emulators, since the additional visible area is implicitly invisible on the SNES hardware specification.

Windowing

Assume that the windowing internal size is 512 lines long instead of 256 lines long. If you take the windowing calculations based from this perspective, windowing HDMA will work regardless of the aspect ratio being currently used (16:9, 21:9, etc.)

Emulator

https://github.com/DerKoun/bsnes-hd https://www.reddit.com/r/emulation/comments/bmc9t9/bsneshd_beta_5_bsnes_1073_formally_hd_mode_7_mod/