diff --git a/inc/dd.h b/inc/dd.h
index fb2ef4e..3d9c674 100644
--- a/inc/dd.h
+++ b/inc/dd.h
@@ -14,6 +14,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp);
 HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags);
 HRESULT dd_RestoreDisplayMode();
 HRESULT dd_GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDEmulCaps);
+HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
 HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq);
 HRESULT dd_GetAvailableVidMem(void* lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree);
 HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB);
diff --git a/src/IDirectDraw/IDirectDraw.c b/src/IDirectDraw/IDirectDraw.c
index fdeb35d..c687c56 100644
--- a/src/IDirectDraw/IDirectDraw.c
+++ b/src/IDirectDraw/IDirectDraw.c
@@ -176,11 +176,11 @@ HRESULT __stdcall IDirectDraw__GetCaps(IDirectDrawImpl* This, LPDDCAPS lpDDDrive
     return ret;
 }
 
-HRESULT __stdcall IDirectDraw__GetDisplayMode(IDirectDrawImpl* This, LPDDSURFACEDESC a)
+HRESULT __stdcall IDirectDraw__GetDisplayMode(IDirectDrawImpl* This, LPDDSURFACEDESC lpDDSurfaceDesc)
 {
-    dprintf("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This);
-    HRESULT ret = DDERR_UNSUPPORTEDMODE;
-    dprintf("NOT_IMPLEMENTED <- %s\n", __FUNCTION__);
+    dprintf("-> %s(This=%p)\n", __FUNCTION__, This);
+    HRESULT ret = dd_GetDisplayMode(lpDDSurfaceDesc);
+    dprintf("<- %s\n", __FUNCTION__);
     return ret;
 }
 
diff --git a/src/dd.c b/src/dd.c
index f5be3d3..c20d0db 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -180,6 +180,37 @@ HRESULT dd_GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDEmulCaps)
     return DD_OK;
 }
 
+HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc)
+{
+    if (lpDDSurfaceDesc)
+    {
+        memset(lpDDSurfaceDesc, 0, sizeof(DDSURFACEDESC));
+
+        lpDDSurfaceDesc->dwSize = sizeof(DDSURFACEDESC);
+        lpDDSurfaceDesc->dwFlags = DDSD_HEIGHT | DDSD_REFRESHRATE | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT;
+        lpDDSurfaceDesc->dwHeight = g_ddraw->height ? g_ddraw->height : 768;
+        lpDDSurfaceDesc->dwWidth = g_ddraw->width ? g_ddraw->width : 1024;
+        lpDDSurfaceDesc->lPitch = lpDDSurfaceDesc->dwWidth;
+        lpDDSurfaceDesc->dwRefreshRate = 60;
+        lpDDSurfaceDesc->ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+
+        lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_PALETTEINDEXED8 | DDPF_RGB;
+        lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 8;
+
+        if (g_ddraw->bpp != 8)
+        {
+            lpDDSurfaceDesc->lPitch = lpDDSurfaceDesc->dwWidth * 2;
+            lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB;
+            lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 16;
+            lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask = 0xF800;
+            lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask = 0x07E0;
+            lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask = 0x001F;
+        }
+    }
+
+    return DD_OK;
+}
+
 HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq)
 {
     *lpdwFreq = 60;