Some more mucking with printing numbers

This commit is contained in:
greg
2015-11-10 23:28:36 -08:00
parent cdbfca6003
commit 5eda610d24

View File

@@ -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;
}
}