Fix clear() function
This commit is contained in:
@@ -6,23 +6,23 @@ extern crate rlibc;
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern fn rust_main() {
|
pub extern fn rust_main() {
|
||||||
let gamarjoba = b"Gamarjoba, munde";
|
clear();
|
||||||
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');
|
|
||||||
|
|
||||||
loop {}
|
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 {
|
mod vga_buffer {
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
pub enum Color {
|
pub enum Color {
|
||||||
@@ -45,9 +45,9 @@ mod vga_buffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
struct ColorCode(u8);
|
pub struct ColorCode(u8);
|
||||||
impl ColorCode {
|
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))
|
ColorCode((background as u8) << 4 | (foreground as u8))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,16 +58,21 @@ mod vga_buffer {
|
|||||||
color_code: ColorCode
|
color_code: ColorCode
|
||||||
}
|
}
|
||||||
|
|
||||||
const BUFFER_HEIGHT: usize = 25;
|
pub const BUFFER_HEIGHT: usize = 25;
|
||||||
const BUFFER_WIDTH: usize = 80;
|
pub const BUFFER_WIDTH: usize = 80;
|
||||||
const BUFFER_PTR: usize = 0xb8000;
|
const BUFFER_PTR: usize = 0xb8000;
|
||||||
|
|
||||||
pub fn write_to_coord(x: usize, y: usize, character: u8) {
|
pub fn write_to_coord(x: usize, y: usize, character: u8, color_code: ColorCode) {
|
||||||
let ptr = BUFFER_PTR + (2*x as usize) + (BUFFER_HEIGHT * 2 * y as usize);
|
let ptr = BUFFER_PTR + (2*x as usize) + (BUFFER_WIDTH*2*y as usize);
|
||||||
let data = ScreenChar {
|
let data = ScreenChar {
|
||||||
ascii_char: character,
|
ascii_char: character,
|
||||||
color_code: ColorCode::new(Color::White, Color::Red)
|
color_code: color_code,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if x > BUFFER_WIDTH || y > BUFFER_HEIGHT {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
*(ptr as *mut _) = data;
|
*(ptr as *mut _) = data;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user