cfgfile_dwrite (f, L"gfx_contrast", L"%d", p->gfx_contrast);
cfgfile_dwrite (f, L"gfx_gamma", L"%d", p->gfx_gamma);
cfgfile_dwrite_str (f, L"gfx_filter_mask", p->gfx_filtermask);
+ if (p->gfx_filteroverlay[0]) {
+ cfgfile_dwrite (f, L"gfx_filter_overlay", L"%s:%d%s,%d%s,%d%s,%d%s",
+ p->gfx_filteroverlay,
+ p->gfx_filteroverlay_pos.x >= -24000 ? p->gfx_filteroverlay_pos.x : -p->gfx_filteroverlay_pos.x - 30000,
+ p->gfx_filteroverlay_pos.x >= -24000 ? L"" : L"%",
+ p->gfx_filteroverlay_pos.y >= -24000 ? p->gfx_filteroverlay_pos.y : -p->gfx_filteroverlay_pos.y - 30000,
+ p->gfx_filteroverlay_pos.y >= -24000 ? L"" : L"%",
+ p->gfx_filteroverlay_pos.width >= -24000 ? p->gfx_filteroverlay_pos.width : -p->gfx_filteroverlay_pos.width - 30000,
+ p->gfx_filteroverlay_pos.width >= -24000 ? L"" : L"%",
+ p->gfx_filteroverlay_pos.height >= -24000 ? p->gfx_filteroverlay_pos.height : -p->gfx_filteroverlay_pos.height - 300000,
+ p->gfx_filteroverlay_pos.height >= -24000 ? L"" : L"%"
+ );
+ }
#endif
cfgfile_write_bool (f, L"immediate_blits", p->immediate_blits);
}
#ifdef GFXFILTER
+ if (_tcscmp (option, L"gfx_filter_overlay") == 0) {
+ TCHAR *s = _tcschr (value, ':');
+ p->gfx_filteroverlay_pos.x = 0;
+ p->gfx_filteroverlay_pos.y = 0;
+ p->gfx_filteroverlay_pos.width = 0;
+ p->gfx_filteroverlay_pos.height = 0;
+ while (s) {
+ *s++ = 0;
+ p->gfx_filteroverlay_pos.x = _tstol (s);
+ s = _tcschr (s, ',');
+ if (!s)
+ break;
+ if (s[-1] == '%')
+ p->gfx_filteroverlay_pos.x = -30000 - p->gfx_filteroverlay_pos.x;
+ *s++ = 0;
+ p->gfx_filteroverlay_pos.y = _tstol (s);
+ s = _tcschr (s, ',');
+ if (!s)
+ break;
+ if (s[-1] == '%')
+ p->gfx_filteroverlay_pos.y = -30000 - p->gfx_filteroverlay_pos.y;
+ *s++ = 0;
+ p->gfx_filteroverlay_pos.width = _tstol (s);
+ s = _tcschr (s, ',');
+ if (!s)
+ break;
+ if (s[-1] == '%')
+ p->gfx_filteroverlay_pos.width = -30000 - p->gfx_filteroverlay_pos.width;
+ *s++ = 0;
+ p->gfx_filteroverlay_pos.height = _tstol (s);
+ TCHAR *s2 = _tcschr (s, ',');
+ if (s2)
+ *s2 = 0;
+ s = s + _tcslen (s);
+ if (s[-1] == '%')
+ p->gfx_filteroverlay_pos.height = -30000 - p->gfx_filteroverlay_pos.height;
+ break;
+ }
+ _tcsncpy (p->gfx_filteroverlay, value, sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1);
+ p->gfx_filteroverlay[sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1] = 0;
+ return 1;
+ }
+
if (_tcscmp (option, L"gfx_filter") == 0) {
int i = 0;
TCHAR *s = _tcschr (value, ':');
{
Key *k = lookup_key (unit, GET_PCK_ARG1 (packet));
uaecptr addr = GET_PCK_ARG2 (packet);
- long size = (uae_s32)GET_PCK_ARG3 (packet);
- int actual;
+ uae_u32 size = GET_PCK_ARG3 (packet);
+ uae_u32 actual;
if (k == 0) {
PUT_PCK_RES1 (packet, DOS_FALSE);
possible_loadseg();
}
#endif
- if (valid_address (addr, size)) {
- uae_u8 *realpt;
- realpt = get_real_address (addr);
+ if (size == 0) {
+ actual = 0;
+ } else if (valid_address (addr, size)) {
+ uae_u8 *realpt = get_real_address (addr);
actual = fs_read (k->fd, realpt, size);
if (actual == 0) {
{
Key *k = lookup_key (unit, GET_PCK_ARG1 (packet));
uaecptr addr = GET_PCK_ARG2 (packet);
- long size = GET_PCK_ARG3 (packet);
- long actual;
+ uae_u32 size = GET_PCK_ARG3 (packet);
+ uae_u32 actual;
uae_u8 *buf;
int i;
return;
}
- if (valid_address (addr, size)) {
+ if (size == 0) {
+ actual = 0;
+ } else if (valid_address (addr, size)) {
uae_u8 *realpt = get_real_address (addr);
actual = fs_write (k->fd, realpt, size);
-
} else {
-
write_log (L"unixfs warning: Bad pointer passed for write: %08x, size %d\n", addr, size);
/* ugh this is inefficient but easy */
buf = xmalloc (uae_u8, size);
int gfx_filter;
TCHAR gfx_filtershader[MAX_DPATH];
TCHAR gfx_filtermask[MAX_DPATH];
+ TCHAR gfx_filteroverlay[MAX_DPATH];
+ struct wh gfx_filteroverlay_pos;
int gfx_filter_scanlines;
int gfx_filter_scanlineratio;
int gfx_filter_scanlinelevel;
static IDirect3DDevice9 *d3ddev;
static IDirect3DDevice9Ex *d3ddevex;
static D3DSURFACE_DESC dsdbb;
-static LPDIRECT3DTEXTURE9 texture, sltexture, ledtexture, masktexture;
-static int masktexture_w, masktexture_h;
+static LPDIRECT3DTEXTURE9 texture, sltexture, ledtexture, masktexture, mask2texture;
+static int masktexture_w, masktexture_h, mask2texture_w, mask2texture_h;
static LPDIRECT3DTEXTURE9 lpWorkTexture1, lpWorkTexture2, lpTempTexture;
LPDIRECT3DTEXTURE9 cursorsurfaced3d;
static LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture;
return 1;
}
-static int createmasktexture (TCHAR *filename)
+static int createmask2texture (const TCHAR *filename)
+{
+ struct zfile *zf;
+ int size;
+ uae_u8 *buf;
+ LPDIRECT3DTEXTURE9 tx;
+ HRESULT hr;
+ D3DXIMAGE_INFO dinfo;
+ TCHAR tmp[MAX_DPATH];
+
+ if (filename[0] == 0 || WIN32GFX_IsPicassoScreen ())
+ return 0;
+ zf = NULL;
+ for (int i = 0; i < 2; i++) {
+ if (i == 0)
+ _stprintf (tmp, L"%s%soverlays\\%s", start_path_exe, WIN32_PLUGINDIR, filename);
+ else
+ _tcscpy (tmp, filename);
+ zf = zfile_fopen (tmp, L"rb", ZFD_NORMAL);
+ if (zf)
+ break;
+ TCHAR tmp2[MAX_DPATH];
+ TCHAR *s = _tcsrchr (tmp, '.');
+ if (s) {
+ _tcscpy (tmp2, s);
+ _stprintf (s, L"_%dx%d%s", window_w, window_h, tmp2);
+ zf = zfile_fopen (tmp, L"rb", ZFD_NORMAL);
+ if (zf)
+ break;
+ }
+ }
+ if (!zf) {
+ write_log (L"%s: couldn't open overlay '%s'\n", D3DHEAD, filename);
+ return 0;
+ }
+ size = zfile_size (zf);
+ buf = xmalloc (uae_u8, size);
+ zfile_fread (buf, size, 1, zf);
+ zfile_fclose (zf);
+ hr = D3DXCreateTextureFromFileInMemoryEx (d3ddev, buf, size,
+ D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8,
+ D3DPOOL_DEFAULT, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, &dinfo, NULL, &tx);
+ xfree (buf);
+ if (FAILED (hr)) {
+ write_log (L"%s: overlay texture load failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
+ goto end;
+ }
+ mask2texture_w = dinfo.Width;
+ mask2texture_h = dinfo.Height;
+ mask2texture = tx;
+ return 1;
+end:
+ if (tx)
+ tx->Release ();
+ return 0;
+}
+
+static int createmasktexture (const TCHAR *filename)
{
int ww = window_w;
int hh = window_h;
masktexture->Release ();
masktexture = NULL;
}
+ if (mask2texture) {
+ mask2texture->Release ();
+ mask2texture = NULL;
+ }
if (lpTempTexture) {
lpTempTexture->Release ();
lpTempTexture = NULL;
if (wasshader && !shaderon)
write_log (L"Falling back to non-shader mode\n");
+ createmask2texture (currprefs.gfx_filteroverlay);
+
if (!createtexture (tin_w, tin_h))
return 0;
createledtexture ();
hr = D3DXCreateSprite (d3ddev, &sprite);
if (FAILED (hr)) {
- write_log (L"%s: LED D3DXSprite failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
+ write_log (L"%s: D3DXSprite failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
}
int curw = CURSORMAXWIDTH, curh = CURSORMAXHEIGHT;
}
}
- if (sprite && ((ledtexture) || (cursorsurfaced3d && cursor_v))) {
+ if (sprite && ((ledtexture) || (mask2texture) || (cursorsurfaced3d && cursor_v))) {
D3DXVECTOR3 v;
sprite->Begin (D3DXSPRITE_ALPHABLEND);
if (cursorsurfaced3d && cursor_v) {
MatrixScaling (&t, 1, 1, 0);
sprite->SetTransform (&t);
}
+ if (mask2texture) {
+ D3DXMATRIX t;
+ float w = (float)window_w / mask2texture_w;
+ float h = (float)window_h / mask2texture_h;
+
+ if (currprefs.gfx_filteroverlay_pos.width > 0)
+ w = (float)currprefs.gfx_filteroverlay_pos.width / mask2texture_w;
+ else if (currprefs.gfx_filteroverlay_pos.width == -1)
+ w = 1.0;
+ else if (currprefs.gfx_filteroverlay_pos.width <= -24000)
+ w = w * (-currprefs.gfx_filteroverlay_pos.width - 30000) / 100.0;
+
+ if (currprefs.gfx_filteroverlay_pos.height > 0)
+ h = (float)currprefs.gfx_filteroverlay_pos.height / mask2texture_h;
+ else if (currprefs.gfx_filteroverlay_pos.height == -1)
+ h = 1;
+ else if (currprefs.gfx_filteroverlay_pos.height <= -24000)
+ h = h * (-currprefs.gfx_filteroverlay_pos.height - 30000) / 100.0;
+
+ MatrixScaling (&t, w, h, 0);
+
+ v.x = 0;
+ if (currprefs.gfx_filteroverlay_pos.x == -1)
+ v.x = (window_w - (mask2texture_w * w)) / 2;
+ else if (currprefs.gfx_filteroverlay_pos.x > -24000)
+ v.x = currprefs.gfx_filteroverlay_pos.x;
+ else
+ v.x = (window_w - (mask2texture_w * w)) / 2 + (-currprefs.gfx_filteroverlay_pos.x - 30100) * window_w / 100.0;
+
+ v.y = 0;
+ if (currprefs.gfx_filteroverlay_pos.y == -1)
+ v.y = (window_h - (mask2texture_h * h)) / 2;
+ else if (currprefs.gfx_filteroverlay_pos.y > -24000)
+ v.y = currprefs.gfx_filteroverlay_pos.y;
+ else
+ v.y = (window_h - (mask2texture_h * h)) / 2 + (-currprefs.gfx_filteroverlay_pos.y - 30100) * window_h / 100.0;
+
+ v.x /= w;
+ v.y /= h;
+ v.z = 0;
+ sprite->SetTransform (&t);
+ sprite->Draw (mask2texture, NULL, NULL, &v, 0xffffffff);
+ MatrixScaling (&t, 1, 1, 0);
+ sprite->SetTransform (&t);
+ }
if (ledtexture && (((currprefs.leds_on_screen & STATUSLINE_RTG) && WIN32GFX_IsPicassoScreen ()) || ((currprefs.leds_on_screen & STATUSLINE_CHIPSET) && !WIN32GFX_IsPicassoScreen ()))) {
v.x = 0;
v.y = window_h - TD_TOTAL_HEIGHT;
#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
-#define WINUAEBETA L"11"
-#define WINUAEDATE MAKEBD(2010, 6, 22)
-#define WINUAEEXTRA L"RC2"
+#define WINUAEBETA L"12"
+#define WINUAEDATE MAKEBD(2010, 6, 26)
+#define WINUAEEXTRA L"RC3"
#define WINUAEREV L""
#define IHF_WINDOWHIDDEN 6
c |= currprefs.gfx_filter != changed_prefs.gfx_filter ? (2|8) : 0;
c |= _tcscmp (currprefs.gfx_filtershader, changed_prefs.gfx_filtershader) ? (2|8) : 0;
c |= _tcscmp (currprefs.gfx_filtermask, changed_prefs.gfx_filtermask) ? (2|8) : 0;
+ c |= _tcscmp (currprefs.gfx_filteroverlay, changed_prefs.gfx_filteroverlay) ? (2|8) : 0;
c |= currprefs.gfx_filter_filtermode != changed_prefs.gfx_filter_filtermode ? (2|8) : 0;
c |= currprefs.gfx_filter_bilinear != changed_prefs.gfx_filter_bilinear ? (2|8) : 0;
c |= currprefs.gfx_filter_horiz_zoom_mult != changed_prefs.gfx_filter_horiz_zoom_mult ? (1|8) : 0;
currprefs.gfx_filter = changed_prefs.gfx_filter;
_tcscpy (currprefs.gfx_filtershader, changed_prefs.gfx_filtershader);
_tcscpy (currprefs.gfx_filtermask, changed_prefs.gfx_filtermask);
+ _tcscpy (currprefs.gfx_filteroverlay, changed_prefs.gfx_filteroverlay);
currprefs.gfx_filter_filtermode = changed_prefs.gfx_filter_filtermode;
currprefs.gfx_filter_bilinear = changed_prefs.gfx_filter_bilinear;
currprefs.gfx_filter_horiz_zoom_mult = changed_prefs.gfx_filter_horiz_zoom_mult;
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9d.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;prowizard.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>NotSet</ShowProgress>
- <OutputFile>d:\amiga\winuae.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<IgnoreSpecificDefaultLibraries>LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ResourceCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_42.dll;openal32.dll;wintab32.dll;portaudio_x64.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</ResourceCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>d:\amiga\winuae.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
<AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
<Link>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>NotSet</ShowProgress>
- <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
</ResourceCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;avrt.lib;enet.lib;prowizard.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>d:\amiga\winuae.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
<AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
<Link>
<AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>NotSet</ShowProgress>
- <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+Beta 12: (RC3)
+
+- directory filesystem action_read/action_write with length=0 special handling
+ added (host OS routines may have returned weird errors in some situations)
+- monitor "bezel" overlay image support added, direct3d and configuration file only.
+ gfx_filter_overlay=<path>:x,y,width,height (only path is mandatory)
+ x and y: position of overlay relative to top/left corner. -1 = center, value% = relative to window size.
+ width and height: width of overlay image. -1 = scale to window size, 0 = use original size,
+ > 0 = scale to this size. value% = scale to window size + %adjustment.
+
Beta 11: (RC2)
- DirectInput keyboard and mouse didn't work in Test/Remap mode after emulation was started