From 4e23d9419be08481965782ace58a79928a049a7b Mon Sep 17 00:00:00 2001 From: Marco Thomas Date: Wed, 2 Jul 2025 20:58:39 +0900 Subject: [PATCH] fix(interpreter): write to correct 8bit regs --- src/interpreter/computer.rs | 1 + src/interpreter/register.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/interpreter/computer.rs b/src/interpreter/computer.rs index eaa6db4..e1d9c6a 100644 --- a/src/interpreter/computer.rs +++ b/src/interpreter/computer.rs @@ -402,6 +402,7 @@ impl Computer { target: ModRmTarget, val: ImmediateOperand, ) -> Result<(), InterpreterError> { + log::debug!("Writing {val} into {target}"); match target { ModRmTarget::Memory(idx) => self.write(val.into(), idx)?, ModRmTarget::Register(reg) => self.regs.write(reg, val), diff --git a/src/interpreter/register.rs b/src/interpreter/register.rs index 3307c07..2315dc9 100644 --- a/src/interpreter/register.rs +++ b/src/interpreter/register.rs @@ -51,6 +51,7 @@ impl Register { /// Write an [`ImmediateOperand`] to a [`crate::register::Register`]. pub fn write(&mut self, reg: crate::register::Register, val: ImmediateOperand) { + log::debug!("Writing {val:#04x} into {reg}"); match val { ImmediateOperand::Byte(byte) => match reg { crate::register::Register::AX => self.ax.lower = byte, @@ -79,12 +80,12 @@ impl Register { crate::register::Register::DX => self.dx.write(word), crate::register::Register::AH => self.ax.upper = high, crate::register::Register::AL => self.ax.lower = low, - crate::register::Register::BH => self.ax.upper = high, - crate::register::Register::BL => self.ax.lower = low, - crate::register::Register::CH => self.ax.upper = high, - crate::register::Register::CL => self.ax.lower = low, - crate::register::Register::DH => self.ax.upper = high, - crate::register::Register::DL => self.ax.lower = low, + crate::register::Register::BH => self.bx.upper = high, + crate::register::Register::BL => self.bx.lower = low, + crate::register::Register::CH => self.cx.upper = high, + crate::register::Register::CL => self.cx.lower = low, + crate::register::Register::DH => self.dx.upper = high, + crate::register::Register::DL => self.dx.lower = low, crate::register::Register::DI => self.di = word, crate::register::Register::SI => self.si = word, crate::register::Register::BP => self.bp = word,