]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2420b7
authorToni Wilen <twilen@winuae.net>
Fri, 20 Jul 2012 15:17:26 +0000 (18:17 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 20 Jul 2012 15:17:26 +0000 (18:17 +0300)
30 files changed:
ar.cpp
autoconf.cpp
blitter.cpp
build68k.cpp
debug.cpp
expansion.cpp
filesys.asm
filesys.cpp
include/ar.h
include/memory.h
include/readcpu.h
include/uae.h
main.cpp
memory.cpp
newcpu.cpp
od-win32/dinput.cpp
od-win32/direct3d.cpp
od-win32/midi.cpp
od-win32/mman.cpp
od-win32/resources/resource
od-win32/resources/winuae.rc
od-win32/sounddep/sound.cpp
od-win32/sounddep/sound.h
od-win32/sys/mman.h
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
table68k

diff --git a/ar.cpp b/ar.cpp
index 15469ac05f7d04c0186e2673b39ad34c66bf3ac3..4c2e032d0a135fae8414bcc6b1dc0d52bb72b959 100644 (file)
--- a/ar.cpp
+++ b/ar.cpp
@@ -250,7 +250,6 @@ static int triggered_once;
 static void hrtmon_unmap_banks (void);
 
 void check_prefs_changed_carts (int in_memory_reset);
-int action_replay_unload (int in_memory_reset);
 
 static int stored_picasso_on = -1;
 
@@ -1477,6 +1476,9 @@ int action_replay_unload (int in_memory_reset)
                _T("ACTION_REPLAY_HIDE"),
        };
 
+       if (!armemory_rom && !hrtmemory)
+               return 0;
+
        write_log_debug (_T("Action Replay State:(%s)\nHrtmon State:(%s)\n"),
                state[action_replay_flag + 3], state[hrtmon_flag + 3]);
 
index 5285526e6232c2d943d952865bc90e405657b90f..e9371ef3c10ef1b793f51f438e0b9e7af43a1b23 100644 (file)
@@ -284,7 +284,7 @@ void rtarea_init (void)
        uaegfx_install_code (rtarea_base + RTAREA_RTG);
 #endif
 
-       org (RTAREA_TRAPS);
+       org (RTAREA_TRAPS | rtarea_base);
        init_extended_traps ();
 }
 
index fe7219f8c5823e0395789e32a4a4cf35c03f97a3..2e8d35c0539813179239b568bf2253c6d379ae77 100644 (file)
@@ -618,11 +618,11 @@ STATIC_INLINE void blitter_line_incy (void)
 static void blitter_line (void)
 {
        uae_u16 blitahold = (blinea & blt_info.bltafwm) >> blinea_shift;
-       uae_u16 blitbhold = blineb & 1 ? 0xFFFF : 0;
        uae_u16 blitchold = blt_info.bltcdat;
 
+       blt_info.bltbhold = (blineb & 1) ? 0xFFFF : 0;
        blitlinepixel = !blitsing || (blitsing && !blitonedot);
-       blt_info.bltddat = blit_func (blitahold, blitbhold, blitchold, bltcon0 & 0xFF);
+       blt_info.bltddat = blit_func (blitahold, blt_info.bltbhold, blitchold, bltcon0 & 0xFF);
        blitonedot++;
 }
 
index 78a5437d9ac5e95356992cceeef7c78f2dca0614..339a63f600e743503cad76f4b51f40c562be9e52 100644 (file)
@@ -76,7 +76,7 @@ int main(int argc, char **argv)
 #endif
     getnextch();
     while (nextch != EOF) {
-       int cpulevel, plevel, sduse;
+       int cpulevel, uncpulevel, plevel, sduse;
        int i;
 
        char patbits[16];
@@ -130,7 +130,7 @@ int main(int argc, char **argv)
            getnextch();
        }
 
-       while (isspace(nextch) || nextch == ':') /* Get CPU and privilege level */
+       while (isspace(nextch) || nextch == ':') /* Get CPU level, unimplemented level, and privilege level */
            getnextch();
 
        switch (nextch) {
@@ -146,6 +146,19 @@ int main(int argc, char **argv)
        }
        getnextch();
 
+       switch (nextch) {
+        case '0': uncpulevel = 0; break;
+        case '1': uncpulevel = 1; break;
+        case '2': uncpulevel = 2; break;
+        case '3': uncpulevel = 3; break;
+        case '4': uncpulevel = 4; break;
+        case '5': uncpulevel = 5; break;
+        case '6': uncpulevel = 6; break;
+        case '7': uncpulevel = 7; break;
+        default: abort();
+       }
+       getnextch();
+
        switch (nextch) {
         case '0': plevel = 0; break;
         case '1': plevel = 1; break;
@@ -247,7 +260,7 @@ int main(int argc, char **argv)
                if (j < 15)
                    printf(",");
            }
-           printf ("},0x%04X,%d,%d,{", bitmask, cpulevel, plevel);
+           printf ("},0x%04X,%d,%d,%d,{", bitmask, cpulevel, uncpulevel, plevel);
            for(i = 0; i < 5; i++) {
                printf("{%d,%d}%s", flaguse[i], flagset[i], i == 4 ? "" : ",");
            }
index c045008a0b35407bcc24ee4468616ae36bbb940a..e1e42d7dc09f9802f0ac61afef289c1914251053 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -70,7 +70,6 @@ void deactivate_debugger (void)
        processptr = 0;
        xfree (processname);
        processname = NULL;
-       setsystime ();
 }
 
 void activate_debugger (void)
index 4e20b89506e89100cef619e077b8487783d076fb..468aafba34b17129c0f413499d6dc627780e6cba 100644 (file)
@@ -295,13 +295,13 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
        value &= 0xffff;
        if (ecard >= cardno)
                return;
