Make timer interrupt display things on screen

This commit is contained in:
greg
2015-11-15 23:16:30 -08:00
parent 730c2c7d71
commit 636e540355

View File

@@ -24,27 +24,27 @@ pub extern fn rust_handle_keyboard() {
checkerboard(vga_buffer::Color::Green);
}
static mut timer_count: u64 = 0;
#[no_mangle]
pub extern fn rust_handle_timer() {
let color_code = vga_buffer::ColorCode::new(vga_buffer::Color::Black,
vga_buffer::Color::White);
unsafe {
timer_count += 1;
}
let tc = unsafe { timer_count };
vga_buffer::print_u32(tc as u32, 23);
vga_buffer::write_to_coord(40, 1, b'X', color_code);
if (tc % 10) == 0 {
vga_buffer::print_u32(tc as u32, 24);
}
}
#[no_mangle]
pub extern fn rust_main() {
clear();
checkerboard(vga_buffer::Color::Red);
unsafe {
let a = asm_printchar();
if a == 1 {
checkerboard(vga_buffer::Color::Blue);
}
}
let mut cur_checkerboard = vga_buffer::Color::Red;
let mut update_checkerboard = move || {
@@ -55,36 +55,9 @@ pub extern fn rust_main() {
checkerboard(cur_checkerboard);
};
let mut timer;
let mut prev_timer = 0;
let mut count: u32 = 0;
loop {
timer = unsafe { get_rdtsc() };
let color_code = vga_buffer::ColorCode::new(vga_buffer::Color::White, vga_buffer::Color::Black);
if timer - prev_timer > 4_000_000_000 {
update_checkerboard();
let s = util::u32_to_chars(timer);
vga_buffer::print_array(s, 10, color_code);
vga_buffer::print_array(
util::u32_to_chars(count), 11, color_code);
count += 1;
timer = 0;
}
/*
if count > 200 && count % 3 == 0 {
unsafe {
call_interrupt();
}
}
*/
}
loop {}
}
fn clear() {
@@ -152,8 +125,6 @@ mod util {
}
}
mod vga_buffer {
#[repr(u8)]
#[derive(Clone, Copy)]
@@ -219,6 +190,12 @@ mod vga_buffer {
}
}
pub fn print_u32(num: u32, location: usize) {
let default_color = ColorCode::new(Color::Black, Color::White);
let char_array = ::util::u32_to_chars(num);
print_array(char_array, location, default_color);
}
pub fn write_to_coord(x: usize, y: usize, character: u8, color_code: ColorCode) {
let ptr = BUFFER_PTR + (2*x as usize) + (BUFFER_WIDTH*2*y as usize);
let data = ScreenChar {