GroovyMAME/GroovyUME 0.149 SwitchRes v0.014bAfter three months of coding and testing,
GroovyMAME is back with
SwitchRes Patch version 0.014, which we hope will be a big step forward in terms of functionality, based on the feedback of hundreds of users. Most of the code has been rewritten for this version, in an effort to build a cross-platform stable model which can eventually receive a proper documentation.
GroovyMAME is a custom M.A.M.E. build mainly aimed at CRT monitors, as we are convinced CRT technology is a must when it comes to enjoying emulation in its full glory. However you can use GroovyMAME to alliviate some of the annoyances associated to emulation on LCD displays, specially for those models which are capable of refreshing at custom rates.
GroovyMAME's main features as compared to official MAME:
-
Improved video and audio synchronization that achieves truly smooth scrolling, tearing-free video and hiccup-free sound.
-
Automatic generation of custom video timings for CRT monitors.While the improved synchronization feature is system independent, you are going to need a special hardware and software setup in order to get the full potential out of GroovyMAME.
As for the hardware part, do yourself a favour and grab an old ATI Radeon card, any model from Radeon 7000 to the HD 4xxx family should work, both AGP and PCIe models. As far as we know, there is nothing that can remotely compare to these cards in terms of flexibility.
On the software side of things, you need to be aware that operating systems are not designed to deal with hundreds of video modes as we are going to need here, so some degree of hacking is required. You can use one of these two options:
- GroovyArcade Linux. This is currently the best OS to run GroovyMAME.
GroovyArcade download site- Windows XP-32/64-bit + a hacked version of ATI Catalyst named CRT_EmuDriver.
CRT_Emudriver's download site (in Spanish. ftp courtesy of Abubu) Download mirror (courtesy of Krick)Either one of these operating systems combined with one supported ATI card is the preferred environment to run GroovyMAME in. However, since SwitchRes v0.014, GroovyMAME can also generate custom timings under Windows for virtually any card supported by PowerStrip, by making use of its API. In theory, this should work for Windows 7 too. Anyway, keep in mind that this method is way more limited and unreliable than the standard one.
There are many changes and things that will need a detailed explanation, so I will keep updating this during the following weeks.
Download GroovyMAME/GroovyUME GroovyMAME download siteWhat's new in SwitchRes v0.014b - First version with native Windows 7 support, getting things ready for the advent of CRT Emudriver for Windows 7.
- Workaround for progressive/interlaced mode switching in Windows 7 and DirectDraw.
- Changed DirectDraw to use flipping surfaces with -waitvsync too, to allow bilinear filtering in Windows 7. Also fixes the problem of -waitvsync resulting in double speed in Windows 7. However, it may cause tearing on LCD displays when using DirectDraw, so make sure to use Direct3D with LCD monitors.
- Fixed crash on exit for 32-bit builds on Windows 7.
What's new in SwitchRes v0.014a - Fixed bug that made some games appear mirrored or upside-down.
- Fixed incorrect monitor presets: ms2930, k7000
- Added two new settings for the
-orientation option:
rotate_r,
rotate_l. Use either one of those in case you have a vertically mounted monitor so to specify its correct rotation direction.
- Improved filtering of system resolutions to avoid triplicated enumeration in some systems.
- Now the GroovyMAME version is prompted after the main version so we no longer create conflicts with frontends which grab the version of MAME from the credits text.
What's new in SwitchRes v0.014- Fully rewritten modeline engine. Redesigned algorithm for resolution picking, now each resolution reported by the system is evaluated individually according to your monitor specs.
- Full PowerStrip integration, so at least in theory many more cards are now supported (i.e NVidia).
- Support for VESA generalized timing formula (GTF), this is to provide quick support for multisync PC CRT monitors (not for the ancient fixed-frequency ones!). Use the monitor presets labeled as "vesa".
- New monitor presets added. Check the most suitable for you:
custom Define your own custom by means of -crt_range lines
pal PAL TV - 50 Hz/625
ntsc NTSC TV - 60 Hz/525
generic_15 Generic 15.7 kHz
arcade_15 Arcade 15.7 kHz - standard resolution
arcade_15ex Arcade 15.7-16.5 kHz - extended resolution
arcade_25 Arcade 25.0 kHz - medium resolution
arcade_31 Arcade 31.5 kHz - high resolution
arcade_15_25 Arcade 15.7/25.0 kHz - dual-sync
arcade_15_25_31 Arcade 15.7/25.0/31.5 kHz - tri-sync
m2929 Makvision 2929D
d9200 Wells Gardner D9200
d9400 Wells Gardner D9400
d9800 Wells Gardner D9800
k7000 Wells Gardner K7000
k7131 Wells Gardner 25K7131
m3129 Wei-Ya M3129
h9110 Hantarex MTC 9110
polo Hantarex Polo
pstar Hantarex Polostar 25
ms2930 Nanao MS-2930, MS-2931
ms929 Nanao MS9-29
vesa_480 VESA GTF
vesa_600 VESA GTF
vesa_768 VESA GTF
vesa_1024 VESA GTF
Note: labels are no longer case sensitive
- New format for defining custom monitor specs, now the -crt_range0-9 options are used. This is the most important change in this version from the user's point of view, as the existing custom definitions will need to be modified. Not big deal however, but make sure you understand how this works as it will guarantee your success with GroovyMAME. The usual timing values remain the same, but the line limiters are replaced by four values: ProgressiveLinesMin, ProgressiveLinesMax, InterlacedLinesMin, InterlacedLinesMax. These are used to easily define the upper and lower limits of the total logical resolutions GroovyMAME should allow, both for the progressive and the interlaced range. You may leave either one of the two ranges set as zero in case you do not want progressive or interlaced modes to be generated. So the current format is as follows:
-crt_range 0-9 HfreqMin-HfreqMax, VfreqMin-VfreqMax, HFrontPorch, HSyncPulse, HBackPorch, VfrontPorch, VSyncPulse, VBackPorch, HSyncPol, VSyncPol, ProgressiveLinesMin, ProgressiveLinesMax, InterlacedLinesMin, InterlacedLinesMax
- Automatic LCD timings generation. This is useful in combination with PowerStrip. Your current timings will be read from PowerStrip and used to recalculate modelines from them. You just need to define the range for the vertical refresh your monitor supports:
-lcd_range VfreqMin-VfreqMax
- Improved rotation detection, now you can rotate the screen from the internal UI and the video mode will be recalculated properly.
- New priority system for option setting. GroovyMAME will set most of its required options automatically (-syncrefresh, -triplebuffer, -resolution, etc.), overriding the values in mame.ini. However, any other ini you create (rom, driver, orientation, etc.), as well as command line settings, will have higher priority than GroovyMAME's option setting, so you can always force something different if you feel GroovyMAME is not doing things right.
- Resolution forcing. As opposite to previous versions, now you can force the resolution that GroovyMAME picks. GroovyMAME will do its best to acommodate the game's resolution into the one you suggest.
- SwithRes video mode is shown in the Game Information screen. You're gonna love this.
- Automatic syncrefresh/triplebuffer selection. If you leave both options disabled in mame.ini, GroovyMAME will decide which one to use automatically. If the target refresh is achieved, GroovyMAME will select -syncrefresh. On the other hand, if we cannot achieve the desired refresh, due to monitor limitations, triplebuffer is used instead, so that speed is kept at 100% rennouncing to smooth scrolling. You can control how off the obtained refresh must be in order to trigger triplebuffering, by means of the new option -sync_refresh_tolerance. The default value is 2 Hz.
- Frequency scaling. Now GroovyMAME can use a multiple of the target vertical refresh if allowed by the monitor. This can be used in combination with PC CRT monitors which allow frequencies of 120 Hz, in order to achieve low resolution modes with true hardware scanlines. You need to create a custom crt_range for this. By now, -triplebuffer is used automatically for this mode. However, in order to achieve perfect scrolling you will need to use -syncrefresh in combination with -frame_delay 5, provided your system can deal with it.
- Interlace/doublescan modes can now be effectively disabled by means of their respective options. Be aware that SwitchRes does not support doublescan modes in Windows.
- Positive/negative sync polarity support under Windows.
- New option -lock_system_modes for mode filtering. In order to limit the possibility of selecting a potentially dangerous mode, the new option -lock_system_modes will prevent any mode not created by us from being picked. This will enforce GroovyMAME to use custom modes previously generated by CRT_EmuDriver. For non-ATI cards this option will block all modes actually since none of them is recognized as custom. This is the case of NVidia cards in combination with PowerStrip, or the ArcadeVGA 3000, where its custom modes are actually reported by the system as standard modes. So for these cases you should disable this option.
- New option -lock_unsupported_modes. You should only disable this option if you are possitive your system, based on your monitor's EDID, is filtering some modes that you actually created. Otherwise leave it enabled. This option only has effect in combination with -video ddraw.
- New option -refresh_dont_care. The new algorithm will filter resolutions that are out of your monitor specs. Old versions of the ArcadeVGA, as well as the Soft-15kHz program, label all resolutions as 60 Hz. This means that if this value were to be taken seriously, resolutions above 240 lines would be out of range for most arcade monitors. This option is provided in order to cope with this peculiarity, and it basically tells the algorithm to ignore refresh for range checking.
- New option -frame_delay. Delays the start of the emulation of each frame by an amount of time defined in tenths of the frame period length (0-9), in order to give a chance to the emulator to have the most possible updated input for that frame, as an attempt to minimize input lag. A value of 0 corresponds to standard behaviour. This option is experimental, and is known to produce tearing in LCD screens.
#
# CORE SWITCHRES OPTIONS
#
-modeline Generate modelines for arcade monitors
-monitor Monitor type, e.g.: generic_15, arcade_15, lcd, custom, etc.
-orientation Monitor orientation (horizontal|vertical|rotate)
-connector [Linux] video card output (VGA-0|VGA-1|DVI-0|DVI-1)
-interlace Enable interlaced scanning when necessary
-doublescan Enable double scanning when necessary (unsupported under Windows)
-cleanstretch Force integer scaling, 0 means automatic selection
-changeres Enable dynamic in-game video mode switching
-powerstrip Use Powerstrip API for dynamic setting of custom video timings
-lock_system_modes Lock system (non-custom) video modes, only use modes created by us
-lock_unsupported_modes Lock video modes reported as unsupported by your monitor's EDID
-refresh_dont_care Ignore video mode's refresh reported by OS when checking ranges
-dotclock_min Lowest pixel clock supported by video card, in MHz, default is 0
-sync_refresh_tolerance Maximum refresh difference, in Hz, allowed in order to synchronize
-frame_delay Delays the start of each frame to minimize input lag (0-9)
-lcd_range Add custom LCD range, VfreqMin-VfreqMax, in Hz, e.g.: 55.50-61.00
-crt_range0 Add custom CRT range, see documentation for details.
-crt_range1 Add custom CRT range
-crt_range2 Add custom CRT range
-crt_range3 Add custom CRT range
-crt_range4 Add custom CRT range
-crt_range5 Add custom CRT range
-crt_range6 Add custom CRT range
-crt_range7 Add custom CRT range
-crt_range8 Add custom CRT range
-crt_range9 Add custom CRT range
Compiling notes (v0.149)Apply patches in this order:
1) hi_149.txt (
http://mamestuff.lowtrucks.net/MKChamp/)
2) 0149_groovymame_014b.diff (
GroovyArcade's site)