]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2610b2
authorToni Wilen <twilen@winuae.net>
Wed, 12 Jun 2013 14:39:37 +0000 (17:39 +0300)
committerToni Wilen <twilen@winuae.net>
Wed, 12 Jun 2013 14:39:37 +0000 (17:39 +0300)
15 files changed:
cfgfile.cpp
expansion.cpp
filesys.cpp
filesys_bootrom.cpp
gencpu.cpp
include/options.h
inputdevice.cpp
newcpu.cpp
od-win32/dinput.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.h
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
table68k

index ae429583b7c4249aa7067ab194b1fd0caa71f744..aa44cf2ad58d346d23081c727034d483ad894bd5 100644 (file)
@@ -1154,6 +1154,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        cfgfile_write_bool (f, _T("blitter_cycle_exact"), p->blitter_cycle_exact);
        cfgfile_write_bool (f, _T("cycle_exact"), p->cpu_cycle_exact && p->blitter_cycle_exact ? 1 : 0);
        cfgfile_dwrite_bool (f, _T("fpu_no_unimplemented"), p->fpu_no_unimplemented);
+       cfgfile_dwrite_bool (f, _T("cpu_no_unimplemented"), p->int_no_unimplemented);
 
        cfgfile_write_bool (f, _T("rtg_nocustom"), p->picasso96_nocustom);
        cfgfile_write (f, _T("rtg_modes"), _T("0x%x"), p->picasso96_modeflags);
@@ -2916,6 +2917,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
 
        if (cfgfile_yesno (option, value, _T("immediate_blits"), &p->immediate_blits)
                || cfgfile_yesno (option, value, _T("fpu_no_unimplemented"), &p->fpu_no_unimplemented)
+               || cfgfile_yesno (option, value, _T("cpu_no_unimplemented"), &p->int_no_unimplemented)
                || cfgfile_yesno (option, value, _T("cd32cd"), &p->cs_cd32cd)
                || cfgfile_yesno (option, value, _T("cd32c2p"), &p->cs_cd32c2p)
                || cfgfile_yesno (option, value, _T("cd32nvram"), &p->cs_cd32nvram)
@@ -4714,6 +4716,7 @@ void default_prefs (struct uae_prefs *p, int type)
        p->cpu060_revision = 6;
        p->fpu_revision = -1;
        p->fpu_no_unimplemented = false;
+       p->int_no_unimplemented = false;
        p->m68k_speed = 0;
        p->cpu_compatible = 1;
        p->address_space_24 = 1;
index df2b5472c689ed711ca0078837f16937cdbdcff2..222719dce36ddf0eda0ac43df824692cf2fcb298 100644 (file)
@@ -135,6 +135,7 @@ uaecptr ROM_hardfile_resname, ROM_hardfile_resid;
 uaecptr ROM_hardfile_init;
 bool uae_boot_rom;
 int uae_boot_rom_size; /* size = code size only */
+static bool chipdone;
 
 /* ********************************************************** */
 
@@ -173,6 +174,61 @@ static uae_u8 expamem[65536];
 static uae_u8 expamem_lo;
 static uae_u16 expamem_hi;
 
+/* Ugly hack for >2M chip RAM in single pool
+ * We can't add it any later or early boot menu
+ * stops working because it sets kicktag at the end
+ * of chip ram...
+ */
+static void addextrachip (uae_u32 sysbase)
+{
+       if (currprefs.chipmem_size <= 0x00200000)
+               return;
+       if (sysbase & 0x80000001)
+               return;
+       if (!valid_address (sysbase, 1000))
+               return;
+       uae_u32 ml = get_long (sysbase + 322);
+       if (!valid_address (ml, 32))
+               return;
+       uae_u32 next;
+       while ((next = get_long (ml))) {
+               if (!valid_address (ml, 32))
+                       return;
+               uae_u32 upper = get_long (ml + 24);
+               uae_u32 lower = get_long (ml + 20);
+               if (lower & ~0xffff) {
+                       ml = next;
+                       continue;
+               }
+               uae_u16 attr = get_word (ml + 14);
+               if ((attr & 0x8002) != 2) {
+                       ml = next;
+                       continue;
+               }
+               if (upper >= currprefs.chipmem_size)
+                       return;
+               uae_u32 added = currprefs.chipmem_size - upper;
+               uae_u32 first = get_long (ml + 16);
+               put_long (ml + 24, currprefs.chipmem_size); // mh_Upper
+               put_long (ml + 28, get_long (ml + 28) + added); // mh_Free
+               uae_u32 next;
+               while (first) {
+                       next = first;
+                       first = get_long (next);
+               }
+               uae_u32 bytes = get_long (next + 4);
+               if (next + bytes == 0x00200000) {
+                       put_long (next + 4, currprefs.chipmem_size - next);
+               } else {
+                       put_long (0x00200000 + 0, 0);
+                       put_long (0x00200000 + 4, added);
+                       put_long (next, 0x00200000);
+               }
+               return;
+       }
+}
+
+
 static uae_u32 REGPARAM3 expamem_lget (uaecptr) REGPARAM;
 static uae_u32 REGPARAM3 expamem_wget (uaecptr) REGPARAM;
 static uae_u32 REGPARAM3 expamem_bget (uaecptr) REGPARAM;
@@ -248,6 +304,10 @@ static uae_u32 REGPARAM2 expamem_bget (uaecptr addr)
 #ifdef JIT
        special_mem |= S_READ;
 #endif
+       if (!chipdone) {
+               chipdone = true;
+               addextrachip (get_long (4));
+       }
        addr &= 0xFFFF;
        b = expamem[addr];
 #ifdef EXP_DEBUG
@@ -1446,6 +1506,7 @@ void expamem_reset (void)
 
        ecard = 0;
        cardno = 0;
+       chipdone = false;
 
        if (currprefs.uae_hide)
                uae_id = commodore;
index c68697b6992c1e8db7d06b8aa1fe79addcbe4842..835e8ebde0ccd9c5a6e387e4a00ce0c06a1de98b 100644 (file)
@@ -3209,7 +3209,7 @@ static void
                mode = SHARED_LOCK;
        }
 
