diff --git a/rust_experiments/src/lib.rs b/rust_experiments/src/lib.rs index 7530d88..4725348 100644 --- a/rust_experiments/src/lib.rs +++ b/rust_experiments/src/lib.rs @@ -16,14 +16,16 @@ pub extern fn rust_setup_PIC() { #[no_mangle] pub extern fn rust_handle_keyboard(x: u8) { - checkerboard(vga_buffer::Color::Green); - vga_buffer::print_u32(x as u32, 0); + use vga_buffer::{checkerboard, print_u32, Color}; + checkerboard(Color::Green); + print_u32(x as u32, 0); } #[no_mangle] pub extern fn rust_interrupt_handler() { - checkerboard(vga_buffer::Color::White); + use vga_buffer::{checkerboard, Color}; + checkerboard(Color::White); } static mut global_timer_count: u64 = 0; @@ -133,11 +135,12 @@ mod x86_asm { } fn timer_callback(count: u64) { + use vga_buffer::{Color, checkerboard}; if count % 1000 == 0 { - checkerboard(vga_buffer::Color::White); + checkerboard(Color::White); } if count % 1000 == 500 { - checkerboard(vga_buffer::Color::LightCyan); + checkerboard(Color::LightCyan); } vga_buffer::print_u32(count as u32, 0); @@ -145,40 +148,16 @@ fn timer_callback(count: u64) { #[no_mangle] pub extern fn rust_main() { + use vga_buffer::{clear, checkerboard, Color}; clear(); - checkerboard(vga_buffer::Color::Red); + checkerboard(Color::Red); loop { } } -fn clear() { - use vga_buffer::*; - let blank_color = ColorCode::new( Color::White, Color::Black); - for i in 0..BUFFER_WIDTH { - for j in 0..BUFFER_HEIGHT { - write_to_coord(i, j, b' ', blank_color); - } - } -} - -fn checkerboard(color: vga_buffer::Color) { - use vga_buffer::*; - - let active = ColorCode::new(color, color); - let blank = ColorCode::new(Color::White, Color::Black); - for i in 0..BUFFER_WIDTH { - for j in 0..BUFFER_HEIGHT { - if (i + j) % 2 == 0 { - write_to_coord(i, j, b' ', active); - } else { - write_to_coord(i, j, b' ', blank); - } - } - } -} // 123 |3,2,1 @@ -248,6 +227,30 @@ mod vga_buffer { } } + pub fn clear() { + let blank_color = ColorCode::new( Color::White, Color::Black); + for i in 0..BUFFER_WIDTH { + for j in 0..BUFFER_HEIGHT { + write_to_coord(i, j, b' ', blank_color); + } + } + } + + pub fn checkerboard(color: Color) { + + let active = ColorCode::new(color, color); + let blank = ColorCode::new(Color::White, Color::Black); + for i in 0..BUFFER_WIDTH { + for j in 0..BUFFER_HEIGHT { + if (i + j) % 2 == 0 { + write_to_coord(i, j, b' ', active); + } else { + write_to_coord(i, j, b' ', blank); + } + } + } + } + #[repr(C)] struct ScreenChar { ascii_char: u8,