MemDevice

Trait MemDevice 

Source
pub trait MemDevice {
    const LEN: usize;

    // Required methods
    fn read_bytes_relative(&self, addr: RelativeAddr, data: &mut [u8]);
    fn write_bytes_relative(&mut self, addr: RelativeAddr, data: &[u8]);

    // Provided methods
    fn read_relative_into<V>(&self, addr: RelativeAddr, dest: &mut V)
       where V: MemValue { ... }
    fn read_relative<V>(&self, addr: RelativeAddr) -> V
       where V: MemValue + Default { ... }
    fn write_relative_from<V>(&mut self, addr: RelativeAddr, source: &V)
       where V: MemValue { ... }
    fn write_relative<V>(&mut self, addr: RelativeAddr, val: V)
       where V: MemValue { ... }
    fn read_byte_relative(&self, addr: RelativeAddr) -> u8 { ... }
    fn write_byte_relative(&mut self, addr: RelativeAddr, data: u8) { ... }
}
Expand description

Provides access to system memory.

Required Associated Constants§

Source

const LEN: usize

Length of this MemDevice in bytes. Reads and writes must always be within the device.

Required Methods§

Source

fn read_bytes_relative(&self, addr: RelativeAddr, data: &mut [u8])

Read a range of bytes into a slice. The read bytes must not wrap past the end of the device.

Source

fn write_bytes_relative(&mut self, addr: RelativeAddr, data: &[u8])

Write a range of bytes into memory from a slice. The slice must not exceed the length of the MemDevice.

Provided Methods§

Source

fn read_relative_into<V>(&self, addr: RelativeAddr, dest: &mut V)
where V: MemValue,

Read a typed value from this MemDevice. The value must be fully contained within this device.

Source

fn read_relative<V>(&self, addr: RelativeAddr) -> V
where V: MemValue + Default,

Read a typed value from this MemDevice. The value must be fully contained within this device.

Source

fn write_relative_from<V>(&mut self, addr: RelativeAddr, source: &V)
where V: MemValue,

Write a typed value into this MemDevice. The value must fit fully within the device.

Source

fn write_relative<V>(&mut self, addr: RelativeAddr, val: V)
where V: MemValue,

Write a typed value into this MemDevice. The value must fit fully within the device.

Source

fn read_byte_relative(&self, addr: RelativeAddr) -> u8

Read the byte at the specified address.

The default implementation just calls read_range_relative with a single-byte slice. A mem device may override this method if it can provide a more efficient single-byte read.

Source

fn write_byte_relative(&mut self, addr: RelativeAddr, data: u8)

Write the byte at the sepcified address.

The default implementation just calls write_range_relative with a single-byte slice. A mem device may override this method if it can provide a more efficient single-byte write.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl MemDevice for u8

A u8 acts as a single-byte memory device.

Source§

const LEN: usize = 1usize

Source§

fn read_byte_relative(&self, addr: RelativeAddr) -> u8

Source§

fn write_byte_relative(&mut self, addr: RelativeAddr, val: u8)

Source§

fn read_bytes_relative(&self, addr: RelativeAddr, data: &mut [u8])

Source§

fn write_bytes_relative(&mut self, addr: RelativeAddr, data: &[u8])

Source§

impl<D: MemDevice> MemDevice for Box<D>

Source§

const LEN: usize = D::LEN

Source§

fn read_byte_relative(&self, addr: RelativeAddr) -> u8

Source§

fn write_byte_relative(&mut self, addr: RelativeAddr, value: u8)

Source§

fn read_bytes_relative(&self, addr: RelativeAddr, data: &mut [u8])

Source§

fn write_bytes_relative(&mut self, addr: RelativeAddr, data: &[u8])

Source§

impl<const N: usize> MemDevice for [u8; N]

Source§

const LEN: usize = N

Source§

fn read_byte_relative(&self, addr: RelativeAddr) -> u8

Source§

fn write_byte_relative(&mut self, addr: RelativeAddr, value: u8)

Source§

fn read_bytes_relative(&self, addr: RelativeAddr, data: &mut [u8])

Source§

fn write_bytes_relative(&mut self, addr: RelativeAddr, data: &[u8])

Implementors§

Source§

impl MemDevice for Cartridge

Source§

const LEN: usize = 40_960usize

Source§

impl MemDevice for ApuRegs

Source§

const LEN: usize = 48usize

Source§

impl MemDevice for ChannelControl

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for EnvelopeControl

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for NoiseChannel

Source§

const LEN: usize = 4usize

Source§

impl MemDevice for NoiseControl

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for PulseChannel

Source§

const LEN: usize = 5usize

Source§

impl MemDevice for PulseTimer

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for SoundEnable

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for SoundPan

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for SoundVolume

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for SweepControl

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for WavetableChannel

Source§

const LEN: usize = 21usize

Source§

impl MemDevice for WavetableLevel

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for ButtonRegister

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for InterruptEnable

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for InterruptFlags

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for DmaState

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for LcdFlags

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for LcdStat

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for ObjAttrs

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for PpuRegs

Source§

const LEN: usize = 12usize

Source§

impl MemDevice for SerialRegs

Source§

const LEN: usize = 2usize

Source§

impl MemDevice for TimerControl

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for TimerRegs

Source§

const LEN: usize = 4usize

Source§

impl MemDevice for AllRam

Source§

const LEN: usize = 65_536usize

Source§

impl MemDevice for BiosEnable

Source§

const LEN: usize = 1usize

Source§

impl MemDevice for BiosRom

Source§

const LEN: usize = 256usize

Source§

impl MemDevice for GbMmu

Source§

const LEN: usize = 65_536usize

Source§

impl MemDevice for Mbc1Rom

Source§

const LEN: usize = 40_960usize

Source§

impl MemDevice for Mbc3Rom

Source§

const LEN: usize = 40_960usize

Source§

impl MemDevice for MemMappedIo

Source§

const LEN: usize = 128usize

Source§

impl MemDevice for RomOnly

Source§

const LEN: usize = 40_960usize

Source§

impl<M: MemDevice> MemDevice for MaskableMem<M>

Source§

const LEN: usize = M::LEN

Source§

impl<M: MemDevice> MemDevice for ReadOnly<M>

Source§

const LEN: usize = M::LEN

Source§

impl<M: MemDevice> MemDevice for RootExtend<M>

Source§

const LEN: usize = 65_536usize

Source§

impl<const N: usize> MemDevice for NullRom<N>

Source§

const LEN: usize = N