pub fn run<T: CpuRegisters + Debug, U: CpuBus>(registers: &mut T, bus: &mut U) -> Data { let _code = fetch(registers, bus); let ref map = opecode::MAP; let code = &*map.get(&_code).unwrap(); let opeland = fetch_opeland(&code, registers, bus); match code.name { Instruction::LDA if code.mode == Addressing::Immediate => lda_imm(opeland, registers), Instruction::LDA => lda(opeland, registers, bus), Instruction::LDX if code.mode == Addressing::Immediate => ldx_imm(opeland, registers), Instruction::LDX => ldx(opeland, registers, bus), Instruction::LDY if code.mode == Addressing::Immediate => ldy_imm(opeland, registers), // … } } pub fn lda<T: CpuRegisters, U: CpuBus>(opeland: Word, registers: &mut T, bus: &mut U) { let computed = bus.read(opeland); registers .set_A(computed) .update_negative_by(computed) .update_zero_by(computed); } // Other instructions…