-       TRACE((_T("ACTION_LOCK(0x%lx, \"%s\", %d)\n"), lock, bstr (unit, name), mode));
+       TRACE((_T("ACTION_LOCK(0x%08x, \"%s\", %d)\n"), lock, bstr (unit, name), mode));
        DUMPLOCK(unit, lock);
 
        a = find_aino (unit, lock, bstr (unit, name), &err);
@@ -4392,7 +4392,7 @@ static void do_find (Unit *unit, dpacket packet, int mode, int create, int fallb
        int aino_created = 0;
        int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS);
 
-       TRACE((_T("ACTION_FIND_*(0x%lx,0x%lx,\"%s\",%d,%d)\n"), fh, lock, bstr (unit, name), mode, create));
+       TRACE((_T("ACTION_FIND_*(0x%08x,0x%08x,\"%s\",%d,%d)\n"), fh, lock, bstr (unit, name), mode, create));
        TRACE((_T("fh=%x lock=%x name=%x\n"), fh, lock, name));
        DUMPLOCK(unit, lock);
 
@@ -6249,6 +6249,7 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context)
        put_word (resaddr + 16, RTS);
 
        m68k_areg (regs, 0) = residents;
+       
        return 1;
 }
 
index ea72d730413555bcc2493b89f319da7e2e8faa3d..965386944a806fdd2332be93bc46d1e4a5720459 100644 (file)
@@ -1,13 +1,13 @@
  db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
- db(0x60); db(0x02); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x4c);
- db(0x00); db(0x00); db(0x08); db(0xe8); db(0x00); db(0x00); db(0x00); db(0xe0);
- db(0x00); db(0x00); db(0x02); db(0xa8); db(0x00); db(0x00); db(0x00); db(0x24);
- db(0x00); db(0x00); db(0x03); db(0xb6); db(0x00); db(0x00); db(0x00); db(0x00);
- db(0x00); db(0x00); db(0x13); db(0xda); db(0x43); db(0xfa); db(0x18); db(0xe5);
+ db(0x60); db(0x02); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0xdc);
+ db(0x00); db(0x00); db(0x08); db(0x78); db(0x00); db(0x00); db(0x00); db(0xe0);
+ db(0x00); db(0x00); db(0x02); db(0x38); db(0x00); db(0x00); db(0x00); db(0x24);
+ db(0x00); db(0x00); db(0x03); db(0x46); db(0x00); db(0x00); db(0x00); db(0x00);
+ db(0x00); db(0x00); db(0x13); db(0x6a); db(0x43); db(0xfa); db(0x18); db(0x75);
  db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28);
  db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38);
- db(0x72); db(0x11); db(0x61); db(0x00); db(0x17); db(0xce); db(0x4e); db(0x90);
+ db(0x72); db(0x11); db(0x61); db(0x00); db(0x17); db(0x5e); db(0x4e); db(0x90);
  db(0x4a); db(0x80); db(0x67); db(0x4c); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40);
  db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae);
  db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90);
  db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e);
  db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8);
- db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0x1c);
- db(0x61); db(0x00); db(0x16); db(0xe4); db(0x4c); db(0xdf); db(0x7e); db(0xff);
+ db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0xac);
+ db(0x61); db(0x00); db(0x16); db(0x74); db(0x4c); db(0xdf); db(0x7e); db(0xff);
  db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02);
  db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00);
  db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x17); db(0x24);
- db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x46); db(0x70); db(0x24);
+ db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x16); db(0xb4);
+ db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x17); db(0xd6); db(0x70); db(0x24);
  db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
- db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0x36); db(0x70); db(0x00);
+ db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x17); db(0xc6); db(0x70); db(0x00);
  db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40);
  db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x00); db(0x00); db(0x5c);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x34); db(0x22); db(0x3c);
  db(0xbc); db(0x6d); db(0x01); db(0x0e); db(0x64); db(0x2c); db(0x2f); db(0x06);
  db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7);
  db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00);
- db(0x07); db(0xa0); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff);
+ db(0x07); db(0x30); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff);
  db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46);
  db(0x48); db(0x46); db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46);
  db(0x60); db(0xce); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x34); db(0x4e); db(0xae);
  db(0xff); db(0x2e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c);
  db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); db(0xff); db(0x80);
