diff --git a/kernel-rs/src/keyboard.rs b/kernel-rs/src/keyboard.rs index 8ea0148b..cb679002 100644 --- a/kernel-rs/src/keyboard.rs +++ b/kernel-rs/src/keyboard.rs @@ -19,6 +19,7 @@ pub fn kbd_callback() { } Some(ascii) => { CONTEXT.current_term().keypress(*ascii); + CONTEXT.current_term().flush(); }, None =>{}, // None => println!("nokey ctrl {:x}", control), diff --git a/kernel-rs/src/lib.rs b/kernel-rs/src/lib.rs index 77f1d37d..35fd69ad 100644 --- a/kernel-rs/src/lib.rs +++ b/kernel-rs/src/lib.rs @@ -22,24 +22,21 @@ pub extern fn kmain() -> ! { // use vga::color::Color; // use vga::color::ColorCode; - // WRITER.lock().reset_screen(); - // WRITER.lock().color_code = ColorCode::new(Color::Yellow, Color::Black); - // println!(r#" ,--, "#); - // println!(r#" ,--.'| ,----, "#); - // println!(r#" ,--, | : .' .' \ "#); - // println!(r#",---.'| : ' ,----,' | "#); - // println!(r#"; : | | ; | : . ; "#); - // println!(r#"| | : _' | ; |.' / "#); - // println!(r#": : |.' | `----'/ ; "#); - // println!(r#"| ' ' ; : / ; / "#); - // println!(r#"\ \ .'. | ; / /-, "#); - // println!(r#" `---`: | ' / / /.`| "#); - // println!(r#" ' ; |./__; : "#); - // println!(r#" | : ;| : .' "#); - // println!(r#" ' ,/ ; | .' "#); - // println!(r#" '--' `---' "#); - // WRITER.lock().color_code = ColorCode::new(Color::White, Color::Black); - // println!(">> Kernel startup..."); + println!(r#" ,--, "#); + println!(r#" ,--.'| ,----, "#); + println!(r#" ,--, | : .' .' \ "#); + println!(r#",---.'| : ' ,----,' | "#); + println!(r#"; : | | ; | : . ; "#); + println!(r#"| | : _' | ; |.' / "#); + println!(r#": : |.' | `----'/ ; "#); + println!(r#"| ' ' ; : / ; / "#); + println!(r#"\ \ .'. | ; / /-, "#); + println!(r#" `---`: | ' / / /.`| "#); + println!(r#" ' ; |./__; : "#); + println!(r#" | : ;| : .' "#); + println!(r#" ' ,/ ; | .' "#); + println!(r#" '--' `---' "#); + println!(">> Kernel startup..."); loop { keyboard::kbd_callback(); diff --git a/kernel-rs/src/vga/buffer.rs b/kernel-rs/src/vga/buffer.rs index eb946ea9..7faf3e43 100644 --- a/kernel-rs/src/vga/buffer.rs +++ b/kernel-rs/src/vga/buffer.rs @@ -8,6 +8,7 @@ // except according to those terms. use super::{Color, ColorCode}; +use ::context::CONTEXT; #[derive(Debug, Clone, Copy)] #[repr(C)] @@ -16,21 +17,21 @@ struct ScreenChar { color_code: ColorCode, } -// macro_rules! print { -// ($($arg:tt)*) => ({ -// $crate::vga_buffer::print(format_args!($($arg)*)); -// }); -// } +macro_rules! print { + ($($arg:tt)*) => ({ + $crate::vga::buffer::print(format_args!($($arg)*)); + }); +} -// macro_rules! println { -// ($fmt:expr) => (print!(concat!($fmt, "\n"))); -// ($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\n"), $($arg)*)); -// } +macro_rules! println { + ($fmt:expr) => (print!(concat!($fmt, "\n"))); + ($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\n"), $($arg)*)); +} -// pub fn print(args: fmt::Arguments) { -// use core::fmt::Write; -// context.current_screen().write_fmt(args).unwrap(); -// } +pub fn print(args: fmt::Arguments) { + use core::fmt::Write; + unsafe { CONTEXT.current_term().write_fmt(args).unwrap() }; +} extern crate core; @@ -87,7 +88,6 @@ impl Writer { self.buffer[self.position] = b' '; self.buffer[self.position + 1] = ColorCode::new(Color::LightGray, Color::LightGray).0; - self.flush(); } pub fn flush(&mut self) { @@ -119,6 +119,7 @@ impl fmt::Write for Writer { for byte in s.bytes() { self.write_byte(byte) } + self.flush(); Ok(()) } }