start >>= sh;
end >>= sh;
- if (bplplanecnt == 5 && !bpldualpf) {
+ if (bplplanecnt == 5 && !bpldualpf && plf2pri > 5) {
/* emulate OCS/ECS only undocumented "SWIV" hardware feature */
for (int i = start; i < end; i++) {
if (p[i] & 16)
p[i] = 16;
}
- } else if (bpldualpf && bpldualpfpri) {
+ }
+ if (bpldualpf && bpldualpfpri && plf2pri > 4) {
/* in dualplayfield mode this feature is even more strange.. */
for (int i = start; i < end; i++) {
+ // running man / scoopex
if (p[i] & (2 | 8 | 32))
p[i] |= 0x40;
}
- } else if (bpldualpf && !bpldualpfpri) {
+ }
+ if (bpldualpf && !bpldualpfpri && plf2pri > 4) {
for (int i = start; i < end; i++) {
p[i] &= ~(2 | 8 | 32);
}
}
+ if (bpldualpf && plf1pri > 4) {
+ for (int i = start; i < end; i++) {
+ p[i] = 0x40;
+ }
+ }
}
/* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time
// playfield
if (nextpos_in_range > lastpos && lastpos >= playfield_start && lastpos < playfield_end) {
int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end;
- if (plf2pri > 5 && !(currprefs.chipset_mask & CSMASK_AGA))
+ if ((plf2pri > 4 || plf1pri > 4) && !(currprefs.chipset_mask & CSMASK_AGA))
weird_bitplane_fix (lastpos, t);
if (bplxor && may_require_hard_way && worker_pfield != pfield_do_linetoscr_bordersprite_aga)
playfield_hard_way(worker_pfield, lastpos, t);
}
}
+extern void cpu_invalidate_cache(uaecptr, int);
+
extern uae_u32(*read_data_030_bget)(uaecptr);
extern uae_u32(*read_data_030_wget)(uaecptr);
extern uae_u32(*read_data_030_lget)(uaecptr);
#endif
}
-void flush_cpu_caches_040(uae_u16 opcode)
+static void flush_cpu_caches_040_2(int cache, int scope, uaecptr addr, bool push, bool pushinv)
{
- // 0 (1) = data, 1 (2) = instruction
- int cache = (opcode >> 6) & 3;
- int scope = (opcode >> 3) & 3;
- int areg = opcode & 7;
- uaecptr addr = m68k_areg(regs, areg);
- bool push = (opcode & 0x20) != 0;
- bool pushinv = (regs.cacr & 0x01000000) == 0; // 68060 DPI
#if VALIDATE_68040_DATACACHE
write_log(_T("push %d %d %d %08x %d %d\n"), cache, scope, areg, addr, push, pushinv);
}
}
}
+}
+
+void flush_cpu_caches_040(uae_u16 opcode)
+{
+ // 0 (1) = data, 1 (2) = instruction
+ int cache = (opcode >> 6) & 3;
+ int scope = (opcode >> 3) & 3;
+ int areg = opcode & 7;
+ uaecptr addr = m68k_areg(regs, areg);
+ bool push = (opcode & 0x20) != 0;
+ bool pushinv = (regs.cacr & 0x01000000) == 0; // 68060 DPI
+
+ flush_cpu_caches_040_2(cache, scope, addr, push, pushinv);
mmu_flush_cache();
}
+void cpu_invalidate_cache(uaecptr addr, int size)
+{
+ if (!currprefs.cpu_data_cache)
+ return;
+ if (currprefs.cpu_model == 68030) {
+ uaecptr end = addr + size;
+ addr &= ~3;
+ while (addr < end) {
+ dcaches030[(addr >> 4) & (CACHELINES030 - 1)].valid[(addr >> 2) & 3] = 0;
+ addr += 4;
+ }
+ } else if (currprefs.cpu_model >= 68040) {
+ uaecptr end = addr + size;
+ while (addr < end) {
+ flush_cpu_caches_040_2(0, 1, addr, true, true);
+ addr += 16;
+ }
+ }
+}
+
+
void set_cpu_caches (bool flush)
{
regs.prefetch020addr = 0xffffffff;
return 0;
}
+static uae_u32 asmgetval(const TCHAR *s)
+{
+ TCHAR *endptr;
+ if (s[0] == '-')
+ return _tcstol(s, &endptr, 16);
+ return _tcstoul(s, &endptr, 16);
+}
+
static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
{
TCHAR *ss = s;
*v = _tstol(s + 2);
} else {
TCHAR *endptr;
- *v = _tcstol(s + 1, &endptr, 16);
+ *v = asmgetval(s + 1);
}
return imm;
}
if (s[0] == '!') {
*v = _tstol(s + 1);
} else {
- TCHAR *endptr;
- *v = _tcstol(s, &endptr, 16);
+ *v = asmgetval(s);
}
int dots = 0;
for (int i = 0; i < _tcslen(s); i++) {
if (dstptr)
dstbak = dst = dstptr;
else
- dstbak = dst = xmalloc (uae_u8, 1000 + 20000);
+ dstbak = dst = xmalloc (uae_u8, 1000 + 30000);
model = currprefs.cpu_model;
save_u32 (model); /* MODEL */
save_u32(0x80000000 | 0x40000000 | 0x20000000 | 0x10000000 | 0x8000000 | 0x4000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */
int p96refresh_active;
bool have_done_picasso = 1; /* For the JIT compiler */
static int p96syncrate;
-int p96hsync_counter, full_refresh;
+static int p96hsync_counter, full_refresh;
#define PICASSO_STATE_SETDISPLAY 1
void fb_copyrow(uae_u8 *src, uae_u8 *dst, int x, int y, int width, int srcpixbytes, int dy);
extern int p96refresh_active;
-extern int p96hsync_counter;
#define LIB_SIZE 34
#define CARD_FLAGS LIB_SIZE
VALUE "FileDescription", "WinUAE"
VALUE "FileVersion", "3.6.0.0"
VALUE "InternalName", "WinUAE"
- VALUE "LegalCopyright", "© 1996-2017 under the GNU Public License (GPL)"
+ VALUE "LegalCopyright", "© 1996-2018 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
VALUE "ProductVersion", "3.6.0.0"
SystemInfo.wProcessorArchitecture, SystemInfo.wProcessorLevel, SystemInfo.wProcessorRevision,
SystemInfo.dwNumberOfProcessors, filedate, os_touch);
write_log (_T("\n(c) 1995-2001 Bernd Schmidt - Core UAE concept and implementation.")
- _T("\n(c) 1998-2017 Toni Wilen - Win32 port, core code updates.")
+ _T("\n(c) 1998-2018 Toni Wilen - Win32 port, core code updates.")
_T("\n(c) 1996-2001 Brian King - Win32 port, Picasso96 RTG, and GUI.")
_T("\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support.")
_T("\n(c) 2000-2001 Bernd Meyer - JIT engine.")
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("15")
+#define WINUAEBETA _T("16")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2017, 12, 27)
+#define WINUAEDATE MAKEBD(2018, 1, 1)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
return;
hStatusWnd = CreateWindowEx (
- 0, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE,
+ WS_EX_COMPOSITED, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE,
0, 0, 0, 0, hMainWnd, (HMENU) 1, hInst, NULL);
if (!hStatusWnd)
return;
{
if (isvsync () == 0)
return false;
- if (currprefs.gfx_api == 2) {
+ if (currprefs.gfx_api > 1) {
return d3d11_vsync_isdone();
} else {
if (!isthreadedvsync()) {
}
tres = scaleresource (panelresource, hwnd, gui_resize_enabled, gui_fullscreen, workprefs.win32_gui_alwaysontop || workprefs.win32_main_alwaysontop ? WS_EX_TOPMOST : 0, true);
- dhwnd = CreateDialogIndirect (tres->inst, tres->resource, isfullscreen () != 0 ? hwnd : NULL, DialogProc);
+ HWND phwnd = hwnd;
+ if (isfullscreen() == 0)
+ phwnd = 0;
+ if (isfullscreen() > 0 && currprefs.gfx_api > 1)
+ phwnd = 0;
+ dhwnd = CreateDialogIndirect (tres->inst, tres->resource, phwnd, DialogProc);
dialog_rect.top = dialog_rect.left = 0;
dialog_rect.right = tres->width;
dialog_rect.bottom = tres->height;
<Culture>0x0409</Culture>
</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;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <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;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>NotSet</ShowProgress>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
- RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
\r
+Beta 16:\r
+\r
+- Fixed statefile memory corruption if CPU is 68060. (Introduced when 68040/060 data cache support was added)\r
+- Made SA-1000 and SA-2000 suboptions (like SupraDrives) SA-2000 is same as SA-1000 without $f0 ROM mapping. (Old SA-1000 configs must be re-created)\r
+- GUI opened in D3D11 fullscreen mode: GUI minimization fixed.\r
+- D3D11 mode fullscreen alt-tab, then clicking GUI reset button didn't restore fullscreen mode correctly.\r
+- D3D11 scaled RTG mode hardware mouse cursor position and scaling fixed.\r
+- D3D11 fullscreen RTG, enter GUI, exit GUI: there may have been long delay before fullscreen mode was restored.\r
+- Handle D3D11 mode possible DXGI_ERROR_DEVICE_REMOVED error by retrying mode setup instead of stopping screen updates.\r
+- Catweasel expansion caused hang (infinite autoconfig loop), it was not fully updated to new expansion system.\r
+- SA-1000 Amax driver hang fixed (WD reset command didn't clear busy in all situations)\r
+- Tape emulation now returns single file mark after last file before final end of file/blank state, no filemark returned if last file of index file does not have ending linefeed. Fixes Amix installation error if last file on tape (X11r5src) was selected for installation. When writing, multiple filemarks between files are supported.\r
+\r
+Beta 15:\r
+\r
+- Debugger 68040/060 MMU table dump command (mmud) didn't support 8k page size. Mask out page descriptor bit 3 (unused) and 4 (M) when checking for descriptor flag differences to generate more useful output from Fusion Forty boot ROM generated page tables.\r
+- Debugger memory string routines now also use MMU mapping mode if enabled.\r
+- Fusion Forty memory flag fixed (It does not use processor slot ram and it must not be enabled). Fixes boot crash if MMU emulation is enabled. Note that it will crash (nothing to do with emulation) if MMU is enabled and 32-bit RAM (except board's onboard RAM is enabled) or any Z3 boards are enabled. Real A2000 can't have those.\r
+- D3D11 no-buffer mode now selects blit model (instead of flip model) if DXGI 1.5+ allow tearing mode is not available.\r
+- D3D11 low latency vsync partially implemented. No calibration, it uses Windows reported value because they should be accurate (reported as fractional number)\r
+- D3D11 black frame insertion support implemented. (which probably isn't working very well..)\r
+- D3D11 mode will now reload shader(s) automatically on the fly if they are modified.\r
+- D3D11 mode D3D9 to D3D11 compatible shader conversion now also converts D3D9-only migfilter/magfilter lines.\r
+- D3D11 mode D3D9 to D3D11 compatible shader modification is completely skipped if technique10 or technique11 is found.\r
+- D3D11 mode fullscreen alt-tab reliability improved, it was still possible to get blank or partially blank window after alt-tab.\r
\r
Beta 14:\r
\r
- ECS Denise BPLCON2 ECS-only bits were masked unless AGA was selected, ECS-specific KILLEHB linetoscr was not implemented. Seven Seas/Andromeda now shows correctly corrupted palette if ECS Denise.\r
- IDE FORMAT TRACK fixed, it needs to transfer single block of data (and then toss it away). Fixes Gigatron Arriba installer.\r
- Emulated Gigatron Arriba IDE controller. ROM dump not available.\r
-- 64-bit only bad stack linker setting correctded, caused random crashes and caused file dialogs to crash if certain shell extensions were installed. (Thanks mutetus!)\r
+- 64-bit only bad stack linker setting corrected, caused random crashes and caused file dialogs to crash if certain shell extensions were installed. (Thanks mutetus!)\r
\r
Beta 8:\r
\r
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define ProductName = "WinUAE" ?>
- <?define ProductVersion = "3.5.1" ?>
- <?define ProductFullVersion = "3.5.1.0" ?>
+ <?define ProductVersion = "3.6.0" ?>
+ <?define ProductFullVersion = "3.6.0.0" ?>
<?define ProductAuthor = "Arabuusimiehet" ?>
<?if $(var.Platform) = x64 ?>