Switched DirectDraw back to DirectDraw 4, increases performance;
Fixed a small bug in the Iomega ZIP emulation.
This commit is contained in:
@@ -38,8 +38,8 @@
|
|||||||
|
|
||||||
|
|
||||||
static LPDIRECTDRAW lpdd = NULL;
|
static LPDIRECTDRAW lpdd = NULL;
|
||||||
static LPDIRECTDRAW7 lpdd7 = NULL;
|
static LPDIRECTDRAW4 lpdd4 = NULL;
|
||||||
static LPDIRECTDRAWSURFACE7 lpdds_pri = NULL,
|
static LPDIRECTDRAWSURFACE4 lpdds_pri = NULL,
|
||||||
lpdds_back = NULL,
|
lpdds_back = NULL,
|
||||||
lpdds_back2 = NULL;
|
lpdds_back2 = NULL;
|
||||||
static LPDIRECTDRAWCLIPPER lpdd_clipper = NULL;
|
static LPDIRECTDRAWCLIPPER lpdd_clipper = NULL;
|
||||||
@@ -51,7 +51,7 @@ static int ddraw_w, ddraw_h,
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
CopySurface(IDirectDrawSurface7 *pDDSurface)
|
CopySurface(IDirectDrawSurface4 *pDDSurface)
|
||||||
{
|
{
|
||||||
HDC hdc, hmemdc;
|
HDC hdc, hmemdc;
|
||||||
HBITMAP hprevbitmap;
|
HBITMAP hprevbitmap;
|
||||||
@@ -436,7 +436,7 @@ ddraw_init(HWND h)
|
|||||||
|
|
||||||
if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL))) return(0);
|
if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL))) return(0);
|
||||||
|
|
||||||
if (FAILED(lpdd->QueryInterface(IID_IDirectDraw7, (LPVOID *)&lpdd7)))
|
if (FAILED(lpdd->QueryInterface(IID_IDirectDraw4, (LPVOID *)&lpdd4)))
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
lpdd->Release();
|
lpdd->Release();
|
||||||
@@ -444,25 +444,25 @@ ddraw_init(HWND h)
|
|||||||
|
|
||||||
atexit(ddraw_close);
|
atexit(ddraw_close);
|
||||||
|
|
||||||
if (FAILED(lpdd7->SetCooperativeLevel(h, DDSCL_NORMAL))) return(0);
|
if (FAILED(lpdd4->SetCooperativeLevel(h, DDSCL_NORMAL))) return(0);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
|
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_pri, NULL))) return(0);
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_pri, NULL))) return(0);
|
||||||
|
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) {
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back, NULL))) {
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL)))
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back, NULL)))
|
||||||
fatal("CreateSurface back failed\n");
|
fatal("CreateSurface back failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,16 +472,16 @@ ddraw_init(HWND h)
|
|||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back2, NULL))) {
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back2, NULL))) {
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back2, NULL)))
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back2, NULL)))
|
||||||
fatal("CreateSurface back failed\n");
|
fatal("CreateSurface back failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(lpdd7->CreateClipper(0, &lpdd_clipper, NULL))) return(0);
|
if (FAILED(lpdd4->CreateClipper(0, &lpdd_clipper, NULL))) return(0);
|
||||||
|
|
||||||
if (FAILED(lpdd_clipper->SetHWnd(0, h))) return(0);
|
if (FAILED(lpdd_clipper->SetHWnd(0, h))) return(0);
|
||||||
|
|
||||||
@@ -505,28 +505,28 @@ ddraw_init_fs(HWND h)
|
|||||||
|
|
||||||
if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL))) return 0;
|
if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL))) return 0;
|
||||||
|
|
||||||
if (FAILED(lpdd->QueryInterface(IID_IDirectDraw7, (LPVOID *)&lpdd7))) return 0;
|
if (FAILED(lpdd->QueryInterface(IID_IDirectDraw4, (LPVOID *)&lpdd4))) return 0;
|
||||||
|
|
||||||
lpdd->Release();
|
lpdd->Release();
|
||||||
lpdd = NULL;
|
lpdd = NULL;
|
||||||
|
|
||||||
atexit(ddraw_close);
|
atexit(ddraw_close);
|
||||||
|
|
||||||
if (FAILED(lpdd7->SetCooperativeLevel(h,
|
if (FAILED(lpdd4->SetCooperativeLevel(h,
|
||||||
DDSCL_SETFOCUSWINDOW | \
|
DDSCL_SETFOCUSWINDOW | \
|
||||||
DDSCL_CREATEDEVICEWINDOW | \
|
DDSCL_CREATEDEVICEWINDOW | \
|
||||||
DDSCL_EXCLUSIVE | \
|
DDSCL_EXCLUSIVE | \
|
||||||
DDSCL_FULLSCREEN | \
|
DDSCL_FULLSCREEN | \
|
||||||
DDSCL_ALLOWREBOOT))) return 0;
|
DDSCL_ALLOWREBOOT))) return 0;
|
||||||
|
|
||||||
if (FAILED(lpdd7->SetDisplayMode(ddraw_w, ddraw_h, 32, 0 ,0))) return 0;
|
if (FAILED(lpdd4->SetDisplayMode(ddraw_w, ddraw_h, 32, 0 ,0))) return 0;
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
|
||||||
ddsd.dwBackBufferCount = 1;
|
ddsd.dwBackBufferCount = 1;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_pri, NULL))) return 0;
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_pri, NULL))) return 0;
|
||||||
|
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
|
||||||
if (FAILED(lpdds_pri->GetAttachedSurface(&ddsd.ddsCaps, &lpdds_back2))) return 0;
|
if (FAILED(lpdds_pri->GetAttachedSurface(&ddsd.ddsCaps, &lpdds_back2))) return 0;
|
||||||
@@ -537,12 +537,12 @@ ddraw_init_fs(HWND h)
|
|||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) {
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back, NULL))) {
|
||||||
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||||
ddsd.dwWidth = 2048;
|
ddsd.dwWidth = 2048;
|
||||||
ddsd.dwHeight = 2048;
|
ddsd.dwHeight = 2048;
|
||||||
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
||||||
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpdds_back, NULL))) return 0;
|
if (FAILED(lpdd4->CreateSurface(&ddsd, &lpdds_back, NULL))) return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ddraw_hwnd = h;
|
ddraw_hwnd = h;
|
||||||
@@ -574,9 +574,9 @@ ddraw_close(void)
|
|||||||
lpdd_clipper->Release();
|
lpdd_clipper->Release();
|
||||||
lpdd_clipper = NULL;
|
lpdd_clipper = NULL;
|
||||||
}
|
}
|
||||||
if (lpdd7) {
|
if (lpdd4) {
|
||||||
lpdd7->Release();
|
lpdd4->Release();
|
||||||
lpdd7 = NULL;
|
lpdd4 = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
* Implementation of the Iomega ZIP drive with SCSI(-like)
|
* Implementation of the Iomega ZIP drive with SCSI(-like)
|
||||||
* commands, for both ATAPI and SCSI usage.
|
* commands, for both ATAPI and SCSI usage.
|
||||||
*
|
*
|
||||||
* Version: @(#)zip.c 1.0.3 2018/01/28
|
* Version: @(#)zip.c 1.0.4 2018/02/07
|
||||||
*
|
*
|
||||||
* Author: Miran Grca, <mgrca8@gmail.com>
|
* Author: Miran Grca, <mgrca8@gmail.com>
|
||||||
*
|
*
|
||||||
@@ -1503,7 +1503,7 @@ void zip_command(uint8_t id, uint8_t *cdb)
|
|||||||
for (i = 0x00; i < 0x13; i++)
|
for (i = 0x00; i < 0x13; i++)
|
||||||
zipbufferb[i + 0x02] = 0x00;
|
zipbufferb[i + 0x02] = 0x00;
|
||||||
zipbufferb[0x15] = 0x00;
|
zipbufferb[0x15] = 0x00;
|
||||||
if (zip_drives[i].read_only)
|
if (zip_drives[id].read_only)
|
||||||
zipbufferb[0x15] |= 0x02;
|
zipbufferb[0x15] |= 0x02;
|
||||||
for (i = 0x00; i < 0x27; i++)
|
for (i = 0x00; i < 0x27; i++)
|
||||||
zipbufferb[i + 0x16] = 0x00;
|
zipbufferb[i + 0x16] = 0x00;
|
||||||
|
|||||||
Reference in New Issue
Block a user