- db(0x61); db(0x00); db(0x16); db(0x90); db(0x4e); db(0x90); db(0x4e); db(0xae);
- db(0xff); db(0x88); db(0x41); db(0xee); db(0x01); db(0x42); db(0x20); db(0x50);
- db(0x4a); db(0x90); db(0x67); db(0x54); db(0x22); db(0x28); db(0x00); db(0x14);
- db(0x42); db(0x41); db(0x4a); db(0x81); db(0x66); db(0xf0); db(0x32); db(0x28);
- db(0x00); db(0x0e); db(0x02); db(0x41); db(0x00); db(0x02); db(0x67); db(0xe6);
- db(0x90); db(0xa8); db(0x00); db(0x18); db(0x6b); db(0x3a); db(0x67); db(0x38);
- db(0x42); db(0x78); db(0x01); db(0x40); db(0x22); db(0x28); db(0x00); db(0x18);
- db(0xd1); db(0xa8); db(0x00); db(0x18); db(0xd1); db(0xa8); db(0x00); db(0x1c);
- db(0xd1); db(0xae); db(0x00); db(0x3e); db(0x20); db(0x68); db(0x00); db(0x10);
- db(0x4a); db(0x90); db(0x67); db(0x04); db(0x20); db(0x50); db(0x60); db(0xf8);
- db(0x24); db(0x08); db(0xd4); db(0xa8); db(0x00); db(0x04); db(0xb2); db(0x82);
- db(0x67); db(0x0a); db(0x20); db(0x81); db(0x22); db(0x41); db(0x42); db(0x99);
- db(0x22); db(0x80); db(0x60); db(0x04); db(0xd1); db(0xa8); db(0x00); db(0x04);
- db(0x4e); db(0xae); db(0xff); db(0x82); db(0x30); db(0x3c); db(0xff); db(0x80);
  db(0x61); db(0x00); db(0x16); db(0x20); db(0x4e); db(0x90); db(0x20); db(0x49);
  db(0x20); db(0x01); db(0x67); db(0x0c); db(0x22); db(0x04); db(0x74); db(0xfb);
  db(0x43); db(0xfa); db(0x17); db(0x5e); db(0x4e); db(0xae); db(0xfd); db(0x96);
  db(0x23); db(0x4a); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae);
  db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x07); db(0x03); db(0x4e); db(0x75);
  db(0x52); db(0x91); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
- db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0x7c); db(0x70); db(0x1a);
+ db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xec); db(0x70); db(0x1a);
  db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
  db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x15); db(0x02);
  db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xfe); db(0xd2);
  db(0x61); db(0x00); db(0x0e); db(0x58); db(0x4e); db(0x90); db(0x20); db(0x03);
  db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a);
  db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14);
- db(0x41); db(0xfa); db(0xf6); db(0x2a); db(0x20); db(0x08); db(0xe4); db(0x88);
+ db(0x41); db(0xfa); db(0xf6); db(0x9a); db(0x20); db(0x08); db(0xe4); db(0x88);
  db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40);
  db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x40);
  db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78);
  db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00);
  db(0x00); db(0x0a); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03);
- db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xe7); db(0xe0); db(0x02); db(0x80);
+ db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xe8); db(0x50); db(0x02); db(0x80);
  db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75);
  db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65);
  db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d);
