Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for 60Hz regression #729

Open
3 tasks
jotego opened this issue Jul 13, 2024 · 5 comments
Open
3 tasks

Support for 60Hz regression #729

jotego opened this issue Jul 13, 2024 · 5 comments
Labels
enhancement New feature or request jtframe

Comments

@jotego
Copy link
Owner

jotego commented Jul 13, 2024

Many systems do not output exactly 60Hz video and are troublesome for many screens (#692). Having a general fallback option to adapt the system PLL speed to produce 60Hz would fix this problem at the expense of modified gameplay speed and audio pitch.

The solution should be part of jtframe and applied to all cores automatically

  • Make PLL instance configurable
  • Derive 60Hz configuration parameters automatically
  • Map behavior to both OSD and also a keyboard key, so it can be triggered even without access to the display
@jotego jotego added enhancement New feature or request jtframe labels Jul 13, 2024
@jotego jotego mentioned this issue Jul 13, 2024
2 tasks
@real-amano
Copy link

real-amano commented Jul 13, 2024

I guess that would be a manual per-game option then? As I don't think that MISTer can know if there is monitor sync or not and thus "forced 60 hz" cannot be turned on as a fallback (eg. after x secs. without reaching sync).

Probable standard usecase: "I always want un-modified gameplay speed and correct audio pitch. But game XY has a troublesome horizontal signal length for my monitor and my monitor cannot sync at all. Thus I have to turn it on in the game options for that specific game".

@MikeS11
Copy link

MikeS11 commented Jul 13, 2024

A better way to do it for a CRT without the sacrifice of changing the cores clocks is just to adjust the complete display window to fit the video timing better.

I've done this for many cores in the past

image

See: MiSTer-devel/WonderSwan_MiSTer@c8df028

@MikeS11
Copy link

MikeS11 commented Jul 13, 2024

See this example of how it would work for shouse

image

I built this to play around with https://docs.google.com/spreadsheets/d/1-dsPKfnta681RCE5VyKJGzNwRFjKvYVWYVJchHFKdE4/edit?usp=sharing

I think this is the location for it for the S18 core where H70 should be H83 to relax the timing for the line frequency to meet spec. E.g. 400 pixels vs 381 As per my calculations above. ** Though it wouldnt surprise me if HCNT END was what needed to change, not sure where the active window for the core is set

image

Note: HSYNC will need to shift as well probably between :8A- A6

E.g. Something like this:

.HB_START ( 9'h1ff ),
.HB_END ( HB_END ),
.HCNT_START( 9'h83 ), // it should be 'h50
.HCNT_END ( 9'h1FF ),
.VB_START ( 9'h0DF ),
.VB_END ( 9'h105 ),
.VCNT_END ( 9'h105 ), // 262 lines
.VS_START ( 9'hEF ),
.VS_END ( 9'hF3 ), // 4 lines
.HS_START ( 9'h08A ),
.HS_END ( 9'h0A6 ) // 4.8us measured in PCB

@jotego
Copy link
Owner Author

jotego commented Jul 20, 2024

I guess that would be a manual per-game option then? As I don't think that MISTer can know if there is monitor sync or not and thus "forced 60 hz" cannot be turned on as a fallback (eg. after x secs. without reaching sync).

Probable standard usecase: "I always want un-modified gameplay speed and correct audio pitch. But game XY has a troublesome horizontal signal length for my monitor and my monitor cannot sync at all. Thus I have to turn it on in the game options for that specific game".

That's the idea. The default is the original timing, and a 60Hz version can be turned on when needed.

@jotego
Copy link
Owner Author

jotego commented Sep 8, 2024

Documentation about reconfiguring the game PLL here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request jtframe
Projects
Status: No status
Development

No branches or pull requests

3 participants