mirror of
https://github.com/holub/mame
synced 2025-04-25 01:40:16 +03:00
i386.cpp: XADD instructions must set flags based on sum result (nw)
This is required by winxp setup.
This commit is contained in:
parent
19b5a17807
commit
676e372c6e
@ -152,14 +152,16 @@ void i386_device::i486_xadd_rm8_r8() // Opcode 0x0f c0
|
||||
if( modrm >= 0xc0 ) {
|
||||
uint8_t dst = LOAD_RM8(modrm);
|
||||
uint8_t src = LOAD_REG8(modrm);
|
||||
uint8_t sum = ADD8(dst, src);
|
||||
STORE_REG8(modrm, dst);
|
||||
STORE_RM8(modrm, dst + src);
|
||||
STORE_RM8(modrm, sum);
|
||||
CYCLES(CYCLES_XADD_REG_REG);
|
||||
} else {
|
||||
uint32_t ea = GetEA(modrm,1);
|
||||
uint8_t dst = READ8(ea);
|
||||
uint8_t src = LOAD_REG8(modrm);
|
||||
WRITE8(ea, dst + src);
|
||||
uint8_t sum = ADD8(dst, src);
|
||||
WRITE8(ea, sum);
|
||||
STORE_REG8(modrm, dst);
|
||||
CYCLES(CYCLES_XADD_REG_MEM);
|
||||
}
|
||||
@ -171,14 +173,16 @@ void i386_device::i486_xadd_rm16_r16() // Opcode 0x0f c1
|
||||
if( modrm >= 0xc0 ) {
|
||||
uint16_t dst = LOAD_RM16(modrm);
|
||||
uint16_t src = LOAD_REG16(modrm);
|
||||
uint16_t sum = ADD16(dst, src);
|
||||
STORE_REG16(modrm, dst);
|
||||
STORE_RM16(modrm, dst + src);
|
||||
STORE_RM16(modrm, sum);
|
||||
CYCLES(CYCLES_XADD_REG_REG);
|
||||
} else {
|
||||
uint32_t ea = GetEA(modrm,1);
|
||||
uint16_t dst = READ16(ea);
|
||||
uint16_t src = LOAD_REG16(modrm);
|
||||
WRITE16(ea, dst + src);
|
||||
uint16_t sum = ADD16(dst, src);
|
||||
WRITE16(ea, sum);
|
||||
STORE_REG16(modrm, dst);
|
||||
CYCLES(CYCLES_XADD_REG_MEM);
|
||||
}
|
||||
@ -190,14 +194,16 @@ void i386_device::i486_xadd_rm32_r32() // Opcode 0x0f c1
|
||||
if( modrm >= 0xc0 ) {
|
||||
uint32_t dst = LOAD_RM32(modrm);
|
||||
uint32_t src = LOAD_REG32(modrm);
|
||||
uint32_t sum = ADD32(dst, src);
|
||||
STORE_REG32(modrm, dst);
|
||||
STORE_RM32(modrm, dst + src);
|
||||
STORE_RM32(modrm, sum);
|
||||
CYCLES(CYCLES_XADD_REG_REG);
|
||||
} else {
|
||||
uint32_t ea = GetEA(modrm,1);
|
||||
uint32_t dst = READ32(ea);
|
||||
uint32_t src = LOAD_REG32(modrm);
|
||||
WRITE32(ea, dst + src);
|
||||
uint32_t sum = ADD32(dst, src);
|
||||
WRITE32(ea, sum);
|
||||
STORE_REG32(modrm, dst);
|
||||
CYCLES(CYCLES_XADD_REG_MEM);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user