summaryrefslogtreecommitdiff
path: root/Source/Kernel/Devices
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-12-20 21:12:56 +0100
committerAlexis211 <alexis211@gmail.com>2009-12-20 21:12:56 +0100
commit4333fd5847818d7c7509f1cd3651edf0bf58df86 (patch)
tree896b5f81936fd69bf9132bc623591794b57e7e4f /Source/Kernel/Devices
parent09353da6e91a0968ae24d4b4d97ed434520e6217 (diff)
downloadMelon-4333fd5847818d7c7509f1cd3651edf0bf58df86.tar.gz
Melon-4333fd5847818d7c7509f1cd3651edf0bf58df86.zip
Text scrolling optimisation for VGATextOutput
Diffstat (limited to 'Source/Kernel/Devices')
-rw-r--r--Source/Kernel/Devices/Display/VGATextOutput.class.cpp11
-rw-r--r--Source/Kernel/Devices/Display/VGATextOutput.class.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/Source/Kernel/Devices/Display/VGATextOutput.class.cpp b/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
index 50a57b2..c597696 100644
--- a/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
+++ b/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
@@ -24,6 +24,7 @@ void VGATextOutput::getModes(Vector<mode_t> &to) {
m.identifier = 1;
m.graphWidth = 0;
m.graphHeight = 0;
+ m.graphDepth = 0;
m.device = this;
to.push(m);
m.textCols = 80;
@@ -60,3 +61,13 @@ void VGATextOutput::clear() {
u16int* where = (u16int*)RAM_ADDR;
for (int i = 0; i < 25 * 80; i++) where[i] = 0;
}
+
+bool VGATextOutput::textScroll(u16int line, u16int col, u16int height, u16int width, u8int color) {
+ u8int* where = (u8int*)RAM_ADDR;
+ for (u32int i = 1; i < height; i++) {
+ memcpy(where + ((line + i - 1) * (m_cols * 2)) + (col * 2), where + ((line + i) * (m_cols * 2)) + (col * 2), width * 2);
+ }
+ u16int* w = (u16int*)where;
+ memsetw(w + ((line + height - 1) * m_cols) + col, 0x20 | (color << 8), width);
+ return true;
+}
diff --git a/Source/Kernel/Devices/Display/VGATextOutput.class.h b/Source/Kernel/Devices/Display/VGATextOutput.class.h
index 2c72d40..0b0ba94 100644
--- a/Source/Kernel/Devices/Display/VGATextOutput.class.h
+++ b/Source/Kernel/Devices/Display/VGATextOutput.class.h
@@ -18,6 +18,8 @@ class VGATextOutput : public Display {
void putChar(u16int line, u16int col, WChar c, u8int color);
void moveCursor(u16int line, u16int col);
void clear();
+
+ bool textScroll(u16int line, u16int col, u16int height, u16int width, u8int color);
};
#endif