From 63775eaa7c97a58ebd1d0c779eecdd149e6cb4f5 Mon Sep 17 00:00:00 2001 From: greg Date: Tue, 10 Nov 2015 03:02:30 -0800 Subject: [PATCH] print_int function Just to print integer outputs of things on the screen --- rust_experiments/src/lib.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/rust_experiments/src/lib.rs b/rust_experiments/src/lib.rs index 39e937e..85e5063 100644 --- a/rust_experiments/src/lib.rs +++ b/rust_experiments/src/lib.rs @@ -21,6 +21,10 @@ pub extern fn rust_main() { } } + vga_buffer::print_int(1, 5); + vga_buffer::print_int(10, 6); + vga_buffer::print_int(765, 6); + loop {} } @@ -105,6 +109,26 @@ 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; } + 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; + } + } + } + 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 {