mirror of
https://github.com/mre/mos6502.git
synced 2024-11-24 11:31:00 +00:00
Add Addressing mode to Display for DecodedInstr
This commit is contained in:
parent
902b69a053
commit
efb1c3a3b8
@ -115,6 +115,17 @@ pub enum OpInput {
|
|||||||
UseAddress(u16),
|
UseAddress(u16),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for OpInput {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
|
||||||
|
match self {
|
||||||
|
OpInput::UseImplied => write!(f, ""),
|
||||||
|
OpInput::UseImmediate(v) => write!(f, "#${:02X}", v),
|
||||||
|
OpInput::UseRelative(v) => write!(f, "${:04X}", v),
|
||||||
|
OpInput::UseAddress(v) => write!(f, "${:04X}", v),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub enum AddressingMode {
|
pub enum AddressingMode {
|
||||||
Accumulator, // 1 LSR A work directly on accumulator
|
Accumulator, // 1 LSR A work directly on accumulator
|
||||||
@ -158,11 +169,33 @@ pub struct DecodedInstr(pub Instruction, pub OpInput);
|
|||||||
|
|
||||||
impl Display for DecodedInstr {
|
impl Display for DecodedInstr {
|
||||||
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
|
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
|
||||||
|
// get addressing mode from instruction (if it exists)
|
||||||
|
let am: Option<AddressingMode> = OPCODES.get(self.0 as usize).and_then(|x| x.map(|x| x.1));
|
||||||
|
|
||||||
match self.1 {
|
match self.1 {
|
||||||
OpInput::UseImplied => write!(f, "{:?}", self.0),
|
OpInput::UseImplied => write!(f, "{:?}", self.0),
|
||||||
OpInput::UseImmediate(v) => write!(f, "{:?} #${:02X}", self.0, v),
|
OpInput::UseImmediate(imm) => write!(f, "{:?} #${:02X}", self.0, imm),
|
||||||
OpInput::UseRelative(v) => write!(f, "{:?} ${:04X}", self.0, v),
|
OpInput::UseRelative(rel) => write!(f, "{:?} ${:04X}", self.0, rel),
|
||||||
OpInput::UseAddress(v) => write!(f, "{:?} ${:04X}", self.0, v),
|
OpInput::UseAddress(addr) => match am {
|
||||||
|
Some(AddressingMode::Accumulator) => write!(f, "{:?} A", self.0),
|
||||||
|
Some(AddressingMode::Implied) => write!(f, "{:?}", self.0),
|
||||||
|
Some(AddressingMode::Immediate) => write!(f, "{:?} #${:02X}", self.0, addr),
|
||||||
|
Some(AddressingMode::ZeroPage) => write!(f, "{:?} :?${:02X}", self.0, addr),
|
||||||
|
Some(AddressingMode::ZeroPageX) => write!(f, "{:?} :?${:02X},X", self.0, addr),
|
||||||
|
Some(AddressingMode::ZeroPageY) => write!(f, "{:?} :?${:02X},Y", self.0, addr),
|
||||||
|
Some(AddressingMode::Relative) => write!(f, "{:?} ${:04X}", self.0, addr),
|
||||||
|
Some(AddressingMode::Absolute) => write!(f, "{:?} ${:04X}", self.0, addr),
|
||||||
|
Some(AddressingMode::AbsoluteX) => write!(f, "{:?} ${:04X},X", self.0, addr),
|
||||||
|
Some(AddressingMode::AbsoluteY) => write!(f, "{:?} ${:04X},Y", self.0, addr),
|
||||||
|
Some(AddressingMode::Indirect) => write!(f, "{:?} (${:04X})", self.0, addr),
|
||||||
|
Some(AddressingMode::IndexedIndirectX) => {
|
||||||
|
write!(f, "{:?} (${:04X},X)", self.0, addr)
|
||||||
|
}
|
||||||
|
Some(AddressingMode::IndirectIndexedY) => {
|
||||||
|
write!(f, "{:?} (${:04X}),Y", self.0, addr)
|
||||||
|
}
|
||||||
|
None => write!(f, "{:?} {}", self.0, self.1),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user