MissingModes is a module that allows to display unsupported screen resolutions (like used in old Archimedes games) in the center of a larger existing mode. This should provide an alternative (without scaling) for machines where AnyMode cannot be used.
Version 1.01, 2023-06-16 (download).
Just double-click on the module to activate it.
How it works:
- on initialisation the modules ask the system for the list of available mode resolutions and for each one calls service &50 Mode_Extension to get its MDF definition (vidclist).
- it register to service &50 Mode_Extension to provide mode definitions as follows:
- if width < height, double the required width.
- look for the smallest available mode that can contain the required resolution and use its definition as a base.
- if no base was found, let other callbacks deal with this call.
- replace the base width by required width and compensate the difference by adding one half of it to the left border and the rest to the right one.
- do the same for the height.
- if width was double, divide all horizontal timings and pixel rate by 2.
- return the adapted vlidclist.
Basically, thus two tricks are used:
- using a higher resolution and transfering unused pixels to the borders.
- for resolutions which would be displayed on an LCD as an inverted letter box (see demo !RevInvite or game demo !LO_Demo), look for a double width mode and divide all timings and pixel rate by 2. RISC OS will see it as the expected resolution and by dividing the pixel rate by 2 should see the same timing.
Limitations and TO DO list:
- All this assumes an analog D-Sub transmission of the signals. I dunno how it would fare on DVI/HDMI, especially the width doubling trick.
- For the second trick, dividing /2 all timings could violate some rules like border must be a multiple of x pixels but I dunno what the rules are.
- My Pi4 (OS 5.28) strips the borders so its very nice with the 'disable_mode_change' option active as the screen is scaled to full size, but without that option I think some monitors may not be able to handle such low resolutions.
- TO DO: check for Video memory usage and bandwidth limitations.
- TO DO: reask mode definitions lists if another MDF is loaded, but you can you double-click again on the module afterwards.
- TO DO: find a way (interlacing?) to double height of letter box modes.