summaryrefslogtreecommitdiff
path: root/src/devices/emulator/x86emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/emulator/x86emu')
-rw-r--r--src/devices/emulator/x86emu/debug.c4
-rw-r--r--src/devices/emulator/x86emu/decode.c2
-rw-r--r--src/devices/emulator/x86emu/ops.c51
-rw-r--r--src/devices/emulator/x86emu/ops2.c2
-rw-r--r--src/devices/emulator/x86emu/prim_ops.c2
5 files changed, 34 insertions, 27 deletions
diff --git a/src/devices/emulator/x86emu/debug.c b/src/devices/emulator/x86emu/debug.c
index e25229a689..dd47e3d3a5 100644
--- a/src/devices/emulator/x86emu/debug.c
+++ b/src/devices/emulator/x86emu/debug.c
@@ -225,7 +225,6 @@ void X86EMU_dump_memory (u16 seg, u16 off, u32 amt)
void x86emu_single_step (void)
{
-#if 0
char s[1024];
int ps[10];
int ntok;
@@ -314,7 +313,6 @@ void x86emu_single_step (void)
break;
}
}
-#endif
}
int X86EMU_trace_on(void)
@@ -329,7 +327,6 @@ int X86EMU_trace_off(void)
static int parse_line (char *s, int *ps, int *n)
{
-#if 0
int cmd;
*n = 0;
@@ -355,7 +352,6 @@ static int parse_line (char *s, int *ps, int *n)
sscanf(s,"%x",&ps[*n]);
*n += 1;
}
-#endif
}
#endif /* DEBUG */
diff --git a/src/devices/emulator/x86emu/decode.c b/src/devices/emulator/x86emu/decode.c
index e7010fe579..1badb2db7c 100644
--- a/src/devices/emulator/x86emu/decode.c
+++ b/src/devices/emulator/x86emu/decode.c
@@ -77,8 +77,6 @@ next instruction.
void x86emu_intr_raise(
u8 intrnum)
{
- printk("%s, rasing execption %x\n", __func__, intrnum);
- x86emu_dump_regs();
M.x86.intno = intrnum;
M.x86.intr |= INTR_SYNCH;
}
diff --git a/src/devices/emulator/x86emu/ops.c b/src/devices/emulator/x86emu/ops.c
index 4666e93ff4..2534b65863 100644
--- a/src/devices/emulator/x86emu/ops.c
+++ b/src/devices/emulator/x86emu/ops.c
@@ -70,7 +70,7 @@
*
****************************************************************************/
-#include "x86emu/x86emui.h"
+#include "x86emui.h"
/*----------------------------- Implementation ----------------------------*/
@@ -219,8 +219,7 @@ void x86emuOp_genop_byte_RM_R(u8 op1)
DECODE_PRINTF("\n");
TRACE_AND_STEP();
destval = genop_byte_operation[op1](destval, *srcreg);
- if (op1 != 7)
- store_data_byte(destoffset, destval);
+ store_data_byte(destoffset, destval);
}
else
{ /* register to register */
@@ -263,8 +262,7 @@ void x86emuOp_genop_word_RM_R(u8 op1)
DECODE_PRINTF("\n");
TRACE_AND_STEP();
destval = genop_long_operation[op1](destval, *srcreg);
- if (op1 != 7)
- store_data_long(destoffset, destval);
+ store_data_long(destoffset, destval);
} else {
u16 destval;
u16 *srcreg;
@@ -275,12 +273,11 @@ void x86emuOp_genop_word_RM_R(u8 op1)
DECODE_PRINTF("\n");
TRACE_AND_STEP();
destval = genop_word_operation[op1](destval, *srcreg);
- if (op1 != 7)
- store_data_word(destoffset, destval);
+ store_data_word(destoffset, destval);
}
} else { /* register to register */
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg, *srcreg;
+ u32 *destreg,*srcreg;
destreg = DECODE_RM_LONG_REGISTER(rl);
DECODE_PRINTF(",");
@@ -289,7 +286,7 @@ void x86emuOp_genop_word_RM_R(u8 op1)
TRACE_AND_STEP();
*destreg = genop_long_operation[op1](*destreg, *srcreg);
} else {
- u16 *destreg, *srcreg;
+ u16 *destreg,*srcreg;
destreg = DECODE_RM_WORD_REGISTER(rl);
DECODE_PRINTF(",");
@@ -1335,7 +1332,9 @@ void x86emuOp_opc80_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
imm = fetch_byte_imm();
DECODE_PRINTF2("%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_byte_operation[rh]) (*destreg, imm);
+ destval = (*genop_byte_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
}
DECODE_CLEAR_SEGOVR();
END_OF_INSTR();
@@ -1424,23 +1423,29 @@ void x86emuOp_opc81_word_RM_IMM(u8 X86EMU_UNUSED(op1))
}
} else { /* register to register */
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg, imm;
+ u32 *destreg;
+ u32 destval,imm;
destreg = DECODE_RM_LONG_REGISTER(rl);
DECODE_PRINTF(",");
imm = fetch_long_imm();
DECODE_PRINTF2("%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_long_operation[rh]) (*destreg, imm);
+ destval = (*genop_long_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
} else {
- u16 *destreg, imm;
+ u16 *destreg;
+ u16 destval,imm;
destreg = DECODE_RM_WORD_REGISTER(rl);
DECODE_PRINTF(",");
imm = fetch_word_imm();
DECODE_PRINTF2("%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_word_operation[rh]) (*destreg, imm);
+ destval = (*genop_word_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
}
}
DECODE_CLEAR_SEGOVR();
@@ -1518,7 +1523,9 @@ void x86emuOp_opc82_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
imm = fetch_byte_imm();
DECODE_PRINTF2(",%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_byte_operation[rh]) (*destreg, imm);
+ destval = (*genop_byte_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
}
DECODE_CLEAR_SEGOVR();
END_OF_INSTR();
@@ -1604,21 +1611,27 @@ void x86emuOp_opc83_word_RM_IMM(u8 X86EMU_UNUSED(op1))
}
} else { /* register to register */
if (M.x86.mode & SYSMODE_PREFIX_DATA) {
- u32 *destreg, imm;
+ u32 *destreg;
+ u32 destval,imm;
destreg = DECODE_RM_LONG_REGISTER(rl);
imm = (s8) fetch_byte_imm();
DECODE_PRINTF2(",%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_long_operation[rh]) (*destreg, imm);
+ destval = (*genop_long_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
} else {
- u16 *destreg, imm;
+ u16 *destreg;
+ u16 destval,imm;
destreg = DECODE_RM_WORD_REGISTER(rl);
imm = (s8) fetch_byte_imm();
DECODE_PRINTF2(",%x\n", imm);
TRACE_AND_STEP();
- *destreg = (*genop_word_operation[rh]) (*destreg, imm);
+ destval = (*genop_word_operation[rh]) (*destreg, imm);
+ if (rh != 7)
+ *destreg = destval;
}
}
DECODE_CLEAR_SEGOVR();
diff --git a/src/devices/emulator/x86emu/ops2.c b/src/devices/emulator/x86emu/ops2.c
index 448d968570..6afd36e2e9 100644
--- a/src/devices/emulator/x86emu/ops2.c
+++ b/src/devices/emulator/x86emu/ops2.c
@@ -61,7 +61,7 @@ void x86emuOp2_illegal_op(
END_OF_INSTR();
}
-#define xorl(a,b) (((a) && !(b)) || (!(a) && (b)))
+#define xorl(a,b) ((a) && !(b)) || (!(a) && (b))
/****************************************************************************
REMARKS:
diff --git a/src/devices/emulator/x86emu/prim_ops.c b/src/devices/emulator/x86emu/prim_ops.c
index fa19cb4844..a707521d49 100644
--- a/src/devices/emulator/x86emu/prim_ops.c
+++ b/src/devices/emulator/x86emu/prim_ops.c
@@ -1921,7 +1921,7 @@ Implements the IMUL instruction and side effects.
void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s)
{
#ifdef __HAS_LONG_LONG__
- s64 res = (s64)d * (s64)s;
+ s64 res = (s32)d * (s32)s;
*res_lo = (u32)res;
*res_hi = (u32)(res >> 32);