Flash things onto screen
also make the keyboard interrupt try to work?
This commit is contained in:
@@ -20,25 +20,30 @@ pub extern fn rust_interrupt_handler() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern fn rust_handle_keyboard() {
|
pub extern fn rust_handle_keyboard(x: u8) {
|
||||||
checkerboard(vga_buffer::Color::Green);
|
checkerboard(vga_buffer::Color::Green);
|
||||||
|
vga_buffer::print_u32(x as u32, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static mut timer_count: u64 = 0;
|
static mut global_timer_count: u64 = 0;
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern fn rust_handle_timer() {
|
pub extern fn rust_handle_timer() {
|
||||||
|
let gtc = unsafe { global_timer_count };
|
||||||
unsafe {
|
unsafe {
|
||||||
timer_count += 1;
|
global_timer_count += 1;
|
||||||
}
|
|
||||||
let tc = unsafe { timer_count };
|
|
||||||
|
|
||||||
vga_buffer::print_u32(tc as u32, 23);
|
|
||||||
|
|
||||||
if (tc % 10) == 0 {
|
|
||||||
vga_buffer::print_u32(tc as u32, 24);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timer_callback(gtc);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn timer_callback(count: u64) {
|
||||||
|
if count % 4 == 0 {
|
||||||
|
checkerboard(vga_buffer::Color::White);
|
||||||
|
}
|
||||||
|
if count % 4 == 2 {
|
||||||
|
checkerboard(vga_buffer::Color::LightCyan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
@@ -46,15 +51,6 @@ pub extern fn rust_main() {
|
|||||||
clear();
|
clear();
|
||||||
checkerboard(vga_buffer::Color::Red);
|
checkerboard(vga_buffer::Color::Red);
|
||||||
|
|
||||||
let mut cur_checkerboard = vga_buffer::Color::Red;
|
|
||||||
let mut update_checkerboard = move || {
|
|
||||||
cur_checkerboard = match cur_checkerboard {
|
|
||||||
vga_buffer::Color::Red => vga_buffer::Color::Blue,
|
|
||||||
_ => vga_buffer::Color::Red,
|
|
||||||
};
|
|
||||||
checkerboard(cur_checkerboard);
|
|
||||||
};
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,10 +95,13 @@ handle_keyboard:
|
|||||||
push r11
|
push r11
|
||||||
pushfq
|
pushfq
|
||||||
|
|
||||||
in al, 0x60 ;;throw this away
|
in al, 0x60
|
||||||
|
shl al, 8
|
||||||
|
in al, 0x61
|
||||||
|
push ax
|
||||||
cld
|
cld
|
||||||
call rust_handle_keyboard
|
call rust_handle_keyboard
|
||||||
|
pop ax
|
||||||
|
|
||||||
mov al, END_OF_INTERRUPT
|
mov al, END_OF_INTERRUPT
|
||||||
out PIC1_COMMAND, al
|
out PIC1_COMMAND, al
|
||||||
|
|||||||
Reference in New Issue
Block a user