Trait emulator_hal::BusAccess
source · pub trait BusAccess<Address>where
Address: Copy,{
type Instant: Instant;
type Error: ErrorType;
Show 22 methods
// Required methods
fn read(
&mut self,
now: Self::Instant,
addr: Address,
data: &mut [u8]
) -> Result<usize, Self::Error>;
fn write(
&mut self,
now: Self::Instant,
addr: Address,
data: &[u8]
) -> Result<usize, Self::Error>;
// Provided methods
fn read_u8(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u8, Self::Error> { ... }
fn read_beu16(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error> { ... }
fn read_leu16(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error> { ... }
fn read_u16(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error> { ... }
fn read_beu32(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error> { ... }
fn read_leu32(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error> { ... }
fn read_u32(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error> { ... }
fn read_beu64(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error> { ... }
fn read_leu64(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error> { ... }
fn read_u64(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error> { ... }
fn write_u8(
&mut self,
now: Self::Instant,
addr: Address,
value: u8
) -> Result<(), Self::Error> { ... }
fn write_beu16(
&mut self,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error> { ... }
fn write_leu16(
&mut self,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error> { ... }
fn write_u16(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error> { ... }
fn write_beu32(
&mut self,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error> { ... }
fn write_leu32(
&mut self,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error> { ... }
fn write_u32(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error> { ... }
fn write_beu64(
&mut self,
now: Self::Instant,
addr: Address,
value: u64
) -> Result<(), Self::Error> { ... }
fn write_leu64(
&mut self,
now: Self::Instant,
addr: Address,
value: u64
) -> Result<(), Self::Error> { ... }
fn write_u64(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address,
value: u64
) -> Result<(), Self::Error> { ... }
}
Expand description
A device that can be addressed to read data from or write data to the device.
This represents access to a peripheral device or a bus of multiple devices, which can be used by a controller (eg. CPU). The address can either be a single number or a tuple to represent different address spaces, such as memory vs I/O spaces as in the Z80 CPUs, or supervisor vs user access as in the Function Code present on 68k CPUs.
Required Associated Types§
Required Methods§
sourcefn read(
&mut self,
now: Self::Instant,
addr: Address,
data: &mut [u8]
) -> Result<usize, Self::Error>
fn read( &mut self, now: Self::Instant, addr: Address, data: &mut [u8] ) -> Result<usize, Self::Error>
Read an arbitrary length of bytes from this device, at time now
Returns the number of bytes read, which would normally be the same as data.len()
but could be less or zero if no data is returned
sourcefn write(
&mut self,
now: Self::Instant,
addr: Address,
data: &[u8]
) -> Result<usize, Self::Error>
fn write( &mut self, now: Self::Instant, addr: Address, data: &[u8] ) -> Result<usize, Self::Error>
Write an arbitrary length of bytes into this device, at time now
Returns the number of bytes written, which would normally be the same as data.len()
but could be less or zero if no data was written or the memory was read-only
Provided Methods§
sourcefn read_u8(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u8, Self::Error>
fn read_u8( &mut self, now: Self::Instant, addr: Address ) -> Result<u8, Self::Error>
Read a single u8 value at the given address
sourcefn read_beu16(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error>
fn read_beu16( &mut self, now: Self::Instant, addr: Address ) -> Result<u16, Self::Error>
Read a single u16 value in big endian byte order at the given address
sourcefn read_leu16(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error>
fn read_leu16( &mut self, now: Self::Instant, addr: Address ) -> Result<u16, Self::Error>
Read a single u16 value in little endian byte order at the given address
sourcefn read_u16(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u16, Self::Error>
fn read_u16( &mut self, order: ByteOrder, now: Self::Instant, addr: Address ) -> Result<u16, Self::Error>
Read a single u16 value in the given byte order at the given address
sourcefn read_beu32(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error>
fn read_beu32( &mut self, now: Self::Instant, addr: Address ) -> Result<u32, Self::Error>
Read a single u32 value in big endian byte order at the given address
sourcefn read_leu32(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error>
fn read_leu32( &mut self, now: Self::Instant, addr: Address ) -> Result<u32, Self::Error>
Read a single u32 value in little endian byte order at the given address
sourcefn read_u32(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u32, Self::Error>
fn read_u32( &mut self, order: ByteOrder, now: Self::Instant, addr: Address ) -> Result<u32, Self::Error>
Read a single u32 value in the given byte order at the given address
sourcefn read_beu64(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error>
fn read_beu64( &mut self, now: Self::Instant, addr: Address ) -> Result<u64, Self::Error>
Read a single u64 value in big endian byte order at the given address
sourcefn read_leu64(
&mut self,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error>
fn read_leu64( &mut self, now: Self::Instant, addr: Address ) -> Result<u64, Self::Error>
Read a single u64 value in little endian byte order at the given address
sourcefn read_u64(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address
) -> Result<u64, Self::Error>
fn read_u64( &mut self, order: ByteOrder, now: Self::Instant, addr: Address ) -> Result<u64, Self::Error>
Read a single u64 value in the given byte order at the given address
sourcefn write_u8(
&mut self,
now: Self::Instant,
addr: Address,
value: u8
) -> Result<(), Self::Error>
fn write_u8( &mut self, now: Self::Instant, addr: Address, value: u8 ) -> Result<(), Self::Error>
Write a single u8 value to the given address
sourcefn write_beu16(
&mut self,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error>
fn write_beu16( &mut self, now: Self::Instant, addr: Address, value: u16 ) -> Result<(), Self::Error>
Write the given u16 value in big endian byte order to the given address
sourcefn write_leu16(
&mut self,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error>
fn write_leu16( &mut self, now: Self::Instant, addr: Address, value: u16 ) -> Result<(), Self::Error>
Write the given u16 value in little endian byte order to the given address
sourcefn write_u16(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address,
value: u16
) -> Result<(), Self::Error>
fn write_u16( &mut self, order: ByteOrder, now: Self::Instant, addr: Address, value: u16 ) -> Result<(), Self::Error>
Write the given u16 value in the given byte order to the given address
sourcefn write_beu32(
&mut self,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error>
fn write_beu32( &mut self, now: Self::Instant, addr: Address, value: u32 ) -> Result<(), Self::Error>
Write the given u32 value in big endian byte order to the given address
sourcefn write_leu32(
&mut self,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error>
fn write_leu32( &mut self, now: Self::Instant, addr: Address, value: u32 ) -> Result<(), Self::Error>
Write the given u32 value in little endian byte order to the given address
sourcefn write_u32(
&mut self,
order: ByteOrder,
now: Self::Instant,
addr: Address,
value: u32
) -> Result<(), Self::Error>
fn write_u32( &mut self, order: ByteOrder, now: Self::Instant, addr: Address, value: u32 ) -> Result<(), Self::Error>
Write the given u32 value in the given byte order to the given address
sourcefn write_beu64(
&mut self,
now: Self::Instant,
addr: Address,
value: u64
) -> Result<(), Self::Error>
fn write_beu64( &mut self, now: Self::Instant, addr: Address, value: u64 ) -> Result<(), Self::Error>
Write the given u64 value in big endian byte order to the given address