]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
4200b5
authorToni Wilen <twilen@winuae.net>
Sun, 10 Mar 2019 18:22:27 +0000 (20:22 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 10 Mar 2019 18:22:27 +0000 (20:22 +0200)
newcpu.cpp
od-win32/win32.h
od-win32/winuaechangelog.txt

index 8b781e1ea6ac0fabe288ad5277742661fe929547..8cfc5ba2f180f0c17dca6614634bfe7106ed875b 100644 (file)
@@ -7012,7 +7012,7 @@ static void disasm_size (TCHAR *instrname, struct instr *dp)
        }
 }
 
-static void asm_add_extensions(uae_u16 *data, int *dcntp, int mode, uae_u32 v, uae_u16 *ext, uaecptr pc, int size)
+static void asm_add_extensions(uae_u16 *data, int *dcntp, int mode, uae_u32 v, int extcnt, uae_u16 *ext, uaecptr pc, int size)
 {
        int dcnt = *dcntp;
        if (mode < 0)
@@ -7024,7 +7024,9 @@ static void asm_add_extensions(uae_u16 *data, int *dcntp, int mode, uae_u32 v, u
                data[dcnt++] = v - (pc + 2);
        }
        if (mode == Ad8r || mode == PC8r) {
-               data[dcnt++] = ext[0];
+               for (int i = 0; i < extcnt; i++) {
+                       data[dcnt++] = ext[i];
+               }
        }
        if (mode == absw) {
                data[dcnt++] = (uae_u16)v;
@@ -7075,12 +7077,18 @@ static uae_u32 asmgetval(const TCHAR *s)
        return _tcstoul(s, &endptr, 16);
 }
 
-static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
+static int asm_parse_mode020(TCHAR *s, uae_u8 *reg, uae_u32 *v, int *extcnt, uae_u16 *ext)
+{
+       return -1;
+}
+
+static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, int *extcnt, uae_u16 *ext)
 {
        TCHAR *ss = s;
        *reg = -1;
        *v = 0;
        *ext = 0;
+       *extcnt = 0;
        if (s[0] == 0)
                return -1;
        // Dn
@@ -7123,9 +7131,27 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
                *v = asmgetval(s);
        }
        int dots = 0;
+       int fullext = 0;
        for (int i = 0; i < _tcslen(s); i++) {
-               if (s[i] == ',')
+               if (s[i] == ',') {
                        dots++;
+               } else if (s[i] == '[') {
+                       if (fullext > 0)
+                               fullext = -1;
+                       else
+                               fullext = 1;
+               } else if (s[i] == ']') {
+                       if (fullext != 1)
+                               fullext = -1;
+                       else
+                               fullext = 2;
+                       fullext++;
+               }
+       }
+       if (fullext < 0 || fullext == 1)
+               return -1;
+       if (fullext == 2) {
+               return asm_parse_mode020(s, reg, v, extcnt, ext);
        }
        while (*s != 0) {
                // d16(An)
@@ -7191,6 +7217,7 @@ static int asm_parse_mode(TCHAR *s, uae_u8 *reg, uae_u32 *v, uae_u16 *ext)
                        } else {
                                *reg = asm_isareg(s2);
                        }
+                       *extcnt = 1;
                        s2 += 2;
                        if (*s2 != ',')
                                return -1;
@@ -7339,6 +7366,7 @@ int m68k_asm(TCHAR *sline, uae_u16 *out, uaecptr pc)
        TCHAR line[256];
        TCHAR srcea[256], dstea[256];
        uae_u16 data[16], sexts[8], dexts[8];
+       int sextcnt, dextcnt;
        int dcnt = 0;
        int cc = -1;
        int quick = 0;
@@ -7417,7 +7445,7 @@ int m68k_asm(TCHAR *sline, uae_u16 *out, uaecptr pc)
        int ssize = -1;
        int dsize = -1;
 
