Added MMX emulation (probably some bugs). Implemented RDMSR/WRMSR for Winchip.
This commit is contained in:
parent
cfb4ab27b4
commit
119fe36820
17 changed files with 2362 additions and 65 deletions
49
src/x86_ops_mmx.h
Normal file
49
src/x86_ops_mmx.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#define SSATB(val) (((val) < -128) ? -128 : (((val) > 127) ? 127 : (val)))
|
||||
#define SSATW(val) (((val) < -32768) ? -32768 : (((val) > 32767) ? 32767 : (val)))
|
||||
#define USATB(val) (((val) < 0) ? 0 : (((val) > 255) ? 255 : (val)))
|
||||
#define USATW(val) (((val) < 0) ? 0 : (((val) > 65535) ? 65535 : (val)))
|
||||
|
||||
#define MMX_GETSRC() \
|
||||
if (mod == 3) \
|
||||
{ \
|
||||
src = MM[rm]; \
|
||||
cycles--; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
src.l[0] = readmeml(easeg, eaaddr); \
|
||||
src.l[1] = readmeml(easeg, eaaddr + 4); if (abrt) return 0; \
|
||||
cycles -= 2; \
|
||||
}
|
||||
|
||||
#define MMX_ENTER() \
|
||||
if (!cpu_hasMMX) \
|
||||
{ \
|
||||
pc = oldpc; \
|
||||
x86illegal(); \
|
||||
return 0; \
|
||||
} \
|
||||
if (cr0 & 0xc) \
|
||||
{ \
|
||||
x86_int(7); \
|
||||
return 0; \
|
||||
} \
|
||||
x87_set_mmx()
|
||||
|
||||
int opEMMS(uint32_t fetchdat)
|
||||
{
|
||||
if (!cpu_hasMMX)
|
||||
{
|
||||
pc = oldpc;
|
||||
x86illegal();
|
||||
return 0;
|
||||
}
|
||||
if (cr0 & 4)
|
||||
{
|
||||
x86_int(7);
|
||||
return 0;
|
||||
}
|
||||
x87_emms();
|
||||
cycles -= 100; /*Guess*/
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in a new issue