mirror of
https://github.com/iceHtwoO/novaOS.git
synced 2026-04-17 04:32:27 +00:00
Compare commits
2 Commits
80c4c3604c
...
e6899097fc
| Author | SHA1 | Date | |
|---|---|---|---|
| e6899097fc | |||
| a4250898c0 |
9
Cargo.lock
generated
9
Cargo.lock
generated
@@ -2,6 +2,15 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libm"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nova"
|
name = "nova"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"libm",
|
||||||
|
]
|
||||||
|
|||||||
@@ -11,3 +11,6 @@ opt-level = 0
|
|||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
panic = "abort"
|
panic = "abort"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
libm = "0.2.15"
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
use core::ptr::write_volatile;
|
use core::ptr::write_volatile;
|
||||||
|
|
||||||
|
mod bitmaps;
|
||||||
|
|
||||||
|
use bitmaps::BASIC_LEGACY;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
mailbox::{read_mailbox, write_mailbox},
|
mailbox::{read_mailbox, write_mailbox},
|
||||||
peripherals::uart::{print, print_u32, print_u32_hex},
|
peripherals::uart::{print, print_u32, print_u32_hex},
|
||||||
@@ -196,6 +200,22 @@ impl FrameBuffer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn draw_letter(&self, x: u32, y: u32, scale: u32) {
|
||||||
|
for (y_offset, row) in (&BASIC_LEGACY[0x70]).iter().enumerate() {
|
||||||
|
for bit in 0..8 {
|
||||||
|
match row & (1 << bit) {
|
||||||
|
0 => {}
|
||||||
|
_ => self.draw_square_fill(
|
||||||
|
x + (bit * scale),
|
||||||
|
y + (y_offset as u32 * scale),
|
||||||
|
x + ((bit + 1) * scale),
|
||||||
|
y + ((y_offset + 1) as u32 * scale),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_display_resolution() {
|
pub fn print_display_resolution() {
|
||||||
|
|||||||
132
src/framebuffer/bitmaps.rs
Normal file
132
src/framebuffer/bitmaps.rs
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
pub const NOTHING_TO_DISPLAY: [u8; 8] = [0x00; 8];
|
||||||
|
|
||||||
|
pub const BASIC_LEGACY: [[u8; 8]; 128] = [
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
[0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00],
|
||||||
|
[0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
[0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00],
|
||||||
|
[0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00],
|
||||||
|
[0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00],
|
||||||
|
[0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00],
|
||||||
|
[0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
[0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00],
|
||||||
|
[0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00],
|
||||||
|
[0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00],
|
||||||
|
[0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00],
|
||||||
|
[0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06],
|
||||||
|
[0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
[0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00],
|
||||||
|
[0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00],
|
||||||
|
[0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00],
|
||||||
|
[0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00],
|
||||||
|
[0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00],
|
||||||
|
[0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00],
|
||||||
|
[0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00],
|
||||||
|
[0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00],
|
||||||
|
[0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00],
|
||||||
|
[0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00],
|
||||||
|
[0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00],
|
||||||
|
[0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00],
|
||||||
|
[0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00],
|
||||||
|
[0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06],
|
||||||
|
[0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00],
|
||||||
|
[0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00],
|
||||||
|
[0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00],
|
||||||
|
[0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00],
|
||||||
|
[0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00],
|
||||||
|
[0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00],
|
||||||
|
[0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00],
|
||||||
|
[0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00],
|
||||||
|
[0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00],
|
||||||
|
[0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00],
|
||||||
|
[0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00],
|
||||||
|
[0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00],
|
||||||
|
[0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00],
|
||||||
|
[0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00],
|
||||||
|
[0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00],
|
||||||
|
[0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00],
|
||||||
|
[0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00],
|
||||||
|
[0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00],
|
||||||
|
[0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00],
|
||||||
|
[0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00],
|
||||||
|
[0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00],
|
||||||
|
[0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00],
|
||||||
|
[0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00],
|
||||||
|
[0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00],
|
||||||
|
[0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00],
|
||||||
|
[0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00],
|
||||||
|
[0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00],
|
||||||
|
[0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00],
|
||||||
|
[0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00],
|
||||||
|
[0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00],
|
||||||
|
[0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00],
|
||||||
|
[0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00],
|
||||||
|
[0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00],
|
||||||
|
[0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00],
|
||||||
|
[0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF],
|
||||||
|
[0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
[0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00],
|
||||||
|
[0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00],
|
||||||
|
[0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00],
|
||||||
|
[0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00],
|
||||||
|
[0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00],
|
||||||
|
[0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00],
|
||||||
|
[0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F],
|
||||||
|
[0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00],
|
||||||
|
[0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00],
|
||||||
|
[0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E],
|
||||||
|
[0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00],
|
||||||
|
[0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00],
|
||||||
|
[0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00],
|
||||||
|
[0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00],
|
||||||
|
[0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00],
|
||||||
|
[0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F],
|
||||||
|
[0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78],
|
||||||
|
[0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00],
|
||||||
|
[0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00],
|
||||||
|
[0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00],
|
||||||
|
[0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00],
|
||||||
|
[0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00],
|
||||||
|
[0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00],
|
||||||
|
[0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00],
|
||||||
|
[0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F],
|
||||||
|
[0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00],
|
||||||
|
[0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00],
|
||||||
|
[0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00],
|
||||||
|
[0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00],
|
||||||
|
[0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
|
||||||
|
NOTHING_TO_DISPLAY,
|
||||||
|
];
|
||||||
@@ -8,6 +8,7 @@ pub mod configuration;
|
|||||||
pub mod framebuffer;
|
pub mod framebuffer;
|
||||||
pub mod irq_interrupt;
|
pub mod irq_interrupt;
|
||||||
pub mod mailbox;
|
pub mod mailbox;
|
||||||
|
pub mod math;
|
||||||
pub mod timer;
|
pub mod timer;
|
||||||
|
|
||||||
pub fn mmio_read(address: u32) -> u32 {
|
pub fn mmio_read(address: u32) -> u32 {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ use nova::{
|
|||||||
framebuffer::{print_display_resolution, FrameBuffer},
|
framebuffer::{print_display_resolution, FrameBuffer},
|
||||||
irq_interrupt::enable_irq_source,
|
irq_interrupt::enable_irq_source,
|
||||||
mailbox::read_soc_temp,
|
mailbox::read_soc_temp,
|
||||||
|
math::polar_to_cartesian,
|
||||||
peripherals::{
|
peripherals::{
|
||||||
gpio::{
|
gpio::{
|
||||||
blink_gpio, gpio_pull_up, set_falling_edge_detect, set_gpio_function, GPIOFunction,
|
blink_gpio, gpio_pull_up, set_falling_edge_detect, set_gpio_function, GPIOFunction,
|
||||||
@@ -97,12 +98,16 @@ pub extern "C" fn kernel_main() -> ! {
|
|||||||
let fb = FrameBuffer::new();
|
let fb = FrameBuffer::new();
|
||||||
print_display_resolution();
|
print_display_resolution();
|
||||||
|
|
||||||
fb.draw_line(10, 10, 1000, 10);
|
for a in 0..360 {
|
||||||
fb.draw_line(1000, 20, 10, 20);
|
let (x, y) = polar_to_cartesian(100.0, a as f32);
|
||||||
|
fb.draw_line(150, 150, (150.0 + x) as u32, (150.0 + y) as u32);
|
||||||
|
}
|
||||||
|
|
||||||
fb.draw_square(500, 500, 600, 700);
|
fb.draw_square(500, 500, 600, 700);
|
||||||
fb.draw_square_fill(800, 800, 900, 900);
|
fb.draw_square_fill(800, 800, 900, 900);
|
||||||
fb.draw_square_fill(1000, 800, 1200, 700);
|
fb.draw_square_fill(1000, 800, 1200, 700);
|
||||||
fb.draw_square_fill(900, 100, 800, 150);
|
fb.draw_square_fill(900, 100, 800, 150);
|
||||||
|
fb.draw_letter(500, 5, 4);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let temp = read_soc_temp();
|
let temp = read_soc_temp();
|
||||||
|
|||||||
5
src/math.rs
Normal file
5
src/math.rs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
pub fn polar_to_cartesian(r: f32, theta_rad: f32) -> (f32, f32) {
|
||||||
|
let x = r * libm::cosf(theta_rad);
|
||||||
|
let y = r * libm::sinf(theta_rad);
|
||||||
|
(x, y)
|
||||||
|
}
|
||||||
@@ -8,5 +8,4 @@ qemu-system-aarch64 \
|
|||||||
-cpu cortex-a53 \
|
-cpu cortex-a53 \
|
||||||
-serial stdio \
|
-serial stdio \
|
||||||
-sd ../sd.img \
|
-sd ../sd.img \
|
||||||
-display none \
|
|
||||||
-kernel ../target/aarch64-unknown-none/release/kernel8.img
|
-kernel ../target/aarch64-unknown-none/release/kernel8.img
|
||||||
|
|||||||
Reference in New Issue
Block a user