Some more text drawing logic

This commit is contained in:
greg
2015-11-25 21:56:39 -08:00
parent db8995b15f
commit 6c127273b3

View File

@@ -37,7 +37,8 @@ pub extern fn rust_handle_timer() {
global_timer_count += 1; global_timer_count += 1;
} }
timer_callback(gtc); //timer_callback(gtc);
timer_callback2(gtc);
} }
#[no_mangle] #[no_mangle]
@@ -135,6 +136,19 @@ mod x86_asm {
} }
} }
fn timer_callback2(count: u64) {
use vga_buffer::*;
let color = Color::LightCyan;
if count % 500 == 0 {
checkerboard(color);
} else if count % 500 == 250 {
alt_checkerboard(color);
}
}
fn timer_callback(count: u64) { fn timer_callback(count: u64) {
use vga_buffer::{Color, print_u32, checkerboard, clear, move_cursor}; use vga_buffer::{Color, print_u32, checkerboard, clear, move_cursor};
@@ -164,7 +178,7 @@ fn timer_callback(count: u64) {
#[no_mangle] #[no_mangle]
pub extern fn rust_main() { pub extern fn rust_main() {
use vga_buffer::{clear, checkerboard, Color}; use vga_buffer::{clear, checkerboard, Color};
//clear(); clear();
//checkerboard(Color::Red); //checkerboard(Color::Red);
loop { loop {
@@ -254,15 +268,21 @@ mod vga_buffer {
} }
pub fn checkerboard(color: Color) { pub fn checkerboard(color: Color) {
checkerboard_logic(color, false);
}
pub fn alt_checkerboard(color: Color) {
checkerboard_logic(color, true);
}
fn checkerboard_logic(color: Color, alternate: bool) {
let active = ColorCode::new(color, color); let active = ColorCode::new(color, color);
let blank = ColorCode::new(Color::White, Color::Black); let blank = ColorCode::new(Color::White, Color::Black);
for i in 0..BUFFER_WIDTH { for i in 0..BUFFER_WIDTH {
for j in 0..BUFFER_HEIGHT { for j in 0..BUFFER_HEIGHT {
if (i + j) % 2 == 0 { if (i + j) % 2 == 0 {
write_to_coord(i, j, b' ', active); write_to_coord(i, j, b' ', if alternate { active } else { blank } );
} else { } else {
write_to_coord(i, j, b' ', blank); write_to_coord(i, j, b' ', if alternate { blank } else { active });
} }
} }
} }