CONTEXT is instanciated at compile time now
This commit is contained in:
parent
c1cb1e5620
commit
2503fdb96d
4 changed files with 20 additions and 26 deletions
|
|
@ -2,6 +2,11 @@ extern crate core;
|
||||||
|
|
||||||
use vga;
|
use vga;
|
||||||
|
|
||||||
|
pub static mut CONTEXT: Context = Context {
|
||||||
|
current_term: 0,
|
||||||
|
vga1: vga::Writer::new(),
|
||||||
|
vga2: vga::Writer::new(),
|
||||||
|
};
|
||||||
|
|
||||||
pub struct Context {
|
pub struct Context {
|
||||||
pub current_term: u8,
|
pub current_term: u8,
|
||||||
|
|
@ -10,14 +15,6 @@ pub struct Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Context {
|
impl Context {
|
||||||
pub fn new() -> Context {
|
|
||||||
Context {
|
|
||||||
current_term: 0,
|
|
||||||
vga1: vga::Writer::new(),
|
|
||||||
vga2: vga::Writer::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn switch_term(&mut self) {
|
pub fn switch_term(&mut self) {
|
||||||
self.current_term = {
|
self.current_term = {
|
||||||
if self.current_term == 0 { 1 }
|
if self.current_term == 0 { 1 }
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,28 @@
|
||||||
extern crate core;
|
extern crate core;
|
||||||
|
|
||||||
use cpuio;
|
use cpuio;
|
||||||
use context;
|
use context::CONTEXT;
|
||||||
// use vga::color::{Color, ColorCode};
|
// use vga::color::{Color, ColorCode};
|
||||||
|
|
||||||
pub static SCANCODE_TO_ASCII: [u8; 59] = *b"??1234567890-=??qwertyuiop[]\n?asdfghjkl;'`?\\zxcvbnm,./?*? ?";
|
pub static SCANCODE_TO_ASCII: [u8; 59] = *b"??1234567890-=??qwertyuiop[]\n?asdfghjkl;'`?\\zxcvbnm,./?*? ?";
|
||||||
|
|
||||||
pub fn kbd_callback(context: &mut context::Context) {
|
pub fn kbd_callback() {
|
||||||
// let terminal_two: vga::terminal::Terminal = vga::Screen::new();
|
// let terminal_two: vga::terminal::Terminal = vga::Screen::new();
|
||||||
let control = unsafe { cpuio::inb(0x64) };
|
let control = unsafe { cpuio::inb(0x64) };
|
||||||
if (control & 1) == 1 {
|
if (control & 1) == 1 {
|
||||||
let scancode = unsafe { cpuio::inb(0x60) };
|
let scancode = unsafe { cpuio::inb(0x60) };
|
||||||
//TODO implement logic to translate scancode->ascii
|
unsafe {
|
||||||
match self::SCANCODE_TO_ASCII.get(scancode as usize) {
|
match self::SCANCODE_TO_ASCII.get(scancode as usize) {
|
||||||
Some(&b'1') => {
|
Some(&b'1') => {
|
||||||
context.switch_term();
|
CONTEXT.switch_term();
|
||||||
context.current_term().flush();
|
CONTEXT.current_term().flush();
|
||||||
|
}
|
||||||
|
Some(ascii) => {
|
||||||
|
CONTEXT.current_term().keypress(*ascii);
|
||||||
|
},
|
||||||
|
None =>{},
|
||||||
|
// None => println!("nokey ctrl {:x}", control),
|
||||||
}
|
}
|
||||||
Some(ascii) => {
|
|
||||||
let mut terminal = context.current_term();
|
|
||||||
terminal.keypress(*ascii);
|
|
||||||
},
|
|
||||||
None =>{},
|
|
||||||
// None => println!("nokey ctrl {:x}", control),
|
|
||||||
}
|
}
|
||||||
// current_screen.flush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,10 +41,8 @@ pub extern fn kmain() -> ! {
|
||||||
// WRITER.lock().color_code = ColorCode::new(Color::White, Color::Black);
|
// WRITER.lock().color_code = ColorCode::new(Color::White, Color::Black);
|
||||||
// println!(">> Kernel startup...");
|
// println!(">> Kernel startup...");
|
||||||
|
|
||||||
let mut context = context::Context::new();
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
keyboard::kbd_callback(&mut context);
|
keyboard::kbd_callback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ pub struct Writer {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Writer {
|
impl Writer {
|
||||||
pub fn new() -> Writer {
|
pub const fn new() -> Writer {
|
||||||
Writer {
|
Writer {
|
||||||
position: 0,
|
position: 0,
|
||||||
color_code: ColorCode::new(Color::White, Color::Black),
|
color_code: ColorCode::new(Color::White, Color::Black),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue