From 60b5b6bd510192bd2d2c4b37c15b2a4050ec57dc Mon Sep 17 00:00:00 2001 From: Marco Thomas Date: Wed, 2 Jul 2025 17:46:15 +0900 Subject: [PATCH] chore(interpreter): correctly sign extend for CBW/CWD intructions --- src/interpreter/interpreter.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/interpreter/interpreter.rs b/src/interpreter/interpreter.rs index 348d9f8..b69ec7b 100644 --- a/src/interpreter/interpreter.rs +++ b/src/interpreter/interpreter.rs @@ -576,15 +576,19 @@ impl Interpreter { * Sign extensions */ Mnemonic::CBW => { + // extend sign bit into AX, i.e. all bits set if ImmediateOperand::Byte(self.computer.regs.ax.lower).msb() { - // extend sign bit into AX, i.e. all bits set self.computer.regs.ax.upper = 0xff; + } else { + self.computer.regs.ax.upper = 0x00; } } Mnemonic::CWD => { + // extend sign bit into DX, i.e. all bits set if ImmediateOperand::Word(self.computer.regs.ax.read()).msb() { - // extend sign bit into DX, i.e. all bits set self.computer.regs.dx.write(0xffff); + } else { + self.computer.regs.dx.write(0x0000); } }