Add move from CCR
This commit is contained in:
parent
8919dc182f
commit
74584bc076
@ -385,6 +385,12 @@ impl<T> Disasm<'_, T> {
|
|||||||
let dst_reg = ins_word[13..16].load_be::<u8>();
|
let dst_reg = ins_word[13..16].load_be::<u8>();
|
||||||
let dst = self.decode_effective(dst_mode, dst_reg, size)?;
|
let dst = self.decode_effective(dst_mode, dst_reg, size)?;
|
||||||
Ok(Instruction::MoveFromSr(dst))
|
Ok(Instruction::MoveFromSr(dst))
|
||||||
|
} else if ins_word[4..10].load_be::<u8>() == 0b00_1011 {
|
||||||
|
let dst_mode =
|
||||||
|
AddressingMode::try_from(ins_word[10..13].load_be::<u8>()).unwrap();
|
||||||
|
let dst_reg = ins_word[13..16].load_be::<u8>();
|
||||||
|
let dst = self.decode_effective(dst_mode, dst_reg, size)?;
|
||||||
|
Ok(Instruction::MoveFromCcr(dst))
|
||||||
} else if ins_word[4..10].load_be::<u8>() == 0b01_0011 {
|
} else if ins_word[4..10].load_be::<u8>() == 0b01_0011 {
|
||||||
let src_mode =
|
let src_mode =
|
||||||
AddressingMode::try_from(ins_word[10..13].load_be::<u8>()).unwrap();
|
AddressingMode::try_from(ins_word[10..13].load_be::<u8>()).unwrap();
|
||||||
|
@ -318,6 +318,7 @@ pub enum Instruction {
|
|||||||
size: Size,
|
size: Size,
|
||||||
},
|
},
|
||||||
MoveFromSr(EffectiveAddress),
|
MoveFromSr(EffectiveAddress),
|
||||||
|
MoveFromCcr(EffectiveAddress),
|
||||||
MoveToCcr(EffectiveAddress),
|
MoveToCcr(EffectiveAddress),
|
||||||
MoveToSr(EffectiveAddress),
|
MoveToSr(EffectiveAddress),
|
||||||
Negx(Size, EffectiveAddress),
|
Negx(Size, EffectiveAddress),
|
||||||
@ -461,6 +462,7 @@ impl Display for Instruction {
|
|||||||
},
|
},
|
||||||
Self::Move { src, dst, size } => write!(f, "MOVE.{size} {src}, {dst}"),
|
Self::Move { src, dst, size } => write!(f, "MOVE.{size} {src}, {dst}"),
|
||||||
Self::MoveFromSr(dst) => write!(f, "MOVE SR, {dst}"),
|
Self::MoveFromSr(dst) => write!(f, "MOVE SR, {dst}"),
|
||||||
|
Self::MoveFromCcr(dst) => write!(f, "MOVE CCR, {dst}"),
|
||||||
Self::MoveToCcr(src) => write!(f, "MOVE {src}, CCR"),
|
Self::MoveToCcr(src) => write!(f, "MOVE {src}, CCR"),
|
||||||
Self::MoveToSr(src) => write!(f, "MOVE {src}, SR"),
|
Self::MoveToSr(src) => write!(f, "MOVE {src}, SR"),
|
||||||
Self::Negx(size, dst) => write!(f, "NEGX.{size} {dst}"),
|
Self::Negx(size, dst) => write!(f, "NEGX.{size} {dst}"),
|
||||||
|
@ -536,6 +536,9 @@ impl M68K {
|
|||||||
self.sr = (self.sr & 0xFFE0) | new_flags;
|
self.sr = (self.sr & 0xFFE0) | new_flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Instruction::MoveFromCcr(dst) => {
|
||||||
|
self.write_effective(dst, u32::from(self.sr & 0xFF), Size::Word)?;
|
||||||
|
}
|
||||||
Instruction::MoveFromSr(dst) => {
|
Instruction::MoveFromSr(dst) => {
|
||||||
self.write_effective(dst, u32::from(self.sr), Size::Word)?;
|
self.write_effective(dst, u32::from(self.sr), Size::Word)?;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user