Some more mucking with printing numbers
This commit is contained in:
@@ -38,13 +38,24 @@ pub extern fn rust_main() {
|
||||
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();
|
||||
vga_buffer::print_int(timer, 11);
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
loop {}
|
||||
@@ -80,7 +91,7 @@ fn checkerboard(color: vga_buffer::Color) {
|
||||
|
||||
// 123 |3,2,1
|
||||
mod util {
|
||||
fn u32_to_chars(n: u32) -> [u8; 10] {
|
||||
pub fn u32_to_chars(n: u32) -> [u8; 10] {
|
||||
let mut accum = [0; 10];
|
||||
let mut i = 0;
|
||||
let mut val = n;
|
||||
@@ -171,23 +182,14 @@ mod vga_buffer {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn print_int(i: u32, row: usize) {
|
||||
let mut val = i;
|
||||
let mut ptr = BUFFER_PTR + BUFFER_WIDTH*2*(row+1) - 2 as usize;
|
||||
let color_code = ColorCode::new(Color::White, Color::Black);
|
||||
loop {
|
||||
if val < 10 {
|
||||
let ch: u8 = b'0' + (val as u8);
|
||||
let data = ScreenChar { ascii_char: ch, color_code: color_code };
|
||||
unsafe { *(ptr as *mut _) = data; }
|
||||
pub fn print_array(array: [u8; 10], line: usize, color_code: ColorCode) {
|
||||
let mut x = 0;
|
||||
for ch in array.into_iter() {
|
||||
if *ch == 0 {
|
||||
break;
|
||||
} else {
|
||||
let ch: u8 = b'0' + ((val % 10) as u8) ;
|
||||
val = val / 10;
|
||||
let data = ScreenChar { ascii_char: ch, color_code: color_code };
|
||||
unsafe { *(ptr as *mut _) = data; }
|
||||
ptr -= 2;
|
||||
}
|
||||
write_to_coord(x, line, *ch, color_code);
|
||||
x += 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user