|
|
|
@ -4,26 +4,24 @@ use core::ptr::{read_volatile, write_volatile};
|
|
|
|
|
|
|
|
|
|
const BASE_POINTER: u32 = 0x2000_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;
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
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 struct Screen {}
|
|
|
|
|
impl Screen {
|
|
|
|
|
#[inline]
|
|
|
|
|
pub fn clear() {
|
|
|
|
|
}
|
|
|
|
|
pub fn clear() {}
|
|
|
|
|
#[inline]
|
|
|
|
|
pub fn turn_pixel_on(x: u8, y: u8) {
|
|
|
|
|
unsafe {
|
|
|
|
@ -57,6 +55,17 @@ impl TextDisplay {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
impl core::fmt::Write for TextDisplay {
|
|
|
|
|
#[inline]
|
|
|
|
|
fn write_str(&mut self, s: &str) -> core::fmt::Result {
|
|
|
|
|
for ch in s.bytes() {
|
|
|
|
|
unsafe {
|
|
|
|
|
write_volatile(TEXT_DISPLAY_POINTER, ch);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Ok(());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub struct NumberDisplay {}
|
|
|
|
|
impl NumberDisplay {
|
|
|
|
@ -83,13 +92,13 @@ impl RNG {
|
|
|
|
|
pub struct Buttons {}
|
|
|
|
|
impl Buttons {
|
|
|
|
|
pub const RIGHT_RIGHT: u8 = 0b00000001;
|
|
|
|
|
pub const RIGHT_DOWN : u8 = 0b00000010;
|
|
|
|
|
pub const RIGHT_LEFT : u8 = 0b00000100;
|
|
|
|
|
pub const RIGHT_UP : u8 = 0b00001000;
|
|
|
|
|
pub const LEFT_RIGHT : u8 = 0b00010000;
|
|
|
|
|
pub const LEFT_DOWN : u8 = 0b00100000;
|
|
|
|
|
pub const LEFT_LEFT : u8 = 0b01000000;
|
|
|
|
|
pub const LEFT_UP : u8 = 0b10000000;
|
|
|
|
|
pub const RIGHT_DOWN: u8 = 0b00000010;
|
|
|
|
|
pub const RIGHT_LEFT: u8 = 0b00000100;
|
|
|
|
|
pub const RIGHT_UP: u8 = 0b00001000;
|
|
|
|
|
pub const LEFT_RIGHT: u8 = 0b00010000;
|
|
|
|
|
pub const LEFT_DOWN: u8 = 0b00100000;
|
|
|
|
|
pub const LEFT_LEFT: u8 = 0b01000000;
|
|
|
|
|
pub const LEFT_UP: u8 = 0b10000000;
|
|
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
|
pub fn read() -> u8 {
|
|
|
|
|