}
}
-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)
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;
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
*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)
} else {
*reg = asm_isareg(s2);
}
+ *extcnt = 1;
s2 += 2;
if (*s2 != ',')
return -1;
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;
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
_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) {
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);
}
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];
}
\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