index c291ea9203ad47047627d78a69d4cf75873bc120..63e462c94afb079c204a299645ee35f3e633ffcb 100644 (file)
@@ -3529,11 +3529,7 @@ static void gen_opcode (unsigned long int opcode)
                        genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_LRMW);
                        genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_LRMW);
                        if (cpu_level == 5 && curi->size > 0) {
-                               if (!using_mmu) {
-                                       printf ("\tif ((dsta & %d) && currprefs.cpu_compatible && get_cpu_model () == 68060) {\n", curi->size == 1 ? 1 : 3);
-                               } else {
-                                       printf ("\tif ((dsta & %d) && currprefs.cpu_compatible) {\n", curi->size == 1 ? 1 : 3);
-                               }
+                               printf ("\tif ((dsta & %d) && currprefs.int_no_unimplemented && get_cpu_model () == 68060) {\n", curi->size == 1 ? 1 : 3);
                                if (curi->dmode == Aipi || curi->dmode == Apdi)
                                        printf ("\t\tm68k_areg (regs, dstreg) %c= %d;\n", curi->dmode == Aipi ? '-' : '+', 1 << curi->size);
                                sync_m68k_pc_noreset ();
index b5218e7a84252b0e58aa9b7a19a07b9685857e60..0638818ccf77910e4d0d05fade5954d0654ab004 100644 (file)
@@ -447,6 +447,7 @@ struct uae_prefs {
        int fpu_model;
        int fpu_revision;
        bool cpu_compatible;
+       bool int_no_unimplemented;
        bool fpu_no_unimplemented;
        bool address_space_24;
        bool picasso96_nocustom;
index 6a096855084056ac9c34a5253be4c78d6095b500..1c156dba682c24d9f24a332d8080823ee0f652f8 100644 (file)
@@ -110,7 +110,7 @@ static const int slotorder2[] = { 8, 1, 2, 3, 4, 5, 6, 7 };
 
 struct uae_input_device2 {
        uae_u32 buttonmask;
-       int states[MAX_INPUT_DEVICE_EVENTS / 2];
+       int states[MAX_INPUT_DEVICE_EVENTS / 2][MAX_INPUT_SUB_EVENT + 1];
 };
 
 static struct uae_input_device2 joysticks2[MAX_INPUT_DEVICES];
@@ -3789,7 +3789,8 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev
                } else {
                        if (!checkqualifiers (evt, flags, qualmask, NULL)) {
                                if (!state && !(flags & ID_FLAG_CANRELEASE)) {
-                                       continue;
+                                       if (!invert)
+                                               continue;
                                } else if (state) {
                                        continue;
                                }
@@ -5458,9 +5459,6 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int keyst
        if (!keyboards || scancode < 0)
                return handled;
 
-//     if (!state)
-//             process_custom_event (NULL, 0, 0, 0, 0, 0);
-
        j = 0;
        while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) {
                if (na->extra[j] == scancode) {
@@ -5543,16 +5541,19 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int keyst
                                } else {
                                        rqualifiers (flags, state ? true : false);
                                        if (!checkqualifiers (evt, flags, qualmask, na->eventid[j])) {
-                                               if (!state && !(flags & ID_FLAG_CANRELEASE))
-                                                       continue;
-                                               else if (state)
+                                               if (!state && !(flags & ID_FLAG_CANRELEASE)) {
+                                                       if (!invert)
+                                                               continue;
+                                               } else if (state) {
                                                        continue;
+                                               }
                                        }
 
                                        if (state) {
-                                               *flagsp |= ID_FLAG_CANRELEASE;
+                                               if (!invert)
+                                                       *flagsp |= ID_FLAG_CANRELEASE;
                                        } else {
-                                               if (!(flags & ID_FLAG_CANRELEASE))
+                                               if (!(flags & ID_FLAG_CANRELEASE) && !invert)
                                                        continue;
                                                *flagsp &= ~ID_FLAG_CANRELEASE;
                                        }
@@ -6606,19 +6607,22 @@ void setjoystickstate (int joy, int axis, int state, int max)
                return;
        }
        v1 = state;
-       v2 = id2->states[axis];
+       v2 = id2->states[axis][MAX_INPUT_SUB_EVENT];
+
+       write_log (_T("new=%d old=%d state=%d max=%d\n"), v1, v2, state, max);
+
        if (v1 < deadzone && v1 > -deadzone)
                v1 = 0;
        if (v2 < deadzone && v2 > -deadzone)
                v2 = 0;
-       if (v1 == v2)
-               return;
-       if (input_play && state)
-               inprec_realtime ();
+       if (input_play && state) {
+               if (v1 != v2)
+                       inprec_realtime ();
+       }
        if (input_play)
                return;
        if (!joysticks[joy].enabled) {
-               if (v1)
+               if (v1 && v1 != v2)
                        switchdevice (&joysticks[joy], axis * 2 + (v1 < 0 ? 0 : 1), false);
                return;
        }
@@ -6626,9 +6630,13 @@ void setjoystickstate (int joy, int axis, int state, int max)
                uae_u64 flags = id->flags[ID_AXIS_OFFSET + axis][i];
                if (flags & ID_FLAG_INVERT)
                        state = -state;
-               handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], state, max, flags & ID_FLAG_AUTOFIRE, true, false);
+               if (state != id2->states[axis][i]) {
+                       write_log(_T("-> %d %d\n"), i, state);
+                       handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], state, max, flags & ID_FLAG_AUTOFIRE, true, false);
+                       id2->states[axis][i] = state;
+               }
        }
