Skip to main content

Crate mc6809_core

Crate mc6809_core 

Source
Expand description

§mc6809-core

A Motorola 6809 CPU emulator core.

Provides a Cpu that executes 6809 instructions against any memory system implementing the Memory trait. Peripheral timing and interrupt signals are handled separately via the Clocked trait, which is called by the host loop independently of the CPU.

§Example

use mc6809_core::{Cpu, Memory};

struct FlatRam([u8; 65536]);

impl Memory for FlatRam {
    fn read(&mut self, addr: u16) -> u8 { self.0[addr as usize] }
    fn write(&mut self, addr: u16, val: u8) { self.0[addr as usize] = val; }
}

let mut mem = FlatRam([0; 65536]);
// Place a reset vector pointing to 0x0400
mem.0[0xFFFE] = 0x04;
mem.0[0xFFFF] = 0x00;
// Place a NOP at 0x0400
mem.0[0x0400] = 0x12;

let mut cpu = Cpu::new();
cpu.reset(&mut mem);
assert_eq!(cpu.registers().pc, 0x0400);
cpu.step(&mut mem);
assert_eq!(cpu.registers().pc, 0x0401);

Re-exports§

pub use memory::Memory;
pub use peripheral::BusSignals;
pub use peripheral::Clocked;
pub use registers::ConditionCodes;
pub use registers::Registers;

Modules§

memory
peripheral
registers

Structs§

Cpu
Motorola 6809 CPU emulator.
RegistersMut
RAII guard returned by Cpu::registers_mut.

Functions§

instruction_cycles
Returns the base cycle count for a 6809 instruction.