1
0
Fork 0
mirror of https://git.sr.ht/~asya/copycat synced 2024-11-16 06:38:42 -06:00

Fix effective address calculation

Signed-off-by: AsyaTheAbove <asya@waifu.club>
This commit is contained in:
AsyaTheAbove 2023-09-26 22:50:54 +03:00
parent 03055b819d
commit 54c6892527

View file

@ -419,45 +419,11 @@ impl Processor {
BP_Disp16(disp) => self.registers.bp().wrapping_add_signed(disp), BP_Disp16(disp) => self.registers.bp().wrapping_add_signed(disp),
BX_Disp16(disp) => self.registers.bx().wrapping_add_signed(disp), BX_Disp16(disp) => self.registers.bx().wrapping_add_signed(disp),
}; };
(match segment { ((match segment {
SegmentOverride::ES => self.registers.es(), SegmentOverride::ES => self.registers.es(),
SegmentOverride::CS => self.registers.cs(), SegmentOverride::CS => self.registers.cs(),
SegmentOverride::SS => self.registers.ss(), SegmentOverride::SS => self.registers.ss(),
SegmentOverride::DS | SegmentOverride::None => self.registers.ds(), SegmentOverride::DS | SegmentOverride::None => self.registers.ds(),
} as u64) << 4 + offset as u64 } as u64) << 4) + offset as u64
} }
// fn rm8(&self, memory: &mut Memory, modrm: ModRM, displacement: u16) -> u8 {
// match modrm & ModRM::MOD_MASK {
// ModRM::MOD_DIRECT => self.registers.rm8_gp(modrm),
// ModRM::MOD_0 => memory.read_u8(match modrm & ModRM::RM_REG_MASK {
// ModRM::RM_REG_0 => self.registers.bx() + self.registers.si(),
// ModRM::RM_REG_1 => self.registers.bx() + self.registers.di(),
// ModRM::RM_REG_2 => self.registers.bp() + self.registers.si(),
// ModRM::RM_REG_3 => self.registers.bp() + self.registers.di(),
// ModRM::RM_REG_4 => self.registers.si(),
// ModRM::RM_REG_5 => self.registers.di(),
// ModRM::RM_REG_7 => self.registers.bx(),
// _ => unreachable!(),
// }.into()),
// _ => unimplemented!("register-indirect addressing modes are not implemented"),
// }
// }
// fn r8(&self, memory: &mut Memory, modrm: ModRM) -> u8 {
// match modrm & ModRM::MOD_MASK {
// ModRM::MOD_DIRECT => self.registers.r8_gp(modrm),
// ModRM::MOD_0 => memory.read_u8(match modrm & ModRM::REG_MASK {
// ModRM::REG_0 => self.registers.bx() + self.registers.si(),
// ModRM::REG_1 => self.registers.bx() + self.registers.di(),
// ModRM::REG_2 => self.registers.bp() + self.registers.si(),
// ModRM::REG_3 => self.registers.bp() + self.registers.di(),
// ModRM::REG_4 => self.registers.si(),
// ModRM::REG_5 => self.registers.di(),
// ModRM::REG_7 => self.registers.bx(),
// _ => unreachable!(),
// }.into()),
// _ => unimplemented!("register-indirect addressing modes are not implemented"),
// }
// }
} }