Use volatile writes for printing to screen

master
Philipp Oppermann 8 years ago
parent 6aa3f67331
commit 0ed21fb943

@ -8,3 +8,4 @@ crate-type = ["staticlib"]
[dependencies] [dependencies]
rlibc = "1.0" rlibc = "1.0"
volatile = "0.1.0"

@ -4,6 +4,7 @@
#![no_std] #![no_std]
extern crate rlibc; extern crate rlibc;
extern crate volatile;
mod vga_buffer; mod vga_buffer;

@ -1,4 +1,5 @@
use core::ptr::Unique; use core::ptr::Unique;
use volatile::Volatile;
#[allow(dead_code)] #[allow(dead_code)]
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -42,7 +43,7 @@ const BUFFER_HEIGHT: usize = 25;
const BUFFER_WIDTH: usize = 80; const BUFFER_WIDTH: usize = 80;
struct Buffer { struct Buffer {
chars: [[ScreenChar; BUFFER_WIDTH]; BUFFER_HEIGHT], chars: [[Volatile<ScreenChar>; BUFFER_WIDTH]; BUFFER_HEIGHT],
} }
pub struct Writer { pub struct Writer {
@ -64,10 +65,10 @@ impl Writer {
let col = self.column_position; let col = self.column_position;
let color_code = self.color_code; let color_code = self.color_code;
self.buffer().chars[row][col] = ScreenChar { self.buffer().chars[row][col].write(ScreenChar {
ascii_character: byte, ascii_character: byte,
color_code: color_code, color_code: color_code,
}; });
self.column_position += 1; self.column_position += 1;
} }
} }

Loading…
Cancel
Save