Software Support > GroovyMAME
Pixel doubling on 31khz monitors with custom drivers?
jimmy2x2x:
Im sure I read somewhere that some kind of pixel doubling was possible with the custom ATI drivers so you can have accurate 1:1 pixel mapping and accurate frame rates on a VGA monitor.
Anyone fancy documenting it?
Thanks
newmanfamilyvlogs:
I'm running 31kHz double res modes. I'll do my best to describe my process.
Initial set up involves installing the modified ATI drivers. Once these are successfully installed you will need to modify your vmmaker.ini with your monitor's specs and run it, updating the registry. After updating groovymame's mame.ini with the monitor specs as well, it essentially just works.
Here's my VMMaker.ini:
--- Code: ---; VideoModeMaker - Options
; ------------------------
; 1. MAME
; -------
; Path for Mame executable, in case we want to extract xml information from it.
MameExe = "..\mame.exe"
; Path for Mame ini folder, in case we want to create an ini file for each game.
; Important: existing ini files will be overwritten.
IniPath = "\Emu\Mame\ini\"
; Mame options.
ListFromXML = 1 ; Processes Mame XML and get video mode list from it
GenerateXML = 0 ; Extracts XML from Mame (only needed once)
GenerateInis = 0 ; Creates an ini file for each Mame game, in the IniPath folder
SDLMame = 0 ; Use SDLMame specific options
; Monitor orientation
MonitorHorizontal = 1 ; 0 = Rotating monitor: horizontal and vertical games at their native resolution
; Suitable for users that physically rotate their CRTs
; 1 = Horizontal monitor: horizontal games run at their native resolution and
; vertical games are rotated to fit in horizontal monitor
RotatingDesktop = 0 ; Specifies if both desktop and monitor are rotated
; Aspect ratio for vertical games on horizontal monitor
; 4:3 (keeps original aspect ratio)
; 3:3 (stretches to square format)
; 3:4 (stretches to full screen)
; h:v (custom aspect ratio)
VerticalAspect = "4:3"
; 2. MONITOR
; ----------
; Monitor Type. Valid types: D9800, D9400, D9200, EGA, VGA, MULTI, H9110, PAL, NTSC, GENERIC, CUSTOM
MonitorType = "CUSTOM"
; Monitor CUSTOM. These values will be used if MonitorType = "CUSTOM"
;
; monitor_specs_0-6 = "HfreqMin-HfreqMax, VfreqMin,VfreqMax, HFrontPorch, HSyncPulse, HBackPorch, VfrontPorch, VSyncPulse, VBackPorch, HSyncPol, VSyncPol, ActiveLinesLimit, VirtualLinesLimit"
;
; * HfreqMin-HfreqMax: Minimum and maximum horizontal frequency, in Hz. Defines the range of horizontal frequencies the monitor is capable to sync.
; The higher the horizontal frequency, the higher the vertical resolution available for the same vertical refresh.
; The higher the horizontal frequency, the higher the vertical refresh available for the same vertical resolution.
; The higher the horizontal frequency, the lower the horizontal amplitude of active video (narrower picture).
;
; * VFreqMin-VfreqMax: Minimum and maximum vertical frequency, in Hz, Defines the range of vertical frequencies the monitor is capable to sync.
;
; * HFrontPorch, HSyncPulse, HBackPorch: Horizontal timing and geometry, values in µs
;
; * VfrontPorch, VSyncPulse, VBackPorch: Vertical timing and geometry, values in ms
;
; * HSyncPol,VSyncPol: polarities, not in use! defaults to negative.
;
; * ActiveLinesLimit: Vertical resolutions until ActiveLinesLimit value included, are generated as progressive, regardless the possibility
; of obtaining the required vertical refresh value.
;
; * VirtualLinesLimit: Vertical resolutions above ActiveLinesLimit and below VirtualLinesLimit are virtualized, that is, an interlaced resolution
; bigger that the native one is generated, with the right refresh, and "hardware stretch" is applied.
; Vertical resolutions above VirtulaLinesLimit are generated as interlaced, without any stretching.
monitor_specs_0 = "30000-40000, 47.00-90.00, 0.600, 2.500, 2.800, 0.032, 0.096, 0.448, 0, 0, 640, 768"
; Tolerance for horizontal frequency, in kHz, enables extending the range defined by [ HfreqMin, HfreqMax ]
; The resulting allowed frequency range will be [ HfreqMin - HfreqTolerance, HfreqMax + HfreqTolerance ]
HfreqTolerance = 0.010
; 3. MODELINE GENERATOR
; ---------------------
; Total number of modelines to generate. Here are the recommended values for each driver version:
; CRT_Emudriver, based on Catalyst 6.5 XP32: 160 modes (accepts up to 200, but above 160 HyperSpin will refuse to load)
; CRT_Emudriver, based on Catalyst 6.5 XP64: 120 modes
; CRT_Emudriver, based on Catalyst 9.3 XP32/64: 120 modes (accepts some more but above 120 you can get some blue screens)
; Regular Catalyst: 60 modes (won't accept any more)
TotalModes = 100
; Method for mode table generation. If Mame xml is processed, that will create a lot of different video modes, so the mode table
; will be optimized keeping the most relevant ones, and dropping the rest, to keep below the TotalModes value.
ModeTableMethod = 1 ; 0 = Static table: modelines are generated keeping their original vertical refresh. This
; method is intended to be used in combination with ini files for each game.
; 1 = Dynamic table: a table of dummy modes is created using xres and yres values while ignoring
; vfreq. This method is intended to be used in combination with Switchres or Groovymame. No ini
; files are required using this method (you should disable the GenerateInis option).
; Minimum resolution values (these will be used instead of lower values)
XresMin = 208
YresMin = 192
; Minimum dotclock value allowed by the video card, in MHz (i.e. DotClockMin = 7.010)
DotClockMin = 18.500
; Number of iterations used by the mode generator [0,5]. The higher the number of iterations, the bigger the accuracy of the vertical
; refreshed obtained, normally at the cost of increasing the horizontal frequency strictly required.
Iterations = 2
; Specifies if the refresh label is multiplied by 10 before rounding (experimental).
VFreqLabelx10 = 0
; 4. DRIVER
; ---------
; Path for the driver folder
DriverPath = ".\Driver\"
; If UpdateRegistry is enabled, UpdateDriver will only work if the driver version found in DriverPath matches the one installed
; in the system.
UpdateRegistry = 1 ; Specifies if the video card registry section will be updated with the new video modes
; (will only work in combination with CRT_EMUDriver).
UpdateDriver = 0 ; Specifies if the driver files in DriverPath will be updated with the new video modes, for
; future installations.
AnyCatalyst = 0 ; Allows modelines to be installed for any Catalyst version. This option is experimental and
; known to produce some problems.
Only32BPPModes = 1
--- End code ---
Some important bits to pay attention to:
--- Quote ---ListFromXML = 1 ; Processes Mame XML and get video mode list from it
GenerateXML = 0 ; Extracts XML from Mame (only needed once)
--- End quote ---
The first time you run this, GenerateXML needs to be 1. Until then, you don't have the mame.xml for your executable. After it's generated turning this off will speed up the rebuilding of template modes while you're tweaking settings.
--- Quote ---;Monitor specs for Makvision 2929D, 29" SVGA monitor
monitor_specs_0 = "30000-40000, 47.00-90.00, 0.600, 2.500, 2.800, 0.032, 0.096, 0.448, 0, 0, 640, 768"
--- End quote ---
This is the real guts of the set up. These are the specifics for your monitor listed as:
--- Quote ---"HfreqMin-HfreqMax, VfreqMin,VfreqMax, HFrontPorch, HSyncPulse, HBackPorch, VfrontPorch, VSyncPulse, VBackPorch, HSyncPol, VSyncPol, ActiveLinesLimit, VirtualLinesLimit"
--- End quote ---
The Hfreqs, Vfreqs, Active Lines limit and Virtual Lines limits are easy enough. Things like the porches, pulses, and polarities are more variable between monitors. Having these set out of range results in odd visual artifacts like 'curling' of the image on the edge. Kind of like when a monitor needs a capkit, but in the other direction. I do not believe you can harm your monitor with these being out, but I do not know. Hopefully someone will come along and confirm or correct me.
--- Quote ---TotalModes = 100
--- End quote ---
This is the odd part. Different versions of windows and seemingly different computers will accept different numbers of modes. I'm running WinXP64, and Calamity's suggested upper limit is 120, above which it occasionally bluescreens. Hyperspin has a known issue with large numbers of available display modes, and for me going over 100 would cause it to not load. Others have gone to the 120 limit successfully, and I believe others still have gone to 160 when running WinXP32.
Generating less modes means that some games will not have a perfect 1:2 mapping resolution, and thus will either be letter boxed or pillarboxed depending on what resolution is available. As long as "cleanstretch" is enabled in the mame.ini, it should only choose resolutions where no visual artifacting will result from mapping.
--- Quote ---UpdateRegistry = 1 ; Specifies if the video card registry section will be updated with the new video modes
; (will only work in combination with CRT_EMUDriver).
UpdateDriver = 0 ; Specifies if the driver files in DriverPath will be updated with the new video modes, for
; future installations.
AnyCatalyst = 0 ; Allows modelines to be installed for any Catalyst version. This option is experimental and
; known to produce some problems.
Only32BPPModes = 1
--- End quote ---
Initially I attempted to generate modelines by turning on UpdateDriver and running prior to installation. I was unable to install the driver until I started with a stock configuration and went from there. Your mileage may vary.
I hope this gets you started!
I suppose to be more accurate we should describe these as 'accurate 1:2 pixel mapping', since it's exactly doubled in each direction.
Calamity:
cotmm68030, that was an excellent explanation.
There's a key option you also need to pay attention to: the dotclockmin option.
I find it's safe enough to set these two options:
MonitorType = "VGA"
DotClockMin = 18.500
The dotclockmin limit is what actually achieves the horizontal x2 scaling, otherwise you'd only get the vertical one.
PD: Also, the version of VMMaker that cotmm68030 is running has some fixes that help with this, probably the last one I attached in the GroovyMame thread with the experimental HS workaround is up to date. I need to repack the driver files with the newest one.
jimmy2x2x:
Thanks for the info, I will have a play around this weekend
If you could link to the VMMaker when you get a chance, that would be great
Cheers!
newmanfamilyvlogs:
maybe pin this thread for future expansion/discussion of 31kHz use? More and more people are using non-15kHz displays.
Navigation
[0] Message Index
[#] Next page
Go to full version