-       if (expamem_type() != zorroIII)
+       if (expamem_type () != zorroIII)
                write_log (_T("warning: WRITE.W to address $%lx : value $%x\n"), addr, value);
        else {
                switch (addr & 0xff) {
                case 0x44:
-                       if (expamem_type() == zorroIII) {
-                               uae_u32 p1, p2;
+                       if (expamem_type () == zorroIII) {
+                               uae_u32 p1, p2 = 0;
                                // +Bernd Roesch & Toni Wilen
                                p1 = get_word (regs.regs[11] + 0x20);
                                if (expamem[0] & add_memory) {
@@ -1213,6 +1213,35 @@ void free_fastmemory (void)
        fastmemory = 0;
 }
 
+static bool mapped_malloc_dynamic (uae_u32 *currpsize, uae_u32 *changedpsize, uae_u8 **memory, uae_u32 *allocated, uae_u32 *mask, int max, const TCHAR *name)
+{
+       int alloc = *currpsize;
+
+       *allocated = 0;
+       *memory = NULL;
+       *mask = 0;
+
+       if (!alloc)
+               return false;
+
+       while (alloc >= max * 1024 * 1024) {
+               uae_u8 *mem = mapped_malloc (alloc, name);
+               if (mem) {
+                       *memory = mem;
+                       *currpsize = alloc;
+                       *changedpsize = alloc;
+                       *mask = alloc - 1;
+                       *allocated = alloc;
+                       return true;
+               }
+               write_log (_T("Out of memory for %s, %d bytes.\n"), name, alloc);
+               alloc /= 2;
+       }
+
+       return false;
+}
+
+
 static void allocate_expamem (void)
 {
        currprefs.fastmem_size = changed_prefs.fastmem_size;
@@ -1220,6 +1249,7 @@ static void allocate_expamem (void)
        currprefs.z3fastmem_size = changed_prefs.z3fastmem_size;
        currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size;
        currprefs.rtgmem_size = changed_prefs.rtgmem_size;
+       currprefs.rtgmem_type = changed_prefs.rtgmem_type;
        currprefs.z3chipmem_size = changed_prefs.z3chipmem_size;
 
        z3chipmem_start = currprefs.z3fastmem_start;
@@ -1240,24 +1270,13 @@ static void allocate_expamem (void)
                                allocated_fastmem = 0;
                        }
                }
-               memory_hardreset ();
+               memory_hardreset (1);
        }
        if (allocated_z3fastmem != currprefs.z3fastmem_size) {
                if (z3fastmem)
                        mapped_free (z3fastmem);
-               z3fastmem = 0;
-
-               allocated_z3fastmem = currprefs.z3fastmem_size;
-               z3fastmem_mask = allocated_z3fastmem - 1;
-
-               if (allocated_z3fastmem) {
-                       z3fastmem = mapped_malloc (allocated_z3fastmem, _T("z3"));
-                       if (z3fastmem == 0) {
-                               write_log (_T("Out of memory for 32 bit fast memory.\n"));
-                               allocated_z3fastmem = 0;
-                       }
-               }
-               memory_hardreset ();
+               mapped_malloc_dynamic (&currprefs.z3fastmem_size, &changed_prefs.z3fastmem_size, &z3fastmem, &allocated_z3fastmem, &z3fastmem_mask, 1, _T("z3"));
+               memory_hardreset (1);
        }
        if (allocated_z3fastmem2 != currprefs.z3fastmem2_size) {
                if (z3fastmem2)
@@ -1274,43 +1293,21 @@ static void allocate_expamem (void)
                                allocated_z3fastmem2 = 0;
                        }
                }
-               memory_hardreset ();
+               memory_hardreset (1);
        }
        if (allocated_z3chipmem != currprefs.z3chipmem_size) {
                if (z3chipmem)
                        mapped_free (z3chipmem);
-               z3chipmem = 0;
-
-               allocated_z3chipmem = currprefs.z3chipmem_size;
-               z3chipmem_mask = allocated_z3chipmem - 1;
-
-               if (allocated_z3chipmem) {
-                       z3chipmem = mapped_malloc (allocated_z3chipmem, _T("z3_chip"));
-                       if (z3chipmem == 0) {
-                               write_log (_T("Out of memory for 32 bit chip memory.\n"));
-                               allocated_z3chipmem = 0;
-                       }
-               }
-               memory_hardreset ();
+               mapped_malloc_dynamic (&currprefs.z3chipmem_size, &changed_prefs.z3chipmem_size, &z3chipmem, &allocated_z3chipmem, &z3chipmem_mask, 16, _T("z3_chip"));
+               memory_hardreset (1);
        }
 
 #ifdef PICASSO96
        if (allocated_gfxmem != currprefs.rtgmem_size) {
                if (gfxmemory)
                        mapped_free (gfxmemory);
-               gfxmemory = 0;
-
-               allocated_gfxmem = currprefs.rtgmem_size;
-               gfxmem_mask = allocated_gfxmem - 1;
-
-               if (allocated_gfxmem) {
-                       gfxmemory = mapped_malloc (allocated_gfxmem, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
-                       if (gfxmemory == 0) {
-                               write_log (_T("Out of memory for graphics card memory\n"));
-                               allocated_gfxmem = 0;
-                       }
-               }
-               memory_hardreset ();
+               mapped_malloc_dynamic (&currprefs.rtgmem_size, &changed_prefs.rtgmem_size, &gfxmemory, &allocated_gfxmem, &gfxmem_mask, 1, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx"));
+               memory_hardreset (1);
        }
 #endif
 
index 58a96e7d93637d52873f05e92039116a0fdebd5c..cabe5c792a6dc44be56eb3e2ee3bb1a330964b83 100644 (file)
@@ -56,7 +56,7 @@ start:
        dc.l exter_server-start         ;4 28
        dc.l bootcode-start                     ;5 32
        dc.l setup_exter-start          ;6 36
-       dc.l mh_e-start                         ;7 40
+       dc.l 0                                  ;7 40
        dc.l clipboard_init-start       ;8 44
        ;52
 
@@ -440,8 +440,13 @@ setup_exter:
        move.w #$0214,8(a1)
        moveq.l #3,d0
        jsr -168(a6) ; AddIntServer
-       move.w mh_e(pc),d0
-       beq.s .nomh
+
+       move.w #$FF38,d0
+       moveq #4,d1
+       bsr.w getrtbase
+       jsr (a0)
+    tst.l d0
+    beq.s .nomh
        bsr.w mousehack_init
 .nomh
        movem.l (sp)+,d0-d1/a0-a1
@@ -1246,6 +1251,21 @@ addfsonthefly ; d1 = fs index
        movem.l (sp)+,d2-d7/a2-a6
        rts
 
+clockreset:
+       move.w #$ff58,d0 ; fsmisc_helper
+       bsr.w getrtbase
+       moveq #3,d0 ; get time
+       jsr (a0)
+       move.l 168(a3),a1
+       move.l d0,32(a1)
+       beq.s .cr
+       moveq #0,d0
+       move.l d0,36(a1)
+       move.w #11,28(a1) ;TR_SETSYSTIME
+       move.b #1,30(a1) ;IOF_QUICK
+       jsr -$01c8(a6) ;DoIO
+.cr    rts
+
 filesys_mainloop:
        move.l 4.w,a6
        sub.l a1,a1
@@ -1271,6 +1291,7 @@ filesys_mainloop:
        ; 164: input.device ioreq (disk inserted/removed input message)
        ; 168: timer.device ioreq
        ; 172: disk change from host
+       ; 173: clock reset
        ; 176: my task
        ; 180: device node
        move.l #12+20+(80+44+1)+(1+3)+4+4+4+(1+3)+4+4,d0
@@ -1347,7 +1368,14 @@ FSML_loop:
        bset #13,d0 ; SIGBREAK_CTRL_D
        jsr -$013e(a6) ;Wait
 .msg
-       ; SIGBREAK_CTRL_D = disk change notification from native code
+       ; SIGBREAK_CTRL_D checks
+       ; clock reset
+       tst.b 173(a3)
+       beq.s .noclk
+       bsr.w clockreset
+       clr.b 173(a3)
+.noclk
+       ; disk change notification from native code
        tst.b 172(a3)
        beq.s .nodc
        ; call filesys_media_change_reply (pre)
@@ -1688,32 +1716,30 @@ mhdoio:
        jsr -$01c8(a6) ;DoIO
        rts
 
-; these shouldn't be here but it is easier this way..
-
-mh_e: dc.w 0
-mh_cnt: dc.w -1
-mh_maxx: dc.w 0
-mh_maxy: dc.w 0
-mh_maxz: dc.w 0
-mh_x: dc.w 0
-mh_y: dc.w 0
-mh_z: dc.w 0
-mh_resx: dc.w 0
-mh_resy: dc.w 0
-mh_maxax: dc.w 0
-mh_maxay: dc.w 0
-mh_maxaz: dc.w 0
-mh_ax: dc.w 0
-mh_ay: dc.w 0
-mh_az: dc.w 0
-mh_pressure: dc.w 0
-mh_buttonbits: dc.l 0
-mh_inproximity: dc.w 0
-mh_absx: dc.w 0
-mh_absy: dc.w 0
+MH_E = 0
+MH_CNT = 2
+MH_MAXX = 4
+MH_MAXY = 6
+MH_MAXZ = 8
+MH_X = 10
+MH_Y = 12
+MH_Z = 14
+MH_RESX = 16
+MH_RESY = 18
+MH_MAXAX = 20
+MH_MAXAY = 22
+MH_MAXAZ = 24
+MH_AX = 26
+MH_AY = 28
+MH_AZ = 30
+MH_PRESSURE = 32
+MH_BUTTONBITS = 34
+MH_INPROXIMITY = 38
+MH_ABSX = 40
+MH_ABSY = 42
+MH_DATA_SIZE = 44
 
 MH_INT = 0
-
 MH_FOO = (MH_INT+22)
 MH_FOO_CNT = 0
 MH_FOO_BUTTONS = 4
@@ -1742,7 +1768,8 @@ MH_IEPT = (MH_IEH+22) ;IEPointerTable/IENewTablet
 MH_IENTTAGS = (MH_IEPT+32) ;space for ient_TagList
 MH_IO = (MH_IENTTAGS+16*4*2)
 MH_TM = (MH_IO+4)
-MH_END = (MH_TM+4)
+MH_DATA = (MH_TM+4)
+MH_END = (MH_DATA+MH_DATA_SIZE)
 
 MH_MOUSEHACK = 0
 MH_TABLET = 1
@@ -1858,7 +1885,7 @@ getgfxlimits:
 mousehack_task:
        move.l 4.w,a6
 
-       move.w 20(a6),d7
+       move.w 20(a6),d7 ; KS version
 
        moveq #-1,d0
        jsr -$014a(a6) ;AllocSignal
@@ -1886,6 +1913,14 @@ mousehack_task:
        moveq #-1,d0
        move.w d0,MH_FOO_CNT(a3)
 
+    ; send data structure address
+       move.w #$FF38,d0
+       moveq #5,d1
+       bsr.w getrtbase
+       move.l a5,d0
+       add.l #MH_DATA,d0
+       jsr (a0)
+
        lea MH_INT(a5),a1
        move.b #2,8(a1) ;NT_INTERRUPT
        move.b #5,9(a1) ;priority
@@ -1992,7 +2027,7 @@ mhloop
        move.l #22,36(a1) ;sizeof(struct InputEvent)
        move.l a2,40(a1)
 
-       move.b mh_e(pc),d0
+       move.b MH_E+MH_DATA(a5),d0
        cmp.w #39,d7
        bcs.w .notablet
        btst #MH_TABLET,d0
@@ -2012,7 +2047,7 @@ mhloop
        clr.w 12(a0)
 
        ;IEQUALIFIER_MIDBUTTON=0x1000/IEQUALIFIER_RBUTTON=0x2000/IEQUALIFIER_LEFTBUTTON=0x4000
-       move.l mh_buttonbits(pc),d1
+       move.l MH_BUTTONBITS+MH_DATA(a5),d1
        and.w #7,d1
        moveq #7,d0
        sub.w d1,d0
@@ -2020,72 +2055,72 @@ mhloop
        lsl.w #4,d0
        move.w d0,8(a2) ;ie_Qualifier
 
-       move.w mh_x(pc),12+2(a0) ;ient_TabletX
+       move.w MH_X+MH_DATA(a5),12+2(a0) ;ient_TabletX
        clr.w 16(a0)
-       move.w mh_y(pc),16+2(a0) ;ient_TabletY
+       move.w MH_Y++MH_DATA(a5),16+2(a0) ;ient_TabletY
        clr.w 20(a0)
-       move.w mh_maxx(pc),20+2(a0) ;ient_RangeX
+       move.w MH_MAXX+MH_DATA(a5),20+2(a0) ;ient_RangeX
        clr.w 24(a0)
-       move.w mh_maxy(pc),24+2(a0) ;ient_RangeY
+       move.w MH_MAXY+MH_DATA(a5),24+2(a0) ;ient_RangeY
        lea MH_IENTTAGS(a5),a1
        move.l a1,28(a0) ;ient_TagList
        move.l #TABLETA_Pressure,(a1)+
-       move.w mh_pressure(pc),d0
+       move.w MH_PRESSURE+MH_DATA(a5),d0
        ext.l d0
        asl.l #8,d0
        move.l d0,(a1)+
        move.l #TABLETA_ButtonBits,(a1)+
-       move.l mh_buttonbits(pc),(a1)+
+       move.l MH_BUTTONBITS+MH_DATA(a5),(a1)+
        
        moveq #0,d0
 
-       move.w mh_resx(pc),d0
+       move.w MH_RESX+MH_DATA(a5),d0
        bmi.s .noresx
        move.l #TABLETA_ResolutionX,(a1)+
        move.l d0,(a1)+
 .noresx
-       move.w mh_resy(pc),d0
+       move.w MH_RESY+MH_DATA(a5),d0
        bmi.s .noresy
        move.l #TABLETA_ResolutionY,(a1)+
        move.l d0,(a1)+
 .noresy
 
-       move.w mh_maxz(pc),d0
+       move.w MH_MAXZ+MH_DATA(a5),d0
        bmi.s .noz
        move.l #TABLETA_RangeZ,(a1)+
        move.l d0,(a1)+
-       move.w mh_z(pc),d0
+       move.w MH_Z+MH_DATA(a5),d0
        move.l #TABLETA_TabletZ,(a1)+
        move.l d0,(a1)+
 .noz
 
-       move.w mh_maxax(pc),d0
+       move.w MH_MAXAX+MH_DATA(a5),d0
        bmi.s .noax
        move.l #TABLETA_AngleX,(a1)+
-       move.w mh_ax(pc),d0
+       move.w MH_AX+MH_DATA(a5),d0
        ext.l d0
        asl.l #8,d0
        move.l d0,(a1)+
 .noax
-       move.w mh_maxay(pc),d0
+       move.w MH_MAXAY++MH_DATA(a5),d0
        bmi.s .noay
        move.l #TABLETA_AngleY,(a1)+
-       move.w mh_ay(pc),d0
+       move.w MH_AY++MH_DATA(pc),d0
        ext.l d0
        asl.l #8,d0
        move.l d0,(a1)+
 .noay
-       move.w mh_maxaz(pc),d0
+       move.w MH_MAXAZ++MH_DATA(a5),d0
        bmi.s .noaz
        move.l #TABLETA_AngleZ,(a1)+
-       move.w mh_az(pc),d0
+       move.w MH_AZ+MH_DATA(a5),d0
        ext.l d0
        asl.l #8,d0
        move.l d0,(a1)+
 .noaz
        
        moveq #0,d0
-       move.w mh_inproximity(pc),d0
+       move.w MH_INPROXIMITY+MH_DATA(a5),d0
        bmi.s .noproxi
        move.l #TABLETA_InProximity,(a1)+
        move.l d0,(a1)+
@@ -2097,7 +2132,7 @@ mhloop
        ;create mouse button events if button state changed
        move.w #$68,d3 ;IECODE_LBUTTON->IECODE_RBUTTON->IECODE_MBUTTON
        moveq #1,d2
-       move.l mh_buttonbits(pc),d4
+       move.l MH_BUTTONBITS+MH_DATA(a5),d4
 .nextbut
        move.l d4,d0
        and.l d2,d0
@@ -2128,7 +2163,7 @@ mhloop
 
 .notablet
 
-       move.b mh_e(pc),d0
+       move.b MH_E+MH_DATA(a5),d0
        btst #MH_MOUSEHACK,d0
        beq.w mhloop
 
@@ -2139,7 +2174,7 @@ mhloop
 
        move.l MH_FOO_INTBASE(a3),a0
 
-       move.w mh_absx(pc),d0
+       move.w MH_ABSX+MH_DATA(a5),d0
        move.w 34+14(a0),d1
        add.w d1,d1
        sub.w d1,d0
@@ -2148,7 +2183,7 @@ mhloop
 .xn
        move.w d0,10(a2)
 
-       move.w mh_absy(pc),d0
+       move.w MH_ABSY+MH_DATA(a5),d0
        move.w 34+12(a0),d1
        add.w d1,d1
        sub.w d1,d0
@@ -2169,7 +2204,7 @@ mousehackint:
        beq.s .l1
        tst.l MH_TM(a1)
        beq.s .l1
-       move.w mh_cnt(pc),d0
+       move.w MH_CNT+MH_DATA(a1),d0
        cmp.w MH_FOO+MH_FOO_CNT(a1),d0
        beq.s .l2
        move.w d0,MH_FOO+MH_FOO_CNT(a1)
index 0f1ffa56bb5db5d04c0363242f8bae77b6fb0436..39362f5547a678c389c742f559ba05fcbc92e78b 100644 (file)
@@ -1307,7 +1307,7 @@ void setsystime (void)
                return;
        Unit *u;
        for (u = units; u; u = u->next) {
-               if (is_virtual (u->unit)) {
+               if (is_virtual (u->unit) && filesys_isvolume (u)) {
                        put_byte (u->volume + 173 - 32, 1);
                        uae_Signal (get_long (u->volume + 176 - 32), 1 << 13);
                        break;
@@ -5172,7 +5172,7 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
        TRACE((_T("ACTION_CHANGE_FILE_POSITION64(%s,%lld,%d)\n"), k->aino->nname, pos, mode));
        gui_flicker_led (LED_HD, unit->unit, 1);
 
-       cur = fs_lseek64 (k->fd, 0, SEEK_CUR);
+       cur = k->file_pos;
        {
                uae_s64 temppos;
                uae_s64 filesize = fs_fsize64 (k->fd);
@@ -5198,8 +5198,9 @@ static void action_change_file_position64 (Unit *unit, dpacket packet)
        } else {
                PUT_PCK64_RES1 (packet, TRUE);
                PUT_PCK64_RES2 (packet, 0);
-               k->file_pos = cur;
+               k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR);
        }
+       TRACE((_T("= oldpos %lld newpos %lld\n"), cur, k->file_pos));
 
 }
 
@@ -5214,7 +5215,7 @@ static void action_get_file_position64 (Unit *unit, dpacket packet)
                PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK);
                return;
        }
-       TRACE((_T("ACTION_GET_FILE_POSITION64(%s)\n"), k->aino->nname));
+       TRACE((_T("ACTION_GET_FILE_POSITION64(%s)=%lld\n"), k->aino->nname, k->file_pos));
        PUT_PCK64_RES1 (packet, k->file_pos);
        PUT_PCK64_RES2 (packet, 0);
 }
@@ -5284,8 +5285,8 @@ static void action_get_file_size64 (Unit *unit, dpacket packet)
                PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK);
                return;
        }
-       TRACE((_T("ACTION_GET_FILE_SIZE64(%s)\n"), k->aino->nname));
        filesize = fs_fsize64 (k->fd);
+       TRACE((_T("ACTION_GET_FILE_SIZE64(%s)=%lld\n"), k->aino->nname, filesize));
        if (filesize >= 0) {
                PUT_PCK64_RES1 (packet, filesize);
                PUT_PCK64_RES2 (packet, 0);
index c063ed4851b54380fb0974cd5206f42e3f636f01..91360b5da5af8960f04417434eb18da2689a50c5 100644 (file)
@@ -38,6 +38,7 @@ extern void action_replay_ciaread (void);
 extern void action_replay_hide (void);
 extern void action_replay_reset (void);
 extern int action_replay_load (void);
+extern int action_replay_unload (int in_memory_reset);
 
 extern void action_replay_memory_reset (void);
 extern void action_replay_init (int);
index 82d4ebef0d45dcfa84c39895e395baec76ff615e..4b07be7b902e1acfead284085fdf3da3f6fb08dc 100644 (file)
@@ -18,8 +18,8 @@ extern uae_u8 *cache_alloc (int);
 extern void cache_free (uae_u8*);
 #endif
 
-int init_shm (void);
-void preinit_shm (void);
+bool init_shm (void);
+bool preinit_shm (void);
 extern bool canbang;
 extern int candirect;
 
@@ -173,7 +173,8 @@ extern void memory_init (void);
 extern void memory_cleanup (void);
 extern void map_banks (addrbank *bank, int first, int count, int realsize);
 extern void map_overlay (int chip);
-extern void memory_hardreset (void);
+extern void memory_hardreset (int);
+extern void memory_clear (void);
 extern void free_fastmemory (void);
 
 #define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr))
index 570f34e8186912b17bd1b1881607ea51563550c5..f242766b772956fcddb2e8d2a47a31711061cee4 100644 (file)
@@ -65,6 +65,7 @@ struct instr_def {
     uae_u8 bitpos[16];
     unsigned int mask;
     int cpulevel;
+       int unimpcpulevel;
     int plevel;
     struct {
        unsigned int flaguse:3;
index a6d3e58bc53e24b54657cde92675bebda945f112..30164184c6a0ccd6de8c173141c942a9b14c900d 100644 (file)
@@ -11,6 +11,7 @@ extern void do_leave_program (void);
 extern void start_program (void);
 extern void leave_program (void);
 extern void real_main (int, TCHAR **);
+extern void virtualdevice_init (void);
 extern void usage (void);
 extern void sleep_millis (int ms);
 extern void sleep_millis_main (int ms);
index cd320c36e6aec9f690ac1d9aeef393e3283e7606..c7a8897f9f94c4221eff49f8b2da1d595da2a6a4 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -734,6 +734,7 @@ void reset_all_systems (void)
        filesys_prepare_reset ();
        filesys_reset ();
 #endif
+       init_shm ();
        memory_reset ();
 #if defined (BSDSOCKET)
        bsdlib_reset ();
@@ -858,6 +859,35 @@ void leave_program (void)
        do_leave_program ();
 }
 
+
+void virtualdevice_init (void)
+{
+#ifdef AUTOCONFIG
+       rtarea_setup ();
+#endif
+#ifdef FILESYS
+       rtarea_init ();
+       uaeres_install ();
+       hardfile_install ();
+#endif
+#ifdef SCSIEMU
+       scsi_reset ();
+       scsidev_install ();
+#endif
+#ifdef SANA2
+       netdev_install ();
+#endif
+#ifdef UAESERIAL
+       uaeserialdev_install ();
+#endif
+#ifdef AUTOCONFIG
+       expansion_init ();
+#endif
+#ifdef FILESYS
+       filesys_install ();
+#endif
+}
+
 static int real_main2 (int argc, TCHAR **argv)
 {
 
@@ -875,7 +905,7 @@ static int real_main2 (int argc, TCHAR **argv)
        }
 
 #ifdef NATMEM_OFFSET
-       preinit_shm ();
+       //preinit_shm ();
 #endif
 
        if (restart_config[0])
@@ -939,34 +969,9 @@ static int real_main2 (int argc, TCHAR **argv)
        /* force sound settings change */
        currprefs.produce_sound = 0;
 
-#ifdef AUTOCONFIG
-       rtarea_setup ();
-#endif
-#ifdef FILESYS
-       rtarea_init ();
-       uaeres_install ();
-       hardfile_install ();
-#endif
        savestate_init ();
-#ifdef SCSIEMU
-       scsi_reset ();
-       scsidev_install ();
-#endif
-#ifdef SANA2
-       netdev_install ();
-#endif
-#ifdef UAESERIAL
-       uaeserialdev_install ();
-#endif
        keybuf_init (); /* Must come after init_joystick */
 
-#ifdef AUTOCONFIG
-       expansion_init ();
-#endif
-#ifdef FILESYS
-       filesys_install ();
-#endif
-       memory_init ();
        memory_reset ();
 
 #ifdef AUTOCONFIG
index a9b728ac8f2a5d493a6d2a7b19812c78ba050342..f083c67dbb4ea0e16d1e28eaa99611eef7015d08 100644 (file)
@@ -39,6 +39,7 @@ int candirect = -1;
 /* Set by each memory handler that does not simply access real memory. */
 int special_mem;
 #endif
+static int mem_hardreset = 3;
 
 static bool isdirectjit (void)
 {
@@ -78,12 +79,6 @@ uae_u32 allocated_cardmem;
 uae_u8 ce_banktype[65536];
 uae_u8 ce_cachable[65536];
 
-#if defined(CPU_64_BIT)
-uae_u32 max_z3fastmem = 2048UL * 1024 * 1024;
-#else
-uae_u32 max_z3fastmem = 512 * 1024 * 1024;
-#endif
-
 static size_t bootrom_filepos, chip_filepos, bogo_filepos, rom_filepos, a3000lmem_filepos, a3000hmem_filepos;
 
 /* Set if we notice during initialization that settings changed,
@@ -1954,8 +1949,10 @@ static shmpiece *find_shmpiece (uae_u8 *base)
 
 static void delete_shmmaps (uae_u32 start, uae_u32 size)
 {
+#if 0
        if (!needmman ())
                return;
+#endif
 
        while (size) {
                uae_u8 *base = mem_banks[bankindex (start)]->baseaddr;
@@ -2001,8 +1998,10 @@ static void add_shmmaps (uae_u32 start, addrbank *what)
        shmpiece *y;
        uae_u8 *base = what->baseaddr;
 
+#if 0
        if (!needmman ())
                return;
+#endif
        if (!base)
                return;
 
@@ -2033,10 +2032,12 @@ uae_u8 *mapped_malloc (size_t s, const TCHAR *file)
        shmpiece *x;
        static int recurse;
 
+#if 0
        if (!needmman ()) {
                nocanbang ();
                return xcalloc (uae_u8, s + 4);
        }
+#endif
 
        id = shmget (IPC_PRIVATE, s, 0x1ff, file);
        if (id == -1) {
@@ -2391,12 +2392,30 @@ ULONG getz2endaddr (void)
        return start + 2 * 1024 * 1024;
 }
 
+void memory_clear (void)
+{
+       mem_hardreset = 0;
+       if (savestate_state == STATE_RESTORE)
+               return;
+       if (chipmemory)
+               memset (chipmemory, 0, allocated_chipmem);
+       if (bogomemory)
+               memset (bogomemory, 0, allocated_bogomem);
+       if (a3000lmemory)
+               memset (a3000lmemory, 0, allocated_a3000lmem);
+       if (a3000hmemory)
+               memset (a3000hmemory, 0, allocated_a3000hmem);
+       expansion_clear ();
+}
 
 void memory_reset (void)
 {
        int bnk, bnk_end;
        bool gayleorfatgary;
 
+       if (mem_hardreset > 2)
+               memory_init ();
+
        be_cnt = 0;
        currprefs.chipmem_size = changed_prefs.chipmem_size;
        currprefs.bogomem_size = changed_prefs.bogomem_size;
@@ -2425,9 +2444,11 @@ void memory_reset (void)
        allocate_memory ();
        chipmem_setindirect ();
 
-       if (_tcscmp (currprefs.romfile, changed_prefs.romfile) != 0
+       if (mem_hardreset > 1
+               || _tcscmp (currprefs.romfile, changed_prefs.romfile) != 0
                || _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0)
        {
+               protect_roms (false);
                write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile);
                kickstart_rom = 1;
                a1000_handle_kickstart (0);
@@ -2486,6 +2507,7 @@ void memory_reset (void)
                }
                patch_kick ();
                write_log (_T("ROM loader end\n"));
+               protect_roms (true);
        }
 
        if (cloanto_rom && currprefs.maprom < 0x01000000)
@@ -2660,11 +2682,17 @@ void memory_reset (void)
        }
 #endif
 #endif
+       if (mem_hardreset)
+               memory_clear ();
+
        write_log (_T("memory init end\n"));
 }
 
+
 void memory_init (void)
 {
+       virtualdevice_init ();
+
        allocated_chipmem = 0;
        allocated_bogomem = 0;
        kickmemory = 0;
@@ -2690,6 +2718,7 @@ void memory_init (void)
        currprefs.romextfile[0] = 0;
 
 #ifdef ACTION_REPLAY
+       action_replay_unload (0);
        action_replay_load ();
        action_replay_init (1);
 #ifdef ACTION_REPLAY_HRTMON
@@ -2741,19 +2770,10 @@ void memory_cleanup (void)
 #endif
 }
 
-void memory_hardreset (void)
+void memory_hardreset (int mode)
 {
-       if (savestate_state == STATE_RESTORE)
-               return;
-       if (chipmemory)
-               memset (chipmemory, 0, allocated_chipmem);
-       if (bogomemory)
-               memset (bogomemory, 0, allocated_bogomem);
-       if (a3000lmemory)
-               memset (a3000lmemory, 0, allocated_a3000lmem);
-       if (a3000hmemory)
-               memset (a3000hmemory, 0, allocated_a3000hmem);
-       expansion_clear ();
+       if (mode + 1 > mem_hardreset)
+               mem_hardreset = mode + 1;
 }
 
 void map_banks (addrbank *bank, int start, int size, int realsize)
index c3022614b88bbac603e11c22dbd5db81d37c3206..b308217630839be93549fe4f8b80da9ae532d73e 100644 (file)
@@ -4284,7 +4284,7 @@ void m68k_go (int may_quit)
                        custom_reset (hardreset);
                        m68k_reset (hardreset);
                        if (hardreset) {
-                               memory_hardreset ();
+                               memory_clear ();
                                write_log (_T("hardreset, memory cleared\n"));
                        }
 #ifdef SAVESTATE
index 70dac7217df946bd1c3bf795a9e31a70d703df63..6ba4abcae23e96098b92b2270e77e2547ac1faa5 100644 (file)
@@ -146,7 +146,7 @@ static bool rawhid_found;
 static uae_s16 axisold[MAX_INPUT_DEVICES][256];
 
 int no_rawinput = 0;
-int no_directinput = 1;
+int no_directinput = 0;
 static int dinput_enum_all;
 
 int dinput_winmouse (void)
@@ -2570,7 +2570,7 @@ static int di_do_init (void)
        if (!rawhid_found)
                rawinput_enabled_hid = 0;
 
-       if (!no_directinput) {
+       if (!no_directinput || !rawinput_enabled_keyboard || !rawinput_enabled_mouse) {
                hr = DirectInput8Create (hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID *)&g_lpdi, NULL);
                if (FAILED (hr)) {
                        write_log (_T("DirectInput8Create failed, %s\n"), DXError (hr));
@@ -2587,8 +2587,10 @@ static int di_do_init (void)
                                        write_log (_T("DirectInput enumeration.. Pointing devices..\n"));
                                        g_lpdi->EnumDevices (DI8DEVCLASS_POINTER, di_enumcallback, 0, DIEDFL_ATTACHEDONLY);
                                }
-                               write_log (_T("DirectInput enumeration.. Game controllers..\n"));
-                               g_lpdi->EnumDevices (DI8DEVCLASS_GAMECTRL, di_enumcallbackj, 0, DIEDFL_ATTACHEDONLY);
+                               if (!no_directinput) {
+                                       write_log (_T("DirectInput enumeration.. Game controllers..\n"));
+                                       g_lpdi->EnumDevices (DI8DEVCLASS_GAMECTRL, di_enumcallbackj, 0, DIEDFL_ATTACHEDONLY);
+                               }
                        }
                }
        }
index afb144c3b6af079e4f4c79d6c77c7f2467233fe2..1dbaf76faf4184c98273b39bc0ec971546a337fc 100644 (file)
@@ -30,7 +30,9 @@
 #include "hq2x_d3d.h"
 #include "zfile.h"
 #include "uae.h"
+
 extern int D3DEX, d3ddebug;
+int forcedframelatency = -1;
 
 #include <d3d9.h>
 #include <d3dx9.h>
@@ -2315,9 +2317,23 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int depth, int mmult)
                        write_log (_T("%s: CreateQuery(D3DQUERYTYPE_EVENT) failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
        }
        if (d3ddevex) {
-               hr = d3ddevex->SetMaximumFrameLatency (vsync ? 1 : 0);
+               UINT v = 12345;
+               hr = d3ddevex->GetMaximumFrameLatency (&v);
+               //write_log (L"GetMaximumFrameLatency=%d\n", v);
+               if (FAILED (hr)) {
+                       write_log (_T("%s: GetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
+                       v = 1;
+               }
+               hr = S_OK;
+               if (forcedframelatency >= 0)
+                       hr = d3ddevex->SetMaximumFrameLatency (forcedframelatency);
+               else if (v > 1 || !vsync)
+                       hr = d3ddevex->SetMaximumFrameLatency (vsync ? 1 : 0);
                if (FAILED (hr))
                        write_log (_T("%s: SetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr));
+               //v = 12345;
+               //hr = d3ddevex->GetMaximumFrameLatency (&v);
+               //write_log (L"GetMaximumFrameLatency=%d\n", v);
        }
 
        return 0;
index b690fdc77a75017f830b5df7964c77781876ad36..0b7cd4b6e6868edb31152ddf42444710daf7a946 100644 (file)
@@ -48,7 +48,7 @@
 //on my system it work ok with 10 but who
 //know when windows rest for a while
 //with sysex size of 40 win can 8 sec sleep
-#define        INBUFFLEN 18000       //if this is not enough a warning come
+#define        INBUFFLEN 120000 //if this is not enough a warning come
 int midi_inbuflen = INBUFFLEN;
 
 static int overflow,only_one_time;
@@ -159,7 +159,7 @@ static void MidiOut_Free(void)
 
        for(i = 0; i < out_allocated; i++) {
                if(outbuffer[i])  {
-                       free(outbuffer[i]);
+                       xfree(outbuffer[i]);
                        outbufferlength[i] = 0;
                        outbuffer[i] = NULL;
                }
index 982962b5685b58c1d99952d02c9791b3d999a9d4..dc58e518ffa0495ed4064ec13b6f416038c6aa7e 100644 (file)
 
 #if defined(NATMEM_OFFSET)
 
+#define VAMODE 1
+
+uae_u32 max_z3fastmem;
+
 /* JIT can access few bytes outside of memory block of it executes code at the very end of memory block */
 #define BARRIER 32
 
@@ -26,6 +30,7 @@ static uae_u8 *p96mem_offset;
 static int p96mem_size;
 static SYSTEM_INFO si;
 int maxmem;
+uae_u32 natmem_size;
 
 static uae_u8 *virtualallocwithlock (LPVOID addr, SIZE_T size, DWORD allocationtype, DWORD protect)
 {
@@ -104,9 +109,17 @@ void mman_ResetWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize)
 static uae_u64 size64;
 typedef BOOL (CALLBACK* GLOBALMEMORYSTATUSEX)(LPMEMORYSTATUSEX);
 
-void preinit_shm (void)
+static void clear_shm (void)
+{
+       shm_start = NULL;
+       for (int i = 0; i < MAX_SHMID; i++) {
+               memset (&shmids[i], 0, sizeof (struct shmid_ds));
+               shmids[i].key = -1;
+       }
+}
+
+bool preinit_shm (void)
 {
-       int i;
        uae_u64 total64;
        uae_u64 totalphys64;
        MEMORYSTATUS memstats;
@@ -122,7 +135,7 @@ void preinit_shm (void)
        p96mem_offset = NULL;
 
        GetSystemInfo (&si);
-       max_allowed_mman = 1536;
+       max_allowed_mman = 512;
        if (os_64bit)
                max_allowed_mman = 2048;
 
@@ -154,21 +167,33 @@ void preinit_shm (void)
                size64 = 8 * 1024 * 1024;
        if (max_allowed_mman * 1024 * 1024 > size64)
                max_allowed_mman = size64 / (1024 * 1024);
-       max_z3fastmem = max_allowed_mman * 1024 * 1024;
-       if (max_z3fastmem < 512 * 1024 * 1024)
-               max_z3fastmem = 512 * 1024 * 1024;
 
-       shm_start = 0;
-       for (i = 0; i < MAX_SHMID; i++) {
-               shmids[i].attached = 0;
-               shmids[i].key = -1;
-               shmids[i].size = 0;
-               shmids[i].addr = NULL;
-               shmids[i].name[0] = 0;
+       natmem_size = max_allowed_mman * 1024 * 1024;
+       if (natmem_size < 256 * 1024 * 1024)
+               natmem_size = 256 * 1024 * 1024;
+
+       write_log (_T("Total physical RAM %uM\n"), totalphys64 >> 20);
+       for (;;) {
+               natmem_offset = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE | (VAMODE == 1 ? MEM_WRITE_WATCH : 0), PAGE_READWRITE);
+               if (natmem_offset)
+                       break;
+               natmem_size -= 128 * 1024 * 1024;
+               if (!natmem_size) {
+                       write_log (_T("Can't allocate 256M of virtual address space!?\n"));
+                       return false;
+               }
        }
+       max_z3fastmem = natmem_size;
+       write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"),
+               natmem_offset, (uae_u8*)natmem_offset + natmem_size,
+               natmem_size, natmem_size >> 20);
+
+       clear_shm ();
+
+//     write_log (_T("Max Z3FastRAM %dM. Total physical RAM %uM\n"), max_z3fastmem >> 20, totalphys64 >> 20);
 
-       write_log (_T("Max Z3FastRAM %dM. Total physical RAM %uM\n"), max_z3fastmem >> 20, totalphys64 >> 20);
        canbang = 1;
+       return true;
 }
 
 static void resetmem (void)
@@ -187,24 +212,29 @@ static void resetmem (void)
                        continue;
                if (!s->natmembase)
                        continue;
+               if (s->fake)
+                       continue;
+               if (((uae_u8*)s->attached - (uae_u8*)s->natmembase) >= 0x10000000)
+                       continue;
                shmaddr = natmem_offset + ((uae_u8*)s->attached - (uae_u8*)s->natmembase);
                result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE);
                if (result != shmaddr)
-                       write_log (_T("NATMEM: realloc(%p,%d,%d) failed, err=%x\n"), shmaddr, size, s->mode, GetLastError ());
+                       write_log (_T("NATMEM: realloc(%p-%p,%d,%d,%s) failed, err=%d\n"), shmaddr, shmaddr + size, size, s->mode, s->name, GetLastError ());
                else
-                       write_log (_T("NATMEM: rellocated(%p,%d,%s)\n"), shmaddr, size, s->name);
+                       write_log (_T("NATMEM: rellocated(%p-%p,%d,%s)\n"), shmaddr, shmaddr + size, size, s->name);
        }
 }
 
 static ULONG getz2rtgaddr (void)
 {
        ULONG start;
-       start = currprefs.fastmem_size;
-       while (start & (currprefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
+       start = changed_prefs.fastmem_size;
+       while (start & (changed_prefs.rtgmem_size - 1) && start < 4 * 1024 * 1024)
                start += 1024 * 1024;
        return start + 2 * 1024 * 1024;
 }
 
+#if 0
 int init_shm (void)
 {
        uae_u32 size, totalsize, z3size, natmemsize;
@@ -262,11 +292,13 @@ restart:
                        rtgbarrier = 0;
                        rtgextra = 0;
                }
-               blah = (uae_u8*)VirtualAlloc (NULL, natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize, MEM_RESERVE, PAGE_READWRITE);
+               natmem_size = natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize;
+               blah = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE, PAGE_READWRITE);
                if (blah) {
                        natmem_offset = blah;
                        break;
                }
+               natmem_size = 0;
                write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"),
                        natmemsize >> 20, GetLastError (), (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20);
                if (!lowmem ()) {
@@ -341,7 +373,209 @@ restart:
 
        return canbang;
 }
+#endif
+
+static uae_u8 *va (uae_u32 offset, uae_u32 len, DWORD alloc, DWORD protect)
+{
+       uae_u8 *addr;
+
+       addr = (uae_u8*)VirtualAlloc (natmem_offset + offset, len, alloc, protect);
+       if (addr) {
+               write_log (_T("VA(%p - %p, %4uM, %s)\n"),
+                       natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED"));
+               return addr;
+       }
+       write_log (_T("VA(%p - %p, %4uM, %s) failed %d\n"),
+               natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED"), GetLastError ());
+       return NULL;
+}
+
+static int doinit_shm (void)
+{
+       uae_u32 size, totalsize, z3size, natmemsize;
+       uae_u32 rtgbarrier, z3chipbarrier, rtgextra;
+       int rounds = 0;
+       ULONG z3rtgmem_size = changed_prefs.rtgmem_type ? changed_prefs.rtgmem_size : 0;
 
+       for (;;) {
+               int lowround = 0;
+               uae_u8 *blah = NULL;
+               if (rounds > 0)
+                       write_log (_T("NATMEM: retrying %d..\n"), rounds);
+               rounds++;
+
+               z3size = 0;
+               size = 0x1000000;
+               rtgextra = 0;
+               z3chipbarrier = 0;
+               rtgbarrier = si.dwPageSize;
+               if (changed_prefs.cpu_model >= 68020)
+                       size = 0x10000000;
+               if (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size || changed_prefs.z3chipmem_size) {
+                       z3size = changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size + (changed_prefs.z3fastmem_start - 0x10000000);
+                       if (z3rtgmem_size) {
+                               rtgbarrier = 16 * 1024 * 1024 - ((changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size) & 0x00ffffff);
+                       }
+                       if (changed_prefs.z3chipmem_size && (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size))
+                               z3chipbarrier = 16 * 1024 * 1024;
+               } else {
+                       rtgbarrier = 0;
+               }
+               totalsize = size + z3size + z3rtgmem_size;
+               while (totalsize > size64) {
+                       int change = lowmem ();
+                       if (!change)
+                               return 0;
+                       write_log (_T("NATMEM: %d, %dM > %dM = %dM\n"), ++lowround, totalsize >> 20, size64 >> 20, (totalsize - change) >> 20);
+                       totalsize -= change;
+               }
+               if ((rounds > 1 && totalsize < 0x10000000) || rounds > 20) {
+                       write_log (_T("NATMEM: No special area could be allocated (3)!\n"));
+                       return 0;
+               }
+               natmemsize = size + z3size;
+
+               if (z3rtgmem_size) {
+                       rtgextra = si.dwPageSize;
+               } else {
+                       rtgbarrier = 0;
+                       rtgextra = 0;
+               }
+               if (natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize <= natmem_size)
+                       break;
+               write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"),
+                       natmemsize >> 20, GetLastError (), (changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20);
+               if (!lowmem ()) {
+                       write_log (_T("NATMEM: No special area could be allocated (2)!\n"));
+                       return 0;
+               }
+       }
+
+#if VAMODE == 1
+
+       p96mem_offset = NULL;
+       p96mem_size = z3rtgmem_size;
+       if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) {
+               p96mem_offset = natmem_offset + natmemsize + rtgbarrier + z3chipbarrier;
+       } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) {
+               p96mem_offset = natmem_offset + getz2rtgaddr ();
+       }
+
+#else
+
+       if (p96mem_offset)
+               VirtualFree (p96mem_offset, 0, MEM_RELEASE);
+       p96mem_offset = NULL;
+       p96mem_size = z3rtgmem_size;
+       if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) {
+               uae_u32 s, l;
+               VirtualFree (natmem_offset, 0, MEM_RELEASE);
+
+               s = 0;
+               l = natmemsize + rtgbarrier + z3chipbarrier;
+               if (!va (s, l, MEM_RESERVE, PAGE_READWRITE))
+                       return 0;
+
+               s = natmemsize + rtgbarrier + z3chipbarrier;
+               l = p96mem_size + rtgextra;
+               p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE);
+               if (!p96mem_offset) {
+                       currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+                       z3rtgmem_size = 0;
+                       write_log (_T("NATMEM: failed to allocate special Picasso96 GFX RAM, err=%d\n"), GetLastError ());
+               }
+
+#if 0
+               s = natmemsize + rtgbarrier + z3chipbarrier + p96mem_size + rtgextra + 4096;
+               l = natmem_size - s - 4096;
+               if (natmem_size > l) {
+                       if (!va (s, l,  MEM_RESERVE, PAGE_READWRITE))
+                               return 0;
+               }
+#endif
+
+       } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) {
+
+               uae_u32 s, l;
+               VirtualFree (natmem_offset, 0, MEM_RELEASE);
+               // Chip + Z2Fast
+               s = 0;
+               l = 2 * 1024 * 1024 + changed_prefs.fastmem_size;
+               if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) {
+                       currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+               }
+               // After RTG
+               s = 2 * 1024 * 1024 + 8 * 1024 * 1024;
+               l = natmem_size - (2 * 1024 * 1024 + 8 * 1024 * 1024) + si.dwPageSize;
+               if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) {
+                       currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+               }
+               // RTG
+               s = getz2rtgaddr ();
+               l = 10 * 1024 * 1024 - getz2rtgaddr ();
+               p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE);
+               if (!p96mem_offset) {
+                       currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0;
+               }
+
+       } else {
+
+               VirtualFree (natmem_offset, 0, MEM_RELEASE);
+               if (!VirtualAlloc (natmem_offset, natmem_size, MEM_RESERVE, PAGE_READWRITE)) {
+                       write_log (_T("NATMEM: No special area could be reallocated! (1) err=%d\n"), GetLastError ());
+                       return 0;
+               }
+       }
+#endif
+       if (!natmem_offset) {
+               write_log (_T("NATMEM: No special area could be allocated! err=%d\n"), GetLastError ());
+       } else {
+               write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"),
+                       natmem_offset, (uae_u8*)natmem_offset + natmemsize,
+                       natmemsize, natmemsize >> 20);
+               if (changed_prefs.rtgmem_size)
+                       write_log (_T("NATMEM: P96 special area: 0x%p-0x%p (%08x %dM)\n"),
+                       p96mem_offset, (uae_u8*)p96mem_offset + changed_prefs.rtgmem_size,
+                       changed_prefs.rtgmem_size, changed_prefs.rtgmem_size >> 20);
+               canbang = 1;
+               if (p96mem_size)
+                       natmem_offset_end = p96mem_offset + p96mem_size;
+               else
+                       natmem_offset_end = natmem_offset + natmemsize;
+       }
+
+       return canbang;
+}
+
+bool init_shm (void)
+{
+       static uae_u32 oz3fastmem_size, oz3fastmem2_size;
+       static uae_u32 oz3chipmem_size;
+       static uae_u32 ortgmem_size;
+       static int ortgmem_type;
+
+       if (
+               oz3fastmem_size == changed_prefs.z3fastmem_size &&
+               oz3fastmem2_size == changed_prefs.z3fastmem2_size &&
+               oz3chipmem_size == changed_prefs.z3chipmem_size &&
+               ortgmem_size == changed_prefs.rtgmem_size &&
+               ortgmem_type == changed_prefs.rtgmem_type)
+               return false;
+
+       oz3fastmem_size = changed_prefs.z3fastmem_size;
+       oz3fastmem2_size = changed_prefs.z3fastmem2_size;
+       oz3chipmem_size = changed_prefs.z3chipmem_size;;
+       ortgmem_size = changed_prefs.rtgmem_size;
+       ortgmem_type = changed_prefs.rtgmem_type;
+
+       doinit_shm ();
+
+       resetmem ();
+       clear_shm ();
+
+       memory_hardreset (2);
+       return true;
+}
 
 void mapped_free (uae_u8 *mem)
 {
@@ -513,6 +747,7 @@ void *shmat (int shmid, void *shmaddr, int shmflg)
                                filesysptr = xcalloc (uae_u8, size);
                        result = filesysptr;
                        shmids[shmid].attached = result;
+                       shmids[shmid].fake = true;
                        return result;
                }
                if(!_tcscmp (shmids[shmid].name, _T("custmem1"))) {
@@ -589,12 +824,12 @@ void *shmat (int shmid, void *shmaddr, int shmflg)
                result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE);
                if (result == NULL) {
                        result = (void*)-1;
-                       write_log (_T("VirtualAlloc %08X - %08X %x (%dk) failed %d\n"),
+                       write_log (_T("VA %08X - %08X %x (%dk) failed %d\n"),
                                (uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size,
                                size, size >> 10, GetLastError ());
                } else {
                        shmids[shmid].attached = result;
-                       write_log (_T("VirtualAlloc %08X - %08X %x (%dk) ok (%08X)%s\n"),
+                       write_log (_T("VA %08X - %08X %x (%dk) ok (%08X)%s\n"),
                                (uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size,
                                size, size >> 10, shmaddr, p96special ? _T(" P96") : _T(""));
                }
@@ -614,7 +849,7 @@ void protect_roms (bool protect)
                if (shm->mode != PAGE_READONLY)
                        continue;
                if (!VirtualProtect (shm->attached, shm->rosize, protect ? PAGE_READONLY : PAGE_READWRITE, &old)) {
-                       write_log (_T("VirtualProtect %08X - %08X %x (%dk) failed %d\n"),
+                       write_log (_T("VP %08X - %08X %x (%dk) failed %d\n"),
                                (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size,
                                shm->size, shm->size >> 10, GetLastError ());
                }
index 8f08156999bad6bfb3f5f12495d5052c1eae460e..4314520ec0db857ab9fc021bed3e2d6414646c15 100644 (file)
 #define IDC_MBRAM2                      1051
 #define IDC_Z3CHIPMEM                   1052
 #define IDC_Z3CHIPRAM                   1053
+#define IDC_Z3CHIPRAM2                  1054
+#define IDC_MAX32RAM                    1054
 #define IDC_UAEHOME                     1070
 #define IDC_PICASSOHOME                 1071
 #define IDC_AMIGAHOME                   1072
 #define IDC_DF1WPTEXTQ                  1794
 #define IDC_RTG_Z2Z3                    1794
 #define IDC_RTG_BUFFERCNT               1795
-#define IDC_RTG_SCALE_ALLOW2            1796
 #define IDC_RTG_VBINTERRUPT             1796
 #define IDC_INPUTMAPLIST                1797
 #define IDC_PORT1_REMAP                 1798
index 15ffe6df8157260ced69c260b901fbd963331be8..69657767f83eaedb633eea2e4b8bf0136ff2b53c 100644 (file)
@@ -157,12 +157,12 @@ BEGIN
     CONTROL         "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,194,193,8,10\r
 END\r
 \r
-IDD_MEMORY DIALOGEX 0, 0, 300, 182\r
+IDD_MEMORY DIALOGEX 0, 0, 300, 205\r
 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
 EXSTYLE WS_EX_CONTEXTHELP\r
 FONT 8, "MS Sans Serif", 0, 0, 0x1\r
 BEGIN\r
-    GROUPBOX        "Memory Settings",IDC_STATIC,14,7,274,97\r
+    GROUPBOX        "Memory Settings",IDC_STATIC,14,7,274,117\r
     CONTROL         "Slider1",IDC_CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,54,22,50,20\r
     EDITTEXT        IDC_CHIPRAM,105,25,34,12,ES_CENTER | ES_READONLY\r
     CONTROL         "Slider1",IDC_SLOWMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,22,60,20\r
@@ -171,13 +171,13 @@ BEGIN
     EDITTEXT        IDC_FASTRAM,105,53,34,12,ES_CENTER | ES_READONLY\r
     CONTROL         "Slider1",IDC_Z3FASTMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,47,60,20\r
     EDITTEXT        IDC_Z3FASTRAM,243,50,34,12,ES_CENTER | ES_READONLY\r
-    GROUPBOX        "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,110,274,65\r
-    RTEXT           "Motherboard Fast:",IDC_STATIC,48,126,129,10,SS_CENTERIMAGE\r
-    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,122,59,20\r
-    EDITTEXT        IDC_MBRAM1,244,125,34,12,ES_CENTER | ES_READONLY\r
-    RTEXT           "Processor Slot Fast:",IDC_STATIC,48,149,129,10,SS_CENTERIMAGE\r
-    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,145,59,20\r
-    EDITTEXT        IDC_MBRAM2,244,148,34,12,ES_CENTER | ES_READONLY\r
+    GROUPBOX        "A3000/A4000 Advanced Memory Settings",IDC_STATIC,14,131,274,65\r
+    RTEXT           "Motherboard Fast:",IDC_STATIC,48,147,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,143,59,20\r
+    EDITTEXT        IDC_MBRAM1,244,146,34,12,ES_CENTER | ES_READONLY\r
+    RTEXT           "Processor Slot Fast:",IDC_STATIC,48,170,129,10,SS_CENTERIMAGE\r
+    CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,181,166,59,20\r
+    EDITTEXT        IDC_MBRAM2,244,169,34,12,ES_CENTER | ES_READONLY\r
     RTEXT           "Fast:",IDC_STATIC,19,49,32,15,SS_CENTERIMAGE\r
     RTEXT           "Chip:",IDC_STATIC,19,25,32,15,SS_CENTERIMAGE\r
     RTEXT           "Slow:",IDC_STATIC,144,25,32,15,SS_CENTERIMAGE\r
@@ -186,6 +186,7 @@ BEGIN
     CONTROL         "",IDC_Z3CHIPMEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,179,71,60,20\r
     EDITTEXT        IDC_Z3CHIPRAM,243,76,34,12,ES_CENTER | ES_READONLY\r
     CONTROL         "Autoconfig Fast RAM",IDC_FASTMEMAUTOCONFIG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,76,101,10\r
+    EDITTEXT        IDC_MAX32RAM,29,98,249,12,ES_CENTER | ES_READONLY\r
 END\r
 \r
 IDD_CPU DIALOGEX 0, 0, 300, 241\r
index ea2157abf2a5fefde7966d56b24d52b4936d0c6a..d8aa9a4016b7e33f07cfa555693fb4c371186210 100644 (file)
@@ -510,7 +510,7 @@ void set_volume_sound_device (struct sound_data *sd, int volume, int mute)
                hr = IDirectSoundBuffer_SetVolume (s->lpDSBsecondary, vol);
                if (FAILED (hr))
                        write_log (_T("DS: SetVolume(%d) failed: %s\n"), vol, DXError (hr));
-       } else if (sd->devicetype == SOUND_DEVICE_WASAPI || sd->devicetype == SOUND_DEVICE_WASAPI_EXCLUSIVE) {
+       } else if (sd->devicetype == SOUND_DEVICE_WASAPI) {
                if (s->pAudioVolume) {
                        float vol = 0.0;
                        if (volume < 100 && !mute)
@@ -526,7 +526,20 @@ void set_volume_sound_device (struct sound_data *sd, int volume, int mute)
                s->pavolume = volume;
        } else if (sd->devicetype == SOUND_DEVICE_XAUDIO2) {
                s->xmaster->SetVolume (mute ? 0.0 : (float)(100 - volume) / 100.0);
+       } else if (sd->devicetype == SOUND_DEVICE_WASAPI_EXCLUSIVE) {
+               sd->softvolume = -1;
+               hr = s->pAudioVolume->SetMasterVolume (1.0, NULL);
+               if (FAILED (hr))
+                       write_log (_T("AudioVolume->SetMasterVolume(1.0) failed: %08Xs\n"), hr);
+               if (volume < 100 && !mute) {
+                       sd->softvolume = (100 - volume) * 32768 / 100.0;
+                       if (sd->softvolume >= 32768)
+                               sd->softvolume = -1;
+               }
+               if (mute || volume >= 100)
+                       sd->softvolume = 0;
        }
+
 }
 
 void set_volume (int volume, int mute)
@@ -1087,9 +1100,9 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
        LPWSTR name = NULL;
        int rn[4], rncnt;
        AUDCLNT_SHAREMODE sharemode;
-       int size, v;
+       int v;
 
-       sd->devicetype = SOUND_DEVICE_WASAPI;
+       sd->devicetype = exclusive ? SOUND_DEVICE_WASAPI_EXCLUSIVE : SOUND_DEVICE_WASAPI;
        s->wasapiexclusive = exclusive;
 
        if (s->wasapiexclusive)
@@ -1213,10 +1226,7 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
        }
 
        sd->samplesize = sd->channels * 16 / 8;
-       size = sd->sndbufsize * sd->samplesize;
-       s->snd_configsize = size;
-       sd->sndbufsize = size / 32;
-       size /= sd->samplesize;
+       s->snd_configsize = sd->sndbufsize * sd->samplesize;
 
        s->bufferFrameCount = (UINT32)( // frames =
                1.0 * s->hnsRequestedDuration * // hns *
@@ -1225,8 +1235,8 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
                10000 // (hns / s) /
                + 0.5); // rounding
 
-       if (s->bufferFrameCount < size) {
-               s->bufferFrameCount = size;
+       if (s->bufferFrameCount < sd->sndbufsize) {
+               s->bufferFrameCount = sd->sndbufsize;
                s->hnsRequestedDuration = // hns =
                        (REFERENCE_TIME)(
                        10000.0 * // (hns / ms) *
@@ -1304,6 +1314,7 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive)
                }
        }
 #endif
+       sd->sndbufsize = (s->bufferFrameCount / 8) * sd->samplesize;
        v = s->bufferFrameCount * sd->samplesize;
        v /= 2;
        if (sd->sndbufsize > v)
@@ -1565,6 +1576,7 @@ static int open_sound (void)
        if (size < 64)
                size = 64;
 
+       sdp->softvolume = -1;
        num = enumerate_sound_devices ();
        if (currprefs.win32_soundcard >= num)
                currprefs.win32_soundcard = changed_prefs.win32_soundcard = 0;
@@ -2201,6 +2213,12 @@ void send_sound (struct sound_data *sd, uae_u16 *sndbuffer)
                return;
        if (sd->paused)
                return;
+       if (sd->softvolume >= 0) {
+               uae_s16 *p = (uae_s16*)sndbuffer;
+               for (int i = 0; i < sd->sndbufsize / 2; i++) {
+                       p[i] = p[i] * sd->softvolume / 32768;
+               }
+       }
        if (type == SOUND_DEVICE_AL)
                finish_sound_buffer_al (sd, sndbuffer);
        else if (type == SOUND_DEVICE_DS)
index a0209014c0fa6795a7ec7bb2bb9fd6d5d9c3af08..908e097596a2e9781529b160dfaf34535bbf7534 100644 (file)
@@ -42,6 +42,7 @@ struct sound_data
        int samplesize;
        int sndbufsize;
        int sndbufframes;
+       int softvolume;
        struct sound_dp *data;
 };
 
index 1e5d49b5815ae60d488497a0cd6bdcc6eba48ef4..4e3fbabd6d794b1ac23a89ee7ea552c1368c2c2e 100644 (file)
 
 #define MAX_SHMID 256
 
-extern uae_u8 *natmem_offset, *natmem_offset_end;
+extern uae_u8 *natmem_offset;
 
 typedef int key_t;
 typedef USHORT ushort;
 
 /* One shmid data structure for each shared memory segment in the system. */
 struct shmid_ds {
-    key_t  key;
+    key_t key;
     size_t size;
        size_t rosize;
-    void   *addr;
-    TCHAR  name[MAX_PATH];
-    void   *attached;
-    int    mode;
-    void   *natmembase;
+    void  *addr;
+    TCHAR name[MAX_PATH];
+    void *attached;
+    int mode;
+    void *natmembase;
+       bool fake;
 };
 
 int mprotect (void *addr, size_t len, int prot);
@@ -34,7 +35,7 @@ void *shmat (int shmid, LPVOID shmaddr, int shmflg);
 int shmdt (const void *shmaddr);
 int shmget (key_t key, size_t size, int shmflg, const TCHAR*);
 int shmctl (int shmid, int cmd, struct shmid_ds *buf);
-int init_shm (void);
+bool init_shm (void);
 
 #define PROT_READ  0x01
 #define PROT_WRITE 0x02
index 476b146bea54ca398db580e688559e935973a1f0..0658712e3bb38f68e5bcc269bea72b6ad84d8cf2 100644 (file)
@@ -4573,7 +4573,7 @@ extern int debug_rtg_blitter;
 extern int log_bsd;
 extern int inputdevice_logging;
 extern int vsync_modechangetimeout;
-
+extern int forcedframelatency;
 
 extern DWORD_PTR cpu_affinity, cpu_paffinity;
 static DWORD_PTR original_affinity = -1;
@@ -4949,6 +4949,10 @@ static int parseargs (const TCHAR *argx, const TCHAR *np, const TCHAR *np2)
                extraframewait = getval (np);
                return 2;
        }
+       if (!_tcscmp (arg, _T("framelatency"))) {
+               forcedframelatency = getval (np);
+               return 2;
+       }
 #ifdef RETROPLATFORM
        if (!_tcscmp (arg, _T("rphost"))) {
                rp_param = my_strdup (np);
@@ -5151,7 +5155,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR
                for (i = 0; argv2[i]; i++)
                        write_log (_T("%d: '%s'\n"), i + 1, argv2[i]);
        }
-       if (WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
+       if (preinit_shm () && WIN32_RegisterClasses () && WIN32_InitLibraries ()) {
                DWORD i;
 
 #ifdef RETROPLATFORM
index 1502845c63deb8ff4994c11d55d03e7a2621209b..72219b3d581f4f85b8af20520a7c0fa201c5dadb 100644 (file)
@@ -19,8 +19,8 @@
 #define LANG_DLL 1
 
 //#define WINUAEBETA _T("")
-#define WINUAEBETA _T("6")
-#define WINUAEDATE MAKEBD(2012, 7, 10)
+#define WINUAEBETA _T("7")
+#define WINUAEDATE MAKEBD(2012, 7, 20)
 #define WINUAEEXTRA _T("")
 //#define WINUAEEXTRA _T("AmiKit Preview")
 #define WINUAEREV _T("")
index bcf4cc9b7e6bb4f36c3e9899f9c591e52f8462ca..6f9df93b1c76436e0395f28c619dbf81b7cd6da3 100644 (file)
@@ -1270,6 +1270,7 @@ static void closeblankwindows (void)
                if (h) {
                        ShowWindow (h, SW_HIDE);
                        DestroyWindow (h);
+                       blankwindows[i] = NULL;
                }
        }
 }
index 2e8dcf1ad9ea4108829f560ca19f3d0b7849295c..27c62abba366f180d7b9082bd89e802f13a7289d 100644 (file)
@@ -6649,7 +6649,7 @@ static void enable_for_memorydlg (HWND hDlg)
        ew (hDlg, IDC_MBRAM2, z3);
        ew (hDlg, IDC_MBMEM2, z3);
 
-       ew (hDlg, IDC_RTG_Z2Z3, full_property_sheet);
+       ew (hDlg, IDC_RTG_Z2Z3, z3);
        ew (hDlg, IDC_RTG_8BIT, rtg);
        ew (hDlg, IDC_RTG_16BIT, rtg);
        ew (hDlg, IDC_RTG_24BIT, rtg);
@@ -6663,6 +6663,25 @@ static void enable_for_memorydlg (HWND hDlg)
        ew (hDlg, IDC_RTG_DISPLAYSELECT, rtg2);
 }
 
+extern uae_u32 natmem_size;
+static void setmax32bitram (HWND hDlg)
+{
+       TCHAR tmp[100];
+       uae_u32 size;
+
+       size = workprefs.z3fastmem_size + workprefs.z3fastmem2_size +
+               workprefs.z3chipmem_size + workprefs.rtgmem_size;
+       if (workprefs.z3chipmem_size && workprefs.z3fastmem_size)
+               size += 16 * 1024 * 1024;
+       if ((workprefs.z3fastmem_size || workprefs.z3chipmem_size) && workprefs.rtgmem_size)
+               size += 16 * 1024 * 1024;
+
+       _stprintf (tmp, L"Total configured 32-bit RAM: %dM, reserved: %dM",
+               size / (1024 * 1024), (natmem_size - 256 * 1024 * 1024) / (1024 * 1024));
+       SetDlgItemText (hDlg, IDC_MAX32RAM, tmp);
+}
+
+
 static int manybits (int v, int mask)
 {
        int i, cnt;
@@ -6893,6 +6912,9 @@ static void values_to_memorydlg (HWND hDlg)
        }
        SendDlgItemMessage (hDlg, IDC_MBMEM2, TBM_SETPOS, TRUE, mem_size);
        SetDlgItemText (hDlg, IDC_MBRAM2, memsize_names[msi_gfx[mem_size]]);
+
+       setmax32bitram (hDlg);
+
 }
 
 static void fix_values_memorydlg (void)
