More screen control

master
D4VID 3 months ago
parent a951102ab8
commit c7165476b1

@ -48,6 +48,33 @@ impl Screen {
} }
} }
#[inline] #[inline]
pub fn clear() {
unsafe {
// Write a 1 to the screen clear byte
write_volatile(SCREEN_CONTROL_POINTER as *mut u8, 1);
write_volatile(SCREEN_CONTROL_POINTER as *mut u8, 0);
}
}
#[inline]
pub fn display() {
unsafe {
// Write a 1 to the screen display byte
write_volatile((SCREEN_CONTROL_POINTER as *mut u8).byte_offset(1), 1);
write_volatile((SCREEN_CONTROL_POINTER as *mut u8).byte_offset(1), 0);
}
}
#[inline]
pub fn change_mode(mode: ScreenMode) {
match mode {
ScreenMode::AlwaysDisplay => unsafe {
write_volatile((SCREEN_CONTROL_POINTER as *mut u8).byte_offset(1), 1);
},
ScreenMode::Buffered => unsafe {
write_volatile((SCREEN_CONTROL_POINTER as *mut u8).byte_offset(1), 0);
},
}
}
#[inline]
pub fn turn_pixel_on(x: u8, y: u8) { pub fn turn_pixel_on(x: u8, y: u8) {
unsafe { unsafe {
let mut row = read_volatile(SCREEN_POINTER.offset(y as isize)); let mut row = read_volatile(SCREEN_POINTER.offset(y as isize));

@ -18,12 +18,16 @@ const HELLO_WORLD: &str = " Hello world!";
#[entry] #[entry]
fn main() -> ! { fn main() -> ! {
NumberDisplay::display_number(0); NumberDisplay::display_number(0);
Screen::init(ScreenMode::AlwaysDisplay); Screen::init(ScreenMode::Buffered);
let mut text = TextDisplay{}; let mut text = TextDisplay{};
text.init(); text.init();
for i in 0..32 { for i in 0..32 {
Screen::set_line(i, 1 << i); Screen::set_line(i, 1 << i);
} }
Screen::display();
Screen::clear();
Screen::display();
Screen::change_mode(ScreenMode::AlwaysDisplay);
unsafe { unsafe {
write_volatile(SCREEN_POINTER, 0x001166ff); write_volatile(SCREEN_POINTER, 0x001166ff);
write_volatile(SCREEN_POINTER.offset(1), 0xAAAAAAAA); write_volatile(SCREEN_POINTER.offset(1), 0xAAAAAAAA);

Loading…
Cancel
Save