Hi everyone,
I've been playing around with getting the MiSTer to use native VGA resolutions with the ao486 core, and I've hacked up a little proof of concept. I've attached binaries and included links to the changes, but please be careful and check my work! Some very old CRTs can be damaged by bad video timing.
When the ao486 core changes its video mode, MiSTer will check if the new resolution is 720x400 or 320x200/640x400 and use hard-coded mode lines to change the output VGA mode to match the resolution. Any other mode will default to the mode configured in MiSTer.ini (I use 640x480).
The mode lines I hard-coded are for the modes supported by my IBM 8513, but I think they should be fine for a multisync monitor.
The MiSTer code for changing modes is here: https://github.com/tsowell/Main_MiSTer/ ... dfa41dbe3c
In addition, MiSTer will also request that the core change sync polarity in order to support ancient monitors that used the polarity of the sync signals to encode the display height of the video signal. This requires special support in the core, and I've only added hacky support to ao486. I've attached the rbf file, but unless you have a very old monitor, you probably won't need this - the MiSTer mode-changing code works fine without it. I need it for my IBM 8513 which will not scale 400-line video vertically to fill the display unless VSYNC polarity is positive.
The ao486 code to support changing sync polarity is here: https://github.com/tsowell/ao486_MiSTer ... 105fb3442c
Here are the options I used for testing:
Code: Select all
forced_scandoubler=1
vga_scaler=1
direct_video=0
video_mode=6
vsync_adjust=0
Set the ao486 core's Scale option to Wider HV-Integer
Let me know if you have any advice on how to do this better. I'd like to improve support for this if only for my own use.
I think the proper way to do this would be to allow the user to configure the modes supported by their display, and MiSTer would search through those to find a suitable match each time the core changes the video mode.
Changing sync polarity requires support in each core. The ao486 code I linked to above changes sync polarity mid-frame - it would be probably be better to wait for a better time or blank the display before making the change.