simple gui app can run now!
This commit is contained in:
parent
944f114cf8
commit
beaef1f304
11 changed files with 119 additions and 3 deletions
|
@ -10,6 +10,7 @@ edition = "2018"
|
|||
buddy_system_allocator = "0.6"
|
||||
bitflags = "1.2.1"
|
||||
riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] }
|
||||
embedded-graphics = "0.7.1"
|
||||
|
||||
[profile.release]
|
||||
debug = true
|
||||
|
|
35
user/src/bin/gui_simple.rs
Normal file
35
user/src/bin/gui_simple.rs
Normal file
|
@ -0,0 +1,35 @@
|
|||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use user_lib::{framebuffer, framebuffer_flush};
|
||||
|
||||
#[macro_use]
|
||||
extern crate user_lib;
|
||||
|
||||
// use embedded_graphics::pixelcolor::Rgb888;
|
||||
// use embedded_graphics::prelude::{Drawable, Point, RgbColor, Size};
|
||||
// use embedded_graphics::primitives::Primitive;
|
||||
// use embedded_graphics::primitives::{PrimitiveStyle, Rectangle};
|
||||
// use embedded_graphics::{
|
||||
// draw_target::DrawTarget,
|
||||
// prelude::{OriginDimensions},
|
||||
// };
|
||||
pub const VIRTGPU_XRES: usize = 1280;
|
||||
pub const VIRTGPU_YRES: usize = 800;
|
||||
|
||||
#[no_mangle]
|
||||
pub fn main() -> i32 {
|
||||
let fb_ptr =framebuffer() as *mut u8;
|
||||
println!("Hello world from user mode program! 0x{:X} , len {}", fb_ptr as usize, VIRTGPU_XRES*VIRTGPU_YRES*4);
|
||||
let fb= unsafe {core::slice::from_raw_parts_mut(fb_ptr as *mut u8, VIRTGPU_XRES*VIRTGPU_YRES*4 as usize)};
|
||||
for y in 0..800 {
|
||||
for x in 0..1280 {
|
||||
let idx = (y * 1280 + x) * 4;
|
||||
fb[idx] = x as u8;
|
||||
fb[idx + 1] = y as u8;
|
||||
fb[idx + 2] = (x + y) as u8;
|
||||
}
|
||||
}
|
||||
framebuffer_flush();
|
||||
0
|
||||
}
|
|
@ -198,6 +198,12 @@ pub fn condvar_signal(condvar_id: usize) {
|
|||
pub fn condvar_wait(condvar_id: usize, mutex_id: usize) {
|
||||
sys_condvar_wait(condvar_id, mutex_id);
|
||||
}
|
||||
pub fn framebuffer() -> isize {
|
||||
sys_framebuffer()
|
||||
}
|
||||
pub fn framebuffer_flush() -> isize {
|
||||
sys_framebuffer_flush()
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! vstore {
|
||||
|
|
|
@ -25,6 +25,8 @@ const SYSCALL_SEMAPHORE_DOWN: usize = 1022;
|
|||
const SYSCALL_CONDVAR_CREATE: usize = 1030;
|
||||
const SYSCALL_CONDVAR_SIGNAL: usize = 1031;
|
||||
const SYSCALL_CONDVAR_WAIT: usize = 1032;
|
||||
const SYSCALL_FRAMEBUFFER: usize = 2000;
|
||||
const SYSCALL_FRAMEBUFFER_FLUSH: usize = 2001;
|
||||
|
||||
fn syscall(id: usize, args: [usize; 3]) -> isize {
|
||||
let mut ret: isize;
|
||||
|
@ -154,3 +156,12 @@ pub fn sys_condvar_signal(condvar_id: usize) -> isize {
|
|||
pub fn sys_condvar_wait(condvar_id: usize, mutex_id: usize) -> isize {
|
||||
syscall(SYSCALL_CONDVAR_WAIT, [condvar_id, mutex_id, 0])
|
||||
}
|
||||
|
||||
|
||||
pub fn sys_framebuffer() -> isize {
|
||||
syscall(SYSCALL_FRAMEBUFFER, [0, 0, 0])
|
||||
}
|
||||
|
||||
pub fn sys_framebuffer_flush() -> isize {
|
||||
syscall(SYSCALL_FRAMEBUFFER_FLUSH, [0, 0, 0])
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue