Fix clear() function
This commit is contained in:
@@ -6,23 +6,23 @@ extern crate rlibc;
|
||||
|
||||
#[no_mangle]
|
||||
pub extern fn rust_main() {
|
||||
let gamarjoba = b"Gamarjoba, munde";
|
||||
let color_byte = 0x1f; // white on blue
|
||||
|
||||
let mut gamarjoba_colored = [color_byte; 32];
|
||||
for (i, char_byte) in gamarjoba.into_iter().enumerate() {
|
||||
gamarjoba_colored[i*2] = *char_byte;
|
||||
}
|
||||
|
||||
//write to center of VGA buffer
|
||||
let buffer_ptr = (0xb8000 + 1988) as *mut _;
|
||||
unsafe { *buffer_ptr = gamarjoba_colored };
|
||||
|
||||
vga_buffer::write_to_coord(10,10, b'f');
|
||||
clear();
|
||||
|
||||
loop {}
|
||||
}
|
||||
|
||||
fn clear() {
|
||||
|
||||
let blank_color = vga_buffer::ColorCode::new(
|
||||
vga_buffer::Color::White,
|
||||
vga_buffer::Color::Black);
|
||||
for i in 0..vga_buffer::BUFFER_WIDTH {
|
||||
for j in 0..vga_buffer::BUFFER_HEIGHT {
|
||||
vga_buffer::write_to_coord(i, j, b' ', blank_color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod vga_buffer {
|
||||
#[repr(u8)]
|
||||
pub enum Color {
|
||||
@@ -45,9 +45,9 @@ mod vga_buffer {
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
struct ColorCode(u8);
|
||||
pub struct ColorCode(u8);
|
||||
impl ColorCode {
|
||||
const fn new(foreground: Color, background: Color) -> ColorCode {
|
||||
pub const fn new(foreground: Color, background: Color) -> ColorCode {
|
||||
ColorCode((background as u8) << 4 | (foreground as u8))
|
||||
}
|
||||
}
|
||||
@@ -58,16 +58,21 @@ mod vga_buffer {
|
||||
color_code: ColorCode
|
||||
}
|
||||
|
||||
const BUFFER_HEIGHT: usize = 25;
|
||||
const BUFFER_WIDTH: usize = 80;
|
||||
pub const BUFFER_HEIGHT: usize = 25;
|
||||
pub const BUFFER_WIDTH: usize = 80;
|
||||
const BUFFER_PTR: usize = 0xb8000;
|
||||
|
||||
pub fn write_to_coord(x: usize, y: usize, character: u8) {
|
||||
let ptr = BUFFER_PTR + (2*x as usize) + (BUFFER_HEIGHT * 2 * y as usize);
|
||||
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 {
|
||||
ascii_char: character,
|
||||
color_code: ColorCode::new(Color::White, Color::Red)
|
||||
color_code: color_code,
|
||||
};
|
||||
|
||||
if x > BUFFER_WIDTH || y > BUFFER_HEIGHT {
|
||||
return;
|
||||
}
|
||||
|
||||
unsafe {
|
||||
*(ptr as *mut _) = data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user