top of page

0.266-2.21d / 19-06-2024





average rating is 4 out of 5
average rating is 4 out of 5
average rating is 4 out of 5

GroovyMAME is a fork of MAME aimed at CRT monitors, with a strong focus on CRT preservation since they argue its the only display technology that accurately replicates the genuine video game experience. However you can use GroovyMAME to alleviate some of the annoyances associated to emulation on LCD displays, specially for models that are capable of refreshing at custom rates.

GroovyMAME's main features:

- Improved video and audio synchronization that achieves truly smooth scrolling, tearing-free video and hiccup-free audio.
- Automatic generation of custom video timings for CRT monitors.
- Reduced input latency

While the improved synchronization feature is system independent, you are going to need special hardware and software setups in order to get the full experience. For more information, follow this link


Windows: XP+ (7+ recommended)

CPU: Intel Core series CPU or equivalent, at least 2.0 GHz
GPU: modern card with Direct3D 9.0c+ / OpenGL 


Most Recent Changes


  • [nogpu] Support for analog joysticks connected to the MiSTer.

  • [nogpu] New input backend keyboardprovider mister: allows using one keyboard connected to the MiSTer.

  • [nogpu] New input backend mouseprovider mister: allows using one mouse connected to the MiSTer.

  • Sync with mame v0.266


  • Fix wrong speed on certain games (crusnusa, etc.), always update screen when syncrefresh is on (bypass frameskip).

  • Sync with mame v0.265


Sync with mame v0.264

For GroovyMiSTer users

  • [nogpu] New option mister_interlaced_fb: if enabled, odd and even fields of interlaced modes are sent separately (as in previous releases). If disabled, both fields are sent together and the fpga will pick the correct one based on its current raster status (this avoids field synchronization issues, but requires higher bandwidth).

  • [nogpu] New input backend joystickprovider mister: allows using gamepads connected to the MiSTer (2 players).


Sync with mame v0.263


Sync with mame v0.262

