extern struct dma_rec *last_dma_rec;
#define DMA_EVENT_BLITIRQ 1
-#define DMA_EVENT_BLITNASTY 2
+#define DMA_EVENT_BLITFINALD 2
#define DMA_EVENT_BLITSTARTFINISH 4
#define DMA_EVENT_BPLFETCHUPDATE 8
#define DMA_EVENT_COPPERWAKE 16
x -= (int)(fdx * fmx) - 1;
y -= (int)(fdy * fmy) - 2;
x = coord_native_to_amiga_x(x);
- if (y >= 0)
+ if (y >= 0) {
y = coord_native_to_amiga_y(y) * 2;
- if (x < 0 || y < 0 || x >= vidinfo->outbuffer->outwidth || y >= vidinfo->outbuffer->outheight)
+ }
+ if (x < 0 || y < 0 || x >= vidinfo->outbuffer->outwidth || y >= vidinfo->outbuffer->outheight) {
ob = true;
+ }
}
*xp = x;
*yp = y;
#include <paraport/ParaPort.h>
-typedef BOOL (*closePort)(HANDLE);
-typedef BOOL (*executeCycle)(HANDLE, PARAPORT_CYCLE*, int);
-typedef BOOL (*getPortInfo)(HANDLE, PARAPORT_INFO*);
-typedef HANDLE* (*openPort)(const char*);
+typedef BOOL (_stdcall* closePort)(HANDLE);
+typedef BOOL (_stdcall* executeCycle)(HANDLE, PARAPORT_CYCLE*, int);
+typedef BOOL (_stdcall* getPortInfo)(HANDLE, PARAPORT_INFO*);
+typedef HANDLE* (_stdcall* openPort)(const char*);
static closePort pp_closeport;
static executeCycle pp_executecycle;
static getPortInfo pp_getportinfo;
if (!pp_openport || !pp_closeport || !pp_executecycle) {
write_log (_T("PARAPORT: GetProcAddress() failed\n"));
paraport_free ();
+ return 0;
}
write_log (_T("PARAPORT:"));
for (i = 0; i < 4 ; i++) {
VALUE "FileDescription", "WinUAE"
VALUE "FileVersion", "4.5.0.0"
VALUE "InternalName", "WinUAE"
- VALUE "LegalCopyright", "© 1996-2020 under the GNU Public License (GPL)"
+ VALUE "LegalCopyright", "© 1996-2021 under the GNU Public License (GPL)"
VALUE "OriginalFilename", "WinUAE.exe"
VALUE "ProductName", "WinUAE"
VALUE "ProductVersion", "4.5.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-2020 Toni Wilen - Win32 port, core code updates.")
+ _T("\n(c) 1998-2021 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("Beta 13")
+#define WINUAEBETA _T("Beta 14")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2020, 12, 21)
+#define WINUAEDATE MAKEBD(2021, 1, 2)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
case 0x00800000: mem_size = 8; break;
case 0x01000000: mem_size = 9; break;
}
- }
- else if (msi == msi_chip) {
+ } else if (msi == msi_chip) {
switch (size)
{
case 0x00040000: mem_size = 0; break;
case 0x00400000: mem_size = 5; break;
case 0x00800000: mem_size = 6; break;
}
- }
- else if (msi == msi_bogo) {
+ } else if (msi == msi_bogo) {
switch (size)
{
case 0x00000000: mem_size = 0; break;
case 0x00180000: mem_size = 3; break;
case 0x001C0000: mem_size = 4; break;
}
- }
- else {
+ } else if (msi == msi_z3chip) {
+ switch (size)
+ {
+ case 0x00000000: mem_size = 0; break;
+ case 0x01000000: mem_size = 1; break;
+ case 0x02000000: mem_size = 2; break;
+ case 0x04000000: mem_size = 3; break;
+ case 0x08000000: mem_size = 4; break;
+ case 0x10000000: mem_size = 5; break;
+ case 0x18000000: mem_size = 6; break;
+ case 0x20000000: mem_size = 7; break;
+ case 0x30000000: mem_size = 8; break;
+ case 0x40000000: mem_size = 9; break;
+ }
+ } else {
if (size < 0x00100000)
mem_size = 0;
else if (size < 0x00200000)
_tcscpy(tmp, name);
if (rb->size) {
int mem_size = getmemsize(rb->size, msi);
- _tcscat(tmp, _T(" "));
+ _tcscat(tmp, _T(" ("));
_tcscat(tmp, memsize_names[msi[mem_size]]);
+ _tcscat(tmp, _T(")"));
}
SendDlgItemMessage(hDlg, IDC_MEMORYSELECT, CB_ADDSTRING, 0, (LPARAM)tmp);
}
+Beta 14:
+
+- Fixed possible out of bounds array access when virtual mouse driver is installed.
+- Added more strict coordinate/size validation to uaegfx blitter functions.
+- JIT shift instruction fix rewrite, they still didn't work fully correctly and my tester didn't catch them because JIT uses registers differently in different use cases etc.. But it did break most Cirrus Logic based chipset Picasso96 drivers. Corrupt icons and text, at least with some Picasso96 versions. (Still need more optimal fix later)
+- Improved PCem RTG mode scanline based display update timing.
+- CyberVision64 (S3Trio64) vsync interrupt fix, could have caused stuck interrupt when monitor driver was started.
+- Hardware emulated RTG boards interlace modes fixed (again).
+- Gaps between on screen leds are now smaller.
+- FAS246 SCSI chip apparently has Features Enable always set (or bit does not exist anymore). DKB RapidFire tests if transfer count high register works (write something, read it back) and assumes it is enabled without modifying Configuration 2 Register. Rapidfire worked when it first implemented because transfer count high was not originally correctly conditionally emulated. Datasheet seems to be MIA.
+- Fixed 32-bit Chip RAM size string array out of bounds access if 768M or 1G was selected. (b11)
+- Voodoo 3 byteswapped modes Mediator PCI sound card DMA hack fix.
+- Yet another 2D/3D registers-only Voodoo 3 byteswap mode emulated. Some W3D drivers use it. (Without it nothing was rendered and log was mostly filled with "triangle_setup wrong order" messages)
+- Blitter line mode was partially broken in non-cycle exact modes and CE mode wasn't fully accurate (b12). Still some edge cases to fix.
+- DMA debugger blitter slots are now marked as BLT-x (normal), BLF-x (fill) or BLL-x (line). x = channel. RFS, DSK, AUD, SPR and BPL slots include channel numbers. (Easier to remember than xxxDAT register address numbers)
+
+Shift instructions are really annoying to JIT compile because flags works very differently between x86 and 680x0:
+- Shift count 0: does not modify any flags | clears C, updates Z and N. Keep original X.
+- Shift count larger or same than data size: C undefined | C (and X) always equals last bit shifted out.
+- Shift count mask: masked by 31 (except if x64 64-bit word) | masked by 63.
+- Shift count from 1 to data size-1: practically identical behavior. Only needed extra step is simple C to X copy.
Beta 13:
- Hardware accelerated 3D confirmed working.
- PCI to PCI DMA supported, compatible with Voodoo 3 + SB128 or FM801 sound card Mediator DMA hack.
-
Beta 12:
- 68000/010 cycle-exact/prefetch: If long write access, check IPL when first word of long has been written, not after last word. Fixes Made in Croatia / Binary (again).
Most likely no real world program was affected. Host FPU mode will also return even more different results.
-
Beta 2:
- Custom CPU frequency selection fixed (b1)
- 68030 MMU with more compatible (prefetch) is not stable, at least in Amix (as usual..). Will be fixed later.
-
Beta 1:
Another quite useless new feature: cycle-accurate 68010! Includes full and accurate 68010 loop mode emulation.