@@ -9022,6 +9044,8 @@ static void inithardfile (HWND hDlg)
        SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_RESETCONTENT, 0, 0);
        WIN32GUI_LoadUIString (IDS_HF_FS_CUSTOM, tmp, sizeof (tmp) / sizeof (TCHAR));
        SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("OFS/FFS/RDB"));
+       SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("PFS3"));
+       SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("PDS3"));
        SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("SFS"));
        SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_ADDSTRING, 0, (LPARAM)tmp);
        SendDlgItemMessage (hDlg, IDC_HF_TYPE, CB_SETCURSEL, 0, 0);
@@ -9029,10 +9053,21 @@ static void inithardfile (HWND hDlg)
 
 static void sethfdostype (HWND hDlg, int idx)
 {
-       if (idx == 1)
+       switch (idx)
+       {
+       case 1:
+               SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x50465300"));
+       break;
+       case 2:
+               SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x50445300"));
+       break;
+       case 3:
                SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T("0x53465300"));
-       else
+       break;
+       default:
                SetDlgItemText (hDlg, IDC_HF_DOSTYPE, _T(""));
+       break;
+       }
 }
 
 static void hardfile_testrdb (HWND hDlg, struct hfdlg_vals *hdf)
@@ -14664,6 +14699,17 @@ static int init_page (int tmpl, int icon, int title,
 }
 
 static RECT dialog_rect;
