diff --git a/lwcpu/src/lib.rs b/lwcpu/src/lib.rs index d7a9d21..eafe0d6 100644 --- a/lwcpu/src/lib.rs +++ b/lwcpu/src/lib.rs @@ -2,21 +2,21 @@ use core::ptr::{read_volatile, write_volatile}; -const BASE_POINTER: u32 = 0x1000_0000; +pub const BASE_POINTER: u32 = 0x1000_0000; -const NUMBER_DISPLAY_OFFSET: u32 = 0x00; -const RANDOM_NUMBER_OFFSET: u32 = 0x04; -const BUTTONS_OFFSET: u32 = 0x08; -const TEXT_DISPLAY_OFFSET: u32 = 0x0C; -const KEYBOARD_OFFSET: u32 = 0x10; -const SCREEN_OFFSET: u32 = 0x80; +pub const NUMBER_DISPLAY_OFFSET: u32 = 0x00; +pub const RANDOM_NUMBER_OFFSET: u32 = 0x04; +pub const BUTTONS_OFFSET: u32 = 0x08; +pub const TEXT_DISPLAY_OFFSET: u32 = 0x0C; +pub const KEYBOARD_OFFSET: u32 = 0x10; +pub const SCREEN_OFFSET: u32 = 0x80; -const NUMBER_DISPLAY_POINTER: *mut u32 = (BASE_POINTER + NUMBER_DISPLAY_OFFSET) as *mut u32; -const RANDOM_NUMBER_POINTER: *mut u32 = (BASE_POINTER + RANDOM_NUMBER_OFFSET) as *mut u32; -const BUTTONS_POINTER: *mut u8 = (BASE_POINTER + BUTTONS_OFFSET) as *mut u8; -const TEXT_DISPLAY_POINTER: *mut u8 = (BASE_POINTER + TEXT_DISPLAY_OFFSET) as *mut u8; -const KEYBOARD_POINTER: *mut u32 = (BASE_POINTER + KEYBOARD_OFFSET) as *mut u32; -const SCREEN_POINTER: *mut u32 = (BASE_POINTER + SCREEN_OFFSET) as *mut u32; +pub const NUMBER_DISPLAY_POINTER: *mut u32 = (BASE_POINTER + NUMBER_DISPLAY_OFFSET) as *mut u32; +pub const RANDOM_NUMBER_POINTER: *mut u32 = (BASE_POINTER + RANDOM_NUMBER_OFFSET) as *mut u32; +pub const BUTTONS_POINTER: *mut u8 = (BASE_POINTER + BUTTONS_OFFSET) as *mut u8; +pub const TEXT_DISPLAY_POINTER: *mut u8 = (BASE_POINTER + TEXT_DISPLAY_OFFSET) as *mut u8; +pub const KEYBOARD_POINTER: *mut u32 = (BASE_POINTER + KEYBOARD_OFFSET) as *mut u32; +pub const SCREEN_POINTER: *mut u32 = (BASE_POINTER + SCREEN_OFFSET) as *mut u32; pub struct Screen {} impl Screen { diff --git a/test/src/main.rs b/test/src/main.rs index f3a14e6..2438daa 100644 --- a/test/src/main.rs +++ b/test/src/main.rs @@ -1,8 +1,8 @@ #![no_std] #![no_main] -use core::{fmt::Write, panic::PanicInfo}; -use lwcpu::{NumberDisplay, TextDisplay}; +use core::{fmt::Write, panic::PanicInfo, ptr::{read_volatile, write_volatile}}; +use lwcpu::{NumberDisplay, TextDisplay, SCREEN_POINTER}; use riscv_rt::entry; #[panic_handler] @@ -18,6 +18,13 @@ const HELLO_WORLD: &str = " Hello world!"; #[entry] fn main() -> ! { let mut text = TextDisplay{}; + unsafe { + write_volatile(SCREEN_POINTER, 0x001166ff); + write_volatile(SCREEN_POINTER.offset(1), 0xAAAAAAAA); + let ptr = SCREEN_POINTER as *mut u8; + let b = read_volatile(ptr.offset(1)); + write_volatile(ptr.offset(5), b); + } loop { let _ = text.write_str(HELLO_WORLD); panic!("Lmao")