-       dmode = asm_parse_mode(dstea, &dreg, &dval, dexts);
+       dmode = asm_parse_mode(dstea, &dreg, &dval, &dextcnt, dexts);
 
 
        // Common alias
@@ -7438,7 +7466,7 @@ int m68k_asm(TCHAR *sline, uae_u16 *out, uaecptr pc)
                        _tcscpy(dstea, tmp);
                        if (!m68k_asm_parse_movem(srcea, 0))
                                return -1;
-                       dmode = asm_parse_mode(dstea, &dreg, &dval, dexts);
+                       dmode = asm_parse_mode(dstea, &dreg, &dval, &dextcnt, dexts);
                }
        } else if (!_tcscmp(ins, _T("MOVEC"))) {
                if (dmode == Dreg || dmode == Areg) {
@@ -7544,7 +7572,7 @@ int m68k_asm(TCHAR *sline, uae_u16 *out, uaecptr pc)
                                srcea[0] = '#';
                                _tcscpy(srcea + 1, tmp);
                        }
-                       smode = asm_parse_mode(srcea, &sreg, &sval, sexts);
+                       smode = asm_parse_mode(srcea, &sreg, &sval, &sextcnt, sexts);
                        if (immrelpc && !isimm) {
                                sval = sval - (pc + 2);
                        }
@@ -7624,9 +7652,9 @@ int m68k_asm(TCHAR *sline, uae_u16 *out, uaecptr pc)
 
 
                                        data[dcnt++] = opcode;
-                                       asm_add_extensions(data, &dcnt, smode, sval, sexts, pc, tsize);
+                                       asm_add_extensions(data, &dcnt, smode, sval, sextcnt, sexts, pc, tsize);
                                        if (smode >= 0)
-                                               asm_add_extensions(data, &dcnt, dmode, dval, dexts, pc, tsize);
+                                               asm_add_extensions(data, &dcnt, dmode, dval, dextcnt, dexts, pc, tsize);
                                        for (int i = 0; i < dcnt; i++) {
                                                out[i] = data[i];
                                        }
index 1d4343ff0d470e29beda1ebc92e131251d7b1036..6a0d486828070c7f32667d7cc76c27b4e18a261e 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("4")
+#define WINUAEBETA _T("5")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2019, 3, 2)
+#define WINUAEDATE MAKEBD(2019, 3, 10)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index 1ddffe1d814db5f4e6108ca4c6025db83b3b5abe..d4e4a7aa67e1b3d371d75719b1ea0034ab5da9c8 100644 (file)
@@ -1,4 +1,15 @@
 \r
+\r
+Beta 5:\r
+\r
+- Picasso IV Flifi I2C bus responses are now faked. Removes P4Info "I2C Bus disabled" message. Very useless.\r
+- Picasso IV driver polls GD5446 CR3F bit 7 (VREF state) when changing modes, probably to wait until native mode is completely redrawn, bit now toggles quickly to reduce delays when switching modes.\r
+- Disassembler CHK2/CMP2 support was incomplete. Another 68020+ instruction with "non-standard" encoding.\r
+- Added 68030 MMU instruction disassembler support.\r
+- 68030 MMU instructions that have FC field: 11xxx FC field is invalid and generates F-line exception. (Was missed in previous invalid bit update few versions ago)\r
+- Added support for shader (.fx) embedded config entries. Format: "string winuae_config : WINUAE_CONFIG = <uae-configuration compatible string>";. String can be split, for example like this: "param1 value1" <linefeed> " param2 value";. Config data is parsed and enabled when config file is loaded (with shaders selected) or when shader is changed using GUI.\r
+- Added Tandem IDE HD/Mitsumi CD controller emulation. Only IDE is supported (which is identical to AlfaPower IDE controllers), Mitsumi drives are not emulated.\r
+\r
 Beta 4:\r
 \r
 - Enabled color burst bit emulation always made display grayscale except if BPLCON0 was not modified during frame.\r