#![allow(dead_code)]
unsafe fn byte_ptr(base: *const u8, offset: usize) -> *const u8 {
unsafe { base.add(offset) }
}
unsafe fn byte_mut_ptr(base: *mut u8, offset: usize) -> *mut u8 {
unsafe { base.add(offset) }
}
unsafe fn read_byte(base: *const u8, offset: usize) -> u8 {
let ptr = unsafe { byte_ptr(base, offset) };
unsafe { ptr.read_volatile() }
}
unsafe fn write_byte(base: *mut u8, offset: usize, value: u8) {
let ptr = unsafe { byte_mut_ptr(base, offset) };
unsafe { ptr.write_volatile(value) };
}
pub(crate) unsafe fn rv_u32(base: *const u8, offset: usize) -> u32 {
let b0 = unsafe { read_byte(base, offset) };
let b1 = unsafe { read_byte(base, offset + 1) };
let b2 = unsafe { read_byte(base, offset + 2) };
let b3 = unsafe { read_byte(base, offset + 3) };
u32::from_le_bytes([b0, b1, b2, b3])
}
pub(crate) unsafe fn rv_u16(base: *const u8, offset: usize) -> u16 {
let b0 = unsafe { read_byte(base, offset) };
let b1 = unsafe { read_byte(base, offset + 1) };
u16::from_le_bytes([b0, b1])
}
pub(crate) unsafe fn rv_u8(base: *const u8, offset: usize) -> u8 {
unsafe { read_byte(base, offset) }
}
pub(crate) unsafe fn wv_u32(base: *mut u8, offset: usize, value: u32) {
let [b0, b1, b2, b3] = value.to_le_bytes();
unsafe { write_byte(base, offset, b0) };
unsafe { write_byte(base, offset + 1, b1) };
unsafe { write_byte(base, offset + 2, b2) };
unsafe { write_byte(base, offset + 3, b3) };
}
pub(crate) unsafe fn wv_u16(base: *mut u8, offset: usize, value: u16) {
let [b0, b1] = value.to_le_bytes();
unsafe { write_byte(base, offset, b0) };
unsafe { write_byte(base, offset + 1, b1) };
}
pub(crate) unsafe fn wv_u8(base: *mut u8, offset: usize, value: u8) {
unsafe { write_byte(base, offset, value) };
}