From 777022b1d58a4199ca6486ddcf59090e6da5e562 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 13 Aug 2017 18:52:15 +0300 Subject: [PATCH] 3600b1 --- cpummu.cpp | 2 +- cpummu30.cpp | 6 +- gencpu.cpp | 2 +- include/bsdsocket.h | 2 +- include/options.h | 4 +- include/picasso96.h | 2 +- include/savestate.h | 2 +- include/uae/mman.h | 2 +- jit/codegen_x86.h | 4 +- jit/compemu_fpp.cpp | 2 +- jit/compemu_support.cpp | 4 +- jit/compemu_support_codegen.cpp | 2 +- memory.cpp | 2 +- od-win32/ahidsound_dsonly.cpp | 2 +- od-win32/ahidsound_unified.cpp | 2 +- od-win32/blkdev_win32_ioctl.cpp | 2 +- od-win32/bsdsock.cpp | 6 +- od-win32/hardfile_win32.cpp | 125 +++++++++--------- od-win32/mman.cpp | 29 ++-- od-win32/prowizard/prowizard.vcxproj | 10 +- od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 32 ++--- od-win32/rp.cpp | 16 +-- od-win32/screenshot.cpp | 2 +- od-win32/unpackers/unpackers.vcxproj | 10 +- od-win32/win32.cpp | 2 +- od-win32/win32.h | 6 +- od-win32/win32gui.cpp | 40 ++++-- od-win32/winuae_msvc15/winuae_msvc.vcxproj | 9 +- .../winuae_msvc15/winuae_msvc.vcxproj.filters | 9 ++ od-win32/winuaechangelog.txt | 113 ++++++++++++++++ od-win32/wix/Product.wxs | 4 +- savestate.cpp | 2 +- scsidev.cpp | 2 +- serial.cpp | 2 +- 35 files changed, 305 insertions(+), 157 deletions(-) diff --git a/cpummu.cpp b/cpummu.cpp index 2636fc93..9c81c8f1 100644 --- a/cpummu.cpp +++ b/cpummu.cpp @@ -509,7 +509,7 @@ void mmu_bus_error(uaecptr addr, uae_u32 val, int fc, bool write, int size,uae_u * mmu access is a 4 step process: * if mmu is not enabled just read physical * check transparent region, if transparent, read physical - * check ATC (address translation cache), read immediatly if HIT + * check ATC (address translation cache), read immediately if HIT * read from mmu with the long path (and allocate ATC entry if needed) */ diff --git a/cpummu30.cpp b/cpummu30.cpp index de4278d1..b6405de1 100644 --- a/cpummu30.cpp +++ b/cpummu30.cpp @@ -589,7 +589,7 @@ uae_u32 mmu_op30_helper_get_fc(uae_u16 next) { * */ -/* TT comparision results */ +/* TT comparison results */ #define TT_NO_MATCH 0x1 #define TT_OK_MATCH 0x2 #define TT_NO_READ 0x4 @@ -1472,7 +1472,7 @@ uae_u32 mmu030_table_search(uaecptr addr, uae_u32 fc, bool write, int level) { descr[0] |= DESCR_U; descr_modified = true; } - /* write modified descriptor if neccessary */ + /* write modified descriptor if necessary */ if (descr_modified) { phys_put_long(descr_addr[descr_num], descr[0]); } @@ -1538,7 +1538,7 @@ uae_u32 mmu030_table_search(uaecptr addr, uae_u32 fc, bool write, int level) { stop_search: ; /* Make compiler happy */ } CATCH(prb) { - /* We jump to this place, if a bus error occured during table search. + /* We jump to this place, if a bus error occurred during table search. * bBusErrorReadWrite is set in m68000.c, M68000_BusError: read = 1 */ if (bBusErrorReadWrite) { descr_num--; diff --git a/gencpu.cpp b/gencpu.cpp index 20850cef..b6cfc07d 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -1316,7 +1316,7 @@ static void maybeaddop_ce020 (int flags) * the calling routine handles Apdi and Aipi modes. * gb-- movem == 2 means the same thing but for a MOVE16 instruction */ -/* fixup indicates if we want to fix up adress registers in pre decrement +/* fixup indicates if we want to fix up address registers in pre decrement * or post increment mode now (0) or later (1). A value of 2 will then be * used to do the actual fix up. This allows to do all memory readings * before any register is modified, and so to rerun operation without diff --git a/include/bsdsocket.h b/include/bsdsocket.h index 2de460ee..c5c89f82 100644 --- a/include/bsdsocket.h +++ b/include/bsdsocket.h @@ -22,7 +22,7 @@ extern int log_bsd; extern int init_socket_layer (void); extern void deinit_socket_layer (void); -/* inital size of per-process descriptor table (currently fixed) */ +/* initial size of per-process descriptor table (currently fixed) */ #define DEFAULT_DTABLE_SIZE 64 #define SCRATCHBUFSIZE 128 diff --git a/include/options.h b/include/options.h index fcfd4149..9efffdaf 100644 --- a/include/options.h +++ b/include/options.h @@ -15,8 +15,8 @@ #include "traps.h" #define UAEMAJOR 3 -#define UAEMINOR 5 -#define UAESUBREV 1 +#define UAEMINOR 6 +#define UAESUBREV 0 typedef enum { KBD_LANG_US, KBD_LANG_DK, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang; diff --git a/include/picasso96.h b/include/picasso96.h index b573624d..9e05cb1c 100644 --- a/include/picasso96.h +++ b/include/picasso96.h @@ -225,7 +225,7 @@ struct BitMap struct Settings { uae_u32 BoardType; - /* a value discribing assignment to nth board local to boardtype + /* a value describing assignment to nth board local to boardtype * to be used for reassignment when boards are added or removed. */ uae_u16 LocalOrdering; uae_s16 LastSelected; diff --git a/include/savestate.h b/include/savestate.h index af1597ca..4c713e69 100644 --- a/include/savestate.h +++ b/include/savestate.h @@ -12,7 +12,7 @@ #include "uae/types.h" /* functions to save byte,word or long word - * independent of CPU's endianess */ + * independent of CPU's endianness */ extern void save_store_pos_func (uae_u8 **); extern void save_store_size_func (uae_u8 **); diff --git a/include/uae/mman.h b/include/uae/mman.h index 91a2c6e8..5d4d55d2 100644 --- a/include/uae/mman.h +++ b/include/uae/mman.h @@ -21,7 +21,7 @@ struct uae_shmid_ds { int maprom; }; -void *uae_shmat(addrbank *ab, int shmid, void *shmaddr, int shmflg); +void *uae_shmat(addrbank *ab, int shmid, void *shmaddr, int shmflg, struct uae_mman_data *md); int uae_shmdt(const void *shmaddr); int uae_shmget(uae_key_t key, addrbank *ab, int shmflg); int uae_shmctl(int shmid, int cmd, struct uae_shmid_ds *buf); diff --git a/jit/codegen_x86.h b/jit/codegen_x86.h index 6743392d..b37b48f8 100644 --- a/jit/codegen_x86.h +++ b/jit/codegen_x86.h @@ -1251,14 +1251,14 @@ enum { /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ -// FIXME: no prefix is availble to encode a 32-bit operand size in 64-bit mode +// FIXME: no prefix is available to encode a 32-bit operand size in 64-bit mode #define CALLm(M) _O_D32 (0xe8 ,(int)(M) ) #define _CALLLsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b010,_r4(R) )) #define _CALLQsr(R) (_REXQrr(0, R), _O_Mrm (0xff ,_b11,_b010,_r8(R) )) #define CALLsr(R) ( X86_TARGET_64BIT ? _CALLQsr(R) : _CALLLsr(R)) #define CALLsm(D,B,I,S) (_REXLrm(0, B, I), _O_r_X (0xff ,_b010 ,(int)(D),B,I,S )) -// FIXME: no prefix is availble to encode a 32-bit operand size in 64-bit mode +// FIXME: no prefix is available to encode a 32-bit operand size in 64-bit mode #define JMPSm(M) _O_D8 (0xeb ,(int)(M) ) #define JMPm(M) _O_D32 (0xe9 ,(int)(M) ) #define _JMPLsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b100,_r4(R) )) diff --git a/jit/compemu_fpp.cpp b/jit/compemu_fpp.cpp index a76ac929..4b0afdfe 100644 --- a/jit/compemu_fpp.cpp +++ b/jit/compemu_fpp.cpp @@ -619,7 +619,7 @@ void comp_fbcc_opp (uae_u32 opcode) } /* Floating point conditions - The "NotANumber" part could be problematic; Howver, when NaN is + The "NotANumber" part could be problematic; However, when NaN is encountered, the ftst instruction sets bot N and Z to 1 on the x87, so quite often things just fall into place. This is probably not accurate wrt the 68k FPU, but it is *as* accurate as this was before. diff --git a/jit/compemu_support.cpp b/jit/compemu_support.cpp index 9fa7c339..eaac9c28 100644 --- a/jit/compemu_support.cpp +++ b/jit/compemu_support.cpp @@ -699,7 +699,7 @@ static inline blockinfo* get_blockinfo_addr_new(void* addr, int /* setstate */) static void prepare_block(blockinfo* bi); -/* Managment of blockinfos. +/* Management of blockinfos. A blockinfo struct is allocated whenever a new block has to be compiled. If the list of free blockinfos is empty, we allocate a new @@ -3246,7 +3246,7 @@ void get_n_addr(int address, int dest, int tmp) #if FIXED_ADDRESSING lea_l_brr(dest,address,MEMBaseDiff); #else -# error "Only fixed adressing mode supported" +# error "Only fixed addressing mode supported" #endif forget_about(tmp); (void) f; diff --git a/jit/compemu_support_codegen.cpp b/jit/compemu_support_codegen.cpp index 56cbafff..86b4086a 100644 --- a/jit/compemu_support_codegen.cpp +++ b/jit/compemu_support_codegen.cpp @@ -579,7 +579,7 @@ static __inline__ blockinfo* get_blockinfo_addr_new(void* addr, int setstate) static void prepare_block(blockinfo* bi); -/* Managment of blockinfos. +/* Management of blockinfos. A blockinfo struct is allocated whenever a new block has to be compiled. If the list of free blockinfos is empty, we allocate a new diff --git a/memory.cpp b/memory.cpp index f750ee79..b330e2bc 100644 --- a/memory.cpp +++ b/memory.cpp @@ -1465,7 +1465,7 @@ static int patch_shapeshifter (uae_u8 *kickmemory) { /* Patch Kickstart ROM for ShapeShifter - from Christian Bauer. * Changes 'lea $400,a0' and 'lea $1000,a0' to 'lea $3000,a0' for - * ShapeShifter compatability. + * ShapeShifter compatibility. */ int i, patched = 0; uae_u8 kickshift1[] = { 0x41, 0xf8, 0x04, 0x00 }; diff --git a/od-win32/ahidsound_dsonly.cpp b/od-win32/ahidsound_dsonly.cpp index c2daa669..3cd28a87 100644 --- a/od-win32/ahidsound_dsonly.cpp +++ b/od-win32/ahidsound_dsonly.cpp @@ -74,7 +74,7 @@ static LPDIRECTSOUNDCAPTUREBUFFER lpDSB2r = NULL; struct winuae //this struct is put in a6 if you call //execute native function { - HWND amigawnd; //adress of amiga Window Windows Handle + HWND amigawnd; //address of amiga Window Windows Handle unsigned int changenum; //number to detect screen close/open unsigned int z3offset; //the offset to add to acsess Z3 mem from Dll side }; diff --git a/od-win32/ahidsound_unified.cpp b/od-win32/ahidsound_unified.cpp index cf448af5..1cadd405 100644 --- a/od-win32/ahidsound_unified.cpp +++ b/od-win32/ahidsound_unified.cpp @@ -76,7 +76,7 @@ static LPDIRECTSOUNDCAPTUREBUFFER lpDSB2r = NULL; struct winuae //this struct is put in a6 if you call //execute native function { - HWND amigawnd; //adress of amiga Window Windows Handle + HWND amigawnd; //address of amiga Window Windows Handle unsigned int changenum; //number to detect screen close/open unsigned int z3offset; //the offset to add to acsess Z3 mem from Dll side }; diff --git a/od-win32/blkdev_win32_ioctl.cpp b/od-win32/blkdev_win32_ioctl.cpp index 8abfab5d..df5473d2 100644 --- a/od-win32/blkdev_win32_ioctl.cpp +++ b/od-win32/blkdev_win32_ioctl.cpp @@ -1416,7 +1416,7 @@ static int sys_cddev_open (struct dev_info_ioctl *ciw, int unitnum) } } - write_log (_T("IOCTL: device '%s' (%s/%s/%s) opened succesfully (unit=%d,media=%d)\n"), + write_log (_T("IOCTL: device '%s' (%s/%s/%s) opened successfully (unit=%d,media=%d)\n"), ciw->devname, ciw->di.vendorid, ciw->di.productid, ciw->di.revision, unitnum, ciw->di.media_inserted); if (!_tcsicmp (ciw->di.vendorid, _T("iomega")) && !_tcsicmp (ciw->di.productid, _T("rrd"))) { diff --git a/od-win32/bsdsock.cpp b/od-win32/bsdsock.cpp index 388d7a6c..b3bef4ba 100644 --- a/od-win32/bsdsock.cpp +++ b/od-win32/bsdsock.cpp @@ -2257,7 +2257,7 @@ static unsigned int thread_get2 (void *indexp) if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (host == 0) { - // Error occured + // Error occurred SETERRNO; BSDTRACE((_T("tg2_0 failed %d:%d -> "), sb->sb_errno,wscnt)); } else { @@ -2280,7 +2280,7 @@ static unsigned int thread_get2 (void *indexp) proto = getprotobyname (name_rp); if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (proto == 0) { - // Error occured + // Error occurred SETERRNO; BSDTRACE((_T("tg2_1 failed %d:%d -> "), sb->sb_errno, wscnt)); } else { @@ -2317,7 +2317,7 @@ static unsigned int thread_get2 (void *indexp) if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (serv == 0) { - // Error occured + // Error occurred SETERRNO; BSDTRACE((_T("tg2_2 failed %d:%d -> "), sb->sb_errno, wscnt)); } else { diff --git a/od-win32/hardfile_win32.cpp b/od-win32/hardfile_win32.cpp index 4011838b..51c1fe7c 100644 --- a/od-win32/hardfile_win32.cpp +++ b/od-win32/hardfile_win32.cpp @@ -1664,15 +1664,17 @@ static int hdf_seek (struct hardfiledata *hfd, uae_u64 offset) gui_message (_T("hd: hdf handle is not valid. bug.")); abort(); } - if (offset >= hfd->physsize - hfd->virtual_size) { - gui_message (_T("hd: tried to seek out of bounds! (%I64X >= %I64X - %I64X)\n"), offset, hfd->physsize, hfd->virtual_size); - abort (); - } - offset += hfd->offset; - if (offset & (hfd->ci.blocksize - 1)) { - gui_message (_T("hd: poscheck failed, offset=%I64X not aligned to blocksize=%d! (%I64X & %04X = %04X)\n"), - offset, hfd->ci.blocksize, offset, hfd->ci.blocksize, offset & (hfd->ci.blocksize - 1)); - abort (); + if (hfd->physsize) { + if (offset >= hfd->physsize - hfd->virtual_size) { + gui_message (_T("hd: tried to seek out of bounds! (%I64X >= %I64X - %I64X)\n"), offset, hfd->physsize, hfd->virtual_size); + abort (); + } + offset += hfd->offset; + if (offset & (hfd->ci.blocksize - 1)) { + gui_message (_T("hd: poscheck failed, offset=%I64X not aligned to blocksize=%d! (%I64X & %04X = %04X)\n"), + offset, hfd->ci.blocksize, offset, hfd->ci.blocksize, offset & (hfd->ci.blocksize - 1)); + abort (); + } } if (hfd->handle_valid == HDF_HANDLE_WIN32) { LARGE_INTEGER fppos; @@ -1895,7 +1897,8 @@ int hdf_read_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int if (hfd->physsize < CACHE_SIZE) { hfd->cache_valid = 0; hdf_seek (hfd, offset); - poscheck (hfd, len); + if (hfd->physsize) + poscheck (hfd, len); if (hfd->handle_valid == HDF_HANDLE_WIN32) { ReadFile (hfd->handle->h, hfd->cache, len, &ret, NULL); memcpy (buffer, hfd->cache, ret); @@ -1967,7 +1970,7 @@ int hdf_write_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, in int got = 0; uae_u8 *p = (uae_u8*)buffer; - if (hfd->drive_empty) + if (hfd->drive_empty || hfd->physsize == 0) return 0; if (offset < hfd->virtual_size) return len; @@ -2281,6 +2284,7 @@ static BOOL GetDevicePropertyFromName(const TCHAR *DevicePath, DWORD Index, DWOR } udi->offset = 0; + udi->size = 0; if (geom_ok) { udi->bytespersector = dg.BytesPerSector; if (dg.BytesPerSector < 512) { @@ -2303,11 +2307,6 @@ static BOOL GetDevicePropertyFromName(const TCHAR *DevicePath, DWORD Index, DWOR } if (gli_ok && gli.Length.QuadPart) udi->size = gli.Length.QuadPart; - if (udi->size == 0) { - write_log (_T("device size is zero!\n")); - ret = 1; - goto end; - } write_log (_T("device size %I64d (0x%I64x) bytes\n"), udi->size, udi->size); trim (orgname); @@ -2317,59 +2316,55 @@ static BOOL GetDevicePropertyFromName(const TCHAR *DevicePath, DWORD Index, DWOR if (!status) { DWORD err = GetLastError(); write_log (_T("IOCTL_DISK_GET_DRIVE_LAYOUT failed with error code %d.\n"), err); - if (err != ERROR_INVALID_FUNCTION) { - ret = 1; - goto end; - } - goto amipartfound; - } - dli = (DRIVE_LAYOUT_INFORMATION*)outBuf; - if (dli->PartitionCount) { - int nonzeropart = 0; - int gotpart = 0; - int safepart = 0; - write_log (_T("%d MBR partitions found\n"), dli->PartitionCount); - for (i = 0; i < dli->PartitionCount && (*index2) < MAX_FILESYSTEM_UNITS; i++) { - PARTITION_INFORMATION *pi = &dli->PartitionEntry[i]; - if (pi->PartitionType == PARTITION_ENTRY_UNUSED) - continue; - write_log (_T("%d: num: %d type: %02X offset: %I64d size: %I64d, "), i, - pi->PartitionNumber, pi->PartitionType, pi->StartingOffset.QuadPart, pi->PartitionLength.QuadPart); - if (pi->RecognizedPartition == 0) { - write_log (_T("unrecognized\n")); - continue; + } else { + dli = (DRIVE_LAYOUT_INFORMATION*)outBuf; + if (dli->PartitionCount) { + int nonzeropart = 0; + int gotpart = 0; + int safepart = 0; + write_log (_T("%d MBR partitions found\n"), dli->PartitionCount); + for (i = 0; i < dli->PartitionCount && (*index2) < MAX_FILESYSTEM_UNITS; i++) { + PARTITION_INFORMATION *pi = &dli->PartitionEntry[i]; + if (pi->PartitionType == PARTITION_ENTRY_UNUSED) + continue; + write_log (_T("%d: num: %d type: %02X offset: %I64d size: %I64d, "), i, + pi->PartitionNumber, pi->PartitionType, pi->StartingOffset.QuadPart, pi->PartitionLength.QuadPart); + if (pi->RecognizedPartition == 0) { + write_log (_T("unrecognized\n")); + continue; + } + nonzeropart++; + if (pi->PartitionType != 0x76 && pi->PartitionType != 0x30) { + write_log (_T("type not 0x76 or 0x30\n")); + continue; + } + udi++; + (*index2)++; + memmove (udi, udi2, sizeof (*udi)); + udi->device_name[0] = 0; + udi->offset = pi->StartingOffset.QuadPart; + udi->size = pi->PartitionLength.QuadPart; + write_log (_T("used\n")); + _stprintf (udi->device_name, _T(":P#%d_%s"), pi->PartitionNumber, orgname); + _stprintf(udi->device_full_path, _T("%s:%s"), udi->device_name, udi->device_path); + checkhdname(udi); + udi->dangerous = -5; + udi->partitiondrive = true; + safepart = 1; + gotpart = 1; } - nonzeropart++; - if (pi->PartitionType != 0x76 && pi->PartitionType != 0x30) { - write_log (_T("type not 0x76 or 0x30\n")); - continue; + if (!nonzeropart) { + write_log (_T("empty MBR partition table detected, checking for RDB\n")); + } else if (!gotpart) { + write_log (_T("non-empty MBR partition table detected, doing RDB check anyway\n")); + } else if (safepart) { + goto amipartfound; /* ugly but bleh.. */ } - udi++; - (*index2)++; - memmove (udi, udi2, sizeof (*udi)); - udi->device_name[0] = 0; - udi->offset = pi->StartingOffset.QuadPart; - udi->size = pi->PartitionLength.QuadPart; - write_log (_T("used\n")); - _stprintf (udi->device_name, _T(":P#%d_%s"), pi->PartitionNumber, orgname); - _stprintf(udi->device_full_path, _T("%s:%s"), udi->device_name, udi->device_path); - checkhdname(udi); - udi->dangerous = -5; - udi->partitiondrive = true; - safepart = 1; - gotpart = 1; - } - if (!nonzeropart) { - write_log (_T("empty MBR partition table detected, checking for RDB\n")); - } else if (!gotpart) { - write_log (_T("non-empty MBR partition table detected, doing RDB check anyway\n")); - } else if (safepart) { - goto amipartfound; /* ugly but bleh.. */ + } else { + write_log (_T("no MBR partition table detected, checking for RDB\n")); } - } else { - write_log (_T("no MBR partition table detected, checking for RDB\n")); } - if (udi->offset == 0) { + if (udi->offset == 0 && udi->size) { udi->dangerous = safetycheck (hDevice, udi->device_path, 0, buffer, dg.BytesPerSector); if (udi->dangerous > 0) goto end; diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index 2dc73237..d935d5f0 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -888,13 +888,15 @@ bool uae_mman_info(addrbank *ab, struct uae_mman_data *md) return got; } -void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg) +void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg, struct uae_mman_data *md) { void *result = (void *)-1; bool got = false, readonly = false, maprom = false; int p96special = FALSE; + struct uae_mman_data md2; #ifdef NATMEM_OFFSET + unsigned int size = shmids[shmid].size; unsigned int readonlysize = size; @@ -908,26 +910,33 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg) } if ((uae_u8*)shmaddr < natmem_offset) { - struct uae_mman_data md; - if (uae_mman_info(ab, &md)) { - shmaddr = natmem_offset + md.start; - size = md.size; - readonlysize = md.readonlysize; - readonly = md.readonly; - maprom = md.maprom; + if (!md) { + if (!uae_mman_info(ab, &md2)) + return NULL; + md = &md2; + } + if (!shmaddr) { + shmaddr = natmem_offset + md->start; + size = md->size; + readonlysize = md->readonlysize; + readonly = md->readonly; + maprom = md->maprom; got = true; } } -#endif uintptr_t natmem_end = (uintptr_t) natmem_reserved + natmem_reserved_size; - if ((uintptr_t) shmaddr + size > natmem_end && (uintptr_t)shmaddr <= natmem_end) { + if (md && md->hasbarrier && (uintptr_t) shmaddr + size > natmem_end && (uintptr_t)shmaddr <= natmem_end) { /* We cannot add a barrier beyond the end of the reserved memory. */ //assert((uintptr_t) shmaddr + size - natmem_end == BARRIER); write_log(_T("NATMEM: Removing barrier (%d bytes) beyond reserved memory\n"), BARRIER); size -= BARRIER; + md->size -= BARRIER; + md->hasbarrier = false; } +#endif + if (shmids[shmid].key == shmid && shmids[shmid].size) { DWORD protect = readonly ? PAGE_READONLY : PAGE_READWRITE; shmids[shmid].mode = protect; diff --git a/od-win32/prowizard/prowizard.vcxproj b/od-win32/prowizard/prowizard.vcxproj index 8de17760..f55a8ff7 100644 --- a/od-win32/prowizard/prowizard.vcxproj +++ b/od-win32/prowizard/prowizard.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -49,24 +49,24 @@ StaticLibrary Unicode - v140 + v141 StaticLibrary Unicode true - v140 + v141 StaticLibrary Unicode true - v140 + v141 StaticLibrary Unicode - v140 + v141 diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 93b7d521..c18b4725 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -555,6 +555,7 @@ #define IDC_22KHZ 1233 #define IDC_SPEED_x86 1233 #define IDC_44KHZ 1234 +#define IDC_CPUDATACACHE 1234 #define IDC_48KHZ 1235 #define IDC_FPU4 1235 #define IDC_SOUNDSIZE 1236 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 0c6e9983..4d8b2c2b 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -252,25 +252,25 @@ IDD_CPU DIALOGEX 0, 0, 396, 317 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "CPU",IDC_STATIC,1,1,129,152,BS_LEFT + GROUPBOX "CPU",IDC_STATIC,1,1,129,163,BS_LEFT CONTROL "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,19,63,10 CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,32,63,10 CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,45,63,10 CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,58,63,10 CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,71,63,10 CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,84,63,10 - CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,99,119,12 - CONTROL "More compatible [] 68000: emulate prefetch. 68020+: emulate prefetch partially. More compatible but slower.",IDC_COMPATIBLE, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,112,118,11 + CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,98,119,12 + CONTROL "More compatible [] 68000: emulate prefetch. 68020+: emulate prefetch and instruction cache. More compatible but slower.",IDC_COMPATIBLE, + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,111,118,12 CONTROL "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,124,120,11 - CONTROL "None",IDC_MMUENABLEOFF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,166,87,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,136,120,12 + CONTROL "None",IDC_MMUENABLEOFF,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,181,87,10 CONTROL "EC [] 68EC030, 68EC040 and 68EC060 Transparent Translation Register emulation. Not compatible with JIT.",IDC_MMUENABLEEC, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,179,120,11 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,73,195,48,10 CONTROL "MMU [] 68030, 68040 and 68060 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,193,120,11 + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,195,49,10 CONTROL "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,136,118,10 + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,149,118,12 GROUPBOX "FPU",IDC_STATIC,1,212,129,103,BS_LEFT CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,223,87,10 CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,236,87,10 @@ -313,7 +313,9 @@ BEGIN CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,221,299,72,10 CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,299,299,68,11 CONTROL "Softfloat FPU emulation",IDC_FPU_SOFTFLOAT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,302,115,10 - GROUPBOX "MMU",IDC_STATIC,2,154,129,56,BS_LEFT + GROUPBOX "MMU",IDC_STATIC,2,168,129,42,BS_LEFT + CONTROL "Data cache emulation [] 68030, 040 and 060 optional data cache emulation. Requires More compatible option.",IDC_CPUDATACACHE, + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,123,119,12 END IDD_FLOPPY DIALOGEX 0, 0, 396, 261 @@ -1340,8 +1342,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,5,1,0 - PRODUCTVERSION 3,5,1,0 + FILEVERSION 3,6,0,0 + PRODUCTVERSION 3,6,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1357,12 +1359,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "WinUAE" - VALUE "FileVersion", "3.5.1.0" + VALUE "FileVersion", "3.6.0.0" VALUE "InternalName", "WinUAE" VALUE "LegalCopyright", "© 1996-2017 under the GNU Public License (GPL)" VALUE "OriginalFilename", "WinUAE.exe" VALUE "ProductName", "WinUAE" - VALUE "ProductVersion", "3.5.1.0" + VALUE "ProductVersion", "3.6.0.0" END END BLOCK "VarFileInfo" @@ -1980,7 +1982,7 @@ BEGIN IDS_NUMSG_KICKREP "You need to have a floppy disk (image file) in DF0: to use the system ROM replacement." IDS_NUMSG_KICKREPNO "The floppy disk (image file) in DF0: is not compatible with the system ROM replacement functionality." IDS_NUMSG_NOROM "Could not load system ROM, trying system ROM replacement." - IDS_HDCLONE_OK "Hard drive image file created succesfully." + IDS_HDCLONE_OK "Hard drive image file created successfully." IDS_HDCLONE_FAIL "Hard drive image file creation failed.\nError %d:%d (%s)." IDS_NUMSG_KS68030 "The selected system ROM requires a 68030 CPU." IDS_NUMSG_EXPROMNEED "One of the following expansion boot ROMs is required:\n\n%s\n\nCheck the System ROM path in the Paths panel and click Rescan ROMs." diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index dfa74872..4d6268ab 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -1371,7 +1371,7 @@ static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM return MAKELONG(7, 1); } case RP_IPC_TO_GUEST_SHOWOPTIONS: - inputdevice_add_inputcode (AKS_ENTERGUI, 1); + inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); return 1; case RP_IPC_TO_GUEST_DEVICEACTIVITY: return deviceactivity(wParam, lParam); @@ -1551,7 +1551,7 @@ static void sendfeatures (void) RPSendMessagex (RP_IPC_TO_HOST_FEATURES, feat, 0, NULL, 0, &guestinfo, NULL); } -static int gethdnum (int n) +static bool ishd(int n) { struct uaedev_config_data *uci = &currprefs.mountconfig[n]; int num = -1; @@ -1562,7 +1562,7 @@ static int gethdnum (int n) } else if (uci->ci.controller_type >= HD_CONTROLLER_TYPE_SCSI_FIRST && uci->ci.controller_type <= HD_CONTROLLER_TYPE_SCSI_LAST) { num = uci->ci.controller_unit; } - return num; + return num >= 0; } void rp_fixup_options (struct uae_prefs *p) @@ -1632,17 +1632,15 @@ void rp_fixup_options (struct uae_prefs *p) hd_mask = 0; cd_mask = 0; for (i = 0; i < currprefs.mountitems; i++) { - int num = gethdnum (i); - if (num >= 0) - hd_mask |= 1 << num; + if (ishd(i)) + hd_mask |= 1 << i; } RPSendMessagex (RP_IPC_TO_HOST_DEVICES, RP_DEVICECATEGORY_HD, hd_mask, NULL, 0, &guestinfo, NULL); if (hd_mask) { for (i = 0; i < currprefs.mountitems; i++) { struct uaedev_config_data *uci = &currprefs.mountconfig[i]; - int num = gethdnum (i); - if (num >= 0 && ((1 << num) & hd_mask)) - rp_harddrive_image_change (num, uci->ci.readonly, uci->ci.rootdir); + if (ishd(i) && ((1 << i) & hd_mask)) + rp_harddrive_image_change (i, uci->ci.readonly, uci->ci.rootdir); } } diff --git a/od-win32/screenshot.cpp b/od-win32/screenshot.cpp index 1f8acf2e..a4220819 100644 --- a/od-win32/screenshot.cpp +++ b/od-win32/screenshot.cpp @@ -632,7 +632,7 @@ static int savebmp (FILE *fp, bool alpha) if (fwrite (&bfh, 1, sizeof (BITMAPFILEHEADER), fp) < sizeof (BITMAPFILEHEADER)) return 1; // failed to write bitmap file header if (fwrite (bi, 1, sizeof (BITMAPINFOHEADER), fp) < sizeof (BITMAPINFOHEADER)) - return 2; // failed to write bitmap infomation header + return 2; // failed to write bitmap information header if (bi->bmiHeader.biClrUsed) { if (fwrite (bi->bmiColors, 1, bi->bmiHeader.biClrUsed * sizeof(RGBQUAD), fp) < bi->bmiHeader.biClrUsed * sizeof(RGBQUAD)) return 3; // failed to write bitmap file header diff --git a/od-win32/unpackers/unpackers.vcxproj b/od-win32/unpackers/unpackers.vcxproj index 6be88f8a..9e403810 100644 --- a/od-win32/unpackers/unpackers.vcxproj +++ b/od-win32/unpackers/unpackers.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -37,13 +37,13 @@ StaticLibrary true Unicode - v140 + v141 StaticLibrary true Unicode - v140 + v141 StaticLibrary @@ -64,14 +64,14 @@ false true Unicode - v140 + v141 StaticLibrary false true Unicode - v140 + v141 diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 34d44bea..35288152 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -7056,7 +7056,7 @@ void fpux_restore (int *v) struct winuae //this struct is put in a6 if you call //execute native function { - HWND amigawnd; //adress of amiga Window Windows Handle + HWND amigawnd; //address of amiga Window Windows Handle unsigned int changenum; //number to detect screen close/open unsigned int z3offset; //the offset to add to acsess Z3 mem from Dll side }; diff --git a/od-win32/win32.h b/od-win32/win32.h index 147e2acd..551951e2 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,17 +15,17 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEPUBLICBETA 0 +#define WINUAEPUBLICBETA 1 #define LANG_DLL 1 #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("14") +#define WINUAEBETA _T("1") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2017, 6, 15) +#define WINUAEDATE MAKEBD(2017, 8, 13) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 8c80493b..fa45d966 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -6791,19 +6791,12 @@ static void enable_for_chipsetdlg (HWND hDlg) ew (hDlg, IDC_CYCLEEXACT, FALSE); #else ew (hDlg, IDC_CYCLEEXACTMEMORY, workprefs.cpu_model >= 68020); -#endif -#if 0 - ew (hDlg, IDC_BLITIMM, enable); - if (enable == FALSE) { - workprefs.immediate_blits = 0; - CheckDlgButton (hDlg, IDC_BLITIMM, FALSE); - } #endif if (workprefs.immediate_blits && workprefs.waiting_blits) { workprefs.waiting_blits = 0; CheckDlgButton (hDlg, IDC_BLITWAIT, FALSE); } - ew(hDlg, IDC_BLITWAIT, workprefs.immediate_blits ? FALSE : TRUE); + ew(hDlg, IDC_BLITIMM, !workprefs.cpu_cycle_exact); ew(hDlg, IDC_GENLOCKMODE, workprefs.genlock ? TRUE : FALSE); ew(hDlg, IDC_GENLOCKMIX, workprefs.genlock ? TRUE : FALSE); @@ -7858,11 +7851,15 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l workprefs.cpu_compatible = 1; if (workprefs.cpu_model <= 68030) workprefs.m68k_speed = 0; - workprefs.immediate_blits = 0; + if (workprefs.immediate_blits) { + workprefs.immediate_blits = false; + CheckDlgButton (hDlg, IDC_BLITIMM, FALSE); + } workprefs.gfx_framerate = 1; workprefs.cachesize = 0; } } + workprefs.collision_level = ischecked (hDlg, IDC_COLLISION0) ? 0 : ischecked (hDlg, IDC_COLLISION1) ? 1 : ischecked (hDlg, IDC_COLLISION2) ? 2 : 3; @@ -8015,6 +8012,18 @@ static INT_PTR CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR DiskSelection(hDlg, IDC_GENLOCKFILESELECT, workprefs.genlock_image == 3 ? 20 : 21, &workprefs, NULL, path); break; } + case IDC_BLITWAIT: + if (workprefs.immediate_blits) { + workprefs.immediate_blits = false; + CheckDlgButton (hDlg, IDC_BLITIMM, FALSE); + } + break; + case IDC_BLITIMM: + if (workprefs.waiting_blits) { + workprefs.waiting_blits = false; + CheckDlgButton (hDlg, IDC_BLITWAIT, FALSE); + } + break; } values_from_chipsetdlg(hDlg, msg, wParam, lParam); enable_for_chipsetdlg(hDlg); @@ -11446,6 +11455,7 @@ static void enable_for_cpudlg (HWND hDlg) ew (hDlg, IDC_FPU3, workprefs.cpu_model >= 68040); ew (hDlg, IDC_MMUENABLEEC, workprefs.cpu_model >= 68030 && workprefs.cachesize == 0); ew (hDlg, IDC_MMUENABLE, workprefs.cpu_model >= 68030 && workprefs.cachesize == 0); + ew (hDlg, IDC_CPUDATACACHE, workprefs.cpu_model >= 68030 && workprefs.cachesize == 0 && workprefs.cpu_compatible); ew (hDlg, IDC_CPU_PPC, workprefs.cpu_model >= 68040 && (workprefs.ppc_mode == 1 || (workprefs.ppc_mode == 0 && !is_ppc_cpu(&workprefs)))); SendDlgItemMessage(hDlg, IDC_SPEED, TBM_SETRANGE, TRUE, workprefs.m68k_speed < 0 ? MAKELONG(-9, 0) : MAKELONG(-9, 50)); @@ -11479,6 +11489,7 @@ static void values_to_cpudlg (HWND hDlg) SetDlgItemText (hDlg, IDC_CPUTEXT, buffer); CheckDlgButton (hDlg, IDC_COMPATIBLE, workprefs.cpu_compatible); CheckDlgButton (hDlg, IDC_COMPATIBLE24, workprefs.address_space_24); + CheckDlgButton (hDlg, IDC_CPUDATACACHE, workprefs.cpu_data_cache); CheckDlgButton (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_strict); CheckDlgButton (hDlg, IDC_FPU_UNIMPLEMENTED, !workprefs.fpu_no_unimplemented || workprefs.cachesize); CheckDlgButton (hDlg, IDC_FPU_SOFTFLOAT, workprefs.fpu_softfloat); @@ -11568,6 +11579,7 @@ static void values_from_cpudlg (HWND hDlg) workprefs.cpu_model = newcpu; workprefs.mmu_model = 0; workprefs.mmu_ec = false; + workprefs.cpu_data_cache = false; switch(newcpu) { case 68000: @@ -11587,6 +11599,8 @@ static void values_from_cpudlg (HWND hDlg) workprefs.fpu_model = newfpu == 0 ? 0 : (newfpu == 2 ? 68882 : 68881); workprefs.mmu_ec = ischecked(hDlg, IDC_MMUENABLEEC); workprefs.mmu_model = workprefs.mmu_ec || ischecked (hDlg, IDC_MMUENABLE) ? 68030 : 0; + if (workprefs.cpu_compatible) + workprefs.cpu_data_cache = ischecked (hDlg, IDC_CPUDATACACHE); break; case 68040: workprefs.fpu_model = newfpu ? 68040 : 0; @@ -11595,12 +11609,16 @@ static void values_from_cpudlg (HWND hDlg) workprefs.fpu_model = 68040; workprefs.mmu_ec = ischecked(hDlg, IDC_MMUENABLEEC); workprefs.mmu_model = workprefs.mmu_ec || ischecked (hDlg, IDC_MMUENABLE) ? 68040 : 0; + if (workprefs.cpu_compatible) + workprefs.cpu_data_cache = ischecked (hDlg, IDC_CPUDATACACHE); break; case 68060: workprefs.fpu_model = newfpu ? 68060 : 0; workprefs.address_space_24 = 0; workprefs.mmu_ec = ischecked(hDlg, IDC_MMUENABLEEC); workprefs.mmu_model = workprefs.mmu_ec || ischecked (hDlg, IDC_MMUENABLE) ? 68060 : 0; + if (workprefs.cpu_compatible) + workprefs.cpu_data_cache = ischecked (hDlg, IDC_CPUDATACACHE); break; } @@ -12271,7 +12289,7 @@ static INT_PTR CALLBACK SoundDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM SendDlgItemMessage (hDlg, IDC_SOUNDCARDLIST, CB_ADDSTRING, 0, (LPARAM)tmp); } if (numdevs == 0) - workprefs.produce_sound = 0; /* No sound card in system, enable_for_sounddlg will accomodate this */ + workprefs.produce_sound = 0; /* No sound card in system, enable_for_sounddlg will accommodate this */ pages[SOUND_ID] = hDlg; currentpage = SOUND_ID; @@ -12725,7 +12743,7 @@ static void inithdcontroller (HWND hDlg, int ctype, int ctype_unit, int devtype, SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER, CB_RESETCONTENT, 0, 0); - gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, HD_CONTROLLER_TYPE_UAE, _T("UAE")); + gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, HD_CONTROLLER_TYPE_UAE, _T("UAE (uaehf.device)")); gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, 0, _T("")); gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, HD_CONTROLLER_TYPE_IDE_AUTO, _T("IDE (Auto)")); diff --git a/od-win32/winuae_msvc15/winuae_msvc.vcxproj b/od-win32/winuae_msvc15/winuae_msvc.vcxproj index acb89868..4d97ba52 100644 --- a/od-win32/winuae_msvc15/winuae_msvc.vcxproj +++ b/od-win32/winuae_msvc15/winuae_msvc.vcxproj @@ -39,7 +39,7 @@ {4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA} winuae 8.1 - 8.1 + 10.0.15063.0 @@ -84,13 +84,13 @@ Application false Unicode - v140 + v141 Application false Unicode - v140 + v141 @@ -822,6 +822,8 @@ + + @@ -852,6 +854,7 @@ + diff --git a/od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters b/od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters index 14373be5..54847e26 100644 --- a/od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters +++ b/od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters @@ -847,6 +847,15 @@ common + + common + + + common + + + common + diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index c6852b30..4bf71754 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -5,6 +5,119 @@ JIT Direct current rules are less complex now. It automatically switches off onl Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI) +Beta 1: + +Big CPU emulation update. More compatible (instruction cache) and data cache is now supported with MMU emulation. +Probably not that useful for normal users but developers may find it interesting. + +Multi window (One window / Amiga monitor/output) support may be coming later. + +Notes: +- 68020 more compatible/CE mode statefiles may not load ("CPU tracer" error dialog) +- Anything CPU related may have broken.. +- And more! + +- 68030 + memory cycle exact (without full CE): BSR didn't use data cache memory access routines. +- Softfloat fix: 68040+ will convert unnormal zeros (zero mantissa, non-zero exponent) to normals without datatype exceptions. +- 68040/060 MMU updates. MOVES was wrong in some situations, ATC status bit handling updated. (Originally Previous fix, first Next version that supported 68040 seems to do some strange things) +- 68030/040/060 MMU emulation internal fast path translation cache added, performance improved noticeably. +- Fully validate 68030 MMU instruction opcodes and generate F-line exception if unused but invalid bits are set. (Real 68030 confirmed) +- 68030 MMU PLOAD was unsupported. +- "EC" MMU option added, emulates access control registers only (renamed transparent translation registers in EC models). +- 68030 MMU + prefetch + instruction + data cache emulation mode. (Enabled when "More compatible" is ticked) CPU caches are now correctly located between CPU and MMU and they cache logical addresses. +- 68030 MMU + prefetch + instruction + data cache + "cycle-exact" emulation mode. (Same timing as 68030 non-MMU "CE" mode) +- 68030 data cache emulation is now optional. +- 68030 data cache emulation is internally disabled if UAE Boot ROM is active in non-indirect mode. It is not compatible with most UAE expansions because they access memory directly, bypassing the data cache and previous data cache hack made the cache mostly useless. +- 68040/060 MMU + full instruction cache emulation (when more compatible is set). +- 68040/060 data cache emulation (including write-through and copyback, MMU support), optionally available in more compatible mode. +- 68040/060 without FPU: many FPU instructions generated incorrect F-line stack frame contents, usually wrong PC or EA field. +- 68881/68882 FMOVECR undocumented ROM offsets are now 100% accurately emulated, offsets 0x40-0x7f return f-line exception. +- Currently emulated hardware cache inhibit signal is always active when CPU accesses anything non-RAM. + +- It was not possible to change existing path with Select Directory/Select Archive or Plain File buttons. +- Do not reset manual geometry HDF setting when changing hardfiles. +- Automatically enable RDB mode if empty HDF is added and controller type is IDE or SCSI. +- Replaced ReadProfileString/WriteProfileString based ini support with custom routines that don't have 65536 byte section size limits. (Long ROM paths can easily become longer than 32k wide characters) +- SCSI expansion SCSI ID: don't show it when it is not selectable, also make sure it is 7 by default, previously in some situations it become 0. +- Internal AKS input events are now available in custom event strings (for example statefile save and restore) +- uaehf.device hardfiles/harddrives unit number is now user configurable. +- Joyport setting was not fully reset before loading Host-only config. +- Added UAE HD controller A2090 partition table support. RDB didn't exist when A2090 was released. +- Added extra validation after Windows illegal name check, if name is illegal, check what CreateFile() returns, name is invalid if it returns ERROR_INVALID_NAME. If open succeeds, return also illegal name status if GetFileType() does not return FILE_TYPE_DISK. +- Avioutput on the fly recording start used GUI sound frequency setting if recording was started with a shortcut. If GUI was never opened, sound recording rate become 44100Hz, creating video that had bad AV sync if real in use frequency was not 44100Hz. +- Don't support 360k floppy images in Amiga drive unless it is configured as 5.25" drive. (Fixes 360k DS vs 720k SS misdetection) +- Disable low latency vsync if calibration returns impossibly large values (>1000Hz). Seems to happen with some recent NVidia drivers. +- Do not create hidden inactive uaegfx modes if none of color modes fit in VRAM. +- Fixed uaegfx VRAM size check, some modes that almost filled the whole VRAM didn't appear in resolution list. +- Z3 RAM in manual mode was completely broken. +- Added blitter_speed_throttle config file entry, adjusts blitter speed if in non-ce/non immediate blitter mode. (0 = no change, 0.1 = 10% speedup and so on) +- If JIT FPU was ticked but JIT was off: FPU emulation used simple JIT FPU compatible FPU status register calculations, even if softfloat mode was selected. +- New undocumented feature emulated: Bitplane DMA can be restarted during last AGA FMODE>0 idle cycles after DDFSTOP. +- Bitplane overrun condition triggered incorrectly in rare situation where bitplane DMA is enabled after DDFSTOP on OCS. (Scoopex crash landing cracktro, possibly others) +- "Include CD and FMV Audio" and/or sound mode change when CD or FMV audio is playing is now supported. + +- DKB RapidFire flash rom chip emulated. Contains boot rom but is also used to store "advanced scsi config" settings. (ROM scanner still detects flash rom update file, scsi config is located at the end of flash chip, far away from boot rom data) +- DKB 1230/1240/Cobra flash chip emulated, advanced scsi config utility config save supported. SCSI expansion is now optional. +- A2090 boot ROM didn't work without more compatible enabled. +- Hardfile SCSI emulator MODE SELECT (6) and (10) added, mostly does nothing, added because A2090 SCSI driver TD_FORMAT requires it. +- Host side read-only hdf was supposed to also force read-only HDF in Amiga-side. +- Automatically support software dumped A590/A2091 ROMs that don't have 0x2000 wraparound/offset. +- Comspec SA1000 KS rom image loader compatibility fix. +- Blizzard 1230 MK I appears to be functionally identical to MK II. Same boot ROM, same SCSI expansion. + +- Added debugger 'I' command, send custom event string, same as Input panel uses (inject keycodes, change config like uae-configuration does..). +- Added debugger 'L' command, load data from file (same parameters as 'S') +- Added debugger fill memory command 'Wf , repeats byte/string writing until end address. +- Added debugger assembler ('a') command! (Most 68020+ only special encoded opcodes are not supported) + +- Ashcom AddHard emulation. +- A2090 Combitec ROM expansion support. +- FastATA 4000 MK I/II. +- Spirit Technology InMate SCSI controller. +- Emplant SCSI controller (and only SCSI) + +Hardfile/drive geometry file support extended. (WIP) + +- Geometry data can now include full ATA identity (512 bytes) and SCSI Inquiry/Mode pages. +- Data can be added to mounted IDE or SCSI emulated HDF or real harddrive to make drive appear exactly as drive which geometry data was read, exact same name appears in hdtoolbox, exact same logical CHS geometry and so on. +- WARNING: Identity data has priority, even if drive is smaller than size information stored in identity data. +- Added drive identity option to add harddrive panel. It tries to query ATA Identity data and all SCSI Inquiry and Mode pages. Note that USB uses SCSI protocol and if drive is ATA, ATA identity can be only read if USB adapter supports SCSI ATA Passthrough. Unfortunately most USB CF adapters don't support it. (USB SATA harddrives seem to commonly support it) +- Includes hack that enables reading CF ATA identity with Realtek chip based USB card readers. Uses vendor specific command to read memory region that contains ATA identity, requires card reinsert. Confirmed working with Kingston FCR-HS3 and Transcend TS-RDF9K. Probably works with most Realtek chip based card readers. + +New ROMs: +- A590 v5.92 ROM. +- DataFlyer Plus v2.0 ROM. (This was stored in 16k ROM but because others were 32k and duplicated, I manually duplicated this one too) +- A2620 -02 and -03 ROM. (-05 remaining) +- Non-SCSI DKB 1230/1240/Cobra flash ROM update image. +- Replaced old DKB Ferret SCSI expansion compatible DKB accelerator ROM image with flash ROM update image. (Official flasher will create identical ROM image, also some CPU speed specific firmware data gets written at the end of flash image) +- Ashcom AddHard boot ROM. +- A2090 Combitec A2090a update ROM and 2x A2090 combitec expansion board ROMs. +- A2090 MacroSystem boot ROM. +- Vortex System 2000 v1.02 ROM. +- Spirit Technology InMate v1.0 ROM. + +Ashcom Addhard: +- 5380 based, nothing special. +- Clone of Trumpcard, even ROM driver is a copy, only names have been changed! Nybble-wide loader code at the beginning of ROM has original IVS_SCSI.device string visible after converting it to bytes! Someone (who didn't know what or why there is nybble-wide data?) simply used hex-editor to change all visible strings? +- ADD_SCSI.device "ADDSCSI 2.0 (26 MAR 1992)". But driver version number is actually 4.9. (Original Trumpcard driver version?) + +A2090 Combitec: +- A2090 ROM board that adds KS 1.2+ compatible autoboot support to original non-a variant of A2090. (Also works with A2090a if original ROMS are removed first) +- Shows boot screen. +- MacroSystem ROM uses same adapter. Different driver and boot screen. + +FastATA 4000 MK I/II: +- Z3 ATA controller with 2 ports (Max 4 devices). +- Only v3 Boot ROM tested. (FastATA 3.0 (10 NOV 03)). Proper ROM dumps needed. + +Sprit Technology InMate: +- Emulated as SCSI autoconfig board, not an accelerator board because it is 68000 board and does not require special address spaces. +- AIC-6250 SCSI chip. +- Fake DMA, word wide data port. Not fully hardware implemented, needs DMA status polling after each word read or write. +- It has worst RDB filesystem loader ever (at least in 1.0 ROM). Must be single hunk, no relocs, must have total length patched in first long word (I assume install disk patches it). Does not do any checks. +- Jumpers emulated. (ABOOT jumper mirrors Autoboot disabled -checkbox) + + 3.5.0 Beta 14: diff --git a/od-win32/wix/Product.wxs b/od-win32/wix/Product.wxs index ae8ba8fd..b2e8e644 100644 --- a/od-win32/wix/Product.wxs +++ b/od-win32/wix/Product.wxs @@ -2,8 +2,8 @@ - - + + diff --git a/savestate.cpp b/savestate.cpp index 6a2be004..5c072653 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -133,7 +133,7 @@ static void state_incompatible_warn (void) } /* functions for reading/writing bytes, shorts and longs in big-endian -* format independent of host machine's endianess */ +* format independent of host machine's endianness */ static uae_u8 *storepos; void save_store_pos_func (uae_u8 **dstp) diff --git a/scsidev.cpp b/scsidev.cpp index 95c45176..e926ff69 100644 --- a/scsidev.cpp +++ b/scsidev.cpp @@ -36,7 +36,7 @@ typedef int BOOL; #include "scg/scsitransp.h" #include "scg/scsireg.h" -/* our configure does not have a seperate UAE_SCSIDEV_THREADS */ +/* our configure does not have a separate UAE_SCSIDEV_THREADS */ #if defined(UAE_FILESYS_THREADS) && !defined(SCSI_IS_NOT_THREAD_SAFE) #define UAE_SCSIDEV_THREADS #endif diff --git a/serial.cpp b/serial.cpp index 8595e504..4771ab9d 100644 --- a/serial.cpp +++ b/serial.cpp @@ -163,7 +163,7 @@ void SERPER (uae_u16 w) * of an asynchronous read before switching blind * mode off again. It never gets there on UAE :-< ) * - * - RTS/CTS handshake, this is not really neccessary, + * - RTS/CTS handshake, this is not really necessary, * because you can use RTS/CTS "outside" without * passing it through to the emulated Amiga * -- 2.47.3