Make timer interrupt display things on screen
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user