aboutsummaryrefslogtreecommitdiff
path: root/vga.cc
diff options
context:
space:
mode:
Diffstat (limited to 'vga.cc')
-rw-r--r--vga.cc63
1 files changed, 36 insertions, 27 deletions
diff --git a/vga.cc b/vga.cc
index 17061bb..b4c9673 100644
--- a/vga.cc
+++ b/vga.cc
@@ -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);
+}