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…