-       id2->states[axis] = state;
+       id2->states[axis][MAX_INPUT_SUB_EVENT] = v1;
 }
 int getjoystickstate (int joy)
 {
index 283db3c5b4153528b4dcdc5e206b1f69287abe16..7fe881fa061797cd288393ca1c73a8b740a70c04 100644 (file)
@@ -1129,7 +1129,7 @@ static void build_cpufunctbl (void)
 
                /* unimplemented opcode? */
                if (table->unimpclev > 0 && lvl >= table->unimpclev) {
-                       if (currprefs.cpu_compatible && currprefs.cpu_model == 68060) {
+                       if (currprefs.int_no_unimplemented && currprefs.cpu_model == 68060) {
                                cpufunctbl[opcode] = op_unimpl_1;
                        } else {
                                cpufunctbl[opcode] = op_illg_1;
@@ -1240,6 +1240,8 @@ static void prefs_changed_cpu (void)
        currprefs.mmu_model = changed_prefs.mmu_model;
        currprefs.cpu_compatible = changed_prefs.cpu_compatible;
        currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact;
+       currprefs.int_no_unimplemented = changed_prefs.int_no_unimplemented;
+       currprefs.fpu_no_unimplemented = changed_prefs.fpu_no_unimplemented;
        currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact;
 }
 
@@ -1256,6 +1258,8 @@ void check_prefs_changed_cpu (void)
                || currprefs.cpu_model != changed_prefs.cpu_model
                || currprefs.fpu_model != changed_prefs.fpu_model
                || currprefs.mmu_model != changed_prefs.mmu_model
+               || currprefs.int_no_unimplemented != changed_prefs.int_no_unimplemented
+               || currprefs.fpu_no_unimplemented != changed_prefs.fpu_no_unimplemented
                || currprefs.cpu_compatible != changed_prefs.cpu_compatible
                || currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact) {
 
@@ -1338,9 +1342,12 @@ void init_m68k (void)
                } else {
                        write_log (_T(" fake prefetch"));
                }
-               if (currprefs.cpu_model == 68060) {
-                       write_log (_T(" no unimplemented integer instructions"));
-               }
+       }
+       if (currprefs.int_no_unimplemented && currprefs.cpu_model == 68060) {
+               write_log (_T(" no unimplemented integer instructions"));
+       }
+       if (currprefs.fpu_no_unimplemented && currprefs.fpu_model) {
+               write_log (_T(" no unimplemented floating point instructions"));
        }
        if (currprefs.address_space_24) {
                regs.address_space_mask = 0x00ffffff;
@@ -3031,7 +3038,7 @@ STATIC_INLINE int div_unsigned (uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae
 
 void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra)
 {
-       if ((extra & 0x400) && currprefs.cpu_compatible && currprefs.cpu_model == 68060) {
+       if ((extra & 0x400) && currprefs.int_no_unimplemented && currprefs.cpu_model == 68060) {
                op_unimpl (opcode);
                return;
        }
@@ -3177,7 +3184,7 @@ STATIC_INLINE void mul_unsigned (uae_u32 src1, uae_u32 src2, uae_u32 *dst_hi, ua
 
 void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra)
 {
-       if ((extra & 0x400) && currprefs.cpu_compatible && currprefs.cpu_model == 68060) {
+       if ((extra & 0x400) && currprefs.int_no_unimplemented && currprefs.cpu_model == 68060) {
                op_unimpl (opcode);
                return;
        }
@@ -3723,7 +3730,7 @@ void doint (void)
                unset_special (SPCFLAG_INT);
                return;
        }
-       if (currprefs.cpu_compatible)
+       if (currprefs.cpu_compatible && currprefs.cpu_model < 68020)
                set_special (SPCFLAG_INT);
        else
                set_special (SPCFLAG_DOINT);
@@ -5926,43 +5933,43 @@ void exception2 (uaecptr addr)
        fill_prefetch ();
 }
 
+
 void cpureset (void)
 {
+    /* RESET hasn't increased PC yet, 1 word offset */
        uaecptr pc;
-       uaecptr ksboot = 0xf80002 - 2; /* -2 = RESET hasn't increased PC yet */
+       uaecptr ksboot = 0xf80002 - 2;
        uae_u16 ins;
+       addrbank *ab;
 
        send_internalevent (INTERNALEVENT_CPURESET);
        if ((currprefs.cpu_compatible || currprefs.cpu_cycle_exact) && currprefs.cpu_model <= 68020) {
                custom_reset (false, false);
                return;
        }
-       pc = m68k_getpc ();
-       if (pc >= 0xa00000) {
-               addrbank *b = &get_mem_bank (pc);
-               if (b->check (pc, 2 + 2)) {
-                       /* We have memory, hope for the best.. */
-                       custom_reset (false, false);
+       pc = m68k_getpc () + 2;
+       ab = &get_mem_bank (pc);
+       if (ab->check (pc, 2)) {
+               write_log (_T("CPU reset PC=%x (%s)..\n"), pc - 2, ab->name);
+               ins = get_word (pc);
+               custom_reset (false, false);
+               // did memory disappear under us?
+               if (ab == &get_mem_bank (pc))
+                       return;
+               // it did
+               if ((ins & ~7) == 0x4ed0) {
+                       int reg = ins & 7;
+                       uae_u32 addr = m68k_areg (regs, reg);
+                       if (addr < 0x80000)
+                               addr += 0xf80000;
+                       write_log (_T("reset/jmp (ax) combination emulated -> %x\n"), addr);
+                       m68k_setpc (addr - 2);
                        return;
                }
-               write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc);
-               custom_reset (false, false);
-               m68k_setpc (ksboot);
-               return;
-       }
-       /* panic, RAM is going to disappear under PC */
-       ins = get_word (pc + 2);
-       if ((ins & ~7) == 0x4ed0) {
-               int reg = ins & 7;
-               uae_u32 addr = m68k_areg (regs, reg);
-               write_log (_T("reset/jmp (ax) combination emulated -> %x\n"), addr);
-               custom_reset (false, false);
-               if (addr < 0x80000)
-                       addr += 0xf80000;
-               m68k_setpc (addr - 2);
-               return;
        }
-       write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc);
+       // the best we can do, jump directly to ROM entrypoint
+       // (which is probably what program wanted anyway)
+       write_log (_T("CPU Reset PC=%x (%s), invalid memory -> %x.\n"), pc, ab->name, ksboot + 2);
        custom_reset (false, false);
        m68k_setpc (ksboot);
 }
index 45b0920b3834554b96076f9ed68e337caaff1598..6874170770a8199ec5f309b67d15bc06ce926b86 100644 (file)
@@ -1856,6 +1856,7 @@ static void initialize_windowsmouse (void)
 }
 
 static uae_u8 rawkeystate[256];
+static int rawprevkey;
 static void handle_rawinput_2 (RAWINPUT *raw)
 {
        int i, num;
@@ -2217,10 +2218,42 @@ static void handle_rawinput_2 (RAWINPUT *raw)
                        }
                }
 
-               if (rawkeystate[scancode] == pressed) {
+               // More complex press/release check because we want to support
+               // keys that never return releases, only pressed but also need
+               // handle normal keys that can repeat.
+
+#if 0
+               if (!pressed)
                        return;
+#endif
+
+               if (pressed) {
+                       // previously pressed key and next press is same key? Repeat. Ignore it.
+                       if (scancode == rawprevkey)
+                               return;
+                       rawprevkey = scancode;
+                       if (rawkeystate[scancode] == 2) {
+                               // Got press for key that is already pressed.
+                               // Must be ignored. It is repeat.
+                               rawkeystate[scancode] = 1;
+                               return;
+                       }
+                       rawkeystate[scancode] = 1;
+               } else {
+                       rawprevkey = -1;
+                       // release without press: ignore
+                       if (rawkeystate [scancode] == 0)
+                               return;
+                       rawkeystate[scancode] = 0;
+                       // Got release, if following press is key that
+                       // is currently pressed: ignore it, it is repeat.
+                       // Mark all currently pressed keys.
+                       for (int i = 0; i < sizeof (rawkeystate); i++) {
+                               if (rawkeystate[i] == 1)
+                                       rawkeystate[i] = 2;
+                       }
                }
-               rawkeystate[scancode] = pressed;
+
                if (istest) {
                        if (pressed && (scancode == DIK_F12))
                                return;
@@ -3093,6 +3126,7 @@ static void release_keys (void)
                }
        }
        memset (rawkeystate, 0, sizeof rawkeystate);
+       rawprevkey = -1;
 }
 
 
index 88997cd1c1974641d61cd6bcffd3e37324922cf1..8f626301e7deb9cf2d6c557989b65a8593919a49 100644 (file)
 #define IDC_FPU3                        1227
 #define IDC_FPU_UNIMPLEMENTED           1228
 #define IDC_SOUNDSETTINGS               1229
+#define IDC_CPU_UNIMPLEMENTED           1229
 #define IDC_8BIT                        1230
 #define IDC_16BIT                       1231
 #define IDC_11KHZ                       1232
index 4c6ea1e9db73f06bf02d33543f60357df928a560..848762afb96b23e2113e3d1be398f48309635a12 100644 (file)
@@ -192,56 +192,58 @@ BEGIN
     EDITTEXT        IDC_MBRAM2,240,171,40,12,ES_CENTER | ES_READONLY
 END
 
-IDD_CPU DIALOGEX 0, 0, 396, 270
+IDD_CPU DIALOGEX 0, 0, 396, 283
 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,109,160,BS_LEFT
+    GROUPBOX        "CPU",IDC_STATIC,1,1,129,175,BS_LEFT
     CONTROL         "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,15,63,10
     CONTROL         "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,29,63,10
     CONTROL         "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,42,63,10
     CONTROL         "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,56,63,10
     CONTROL         "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,70,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,101,97,12
-    CONTROL         "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,115,97,11
+    CONTROL         "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,101,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,115,118,11
     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,128,97,11
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,128,120,11
     CONTROL         "MMU [] 68030, 68040 and 68060 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,142,96,11
-    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,120,3,274,96
-    CONTROL         "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,125,18,195,10
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,142,120,11
+    GROUPBOX        "CPU Emulation Speed",IDC_STATIC,136,3,258,111
+    CONTROL         "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,143,24,195,10
     CONTROL         "Approximate A500/A1200 or cycle-exact",IDC_CS_68000,
-                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,125,32,195,10
-    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,126,50,192,20
-    RTEXT           "CPU Speed",IDC_STATIC,125,78,55,9,SS_CENTERIMAGE
-    EDITTEXT        IDC_CPUTEXT,188,77,30,12,ES_CENTER | ES_READONLY
-    RTEXT           "CPU Idle",IDC_STATIC,223,78,62,9
-    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,292,73,69,21
-    GROUPBOX        "Cycle-exact CPU Emulation Speed",IDC_STATIC,120,105,274,55
-    RTEXT           "CPU Frequency",IDC_STATIC,123,129,67,10,SS_CENTERIMAGE
-    COMBOBOX        IDC_CPU_FREQUENCY,199,128,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    EDITTEXT        IDC_CPU_FREQUENCY2,252,127,70,15
-    GROUPBOX        "FPU",IDC_STATIC,1,167,109,99,BS_LEFT
-    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,182,87,10
-    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,196,87,10
-    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,209,87,10
-    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,223,93,10
+                    "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,143,38,195,10
+    CONTROL         "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,142,62,192,20
+    RTEXT           "CPU Speed",IDC_STATIC,141,90,55,9,SS_CENTERIMAGE
+    EDITTEXT        IDC_CPUTEXT,204,89,30,12,ES_CENTER | ES_READONLY
+    RTEXT           "CPU Idle",IDC_STATIC,239,90,62,9
+    CONTROL         "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,308,85,69,21
+    GROUPBOX        "Cycle-exact CPU Emulation Speed",IDC_STATIC,136,121,258,55
+    RTEXT           "CPU Frequency",IDC_STATIC,139,145,67,10,SS_CENTERIMAGE
+    COMBOBOX        IDC_CPU_FREQUENCY,215,144,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    EDITTEXT        IDC_CPU_FREQUENCY2,268,143,70,15
+    GROUPBOX        "FPU",IDC_STATIC,1,181,129,99,BS_LEFT
+    CONTROL         "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,195,87,10
+    CONTROL         "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,209,87,10
+    CONTROL         "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,222,87,10
+    CONTROL         "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,236,93,10
     CONTROL         "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,239,94,10
-    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,120,167,274,99
-    RTEXT           "Cache size:",IDC_STATIC,127,187,66,10,SS_CENTERIMAGE
-    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,196,181,115,20
-    EDITTEXT        IDC_CACHETEXT,315,186,30,12,ES_CENTER | ES_READONLY
-    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,214,84,11
-    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,228,84,11
-    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,242,84,11
-    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,214,68,11
-    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,299,214,72,10
-    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,299,228,72,10
-    CONTROL         "Unimplemented emu [] Emulate 68040/060 FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
-                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,252,96,10
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,252,117,10
+    GROUPBOX        "Advanced JIT Settings",IDC_STATIC,136,181,258,99
+    RTEXT           "Cache size:",IDC_STATIC,143,200,66,10,SS_CENTERIMAGE
+    CONTROL         "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,212,194,115,20
+    EDITTEXT        IDC_CACHETEXT,331,199,30,12,ES_CENTER | ES_READONLY
+    CONTROL         "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,227,84,11
+    CONTROL         "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,241,84,11
+    CONTROL         "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,255,84,11
+    CONTROL         "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,243,227,68,11
+    CONTROL         "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,315,227,72,10
+    CONTROL         "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,315,241,72,10
+    CONTROL         "Unimplemented FPU emu [] Emulate FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED,
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,265,116,10
+    CONTROL         "Unimplemented CPU emu [] Emulate 68060 unimplemented integer instructions",IDC_CPU_UNIMPLEMENTED,
+                    "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,156,118,10
 END
 
 IDD_FLOPPY DIALOGEX 0, 0, 396, 261
@@ -1295,6 +1297,7 @@ BEGIN
 
     IDD_CPU, DIALOG
     BEGIN
+        BOTTOMMARGIN, 282
     END
 
     IDD_FLOPPY, DIALOG
@@ -1443,7 +1446,7 @@ BEGIN
     IDS_KICKSTART           "ROM"
     IDS_DISK                "Disk swapper"
     IDS_DISPLAY             "Display"
-    IDS_HARDDISK            "Hard drives"
+    IDS_HARDDISK            "CD & Hard drives"
     IDS_FLOPPY              "Floppy drives"
     IDS_ABOUT               "About"
     IDS_LOADSAVE            "Configurations"
index 0c422d0bc9c17ca0bb07753a12950782c71b8981..07dcb75817dc732c6fc9668df31bd321dd76c45d 100644 (file)
 #define LANG_DLL 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("1")
+#define WINUAEBETA _T("2")
 #else
 #define WINUAEBETA _T("")
 #endif
-#define WINUAEDATE MAKEBD(2013, 6, 3)
+#define WINUAEDATE MAKEBD(2013, 6, 12)
 #define WINUAEEXTRA _T("")
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index b760030c46137c051336743db451049dca6d6cb8..0f324056551ad620ebbcf0e26d91c5a6d29751d0 100644 (file)
@@ -8473,6 +8473,7 @@ static void enable_for_cpudlg (HWND hDlg)
        ew (hDlg, IDC_COMPATIBLE, !workprefs.cpu_cycle_exact);
        ew (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_model > 0);
        ew (hDlg, IDC_FPU_UNIMPLEMENTED, workprefs.fpu_model);
+       ew (hDlg, IDC_CPU_UNIMPLEMENTED, workprefs.cpu_model == 68060);
 #if 0
        ew (hDlg, IDC_CPU_MULTIPLIER, workprefs.cpu_cycle_exact);
 #endif
@@ -8508,6 +8509,7 @@ static void values_to_cpudlg (HWND hDlg)
        CheckDlgButton (hDlg, IDC_COMPATIBLE24, workprefs.address_space_24);
        CheckDlgButton (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_strict);
        CheckDlgButton (hDlg, IDC_FPU_UNIMPLEMENTED, !workprefs.fpu_no_unimplemented);
+       CheckDlgButton (hDlg, IDC_CPU_UNIMPLEMENTED, !workprefs.int_no_unimplemented);
        SendDlgItemMessage (hDlg, IDC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.cpu_idle == 0 ? 0 : 12 - workprefs.cpu_idle / 15);
        cpu = (workprefs.cpu_model - 68000) / 10;
        if (cpu >= 5)
@@ -8557,6 +8559,7 @@ static void values_from_cpudlg (HWND hDlg)
        workprefs.cpu_compatible = workprefs.cpu_cycle_exact | (ischecked (hDlg, IDC_COMPATIBLE) ? 1 : 0);
        workprefs.fpu_strict = ischecked (hDlg, IDC_COMPATIBLE_FPU) ? 1 : 0;
        workprefs.fpu_no_unimplemented = ischecked (hDlg, IDC_FPU_UNIMPLEMENTED) ? 0 : 1;
+       workprefs.int_no_unimplemented = ischecked (hDlg, IDC_CPU_UNIMPLEMENTED) ? 0 : 1;
        workprefs.address_space_24 = ischecked (hDlg, IDC_COMPATIBLE24) ? 1 : 0;
        workprefs.m68k_speed = ischecked (hDlg, IDC_CS_HOST) ? -1 : 0;
        workprefs.m68k_speed_throttle = SendMessage (GetDlgItem (hDlg, IDC_SPEED), TBM_GETPOS, 0, 0) * 100;
index cad0528d09d9897814ffc85fa847d302cb5e374f..e9e189b7a6af46462b579835350e4f967979167e 100644 (file)
@@ -1,6 +1,36 @@
 
 - restore only single input target to default.
 
+Beta 2:
+
+- Moved >2M Chip RAM merge earlier in boot process. Previous was too late and it broke
+  early boot menu. (It sets reset proof resident positioned at the end of chip ram and
+  if chip ram is not available early enough, exec assumes resident is invalid and
+  ignores it). Now nearly complete unfragmented Chip RAM is available, even if booting
+  with Chip RAM only configuration.
+- Do not filter all keyboard presses without matching releases, only filter repeats.
+  (Which isn't that simple because press and repeating press are identical events)
+- Inverted keyboard releases (=press) required matching release before next press
+  event was accepted. (This update wasn't really needed but maybe in future it will
+  be more useful)
+- Added separate 68060 unimplemented integer emulation checkbox. More compatible
+  should only enable/disable prefetch emulation. (approximate/partial or 68000 exact)
+- 68060 MOVEP was not marked as unimplemented.
+- Non-prefetch CPU mode now fully checks if memory disappears after reset by
+  checking memory "bank" pointers instead of using hardcoded addresses. Program
+  doing software reset by executing RESET + JMP (An) now always works. (If opcode
+  is something else or PC points to non-existing memory for some reason, it assumes
+  program attempted normal software reset and jumps to start of ROM code). Makes
+  aros arosbootstrap softkick more reliable under emulation.
+- Tree view "Hard drives" -> "CD & Hard drives"
+- Delay 68020+ interrupt detection by one instruction unless cycle exact is enabled.
+  (For example Skeleton Krew CD32 first enables interrupt and then updates interrupt
+  vector. Game code even guarantees request is active while enabling interrupts..)
+- 68040 MMU PTEST and 68060 MMU PLPA instructions were shown incorrectly by debugger.
+  (Read was shown as write and vice versa. Emulation was working fine)
+
+Beta 1:
+
 - KS 1.3 OFS hardfile fix. Apparently 1.3 L:FastFileSystem does not support OFS.
   Use ROM built-in FS if OFS partition and hardfile FileSys path is empty. (2.6.0)
 - Added emulation of unimplemented FPU instruction exceptions.
index 07c5036f425dfd2082748ed2546a44329e8de289..ec31efac3574befb16e4069e4c366cded9b83637 100644 (file)
--- a/table68k
+++ b/table68k
 0000 1110 11ss sSSS:200:?????:?????:13: CAS.L   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
 0000 1110 1111 1100:250:?????:?????:10: CAS2.L  #2
 
-0000 rrr1 00dd dDDD:000:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr
-0000 rrr1 01dd dDDD:000:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr
-0000 rrr1 10dd dDDD:000:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16]
-0000 rrr1 11dd dDDD:000:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16]
+0000 rrr1 00dd dDDD:050:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr
+0000 rrr1 01dd dDDD:050:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr
+0000 rrr1 10dd dDDD:050:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16]
+0000 rrr1 11dd dDDD:050:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16]
 0000 rrr1 00ss sSSS:000:--Z--:-----:11: BTST    Dr,s[!Areg]
 0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG    Dr,s[!Areg,Immd]
 0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR    Dr,s[!Areg,Immd]
 1111 0101 0001 0rrr:402:-----:-----:00: PFLUSHAN Ara
 1111 0101 0001 1rrr:402:-----:-----:00: PFLUSHA  Ara
 % 68040 only
-1111 0101 0100 1rrr:452:-----:-----:00: PTESTR   Ara
-1111 0101 0110 1rrr:452:-----:-----:00: PTESTW   Ara
+1111 0101 0100 1rrr:452:-----:-----:00: PTESTW   Ara
+1111 0101 0110 1rrr:452:-----:-----:00: PTESTR   Ara
 
 % destination register number is encoded in the following word
 1111 0110 0010 0rrr:400:-----:-----:12: MOVE16   ArP,AxP
 
 % 68060
 1111 1000 0000 0000:502:?????:?????:10: LPSTOP   #1
-1111 0101 1000 1rrr:502:-----:-----:00: PLPAR    Ara
-1111 0101 1100 1rrr:502:-----:-----:00: PLPAW    Ara
+1111 0101 1000 1rrr:502:-----:-----:00: PLPAW    Ara
+1111 0101 1100 1rrr:502:-----:-----:00: PLPAR    Ara