summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-11-08 18:32:36 +0100
committerAlexis211 <alexis211@gmail.com>2009-11-08 18:32:36 +0100
commit4bbc1baf27573b4ca6fe6d8ed18b236ac3c631d2 (patch)
tree3e0a5981eed78336bbd5baf7c6be50cd518be1fa
parent699a1497a4eb432f41d643a18f2ac6ba10a66518 (diff)
downloadMelon-4bbc1baf27573b4ca6fe6d8ed18b236ac3c631d2.tar.gz
Melon-4bbc1baf27573b4ca6fe6d8ed18b236ac3c631d2.zip
Switching to text mode now really switches to text mode.
-rw-r--r--Source/Kernel/Devices/Display/VGATextOutput.class.cpp12
-rw-r--r--Source/Kernel/Devices/Display/vga-vesa.wtf.asm11
-rw-r--r--Source/Kernel/Makefile2
-rw-r--r--Source/Kernel/TaskManager/V86/V86.ns.h4
-rw-r--r--Source/Kernel/TaskManager/V86/v86.wtf.asm11
5 files changed, 21 insertions, 19 deletions
diff --git a/Source/Kernel/Devices/Display/VGATextOutput.class.cpp b/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
index 8840080..3265a7d 100644
--- a/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
+++ b/Source/Kernel/Devices/Display/VGATextOutput.class.cpp
@@ -1,6 +1,10 @@
#include "VGATextOutput.class.h"
#include <DeviceManager/Disp.ns.h>
+#include <TaskManager/V86/V86.ns.h>
+
+extern v86_function_t setvgamode;
+
//Virtual address in higher half
#define RAM_ADDR 0xC00B8000
@@ -19,7 +23,7 @@ void VGATextOutput::getModes(Vector<mode_t> &to) {
mode_t m;
m.textCols = 80;
m.textRows = 25;
- m.identifier = 0;
+ m.identifier = 3;
m.graphWidth = 0;
m.graphHeight = 0;
m.device = this;
@@ -27,8 +31,10 @@ void VGATextOutput::getModes(Vector<mode_t> &to) {
}
bool VGATextOutput::setMode(mode_t& mode) {
- if (mode.device == this && mode.identifier == 0) {
- //TODO : switch for real to mode 0.
+ if (mode.device == this && mode.identifier == 3) {
+ registers_t r;
+ r.eax = 3; //3 = text 80x25 16color, just what we want
+ V86::run(setvgamode, r, 0);
clear();
return true;
}
diff --git a/Source/Kernel/Devices/Display/vga-vesa.wtf.asm b/Source/Kernel/Devices/Display/vga-vesa.wtf.asm
new file mode 100644
index 0000000..c7b6bb5
--- /dev/null
+++ b/Source/Kernel/Devices/Display/vga-vesa.wtf.asm
@@ -0,0 +1,11 @@
+[BITS 16]
+
+[GLOBAL setvgamode]
+setvgamode:
+ dw setvgamode_end - setvgamode_start
+setvgamode_start:
+ int 60
+ int 10h
+ int 3
+setvgamode_end:
+ db 0
diff --git a/Source/Kernel/Makefile b/Source/Kernel/Makefile
index 218ae39..636968d 100644
--- a/Source/Kernel/Makefile
+++ b/Source/Kernel/Makefile
@@ -30,7 +30,6 @@ Objects = Core/loader.wtf.o \
TaskManager/Thread.class.o \
TaskManager/V86/V86Thread.class.o \
TaskManager/V86/V86.ns.o \
- TaskManager/V86/v86.wtf.o \
TaskManager/Task.ns.o \
TaskManager/Task.wtf.o \
VTManager/VirtualTerminal.proto.o \
@@ -71,6 +70,7 @@ Objects = Core/loader.wtf.o \
SyscallManager/Res.ns.o \
SyscallManager/IDT.wtf.o \
Devices/Display/VGATextOutput.class.o \
+ Devices/Display/vga-vesa.wtf.o \
Devices/Keyboard/PS2Keyboard.class.o \
Devices/Floppy/FloppyController.class.o \
Devices/Floppy/FloppyDrive.class.o \
diff --git a/Source/Kernel/TaskManager/V86/V86.ns.h b/Source/Kernel/TaskManager/V86/V86.ns.h
index 6e8797a..98f3ead 100644
--- a/Source/Kernel/TaskManager/V86/V86.ns.h
+++ b/Source/Kernel/TaskManager/V86/V86.ns.h
@@ -22,10 +22,6 @@ inline FARPTR LINEAR_TO_FP(void* ptr) {
#define V86_ALLOC_START 0x1000
#define V86_ALLOC_END 0x9000
-
-//This sample V86 function switches to graphical mode 13. Useless.
-extern "C" v86_function_t v86test;
-
namespace V86 {
void run(v86_function_t& entry, registers_t &regs, u32int data);
diff --git a/Source/Kernel/TaskManager/V86/v86.wtf.asm b/Source/Kernel/TaskManager/V86/v86.wtf.asm
deleted file mode 100644
index 15e3969..0000000
--- a/Source/Kernel/TaskManager/V86/v86.wtf.asm
+++ /dev/null
@@ -1,11 +0,0 @@
-[BITS 16]
-
-[GLOBAL v86test]
-v86test:
- dw v86test_end - v86test_start
-v86test_start:
- mov ax, 0013h
- int 10h
- int 3
-v86test_end:
- db 0