mmap support for mgba's partical redraw

master
PanQL 6 years ago
parent 545d9d301c
commit f9734b6134

@ -31,19 +31,6 @@ impl INode for Vga {
} }
fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> { fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> {
info!("the _offset is {} {}", _offset, _buf[0]); info!("the _offset is {} {}", _offset, _buf[0]);
//let mut result : usize = 0;
//if let Some(fb) = FRAME_BUFFER.lock().as_mut() {
//for x in 0..1024 { // TODO, should not use CONSTS
//for y in 0..768 {
//let blue = _buf[3 * (x * 768 + y)];
//let green = _buf[3 * (x * 768 + y) + 1];
//let red = _buf[3 * (x * 768 + y) + 2];
//let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32);
//fb.write(x as u32, y as u32, pixel);
//result += 3;
//}
//}
//}
use crate::consts::KERNEL_OFFSET; use crate::consts::KERNEL_OFFSET;
use core::slice; use core::slice;
let frame_buffer_data = let frame_buffer_data =

@ -1,4 +1,4 @@
use rcore_memory::memory_set::handler::{Delay, File}; use rcore_memory::memory_set::handler::{Delay, File, Linear};
use rcore_memory::memory_set::MemoryAttr; use rcore_memory::memory_set::MemoryAttr;
use rcore_memory::paging::PageTable; use rcore_memory::paging::PageTable;
use rcore_memory::Page; use rcore_memory::Page;
@ -53,7 +53,25 @@ impl Syscall<'_> {
); );
return Ok(addr); return Ok(addr);
} else { } else {
let inode = proc.get_file(fd)?.inode();
let file = proc.get_file(fd)?;
info!("mmap path is {} ", &*file.path);
match &*file.path {
"/dev/fb0" => {
self.vm().push(
addr,
addr + len,
prot.to_attr(),
Linear::new(
( 0xfd00_0000 - addr ) as isize,
),
"mmap_file",
);
info!("mmap for /dev/fb0");
return Ok(addr);
},
_ => {
let inode = file.inode();
self.vm().push( self.vm().push(
addr, addr,
addr + len, addr + len,
@ -68,6 +86,8 @@ impl Syscall<'_> {
"mmap_file", "mmap_file",
); );
return Ok(addr); return Ok(addr);
},
};
} }
} }

Loading…
Cancel
Save