+static bool dodialogmousemove (void)
+{
+       if (full_property_sheet || isfullscreen () <= 0)
+               return false;
+       for (int i = 0; Displays[i].monitorid; i++) {
+               struct MultiDisplay *md = &Displays[i];
+               if (md->rect.right - md->rect.left >= 640 && md->rect.bottom - md->rect.top >= 480)
+                       return false;
+       }
+       return true;
+}
 
 static void dialogmousemove (HWND hDlg)
 {
@@ -14676,7 +14722,7 @@ static void dialogmousemove (HWND hDlg)
        int xstart, ystart;
        MONITORINFOEX pmi;
 
-       if (full_property_sheet || isfullscreen () <= 0)
+       if (!dodialogmousemove ())
                return;
        pmi.cbSize = sizeof (pmi);
        GetMonitorInfo (MonitorFromWindow (hAmigaWnd, MONITOR_DEFAULTTOPRIMARY), (LPMONITORINFO)&pmi);
index 93d606c94bcb3abede63991e45d07628b6ba012b..6547e21ab122abb89a7a90b656fce17036408831 100644 (file)
@@ -1,6 +1,23 @@
 
 - restore only single input target to default.
 
+Beta 7:
+
+- Directory filesystem 64-bit seek (ACTION_CHANGE_FILE_POSITION64) broke in 240b27
+- -nodirectinput mode was always enabled. (b6)
+- -nodirectinput does not anymore disable mouse/keyboard directinput enumeration if rawinput fails to initialize.
+- Syncronize clock enabled and loading new config crashed in some situations (b6)
+- Blitter emulation didn't leave correct data in blitter's B data register after linedraw finished, fixes
+  No Way demo by Academy that seems to use wrong minterm that requires correct static value in B data register.
+- WASAPI exclusive software volume control support. It seems normal WASAPI volume control does nothing in exclusive mode.
+- Added support for unimplemented integer instructions to 68k emulation code generators. Not yet in use.
+  (This is easy part, unimplemented floating point support is very difficult because it requires special FPU stack frame)
+
+- Experimental memory space rewrite. Now WinUAE reserves address space as much as possible (~1.6G if 64-bit OS, 512M if 32-bit, note
+  that this is only reserved space, actual memory is not yet allocated). Allows more stable on the fly memory size changes.
+  It is not guaranteed that this is safe to use and won't cause side-effects or other bad behavior or loss of performance,
+  please test and report.
+
 Beta 6:
 
 - PC raw MFM decoding improved (uaeunp, Amiga/ST/PC multiformat PC images didn't decode properly)
index 59988bdf0fc495e5db0233443931b3bae83c61b6..8d0a165a35bf6456d0d0dc857b26f6740fbc1239 100644 (file)
--- a/table68k
+++ b/table68k
 %             2: 68020
 %             3: 68030
 %             4: 68040
-%             5: 68060 (not used to produce a cputbl)
+%             5: 68060
 %                        [Everything from 68020 possibly allows for FPU emulation]
+%   Unimplemented after:
+%             0: Normal
+%             3: Not implemented in 68030 and later
+%             4: Not implemented in 68040 and later
+%             5: Not implemented in 68060
 %   privilege level 0: not privileged
 %                   1: unprivileged only on 68000 (check regs.s)
 %                   2: privileged                 (check regs.s)
 % instruction
 %
 
-0000 0000 0011 1100:00:XNZVC:XNZVC:10: ORSR.B  #1
-0000 0000 0111 1100:02:?????:?????:10: ORSR.W  #1
-0000 0zz0 11ss sSSS:20:?????:?????:11: CHK2.z  #1,s[!Dreg,Areg,Aipi,Apdi,Immd]
-0000 0000 zzdd dDDD:00:-NZ00:-----:13: OR.z    #z,d[!Areg]
-0000 0010 0011 1100:00:XNZVC:XNZVC:10: ANDSR.B #1
-0000 0010 0111 1100:02:?????:?????:10: ANDSR.W #1
-0000 0010 zzdd dDDD:00:-NZ00:-----:13: AND.z   #z,d[!Areg]
-0000 0100 zzdd dDDD:00:XNZVC:-----:13: SUB.z   #z,d[!Areg]
-0000 0110 zzdd dDDD:00:XNZVC:-----:13: ADD.z   #z,d[!Areg]
-0000 0110 11ss sSSS:20:?????:?????:10: CALLM   s[!Dreg,Areg,Aipi,Apdi,Immd]
-0000 0110 11ss sSSS:20:?????:?????:10: RTM     s[Dreg,Areg]
-0000 1000 00ss sSSS:00:--Z--:-----:11: BTST    #1,s[!Areg]
-0000 1000 01ss sSSS:00:--Z--:-----:13: BCHG    #1,s[!Areg,Immd]
-0000 1000 10ss sSSS:00:--Z--:-----:13: BCLR    #1,s[!Areg,Immd]
-0000 1000 11ss sSSS:00:--Z--:-----:13: BSET    #1,s[!Areg,Immd]
-0000 1010 0011 1100:00:XNZVC:XNZVC:10: EORSR.B #1
-0000 1010 0111 1100:02:?????:?????:10: EORSR.W #1
-0000 1010 zzdd dDDD:00:-NZ00:-----:13: EOR.z   #z,d[!Areg]
-0000 1100 zzss sSSS:00:-NZVC:-----:11: CMP.z   #z,s[!Areg,Immd]
+0000 0000 0011 1100:000:XNZVC:XNZVC:10: ORSR.B  #1
+0000 0000 0111 1100:002:?????:?????:10: ORSR.W  #1
+0000 0zz0 11ss sSSS:250:?????:?????:11: CHK2.z  #1,s[!Dreg,Areg,Aipi,Apdi,Immd]
+0000 0000 zzdd dDDD:000:-NZ00:-----:13: OR.z    #z,d[!Areg]
+0000 0010 0011 1100:000:XNZVC:XNZVC:10: ANDSR.B #1
+0000 0010 0111 1100:002:?????:?????:10: ANDSR.W #1
+0000 0010 zzdd dDDD:000:-NZ00:-----:13: AND.z   #z,d[!Areg]
+0000 0100 zzdd dDDD:000:XNZVC:-----:13: SUB.z   #z,d[!Areg]
+0000 0110 zzdd dDDD:000:XNZVC:-----:13: ADD.z   #z,d[!Areg]
+0000 0110 11ss sSSS:230:?????:?????:10: CALLM   s[!Dreg,Areg,Aipi,Apdi,Immd]
+0000 0110 11ss sSSS:230:?????:?????:10: RTM     s[Dreg,Areg]
+0000 1000 00ss sSSS:000:--Z--:-----:11: BTST    #1,s[!Areg]
+0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG    #1,s[!Areg,Immd]
+0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR    #1,s[!Areg,Immd]
+0000 1000 11ss sSSS:000:--Z--:-----:13: BSET    #1,s[!Areg,Immd]
+0000 1010 0011 1100:000:XNZVC:XNZVC:10: EORSR.B #1
+0000 1010 0111 1100:002:?????:?????:10: EORSR.W #1
+0000 1010 zzdd dDDD:000:-NZ00:-----:13: EOR.z   #z,d[!Areg]
+0000 1100 zzss sSSS:000:-NZVC:-----:11: CMP.z   #z,s[!Areg,Immd]
 
-0000 1010 11ss sSSS:20:?????:?????:13: CAS.B   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1100 11ss sSSS:20:?????:?????:13: CAS.W   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1100 1111 1100:20:?????:?????:10: CAS2.W  #2
-0000 1110 zzss sSSS:22:?????:?????:13: MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1110 11ss sSSS:20:?????:?????:13: CAS.L   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
-0000 1110 1111 1100:20:?????:?????:10: CAS2.L  #2
+0000 1010 11ss sSSS:200:?????:?????:13: CAS.B   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1100 11ss sSSS:200:?????:?????:13: CAS.W   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1100 1111 1100:250:?????:?????:10: CAS2.W  #2
+0000 1110 zzss sSSS:202:?????:?????:13: MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1110 11ss sSSS:250:?????:?????:13: CAS.L   #1,s[!Dreg,Areg,Immd,PC8r,PC16]
+0000 1110 1111 1100:250:?????:?????:10: CAS2.L  #2
 
-0000 rrr1 00dd dDDD:00:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr
-0000 rrr1 01dd dDDD:00:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr
-0000 rrr1 10dd dDDD:00:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16]
-0000 rrr1 11dd dDDD:00:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16]
-0000 rrr1 00ss sSSS:00:--Z--:-----:11: BTST    Dr,s[!Areg]
-0000 rrr1 01ss sSSS:00:--Z--:-----:13: BCHG    Dr,s[!Areg,Immd]
-0000 rrr1 10ss sSSS:00:--Z--:-----:13: BCLR    Dr,s[!Areg,Immd]
-0000 rrr1 11ss sSSS:00:--Z--:-----:13: BSET    Dr,s[!Areg,Immd]
+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 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]
+0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET    Dr,s[!Areg,Immd]
 
-0001 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.B  s,d[!Areg]
-0010 DDDd ddss sSSS:00:-----:-----:12: MOVEA.L s,d[Areg]
-0010 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.L  s,d[!Areg]
-0011 DDDd ddss sSSS:00:-----:-----:12: MOVEA.W s,d[Areg]
-0011 DDDd ddss sSSS:00:-NZ00:-----:12: MOVE.W  s,d[!Areg]
+0001 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.B  s,d[!Areg]
+0010 DDDd ddss sSSS:000:-----:-----:12: MOVEA.L s,d[Areg]
+0010 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.L  s,d[!Areg]
+0011 DDDd ddss sSSS:000:-----:-----:12: MOVEA.W s,d[Areg]
+0011 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.W  s,d[!Areg]
 
-0100 0000 zzdd dDDD:00:XxZxC:X-Z--:30: NEGX.z  d[!Areg]
-0100 0000 11dd dDDD:01:?????:?????:10: MVSR2.W d[!Areg]
-0100 0010 zzdd dDDD:00:-0100:-----:20: CLR.z   d[!Areg]
-0100 0010 11dd dDDD:10:?????:?????:10: MVSR2.B d[!Areg]
-0100 0100 zzdd dDDD:00:XNZVC:-----:30: NEG.z   d[!Areg]
-0100 0100 11ss sSSS:00:XNZVC:-----:10: MV2SR.B s[!Areg]
-0100 0110 zzdd dDDD:00:-NZ00:-----:30: NOT.z   d[!Areg]
-0100 0110 11ss sSSS:02:?????:?????:10: MV2SR.W s[!Areg]
-0100 1000 0000 1rrr:20:-----:-----:31: LINK.L  Ar,#2
-0100 1000 00dd dDDD:00:X?Z?C:X-Z--:30: NBCD.B  d[!Areg]
-0100 1000 0100 1kkk:20:?????:?????:10: BKPT    #k
-0100 1000 01ss sSSS:00:-NZ00:-----:30: SWAP.W  s[Dreg]         
-0100 1000 01ss sSSS:00:-----:-----:00: PEA.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 1000 10dd dDDD:00:-NZ00:-----:30: EXT.W   d[Dreg]         
-0100 1000 10dd dDDD:00:-----:-----:02: MVMLE.W #1,d[!Dreg,Areg,Aipi]
-0100 1000 11dd dDDD:00:-NZ00:-----:30: EXT.L   d[Dreg]         
-0100 1000 11dd dDDD:00:-----:-----:02: MVMLE.L #1,d[!Dreg,Areg,Aipi]
-0100 1001 11dd dDDD:20:-NZ00:-----:30: EXT.B   d[Dreg]         
-0100 1010 zzss sSSS:00:-NZ00:-----:10: TST.z   s
-0100 1010 11dd dDDD:00:?????:?????:30: TAS.B   d[!Areg]
-0100 1010 1111 1100:00:?????:?????:00: ILLEGAL
-0100 1100 00ss sSSS:20:-NZVC:-----:13: MULL.L  #1,s[!Areg]
-0100 1100 01ss sSSS:20:?????:?????:13: DIVL.L  #1,s[!Areg]
-0100 1100 10ss sSSS:00:-----:-----:01: MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]
-0100 1100 11ss sSSS:00:-----:-----:01: MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]
-0100 1110 0100 JJJJ:00:-----:XNZVC:10: TRAP    #J
-0100 1110 0101 0rrr:00:-----:-----:31: LINK.W  Ar,#1
-0100 1110 0101 1rrr:00:-----:-----:30: UNLK.L  Ar
-0100 1110 0110 0rrr:02:-----:-----:10: MVR2USP.L Ar
-0100 1110 0110 1rrr:02:-----:-----:20: MVUSP2R.L Ar
-0100 1110 0111 0000:02:-----:-----:00: RESET
-0100 1110 0111 0001:00:-----:-----:00: NOP
-0100 1110 0111 0010:02:XNZVC:-----:10: STOP    #1
-0100 1110 0111 0011:02:XNZVC:-----:00: RTE
-0100 1110 0111 0100:00:?????:?????:10: RTD     #1
-0100 1110 0111 0101:00:-----:-----:00: RTS
-0100 1110 0111 0110:00:-----:XNZVC:00: TRAPV
-0100 1110 0111 0111:00:XNZVC:-----:00: RTR
-0100 1110 0111 1010:12:?????:?????:10: MOVEC2  #1
-0100 1110 0111 1011:12:?????:?????:10: MOVE2C  #1
-0100 1110 10ss sSSS:00://///://///:80: JSR.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 rrr1 00ss sSSS:20:?????:?????:11: CHK.L   s[!Areg],Dr
-0100 rrr1 10ss sSSS:00:?????:?????:11: CHK.W   s[!Areg],Dr
-0100 1110 11ss sSSS:00://///://///:80: JMP.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
-0100 rrr1 11ss sSSS:00:-----:-----:02: LEA.L   s[!Dreg,Areg,Aipi,Apdi,Immd],Ar
+0100 0000 zzdd dDDD:000:XxZxC:X-Z--:30: NEGX.z  d[!Areg]
+0100 0000 11dd dDDD:001:?????:?????:10: MVSR2.W d[!Areg]
+0100 0010 zzdd dDDD:000:-0100:-----:20: CLR.z   d[!Areg]
+0100 0010 11dd dDDD:100:?????:?????:10: MVSR2.B d[!Areg]
+0100 0100 zzdd dDDD:000:XNZVC:-----:30: NEG.z   d[!Areg]
+0100 0100 11ss sSSS:000:XNZVC:-----:10: MV2SR.B s[!Areg]
+0100 0110 zzdd dDDD:000:-NZ00:-----:30: NOT.z   d[!Areg]
+0100 0110 11ss sSSS:002:?????:?????:10: MV2SR.W s[!Areg]
+0100 1000 0000 1rrr:200:-----:-----:31: LINK.L  Ar,#2
+0100 1000 00dd dDDD:000:X?Z?C:X-Z--:30: NBCD.B  d[!Areg]
+0100 1000 0100 1kkk:200:?????:?????:10: BKPT    #k
+0100 1000 01ss sSSS:000:-NZ00:-----:30: SWAP.W  s[Dreg]         
+0100 1000 01ss sSSS:000:-----:-----:00: PEA.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 1000 10dd dDDD:000:-NZ00:-----:30: EXT.W   d[Dreg]         
+0100 1000 10dd dDDD:000:-----:-----:02: MVMLE.W #1,d[!Dreg,Areg,Aipi]
+0100 1000 11dd dDDD:000:-NZ00:-----:30: EXT.L   d[Dreg]         
+0100 1000 11dd dDDD:000:-----:-----:02: MVMLE.L #1,d[!Dreg,Areg,Aipi]
+0100 1001 11dd dDDD:200:-NZ00:-----:30: EXT.B   d[Dreg]         
+0100 1010 zzss sSSS:000:-NZ00:-----:10: TST.z   s
+0100 1010 11dd dDDD:000:?????:?????:30: TAS.B   d[!Areg]
+0100 1010 1111 1100:000:?????:?????:00: ILLEGAL
+0100 1100 00ss sSSS:250:-NZVC:-----:13: MULL.L  #1,s[!Areg]
+0100 1100 01ss sSSS:250:?????:?????:13: DIVL.L  #1,s[!Areg]
+0100 1100 10ss sSSS:000:-----:-----:01: MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]
+0100 1100 11ss sSSS:000:-----:-----:01: MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]
+0100 1110 0100 JJJJ:000:-----:XNZVC:10: TRAP    #J
+0100 1110 0101 0rrr:000:-----:-----:31: LINK.W  Ar,#1
+0100 1110 0101 1rrr:000:-----:-----:30: UNLK.L  Ar
+0100 1110 0110 0rrr:002:-----:-----:10: MVR2USP.L Ar
+0100 1110 0110 1rrr:002:-----:-----:20: MVUSP2R.L Ar
+0100 1110 0111 0000:002:-----:-----:00: RESET
+0100 1110 0111 0001:000:-----:-----:00: NOP
+0100 1110 0111 0010:002:XNZVC:-----:10: STOP    #1
+0100 1110 0111 0011:002:XNZVC:-----:00: RTE
+0100 1110 0111 0100:000:?????:?????:10: RTD     #1
+0100 1110 0111 0101:000:-----:-----:00: RTS
+0100 1110 0111 0110:000:-----:XNZVC:00: TRAPV
+0100 1110 0111 0111:000:XNZVC:-----:00: RTR
+0100 1110 0111 1010:102:?????:?????:10: MOVEC2  #1
+0100 1110 0111 1011:102:?????:?????:10: MOVE2C  #1
+0100 1110 10ss sSSS:000://///://///:80: JSR.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 rrr1 00ss sSSS:200:?????:?????:11: CHK.L   s[!Areg],Dr
+0100 rrr1 10ss sSSS:000:?????:?????:11: CHK.W   s[!Areg],Dr
+0100 1110 11ss sSSS:000://///://///:80: JMP.L   s[!Dreg,Areg,Aipi,Apdi,Immd]
+0100 rrr1 11ss sSSS:000:-----:-----:02: LEA.L   s[!Dreg,Areg,Aipi,Apdi,Immd],Ar
 
-0101 jjj0 01dd dDDD:00:-----:-----:13: ADDA.W  #j,d[Areg]
-0101 jjj0 10dd dDDD:00:-----:-----:13: ADDA.L  #j,d[Areg]
-0101 jjj0 zzdd dDDD:00:XNZVC:-----:13: ADD.z   #j,d[!Areg]
-0101 jjj1 01dd dDDD:00:-----:-----:13: SUBA.W  #j,d[Areg]
-0101 jjj1 10dd dDDD:00:-----:-----:13: SUBA.L  #j,d[Areg]
-0101 jjj1 zzdd dDDD:00:XNZVC:-----:13: SUB.z   #j,d[!Areg]
-0101 cccc 1100 1rrr:00:-----:-++++:31: DBcc.W  Dr,#1
-0101 cccc 11dd dDDD:00:-----:-++++:20: Scc.B   d[!Areg]
-0101 cccc 1111 1010:20:?????:?????:10: TRAPcc  #1
-0101 cccc 1111 1011:20:?????:?????:10: TRAPcc  #2
-0101 cccc 1111 1100:20:?????:?????:00: TRAPcc
+0101 jjj0 01dd dDDD:000:-----:-----:13: ADDA.W  #j,d[Areg]
+0101 jjj0 10dd dDDD:000:-----:-----:13: ADDA.L  #j,d[Areg]
+0101 jjj0 zzdd dDDD:000:XNZVC:-----:13: ADD.z   #j,d[!Areg]
+0101 jjj1 01dd dDDD:000:-----:-----:13: SUBA.W  #j,d[Areg]
+0101 jjj1 10dd dDDD:000:-----:-----:13: SUBA.L  #j,d[Areg]
+0101 jjj1 zzdd dDDD:000:XNZVC:-----:13: SUB.z   #j,d[!Areg]
+0101 cccc 1100 1rrr:000:-----:-++++:31: DBcc.W  Dr,#1
+0101 cccc 11dd dDDD:000:-----:-++++:20: Scc.B   d[!Areg]
+0101 cccc 1111 1010:200:?????:?????:10: TRAPcc  #1
+0101 cccc 1111 1011:200:?????:?????:10: TRAPcc  #2
+0101 cccc 1111 1100:200:?????:?????:00: TRAPcc
 
 % Bxx.L is 68020 only, but setting the CPU level to 2 would give illegal
 % instruction exceptions when compiling a 68000 only emulation, which isn't
 % what we want either.
-0110 0001 0000 0000:00://///://///:40: BSR.W   #1
-0110 0001 IIII IIII:00://///://///:40: BSR.B   #i
-0110 0001 1111 1111:00://///://///:40: BSR.L   #2
-0110 CCCC 0000 0000:00:-----:-++++:40: Bcc.W   #1
-0110 CCCC IIII IIII:00:-----:-++++:40: Bcc.B   #i
-0110 CCCC 1111 1111:00:-----:-++++:40: Bcc.L   #2
+0110 0001 0000 0000:000://///://///:40: BSR.W   #1
+0110 0001 IIII IIII:000://///://///:40: BSR.B   #i
+0110 0001 1111 1111:000://///://///:40: BSR.L   #2
+0110 CCCC 0000 0000:000:-----:-++++:40: Bcc.W   #1
+0110 CCCC IIII IIII:000:-----:-++++:40: Bcc.B   #i
+0110 CCCC 1111 1111:000:-----:-++++:40: Bcc.L   #2
 
-0111 rrr0 iiii iiii:00:-NZ00:-----:12: MOVE.L  #i,Dr
+0111 rrr0 iiii iiii:000:-NZ00:-----:12: MOVE.L  #i,Dr
 
-1000 rrr0 zzss sSSS:00:-NZ00:-----:13: OR.z    s[!Areg],Dr
-1000 rrr0 11ss sSSS:00:?????:?????:13: DIVU.W  s[!Areg],Dr
-1000 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: SBCD.B  d[Dreg],Dr      
-1000 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: SBCD.B  d[Areg-Apdi],Arp      
-1000 rrr1 zzdd dDDD:00:-NZ00:-----:13: OR.z    Dr,d[!Areg,Dreg]
-1000 rrr1 01dd dDDD:20:?????:?????:12: PACK    d[Dreg],Dr      
-1000 rrr1 01dd dDDD:20:?????:?????:12: PACK    d[Areg-Apdi],Arp      
-1000 rrr1 10dd dDDD:20:?????:?????:12: UNPK    d[Dreg],Dr      
-1000 rrr1 10dd dDDD:20:?????:?????:12: UNPK    d[Areg-Apdi],Arp      
-1000 rrr1 11ss sSSS:00:?????:?????:13: DIVS.W  s[!Areg],Dr
+1000 rrr0 zzss sSSS:000:-NZ00:-----:13: OR.z    s[!Areg],Dr
+1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W  s[!Areg],Dr
+1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B  d[Dreg],Dr      
+1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B  d[Areg-Apdi],Arp      
+1000 rrr1 zzdd dDDD:000:-NZ00:-----:13: OR.z    Dr,d[!Areg,Dreg]
+1000 rrr1 01dd dDDD:200:?????:?????:12: PACK    d[Dreg],Dr      
+1000 rrr1 01dd dDDD:200:?????:?????:12: PACK    d[Areg-Apdi],Arp      
+1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK    d[Dreg],Dr      
+1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK    d[Areg-Apdi],Arp      
+1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W  s[!Areg],Dr
 
-1001 rrr0 zzss sSSS:00:XNZVC:-----:13: SUB.z   s,Dr
-1001 rrr0 11ss sSSS:00:-----:-----:13: SUBA.W  s,Ar
-1001 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: SUBX.z  d[Dreg],Dr      
-1001 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: SUBX.z  d[Areg-Apdi],Arp      
-1001 rrr1 zzdd dDDD:00:XNZVC:-----:13: SUB.z   Dr,d[!Areg,Dreg]
-1001 rrr1 11ss sSSS:00:-----:-----:13: SUBA.L  s,Ar
+1001 rrr0 zzss sSSS:000:XNZVC:-----:13: SUB.z   s,Dr
+1001 rrr0 11ss sSSS:000:-----:-----:13: SUBA.W  s,Ar
+1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z  d[Dreg],Dr      
+1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z  d[Areg-Apdi],Arp      
+1001 rrr1 zzdd dDDD:000:XNZVC:-----:13: SUB.z   Dr,d[!Areg,Dreg]
+1001 rrr1 11ss sSSS:000:-----:-----:13: SUBA.L  s,Ar
 
