diff --git a/lwcpu/src/lib.rs b/lwcpu/src/lib.rs index d93fe4c..9142050 100644 --- a/lwcpu/src/lib.rs +++ b/lwcpu/src/lib.rs @@ -7,9 +7,10 @@ pub const BASE_POINTER : u32 = 0x1000_0000; 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 = 0x28; pub const KEYBOARD_OFFSET : u32 = 0x10; pub const SCREEN_CONTROL_OFFSET : u32 = 0x20; +pub const TEXT_CONTROL_OFFSET : u32 = 0x24; +pub const TEXT_DISPLAY_OFFSET : u32 = 0x28; pub const SCREEN_OFFSET : u32 = 0x80; pub const NUMBER_DISPLAY_POINTER : *mut u32 = (BASE_POINTER + NUMBER_DISPLAY_OFFSET) as *mut u32; @@ -18,6 +19,7 @@ pub const BUTTONS_POINTER : *mut u8 = (BASE_POINTER + BUTTONS_OFFSET) 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_CONTROL_POINTER : *mut u32 = (BASE_POINTER + SCREEN_CONTROL_OFFSET) as *mut u32; +pub const TEXT_CONTROL_POINTER : *mut u32 = (BASE_POINTER + TEXT_CONTROL_OFFSET) as *mut u32; pub const SCREEN_POINTER : *mut u32 = (BASE_POINTER + SCREEN_OFFSET) as *mut u32; @@ -71,6 +73,16 @@ impl Screen { pub struct TextDisplay {} impl TextDisplay { + const TEXT_CLEAR: u32 = 0x0000_0001; + const TEXT_DISPLAY: u32 = 0x0000_0100; + + #[inline] + pub fn init(&self) { + unsafe { + write_volatile(TEXT_CONTROL_POINTER, Self::TEXT_CLEAR); // hide contents and clear + write_volatile(TEXT_CONTROL_POINTER, Self::TEXT_DISPLAY); // display contents + } + } #[inline] pub fn put_char(ch: u8) { unsafe { diff --git a/test/src/main.rs b/test/src/main.rs index 0a831e7..29e1031 100644 --- a/test/src/main.rs +++ b/test/src/main.rs @@ -17,8 +17,13 @@ const HELLO_WORLD: &str = " Hello world!"; #[entry] fn main() -> ! { + NumberDisplay::display_number(0); Screen::init(ScreenMode::AlwaysDisplay); let mut text = TextDisplay{}; + text.init(); + for i in 0..32 { + Screen::set_line(i, 1 << i); + } unsafe { write_volatile(SCREEN_POINTER, 0x001166ff); write_volatile(SCREEN_POINTER.offset(1), 0xAAAAAAAA);