summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/Kernel/Core/.kmain.wtf.cpp.swpbin12288 -> 24576 bytes
-rw-r--r--Source/Kernel/Core/Sys.ns.cpp15
-rw-r--r--Source/Kernel/Core/Sys.ns.h2
-rw-r--r--Source/Kernel/Core/kmain.wtf.cpp82
-rw-r--r--Source/Kernel/DeviceManager/Kbd.ns.cpp197
-rw-r--r--Source/Kernel/DeviceManager/Kbd.ns.h96
-rw-r--r--Source/Kernel/Devices/Keyboard/Keyboard.proto.h11
-rw-r--r--Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp52
-rw-r--r--Source/Kernel/Devices/Keyboard/PS2Keyboard.class.h18
-rw-r--r--Source/Kernel/Library/wchar.class.cpp6
-rw-r--r--Source/Kernel/Makefile8
-rw-r--r--Source/Kernel/Map.txt1473
-rwxr-xr-xSource/Kernel/Melon.kebin65864 -> 90021 bytes
-rw-r--r--Source/Kernel/Ressources/keymap-fr.wtf.c45
-rw-r--r--Source/Kernel/Ressources/logo.cd2
-rw-r--r--Source/Kernel/TaskManager/Mutex.class.cpp26
-rw-r--r--Source/Kernel/TaskManager/Mutex.class.h16
-rw-r--r--Source/Kernel/TaskManager/Process.class.cpp11
-rw-r--r--Source/Kernel/TaskManager/Process.class.h7
-rw-r--r--Source/Kernel/TaskManager/Task.ns.cpp6
-rw-r--r--Source/Kernel/TaskManager/Task.ns.h3
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp69
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal.class.cpp6
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal.class.h11
24 files changed, 1482 insertions, 680 deletions
diff --git a/Source/Kernel/Core/.kmain.wtf.cpp.swp b/Source/Kernel/Core/.kmain.wtf.cpp.swp
index 4849678..9a87295 100644
--- a/Source/Kernel/Core/.kmain.wtf.cpp.swp
+++ b/Source/Kernel/Core/.kmain.wtf.cpp.swp
Binary files differ
diff --git a/Source/Kernel/Core/Sys.ns.cpp b/Source/Kernel/Core/Sys.ns.cpp
index 5cd1c28..9f98c91 100644
--- a/Source/Kernel/Core/Sys.ns.cpp
+++ b/Source/Kernel/Core/Sys.ns.cpp
@@ -40,6 +40,21 @@ void bochs_output(char *message, char *file, u32int line) {
outb(0xE9, '\n');
}
+void bochs_output(String message, char *file, u32int line) {
+ for (u32int i = 0; i < message.size(); i++) {
+ outb(0xE9, message[i].toAscii());
+ }
+ char* t = (char*)" (in ";
+ for (u32int i = 0; i < strlen(t); i++) {
+ outb(0xE9, t[i]);
+ }
+ for (u32int i = 0; i < strlen(file); i++) {
+ outb(0xE9, file[i]);
+ }
+ outb(0xE9, ')');
+ outb(0xE9, '\n');
+}
+
void bochs_output_hex(u32int i) {
char hexdigits[] = "0123456789ABCDEF";
outb(0xE9, '0');
diff --git a/Source/Kernel/Core/Sys.ns.h b/Source/Kernel/Core/Sys.ns.h
index 69dcc42..825b68c 100644
--- a/Source/Kernel/Core/Sys.ns.h
+++ b/Source/Kernel/Core/Sys.ns.h
@@ -5,6 +5,7 @@
#define DEF_SYS_NS_H
//This file contains system-relative functions
+class String;
namespace Sys {
void outb(u16int port, u8int value);
@@ -13,6 +14,7 @@ namespace Sys {
void panic(char* message, char *file, u32int line);
void panic_assert(char* file, u32int line, char *desc);
void bochs_output(char* message, char *file, u32int line);
+ void bochs_output(String message, char *file, u32int line);
void bochs_output_hex(u32int i);
void reboot();
}
diff --git a/Source/Kernel/Core/kmain.wtf.cpp b/Source/Kernel/Core/kmain.wtf.cpp
index fa1c57e..e2f3707 100644
--- a/Source/Kernel/Core/kmain.wtf.cpp
+++ b/Source/Kernel/Core/kmain.wtf.cpp
@@ -4,9 +4,11 @@
#include <Core/multiboot.wtf.h>
#include <Devices/Display/VGATextOutput.class.h>
+#include <Devices/Keyboard/PS2Keyboard.class.h>
#include <Devices/Timer.class.h>
#include <DeviceManager/Disp.ns.h>
#include <DeviceManager/Dev.ns.h>
+#include <DeviceManager/Kbd.ns.h>
#include <VTManager/VirtualTerminal.class.h>
#include <MemoryManager/PhysMem.ns.h>
#include <MemoryManager/PageAlloc.ns.h>
@@ -17,11 +19,17 @@
#include <Library/wchar.class.h>
#include <Ressources/logo.cd>
+#include <Ressources/keymap-fr.wtf.c>
extern u32int end; //Placement address
extern "C" void kmain(multiboot_info_t* mbd, u32int magic);
+#define INFO(vt) vt->setColor(0); *vt << " - "; vt->setColor(8);
+#define PROCESSING(vt, m) vt->setColor(6); *vt << " > "; vt->setColor(0); *vt << m; \
+ vt->setCursorCol(60); vt->setColor(8); *vt << ": ";
+#define OK(vt) vt->setColor(0); *vt << "[ "; vt->setColor(1); *vt << "OK"; vt->setColor(0); *vt << " ]\n";
+
void kmain(multiboot_info_t* mbd, u32int magic) {
DEBUG("Entering kmain.");
@@ -48,58 +56,70 @@ void kmain(multiboot_info_t* mbd, u32int magic) {
Disp::setDisplay(vgaout);
//Create a VT for handling the Melon bootup logo
- VirtualTerminal *melonLogoVT = new VirtualTerminal(melonLogoLines, melonLogoCols, 7, 0);
+ VirtualTerminal *melonLogoVT = new VirtualTerminal(melonLogoLines, melonLogoCols, 9, 0);
for (int i = 0; i < melonLogoLines; i++) {
for (int j = 0; j < melonLogoCols; j++) {
melonLogoVT->putChar(i, j, melonLogo[i][j]);
}
}
- melonLogoVT->map(2);
+ melonLogoVT->map(1);
//Create a VT for logging what kernel does
- VirtualTerminal *kvt = new VirtualTerminal(12, 40, 0, 7);
- kvt->map(melonLogoLines + 4);
+ VirtualTerminal *kvt = new VirtualTerminal(15, 76, 0, 7);
+ kvt->map(melonLogoLines + 2);
- *kvt << "* Kernel initializing in HIGHER HALF!\n";
- *kvt << "- Lower ram : " << (s32int)mbd->mem_lower << "k, upper : " << (s32int)mbd->mem_upper << "k.\n";
- *kvt << "- Kernel command line @ " << (u32int)mbd->cmdline << "\n";
- *kvt << "- Modules@" << (u32int)mbd->mods_addr << ", mbd@" << (u32int)mbd << "\n";
- *kvt << "- Placement address : " << (u32int)Mem::placementAddress << "\n";
+ INFO(kvt); *kvt << "Lower ram : " << (s32int)mbd->mem_lower << "k, upper : " << (s32int)mbd->mem_upper << "k.\n";
+ INFO(kvt); *kvt << "Placement address : " << (u32int)Mem::placementAddress << "\n";
- *kvt << "> Loading IDT...";
- IDT::init();
+ PROCESSING(kvt, "Loading IDT...");
+ IDT::init(); OK(kvt);
- *kvt << "OK.\n> Initializing paging...";
+ PROCESSING(kvt, "Initializing paging...");
u32int totalRam = ((mbd->mem_upper + 1024) * 1024);
- PhysMem::initPaging(totalRam);
+ PhysMem::initPaging(totalRam); OK(kvt);
- *kvt << "OK.\n- Total ram : " << (s32int)(totalRam / 1024) << "k.\n";
+ INFO(kvt); *kvt << "Total ram : " << (s32int)(totalRam / 1024) << "k.\n";
+ PROCESSING(kvt, "Initializing GDT and cleaning page directory...");
GDT::init();
- *kvt << "> GDT OK. Cleaning page directory...";
- PhysMem::removeTemporaryPages();
-
- *kvt << "OK.\n> Creating heap...";
- Mem::createHeap();
- *kvt << "OK.\n";
- *kvt << "- Free frames : " << (s32int)PhysMem::free() << "/" <<
- (s32int)PhysMem::total();
+ PhysMem::removeTemporaryPages(); OK(kvt);
+
+ PROCESSING(kvt, "Creating heap...");
+ Mem::createHeap(); OK(kvt);
+ INFO(kvt); *kvt << "Free frames : " << (s32int)PhysMem::free() << "/" <<
+ (s32int)PhysMem::total() << "\n";
- *kvt << "\n> Registering vgaout...";
- Dev::registerDevice(vgaout);
+ PROCESSING(kvt, "Registering vgaout...");
+ Dev::registerDevice(vgaout); OK(kvt);
- *kvt << "OK.\n> Initializing PIT...";
- Dev::registerDevice(new Timer());
+ PROCESSING(kvt,"Initializing PIT...");
+ Dev::registerDevice(new Timer()); OK(kvt);
- *kvt << "OK.\n> Initializing multitasking...";
- Task::initialize(String((char*)mbd->cmdline));
+ PROCESSING(kvt, "Initializing multitasking...");
+ Task::initialize(String((char*)mbd->cmdline), kvt); OK(kvt);
- *kvt << "OK.\n";
+ PROCESSING(kvt, "Setting up keyboard...");
+ Dev::registerDevice(new PS2Keyboard()); //Initialize keyboard driver
+ Kbd::setKeymap(keymapFR_normal, keymapFR_shift, keymapFR_altgr, keymapFR_shiftaltgr); //Load keymap
+ Kbd::setFocus(kvt); //Set focus to virtual terminal
+ OK(kvt);
asm volatile("sti");
while(1) {
- Task::currentThread->sleep(1000);
- *kvt << ".";
+ kvt->setColor(0);
+ *kvt << "> ";
+ kvt->setColor(8);
+ String tmp = kvt->readLine();
+ kvt->setColor(0);
+ if (tmp == "help") {
+ *kvt << " - Command list for integrated kernel shell:\n";
+ *kvt << " - help shows this help screen\n";
+ *kvt << " - reboot reboots your computer\n";
+ } else if (tmp == "reboot") {
+ Sys::reboot();
+ } else if (!tmp.empty()) {
+ *kvt << " - Unrecognized command: " << tmp << "\n";
+ }
}
PANIC("END OF KMAIN");
}
diff --git a/Source/Kernel/DeviceManager/Kbd.ns.cpp b/Source/Kernel/DeviceManager/Kbd.ns.cpp
new file mode 100644
index 0000000..1743e0c
--- /dev/null
+++ b/Source/Kernel/DeviceManager/Kbd.ns.cpp
@@ -0,0 +1,197 @@
+#include "Kbd.ns.h"
+#include <DeviceManager/Dev.ns.h>
+#include <Library/Vector.class.h>
+#include <Devices/Keyboard/Keyboard.proto.h>
+#include <VTManager/VirtualTerminal.class.h>
+
+namespace Kbd {
+
+//These are arbitrarily decided codes given to each scancode
+u8int ctrlkeys[] = {
+/* 0x00 */ 0, KBDC_ESCAPE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBDC_BACKSPACE, KBDC_TAB,
+/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBDC_ENTER, KBDC_LEFTCTRL, 0, 0,
+/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBDC_LEFTSHIFT, 0, 0, 0, 0, 0,
+/* 0x30 */ 0, 0, 0, 0, 0, 0, KBDC_RIGHTSHIFT, 0, KBDC_ALT, 0, KBDC_CAPSLOCK, KBDC_F1, KBDC_F2, KBDC_F3, KBDC_F4, KBDC_F5,
+/* 0x40 */ KBDC_F6, KBDC_F7, KBDC_F8, KBDC_F9, KBDC_F10, KBDC_NUMLOCK, KBDC_SCRLLOCK, KBDC_KPHOME, KBDC_KPUP, KBDC_KPPGUP, 0, KBDC_KPLEFT, KBDC_KP5, KBDC_KPRIGHT, 0, KBDC_KPEND,
+/* 0x50 */ KBDC_KPDOWN, KBDC_KPPGDOWN, KBDC_KPINSERT, KBDC_KPDEL, KBDC_SYSREQ, 0, 0, KBDC_F11, KBDC_F12, 0, 0, 0, 0, 0, 0, 0,
+/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBDC_ENTER, KBDC_RIGHTCTRL, 0, 0,
+/* 0xA0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* 0xB0 */ 0, 0, 0, 0, 0, KBDC_KPSLASH, 0, KBDC_PRTSCN, KBDC_ALTGR, 0, 0, 0, 0, 0, 0, 0,
+/* 0xC0 */ 0, 0, 0, 0, 0, 0, 0, KBDC_HOME, KBDC_UP, KBDC_PGUP, 0, KBDC_LEFT, 0, KBDC_RIGHT, 0, KBDC_END,
+/* 0xD0 */ KBDC_DOWN, KBDC_PGDOWN, KBDC_INSERT, KBDC_DEL, 0, 0, 0, 0, 0, 0, 0, KBDC_LEFTSUP, KBDC_RIGHTSUP, KBDC_MENU, 0, 0,
+/* 0xE0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* 0xF0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+wchar *keymapNormal = NULL, *keymapShift = NULL, *keymapAltgr = NULL, *keymapShiftAltgr = NULL;
+u8int kbdstatus = 0;
+VirtualTerminal *focusedVT = NULL; //This is the VT that must receive the character
+
+void process(keypress_t kp) { //This routine sends the information of a keypress to someone
+ /* String r("Key press ");
+ String n = String::number(kp.pressed);
+ r += n;
+ r += ", hascmd=";
+ n = String::number(kp.hascmd);
+ r += n;
+ r += ", cmd=";
+ n = String::number(kp.command);
+ r += n;
+ r += ", haschar=";
+ n = String::number(kp.haschar);
+ r += n;
+ r += ", char='";
+ r += kp.character;
+ r += "'";
+ DEBUG(r); */
+ if (focusedVT != NULL) {
+ if (((kp.haschar and kp.character != 0) or (kp.hascmd and kp.command < 100)) and kp.pressed) {
+ focusedVT->keyPress(kp);
+ }
+ }
+}
+
+void setFocus(VirtualTerminal* vt) {
+ focusedVT = vt;
+}
+
+void setKeymap(wchar* kmNormal, wchar* kmShift, wchar* kmAltgr, wchar* kmShiftAltgr) {
+ keymapNormal = kmNormal;
+ keymapShift = kmShift;
+ keymapAltgr = kmAltgr;
+ keymapShiftAltgr = kmShiftAltgr;
+}
+
+void updateLeds() {
+ Vector<Device*> kbds = Dev::findDevice("keyboard");
+ for (u32int i = 0; i < kbds.size(); i++) {
+ ((Keyboard*)(kbds[i]))->updateLeds(kbdstatus);
+ }
+}
+
+void keyPress(u8int scancode) {
+ keypress_t kp;
+ kp.pressed = true;
+ u8int cmd = ctrlkeys[scancode];
+ scancode &= 0x7F;
+ if (cmd == 0) cmd = ctrlkeys[scancode];
+ if (cmd == 0) {
+ kp.haschar = true;
+ kp.character = 0;
+ if ((kbdstatus & STATUS_ALT) or (kbdstatus & STATUS_CTRL)) {
+ kp.hascmd = true;
+ kp.command = kbdstatus & 0x0F;
+ }
+ if ((kbdstatus & STATUS_SHIFT) xor (kbdstatus & STATUS_CAPS)) {
+ if (kbdstatus & STATUS_ALTGR) {
+ if (keymapShiftAltgr != NULL) kp.character = keymapShiftAltgr[scancode];
+ } else {
+ if (keymapShift != NULL) kp.character = keymapShift[scancode];
+ }
+ } else {
+ if (kbdstatus & STATUS_ALTGR) {
+ if (keymapAltgr != NULL) kp.character = keymapAltgr[scancode];
+ } else {
+ if (keymapNormal != NULL) kp.character = keymapNormal[scancode];
+ }
+ }
+ } else if (cmd >= KBDC_KPINSERT and cmd <= KBDC_KPDEL and (kbdstatus & STATUS_NUM)) {
+ kp.haschar = true;
+ if ((kbdstatus & STATUS_ALT) or (kbdstatus & STATUS_CTRL)) {
+ kp.hascmd = true;
+ kp.command = kbdstatus & 0xF0;
+ }
+ if (cmd == KBDC_KPDEL) {
+ kp.character = (u32int)'.';
+ } else {
+ kp.character = (u32int)'0' + (cmd - KBDC_KPINSERT);
+ }
+ } else if (cmd == KBDC_KPSLASH) {
+ kp.haschar = true;
+ if ((kbdstatus & STATUS_ALT) or (kbdstatus & STATUS_CTRL)) {
+ kp.hascmd = true;
+ kp.command = kbdstatus & 0xF0;
+ }
+ kp.character = (u32int)'/';
+ } else if (cmd == KBDC_ALT) {
+ kbdstatus |= STATUS_ALT;
+ } else if (cmd == KBDC_ALTGR) {
+ kbdstatus |= STATUS_ALTGR;
+ } else if (cmd == KBDC_LEFTCTRL or cmd == KBDC_RIGHTCTRL) {
+ kbdstatus |= STATUS_CTRL;
+ } else if (cmd == KBDC_LEFTSHIFT or cmd == KBDC_RIGHTSHIFT) {
+ kbdstatus |= STATUS_SHIFT;
+ } else if (cmd == KBDC_CAPSLOCK) {
+ kbdstatus ^= STATUS_CAPS;
+ updateLeds();
+ } else if (cmd == KBDC_NUMLOCK) {
+ kbdstatus ^= STATUS_NUM;
+ updateLeds();
+ } else if (cmd == KBDC_SCRLLOCK) {
+ kbdstatus ^= STATUS_SCRL;
+ updateLeds();
+ }
+ if (!kp.haschar) {
+ kp.hascmd = true;
+ kp.command = cmd;
+ }
+ process(kp);
+}
+
+void keyRelease(u8int scancode) {
+ keypress_t kp;
+ kp.pressed = false;
+ u8int cmd = ctrlkeys[scancode];
+ scancode &= 0x7F;
+ if (cmd == 0) cmd = ctrlkeys[scancode];
+ if (cmd == 0) {
+ kp.haschar = true;
+ kp.character = 0;
+ if ((kbdstatus & STATUS_ALT) or (kbdstatus & STATUS_CTRL)) {
+ kp.hascmd = true;
+ kp.command = kbdstatus & 0x0F;
+ }
+ if ((kbdstatus & STATUS_SHIFT) xor (kbdstatus & STATUS_CAPS)) {
+ if (kbdstatus & STATUS_ALTGR) {
+ if (keymapShiftAltgr != NULL) kp.character = keymapShiftAltgr[scancode];
+ } else {
+ if (keymapShift != NULL) kp.character = keymapShift[scancode];
+ }
+ } else {
+ if (kbdstatus & STATUS_ALTGR) {
+ if (keymapAltgr != NULL) kp.character = keymapAltgr[scancode];
+ } else {
+ if (keymapNormal != NULL) kp.character = keymapNormal[scancode];
+ }
+ }
+ } else if (cmd >= KBDC_KPINSERT and cmd <= KBDC_KPDEL and (kbdstatus & STATUS_NUM)) {
+ kp.haschar = true;
+ if ((kbdstatus & STATUS_ALT) or (kbdstatus & STATUS_CTRL)) {
+ kp.hascmd = true;
+ kp.command = kbdstatus & 0xF0;
+ }
+ if (cmd == KBDC_KPDEL) {
+ kp.character = (u32int)'.';
+ } else {
+ kp.character = (u32int)'0' + (cmd - KBDC_KPINSERT);
+ }
+ } else if (cmd == KBDC_ALT) {
+ kbdstatus &= ~STATUS_ALT;
+ } else if (cmd == KBDC_ALTGR) {
+ kbdstatus &= ~STATUS_ALTGR;
+ } else if (cmd == KBDC_LEFTCTRL or cmd == KBDC_RIGHTCTRL) {
+ kbdstatus &= ~STATUS_CTRL;
+ } else if (cmd == KBDC_LEFTSHIFT or cmd == KBDC_RIGHTSHIFT) {
+ kbdstatus &= ~STATUS_SHIFT;
+ }
+ if (!kp.haschar) {
+ kp.hascmd = true;
+ kp.command = cmd;
+ }
+ process(kp);
+}
+
+}
diff --git a/Source/Kernel/DeviceManager/Kbd.ns.h b/Source/Kernel/DeviceManager/Kbd.ns.h
new file mode 100644
index 0000000..ee73414
--- /dev/null
+++ b/Source/Kernel/DeviceManager/Kbd.ns.h
@@ -0,0 +1,96 @@
+#ifndef DEF_KBD_NS_H
+#define DEF_KBD_NS_H
+
+#include <Core/common.wtf.h>
+#include <Library/wchar.class.h>
+
+//Used by variable kbdstatus
+#define STATUS_SCRL 0x40
+#define STATUS_NUM 0x20
+#define STATUS_CAPS 0x10
+#define STATUS_SHIFT 0x08
+#define STATUS_CTRL 0x04
+#define STATUS_ALT 0x02
+#define STATUS_ALTGR 0x01
+
+//Used in control keys keymap. The ones > 100 are modifiers and are not supposed to be sent to applications.
+#define KBDC_LEFTCTRL 101
+#define KBDC_RIGHTCTRL 102
+#define KBDC_ALT 103
+#define KBDC_ALTGR 104
+#define KBDC_LEFTSUP 5 //Super = windows
+#define KBDC_RIGHTSUP 6
+#define KBDC_MENU 7
+#define KBDC_LEFTSHIFT 108
+#define KBDC_RIGHTSHIFT 109
+#define KBDC_CAPSLOCK 110
+#define KBDC_TAB 11
+#define KBDC_ENTER 12
+#define KBDC_BACKSPACE 13
+
+#define KBDC_KPINSERT 14 //Key 0/insert
+#define KBDC_KPEND 15 //Key 1/end
+#define KBDC_KPDOWN 16 //Key 2/down
+#define KBDC_KPPGDOWN 17 //Key 3/pgdown
+#define KBDC_KPLEFT 18 //Key 4/left
+#define KBDC_KP5 19 //Key 5 this is sent to receiving application, but must be ignored
+#define KBDC_KPRIGHT 20 //Key 6/right
+#define KBDC_KPHOME 21 //Key 7/home
+#define KBDC_KPUP 22 //Key 8/up
+#define KBDC_KPPGUP 23 //Key 9/pgup
+#define KBDC_KPDEL 24 //Key ./del
+
+#define KBDC_HOME 25
+#define KBDC_END 26
+#define KBDC_INSERT 27
+#define KBDC_DEL 28
+#define KBDC_PGUP 29
+#define KBDC_PGDOWN 30
+#define KBDC_UP 31
+#define KBDC_DOWN 32
+#define KBDC_LEFT 33
+#define KBDC_RIGHT 34
+
+#define KBDC_NUMLOCK 135
+#define KBDC_SCRLLOCK 136
+#define KBDC_PRTSCN 37 //Print screen
+#define KBDC_SYSREQ 38
+
+#define KBDC_ESCAPE 40
+#define KBDC_F1 41
+#define KBDC_F2 42
+#define KBDC_F3 43
+#define KBDC_F4 44
+#define KBDC_F5 45
+#define KBDC_F6 46
+#define KBDC_F7 47
+#define KBDC_F8 48
+#define KBDC_F9 49
+#define KBDC_F10 50
+#define KBDC_F11 51
+#define KBDC_F12 52
+
+//This is a special case. Keycode is escaped, Keyboard:: will send a 0xB5 keycode, that must not be mixed up with 0x35
+#define KBDC_KPSLASH 53
+
+class VirtualTerminal;
+
+namespace Kbd {
+ struct keypress_t {
+ bool pressed;
+ bool hascmd;
+ bool haschar;
+ u8int command; //is 0 if !hascmd, is one of KBDC_* if !haschar, and is a mask of STATUS_* if haschar
+ wchar character; //is 0 if !haschar
+ keypress_t() : hascmd(false), haschar(false), command(0), character('\0') {};
+ };
+
+ void setFocus(VirtualTerminal* vt);
+ void setKeymap(wchar* kmNormal, wchar* kmShift, wchar* kmAltgr, wchar* kmShiftAltgr = NULL);
+ void updateLeds();
+ void keyPress(u8int scancode);
+ void keyRelease(u8int scancode);
+}
+
+#endif
+
diff --git a/Source/Kernel/Devices/Keyboard/Keyboard.proto.h b/Source/Kernel/Devices/Keyboard/Keyboard.proto.h
new file mode 100644
index 0000000..d6898f8
--- /dev/null
+++ b/Source/Kernel/Devices/Keyboard/Keyboard.proto.h
@@ -0,0 +1,11 @@
+#ifndef DEF_KEYBOARD_PROTO_H
+#define DEF_KEYBOARD_PROTO_H
+
+#include <Devices/Device.proto.h>
+
+class Keyboard : public Device {
+ public:
+ virtual void updateLeds(u32int kbdstatus) = 0;
+};
+
+#endif
diff --git a/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp
new file mode 100644
index 0000000..f5216c7
--- /dev/null
+++ b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp
@@ -0,0 +1,52 @@
+#include "PS2Keyboard.class.h"
+#include <DeviceManager/Dev.ns.h>
+#include <DeviceManager/Kbd.ns.h>
+
+using namespace Sys;
+
+PS2Keyboard::PS2Keyboard() {
+ Dev::requestIRQ(this, 1);
+ m_escaped = false;
+}
+
+String PS2Keyboard::getClass() {
+ return "keyboard.ps2";
+}
+
+String PS2Keyboard::getName() {
+ return "Standard PS2 keyboard";
+}
+
+void PS2Keyboard::handleIRQ(registers_t regs, int irq) {
+ if (irq == 1) {
+ u8int scancode = inb(0x60);
+ if (scancode == 0xE0) {
+ m_escaped = true;
+ } else {
+ if (scancode & 0x80) {
+ if (m_escaped) {
+ Kbd::keyRelease(scancode);
+ } else {
+ Kbd::keyRelease(scancode & 0x7F);
+ }
+ } else {
+ if (m_escaped) {
+ Kbd::keyPress(scancode | 0x80);
+ } else {
+ Kbd::keyPress(scancode);
+ }
+ }
+ }
+ }
+}
+
+void PS2Keyboard::updateLeds(u32int kbdstatus) {
+ u8int temp = 0;
+ if (kbdstatus & STATUS_SCRL)
+ temp |= 1;
+ if (kbdstatus & STATUS_NUM)
+ temp |= 2;
+ if (kbdstatus & STATUS_CAPS)
+ temp |= 4;
+ outb(0x60, temp);
+}
diff --git a/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.h b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.h
new file mode 100644
index 0000000..b4cd7a8
--- /dev/null
+++ b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.h
@@ -0,0 +1,18 @@
+#ifndef DEF_PS2KEYBOARD_CLASS_H
+#define DEF_PS2KEYBOARD_CLASS_H
+
+#include <Devices/Keyboard/Keyboard.proto.h>
+
+class PS2Keyboard : public Keyboard {
+ private:
+ bool m_escaped;
+
+ public:
+ PS2Keyboard();
+ String getClass();
+ String getName();
+ void handleIRQ(registers_t regs, int irq);
+ void updateLeds(u32int kbdstatus);
+};
+
+#endif
diff --git a/Source/Kernel/Library/wchar.class.cpp b/Source/Kernel/Library/wchar.class.cpp
index acf5392..3a2ef92 100644
--- a/Source/Kernel/Library/wchar.class.cpp
+++ b/Source/Kernel/Library/wchar.class.cpp
@@ -42,6 +42,10 @@ void wchar::affectAscii(char c) {
}
u32int wchar::affectUtf8(char* c) { //Returns the number of bytes for the character
+ /*if ((c[0] & 0xB0) == 0x80) { //11000000b == 10000000b, means we are IN a sequence
+ value = 0;
+ return 1;
+ }*/
if ((c[0] & 0x80) == 0) {
value = c[0]; //0x80 = 10000000b
return 1;
@@ -54,6 +58,8 @@ u32int wchar::affectUtf8(char* c) { //Returns the number of bytes for the charac
if ((c[0] & 0xF0) == 0xE0) { // 11110000b, 11100000b
value = ((c[0] & 0x0F) << 12) | ((c[1] & 0x3F) << 6) | (c[2] & 0x3F);
if (value < 2048) value = 0; //Bad value
+ if (value >= 0xD800 and value <= 0xDFFF) value = 0; //These values are unallowed
+ if (value >= 0xFFFE and value <= 0xFFFF) value = 0;
return 3;
}
if ((c[0] & 0xF8) == 0xF0) { // 11111000b, 11110000b
diff --git a/Source/Kernel/Makefile b/Source/Kernel/Makefile
index 0758393..21fd6c9 100644
--- a/Source/Kernel/Makefile
+++ b/Source/Kernel/Makefile
@@ -10,8 +10,8 @@ ASM = nasm
ASMFLAGS = -f elf
OutFile = Melon.ke
-Objects = Core/kmain.wtf.o \
- Core/loader.wtf.o \
+Objects = Core/loader.wtf.o \
+ Core/kmain.wtf.o \
Core/cppsupport.wtf.o \
Core/Sys.ns.o \
Core/CMem.ns.o \
@@ -24,11 +24,14 @@ Objects = Core/kmain.wtf.o \
DeviceManager/Disp.ns.o \
DeviceManager/Dev.ns.o \
DeviceManager/Time.ns.o \
+ DeviceManager/Kbd.ns.o \
TaskManager/Process.class.o \
TaskManager/Thread.class.o \
TaskManager/Task.ns.o \
TaskManager/Task.wtf.o \
+ TaskManager/Mutex.class.o \
VTManager/VirtualTerminal.class.o \
+ VTManager/VirtualTerminal-kbd.class.o \
VTManager/VT.ns.o \
Library/Bitset.class.o \
Library/String.class.o \
@@ -36,6 +39,7 @@ Objects = Core/kmain.wtf.o \
SyscallManager/IDT.ns.o \
SyscallManager/IDT.wtf.o \
Devices/Display/VGATextOutput.class.o \
+ Devices/Keyboard/PS2Keyboard.class.o \
Devices/Timer.class.o
all: $(OutFile)
diff --git a/Source/Kernel/Map.txt b/Source/Kernel/Map.txt
index adb112e..a615e1d 100644
--- a/Source/Kernel/Map.txt
+++ b/Source/Kernel/Map.txt
@@ -33,6 +33,20 @@ Discarded input sections
.group 0x00000000 0x0 DeviceManager/Dev.ns.o
.group 0x00000000 0x0 DeviceManager/Dev.ns.o
.text._ZnwjPv 0x00000000 0x0 DeviceManager/Dev.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .group 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .text._ZdaPv 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .text._ZN6VectorIP6DeviceED1Ev
+ 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .text._ZN6VectorIP6DeviceE4sizeEv
+ 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .text._ZN6VectorIP6DeviceEixEj
+ 0x00000000 0x0 DeviceManager/Kbd.ns.o
.group 0x00000000 0x0 TaskManager/Process.class.o
.group 0x00000000 0x0 TaskManager/Process.class.o
.group 0x00000000 0x0 TaskManager/Process.class.o
@@ -93,7 +107,22 @@ Discarded input sections
.group 0x00000000 0x0 VTManager/VirtualTerminal.class.o
.group 0x00000000 0x0 VTManager/VirtualTerminal.class.o
.group 0x00000000 0x0 VTManager/VirtualTerminal.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal.class.o
.text._ZdaPv 0x00000000 0x0 VTManager/VirtualTerminal.class.o
+ .text._ZN5wcharaSEj
+ 0x00000000 0x0 VTManager/VirtualTerminal.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .group 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .text._ZnwjPv 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .text._ZN3Kbd10keypress_tC1Ev
+ 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
.group 0x00000000 0x0 VTManager/VT.ns.o
.group 0x00000000 0x0 VTManager/VT.ns.o
.group 0x00000000 0x0 VTManager/VT.ns.o
@@ -119,6 +148,8 @@ Discarded input sections
.text._ZdaPv 0x00000000 0x0 Library/String.class.o
.text._ZN5wcharaSEj
0x00000000 0x0 Library/String.class.o
+ .text._ZN5wcharcvjEv
+ 0x00000000 0x0 Library/String.class.o
.group 0x00000000 0x0 Library/wchar.class.o
.text._ZN5wchareqEj
0x00000000 0x0 Library/wchar.class.o
@@ -137,6 +168,18 @@ Discarded input sections
.group 0x00000000 0x0 Devices/Display/VGATextOutput.class.o
.text._ZN6Device9handleIRQE11registers_ti
0x00000000 0x0 Devices/Display/VGATextOutput.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .group 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .text._ZN6Device9handleIRQE11registers_ti
+ 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .text._ZN6DeviceC2Ev
+ 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .rodata._ZTV6Device
+ 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
.group 0x00000000 0x0 Devices/Timer.class.o
.group 0x00000000 0x0 Devices/Timer.class.o
.group 0x00000000 0x0 Devices/Timer.class.o
@@ -162,815 +205,953 @@ Linker script and memory map
.setup 0x00100000 0x1e Core/loader.wtf.o
0xc010001e . = (. + 0xc0000000)
-.text 0xc0100020 0x7d61 load address 0x00100020
+.text 0xc0100020 0xc531 load address 0x00100020
*(.text)
- .text 0xc0100020 0x917 Core/kmain.wtf.o
- 0xc0100020 kmain
- *fill* 0xc0100937 0x9 00
- .text 0xc0100940 0x75 Core/loader.wtf.o
- 0xc010094c loader
- *fill* 0xc01009b5 0x3 00
- .text 0xc01009b8 0xf Core/cppsupport.wtf.o
- 0xc01009b8 __cxa_pure_virtual
- 0xc01009bd __cxa_atexit
- *fill* 0xc01009c7 0x1 00
- .text 0xc01009c8 0x560 Core/Sys.ns.o
- 0xc0100a22 Sys::bochs_output(char*, char*, unsigned int)
- 0xc01009e6 Sys::inb(unsigned short)
- 0xc0100a03 Sys::inw(unsigned short)
- 0xc0100ba6 Sys::panic(char*, char*, unsigned int)
- 0xc0100f0c Sys::reboot()
- 0xc01009c8 Sys::outb(unsigned short, unsigned char)
- 0xc0100b1c Sys::bochs_output_hex(unsigned int)
- 0xc0100d59 Sys::panic_assert(char*, unsigned int, char*)
- .text 0xc0100f28 0xd5 Core/CMem.ns.o
- 0xc0100f5e CMem::memset(unsigned char*, unsigned char, int)
- 0xc0100f95 CMem::memsetw(unsigned short*, unsigned short, int)
- 0xc0100fd0 CMem::strlen(char const*)
- 0xc0100f28 CMem::memcpy(unsigned char*, unsigned char const*, int)
- *fill* 0xc0100ffd 0x3 00
- .text 0xc0101000 0x8b4 MemoryManager/Mem.ns.o
- 0xc01014b3 Mem::contractHeap()
- 0xc01010ba Mem::insertIntoHeapIndex(Mem::heap_header_t*)
- 0xc010125e Mem::removeFromHeapIndex(Mem::heap_header_t*)
- 0xc0101215 Mem::removeFromHeapIndex(unsigned int)
- 0xc0101285 Mem::createHeap()
- 0xc0101393 Mem::expandHeap(unsigned int)
- 0xc0101752 Mem::kfree(void*)
- 0xc01015c3 Mem::kalloc(unsigned int, bool)
- 0xc01011d3 Mem::heapIndexFindEntry(Mem::heap_header_t*)
- 0xc0101000 Mem::kallocInternal(unsigned int, bool)
- .text 0xc01018b4 0x35c MemoryManager/PhysMem.ns.o
- 0xc0101c06 PhysMem::total()
- 0xc0101a56 PhysMem::removeTemporaryPages()
- 0xc0101b91 PhysMem::freeFrame(page_t*)
- 0xc0101be0 PhysMem::free()
- 0xc0101aaa PhysMem::allocFrame(page_t*, bool, bool)
- 0xc01018b4 PhysMem::initPaging(unsigned int)
- .text 0xc0101c10 0x1d MemoryManager/GDT.wtf.o
- 0xc0101c10 gdt_flush
- *fill* 0xc0101c2d 0x3 00
- .text 0xc0101c30 0x193 MemoryManager/GDT.ns.o
- 0xc0101cbf GDT::init()
- 0xc0101c30 GDT::setGate(int, unsigned int, unsigned int, unsigned char, unsigned char)
- *fill* 0xc0101dc3 0x1 00
- .text 0xc0101dc4 0x8f1 MemoryManager/PageDirectory.class.o
- 0xc0102504 PageDirectory::getPage(unsigned int, bool)
- 0xc0101e88 PageDirectory::PageDirectory(PageDirectory*)
- 0xc0101dc4 PageDirectory::PageDirectory()
- 0xc010247e PageDirectory::~PageDirectory()
- 0xc01023f8 PageDirectory::~PageDirectory()
- 0xc0102654 PageDirectory::freeFrame(unsigned int)
- 0xc0102140 PageDirectory::PageDirectory(PageDirectory*)
- 0xc0101e26 PageDirectory::PageDirectory()
- 0xc0102602 PageDirectory::allocFrame(unsigned int, bool, bool)
- 0xc010268e PageDirectory::switchTo()
- *fill* 0xc01026b5 0x3 00
- .text 0xc01026b8 0x239 MemoryManager/PageAlloc.ns.o
- 0xc01028d5 PageAlloc::free(void*)
- 0xc010270c PageAlloc::alloc(unsigned int*)
- 0xc01026b8 PageAlloc::init()
- *fill* 0xc01028f1 0x3 00
- .text 0xc01028f4 0x161 DeviceManager/Disp.ns.o
- 0xc01028fe Disp::textRows()
- 0xc01029e1 Disp::clear()
- 0xc01028f4 Disp::textCols()
- 0xc01029ff Disp::setDisplay(Display*)
- 0xc0102980 Disp::moveCursor(unsigned short, unsigned short)
- 0xc0102908 Disp::putChar(unsigned short, unsigned short, wchar, unsigned char)
- *fill* 0xc0102a55 0x3 00
- .text 0xc0102a58 0x37d DeviceManager/Dev.ns.o
- 0xc0102b09 Dev::registerDevice(Device*)
- 0xc0102bdd Dev::findDevice(String)
- 0xc0102b2f Dev::unregisterDevice(Device*)
- 0xc0102bb1 Dev::requestIRQ(Device*, int)
- 0xc0102a58 Dev::handleIRQ(registers_t, int)
- *fill* 0xc0102dd5 0x3 00
- .text 0xc0102dd8 0x37 DeviceManager/Time.ns.o
- 0xc0102dd8 Time::setTimer(Timer*)
- 0xc0102dfa Time::time()
- 0xc0102de5 Time::uptime()
- *fill* 0xc0102e0f 0x1 00
- .text 0xc0102e10 0x4d5 TaskManager/Process.class.o
- 0xc0103186 Process::exit()
- 0xc0102e58 Process::createKernel(String)
- 0xc0102e10 Process::Process()
- 0xc0102f36 Process::Process(String, unsigned int)
- 0xc01030fe Process::stackAlloc()
- 0xc010320c Process::threadFinishes(Thread*, unsigned int)
- 0xc01030b0 Process::~Process()
- 0xc0102e34 Process::Process()
- 0xc0103062 Process::~Process()
- 0xc0102fcc Process::Process(String, unsigned int)
- 0xc01031e4 Process::registerThread(Thread*)
- 0xc01032da Process::getPagedir()
- *fill* 0xc01032e5 0x3 00
- .text 0xc01032e8 0x3eb TaskManager/Thread.class.o
- 0xc010343c Thread::Thread(Process*, unsigned int (*)())
- 0xc010330a Thread::Thread()
- 0xc0103514 Thread::setup(unsigned int (*)(), unsigned int)
- 0xc01034bc Thread::~Thread()
- 0xc0103310 Thread::Thread(unsigned int (*)(), bool)
- 0xc0103624 Thread::sleep(unsigned int)
- 0xc0103304 Thread::Thread()
- 0xc0103648 Thread::waitIRQ(unsigned char)
- 0xc01033a6 Thread::Thread(unsigned int (*)(), bool)
- 0xc01035d6 Thread::setState(unsigned int, unsigned int, unsigned int)
- 0xc01035f6 Thread::getEsp()
- 0xc0103602 Thread::getEbp()
- 0xc010361a Thread::getProcess()
- 0xc010360e Thread::getEip()
- 0xc0103590 Thread::finish(unsigned int)
- 0xc010367c Thread::runnable()
- 0xc01034e8 Thread::~Thread()
- 0xc01035b4 Thread::run(unsigned int (*)())
- 0xc010347c Thread::Thread(Process*, unsigned int (*)())
- 0xc01032e8 runThread(Thread*, unsigned int (*)())
- *fill* 0xc01036d3 0x1 00
- .text 0xc01036d4 0x565 TaskManager/Task.ns.o
- 0xc010393c Task::IRQwakeup(unsigned char)
- 0xc010391f Task::triggerSwitch()
- 0xc0103a46 Task::getKernelProcess()
- 0xc0103b0c Task::registerProcess(Process*)
- 0xc0103926 Task::nextPid()
- 0xc01036d4 Task::initialize(String)
- 0xc0103b32 Task::unregisterProcess(Process*)
- 0xc0103a8a Task::unregisterThread(Thread*)
- 0xc0103a64 Task::registerThread(Thread*)
- 0xc010377a Task::nextThread()
- 0xc01039b8 Task::allocKernelPageTable(unsigned int, page_table_t*, unsigned int)
- 0xc010382f Task::doSwitch()
- *fill* 0xc0103c39 0x7 00
- .text 0xc0103c40 0x48 TaskManager/Task.wtf.o
- 0xc0103c40 read_eip
- 0xc0103c43 idle_task
- 0xc0103c4a copy_page_physical
- .text 0xc0103c88 0xa5a VTManager/VirtualTerminal.class.o
- 0xc0103fec VirtualTerminal::map(int, int)
- 0xc010430a VirtualTerminal::put(wchar, bool)
- 0xc0104066 VirtualTerminal::unmap()
- 0xc01042d2 VirtualTerminal::setCursorLine(unsigned int)
- 0xc0103e58 VirtualTerminal::setColor(unsigned char, unsigned char)
- 0xc0103df0 VirtualTerminal::~VirtualTerminal()
- 0xc01042ee VirtualTerminal::setCursorCol(unsigned int)
- 0xc0103d3c VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
- 0xc0104270 VirtualTerminal::updateCursor()
- 0xc01044e0 VirtualTerminal::writeDec(int, bool)
- 0xc0103e24 VirtualTerminal::~VirtualTerminal()
- 0xc0104080 VirtualTerminal::redraw()
- 0xc0104618 VirtualTerminal::writeHex(unsigned int, bool)
- 0xc0104158 VirtualTerminal::scroll()
- 0xc0103c88 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
- 0xc0104474 VirtualTerminal::write(String, bool)
- 0xc0103ea6 VirtualTerminal::putChar(unsigned int, unsigned int, wchar)
- 0xc0103f70 VirtualTerminal::clear()
- 0xc01042ac VirtualTerminal::moveCursor(unsigned int, unsigned int)
- *fill* 0xc01046e2 0x2 00
- .text 0xc01046e4 0x156 VTManager/VT.ns.o
- 0xc010470a VT::unmap(VirtualTerminal*)
- 0xc0104791 VT::redrawScreen()
- 0xc01046e4 VT::map(VirtualTerminal*)
- *fill* 0xc010483a 0x2 00
- .text 0xc010483c 0x2f1 Library/Bitset.class.o
- 0xc0104b22 Bitset::usedBits()
- 0xc010483c Bitset::Bitset()
- 0xc0104a44 Bitset::testBit(unsigned int)
- 0xc010490a Bitset::~Bitset()
- 0xc01049dc Bitset::clearBit(unsigned int)
- 0xc0104920 Bitset::init(unsigned int, unsigned int*)
- 0xc0104848 Bitset::Bitset(unsigned int)
- 0xc0104842 Bitset::Bitset()
- 0xc010487c Bitset::Bitset(unsigned int)
- 0xc0104976 Bitset::setBit(unsigned int)
- 0xc01048f4 Bitset::~Bitset()
- 0xc01048d2 Bitset::Bitset(unsigned int, unsigned int*)
- 0xc01048b0 Bitset::Bitset(unsigned int, unsigned int*)
- 0xc0104a8c Bitset::firstFreeBit()
- *fill* 0xc0104b2d 0x3 00
- .text 0xc0104b30 0x123c Library/String.class.o
- 0xc0104b30 String::hex(unsigned int)
- 0xc01054c2 String::operator==(char*)
- 0xc0105808 String::operator+=(wchar)
- 0xc01059b6 String::toInt()
- 0xc0105110 String::String(String const&)
- 0xc0104e1e String::String()
- 0xc0104e36 String::String()
- 0xc0105b4c String::size()
- 0xc0104c3e String::number(int)
- 0xc0105440 String::operator==(String&)
- 0xc0105936 String::operator+(char*)
- 0xc010520e String::~String()
- 0xc010503a String::String(String const&)
- 0xc01051e6 String::~String()
- 0xc0105236 String::operator=(String const&)
- 0xc0104e4e String::String(char*)
- 0xc0105582 String::operator+=(String&)
- 0xc0105b3a String::operator[](int)
- 0xc0105b9a String::split(wchar)
- 0xc0105b58 String::clear()
- 0xc0105b8a String::empty()
- 0xc0105a7e String::toInt16()
- 0xc0105c8e String::substr(int, int)
- 0xc0104f44 String::String(char*)
- 0xc01056b0 String::operator+=(char*)
- 0xc0105976 String::operator+(wchar)
- 0xc010532c String::operator=(char*)
- 0xc01058f6 String::operator+(String&)
- .text 0xc0105d6c 0xd01 Library/wchar.class.o
- 0xc0105d7a wchar::wchar()
- 0xc0105de6 wchar::wchar(char*)
- 0xc0105d6c wchar::wchar()
- 0xc0105dcc wchar::wchar(char*)
- 0xc0105eb0 wchar::affectAscii(char)
- 0xc0105e00 wchar::utf8len(char*)
- 0xc0105ec8 wchar::affectUtf8(char*)
- 0xc0105d88 wchar::wchar(char)
- 0xc0105daa wchar::wchar(char)
- 0xc010604a wchar::toAscii()
- *fill* 0xc0106a6d 0x3 00
- .text 0xc0106a70 0xd53 SyscallManager/IDT.ns.o
- 0xc010749b IDT::handleException(registers_t, int)
- 0xc0106c79 IDT::init()
- 0xc0106c12 IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char)
- 0xc0106a70 interrupt_handler
- *fill* 0xc01077c3 0xd 00
- .text 0xc01077d0 0x20e SyscallManager/IDT.wtf.o
- 0xc0107800 isr4
- 0xc01078da isr27
- 0xc0107852 isr13
- 0xc0107984 irq12
- 0xc01078a8 isr22
- 0xc0107862 isr15
- 0xc0107970 irq10
- 0xc0107998 irq14
- 0xc0107830 isr9
- 0xc010795c irq8
- 0xc01078b2 isr23
- 0xc01078ee isr29
- 0xc0107902 isr31
- 0xc010789e isr21
- 0xc010797a irq11
- 0xc01078e4 isr28
- 0xc0107828 isr8
- 0xc010793e irq5
- 0xc0107894 isr20
- 0xc010785a isr14
- 0xc010780a isr5
- 0xc0107948 irq6
- 0xc0107916 irq1
- 0xc01077e2 isr1
- 0xc0107966 irq9
- 0xc01078d0 isr26
- 0xc0107842 isr11
- 0xc010798e irq13
- 0xc010784a isr12
- 0xc01077d8 isr0
- 0xc0107920 irq2
- 0xc01078bc isr24
- 0xc010786c isr16
- 0xc01077f6 isr3
- 0xc0107814 isr6
- 0xc0107952 irq7
- 0xc0107880 isr18
- 0xc010790c irq0
- 0xc010783a isr10
- 0xc0107876 isr17
- 0xc01077ec isr2
- 0xc01079ac int64
- 0xc010788a isr19
- 0xc01077d0 idt_flush
- 0xc01078f8 isr30
- 0xc01079a2 irq15
- 0xc010781e isr7
- 0xc01078c6 isr25
- 0xc0107934 irq4
- 0xc010792a irq3
- *fill* 0xc01079de 0x2 00
- .text 0xc01079e0 0x185 Devices/Display/VGATextOutput.class.o
- 0xc0107a08 VGATextOutput::getName()
- 0xc0107a30 VGATextOutput::textCols()
- 0xc0107b2e VGATextOutput::clear()
- 0xc01079e0 VGATextOutput::getClass()
- 0xc0107aa8 VGATextOutput::moveCursor(unsigned short, unsigned short)
- 0xc0107a44 VGATextOutput::putChar(unsigned short, unsigned short, wchar, unsigned char)
- 0xc0107a3a VGATextOutput::textRows()
- *fill* 0xc0107b65 0x3 00
- .text 0xc0107b68 0x219 Devices/Timer.class.o
- 0xc0107c80 Timer::setFrequency(unsigned char)
- 0xc0107b68 Timer::Timer(unsigned char)
- 0xc0107c30 Timer::getClass()
- 0xc0107c58 Timer::getName()
- 0xc0107d04 Timer::time()
- 0xc0107d3e Timer::handleIRQ(registers_t, int)
- 0xc0107cf8 Timer::uptime()
- 0xc0107bcc Timer::Timer(unsigned char)
-
-.text._Znwj 0xc0107d81 0x1b load address 0x00107d81
- .text._Znwj 0xc0107d81 0x1b Core/kmain.wtf.o
- 0xc0107d81 operator new(unsigned int)
+ .text 0xc0100020 0x75 Core/loader.wtf.o
+ 0xc010002c loader
+ *fill* 0xc0100095 0x3 00
+ .text 0xc0100098 0x40a7 Core/kmain.wtf.o
+ 0xc0100098 kmain
+ *fill* 0xc010413f 0x1 00
+ .text 0xc0104140 0xf Core/cppsupport.wtf.o
+ 0xc0104140 __cxa_pure_virtual
+ 0xc0104145 __cxa_atexit
+ *fill* 0xc010414f 0x1 00
+ .text 0xc0104150 0x668 Core/Sys.ns.o
+ 0xc01041aa Sys::bochs_output(char*, char*, unsigned int)
+ 0xc010416e Sys::inb(unsigned short)
+ 0xc010418b Sys::inw(unsigned short)
+ 0xc0104436 Sys::panic(char*, char*, unsigned int)
+ 0xc010479c Sys::reboot()
+ 0xc0104150 Sys::outb(unsigned short, unsigned char)
+ 0xc01043ac Sys::bochs_output_hex(unsigned int)
+ 0xc01045e9 Sys::panic_assert(char*, unsigned int, char*)
+ 0xc01042a4 Sys::bochs_output(String, char*, unsigned int)
+ .text 0xc01047b8 0xd5 Core/CMem.ns.o
+ 0xc01047ee CMem::memset(unsigned char*, unsigned char, int)
+ 0xc0104825 CMem::memsetw(unsigned short*, unsigned short, int)
+ 0xc0104860 CMem::strlen(char const*)
+ 0xc01047b8 CMem::memcpy(unsigned char*, unsigned char const*, int)
+ *fill* 0xc010488d 0x3 00
+ .text 0xc0104890 0x8b4 MemoryManager/Mem.ns.o
+ 0xc0104d43 Mem::contractHeap()
+ 0xc010494a Mem::insertIntoHeapIndex(Mem::heap_header_t*)
+ 0xc0104aee Mem::removeFromHeapIndex(Mem::heap_header_t*)
+ 0xc0104aa5 Mem::removeFromHeapIndex(unsigned int)
+ 0xc0104b15 Mem::createHeap()
+ 0xc0104c23 Mem::expandHeap(unsigned int)
+ 0xc0104fe2 Mem::kfree(void*)
+ 0xc0104e53 Mem::kalloc(unsigned int, bool)
+ 0xc0104a63 Mem::heapIndexFindEntry(Mem::heap_header_t*)
+ 0xc0104890 Mem::kallocInternal(unsigned int, bool)
+ .text 0xc0105144 0x35c MemoryManager/PhysMem.ns.o
+ 0xc0105496 PhysMem::total()
+ 0xc01052e6 PhysMem::removeTemporaryPages()
+ 0xc0105421 PhysMem::freeFrame(page_t*)
+ 0xc0105470 PhysMem::free()
+ 0xc010533a PhysMem::allocFrame(page_t*, bool, bool)
+ 0xc0105144 PhysMem::initPaging(unsigned int)
+ .text 0xc01054a0 0x1d MemoryManager/GDT.wtf.o
+ 0xc01054a0 gdt_flush
+ *fill* 0xc01054bd 0x3 00
+ .text 0xc01054c0 0x193 MemoryManager/GDT.ns.o
+ 0xc010554f GDT::init()
+ 0xc01054c0 GDT::setGate(int, unsigned int, unsigned int, unsigned char, unsigned char)
+ *fill* 0xc0105653 0x1 00
+ .text 0xc0105654 0x8f1 MemoryManager/PageDirectory.class.o
+ 0xc0105d94 PageDirectory::getPage(unsigned int, bool)
+ 0xc0105718 PageDirectory::PageDirectory(PageDirectory*)
+ 0xc0105654 PageDirectory::PageDirectory()
+ 0xc0105d0e PageDirectory::~PageDirectory()
+ 0xc0105c88 PageDirectory::~PageDirectory()
+ 0xc0105ee4 PageDirectory::freeFrame(unsigned int)
+ 0xc01059d0 PageDirectory::PageDirectory(PageDirectory*)
+ 0xc01056b6 PageDirectory::PageDirectory()
+ 0xc0105e92 PageDirectory::allocFrame(unsigned int, bool, bool)
+ 0xc0105f1e PageDirectory::switchTo()
+ *fill* 0xc0105f45 0x3 00
+ .text 0xc0105f48 0x239 MemoryManager/PageAlloc.ns.o
+ 0xc0106165 PageAlloc::free(void*)
+ 0xc0105f9c PageAlloc::alloc(unsigned int*)
+ 0xc0105f48 PageAlloc::init()
+ *fill* 0xc0106181 0x3 00
+ .text 0xc0106184 0x161 DeviceManager/Disp.ns.o
+ 0xc010618e Disp::textRows()
+ 0xc0106271 Disp::clear()
+ 0xc0106184 Disp::textCols()
+ 0xc010628f Disp::setDisplay(Display*)
+ 0xc0106210 Disp::moveCursor(unsigned short, unsigned short)
+ 0xc0106198 Disp::putChar(unsigned short, unsigned short, wchar, unsigned char)
+ *fill* 0xc01062e5 0x3 00
+ .text 0xc01062e8 0x37d DeviceManager/Dev.ns.o
+ 0xc0106399 Dev::registerDevice(Device*)
+ 0xc010646d Dev::findDevice(String)
+ 0xc01063bf Dev::unregisterDevice(Device*)
+ 0xc0106441 Dev::requestIRQ(Device*, int)
+ 0xc01062e8 Dev::handleIRQ(registers_t, int)
+ *fill* 0xc0106665 0x3 00
+ .text 0xc0106668 0x37 DeviceManager/Time.ns.o
+ 0xc0106668 Time::setTimer(Timer*)
+ 0xc010668a Time::time()
+ 0xc0106675 Time::uptime()
+ *fill* 0xc010669f 0x1 00
+ .text 0xc01066a0 0x70f DeviceManager/Kbd.ns.o
+ 0xc01067d4 Kbd::keyPress(unsigned char)
+ 0xc010673e Kbd::updateLeds()
+ 0xc0106719 Kbd::setKeymap(wchar*, wchar*, wchar*, wchar*)
+ 0xc0106b1c Kbd::keyRelease(unsigned char)
+ 0xc010670c Kbd::setFocus(VirtualTerminal*)
+ 0xc01066a0 Kbd::process(Kbd::keypress_t)
+ *fill* 0xc0106daf 0x1 00
+ .text 0xc0106db0 0x518 TaskManager/Process.class.o
+ 0xc010714e Process::exit()
+ 0xc0106db0 Process::Process()
+ 0xc0106ed6 Process::Process(String, unsigned int)
+ 0xc01072ba Process::setVirtualTerminal(VirtualTerminal*)
+ 0xc01070c6 Process::stackAlloc()
+ 0xc01072ae Process::getVirtualTerminal()
+ 0xc01071d4 Process::threadFinishes(Thread*, unsigned int)
+ 0xc0107078 Process::~Process()
+ 0xc0106dd4 Process::Process()
+ 0xc0106df8 Process::createKernel(String, VirtualTerminal*)
+ 0xc010702a Process::~Process()
+ 0xc0106f80 Process::Process(String, unsigned int)
+ 0xc01071ac Process::registerThread(Thread*)
+ 0xc01072a2 Process::getPagedir()
+ .text 0xc01072c8 0x3eb TaskManager/Thread.class.o
+ 0xc010741c Thread::Thread(Process*, unsigned int (*)())
+ 0xc01072ea Thread::Thread()
+ 0xc01074f4 Thread::setup(unsigned int (*)(), unsigned int)
+ 0xc010749c Thread::~Thread()
+ 0xc01072f0 Thread::Thread(unsigned int (*)(), bool)
+ 0xc0107604 Thread::sleep(unsigned int)
+ 0xc01072e4 Thread::Thread()
+ 0xc0107628 Thread::waitIRQ(unsigned char)
+ 0xc0107386 Thread::Thread(unsigned int (*)(), bool)
+ 0xc01075b6 Thread::setState(unsigned int, unsigned int, unsigned int)
+ 0xc01075d6 Thread::getEsp()
+ 0xc01075e2 Thread::getEbp()
+ 0xc01075fa Thread::getProcess()
+ 0xc01075ee Thread::getEip()
+ 0xc0107570 Thread::finish(unsigned int)
+ 0xc010765c Thread::runnable()
+ 0xc01074c8 Thread::~Thread()
+ 0xc0107594 Thread::run(unsigned int (*)())
+ 0xc010745c Thread::Thread(Process*, unsigned int (*)())
+ 0xc01072c8 runThread(Thread*, unsigned int (*)())
+ *fill* 0xc01076b3 0x1 00
+ .text 0xc01076b4 0x56e TaskManager/Task.ns.o
+ 0xc0107925 Task::IRQwakeup(unsigned char)
+ 0xc0107908 Task::triggerSwitch()
+ 0xc0107a2f Task::getKernelProcess()
+ 0xc0107af5 Task::registerProcess(Process*)
+ 0xc010790f Task::nextPid()
+ 0xc0107b1b Task::unregisterProcess(Process*)
+ 0xc0107a73 Task::unregisterThread(Thread*)
+ 0xc0107a4d Task::registerThread(Thread*)
+ 0xc01076b4 Task::initialize(String, VirtualTerminal*)
+ 0xc0107763 Task::nextThread()
+ 0xc01079a1 Task::allocKernelPageTable(unsigned int, page_table_t*, unsigned int)
+ 0xc0107818 Task::doSwitch()
+ *fill* 0xc0107c22 0xe 00
+ .text 0xc0107c30 0x48 TaskManager/Task.wtf.o
+ 0xc0107c30 read_eip
+ 0xc0107c33 idle_task
+ 0xc0107c3a copy_page_physical
+ .text 0xc0107c78 0x99 TaskManager/Mutex.class.o
+ 0xc0107c90 Mutex::Mutex(bool)
+ 0xc0107cfa Mutex::unlock()
+ 0xc0107ca8 Mutex::lock()
+ 0xc0107cca Mutex::waitLock()
+ 0xc0107d06 Mutex::locked()
+ 0xc0107c78 Mutex::Mutex(bool)
+ *fill* 0xc0107d11 0x3 00
+ .text 0xc0107d14 0xabe VTManager/VirtualTerminal.class.o
+ 0xc01080dc VirtualTerminal::map(int, int)
+ 0xc01083fa VirtualTerminal::put(wchar, bool)
+ 0xc0108156 VirtualTerminal::unmap()
+ 0xc01083c2 VirtualTerminal::setCursorLine(unsigned int)
+ 0xc0107f48 VirtualTerminal::setColor(unsigned char, unsigned char)
+ 0xc0107ec4 VirtualTerminal::~VirtualTerminal()
+ 0xc01083de VirtualTerminal::setCursorCol(unsigned int)
+ 0xc0107dec VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
+ 0xc0108360 VirtualTerminal::updateCursor()
+ 0xc01085d0 VirtualTerminal::writeDec(int, bool)
+ 0xc0107f06 VirtualTerminal::~VirtualTerminal()
+ 0xc0108170 VirtualTerminal::redraw()
+ 0xc0108708 VirtualTerminal::writeHex(unsigned int, bool)
+ 0xc0108248 VirtualTerminal::scroll()
+ 0xc0107d14 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
+ 0xc0108564 VirtualTerminal::write(String, bool)
+ 0xc0107f96 VirtualTerminal::putChar(unsigned int, unsigned int, wchar)
+ 0xc0108060 VirtualTerminal::clear()
+ 0xc010839c VirtualTerminal::moveCursor(unsigned int, unsigned int)
+ *fill* 0xc01087d2 0x2 00
+ .text 0xc01087d4 0x50b VTManager/VirtualTerminal-kbd.class.o
+ 0xc01088fe VirtualTerminal::getKeypress(bool, bool)
+ 0xc0108b3a VirtualTerminal::readLine(bool)
+ 0xc01087d4 VirtualTerminal::keyPress(Kbd::keypress_t)
+ *fill* 0xc0108cdf 0x1 00
+ .text 0xc0108ce0 0x156 VTManager/VT.ns.o
+ 0xc0108d06 VT::unmap(VirtualTerminal*)
+ 0xc0108d8d VT::redrawScreen()
+ 0xc0108ce0 VT::map(VirtualTerminal*)
+ *fill* 0xc0108e36 0x2 00
+ .text 0xc0108e38 0x2f1 Library/Bitset.class.o
+ 0xc010911e Bitset::usedBits()
+ 0xc0108e38 Bitset::Bitset()
+ 0xc0109040 Bitset::testBit(unsigned int)
+ 0xc0108f06 Bitset::~Bitset()
+ 0xc0108fd8 Bitset::clearBit(unsigned int)
+ 0xc0108f1c Bitset::init(unsigned int, unsigned int*)
+ 0xc0108e44 Bitset::Bitset(unsigned int)
+ 0xc0108e3e Bitset::Bitset()
+ 0xc0108e78 Bitset::Bitset(unsigned int)
+ 0xc0108f72 Bitset::setBit(unsigned int)
+ 0xc0108ef0 Bitset::~Bitset()
+ 0xc0108ece Bitset::Bitset(unsigned int, unsigned int*)
+ 0xc0108eac Bitset::Bitset(unsigned int, unsigned int*)
+ 0xc0109088 Bitset::firstFreeBit()
+ *fill* 0xc0109129 0x3 00
+ .text 0xc010912c 0x123c Library/String.class.o
+ 0xc010912c String::hex(unsigned int)
+ 0xc0109abe String::operator==(char*)
+ 0xc0109e04 String::operator+=(wchar)
+ 0xc0109fb2 String::toInt()
+ 0xc010970c String::String(String const&)
+ 0xc010941a String::String()
+ 0xc0109432 String::String()
+ 0xc010a148 String::size()
+ 0xc010923a String::number(int)
+ 0xc0109a3c String::operator==(String&)
+ 0xc0109f32 String::operator+(char*)
+ 0xc010980a String::~String()
+ 0xc0109636 String::String(String const&)
+ 0xc01097e2 String::~String()
+ 0xc0109832 String::operator=(String const&)
+ 0xc010944a String::String(char*)
+ 0xc0109b7e String::operator+=(String&)
+ 0xc010a136 String::operator[](int)
+ 0xc010a196 String::split(wchar)
+ 0xc010a154 String::clear()
+ 0xc010a186 String::empty()
+ 0xc010a07a String::toInt16()
+ 0xc010a28a String::substr(int, int)
+ 0xc0109540 String::String(char*)
+ 0xc0109cac String::operator+=(char*)
+ 0xc0109f72 String::operator+(wchar)
+ 0xc0109928 String::operator=(char*)
+ 0xc0109ef2 String::operator+(String&)
+ .text 0xc010a368 0xd47 Library/wchar.class.o
+ 0xc010a376 wchar::wchar()
+ 0xc010a3e2 wchar::wchar(char*)
+ 0xc010a368 wchar::wchar()
+ 0xc010a3c8 wchar::wchar(char*)
+ 0xc010a4ac wchar::affectAscii(char)
+ 0xc010a3fc wchar::utf8len(char*)
+ 0xc010a4c4 wchar::affectUtf8(char*)
+ 0xc010a384 wchar::wchar(char)
+ 0xc010a3a6 wchar::wchar(char)
+ 0xc010a68c wchar::toAscii()
+ *fill* 0xc010b0af 0x1 00
+ .text 0xc010b0b0 0xd53 SyscallManager/IDT.ns.o
+ 0xc010badb IDT::handleException(registers_t, int)
+ 0xc010b2b9 IDT::init()
+ 0xc010b252 IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char)
+ 0xc010b0b0 interrupt_handler
+ *fill* 0xc010be03 0xd 00
+ .text 0xc010be10 0x20e SyscallManager/IDT.wtf.o
+ 0xc010be40 isr4
+ 0xc010bf1a isr27
+ 0xc010be92 isr13
+ 0xc010bfc4 irq12
+ 0xc010bee8 isr22
+ 0xc010bea2 isr15
+ 0xc010bfb0 irq10
+ 0xc010bfd8 irq14
+ 0xc010be70 isr9
+ 0xc010bf9c irq8
+ 0xc010bef2 isr23
+ 0xc010bf2e isr29
+ 0xc010bf42 isr31
+ 0xc010bede isr21
+ 0xc010bfba irq11
+ 0xc010bf24 isr28
+ 0xc010be68 isr8
+ 0xc010bf7e irq5
+ 0xc010bed4 isr20
+ 0xc010be9a isr14
+ 0xc010be4a isr5
+ 0xc010bf88 irq6
+ 0xc010bf56 irq1
+ 0xc010be22 isr1
+ 0xc010bfa6 irq9
+ 0xc010bf10 isr26
+ 0xc010be82 isr11
+ 0xc010bfce irq13
+ 0xc010be8a isr12
+ 0xc010be18 isr0
+ 0xc010bf60 irq2
+ 0xc010befc isr24
+ 0xc010beac isr16
+ 0xc010be36 isr3
+ 0xc010be54 isr6
+ 0xc010bf92 irq7
+ 0xc010bec0 isr18
+ 0xc010bf4c irq0
+ 0xc010be7a isr10
+ 0xc010beb6 isr17
+ 0xc010be2c isr2
+ 0xc010bfec int64
+ 0xc010beca isr19
+ 0xc010be10 idt_flush
+ 0xc010bf38 isr30
+ 0xc010bfe2 irq15
+ 0xc010be5e isr7
+ 0xc010bf06 isr25
+ 0xc010bf74 irq4
+ 0xc010bf6a irq3
+ *fill* 0xc010c01e 0x2 00
+ .text 0xc010c020 0x185 Devices/Display/VGATextOutput.class.o
+ 0xc010c048 VGATextOutput::getName()
+ 0xc010c070 VGATextOutput::textCols()
+ 0xc010c16e VGATextOutput::clear()
+ 0xc010c020 VGATextOutput::getClass()
+ 0xc010c0e8 VGATextOutput::moveCursor(unsigned short, unsigned short)
+ 0xc010c084 VGATextOutput::putChar(unsigned short, unsigned short, wchar, unsigned char)
+ 0xc010c07a VGATextOutput::textRows()
+ *fill* 0xc010c1a5 0x3 00
+ .text 0xc010c1a8 0x190 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc010c1de PS2Keyboard::PS2Keyboard()
+ 0xc010c264 PS2Keyboard::handleIRQ(registers_t, int)
+ 0xc010c23c PS2Keyboard::getName()
+ 0xc010c2ee PS2Keyboard::updateLeds(unsigned int)
+ 0xc010c1a8 PS2Keyboard::PS2Keyboard()
+ 0xc010c214 PS2Keyboard::getClass()
+ .text 0xc010c338 0x219 Devices/Timer.class.o
+ 0xc010c450 Timer::setFrequency(unsigned char)
+ 0xc010c338 Timer::Timer(unsigned char)
+ 0xc010c400 Timer::getClass()
+ 0xc010c428 Timer::getName()
+ 0xc010c4d4 Timer::time()
+ 0xc010c50e Timer::handleIRQ(registers_t, int)
+ 0xc010c4c8 Timer::uptime()
+ 0xc010c39c Timer::Timer(unsigned char)
+
+.text._Znwj 0xc010c551 0x1b load address 0x0010c551
+ .text._Znwj 0xc010c551 0x1b Core/kmain.wtf.o
+ 0xc010c551 operator new(unsigned int)
.text._ZN6Device9handleIRQE11registers_ti
- 0xc0107d9c 0x5 load address 0x00107d9c
+ 0xc010c56c 0x5 load address 0x0010c56c
.text._ZN6Device9handleIRQE11registers_ti
- 0xc0107d9c 0x5 Core/kmain.wtf.o
- 0xc0107d9c Device::handleIRQ(registers_t, int)
+ 0xc010c56c 0x5 Core/kmain.wtf.o
+ 0xc010c56c Device::handleIRQ(registers_t, int)
.text._ZN15VirtualTerminallsE6String
- 0xc0107da2 0x42 load address 0x00107da2
+ 0xc010c572 0x42 load address 0x0010c572
.text._ZN15VirtualTerminallsE6String
- 0xc0107da2 0x42 Core/kmain.wtf.o
- 0xc0107da2 VirtualTerminal::operator<<(String)
+ 0xc010c572 0x42 Core/kmain.wtf.o
+ 0xc010c572 VirtualTerminal::operator<<(String)
.text._ZN15VirtualTerminallsEi
- 0xc0107de4 0x25 load address 0x00107de4
+ 0xc010c5b4 0x25 load address 0x0010c5b4
.text._ZN15VirtualTerminallsEi
- 0xc0107de4 0x25 Core/kmain.wtf.o
- 0xc0107de4 VirtualTerminal::operator<<(int)
+ 0xc010c5b4 0x25 Core/kmain.wtf.o
+ 0xc010c5b4 VirtualTerminal::operator<<(int)
.text._ZN15VirtualTerminallsEj
- 0xc0107e0a 0x25 load address 0x00107e0a
+ 0xc010c5da 0x25 load address 0x0010c5da
.text._ZN15VirtualTerminallsEj
- 0xc0107e0a 0x25 Core/kmain.wtf.o
- 0xc0107e0a VirtualTerminal::operator<<(unsigned int)
+ 0xc010c5da 0x25 Core/kmain.wtf.o
+ 0xc010c5da VirtualTerminal::operator<<(unsigned int)
.text._ZN6DeviceC2Ev
- 0xc0107e30 0xe load address 0x00107e30
+ 0xc010c600 0xe load address 0x0010c600
.text._ZN6DeviceC2Ev
- 0xc0107e30 0xe Core/kmain.wtf.o
- 0xc0107e30 Device::Device()
+ 0xc010c600 0xe Core/kmain.wtf.o
+ 0xc010c600 Device::Device()
.text._ZN7DisplayC2Ev
- 0xc0107e3e 0x1c load address 0x00107e3e
+ 0xc010c60e 0x1c load address 0x0010c60e
.text._ZN7DisplayC2Ev
- 0xc0107e3e 0x1c Core/kmain.wtf.o
- 0xc0107e3e Display::Display()
+ 0xc010c60e 0x1c Core/kmain.wtf.o
+ 0xc010c60e Display::Display()
.text._ZN13VGATextOutputC1Ev
- 0xc0107e5a 0x1c load address 0x00107e5a
+ 0xc010c62a 0x1c load address 0x0010c62a
.text._ZN13VGATextOutputC1Ev
- 0xc0107e5a 0x1c Core/kmain.wtf.o
- 0xc0107e5a VGATextOutput::VGATextOutput()
+ 0xc010c62a 0x1c Core/kmain.wtf.o
+ 0xc010c62a VGATextOutput::VGATextOutput()
-.text._ZnwjPv 0xc0107e76 0x8 load address 0x00107e76
- .text._ZnwjPv 0xc0107e76 0x8 MemoryManager/PhysMem.ns.o
- 0xc0107e76 operator new(unsigned int, void*)
+.text._ZnwjPv 0xc010c646 0x8 load address 0x0010c646
+ .text._ZnwjPv 0xc010c646 0x8 MemoryManager/PhysMem.ns.o
+ 0xc010c646 operator new(unsigned int, void*)
-.text._ZdaPv 0xc0107e7e 0x13 load address 0x00107e7e
- .text._ZdaPv 0xc0107e7e 0x13 DeviceManager/Dev.ns.o
- 0xc0107e7e operator delete[](void*)
+.text._ZdaPv 0xc010c64e 0x13 load address 0x0010c64e
+ .text._ZdaPv 0xc010c64e 0x13 DeviceManager/Dev.ns.o
+ 0xc010c64e operator delete[](void*)
.text._ZN6VectorIP6DeviceEC1Ev
- 0xc0107e92 0x18 load address 0x00107e92
+ 0xc010c662 0x18 load address 0x0010c662
.text._ZN6VectorIP6DeviceEC1Ev
- 0xc0107e92 0x18 DeviceManager/Dev.ns.o
- 0xc0107e92 Vector<Device*>::Vector()
+ 0xc010c662 0x18 DeviceManager/Dev.ns.o
+ 0xc010c662 Vector<Device*>::Vector()
.text._ZN6VectorIP6DeviceE4pushES1_
- 0xc0107eaa 0x91 load address 0x00107eaa
+ 0xc010c67a 0x91 load address 0x0010c67a
.text._ZN6VectorIP6DeviceE4pushES1_
- 0xc0107eaa 0x91 DeviceManager/Dev.ns.o
- 0xc0107eaa Vector<Device*>::push(Device*)
+ 0xc010c67a 0x91 DeviceManager/Dev.ns.o
+ 0xc010c67a Vector<Device*>::push(Device*)
.text._ZN6VectorIP6DeviceE4sizeEv
- 0xc0107f3c 0xb load address 0x00107f3c
+ 0xc010c70c 0xb load address 0x0010c70c
.text._ZN6VectorIP6DeviceE4sizeEv
- 0xc0107f3c 0xb DeviceManager/Dev.ns.o
- 0xc0107f3c Vector<Device*>::size()
+ 0xc010c70c 0xb DeviceManager/Dev.ns.o
+ 0xc010c70c Vector<Device*>::size()
.text._ZN6VectorIP6DeviceEixEj
- 0xc0107f48 0x12 load address 0x00107f48
+ 0xc010c718 0x12 load address 0x0010c718
.text._ZN6VectorIP6DeviceEixEj
- 0xc0107f48 0x12 DeviceManager/Dev.ns.o
- 0xc0107f48 Vector<Device*>::operator[](unsigned int)
+ 0xc010c718 0x12 DeviceManager/Dev.ns.o
+ 0xc010c718 Vector<Device*>::operator[](unsigned int)
.text._ZN6VectorIP6DeviceE4backEv
- 0xc0107f5a 0x19 load address 0x00107f5a
+ 0xc010c72a 0x19 load address 0x0010c72a
.text._ZN6VectorIP6DeviceE4backEv
- 0xc0107f5a 0x19 DeviceManager/Dev.ns.o
- 0xc0107f5a Vector<Device*>::back()
+ 0xc010c72a 0x19 DeviceManager/Dev.ns.o
+ 0xc010c72a Vector<Device*>::back()
.text._ZN6VectorIP6DeviceE3popEv
- 0xc0107f74 0x6d load address 0x00107f74
+ 0xc010c744 0x6d load address 0x0010c744
.text._ZN6VectorIP6DeviceE3popEv
- 0xc0107f74 0x6d DeviceManager/Dev.ns.o
- 0xc0107f74 Vector<Device*>::pop()
+ 0xc010c744 0x6d DeviceManager/Dev.ns.o
+ 0xc010c744 Vector<Device*>::pop()
.text._ZN6VectorIP6DeviceEC1ERKS2_
- 0xc0107fe2 0x7f load address 0x00107fe2
+ 0xc010c7b2 0x7f load address 0x0010c7b2
.text._ZN6VectorIP6DeviceEC1ERKS2_
- 0xc0107fe2 0x7f DeviceManager/Dev.ns.o
- 0xc0107fe2 Vector<Device*>::Vector(Vector<Device*> const&)
+ 0xc010c7b2 0x7f DeviceManager/Dev.ns.o
+ 0xc010c7b2 Vector<Device*>::Vector(Vector<Device*> const&)
.text._ZN6VectorIP6DeviceED1Ev
- 0xc0108062 0x27 load address 0x00108062
+ 0xc010c832 0x27 load address 0x0010c832
.text._ZN6VectorIP6DeviceED1Ev
- 0xc0108062 0x27 DeviceManager/Dev.ns.o
- 0xc0108062 Vector<Device*>::~Vector()
+ 0xc010c832 0x27 DeviceManager/Dev.ns.o
+ 0xc010c832 Vector<Device*>::~Vector()
-.text._ZdlPv 0xc0108089 0x13 load address 0x00108089
- .text._ZdlPv 0xc0108089 0x13 TaskManager/Process.class.o
- 0xc0108089 operator delete(void*)
+.text._ZN5wcharaSEj
+ 0xc010c85a 0x10 load address 0x0010c85a
+ .text._ZN5wcharaSEj
+ 0xc010c85a 0x10 DeviceManager/Kbd.ns.o
+ 0xc010c85a wchar::operator=(unsigned int)
+
+.text._ZN5wcharcvjEv
+ 0xc010c86a 0xa load address 0x0010c86a
+ .text._ZN5wcharcvjEv
+ 0xc010c86a 0xa DeviceManager/Kbd.ns.o
+ 0xc010c86a wchar::operator unsigned int()
+
+.text._ZN3Kbd10keypress_tC1Ev
+ 0xc010c874 0x33 load address 0x0010c874
+ .text._ZN3Kbd10keypress_tC1Ev
+ 0xc010c874 0x33 DeviceManager/Kbd.ns.o
+ 0xc010c874 Kbd::keypress_t::keypress_t()
+
+.text._ZdlPv 0xc010c8a7 0x13 load address 0x0010c8a7
+ .text._ZdlPv 0xc010c8a7 0x13 TaskManager/Process.class.o
+ 0xc010c8a7 operator delete(void*)
.text._ZN6VectorIP6ThreadEC1Ev
- 0xc010809c 0x18 load address 0x0010809c
+ 0xc010c8ba 0x18 load address 0x0010c8ba
.text._ZN6VectorIP6ThreadEC1Ev
- 0xc010809c 0x18 TaskManager/Process.class.o
- 0xc010809c Vector<Thread*>::Vector()
+ 0xc010c8ba 0x18 TaskManager/Process.class.o
+ 0xc010c8ba Vector<Thread*>::Vector()
.text._ZN6VectorIP6ThreadED1Ev
- 0xc01080b4 0x27 load address 0x001080b4
+ 0xc010c8d2 0x27 load address 0x0010c8d2
.text._ZN6VectorIP6ThreadED1Ev
- 0xc01080b4 0x27 TaskManager/Process.class.o
- 0xc01080b4 Vector<Thread*>::~Vector()
+ 0xc010c8d2 0x27 TaskManager/Process.class.o
+ 0xc010c8d2 Vector<Thread*>::~Vector()
.text._ZN6VectorIP6ThreadE5emptyEv
- 0xc01080dc 0x10 load address 0x001080dc
+ 0xc010c8fa 0x10 load address 0x0010c8fa
.text._ZN6VectorIP6ThreadE5emptyEv
- 0xc01080dc 0x10 TaskManager/Process.class.o
- 0xc01080dc Vector<Thread*>::empty()
+ 0xc010c8fa 0x10 TaskManager/Process.class.o
+ 0xc010c8fa Vector<Thread*>::empty()
.text._ZN6VectorIP6ThreadE4backEv
- 0xc01080ec 0x19 load address 0x001080ec
+ 0xc010c90a 0x19 load address 0x0010c90a
.text._ZN6VectorIP6ThreadE4backEv
- 0xc01080ec 0x19 TaskManager/Process.class.o
- 0xc01080ec Vector<Thread*>::back()
+ 0xc010c90a 0x19 TaskManager/Process.class.o
+ 0xc010c90a Vector<Thread*>::back()
.text._ZN6VectorIP6ThreadE3popEv
- 0xc0108106 0x6d load address 0x00108106
+ 0xc010c924 0x6d load address 0x0010c924
.text._ZN6VectorIP6ThreadE3popEv
- 0xc0108106 0x6d TaskManager/Process.class.o
- 0xc0108106 Vector<Thread*>::pop()
+ 0xc010c924 0x6d TaskManager/Process.class.o
+ 0xc010c924 Vector<Thread*>::pop()
.text._ZN6VectorIP6ThreadE4pushES1_
- 0xc0108174 0x91 load address 0x00108174
+ 0xc010c992 0x91 load address 0x0010c992
.text._ZN6VectorIP6ThreadE4pushES1_
- 0xc0108174 0x91 TaskManager/Process.class.o
- 0xc0108174 Vector<Thread*>::push(Thread*)
+ 0xc010c992 0x91 TaskManager/Process.class.o
+ 0xc010c992 Vector<Thread*>::push(Thread*)
.text._ZN6VectorIP6ThreadEixEj
- 0xc0108206 0x12 load address 0x00108206
+ 0xc010ca24 0x12 load address 0x0010ca24
.text._ZN6VectorIP6ThreadEixEj
- 0xc0108206 0x12 TaskManager/Process.class.o
- 0xc0108206 Vector<Thread*>::operator[](unsigned int)
+ 0xc010ca24 0x12 TaskManager/Process.class.o
+ 0xc010ca24 Vector<Thread*>::operator[](unsigned int)
.text._ZN6VectorIP6ThreadE4sizeEv
- 0xc0108218 0xb load address 0x00108218
+ 0xc010ca36 0xb load address 0x0010ca36
.text._ZN6VectorIP6ThreadE4sizeEv
- 0xc0108218 0xb TaskManager/Process.class.o
- 0xc0108218 Vector<Thread*>::size()
+ 0xc010ca36 0xb TaskManager/Process.class.o
+ 0xc010ca36 Vector<Thread*>::size()
.text._ZN6Thread10irqHappensEh
- 0xc0108224 0x38 load address 0x00108224
+ 0xc010ca42 0x38 load address 0x0010ca42
.text._ZN6Thread10irqHappensEh
- 0xc0108224 0x38 TaskManager/Task.ns.o
- 0xc0108224 Thread::irqHappens(unsigned char)
+ 0xc010ca42 0x38 TaskManager/Task.ns.o
+ 0xc010ca42 Thread::irqHappens(unsigned char)
.text._ZN6VectorIP7ProcessEC1Ev
- 0xc010825c 0x18 load address 0x0010825c
+ 0xc010ca7a 0x18 load address 0x0010ca7a
.text._ZN6VectorIP7ProcessEC1Ev
- 0xc010825c 0x18 TaskManager/Task.ns.o
- 0xc010825c Vector<Process*>::Vector()
+ 0xc010ca7a 0x18 TaskManager/Task.ns.o
+ 0xc010ca7a Vector<Process*>::Vector()
.text._ZN6VectorIP6ThreadE5clearEv
- 0xc0108274 0x3a load address 0x00108274
+ 0xc010ca92 0x3a load address 0x0010ca92
.text._ZN6VectorIP6ThreadE5clearEv
- 0xc0108274 0x3a TaskManager/Task.ns.o
- 0xc0108274 Vector<Thread*>::clear()
+ 0xc010ca92 0x3a TaskManager/Task.ns.o
+ 0xc010ca92 Vector<Thread*>::clear()
.text._ZN6VectorIP7ProcessE5clearEv
- 0xc01082ae 0x3a load address 0x001082ae
+ 0xc010cacc 0x3a load address 0x0010cacc
.text._ZN6VectorIP7ProcessE5clearEv
- 0xc01082ae 0x3a TaskManager/Task.ns.o
- 0xc01082ae Vector<Process*>::clear()
+ 0xc010cacc 0x3a TaskManager/Task.ns.o
+ 0xc010cacc Vector<Process*>::clear()
.text._ZN6VectorIP7ProcessE4sizeEv
- 0xc01082e8 0xb load address 0x001082e8
+ 0xc010cb06 0xb load address 0x0010cb06
.text._ZN6VectorIP7ProcessE4sizeEv
- 0xc01082e8 0xb TaskManager/Task.ns.o
- 0xc01082e8 Vector<Process*>::size()
+ 0xc010cb06 0xb TaskManager/Task.ns.o
+ 0xc010cb06 Vector<Process*>::size()
.text._ZN6VectorIP7ProcessEixEj
- 0xc01082f4 0x12 load address 0x001082f4
+ 0xc010cb12 0x12 load address 0x0010cb12
.text._ZN6VectorIP7ProcessEixEj
- 0xc01082f4 0x12 TaskManager/Task.ns.o
- 0xc01082f4 Vector<Process*>::operator[](unsigned int)
+ 0xc010cb12 0x12 TaskManager/Task.ns.o
+ 0xc010cb12 Vector<Process*>::operator[](unsigned int)
.text._ZN6VectorIP7ProcessE4pushES1_
- 0xc0108306 0x91 load address 0x00108306
+ 0xc010cb24 0x91 load address 0x0010cb24
.text._ZN6VectorIP7ProcessE4pushES1_
- 0xc0108306 0x91 TaskManager/Task.ns.o
- 0xc0108306 Vector<Process*>::push(Process*)
+ 0xc010cb24 0x91 TaskManager/Task.ns.o
+ 0xc010cb24 Vector<Process*>::push(Process*)
.text._ZN6VectorIP7ProcessE4backEv
- 0xc0108398 0x19 load address 0x00108398
+ 0xc010cbb6 0x19 load address 0x0010cbb6
.text._ZN6VectorIP7ProcessE4backEv
- 0xc0108398 0x19 TaskManager/Task.ns.o
- 0xc0108398 Vector<Process*>::back()
+ 0xc010cbb6 0x19 TaskManager/Task.ns.o
+ 0xc010cbb6 Vector<Process*>::back()
.text._ZN6VectorIP7ProcessE3popEv
- 0xc01083b2 0x6d load address 0x001083b2
+ 0xc010cbd0 0x6d load address 0x0010cbd0
.text._ZN6VectorIP7ProcessE3popEv
- 0xc01083b2 0x6d TaskManager/Task.ns.o
- 0xc01083b2 Vector<Process*>::pop()
+ 0xc010cbd0 0x6d TaskManager/Task.ns.o
+ 0xc010cbd0 Vector<Process*>::pop()
.text._ZN6VectorIP7ProcessE5emptyEv
- 0xc0108420 0x10 load address 0x00108420
+ 0xc010cc3e 0x10 load address 0x0010cc3e
.text._ZN6VectorIP7ProcessE5emptyEv
- 0xc0108420 0x10 TaskManager/Task.ns.o
- 0xc0108420 Vector<Process*>::empty()
+ 0xc010cc3e 0x10 TaskManager/Task.ns.o
+ 0xc010cc3e Vector<Process*>::empty()
.text._ZN6VectorIP7ProcessED1Ev
- 0xc0108430 0x27 load address 0x00108430
+ 0xc010cc4e 0x27 load address 0x0010cc4e
.text._ZN6VectorIP7ProcessED1Ev
- 0xc0108430 0x27 TaskManager/Task.ns.o
- 0xc0108430 Vector<Process*>::~Vector()
+ 0xc010cc4e 0x27 TaskManager/Task.ns.o
+ 0xc010cc4e Vector<Process*>::~Vector()
-.text._Znaj 0xc0108457 0x1b load address 0x00108457
- .text._Znaj 0xc0108457 0x1b VTManager/VirtualTerminal.class.o
- 0xc0108457 operator new[](unsigned int)
-
-.text._ZN5wcharaSEj
- 0xc0108472 0x10 load address 0x00108472
- .text._ZN5wcharaSEj
- 0xc0108472 0x10 VTManager/VirtualTerminal.class.o
- 0xc0108472 wchar::operator=(unsigned int)
+.text._Znaj 0xc010cc75 0x1b load address 0x0010cc75
+ .text._Znaj 0xc010cc75 0x1b VTManager/VirtualTerminal.class.o
+ 0xc010cc75 operator new[](unsigned int)
.text._ZN3chrC1Ev
- 0xc0108482 0x16 load address 0x00108482
+ 0xc010cc90 0x16 load address 0x0010cc90
.text._ZN3chrC1Ev
- 0xc0108482 0x16 VTManager/VirtualTerminal.class.o
- 0xc0108482 chr::chr()
+ 0xc010cc90 0x16 VTManager/VirtualTerminal.class.o
+ 0xc010cc90 chr::chr()
+
+.text._ZN6VectorIN3Kbd10keypress_tEEC1Ev
+ 0xc010cca6 0x18 load address 0x0010cca6
+ .text._ZN6VectorIN3Kbd10keypress_tEEC1Ev
+ 0xc010cca6 0x18 VTManager/VirtualTerminal.class.o
+ 0xc010cca6 Vector<Kbd::keypress_t>::Vector()
+
+.text._ZN6VectorIN3Kbd10keypress_tEED1Ev
+ 0xc010ccbe 0x27 load address 0x0010ccbe
+ .text._ZN6VectorIN3Kbd10keypress_tEED1Ev
+ 0xc010ccbe 0x27 VTManager/VirtualTerminal.class.o
+ 0xc010ccbe Vector<Kbd::keypress_t>::~Vector()
+
+.text._ZN6VectorIN3Kbd10keypress_tEE4pushES1_
+ 0xc010cce6 0x99 load address 0x0010cce6
+ .text._ZN6VectorIN3Kbd10keypress_tEE4pushES1_
+ 0xc010cce6 0x99 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cce6 Vector<Kbd::keypress_t>::push(Kbd::keypress_t)
+
+.text._ZN6VectorIN3Kbd10keypress_tEE5emptyEv
+ 0xc010cd80 0x10 load address 0x0010cd80
+ .text._ZN6VectorIN3Kbd10keypress_tEE5emptyEv
+ 0xc010cd80 0x10 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cd80 Vector<Kbd::keypress_t>::empty()
+
+.text._ZN6VectorIN3Kbd10keypress_tEEixEj
+ 0xc010cd90 0x12 load address 0x0010cd90
+ .text._ZN6VectorIN3Kbd10keypress_tEEixEj
+ 0xc010cd90 0x12 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cd90 Vector<Kbd::keypress_t>::operator[](unsigned int)
+
+.text._ZN6VectorIN3Kbd10keypress_tEE4sizeEv
+ 0xc010cda2 0xb load address 0x0010cda2
+ .text._ZN6VectorIN3Kbd10keypress_tEE4sizeEv
+ 0xc010cda2 0xb VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cda2 Vector<Kbd::keypress_t>::size()
+
+.text._ZN3Kbd10keypress_tD1Ev
+ 0xc010cdae 0x5 load address 0x0010cdae
+ .text._ZN3Kbd10keypress_tD1Ev
+ 0xc010cdae 0x5 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cdae Kbd::keypress_t::~keypress_t()
+
+.text._ZN6VectorIN3Kbd10keypress_tEE3popEv
+ 0xc010cdb4 0x86 load address 0x0010cdb4
+ .text._ZN6VectorIN3Kbd10keypress_tEE3popEv
+ 0xc010cdb4 0x86 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010cdb4 Vector<Kbd::keypress_t>::pop()
.text._ZN6VectorIP15VirtualTerminalEC1Ev
- 0xc0108498 0x18 load address 0x00108498
+ 0xc010ce3a 0x18 load address 0x0010ce3a
.text._ZN6VectorIP15VirtualTerminalEC1Ev
- 0xc0108498 0x18 VTManager/VT.ns.o
- 0xc0108498 Vector<VirtualTerminal*>::Vector()
+ 0xc010ce3a 0x18 VTManager/VT.ns.o
+ 0xc010ce3a Vector<VirtualTerminal*>::Vector()
.text._ZN6VectorIP15VirtualTerminalE4pushES1_
- 0xc01084b0 0x91 load address 0x001084b0
+ 0xc010ce52 0x91 load address 0x0010ce52
.text._ZN6VectorIP15VirtualTerminalE4pushES1_
- 0xc01084b0 0x91 VTManager/VT.ns.o
- 0xc01084b0 Vector<VirtualTerminal*>::push(VirtualTerminal*)
+ 0xc010ce52 0x91 VTManager/VT.ns.o
+ 0xc010ce52 Vector<VirtualTerminal*>::push(VirtualTerminal*)
.text._ZN6VectorIP15VirtualTerminalE4sizeEv
- 0xc0108542 0xb load address 0x00108542
+ 0xc010cee4 0xb load address 0x0010cee4
.text._ZN6VectorIP15VirtualTerminalE4sizeEv
- 0xc0108542 0xb VTManager/VT.ns.o
- 0xc0108542 Vector<VirtualTerminal*>::size()
+ 0xc010cee4 0xb VTManager/VT.ns.o
+ 0xc010cee4 Vector<VirtualTerminal*>::size()
.text._ZN6VectorIP15VirtualTerminalEixEj
- 0xc010854e 0x12 load address 0x0010854e
+ 0xc010cef0 0x12 load address 0x0010cef0
.text._ZN6VectorIP15VirtualTerminalEixEj
- 0xc010854e 0x12 VTManager/VT.ns.o
- 0xc010854e Vector<VirtualTerminal*>::operator[](unsigned int)
+ 0xc010cef0 0x12 VTManager/VT.ns.o
+ 0xc010cef0 Vector<VirtualTerminal*>::operator[](unsigned int)
.text._ZN6VectorIP15VirtualTerminalE4backEv
- 0xc0108560 0x19 load address 0x00108560
+ 0xc010cf02 0x19 load address 0x0010cf02
.text._ZN6VectorIP15VirtualTerminalE4backEv
- 0xc0108560 0x19 VTManager/VT.ns.o
- 0xc0108560 Vector<VirtualTerminal*>::back()
+ 0xc010cf02 0x19 VTManager/VT.ns.o
+ 0xc010cf02 Vector<VirtualTerminal*>::back()
.text._ZN6VectorIP15VirtualTerminalE3popEv
- 0xc010857a 0x6d load address 0x0010857a
+ 0xc010cf1c 0x6d load address 0x0010cf1c
.text._ZN6VectorIP15VirtualTerminalE3popEv
- 0xc010857a 0x6d VTManager/VT.ns.o
- 0xc010857a Vector<VirtualTerminal*>::pop()
+ 0xc010cf1c 0x6d VTManager/VT.ns.o
+ 0xc010cf1c Vector<VirtualTerminal*>::pop()
.text._ZN6VectorIP15VirtualTerminalED1Ev
- 0xc01085e8 0x27 load address 0x001085e8
+ 0xc010cf8a 0x27 load address 0x0010cf8a
.text._ZN6VectorIP15VirtualTerminalED1Ev
- 0xc01085e8 0x27 VTManager/VT.ns.o
- 0xc01085e8 Vector<VirtualTerminal*>::~Vector()
+ 0xc010cf8a 0x27 VTManager/VT.ns.o
+ 0xc010cf8a Vector<VirtualTerminal*>::~Vector()
.text._ZN5wchareqEj
- 0xc0108610 0x10 load address 0x00108610
+ 0xc010cfb2 0x10 load address 0x0010cfb2
.text._ZN5wchareqEj
- 0xc0108610 0x10 Library/String.class.o
- 0xc0108610 wchar::operator==(unsigned int)
-
-.text._ZN5wcharcvjEv
- 0xc0108620 0xa load address 0x00108620
- .text._ZN5wcharcvjEv
- 0xc0108620 0xa Library/String.class.o
- 0xc0108620 wchar::operator unsigned int()
+ 0xc010cfb2 0x10 Library/String.class.o
+ 0xc010cfb2 wchar::operator==(unsigned int)
.text._ZN6VectorI6StringEC1Ev
- 0xc010862a 0x18 load address 0x0010862a
+ 0xc010cfc2 0x18 load address 0x0010cfc2
.text._ZN6VectorI6StringEC1Ev
- 0xc010862a 0x18 Library/String.class.o
- 0xc010862a Vector<String>::Vector()
+ 0xc010cfc2 0x18 Library/String.class.o
+ 0xc010cfc2 Vector<String>::Vector()
.text._ZN6VectorI6StringE4pushES0_
- 0xc0108642 0x9b load address 0x00108642
+ 0xc010cfda 0x9b load address 0x0010cfda
.text._ZN6VectorI6StringE4pushES0_
- 0xc0108642 0x9b Library/String.class.o
- 0xc0108642 Vector<String>::push(String)
+ 0xc010cfda 0x9b Library/String.class.o
+ 0xc010cfda Vector<String>::push(String)
.text._ZN6VectorI6StringE4backEv
- 0xc01086de 0x19 load address 0x001086de
+ 0xc010d076 0x19 load address 0x0010d076
.text._ZN6VectorI6StringE4backEv
- 0xc01086de 0x19 Library/String.class.o
- 0xc01086de Vector<String>::back()
+ 0xc010d076 0x19 Library/String.class.o
+ 0xc010d076 Vector<String>::back()
+
+.text._ZN8KeyboardC2Ev
+ 0xc010d090 0x1c load address 0x0010d090
+ .text._ZN8KeyboardC2Ev
+ 0xc010d090 0x1c Devices/Keyboard/PS2Keyboard.class.o
+ 0xc010d090 Keyboard::Keyboard()
-.rodata 0xc0109000 0x8f3 load address 0x00109000
+.rodata 0xc010e000 0xb36 load address 0x0010e000
*(.rodata)
- .rodata 0xc0109000 0x379 Core/kmain.wtf.o
- .rodata 0xc0109379 0x4f Core/Sys.ns.o
- .rodata 0xc01093c8 0x5c MemoryManager/PhysMem.ns.o
- .rodata 0xc0109424 0x6f MemoryManager/PageAlloc.ns.o
- .rodata 0xc0109493 0x3 VTManager/VirtualTerminal.class.o
- .rodata 0xc0109496 0x5 Library/String.class.o
- .rodata 0xc010949b 0x1be Library/wchar.class.o
- *fill* 0xc0109659 0x7 00
- .rodata 0xc0109660 0x240 SyscallManager/IDT.ns.o
- .rodata 0xc01098a0 0x30 Devices/Display/VGATextOutput.class.o
- .rodata 0xc01098d0 0x23 Devices/Timer.class.o
+ .rodata 0xc010e000 0x57d Core/kmain.wtf.o
+ .rodata 0xc010e57d 0x4f Core/Sys.ns.o
+ .rodata 0xc010e5cc 0x5c MemoryManager/PhysMem.ns.o
+ .rodata 0xc010e628 0x6f MemoryManager/PageAlloc.ns.o
+ .rodata 0xc010e697 0x9 DeviceManager/Kbd.ns.o
+ .rodata 0xc010e6a0 0x3 VTManager/VirtualTerminal.class.o
+ .rodata 0xc010e6a3 0x9 VTManager/VirtualTerminal-kbd.class.o
+ .rodata 0xc010e6ac 0x5 Library/String.class.o
+ .rodata 0xc010e6b1 0x1be Library/wchar.class.o
+ *fill* 0xc010e86f 0x11 00
+ .rodata 0xc010e880 0x240 SyscallManager/IDT.ns.o
+ .rodata 0xc010eac0 0x30 Devices/Display/VGATextOutput.class.o
+ .rodata 0xc010eaf0 0x23 Devices/Keyboard/PS2Keyboard.class.o
+ .rodata 0xc010eb13 0x23 Devices/Timer.class.o
.rodata._ZTV7Display
- 0xc0109900 0x28 load address 0x00109900
+ 0xc010eb40 0x28 load address 0x0010eb40
.rodata._ZTV7Display
- 0xc0109900 0x28 Core/kmain.wtf.o
- 0xc0109900 vtable for Display
+ 0xc010eb40 0x28 Core/kmain.wtf.o
+ 0xc010eb40 vtable for Display
.rodata._ZTV6Device
- 0xc0109928 0x14 load address 0x00109928
+ 0xc010eb68 0x14 load address 0x0010eb68
.rodata._ZTV6Device
- 0xc0109928 0x14 Core/kmain.wtf.o
- 0xc0109928 vtable for Device
+ 0xc010eb68 0x14 Core/kmain.wtf.o
+ 0xc010eb68 vtable for Device
.rodata._ZTV13VGATextOutput
- 0xc0109940 0x28 load address 0x00109940
+ 0xc010eb80 0x28 load address 0x0010eb80
.rodata._ZTV13VGATextOutput
- 0xc0109940 0x28 Devices/Display/VGATextOutput.class.o
- 0xc0109940 vtable for VGATextOutput
+ 0xc010eb80 0x28 Devices/Display/VGATextOutput.class.o
+ 0xc010eb80 vtable for VGATextOutput
+
+.rodata._ZTV11PS2Keyboard
+ 0xc010eba8 0x18 load address 0x0010eba8
+ .rodata._ZTV11PS2Keyboard
+ 0xc010eba8 0x18 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc010eba8 vtable for PS2Keyboard
+
+.rodata._ZTV8Keyboard
+ 0xc010ebc0 0x18 load address 0x0010ebc0
+ .rodata._ZTV8Keyboard
+ 0xc010ebc0 0x18 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc010ebc0 vtable for Keyboard
.rodata._ZTV5Timer
- 0xc0109968 0x14 load address 0x00109968
+ 0xc010ebd8 0x14 load address 0x0010ebd8
.rodata._ZTV5Timer
- 0xc0109968 0x14 Devices/Timer.class.o
- 0xc0109968 vtable for Timer
+ 0xc010ebd8 0x14 Devices/Timer.class.o
+ 0xc010ebd8 vtable for Timer
-.rel.dyn 0xc010997c 0x0 load address 0x0010997c
- .rel.text 0x00000000 0x0 Core/kmain.wtf.o
+.rel.dyn 0xc010ebec 0x0 load address 0x0010ebec
+ .rel.text 0x00000000 0x0 Core/loader.wtf.o
.rel.text._Znwj
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN15VirtualTerminallsE6String
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN15VirtualTerminallsEi
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN15VirtualTerminallsEj
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6DeviceC2Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN7DisplayC2Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN13VGATextOutputC1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.rodata._ZTV7Display
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.rodata._ZTV6Device
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6DeviceE4pushES1_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6DeviceEC1ERKS2_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6DeviceED1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.text._ZN3Kbd10keypress_tC1Ev
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6ThreadED1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6ThreadE4pushES1_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP6ThreadE5clearEv
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP7ProcessE5clearEv
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP7ProcessE4pushES1_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP7ProcessED1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN3chrC1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.text._ZN6VectorIN3Kbd10keypress_tEED1Ev
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.text._ZN6VectorIN3Kbd10keypress_tEE4pushES1_
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.text._ZN6VectorIN3Kbd10keypress_tEE3popEv
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP15VirtualTerminalE4pushES1_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorIP15VirtualTerminalED1Ev
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.text._ZN6VectorI6StringE4pushES0_
- 0x00000000 0x0 Core/kmain.wtf.o
+ 0x00000000 0x0 Core/loader.wtf.o
.rel.rodata._ZTV13VGATextOutput
- 0x00000000 0x0 Core/kmain.wtf.o
-
-.data 0xc010a000 0x38 load address 0x0010a000
- 0xc010a000 start_ctors = .
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.text._ZN8KeyboardC2Ev
+ 0x00000000 0x0 Core/loader.wtf.o
+ .rel.rodata._ZTV8Keyboard
+ 0x00000000 0x0 Core/loader.wtf.o
+
+.data 0xc010f000 0x144 load address 0x0010f000
+ 0xc010f000 start_ctors = .
*(.ctor*)
- .ctors 0xc010a000 0x4 DeviceManager/Dev.ns.o
- .ctors 0xc010a004 0x4 TaskManager/Task.ns.o
- .ctors 0xc010a008 0x4 VTManager/VT.ns.o
- .ctors 0xc010a00c 0x4 Library/wchar.class.o
- 0xc010a010 end_ctors = .
- 0xc010a010 start_dtors = .
+ .ctors 0xc010f000 0x4 Core/kmain.wtf.o
+ .ctors 0xc010f004 0x4 DeviceManager/Dev.ns.o
+ .ctors 0xc010f008 0x4 TaskManager/Task.ns.o
+ .ctors 0xc010f00c 0x4 VTManager/VT.ns.o
+ .ctors 0xc010f010 0x4 Library/wchar.class.o
+ 0xc010f014 end_ctors = .
+ 0xc010f014 start_dtors = .
*(.dtor*)
- 0xc010a010 end_dtors = .
+ 0xc010f014 end_dtors = .
*(.data)
- .data 0xc010a010 0x24 Core/kmain.wtf.o
- 0xc010a030 melonLogoCols
- 0xc010a010 melonLogo
- 0xc010a02c melonLogoLines
- .data 0xc010a034 0x0 Core/cppsupport.wtf.o
- .data 0xc010a034 0x0 Core/Sys.ns.o
- .data 0xc010a034 0x0 Core/CMem.ns.o
- .data 0xc010a034 0x0 MemoryManager/Mem.ns.o
- .data 0xc010a034 0x0 MemoryManager/PhysMem.ns.o
- .data 0xc010a034 0x0 MemoryManager/GDT.ns.o
- .data 0xc010a034 0x0 MemoryManager/PageDirectory.class.o
- .data 0xc010a034 0x0 MemoryManager/PageAlloc.ns.o
- .data 0xc010a034 0x0 DeviceManager/Disp.ns.o
- .data 0xc010a034 0x0 DeviceManager/Dev.ns.o
- .data 0xc010a034 0x0 DeviceManager/Time.ns.o
- .data 0xc010a034 0x0 TaskManager/Process.class.o
- .data 0xc010a034 0x0 TaskManager/Thread.class.o
- .data 0xc010a034 0x4 TaskManager/Task.ns.o
- 0xc010a034 Task::nextpid
- .data 0xc010a038 0x0 VTManager/VirtualTerminal.class.o
- .data 0xc010a038 0x0 VTManager/VT.ns.o
- .data 0xc010a038 0x0 Library/Bitset.class.o
- .data 0xc010a038 0x0 Library/String.class.o
- .data 0xc010a038 0x0 Library/wchar.class.o
- .data 0xc010a038 0x0 SyscallManager/IDT.ns.o
- .data 0xc010a038 0x0 Devices/Display/VGATextOutput.class.o
- .data 0xc010a038 0x0 Devices/Timer.class.o
-
-.bss 0xc010a040 0x4b48 load address 0x0010a040
- 0xc010a040 sbss = .
+ .data 0xc010f014 0x24 Core/kmain.wtf.o
+ 0xc010f034 melonLogoCols
+ 0xc010f014 melonLogo
+ 0xc010f030 melonLogoLines
+ .data 0xc010f038 0x0 Core/cppsupport.wtf.o
+ .data 0xc010f038 0x0 Core/Sys.ns.o
+ .data 0xc010f038 0x0 Core/CMem.ns.o
+ .data 0xc010f038 0x0 MemoryManager/Mem.ns.o
+ .data 0xc010f038 0x0 MemoryManager/PhysMem.ns.o
+ .data 0xc010f038 0x0 MemoryManager/GDT.ns.o
+ .data 0xc010f038 0x0 MemoryManager/PageDirectory.class.o
+ .data 0xc010f038 0x0 MemoryManager/PageAlloc.ns.o
+ .data 0xc010f038 0x0 DeviceManager/Disp.ns.o
+ .data 0xc010f038 0x0 DeviceManager/Dev.ns.o
+ .data 0xc010f038 0x0 DeviceManager/Time.ns.o
+ *fill* 0xc010f038 0x8 00
+ .data 0xc010f040 0x100 DeviceManager/Kbd.ns.o
+ 0xc010f040 Kbd::ctrlkeys
+ .data 0xc010f140 0x0 TaskManager/Process.class.o
+ .data 0xc010f140 0x0 TaskManager/Thread.class.o
+ .data 0xc010f140 0x4 TaskManager/Task.ns.o
+ 0xc010f140 Task::nextpid
+ .data 0xc010f144 0x0 TaskManager/Mutex.class.o
+ .data 0xc010f144 0x0 VTManager/VirtualTerminal.class.o
+ .data 0xc010f144 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .data 0xc010f144 0x0 VTManager/VT.ns.o
+ .data 0xc010f144 0x0 Library/Bitset.class.o
+ .data 0xc010f144 0x0 Library/String.class.o
+ .data 0xc010f144 0x0 Library/wchar.class.o
+ .data 0xc010f144 0x0 SyscallManager/IDT.ns.o
+ .data 0xc010f144 0x0 Devices/Display/VGATextOutput.class.o
+ .data 0xc010f144 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .data 0xc010f144 0x0 Devices/Timer.class.o
+
+.bss 0xc010f160 0x5368 load address 0x0010f160
+ 0xc010f160 sbss = .
*(COMMON)
*(.bss)
- .bss 0xc010a040 0x0 Core/kmain.wtf.o
- .bss 0xc010a040 0x4000 Core/loader.wtf.o
- .bss 0xc010e040 0x4 Core/cppsupport.wtf.o
- 0xc010e040 __dso_handle
- .bss 0xc010e044 0x0 Core/Sys.ns.o
- .bss 0xc010e044 0x0 Core/CMem.ns.o
- .bss 0xc010e044 0x1c MemoryManager/Mem.ns.o
- 0xc010e058 Mem::heapStart
- 0xc010e045 Mem::pagingEnabled
- 0xc010e04c Mem::kheapFree
- 0xc010e05c Mem::heapEnd
- 0xc010e044 Mem::kheapUsable
- 0xc010e048 Mem::placementAddress
- 0xc010e050 Mem::heapIndex
- .bss 0xc010e060 0xc MemoryManager/PhysMem.ns.o
- 0xc010e060 kernelPageDirectory
- 0xc010e068 PhysMem::frames
- 0xc010e064 PhysMem::nframes
- *fill* 0xc010e06c 0x14 00
- .bss 0xc010e080 0x2e MemoryManager/GDT.ns.o
- 0xc010e0a8 GDT::gdt_ptr
- 0xc010e080 GDT::gdt_entries
- *fill* 0xc010e0ae 0x2 00
- .bss 0xc010e0b0 0x0 MemoryManager/PageDirectory.class.o
- .bss 0xc010e0b0 0x12 MemoryManager/PageAlloc.ns.o
- 0xc010e0c0 PageAlloc::usable
- 0xc010e0b0 PageAlloc::freePage
- 0xc010e0bc PageAlloc::freec
- 0xc010e0c1 PageAlloc::locked
- *fill* 0xc010e0c2 0x2 00
- .bss 0xc010e0c4 0xc DeviceManager/Disp.ns.o
- 0xc010e0c4 Disp::mode
- *fill* 0xc010e0d0 0x10 00
- .bss 0xc010e0e0 0x60 DeviceManager/Dev.ns.o
- 0xc010e0e0 Dev::devices
- 0xc010e100 Dev::irqHandler
- .bss 0xc010e140 0x4 DeviceManager/Time.ns.o
- 0xc010e140 Time::timer
- .bss 0xc010e144 0x0 TaskManager/Process.class.o
- .bss 0xc010e144 0x0 TaskManager/Thread.class.o
- .bss 0xc010e144 0x20 TaskManager/Task.ns.o
- 0xc010e144 Task::processes
- 0xc010e154 Task::currentThread
- 0xc010e15c Task::idleThread
- 0xc010e160 Task::currentThreadId
- 0xc010e14c Task::threads
- 0xc010e158 Task::currentProcess
- .bss 0xc010e164 0x0 VTManager/VirtualTerminal.class.o
- .bss 0xc010e164 0x8 VTManager/VT.ns.o
- 0xc010e164 VT::mappedVTs
- .bss 0xc010e16c 0x0 Library/Bitset.class.o
- .bss 0xc010e16c 0x0 Library/String.class.o
- *fill* 0xc010e16c 0x14 00
- .bss 0xc010e180 0x200 Library/wchar.class.o
- 0xc010e180 wchar::CP437
- .bss 0xc010e380 0x806 SyscallManager/IDT.ns.o
- 0xc010e380 IDT::idt_entries
- 0xc010eb80 IDT::idt_ptr
- *fill* 0xc010eb86 0x2 00
- .bss 0xc010eb88 0x0 Devices/Display/VGATextOutput.class.o
- .bss 0xc010eb88 0x0 Devices/Timer.class.o
- 0xc010eb88 ebss = .
- 0xc010eb88 end = .
- 0xc010eb88 _end = .
- 0xc010eb88 __end = .
-LOAD Core/kmain.wtf.o
+ .bss 0xc010f160 0x4000 Core/loader.wtf.o
+ .bss 0xc0113160 0x800 Core/kmain.wtf.o
+ 0xc0113760 keymapFR_shiftaltgr
+ 0xc0113160 keymapFR_normal
+ 0xc0113560 keymapFR_altgr
+ 0xc0113360 keymapFR_shift
+ .bss 0xc0113960 0x4 Core/cppsupport.wtf.o
+ 0xc0113960 __dso_handle
+ .bss 0xc0113964 0x0 Core/Sys.ns.o
+ .bss 0xc0113964 0x0 Core/CMem.ns.o
+ .bss 0xc0113964 0x1c MemoryManager/Mem.ns.o
+ 0xc0113978 Mem::heapStart
+ 0xc0113965 Mem::pagingEnabled
+ 0xc011396c Mem::kheapFree
+ 0xc011397c Mem::heapEnd
+ 0xc0113964 Mem::kheapUsable
+ 0xc0113968 Mem::placementAddress
+ 0xc0113970 Mem::heapIndex
+ .bss 0xc0113980 0xc MemoryManager/PhysMem.ns.o
+ 0xc0113980 kernelPageDirectory
+ 0xc0113988 PhysMem::frames
+ 0xc0113984 PhysMem::nframes
+ *fill* 0xc011398c 0x14 00
+ .bss 0xc01139a0 0x2e MemoryManager/GDT.ns.o
+ 0xc01139c8 GDT::gdt_ptr
+ 0xc01139a0 GDT::gdt_entries
+ *fill* 0xc01139ce 0x2 00
+ .bss 0xc01139d0 0x0 MemoryManager/PageDirectory.class.o
+ .bss 0xc01139d0 0x12 MemoryManager/PageAlloc.ns.o
+ 0xc01139e0 PageAlloc::usable
+ 0xc01139d0 PageAlloc::freePage
+ 0xc01139dc PageAlloc::freec
+ 0xc01139e1 PageAlloc::locked
+ *fill* 0xc01139e2 0x2 00
+ .bss 0xc01139e4 0xc DeviceManager/Disp.ns.o
+ 0xc01139e4 Disp::mode
+ *fill* 0xc01139f0 0x10 00
+ .bss 0xc0113a00 0x60 DeviceManager/Dev.ns.o
+ 0xc0113a00 Dev::devices
+ 0xc0113a20 Dev::irqHandler
+ .bss 0xc0113a60 0x4 DeviceManager/Time.ns.o
+ 0xc0113a60 Time::timer
+ .bss 0xc0113a64 0x18 DeviceManager/Kbd.ns.o
+ 0xc0113a6c Kbd::keymapAltgr
+ 0xc0113a74 Kbd::kbdstatus
+ 0xc0113a78 Kbd::focusedVT
+ 0xc0113a68 Kbd::keymapShift
+ 0xc0113a64 Kbd::keymapNormal
+ 0xc0113a70 Kbd::keymapShiftAltgr
+ .bss 0xc0113a7c 0x0 TaskManager/Process.class.o
+ .bss 0xc0113a7c 0x0 TaskManager/Thread.class.o
+ .bss 0xc0113a7c 0x20 TaskManager/Task.ns.o
+ 0xc0113a7c Task::processes
+ 0xc0113a8c Task::currentThread
+ 0xc0113a94 Task::idleThread
+ 0xc0113a98 Task::currentThreadId
+ 0xc0113a84 Task::threads
+ 0xc0113a90 Task::currentProcess
+ .bss 0xc0113a9c 0x0 TaskManager/Mutex.class.o
+ .bss 0xc0113a9c 0x0 VTManager/VirtualTerminal.class.o
+ .bss 0xc0113a9c 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .bss 0xc0113a9c 0x8 VTManager/VT.ns.o
+ 0xc0113a9c VT::mappedVTs
+ .bss 0xc0113aa4 0x0 Library/Bitset.class.o
+ .bss 0xc0113aa4 0x0 Library/String.class.o
+ *fill* 0xc0113aa4 0x1c 00
+ .bss 0xc0113ac0 0x200 Library/wchar.class.o
+ 0xc0113ac0 wchar::CP437
+ .bss 0xc0113cc0 0x806 SyscallManager/IDT.ns.o
+ 0xc0113cc0 IDT::idt_entries
+ 0xc01144c0 IDT::idt_ptr
+ *fill* 0xc01144c6 0x2 00
+ .bss 0xc01144c8 0x0 Devices/Display/VGATextOutput.class.o
+ .bss 0xc01144c8 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .bss 0xc01144c8 0x0 Devices/Timer.class.o
+ 0xc01144c8 ebss = .
+ 0xc01144c8 end = .
+ 0xc01144c8 _end = .
+ 0xc01144c8 __end = .
LOAD Core/loader.wtf.o
+LOAD Core/kmain.wtf.o
LOAD Core/cppsupport.wtf.o
LOAD Core/Sys.ns.o
LOAD Core/CMem.ns.o
@@ -983,11 +1164,14 @@ LOAD MemoryManager/PageAlloc.ns.o
LOAD DeviceManager/Disp.ns.o
LOAD DeviceManager/Dev.ns.o
LOAD DeviceManager/Time.ns.o
+LOAD DeviceManager/Kbd.ns.o
LOAD TaskManager/Process.class.o
LOAD TaskManager/Thread.class.o
LOAD TaskManager/Task.ns.o
LOAD TaskManager/Task.wtf.o
+LOAD TaskManager/Mutex.class.o
LOAD VTManager/VirtualTerminal.class.o
+LOAD VTManager/VirtualTerminal-kbd.class.o
LOAD VTManager/VT.ns.o
LOAD Library/Bitset.class.o
LOAD Library/String.class.o
@@ -995,12 +1179,13 @@ LOAD Library/wchar.class.o
LOAD SyscallManager/IDT.ns.o
LOAD SyscallManager/IDT.wtf.o
LOAD Devices/Display/VGATextOutput.class.o
+LOAD Devices/Keyboard/PS2Keyboard.class.o
LOAD Devices/Timer.class.o
OUTPUT(Melon.ke elf32-i386)
-.comment 0x00000000 0x21a
- .comment 0x00000000 0x12 Core/kmain.wtf.o
- .comment 0x00000012 0x1f Core/loader.wtf.o
+.comment 0x00000000 0x262
+ .comment 0x00000000 0x1f Core/loader.wtf.o
+ .comment 0x0000001f 0x12 Core/kmain.wtf.o
.comment 0x00000031 0x12 Core/cppsupport.wtf.o
.comment 0x00000043 0x12 Core/Sys.ns.o
.comment 0x00000055 0x12 Core/CMem.ns.o
@@ -1013,19 +1198,23 @@ OUTPUT(Melon.ke elf32-i386)
.comment 0x000000e0 0x12 DeviceManager/Disp.ns.o
.comment 0x000000f2 0x12 DeviceManager/Dev.ns.o
.comment 0x00000104 0x12 DeviceManager/Time.ns.o
- .comment 0x00000116 0x12 TaskManager/Process.class.o
- .comment 0x00000128 0x12 TaskManager/Thread.class.o
- .comment 0x0000013a 0x12 TaskManager/Task.ns.o
- .comment 0x0000014c 0x1f TaskManager/Task.wtf.o
- .comment 0x0000016b 0x12 VTManager/VirtualTerminal.class.o
- .comment 0x0000017d 0x12 VTManager/VT.ns.o
- .comment 0x0000018f 0x12 Library/Bitset.class.o
- .comment 0x000001a1 0x12 Library/String.class.o
- .comment 0x000001b3 0x12 Library/wchar.class.o
- .comment 0x000001c5 0x12 SyscallManager/IDT.ns.o
- .comment 0x000001d7 0x1f SyscallManager/IDT.wtf.o
- .comment 0x000001f6 0x12 Devices/Display/VGATextOutput.class.o
- .comment 0x00000208 0x12 Devices/Timer.class.o
+ .comment 0x00000116 0x12 DeviceManager/Kbd.ns.o
+ .comment 0x00000128 0x12 TaskManager/Process.class.o
+ .comment 0x0000013a 0x12 TaskManager/Thread.class.o
+ .comment 0x0000014c 0x12 TaskManager/Task.ns.o
+ .comment 0x0000015e 0x1f TaskManager/Task.wtf.o
+ .comment 0x0000017d 0x12 TaskManager/Mutex.class.o
+ .comment 0x0000018f 0x12 VTManager/VirtualTerminal.class.o
+ .comment 0x000001a1 0x12 VTManager/VirtualTerminal-kbd.class.o
+ .comment 0x000001b3 0x12 VTManager/VT.ns.o
+ .comment 0x000001c5 0x12 Library/Bitset.class.o
+ .comment 0x000001d7 0x12 Library/String.class.o
+ .comment 0x000001e9 0x12 Library/wchar.class.o
+ .comment 0x000001fb 0x12 SyscallManager/IDT.ns.o
+ .comment 0x0000020d 0x1f SyscallManager/IDT.wtf.o
+ .comment 0x0000022c 0x12 Devices/Display/VGATextOutput.class.o
+ .comment 0x0000023e 0x12 Devices/Keyboard/PS2Keyboard.class.o
+ .comment 0x00000250 0x12 Devices/Timer.class.o
.note.GNU-stack
0x00000000 0x0
@@ -1054,14 +1243,20 @@ OUTPUT(Melon.ke elf32-i386)
.note.GNU-stack
0x00000000 0x0 DeviceManager/Time.ns.o
.note.GNU-stack
+ 0x00000000 0x0 DeviceManager/Kbd.ns.o
+ .note.GNU-stack
0x00000000 0x0 TaskManager/Process.class.o
.note.GNU-stack
0x00000000 0x0 TaskManager/Thread.class.o
.note.GNU-stack
0x00000000 0x0 TaskManager/Task.ns.o
.note.GNU-stack
+ 0x00000000 0x0 TaskManager/Mutex.class.o
+ .note.GNU-stack
0x00000000 0x0 VTManager/VirtualTerminal.class.o
.note.GNU-stack
+ 0x00000000 0x0 VTManager/VirtualTerminal-kbd.class.o
+ .note.GNU-stack
0x00000000 0x0 VTManager/VT.ns.o
.note.GNU-stack
0x00000000 0x0 Library/Bitset.class.o
@@ -1074,4 +1269,6 @@ OUTPUT(Melon.ke elf32-i386)
.note.GNU-stack
0x00000000 0x0 Devices/Display/VGATextOutput.class.o
.note.GNU-stack
+ 0x00000000 0x0 Devices/Keyboard/PS2Keyboard.class.o
+ .note.GNU-stack
0x00000000 0x0 Devices/Timer.class.o
diff --git a/Source/Kernel/Melon.ke b/Source/Kernel/Melon.ke
index 600b3ac..24c46d5 100755
--- a/Source/Kernel/Melon.ke
+++ b/Source/Kernel/Melon.ke
Binary files differ
diff --git a/Source/Kernel/Ressources/keymap-fr.wtf.c b/Source/Kernel/Ressources/keymap-fr.wtf.c
new file mode 100644
index 0000000..da22dfb
--- /dev/null
+++ b/Source/Kernel/Ressources/keymap-fr.wtf.c
@@ -0,0 +1,45 @@
+//This file is precious !!! Very precious !!
+
+wchar keymapFR_normal[128] = {
+/* 0x00 */ "", "", "&", "é", "\"", "'", "(", "-", "è", "_", "ç", "à", ")", "=", "", "",
+/* 0x10 */ "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "^", "$", "", "", "q", "s",
+/* 0x20 */ "d", "f", "g", "h", "j", "k", "l", "m", "ù", "²", "", "*", "w", "x", "c", "v",
+/* 0x30 */ "b", "n", ",", ";", ":", "!", "", "*", "", " ", "", "", "", "", "", "",
+/* 0x40 */ "", "", "", "", "", "", "", "", "", "", "-", "", "", "", "+", "",
+/* 0x50 */ "", "", "", "", "", "", "<", "", "", "", "", "", "", "", "", "",
+/* 0x60 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+/* 0x70 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
+};
+
+wchar keymapFR_shift[128] = {
+/* 0x00 */ "", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "°", "+", "", "",
+/* 0x10 */ "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "¨", "£", "", "", "Q", "S",
+/* 0x20 */ "D", "F", "G", "H", "J", "K", "L", "M", "%", "~", "", "µ", "W", "X", "C", "V",
+/* 0x30 */ "B", "N", "?", ".", "/", "§", "", "*", "", " ", "", "", "", "", "", "",
+/* 0x40 */ "", "", "", "", "", "", "", "", "", "", "-", "", "", "", "+", "",
+/* 0x50 */ "", "", "", "", "", "", ">", "", "", "", "", "", "", "", "", "",
+/* 0x60 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+/* 0x70 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+};
+
+wchar keymapFR_altgr[128] = {
+/* 0x00 */ "", "", "¹", "~", "#", "{", "[", "|", "`", "\\", "^", "@", "]", "}", "", "",
+/* 0x10 */ "æ", "«", "€", "¶", "ŧ", "←", "↓", "→", "ø", "þ", "¨", "¤", "", "", "@", "ß",
+/* 0x20 */ "ð", "đ", "ŋ", "ħ", "j", "ĸ", "ł", "µ", "^", "¬", "", "`", "ł", "»", "¢", "“",
+/* 0x30 */ "”", "n", "´", ";", "·", "!", "", "*", "", " ", "", "", "", "", "", "",
+/* 0x40 */ "", "", "", "", "", "", "", "", "", "", "-", "", "", "", "+", "",
+/* 0x50 */ "", "", "", "", "", "", "|", "", "", "", "", "", "", "", "", "",
+/* 0x60 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+/* 0x70 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+};
+
+wchar keymapFR_shiftaltgr[128] = { //TODO
+/* 0x00 */ "", "", "¡", "⅛", "£", "$", "⅜", "⅝", "⅞", "™", "±", "°", "¿", "˛", "", "",
+/* 0x10 */ "Æ", "<", "¢", "®", "Ŧ", "¥", "↑", "ı", "Ø", "Þ", "°", "¯", "", "", "Ω", "§",
+/* 0x20 */ "Ð", "ª", "Ŋ", "Ħ", "J", "&", "Ł", "º", "ˇ", "¬", "", "˘", "Ł", ">", "©", "‘",
+/* 0x30 */ "’", "N", "˝", "×", "÷", "˙", "", "*", "", " ", "", "", "", "", "", "",
+/* 0x40 */ "", "", "", "", "", "", "", "", "", "", "-", "", "", "", "+", "",
+/* 0x50 */ "", "", "", "", "", "", "¦", "", "", "", "", "", "", "", "", "",
+/* 0x60 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+/* 0x70 */ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+};
diff --git a/Source/Kernel/Ressources/logo.cd b/Source/Kernel/Ressources/logo.cd
index ef35bd4..6cacdb1 100644
--- a/Source/Kernel/Ressources/logo.cd
+++ b/Source/Kernel/Ressources/logo.cd
@@ -4,7 +4,7 @@ char *melonLogo[] = {
" // || // // // // // // // //|| // ",
" // |// // //==// // // // // || // ",
" // // // // // // // ||// ",
-" // // //==== //=== /====/ // |// ",
+" // // //==== //==== /====/ // |// ",
" OPERATING SYSTEM "
};
int melonLogoLines = 7, melonLogoCols = 60;
diff --git a/Source/Kernel/TaskManager/Mutex.class.cpp b/Source/Kernel/TaskManager/Mutex.class.cpp
new file mode 100644
index 0000000..55226ff
--- /dev/null
+++ b/Source/Kernel/TaskManager/Mutex.class.cpp
@@ -0,0 +1,26 @@
+#include "Mutex.class.h"
+#include <TaskManager/Task.ns.h>
+
+Mutex::Mutex(bool locked) {
+ m_locked = locked;
+}
+
+bool Mutex::lock() {
+ if (m_locked) return false;
+ m_locked = true;
+ return m_locked;
+}
+
+void Mutex::waitLock() {
+ while (m_locked)
+ Task::currentThread->sleep(10); //Wait 10ms
+ m_locked = true;
+}
+
+void Mutex::unlock() {
+ m_locked = false;
+}
+
+bool Mutex::locked() {
+ return m_locked;
+}
diff --git a/Source/Kernel/TaskManager/Mutex.class.h b/Source/Kernel/TaskManager/Mutex.class.h
new file mode 100644
index 0000000..298ed9c
--- /dev/null
+++ b/Source/Kernel/TaskManager/Mutex.class.h
@@ -0,0 +1,16 @@
+#ifndef DEF_MUTEX_CLASS_H
+#define DEF_MUTEX_CLASS_H
+
+class Mutex {
+ private:
+ bool m_locked;
+
+ public:
+ Mutex(bool locked = false);
+ bool lock(); //Locks the mutex if it is not locked. Returns true if mutex could be locked, false if already locked
+ void waitLock(); //Locks the mutex, waiting for it to be unlocked before if necessary
+ void unlock();
+ bool locked();
+};
+
+#endif
diff --git a/Source/Kernel/TaskManager/Process.class.cpp b/Source/Kernel/TaskManager/Process.class.cpp
index 5330719..3363ab0 100644
--- a/Source/Kernel/TaskManager/Process.class.cpp
+++ b/Source/Kernel/TaskManager/Process.class.cpp
@@ -5,7 +5,7 @@
Process::Process() { //Private constructor, does nothing
}
-Process* Process::createKernel(String cmdline) {
+Process* Process::createKernel(String cmdline, VirtualTerminal *vt) {
Process* p = new Process();
p->m_pid = 0;
p->m_cmdline = cmdline;
@@ -35,6 +35,7 @@ Process::Process(String cmdline, u32int uid) {
m_state = P_RUNNING;
m_pagedir = new PageDirectory(kernelPageDirectory);
m_uid = uid;
+ m_vt = Task::currentProcess->getVirtualTerminal();
m_stacksstart = 0xC0000000;
}
@@ -83,3 +84,11 @@ void Process::threadFinishes(Thread* thread, u32int retval) {
PageDirectory* Process::getPagedir() {
return m_pagedir;
}
+
+VirtualTerminal* Process::getVirtualTerminal() {
+ return m_vt;
+}
+
+void Process::setVirtualTerminal(VirtualTerminal* vt) {
+ m_vt = vt;
+}
diff --git a/Source/Kernel/TaskManager/Process.class.h b/Source/Kernel/TaskManager/Process.class.h
index 4ee7fcf..3b05f80 100644
--- a/Source/Kernel/TaskManager/Process.class.h
+++ b/Source/Kernel/TaskManager/Process.class.h
@@ -4,6 +4,7 @@
#include <Library/String.class.h>
#include <Library/Vector.class.h>
#include <MemoryManager/PageDirectory.class.h>
+#include <VTManager/VirtualTerminal.class.h>
#define P_ZOMBIE 0
#define P_RUNNING 1
@@ -30,11 +31,12 @@ class Process {
PageDirectory* m_pagedir;
u32int m_uid; //User ID
u32int m_stacksstart;
+ VirtualTerminal *m_vt;
Vector<Thread*> m_threads;
public:
- static Process* createKernel(String cmdline); //Also creates a Thread for what's curently happening
+ static Process* createKernel(String cmdline, VirtualTerminal *vt); //Also creates a Thread for what's curently happening
Process(String cmdline, u32int uid);
~Process();
@@ -45,6 +47,9 @@ class Process {
PageDirectory* getPagedir();
+ VirtualTerminal* getVirtualTerminal();
+ void setVirtualTerminal(VirtualTerminal* vt);
+
};
#endif
diff --git a/Source/Kernel/TaskManager/Task.ns.cpp b/Source/Kernel/TaskManager/Task.ns.cpp
index a95fd86..89e1b09 100644
--- a/Source/Kernel/TaskManager/Task.ns.cpp
+++ b/Source/Kernel/TaskManager/Task.ns.cpp
@@ -17,13 +17,15 @@ u32int currentThreadId = 0;
u32int nextpid = 1;
-void initialize(String cmdline) {
+void initialize(String cmdline, VirtualTerminal *vt) {
+ asm volatile ("cli");
threads.clear();
processes.clear();
- currentProcess = Process::createKernel(cmdline);
+ currentProcess = Process::createKernel(cmdline, vt);
idleThread = new Thread(idle_task, true);
currentThread = threads[0];
currentThreadId = 0;
+ asm volatile ("sti");
}
Thread* nextThread() {
diff --git a/Source/Kernel/TaskManager/Task.ns.h b/Source/Kernel/TaskManager/Task.ns.h
index cc658f0..db7933c 100644
--- a/Source/Kernel/TaskManager/Task.ns.h
+++ b/Source/Kernel/TaskManager/Task.ns.h
@@ -2,12 +2,13 @@
#define DEF_TASK_NS_H
#include <TaskManager/Thread.class.h>
+#include <VTManager/VirtualTerminal.class.h>
namespace Task {
extern Thread* currentThread;
extern Process* currentProcess;
- void initialize(String cmdline); //cmdline should be the bootloader kernel command line, if anybody needs it
+ void initialize(String cmdline, VirtualTerminal *vt); //cmdline should be the bootloader kernel command line, if anybody needs it
void doSwitch();
void triggerSwitch();
u32int nextPid();
diff --git a/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp b/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp
new file mode 100644
index 0000000..a5b5ea6
--- /dev/null
+++ b/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp
@@ -0,0 +1,69 @@
+#include "VirtualTerminal.class.h"
+#include <TaskManager/Task.ns.h>
+
+using namespace Kbd;
+
+void VirtualTerminal::keyPress(keypress_t kp) {
+ m_kbdbuff.push(kp);
+ if (!m_kbdMutex.locked()) {
+ if (kp.haschar && !kp.hascmd) {
+ put(kp.character);
+ } else if (kp.hascmd && kp.command == KBDC_ENTER) {
+ put("\n");
+ } else if (kp.hascmd && kp.command == KBDC_TAB) {
+ put("\t");
+ } else if (kp.hascmd && kp.command == KBDC_BACKSPACE) {
+ put("\b");
+ }
+ }
+}
+
+keypress_t VirtualTerminal::getKeypress(bool show, bool block) {
+ m_kbdMutex.waitLock();
+
+ if (m_kbdbuff.empty() && !block) {
+ m_kbdMutex.unlock();
+ return keypress_t();
+ }
+
+ while (m_kbdbuff.empty())
+ Task::currentThread->sleep(10);
+
+ keypress_t ret = m_kbdbuff[0];
+
+ for (u32int i = 1; i < m_kbdbuff.size(); i++) {
+ m_kbdbuff[i - 1] = m_kbdbuff[i];
+ }
+ m_kbdbuff.pop();
+
+ if (show) {
+ if (ret.haschar && !ret.hascmd) {
+ put(ret.character);
+ } else if (ret.hascmd && ret.command == KBDC_ENTER) {
+ put("\n");
+ } else if (ret.hascmd && ret.command == KBDC_TAB) {
+ put("\t");
+ } else if (ret.hascmd && ret.command == KBDC_BACKSPACE) {
+ put("\b");
+ }
+ }
+
+ m_kbdMutex.unlock();
+ return ret;
+}
+
+String VirtualTerminal::readLine(bool show) {
+ String ret = "";
+ keypress_t tmp = getKeypress(show);
+ while (!(tmp.hascmd and tmp.command == KBDC_ENTER)) {
+ if (tmp.hascmd and tmp.command == KBDC_BACKSPACE) {
+ if (!ret.empty()) ret = ret.substr(0, ret.size() - 1);
+ else put(" "); //Put a space so that cursor stays at same place
+ } else if (tmp.haschar) {
+ ret += tmp.character;
+ }
+ tmp = getKeypress(show);
+ }
+ if (!show) put("\n"); //Put a return if it hasn't been shown on getChar();
+ return ret;
+}
diff --git a/Source/Kernel/VTManager/VirtualTerminal.class.cpp b/Source/Kernel/VTManager/VirtualTerminal.class.cpp
index 41c3e8d..7864afd 100644
--- a/Source/Kernel/VTManager/VirtualTerminal.class.cpp
+++ b/Source/Kernel/VTManager/VirtualTerminal.class.cpp
@@ -4,7 +4,7 @@
#define BUFCHR(l, c) m_buff[((l) * m_cols) + (c)]
-VirtualTerminal::VirtualTerminal(u32int rows, u32int cols, u8int fgcolor, u8int bgcolor) {
+VirtualTerminal::VirtualTerminal(u32int rows, u32int cols, u8int fgcolor, u8int bgcolor) : m_kbdMutex(false) {
m_buff = new chr[rows * cols];
m_rows = rows;
m_cols = cols;
@@ -104,10 +104,10 @@ void VirtualTerminal::setCursorCol(u32int col) {
// Display functionn
void VirtualTerminal::put(wchar c, bool updatecsr) {
- if (c.value == 0x08) { //Ascii backspace
+ if (c.value == '\b') {
if (m_csrcol > 0) m_csrcol--;
putChar(m_csrlin, m_csrcol, ' ');
- } else if (c.value == 0x09) { //Ascii tab
+ } else if (c.value == '\t') {
m_csrcol = (m_csrcol + 8) &~(8 - 1);
} else if (c.value == '\r') {
m_csrcol = 0;
diff --git a/Source/Kernel/VTManager/VirtualTerminal.class.h b/Source/Kernel/VTManager/VirtualTerminal.class.h
index 6d081ee..6a14080 100644
--- a/Source/Kernel/VTManager/VirtualTerminal.class.h
+++ b/Source/Kernel/VTManager/VirtualTerminal.class.h
@@ -3,6 +3,9 @@
#include <Core/common.wtf.h>
#include <Library/String.class.h>
+#include <TaskManager/Mutex.class.h>
+#include <DeviceManager/Kbd.ns.h>
+#include <Library/Vector.class.h>
struct chr {
u8int color;
@@ -20,6 +23,9 @@ class VirtualTerminal {
u32int m_csrlin, m_csrcol;
+ Mutex m_kbdMutex;
+ Vector<Kbd::keypress_t> m_kbdbuff; //Key press events buffer
+
public:
VirtualTerminal(u32int rows, u32int cols, u8int fgcolor = 7, u8int bgcolor = 0);
~VirtualTerminal();
@@ -48,6 +54,11 @@ class VirtualTerminal {
//inline VirtualTerminal& operator<<(wchar c) { put(c); return *this; }
inline VirtualTerminal& operator<<(s32int i) { writeDec(i); return *this; }
inline VirtualTerminal& operator<<(u32int i) { writeHex(i); return *this; }
+
+ //Keyboard functions
+ void keyPress(Kbd::keypress_t kp); //Called by Kbd:: when a key is pressed
+ Kbd::keypress_t getKeypress(bool show = true, bool block = true); //Block : must we wait for a key to be pressed ?
+ String readLine(bool show = true);
};
#endif