parent
e65e934188
commit
1b16980ed7
@ -0,0 +1 @@
|
||||
/target
|
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "lwcpu"
|
||||
version = "0.1.0"
|
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "lwcpu"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
@ -0,0 +1,70 @@
|
||||
#![no_std]
|
||||
|
||||
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;
|
||||
|
||||
|
||||
pub struct Screen {}
|
||||
impl Screen {
|
||||
#[inline]
|
||||
pub fn clear() {
|
||||
}
|
||||
#[inline]
|
||||
pub fn turn_pixel_on(x: u8, y: u8) {
|
||||
unsafe {
|
||||
let mut row = read_volatile(SCREEN_POINTER.offset(y as isize));
|
||||
row |= 1 << x;
|
||||
write_volatile(SCREEN_POINTER.offset(y as isize), row);
|
||||
}
|
||||
}
|
||||
#[inline]
|
||||
pub fn turn_pixel_off(x: u8, y: u8) {
|
||||
unsafe {
|
||||
let mut row = read_volatile(SCREEN_POINTER.offset(y as isize));
|
||||
row &= !(1 << x);
|
||||
write_volatile(SCREEN_POINTER.offset(y as isize), row);
|
||||
}
|
||||
}
|
||||
#[inline]
|
||||
pub fn set_line(y: u8, value: u32) {
|
||||
unsafe {
|
||||
write_volatile(SCREEN_POINTER.offset(y as isize), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TextDisplay {}
|
||||
impl TextDisplay {
|
||||
#[inline]
|
||||
pub fn put_char(ch: u8) {
|
||||
unsafe {
|
||||
write_volatile(TEXT_DISPLAY_POINTER, ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct NumberDisplay {}
|
||||
impl NumberDisplay {
|
||||
#[inline]
|
||||
pub fn display_number(number: u32) {
|
||||
unsafe {
|
||||
write_volatile(NUMBER_DISPLAY_POINTER, number);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue