keyboard input is now in irq compliant mode
This commit is contained in:
parent
d382b623a4
commit
1c606561a1
2 changed files with 35 additions and 26 deletions
|
|
@ -7,3 +7,4 @@ $(grub-iso): $(kernel) $(grub-cfg) Makefile
|
|||
@cp $(grub-cfg) $(isodir)/boot/grub
|
||||
@cp $(kernel) $(isodir)/boot/$(OS)
|
||||
@grub-mkrescue -o $@ $(isodir) 2>/dev/null
|
||||
@printf "\r\033[38;5;117m✓ GRUB ==> $(grub-iso)\033[0m\033[K\n"
|
||||
|
|
|
|||
|
|
@ -76,13 +76,23 @@ fn check_key_state(key: u8) -> (bool, usize) {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_scancode() -> u8 {
|
||||
let mut scancode = 0;
|
||||
loop {
|
||||
if cpuio::inb(0x60) != scancode {
|
||||
scancode = cpuio::inb(0x60);
|
||||
if scancode > 0 {
|
||||
return scancode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn kbd_callback() {
|
||||
static mut SHIFT: bool = false;
|
||||
static mut CTRL: bool = false;
|
||||
static mut ALT: bool = false;
|
||||
let control = cpuio::inb(0x64);
|
||||
if (control & 1) == 1 {
|
||||
let scancode = cpuio::inb(0x60);
|
||||
let scancode = get_scancode();
|
||||
let (is_release, scancode) = check_key_state(scancode);
|
||||
unsafe {
|
||||
//TODO remove unsafe
|
||||
|
|
@ -100,9 +110,7 @@ pub fn kbd_callback() {
|
|||
let sym = if SHIFT { ascii[1] } else { ascii[0] };
|
||||
vga::VGA.keypress(sym);
|
||||
}
|
||||
Some(_) => {}
|
||||
None => {}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue