diff options
Diffstat (limited to 'vga.cc')
-rw-r--r-- | vga.cc | 63 |
1 files changed, 36 insertions, 27 deletions
@@ -27,41 +27,50 @@ void VGA::put_char(char c, size_t x, size_t y, uint8_t color) { buffer[index] = vga_entry(c, (color == 0) ? this->color : color); } -void VGA::write(const String &data) { - auto it = data.begin(); - while (it) { - switch (const auto c = it.next()) { - case '\n': - column = 0; - ++row; - break; - default: - put_char(c, column, row, color); - ++column; - } +void VGA::write(char c) { + switch (c) { + case '\n': + column = 0; + ++row; + break; + default: + put_char(c, column, row, color); + ++column; + } - if (column == max_columns) { - column = 0; - ++row; - } + if (column == max_columns) { + column = 0; + ++row; + } - if (row == max_rows) { - // scroll up - move rows 1~25 up by one - for (size_t y = 1; y < max_rows; y++) { - const auto prev_y = y - 1; - for (size_t x = 0; x < max_columns; ++x) { - const auto prev = prev_y * max_columns + x; - const auto idx = y * max_columns + x; - buffer[prev] = buffer[idx]; - } + if (row == max_rows) { + // scroll up - move rows 1~25 up by one + for (size_t y = 1; y < max_rows; y++) { + const auto prev_y = y - 1; + for (size_t x = 0; x < max_columns; ++x) { + const auto prev = prev_y * max_columns + x; + const auto idx = y * max_columns + x; + buffer[prev] = buffer[idx]; } - --row; } + --row; + } +} + +void VGA::write(const String &data) { + auto it = data.begin(); + while (it) { + write(it.next()); } } void VGA::write(int n) { char buffer[max_columns]; - itoa(n, buffer); + itoa<16>(n, buffer); write(buffer); } + +void VGA::write(unsigned int n) { + // TODO + write((int)n); +} |