For GroovyMiSTer users

  • Download the correct package (Windows or Linux) and unzip it.

  • Download mame_mister.ini, rename it as mame.ini, and replace the default one in GroovyMAME's folder.

  • Edit mame.ini with your ip address (mister_ip option).



  • Add audio support.

  • Various fixes to allow building on Mac [djfumberger]

  • Fix blinking on internal FE with lz4

  • Avoid modes bigger than RGB buffer (force 640x480)

  • Add bilinear filterning, linked to -autofilterAdd audio support.


  • [nogpu] Properly compute pixel aspect ratio of nogpu(MiSTer) screen.


  • [nogpu] First release with GroovyMiSTer support. New video backend -video mister for RGB video through network.

  • Add support for Linux

  • Make sleeping optional by linking it to option -sleep

  • Add option -mister_fd_margin, in ms, to set a secury margin for automatic frame delay, in ms. Default is 1.5 ms


  • [Linux] Add new option -dri_device. Use to force vsync on a specific gpu, e.g. "card0", "card1", etc., or "auto" for automatic selection (currently it will pick the first device with a valid connector.

  • [Windows] Raw input improvements. Workaround for devices with buggy drivers. PlayStation triggers hack removed. Should now be compatible with most existing gamepads. [star69rem]

  • Sync with mame v0.261


  • Sync with mame v0.260


  • Sync with mame v0.259

  • [Linux] Added Switchres fixes to drmkms backend to properly poll dri devices.


  • Sync with mame v0.258


  • Sync with mame v0.257

  • Also save Screen Refresh Rate slider.


  • Sync with mame v0.256

  • Only save certain sliders: frame delay, vsync-offset, overclock and CRT geometry sliders. This avoids the problem with vector games not responding to ini settings.


  • Sync with mame v0.255

  • [Windows] Fix rawinput for joysticks for certain devices [star69rem].


  • Update to upstream Switchres (fixes lcd_range)


  • Fix popup error with custom preset (switchres: error trying to fill monitor range with).

  • Sync with mame v0.254


  • Improve rendering of UI frames and lines in low resolutions.

  • Correctly apply rotation after modeline adjustment (using the geometry sliders with rotated games now works).

  • Correctly apply syncrefresh (it wasn't applied automatically since v_scale was changed from int to float).

  • Sync with mame v0.253


  • New attempt to fix overflow with average scaler.

  • Sync with mame v0.252


  • Implement integer scaled fonts. Finally clear fonts for CRTs at low resolutions. Set uifont uismall.bdf in mame.ini to enable it. [Oomek & Calamity]

  • Force 2-line step for -v_shift (option & slider) on interlaced modes. This way it preserves vertical field parity which is required for correct timings and some hardware. Maybe you need to readjust your previous -v_shift settings.

  •  [Windows] Make rawinput for joysticks not the default option. Set joystickprovider rawinput manually in mame.ini if you want to use it. It doesn't work for UltraStick and probably other controllers yet.

  • Sync with mame v0.251


  • Update to upstream Switchres (fixes rotated desktop in X)

  • Sync with mame v0.251


  • Attempt at fixing Linux build.

  • Sync with mame v0.250


  • Sync with mame v0.249


  • Sync with mame v0.248

  • [Windows] Add rawinput support for joysticks. Split global inputs settings for keyboards, mice and joysticks. [Chester C. Rumpled]

  • Extend h-size slider to 2.00 maximum.


  • Sync with mame v0.247


  • Sync with mame v0.246

  • Added controls for geometry adjustment. These are available both as command-line/.ini options and in-game sliders for interactive adjustment:

      * H-size [0.5 - 1.5]: option -h_size
      * H-shift [positive or negative, in pixels]: option -h_shift
      * V-shift [positive or negative, in lines]: option -v_shift

       As a reminder: V-size is not possible from software.


  • Sync with mame v0.245

  •  [Linux] Add low latency (drm) vsync to sdl2 video backend (-video accel).

  • Properly apply -keepaspect on rotated targets with -autostretch.


  • Improve UI text drawing performance. [Oomek]

  • Another fix to the scaling algorithm (hopefully the last needed).


  • Sync with mame v0.244


  • Sync with mame v0.243

  • Fixed wrong scaling of vertical games in certain cases

  • [Linux] Internal changes to support libdrm hook (experimental feature).


  • Sync with mame v0.242

  • New option -switchres_ini. If enabled, GroovyMAME will try to parse switchres.ini and use it for its configuration. Options priorities, in increasing order: mame.ini < switchres.ini < display#.ini < orientation.ini < ..... < command line.

  • [Linux] Improved support for mode switching on KMS.

  • [Linux] Fixes toggling fullscreen on/off (still imperfect but functional).


  • Sync with mame v0.241

  • Attempt at fixing github builds (docs)


  • Sync with mame 0.240

  • Starting with this release, a source patch for GroovyMAME will be available along with the binaries on Github's releases. It will hopefully make life easier for those who keep alternative builds.

  • New option -switchres_ini. If enabled, GroovyMAME will try to parse switchres.ini and use it for its configuration. Options priorities, in increasing order: mame.ini < switchres.ini < display#.ini < orientation.ini < ..... < command line.

  • [Linux] Improved support for mode switching on KMS.

  • [Linux] Fixes toggling fullscreen on/off (still imperfect but functional).


  • Sync with mame 0.239

  • [windows] Adapt window code to the new add/init display methods.


  • Sync with mame 0.238

  • [Linux] First release ever to support mode switching on KMS. It needs Substring's patched kernel and SDL2 (>=2.0.16) available on GroovyArcade's repository.


  • Sync with mame 0.237

  • Properly fix configuration saving from the ui.


  • Sync with mame 0.236

  • Fix locale mess with floats.

  • [Windows] Fix bug that caused interlaced modes to lock screen updates.

  • Fix bug that caused an exception when saving configuration after doing changes from the ui.

  • Make -vsync_offset slider setting not propagate between different games when launched from the ui.


  • Sync with mame 0.236


  • Sync with mame 0.235

  • [Windows] Fixed bug that caused games using interlaced modes run at dobble speed.


  • Sync with mame 0.234

  • Correctly apply -keepaspect after implementation overhaul in baseline.

Show Previous Changes


New option -[no]syncaudio: Make audio synchronization (resampling) optional. Default is enabled. Disable to avoid sound wobble with erratic emulation speeds (like that caused by frame delay on some systems).

- New option -[no]autostretch: Make auto stretching feature optional. Default is enabled, so GM will apply the scaling mode (fractional or integer) that best fits the situation.

- New option -[no]autofilter: Make auto filter optional. Default is enabled, so GM will apply bilinear filtering when fractional scaling or an interlaced mode are used.

- New option -[no]interlace_force_even: Calculate all vertical values of interlaced modes as even numbers. Required by AMD APU hardware on Linux

- [Windows] Implement asynchronous rendering through native D3D9ex api (replace for old multithreaded -triplebuffer). This mode is selected automatically by -autosync. You can force it manually with -waitvsync -nosyncrefresh.

- [Linux] New option -sync_mode <0-4>: In combination with -syncrefresh, select the synchronization mode that offers the lowest latency based for the specific video driver. The default value is 2, which gives good results for both amdgpu and radeon on X11 and kms mode. Other modes are provided that could be useful with other hardware/driver combination.

Sync mode

sync   algorithm        amdgpu          radeon          radeon/kms      amdgpu/kms
   0     -Swap(1)          perfect(1)      perfect         smooth          smooth
           -glFinish                                         lag 1 frame     lag 1 frame

   1      -Swap(0)          tearing         tearing         perfect         tearing/
          -drmWaitVBlank    perfect w/fd                                    stuttering

   2      -Swap(1)          perfect(1)      perfect         perfect         perfect(1)

   3      -drmWaitVBlank    tearing         perfect(2)      tearing         tearing

   4      -drmWaitVBlank    half speed      half speed      smooth          smooth
            -Swap(1)                                          lag 1 frame     lag 1 frame

- Swap(x), x = Opegl swap interval (0 = immediate, 1 = v-sync)
(1) Low frame delay performance
(2) GM's pre-0.232 implementation
perfect = smooth + subframe latency


  • sync with mame v0.229

  • Fixed crash on emulated systems with 2 or more screens.

  • Correctly update game video information after machine initialization.

  • Properly account for refresh scaling & black frame insertion with frame delay.


  • sync with mame v0.228

  • This is the first public release of GM based on Switchres 2.0, a major redesign of our custom video library we’ve been working on for the whole last year. It has important new features that I’ll talk about in the new thread I’m preparing. Although this version is intended to completely replace current GM based on Switchres, we know that bugs may exist, so we’ll probably keep releasing the « legacy » GM here for some versions yet, depending on how things go.

  • Slider enhancements (as requested by schmerzkaufen):

  • Increased vsync_offset slider limit to 1024

  • Added 1-decimal precision to CPU overclock slider

bottom of page