diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index e07bd866..76b3e2d3 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -82,11 +82,29 @@ impl Writer { // not part of printable ASCII range _ => self.write_byte(0xfe), } - } } - fn new_line(&mut self) {/* TODO */} + fn new_line(&mut self) { + for row in 1..BUFFER_HEIGHT { + for col in 0..BUFFER_WIDTH { + let character = self.buffer.chars[row][col].read(); + self.buffer.chars[row - 1][col].write(character); + } + } + self.clear_row(BUFFER_HEIGHT - 1); + self.column_position = 0; + } + + fn clear_row(&mut self, row: usize) { + let blank = ScreenChar { + ascii_character: b' ', + color_code: self.color_code, + }; + for col in 0..BUFFER_WIDTH { + self.buffer.chars[row][col].write(blank); + } + } } impl fmt::Write for Writer {