-1011 rrr0 zzss sSSS:00:-NZVC:-----:11: CMP.z   s,Dr
-1011 rrr0 11ss sSSS:00:-NZVC:-----:11: CMPA.W  s,Ar
-1011 rrr1 11ss sSSS:00:-NZVC:-----:11: CMPA.L  s,Ar
-1011 rrr1 zzdd dDDD:00:-NZVC:-----:11: CMPM.z  d[Areg-Aipi],ArP
-1011 rrr1 zzdd dDDD:00:-NZ00:-----:13: EOR.z   Dr,d[!Areg]
+1011 rrr0 zzss sSSS:000:-NZVC:-----:11: CMP.z   s,Dr
+1011 rrr0 11ss sSSS:000:-NZVC:-----:11: CMPA.W  s,Ar
+1011 rrr1 11ss sSSS:000:-NZVC:-----:11: CMPA.L  s,Ar
+1011 rrr1 zzdd dDDD:000:-NZVC:-----:11: CMPM.z  d[Areg-Aipi],ArP
+1011 rrr1 zzdd dDDD:000:-NZ00:-----:13: EOR.z   Dr,d[!Areg]
 
-1100 rrr0 zzss sSSS:00:-NZ00:-----:13: AND.z   s[!Areg],Dr
-1100 rrr0 11ss sSSS:00:-NZ00:-----:13: MULU.W  s[!Areg],Dr
-1100 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: ABCD.B  d[Dreg],Dr      
-1100 rrr1 00dd dDDD:00:XxZxC:X-Z--:13: ABCD.B  d[Areg-Apdi],Arp      
-1100 rrr1 zzdd dDDD:00:-NZ00:-----:13: AND.z   Dr,d[!Areg,Dreg]
-1100 rrr1 01dd dDDD:00:-----:-----:33: EXG.L   Dr,d[Dreg]      
-1100 rrr1 01dd dDDD:00:-----:-----:33: EXG.L   Ar,d[Areg]            
-1100 rrr1 10dd dDDD:00:-----:-----:33: EXG.L   Dr,d[Areg]      
-1100 rrr1 11ss sSSS:00:-NZ00:-----:13: MULS.W  s[!Areg],Dr
+1100 rrr0 zzss sSSS:000:-NZ00:-----:13: AND.z   s[!Areg],Dr
+1100 rrr0 11ss sSSS:000:-NZ00:-----:13: MULU.W  s[!Areg],Dr
+1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B  d[Dreg],Dr      
+1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B  d[Areg-Apdi],Arp      
+1100 rrr1 zzdd dDDD:000:-NZ00:-----:13: AND.z   Dr,d[!Areg,Dreg]
+1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L   Dr,d[Dreg]      
+1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L   Ar,d[Areg]            
+1100 rrr1 10dd dDDD:000:-----:-----:33: EXG.L   Dr,d[Areg]      
+1100 rrr1 11ss sSSS:000:-NZ00:-----:13: MULS.W  s[!Areg],Dr
 
-1101 rrr0 zzss sSSS:00:XNZVC:-----:13: ADD.z   s,Dr
-1101 rrr0 11ss sSSS:00:-----:-----:13: ADDA.W  s,Ar
-1101 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: ADDX.z  d[Dreg],Dr      
-1101 rrr1 zzdd dDDD:00:XNZVC:X-Z--:13: ADDX.z  d[Areg-Apdi],Arp      
-1101 rrr1 zzdd dDDD:00:XNZVC:-----:13: ADD.z   Dr,d[!Areg,Dreg]
-1101 rrr1 11ss sSSS:00:-----:-----:13: ADDA.L  s,Ar
+1101 rrr0 zzss sSSS:000:XNZVC:-----:13: ADD.z   s,Dr
+1101 rrr0 11ss sSSS:000:-----:-----:13: ADDA.W  s,Ar
+1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z  d[Dreg],Dr      
+1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z  d[Areg-Apdi],Arp      
+1101 rrr1 zzdd dDDD:000:XNZVC:-----:13: ADD.z   Dr,d[!Areg,Dreg]
+1101 rrr1 11ss sSSS:000:-----:-----:13: ADDA.L  s,Ar
 
-1110 jjjf zz00 0RRR:00:XNZVC:-----:13: ASf.z   #j,DR
-1110 jjjf zz00 1RRR:00:XNZ0C:-----:13: LSf.z   #j,DR
-1110 jjjf zz01 0RRR:00:XNZ0C:X----:13: ROXf.z  #j,DR
-1110 jjjf zz01 1RRR:00:-NZ0C:-----:13: ROf.z   #j,DR
-1110 rrrf zz10 0RRR:00:XNZVC:X----:13: ASf.z   Dr,DR
-1110 rrrf zz10 1RRR:00:XNZ0C:X----:13: LSf.z   Dr,DR
-1110 rrrf zz11 0RRR:00:XNZ0C:X----:13: ROXf.z  Dr,DR
-1110 rrrf zz11 1RRR:00:-NZ0C:-----:13: ROf.z   Dr,DR
-1110 000f 11dd dDDD:00:XNZVC:-----:13: ASfW.W  d[!Dreg,Areg]
-1110 001f 11dd dDDD:00:XNZ0C:-----:13: LSfW.W  d[!Dreg,Areg]
-1110 010f 11dd dDDD:00:XNZ0C:X----:13: ROXfW.W d[!Dreg,Areg]
-1110 011f 11dd dDDD:00:-NZ0C:-----:13: ROfW.W  d[!Dreg,Areg]
+1110 jjjf zz00 0RRR:000:XNZVC:-----:13: ASf.z   #j,DR
+1110 jjjf zz00 1RRR:000:XNZ0C:-----:13: LSf.z   #j,DR
+1110 jjjf zz01 0RRR:000:XNZ0C:X----:13: ROXf.z  #j,DR
+1110 jjjf zz01 1RRR:000:-NZ0C:-----:13: ROf.z   #j,DR
+1110 rrrf zz10 0RRR:000:XNZVC:X----:13: ASf.z   Dr,DR
+1110 rrrf zz10 1RRR:000:XNZ0C:X----:13: LSf.z   Dr,DR
+1110 rrrf zz11 0RRR:000:XNZ0C:X----:13: ROXf.z  Dr,DR
+1110 rrrf zz11 1RRR:000:-NZ0C:-----:13: ROf.z   Dr,DR
+1110 000f 11dd dDDD:000:XNZVC:-----:13: ASfW.W  d[!Dreg,Areg]
+1110 001f 11dd dDDD:000:XNZ0C:-----:13: LSfW.W  d[!Dreg,Areg]
+1110 010f 11dd dDDD:000:XNZ0C:X----:13: ROXfW.W d[!Dreg,Areg]
+1110 011f 11dd dDDD:000:-NZ0C:-----:13: ROfW.W  d[!Dreg,Areg]
 
-1110 1000 11ss sSSS:20:?????:?????:11: BFTST   #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1001 11ss sSSS:20:?????:?????:11: BFEXTU  #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1010 11ss sSSS:20:?????:?????:13: BFCHG   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1011 11ss sSSS:20:?????:?????:11: BFEXTS  #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1100 11ss sSSS:20:?????:?????:13: BFCLR   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1101 11ss sSSS:20:?????:?????:11: BFFFO   #1,s[!Areg,Apdi,Aipi,Immd]
-1110 1110 11ss sSSS:20:?????:?????:13: BFSET   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
-1110 1111 11ss sSSS:20:?????:?????:13: BFINS   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1000 11ss sSSS:200:?????:?????:11: BFTST   #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1001 11ss sSSS:200:?????:?????:11: BFEXTU  #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1010 11ss sSSS:200:?????:?????:13: BFCHG   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1011 11ss sSSS:200:?????:?????:11: BFEXTS  #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1100 11ss sSSS:200:?????:?????:13: BFCLR   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1101 11ss sSSS:200:?????:?????:11: BFFFO   #1,s[!Areg,Apdi,Aipi,Immd]
+1110 1110 11ss sSSS:200:?????:?????:13: BFSET   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
+1110 1111 11ss sSSS:200:?????:?????:13: BFINS   #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]
 
 % floating point co processor
-1111 0010 00ss sSSS:20:?????:?????:11: FPP      #1,s
-1111 0010 01ss sSSS:20:?????:?????:11: FDBcc    #1,s[Areg-Dreg]
-1111 0010 01ss sSSS:20:?????:?????:11: FScc     #1,s[!Areg,Immd,PC8r,PC16]
-1111 0010 0111 1010:20:?????:?????:10: FTRAPcc  #1
-1111 0010 0111 1011:20:?????:?????:10: FTRAPcc  #2
-1111 0010 0111 1100:20:?????:?????:00: FTRAPcc
-1111 0010 10KK KKKK:20:?????:?????:11: FBcc     #K,#1
-1111 0010 11KK KKKK:20:?????:?????:11: FBcc     #K,#2
-1111 0011 00ss sSSS:22:?????:?????:20: FSAVE    s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]
-1111 0011 01ss sSSS:22:?????:?????:10: FRESTORE s[!Dreg,Areg,Apdi,Immd]
+1111 0010 00ss sSSS:200:?????:?????:11: FPP      #1,s
+1111 0010 01ss sSSS:200:?????:?????:11: FDBcc    #1,s[Areg-Dreg]
+1111 0010 01ss sSSS:200:?????:?????:11: FScc     #1,s[!Areg,Immd,PC8r,PC16]
+1111 0010 0111 1010:200:?????:?????:10: FTRAPcc  #1
+1111 0010 0111 1011:200:?????:?????:10: FTRAPcc  #2
+1111 0010 0111 1100:200:?????:?????:00: FTRAPcc
+1111 0010 10KK KKKK:200:?????:?????:11: FBcc     #K,#1
+1111 0010 11KK KKKK:200:?????:?????:11: FBcc     #K,#2
+1111 0011 00ss sSSS:202:?????:?????:20: FSAVE    s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]
+1111 0011 01ss sSSS:202:?????:?????:10: FRESTORE s[!Dreg,Areg,Apdi,Immd]
 
 % 68030 MMU (allowed addressing modes not checked!)
-1111 0000 00ss sSSS:32:?????:?????:11: MMUOP030 s[Aind,Ad16,Ad8r,absl,absw],#1
+1111 0000 00ss sSSS:342:?????:?????:11: MMUOP030 s[Aind,Ad16,Ad8r,absl,absw],#1
 
 % 68040/68060 instructions
-1111 0100 pp00 1rrr:42:-----:-----:02: CINVL    #p,Ar
-1111 0100 pp01 0rrr:42:-----:-----:02: CINVP    #p,Ar
-1111 0100 pp01 1rrr:42:-----:-----:00: CINVA    #p
-1111 0100 pp10 1rrr:42:-----:-----:02: CPUSHL   #p,Ar
-1111 0100 pp11 0rrr:42:-----:-----:02: CPUSHP   #p,Ar
-1111 0100 pp11 1rrr:42:-----:-----:00: CPUSHA   #p
-1111 0101 0000 0rrr:42:-----:-----:00: PFLUSHN  Ara
-1111 0101 0000 1rrr:42:-----:-----:00: PFLUSH   Ara
-1111 0101 0001 0rrr:42:-----:-----:00: PFLUSHAN Ara
-1111 0101 0001 1rrr:42:-----:-----:00: PFLUSHA  Ara
-1111 0101 0100 1rrr:42:-----:-----:00: PTESTR   Ara
-1111 0101 0110 1rrr:42:-----:-----:00: PTESTW   Ara
+1111 0100 pp00 1rrr:402:-----:-----:02: CINVL    #p,Ar
+1111 0100 pp01 0rrr:402:-----:-----:02: CINVP    #p,Ar
+1111 0100 pp01 1rrr:402:-----:-----:00: CINVA    #p
+1111 0100 pp10 1rrr:402:-----:-----:02: CPUSHL   #p,Ar
+1111 0100 pp11 0rrr:402:-----:-----:02: CPUSHP   #p,Ar
+1111 0100 pp11 1rrr:402:-----:-----:00: CPUSHA   #p
+1111 0101 0000 0rrr:402:-----:-----:00: PFLUSHN  Ara
+1111 0101 0000 1rrr:402:-----:-----:00: PFLUSH   Ara
+1111 0101 0001 0rrr:402:-----:-----:00: PFLUSHAN Ara
+1111 0101 0001 1rrr:402:-----:-----:00: PFLUSHA  Ara
+1111 0101 0100 1rrr:452:-----:-----:00: PTESTR   Ara
+1111 0101 0110 1rrr:452:-----:-----:00: PTESTW   Ara
 
 % destination register number is encoded in the following word
-1111 0110 0010 0rrr:40:-----:-----:12: MOVE16   ArP,AxP
-1111 0110 00ss sSSS:40:-----:-----:12: MOVE16   s[Dreg-Aipi],L
-1111 0110 00dd dDDD:40:-----:-----:12: MOVE16   L,d[Areg-Aipi]
-1111 0110 00ss sSSS:40:-----:-----:12: MOVE16   s[Aind],L
-1111 0110 00dd dDDD:40:-----:-----:12: MOVE16   L,d[Aipi-Aind]
+1111 0110 0010 0rrr:400:-----:-----:12: MOVE16   ArP,AxP
+1111 0110 00ss sSSS:400:-----:-----:12: MOVE16   s[Dreg-Aipi],L
+1111 0110 00dd dDDD:400:-----:-----:12: MOVE16   L,d[Areg-Aipi]
+1111 0110 00ss sSSS:400:-----:-----:12: MOVE16   s[Aind],L
+1111 0110 00dd dDDD:400:-----:-----:12: MOVE16   L,d[Aipi-Aind]
 
 % 68060
-1111 1000 0000 0000:52:?????:?????:10: LPSTOP   #1
-1111 0101 1000 1rrr:52:-----:-----:00: PLPAR    Ara
-1111 0101 1100 1rrr:52:-----:-----:00: PLPAW    Ara
+1111 1000 0000 0000:502:?????:?????:10: LPSTOP   #1
+1111 0101 1000 1rrr:502:-----:-----:00: PLPAR    Ara
+1111 0101 1100 1rrr:502:-----:-----:00: PLPAW    Ara