summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/Kernel/Core/.kmain.wtf.cpp.swpbin20480 -> 0 bytes
-rw-r--r--Source/Kernel/DeviceManager/Kbd.ns.cpp9
-rw-r--r--Source/Kernel/DeviceManager/Kbd.ns.h8
-rw-r--r--Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp8
-rw-r--r--Source/Kernel/Map.txt1166
-rwxr-xr-xSource/Kernel/Melon.kebin107776 -> 108052 bytes
-rw-r--r--Source/Kernel/SyscallManager/IDT.ns.cpp15
-rw-r--r--Source/Kernel/SyscallManager/IDT.wtf.asm5
-rw-r--r--Source/Kernel/TaskManager/Process.class.cpp2
-rw-r--r--Source/Kernel/TaskManager/Process.class.h2
-rw-r--r--Source/Kernel/TaskManager/Task.ns.cpp2
-rw-r--r--Source/Kernel/TaskManager/Thread.class.cpp17
-rw-r--r--Source/Kernel/TaskManager/Thread.class.h5
-rw-r--r--Source/Kernel/VFS/.Part.ns.cpp.swpbin12288 -> 0 bytes
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp18
15 files changed, 650 insertions, 607 deletions
diff --git a/Source/Kernel/Core/.kmain.wtf.cpp.swp b/Source/Kernel/Core/.kmain.wtf.cpp.swp
deleted file mode 100644
index 6389e15..0000000
--- a/Source/Kernel/Core/.kmain.wtf.cpp.swp
+++ /dev/null
Binary files differ
diff --git a/Source/Kernel/DeviceManager/Kbd.ns.cpp b/Source/Kernel/DeviceManager/Kbd.ns.cpp
index 256037b..135d521 100644
--- a/Source/Kernel/DeviceManager/Kbd.ns.cpp
+++ b/Source/Kernel/DeviceManager/Kbd.ns.cpp
@@ -75,6 +75,7 @@ void updateLeds() {
void keyPress(u8int scancode) {
keypress_t kp;
kp.pressed = true;
+ kp.modifiers = kbdstatus & 0x0F;
u8int cmd = ctrlkeys[scancode];
scancode &= 0x7F;
if (cmd == 0) cmd = ctrlkeys[scancode];
@@ -83,7 +84,6 @@ void keyPress(u8int scancode) {
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) {
@@ -102,7 +102,6 @@ void keyPress(u8int scancode) {
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)'.';
@@ -113,7 +112,6 @@ void keyPress(u8int scancode) {
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) {
@@ -144,6 +142,7 @@ void keyPress(u8int scancode) {
void keyRelease(u8int scancode) {
keypress_t kp;
kp.pressed = false;
+ kp.modifiers = kbdstatus & 0x0F;
u8int cmd = ctrlkeys[scancode];
scancode &= 0x7F;
if (cmd == 0) cmd = ctrlkeys[scancode];
@@ -152,7 +151,6 @@ void keyRelease(u8int scancode) {
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) {
@@ -171,7 +169,6 @@ void keyRelease(u8int scancode) {
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)'.';
@@ -187,7 +184,7 @@ void keyRelease(u8int scancode) {
} else if (cmd == KBDC_LEFTSHIFT or cmd == KBDC_RIGHTSHIFT) {
kbdstatus &= ~STATUS_SHIFT;
}
- if (!kp.haschar) {
+ if (!kp.haschar && cmd) {
kp.hascmd = true;
kp.command = cmd;
}
diff --git a/Source/Kernel/DeviceManager/Kbd.ns.h b/Source/Kernel/DeviceManager/Kbd.ns.h
index ee73414..efd7a48 100644
--- a/Source/Kernel/DeviceManager/Kbd.ns.h
+++ b/Source/Kernel/DeviceManager/Kbd.ns.h
@@ -76,11 +76,17 @@
class VirtualTerminal;
namespace Kbd {
+ //== Possible cases for keypress_t :
+ // - hascmd && !haschar : this is a command key press/release (all grey keys except alt/ctrl/altgr/shift)
+ // - haschar && !hascmd : this is a character key press/release. Modifiers can haz STATUS_SHIFT or STATUS_ALTGR
+ // - haschar && hascmd : this is a character key press, but with ctrl and/or alt. See that in modifiers.
+ // - !haschar && !hascmd : invalid keypress
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
+ u8int modifiers;
+ u8int command;
wchar character; //is 0 if !haschar
keypress_t() : hascmd(false), haschar(false), command(0), character('\0') {};
};
diff --git a/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp
index f5216c7..bacfbe9 100644
--- a/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp
+++ b/Source/Kernel/Devices/Keyboard/PS2Keyboard.class.cpp
@@ -6,6 +6,14 @@ using namespace Sys;
PS2Keyboard::PS2Keyboard() {
Dev::requestIRQ(this, 1);
+
+ //Read all waiting characters, so that keyboard buffer is empty
+ u8int temp = inb(0x60), temp2 = 0;
+ while (temp != temp2) {
+ temp2 = temp;
+ temp = inb(0x60);
+ }
+
m_escaped = false;
}
diff --git a/Source/Kernel/Map.txt b/Source/Kernel/Map.txt
index 4c5953b..ecbde43 100644
--- a/Source/Kernel/Map.txt
+++ b/Source/Kernel/Map.txt
@@ -203,6 +203,8 @@ Discarded input sections
.group 0x00000000 0x0 SyscallManager/IDT.ns.o
.group 0x00000000 0x0 SyscallManager/IDT.ns.o
.group 0x00000000 0x0 SyscallManager/IDT.ns.o
+ .group 0x00000000 0x0 SyscallManager/IDT.ns.o
+ .group 0x00000000 0x0 SyscallManager/IDT.ns.o
.text._Znwj 0x00000000 0x0 SyscallManager/IDT.ns.o
.text._ZN15VirtualTerminallsE6String
0x00000000 0x0 SyscallManager/IDT.ns.o
@@ -287,7 +289,7 @@ Linker script and memory map
.setup 0x00100000 0x1e Core/loader.wtf.o
0xc010001e . = (. + 0xc0000000)
-.text 0xc0100020 0xf371 load address 0x00100020
+.text 0xc0100020 0xf539 load address 0x00100020
*(.text)
.text 0xc0100020 0x75 Core/loader.wtf.o
0xc010002c loader
@@ -378,771 +380,784 @@ Linker script and memory map
0xc01073da Time::time()
0xc01073c5 Time::uptime()
*fill* 0xc01073ef 0x1 00
- .text 0xc01073f0 0x70f DeviceManager/Kbd.ns.o
- 0xc0107524 Kbd::keyPress(unsigned char)
- 0xc010748e Kbd::updateLeds()
- 0xc0107469 Kbd::setKeymap(wchar*, wchar*, wchar*, wchar*)
- 0xc010786c Kbd::keyRelease(unsigned char)
- 0xc010745c Kbd::setFocus(VirtualTerminal*)
+ .text 0xc01073f0 0x6f6 DeviceManager/Kbd.ns.o
+ 0xc010752a Kbd::keyPress(unsigned char)
+ 0xc0107494 Kbd::updateLeds()
+ 0xc010746f Kbd::setKeymap(wchar*, wchar*, wchar*, wchar*)
+ 0xc010785b Kbd::keyRelease(unsigned char)
+ 0xc0107462 Kbd::setFocus(VirtualTerminal*)
0xc01073f0 Kbd::process(Kbd::keypress_t)
- *fill* 0xc0107aff 0x1 00
- .text 0xc0107b00 0x518 TaskManager/Process.class.o
- 0xc0107e9e Process::exit()
- 0xc0107b00 Process::Process()
- 0xc0107c26 Process::Process(String, unsigned int)
- 0xc010800a Process::setVirtualTerminal(VirtualTerminal*)
- 0xc0107e16 Process::stackAlloc()
- 0xc0107ffe Process::getVirtualTerminal()
- 0xc0107f24 Process::threadFinishes(Thread*, unsigned int)
- 0xc0107dc8 Process::~Process()
- 0xc0107b24 Process::Process()
- 0xc0107b48 Process::createKernel(String, VirtualTerminal*)
- 0xc0107d7a Process::~Process()
- 0xc0107cd0 Process::Process(String, unsigned int)
- 0xc0107efc Process::registerThread(Thread*)
- 0xc0107ff2 Process::getPagedir()
- .text 0xc0108018 0x3eb TaskManager/Thread.class.o
- 0xc010816c Thread::Thread(Process*, unsigned int (*)())
- 0xc010803a Thread::Thread()
- 0xc0108244 Thread::setup(unsigned int (*)(), unsigned int)
- 0xc01081ec Thread::~Thread()
- 0xc0108040 Thread::Thread(unsigned int (*)(), bool)
- 0xc0108354 Thread::sleep(unsigned int)
- 0xc0108034 Thread::Thread()
- 0xc0108378 Thread::waitIRQ(unsigned char)
- 0xc01080d6 Thread::Thread(unsigned int (*)(), bool)
- 0xc0108306 Thread::setState(unsigned int, unsigned int, unsigned int)
- 0xc0108326 Thread::getEsp()
- 0xc0108332 Thread::getEbp()
- 0xc010834a Thread::getProcess()
- 0xc010833e Thread::getEip()
- 0xc01082c0 Thread::finish(unsigned int)
- 0xc01083ac Thread::runnable()
- 0xc0108218 Thread::~Thread()
- 0xc01082e4 Thread::run(unsigned int (*)())
- 0xc01081ac Thread::Thread(Process*, unsigned int (*)())
- 0xc0108018 runThread(Thread*, unsigned int (*)())
- *fill* 0xc0108403 0x1 00
- .text 0xc0108404 0x56e TaskManager/Task.ns.o
- 0xc0108675 Task::IRQwakeup(unsigned char)
- 0xc0108658 Task::triggerSwitch()
- 0xc010877f Task::getKernelProcess()
- 0xc0108845 Task::registerProcess(Process*)
- 0xc010865f Task::nextPid()
- 0xc010886b Task::unregisterProcess(Process*)
- 0xc01087c3 Task::unregisterThread(Thread*)
- 0xc010879d Task::registerThread(Thread*)
- 0xc0108404 Task::initialize(String, VirtualTerminal*)
- 0xc01084b3 Task::nextThread()
- 0xc01086f1 Task::allocKernelPageTable(unsigned int, page_table_t*, unsigned int)
- 0xc0108568 Task::doSwitch()
- *fill* 0xc0108972 0xe 00
- .text 0xc0108980 0x48 TaskManager/Task.wtf.o
- 0xc0108980 read_eip
- 0xc0108983 idle_task
- 0xc010898a copy_page_physical
- .text 0xc01089c8 0x99 TaskManager/Mutex.class.o
- 0xc01089e0 Mutex::Mutex(bool)
- 0xc0108a4a Mutex::unlock()
- 0xc01089f8 Mutex::lock()
- 0xc0108a1a Mutex::waitLock()
- 0xc0108a56 Mutex::locked()
- 0xc01089c8 Mutex::Mutex(bool)
- *fill* 0xc0108a61 0x3 00
- .text 0xc0108a64 0xe27 VTManager/VirtualTerminal.class.o
- 0xc0108e2c VirtualTerminal::map(int, int)
- 0xc010914a VirtualTerminal::put(wchar, bool)
- 0xc0109534 VirtualTerminal::hexDump(unsigned char*, unsigned int)
- 0xc0108ea6 VirtualTerminal::unmap()
- 0xc0109112 VirtualTerminal::setCursorLine(unsigned int)
- 0xc0108c98 VirtualTerminal::setColor(unsigned char, unsigned char)
- 0xc0108c14 VirtualTerminal::~VirtualTerminal()
- 0xc010912e VirtualTerminal::setCursorCol(unsigned int)
- 0xc0108b3c VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
- 0xc01090b0 VirtualTerminal::updateCursor()
- 0xc0109320 VirtualTerminal::writeDec(int, bool)
- 0xc0108c56 VirtualTerminal::~VirtualTerminal()
- 0xc0108ec0 VirtualTerminal::redraw()
- 0xc0109458 VirtualTerminal::writeHex(unsigned int, bool)
- 0xc0108f98 VirtualTerminal::scroll()
- 0xc0108a64 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
- 0xc01092b4 VirtualTerminal::write(String, bool)
- 0xc0108ce6 VirtualTerminal::putChar(unsigned int, unsigned int, wchar)
- 0xc0108db0 VirtualTerminal::clear()
- 0xc01090ec VirtualTerminal::moveCursor(unsigned int, unsigned int)
- *fill* 0xc010988b 0x1 00
- .text 0xc010988c 0x50b VTManager/VirtualTerminal-kbd.class.o
- 0xc01099b6 VirtualTerminal::getKeypress(bool, bool)
- 0xc0109bf2 VirtualTerminal::readLine(bool)
- 0xc010988c VirtualTerminal::keyPress(Kbd::keypress_t)
- *fill* 0xc0109d97 0x1 00
- .text 0xc0109d98 0x156 VTManager/VT.ns.o
- 0xc0109dbe VT::unmap(VirtualTerminal*)
- 0xc0109e45 VT::redrawScreen()
- 0xc0109d98 VT::map(VirtualTerminal*)
- *fill* 0xc0109eee 0x2 00
- .text 0xc0109ef0 0x2f1 Library/Bitset.class.o
- 0xc010a1d6 Bitset::usedBits()
- 0xc0109ef0 Bitset::Bitset()
- 0xc010a0f8 Bitset::testBit(unsigned int)
- 0xc0109fbe Bitset::~Bitset()
- 0xc010a090 Bitset::clearBit(unsigned int)
- 0xc0109fd4 Bitset::init(unsigned int, unsigned int*)
- 0xc0109efc Bitset::Bitset(unsigned int)
- 0xc0109ef6 Bitset::Bitset()
- 0xc0109f30 Bitset::Bitset(unsigned int)
- 0xc010a02a Bitset::setBit(unsigned int)
- 0xc0109fa8 Bitset::~Bitset()
- 0xc0109f86 Bitset::Bitset(unsigned int, unsigned int*)
- 0xc0109f64 Bitset::Bitset(unsigned int, unsigned int*)
- 0xc010a140 Bitset::firstFreeBit()
- *fill* 0xc010a1e1 0x3 00
- .text 0xc010a1e4 0x123c Library/String.class.o
- 0xc010a1e4 String::hex(unsigned int)
- 0xc010ab76 String::operator==(char*)
- 0xc010aebc String::operator+=(wchar)
- 0xc010b06a String::toInt()
- 0xc010a7c4 String::String(String const&)
- 0xc010a4d2 String::String()
- 0xc010a4ea String::String()
- 0xc010b200 String::size()
- 0xc010a2f2 String::number(int)
- 0xc010aaf4 String::operator==(String&)
- 0xc010afea String::operator+(char*)
- 0xc010a8c2 String::~String()
- 0xc010a6ee String::String(String const&)
- 0xc010a89a String::~String()
- 0xc010a8ea String::operator=(String const&)
- 0xc010a502 String::String(char*)
- 0xc010ac36 String::operator+=(String&)
- 0xc010b1ee String::operator[](int)
- 0xc010b24e String::split(wchar)
- 0xc010b20c String::clear()
- 0xc010b23e String::empty()
- 0xc010b132 String::toInt16()
- 0xc010b342 String::substr(int, int)
- 0xc010a5f8 String::String(char*)
- 0xc010ad64 String::operator+=(char*)
- 0xc010b02a String::operator+(wchar)
- 0xc010a9e0 String::operator=(char*)
- 0xc010afaa String::operator+(String&)
- .text 0xc010b420 0xd47 Library/wchar.class.o
- 0xc010b42e wchar::wchar()
- 0xc010b49a wchar::wchar(char*)
- 0xc010b420 wchar::wchar()
- 0xc010b480 wchar::wchar(char*)
- 0xc010b564 wchar::affectAscii(char)
- 0xc010b4b4 wchar::utf8len(char*)
- 0xc010b57c wchar::affectUtf8(char*)
- 0xc010b43c wchar::wchar(char)
- 0xc010b45e wchar::wchar(char)
- 0xc010b744 wchar::toAscii()
- *fill* 0xc010c167 0x1 00
- .text 0xc010c168 0x22c VFS/Partition.class.o
- 0xc010c1be Partition::Partition(BlockDevice*, unsigned char, unsigned long long, unsigned long long)
- 0xc010c168 Partition::Partition(BlockDevice*, unsigned char, unsigned long long, unsigned long long)
- 0xc010c376 Partition::getBlockSize()
- 0xc010c36a Partition::getPartNumber()
- 0xc010c344 Partition::getDevice()
- 0xc010c2ac Partition::writeBlocks(unsigned long long, unsigned int, unsigned char*)
- 0xc010c35c Partition::getBlockCount()
- 0xc010c34e Partition::getStartBlock()
- 0xc010c214 Partition::readBlocks(unsigned long long, unsigned int, unsigned char*)
- .text 0xc010c394 0x33d VFS/Part.ns.o
- 0xc010c5f8 Part::getDeviceID(BlockDevice*)
- 0xc010c394 Part::readPartitionTable(BlockDevice*)
- 0xc010c40c Part::registerDevice(BlockDevice*)
- 0xc010c4ad Part::unregisterDevice(BlockDevice*)
- *fill* 0xc010c6d1 0x3 00
- .text 0xc010c6d4 0xd53 SyscallManager/IDT.ns.o
- 0xc010d0ff IDT::handleException(registers_t, int)
- 0xc010c8dd IDT::init()
- 0xc010c876 IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char)
- 0xc010c6d4 interrupt_handler
- *fill* 0xc010d427 0x9 00
- .text 0xc010d430 0x20e SyscallManager/IDT.wtf.o
- 0xc010d460 isr4
- 0xc010d53a isr27
- 0xc010d4b2 isr13
- 0xc010d5e4 irq12
- 0xc010d508 isr22
- 0xc010d4c2 isr15
- 0xc010d5d0 irq10
- 0xc010d5f8 irq14
- 0xc010d490 isr9
- 0xc010d5bc irq8
- 0xc010d512 isr23
- 0xc010d54e isr29
- 0xc010d562 isr31
- 0xc010d4fe isr21
- 0xc010d5da irq11
- 0xc010d544 isr28
- 0xc010d488 isr8
- 0xc010d59e irq5
- 0xc010d4f4 isr20
- 0xc010d4ba isr14
- 0xc010d46a isr5
- 0xc010d5a8 irq6
- 0xc010d576 irq1
- 0xc010d442 isr1
- 0xc010d5c6 irq9
- 0xc010d530 isr26
- 0xc010d4a2 isr11
- 0xc010d5ee irq13
- 0xc010d4aa isr12
- 0xc010d438 isr0
- 0xc010d580 irq2
- 0xc010d51c isr24
- 0xc010d4cc isr16
- 0xc010d456 isr3
- 0xc010d474 isr6
- 0xc010d5b2 irq7
- 0xc010d4e0 isr18
- 0xc010d56c irq0
- 0xc010d49a isr10
- 0xc010d4d6 isr17
- 0xc010d44c isr2
- 0xc010d60c int64
- 0xc010d4ea isr19
- 0xc010d430 idt_flush
- 0xc010d558 isr30
- 0xc010d602 irq15
- 0xc010d47e isr7
- 0xc010d526 isr25
- 0xc010d594 irq4
- 0xc010d58a irq3
- *fill* 0xc010d63e 0x2 00
- .text 0xc010d640 0x185 Devices/Display/VGATextOutput.class.o
- 0xc010d668 VGATextOutput::getName()
- 0xc010d690 VGATextOutput::textCols()
- 0xc010d78e VGATextOutput::clear()
- 0xc010d640 VGATextOutput::getClass()
- 0xc010d708 VGATextOutput::moveCursor(unsigned short, unsigned short)
- 0xc010d6a4 VGATextOutput::putChar(unsigned short, unsigned short, wchar, unsigned char)
- 0xc010d69a VGATextOutput::textRows()
- *fill* 0xc010d7c5 0x3 00
- .text 0xc010d7c8 0x190 Devices/Keyboard/PS2Keyboard.class.o
- 0xc010d7fe PS2Keyboard::PS2Keyboard()
- 0xc010d884 PS2Keyboard::handleIRQ(registers_t, int)
- 0xc010d85c PS2Keyboard::getName()
- 0xc010d90e PS2Keyboard::updateLeds(unsigned int)
- 0xc010d7c8 PS2Keyboard::PS2Keyboard()
- 0xc010d834 PS2Keyboard::getClass()
- .text 0xc010d958 0x8b0 Devices/Floppy/FloppyController.class.o
- 0xc010dad4 FloppyController::dmaRelease()
- 0xc010dc2a FloppyController::FloppyController(unsigned int, unsigned char)
- 0xc010e024 FloppyController::writeCmd(unsigned char)
- 0xc010dfdc FloppyController::setActiveDrive(unsigned char)
- 0xc010dae8 floppyMotorTimer()
- 0xc010d958 FloppyController::dmaInit(unsigned char, unsigned int)
- 0xc010df24 FloppyController::setDOR()
- 0xc010e00e FloppyController::setNoActiveDrive()
- 0xc010de3a FloppyController::getClass()
- 0xc010e0a6 FloppyController::readData()
- 0xc010dbbc FloppyController::FloppyController(unsigned int, unsigned char)
- 0xc010de62 FloppyController::getName()
- 0xc010dc98 FloppyController::detect()
- 0xc010dee2 FloppyController::checkInterrupt(int*, int*)
- 0xc010e114 FloppyController::reset()
- .text 0xc010e208 0xf6e Devices/Floppy/FloppyDrive.class.o
- 0xc010f104 FloppyDrive::writeBlocks(unsigned long long, unsigned int, unsigned char*)
- 0xc010e6e6 FloppyDrive::setMotorState(bool)
- 0xc010e30a FloppyDrive::FloppyDrive(FloppyController*, unsigned char, unsigned char)
- 0xc010ee62 FloppyDrive::readBlocks(unsigned long long, unsigned int, unsigned char*)
- 0xc010e4cc FloppyDrive::setup()
- 0xc010e40c FloppyDrive::getClass()
- 0xc010e434 FloppyDrive::getName()
- 0xc010ee46 FloppyDrive::blocks()
- 0xc010e208 FloppyDrive::FloppyDrive(FloppyController*, unsigned char, unsigned char)
- 0xc010e948 FloppyDrive::doTrack(unsigned int, unsigned char)
- 0xc010e598 FloppyDrive::calibrate()
- 0xc010eda2 FloppyDrive::readOnly()
- 0xc010e790 FloppyDrive::killMotor()
- 0xc010f128 FloppyDrive::chs2lba(unsigned int, unsigned int, unsigned int)
- 0xc010f11e FloppyDrive::blockSize()
- 0xc010e7b2 FloppyDrive::seek(unsigned int, int)
- *fill* 0xc010f176 0x2 00
- .text 0xc010f178 0x219 Devices/Timer.class.o
- 0xc010f290 Timer::setFrequency(unsigned char)
- 0xc010f178 Timer::Timer(unsigned char)
- 0xc010f240 Timer::getClass()
- 0xc010f268 Timer::getName()
- 0xc010f314 Timer::time()
- 0xc010f34e Timer::handleIRQ(registers_t, int)
- 0xc010f308 Timer::uptime()
- 0xc010f1dc Timer::Timer(unsigned char)
-
-.text._Znwj 0xc010f391 0x1b load address 0x0010f391
- .text._Znwj 0xc010f391 0x1b Core/kmain.wtf.o
- 0xc010f391 operator new(unsigned int)
-
-.text._ZdaPv 0xc010f3ac 0x13 load address 0x0010f3ac
- .text._ZdaPv 0xc010f3ac 0x13 Core/kmain.wtf.o
- 0xc010f3ac operator delete[](void*)
+ *fill* 0xc0107ae6 0x2 00
+ .text 0xc0107ae8 0x518 TaskManager/Process.class.o
+ 0xc0107e86 Process::exit()
+ 0xc0107ae8 Process::Process()
+ 0xc0107c0e Process::Process(String, unsigned int)
+ 0xc0107ff2 Process::setVirtualTerminal(VirtualTerminal*)
+ 0xc0107dfe Process::stackAlloc()
+ 0xc0107fe6 Process::getVirtualTerminal()
+ 0xc0107f0c Process::threadFinishes(Thread*, unsigned int)
+ 0xc0107db0 Process::~Process()
+ 0xc0107b0c Process::Process()
+ 0xc0107b30 Process::createKernel(String, VirtualTerminal*)
+ 0xc0107d62 Process::~Process()
+ 0xc0107cb8 Process::Process(String, unsigned int)
+ 0xc0107ee4 Process::registerThread(Thread*)
+ 0xc0107fda Process::getPagedir()
+ .text 0xc0108000 0x45d TaskManager/Thread.class.o
+ 0xc0108150 Thread::Thread(Process*, unsigned int (*)())
+ 0xc010801e Thread::Thread()
+ 0xc0108250 Thread::setup(unsigned int (*)(), unsigned int)
+ 0xc01081d0 Thread::~Thread()
+ 0xc0108024 Thread::Thread(unsigned int (*)(), bool)
+ 0xc010839e Thread::sleep(unsigned int)
+ 0xc0108018 Thread::Thread()
+ 0xc01083c2 Thread::waitIRQ(unsigned char)
+ 0xc01080ba Thread::Thread(unsigned int (*)(), bool)
+ 0xc0108350 Thread::setState(unsigned int, unsigned int, unsigned int)
+ 0xc0108370 Thread::getEsp()
+ 0xc010837c Thread::getEbp()
+ 0xc0108394 Thread::getProcess()
+ 0xc0108388 Thread::getEip()
+ 0xc01082cc Thread::finish(unsigned int)
+ 0xc0108406 Thread::runnable()
+ 0xc0108210 Thread::~Thread()
+ 0xc0108190 Thread::Thread(Process*, unsigned int (*)())
+ 0xc0108000 runThread(Thread*, unsigned int (*)())
+ *fill* 0xc010845d 0x3 00
+ .text 0xc0108460 0x578 TaskManager/Task.ns.o
+ 0xc01086db Task::IRQwakeup(unsigned char)
+ 0xc01086be Task::triggerSwitch()
+ 0xc01087e5 Task::getKernelProcess()
+ 0xc01088ab Task::registerProcess(Process*)
+ 0xc01086c5 Task::nextPid()
+ 0xc01088d1 Task::unregisterProcess(Process*)
+ 0xc0108829 Task::unregisterThread(Thread*)
+ 0xc0108803 Task::registerThread(Thread*)
+ 0xc0108460 Task::initialize(String, VirtualTerminal*)
+ 0xc010850f Task::nextThread()
+ 0xc0108757 Task::allocKernelPageTable(unsigned int, page_table_t*, unsigned int)
+ 0xc01085c4 Task::doSwitch()
+ *fill* 0xc01089d8 0x8 00
+ .text 0xc01089e0 0x48 TaskManager/Task.wtf.o
+ 0xc01089e0 read_eip
+ 0xc01089e3 idle_task
+ 0xc01089ea copy_page_physical
+ .text 0xc0108a28 0x99 TaskManager/Mutex.class.o
+ 0xc0108a40 Mutex::Mutex(bool)
+ 0xc0108aaa Mutex::unlock()
+ 0xc0108a58 Mutex::lock()
+ 0xc0108a7a Mutex::waitLock()
+ 0xc0108ab6 Mutex::locked()
+ 0xc0108a28 Mutex::Mutex(bool)
+ *fill* 0xc0108ac1 0x3 00
+ .text 0xc0108ac4 0xe27 VTManager/VirtualTerminal.class.o
+ 0xc0108e8c VirtualTerminal::map(int, int)
+ 0xc01091aa VirtualTerminal::put(wchar, bool)
+ 0xc0109594 VirtualTerminal::hexDump(unsigned char*, unsigned int)
+ 0xc0108f06 VirtualTerminal::unmap()
+ 0xc0109172 VirtualTerminal::setCursorLine(unsigned int)
+ 0xc0108cf8 VirtualTerminal::setColor(unsigned char, unsigned char)
+ 0xc0108c74 VirtualTerminal::~VirtualTerminal()
+ 0xc010918e VirtualTerminal::setCursorCol(unsigned int)
+ 0xc0108b9c VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
+ 0xc0109110 VirtualTerminal::updateCursor()
+ 0xc0109380 VirtualTerminal::writeDec(int, bool)
+ 0xc0108cb6 VirtualTerminal::~VirtualTerminal()
+ 0xc0108f20 VirtualTerminal::redraw()
+ 0xc01094b8 VirtualTerminal::writeHex(unsigned int, bool)
+ 0xc0108ff8 VirtualTerminal::scroll()
+ 0xc0108ac4 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char)
+ 0xc0109314 VirtualTerminal::write(String, bool)
+ 0xc0108d46 VirtualTerminal::putChar(unsigned int, unsigned int, wchar)
+ 0xc0108e10 VirtualTerminal::clear()
+ 0xc010914c VirtualTerminal::moveCursor(unsigned int, unsigned int)
+ *fill* 0xc01098eb 0x1 00
+ .text 0xc01098ec 0x595 VTManager/VirtualTerminal-kbd.class.o
+ 0xc0109a42 VirtualTerminal::getKeypress(bool, bool)
+ 0xc0109cb4 VirtualTerminal::readLine(bool)
+ 0xc01098ec VirtualTerminal::keyPress(Kbd::keypress_t)
+ *fill* 0xc0109e81 0x3 00
+ .text 0xc0109e84 0x156 VTManager/VT.ns.o
+ 0xc0109eaa VT::unmap(VirtualTerminal*)
+ 0xc0109f31 VT::redrawScreen()
+ 0xc0109e84 VT::map(VirtualTerminal*)
+ *fill* 0xc0109fda 0x2 00
+ .text 0xc0109fdc 0x2f1 Library/Bitset.class.o
+ 0xc010a2c2 Bitset::usedBits()
+ 0xc0109fdc Bitset::Bitset()
+ 0xc010a1e4 Bitset::testBit(unsigned int)
+ 0xc010a0aa Bitset::~Bitset()
+ 0xc010a17c Bitset::clearBit(unsigned int)
+ 0xc010a0c0 Bitset::init(unsigned int, unsigned int*)
+ 0xc0109fe8 Bitset::Bitset(unsigned int)
+ 0xc0109fe2 Bitset::Bitset()
+ 0xc010a01c Bitset::Bitset(unsigned int)
+ 0xc010a116 Bitset::setBit(unsigned int)
+ 0xc010a094 Bitset::~Bitset()
+ 0xc010a072 Bitset::Bitset(unsigned int, unsigned int*)
+ 0xc010a050 Bitset::Bitset(unsigned int, unsigned int*)
+ 0xc010a22c Bitset::firstFreeBit()
+ *fill* 0xc010a2cd 0x3 00
+ .text 0xc010a2d0 0x123c Library/String.class.o
+ 0xc010a2d0 String::hex(unsigned int)
+ 0xc010ac62 String::operator==(char*)
+ 0xc010afa8 String::operator+=(wchar)
+ 0xc010b156 String::toInt()
+ 0xc010a8b0 String::String(String const&)
+ 0xc010a5be String::String()
+ 0xc010a5d6 String::String()
+ 0xc010b2ec String::size()
+ 0xc010a3de String::number(int)
+ 0xc010abe0 String::operator==(String&)
+ 0xc010b0d6 String::operator+(char*)
+ 0xc010a9ae String::~String()
+ 0xc010a7da String::String(String const&)
+ 0xc010a986 String::~String()
+ 0xc010a9d6 String::operator=(String const&)
+ 0xc010a5ee String::String(char*)
+ 0xc010ad22 String::operator+=(String&)
+ 0xc010b2da String::operator[](int)
+ 0xc010b33a String::split(wchar)
+ 0xc010b2f8 String::clear()
+ 0xc010b32a String::empty()
+ 0xc010b21e String::toInt16()
+ 0xc010b42e String::substr(int, int)
+ 0xc010a6e4 String::String(char*)
+ 0xc010ae50 String::operator+=(char*)
+ 0xc010b116 String::operator+(wchar)
+ 0xc010aacc String::operator=(char*)
+ 0xc010b096 String::operator+(String&)
+ .text 0xc010b50c 0xd47 Library/wchar.class.o
+ 0xc010b51a wchar::wchar()
+ 0xc010b586 wchar::wchar(char*)
+ 0xc010b50c wchar::wchar()
+ 0xc010b56c wchar::wchar(char*)
+ 0xc010b650 wchar::affectAscii(char)
+ 0xc010b5a0 wchar::utf8len(char*)
+ 0xc010b668 wchar::affectUtf8(char*)
+ 0xc010b528 wchar::wchar(char)
+ 0xc010b54a wchar::wchar(char)
+ 0xc010b830 wchar::toAscii()
+ *fill* 0xc010c253 0x1 00
+ .text 0xc010c254 0x22c VFS/Partition.class.o
+ 0xc010c2aa Partition::Partition(BlockDevice*, unsigned char, unsigned long long, unsigned long long)
+ 0xc010c254 Partition::Partition(BlockDevice*, unsigned char, unsigned long long, unsigned long long)
+ 0xc010c462 Partition::getBlockSize()
+ 0xc010c456 Partition::getPartNumber()
+ 0xc010c430 Partition::getDevice()
+ 0xc010c398 Partition::writeBlocks(unsigned long long, unsigned int, unsigned char*)
+ 0xc010c448 Partition::getBlockCount()
+ 0xc010c43a Partition::getStartBlock()
+ 0xc010c300 Partition::readBlocks(unsigned long long, unsigned int, unsigned char*)
+ .text 0xc010c480 0x33d VFS/Part.ns.o
+ 0xc010c6e4 Part::getDeviceID(BlockDevice*)
+ 0xc010c480 Part::readPartitionTable(BlockDevice*)
+ 0xc010c4f8 Part::registerDevice(BlockDevice*)
+ 0xc010c599 Part::unregisterDevice(BlockDevice*)
+ *fill* 0xc010c7bd 0x3 00
+ .text 0xc010c7c0 0xdae SyscallManager/IDT.ns.o
+ 0xc010d246 IDT::handleException(registers_t, int)
+ 0xc010c9ff IDT::init()
+ 0xc010c998 IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char)
+ 0xc010c7c0 interrupt_handler
+ *fill* 0xc010d56e 0x2 00
+ .text 0xc010d570 0x222 SyscallManager/IDT.wtf.o
+ 0xc010d5a0 isr4
+ 0xc010d67a isr27
+ 0xc010d5f2 isr13
+ 0xc010d724 irq12
+ 0xc010d648 isr22
+ 0xc010d602 isr15
+ 0xc010d710 irq10
+ 0xc010d738 irq14
+ 0xc010d5d0 isr9
+ 0xc010d6fc irq8
+ 0xc010d652 isr23
+ 0xc010d68e isr29
+ 0xc010d760 int66
+ 0xc010d6a2 isr31
+ 0xc010d63e isr21
+ 0xc010d71a irq11
+ 0xc010d684 isr28
+ 0xc010d5c8 isr8
+ 0xc010d6de irq5
+ 0xc010d634 isr20
+ 0xc010d5fa isr14
+ 0xc010d5aa isr5
+ 0xc010d6e8 irq6
+ 0xc010d6b6 irq1
+ 0xc010d582 isr1
+ 0xc010d706 irq9
+ 0xc010d670 isr26
+ 0xc010d5e2 isr11
+ 0xc010d72e irq13
+ 0xc010d5ea isr12
+ 0xc010d578 isr0
+ 0xc010d6c0 irq2
+ 0xc010d65c isr24
+ 0xc010d60c isr16
+ 0xc010d596 isr3
+ 0xc010d756 int65
+ 0xc010d5b4 isr6
+ 0xc010d6f2 irq7
+ 0xc010d620 isr18
+ 0xc010d6ac irq0
+ 0xc010d5da isr10
+ 0xc010d616 isr17
+ 0xc010d58c isr2
+ 0xc010d74c int64
+ 0xc010d62a isr19
+ 0xc010d570 idt_flush
+ 0xc010d698 isr30
+ 0xc010d742 irq15
+ 0xc010d5be isr7
+ 0xc010d666 isr25
+ 0xc010d6d4 irq4
+ 0xc010d6ca irq3
+ *fill* 0xc010d792 0x2 00
+ .text 0xc010d794 0x185 Devices/Display/VGATextOutput.class.o
+ 0xc010d7bc VGATextOutput::getName()
+ 0xc010d7e4 VGATextOutput::textCols()
+ 0xc010d8e2 VGATextOutput::clear()
+ 0xc010d794 VGATextOutput::getClass()
+ 0xc010d85c VGATextOutput::moveCursor(unsigned short, unsigned short)
+ 0xc010d7f8 VGATextOutput::putChar(unsigned short, unsigned short, wchar, unsigned char)
+ 0xc010d7ee VGATextOutput::textRows()
+ *fill* 0xc010d919 0x3 00
+ .text 0xc010d91c 0x204 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc010d98c PS2Keyboard::PS2Keyboard()
+ 0xc010da4c PS2Keyboard::handleIRQ(registers_t, int)
+ 0xc010da24 PS2Keyboard::getName()
+ 0xc010dad6 PS2Keyboard::updateLeds(unsigned int)
+ 0xc010d91c PS2Keyboard::PS2Keyboard()
+ 0xc010d9fc PS2Keyboard::getClass()
+ .text 0xc010db20 0x8b0 Devices/Floppy/FloppyController.class.o
+ 0xc010dc9c FloppyController::dmaRelease()
+ 0xc010ddf2 FloppyController::FloppyController(unsigned int, unsigned char)
+ 0xc010e1ec FloppyController::writeCmd(unsigned char)
+ 0xc010e1a4 FloppyController::setActiveDrive(unsigned char)
+ 0xc010dcb0 floppyMotorTimer()
+ 0xc010db20 FloppyController::dmaInit(unsigned char, unsigned int)
+ 0xc010e0ec FloppyController::setDOR()
+ 0xc010e1d6 FloppyController::setNoActiveDrive()
+ 0xc010e002 FloppyController::getClass()
+ 0xc010e26e FloppyController::readData()
+ 0xc010dd84 FloppyController::FloppyController(unsigned int, unsigned char)
+ 0xc010e02a FloppyController::getName()
+ 0xc010de60 FloppyController::detect()
+ 0xc010e0aa FloppyController::checkInterrupt(int*, int*)
+ 0xc010e2dc FloppyController::reset()
+ .text 0xc010e3d0 0xf6e Devices/Floppy/FloppyDrive.class.o
+ 0xc010f2cc FloppyDrive::writeBlocks(unsigned long long, unsigned int, unsigned char*)
+ 0xc010e8ae FloppyDrive::setMotorState(bool)
+ 0xc010e4d2 FloppyDrive::FloppyDrive(FloppyController*, unsigned char, unsigned char)
+ 0xc010f02a FloppyDrive::readBlocks(unsigned long long, unsigned int, unsigned char*)
+ 0xc010e694 FloppyDrive::setup()
+ 0xc010e5d4 FloppyDrive::getClass()
+ 0xc010e5fc FloppyDrive::getName()
+ 0xc010f00e FloppyDrive::blocks()
+ 0xc010e3d0 FloppyDrive::FloppyDrive(FloppyController*, unsigned char, unsigned char)
+ 0xc010eb10 FloppyDrive::doTrack(unsigned int, unsigned char)
+ 0xc010e760 FloppyDrive::calibrate()
+ 0xc010ef6a FloppyDrive::readOnly()
+ 0xc010e958 FloppyDrive::killMotor()
+ 0xc010f2f0 FloppyDrive::chs2lba(unsigned int, unsigned int, unsigned int)
+ 0xc010f2e6 FloppyDrive::blockSize()
+ 0xc010e97a FloppyDrive::seek(unsigned int, int)
+ *fill* 0xc010f33e 0x2 00
+ .text 0xc010f340 0x219 Devices/Timer.class.o
+ 0xc010f458 Timer::setFrequency(unsigned char)
+ 0xc010f340 Timer::Timer(unsigned char)
+ 0xc010f408 Timer::getClass()
+ 0xc010f430 Timer::getName()
+ 0xc010f4dc Timer::time()
+ 0xc010f516 Timer::handleIRQ(registers_t, int)
+ 0xc010f4d0 Timer::uptime()
+ 0xc010f3a4 Timer::Timer(unsigned char)
+
+.text._Znwj 0xc010f559 0x1b load address 0x0010f559
+ .text._Znwj 0xc010f559 0x1b Core/kmain.wtf.o
+ 0xc010f559 operator new(unsigned int)
+
+.text._ZdaPv 0xc010f574 0x13 load address 0x0010f574
+ .text._ZdaPv 0xc010f574 0x13 Core/kmain.wtf.o
+ 0xc010f574 operator delete[](void*)
.text._ZN6Device9handleIRQE11registers_ti
- 0xc010f3c0 0x5 load address 0x0010f3c0
+ 0xc010f588 0x5 load address 0x0010f588
.text._ZN6Device9handleIRQE11registers_ti
- 0xc010f3c0 0x5 Core/kmain.wtf.o
- 0xc010f3c0 Device::handleIRQ(registers_t, int)
+ 0xc010f588 0x5 Core/kmain.wtf.o
+ 0xc010f588 Device::handleIRQ(registers_t, int)
.text._ZN15VirtualTerminallsE6String
- 0xc010f3c6 0x42 load address 0x0010f3c6
+ 0xc010f58e 0x42 load address 0x0010f58e
.text._ZN15VirtualTerminallsE6String
- 0xc010f3c6 0x42 Core/kmain.wtf.o
- 0xc010f3c6 VirtualTerminal::operator<<(String)
+ 0xc010f58e 0x42 Core/kmain.wtf.o
+ 0xc010f58e VirtualTerminal::operator<<(String)
.text._ZN15VirtualTerminallsEi
- 0xc010f408 0x25 load address 0x0010f408
+ 0xc010f5d0 0x25 load address 0x0010f5d0
.text._ZN15VirtualTerminallsEi
- 0xc010f408 0x25 Core/kmain.wtf.o
- 0xc010f408 VirtualTerminal::operator<<(int)
+ 0xc010f5d0 0x25 Core/kmain.wtf.o
+ 0xc010f5d0 VirtualTerminal::operator<<(int)
.text._ZN15VirtualTerminallsEj
- 0xc010f42e 0x25 load address 0x0010f42e
+ 0xc010f5f6 0x25 load address 0x0010f5f6
.text._ZN15VirtualTerminallsEj
- 0xc010f42e 0x25 Core/kmain.wtf.o
- 0xc010f42e VirtualTerminal::operator<<(unsigned int)
+ 0xc010f5f6 0x25 Core/kmain.wtf.o
+ 0xc010f5f6 VirtualTerminal::operator<<(unsigned int)
.text._ZN6DeviceC2Ev
- 0xc010f454 0xe load address 0x0010f454
+ 0xc010f61c 0xe load address 0x0010f61c
.text._ZN6DeviceC2Ev
- 0xc010f454 0xe Core/kmain.wtf.o
- 0xc010f454 Device::Device()
+ 0xc010f61c 0xe Core/kmain.wtf.o
+ 0xc010f61c Device::Device()
.text._ZN7DisplayC2Ev
- 0xc010f462 0x1c load address 0x0010f462
+ 0xc010f62a 0x1c load address 0x0010f62a
.text._ZN7DisplayC2Ev
- 0xc010f462 0x1c Core/kmain.wtf.o
- 0xc010f462 Display::Display()
+ 0xc010f62a 0x1c Core/kmain.wtf.o
+ 0xc010f62a Display::Display()
.text._ZN13VGATextOutputC1Ev
- 0xc010f47e 0x1c load address 0x0010f47e
+ 0xc010f646 0x1c load address 0x0010f646
.text._ZN13VGATextOutputC1Ev
- 0xc010f47e 0x1c Core/kmain.wtf.o
- 0xc010f47e VGATextOutput::VGATextOutput()
+ 0xc010f646 0x1c Core/kmain.wtf.o
+ 0xc010f646 VGATextOutput::VGATextOutput()
.text._ZN6VectorIP6DeviceED1Ev
- 0xc010f49a 0x27 load address 0x0010f49a
+ 0xc010f662 0x27 load address 0x0010f662
.text._ZN6VectorIP6DeviceED1Ev
- 0xc010f49a 0x27 Core/kmain.wtf.o
- 0xc010f49a Vector<Device*>::~Vector()
+ 0xc010f662 0x27 Core/kmain.wtf.o
+ 0xc010f662 Vector<Device*>::~Vector()
.text._ZN6VectorIP6DeviceE4sizeEv
- 0xc010f4c2 0xb load address 0x0010f4c2
+ 0xc010f68a 0xb load address 0x0010f68a
.text._ZN6VectorIP6DeviceE4sizeEv
- 0xc010f4c2 0xb Core/kmain.wtf.o
- 0xc010f4c2 Vector<Device*>::size()
+ 0xc010f68a 0xb Core/kmain.wtf.o
+ 0xc010f68a Vector<Device*>::size()
.text._ZN6VectorIP6DeviceEixEj
- 0xc010f4ce 0x12 load address 0x0010f4ce
+ 0xc010f696 0x12 load address 0x0010f696
.text._ZN6VectorIP6DeviceEixEj
- 0xc010f4ce 0x12 Core/kmain.wtf.o
- 0xc010f4ce Vector<Device*>::operator[](unsigned int)
+ 0xc010f696 0x12 Core/kmain.wtf.o
+ 0xc010f696 Vector<Device*>::operator[](unsigned int)
.text._ZN6VectorIP11BlockDeviceE4sizeEv
- 0xc010f4e0 0xb load address 0x0010f4e0
+ 0xc010f6a8 0xb load address 0x0010f6a8
.text._ZN6VectorIP11BlockDeviceE4sizeEv
- 0xc010f4e0 0xb Core/kmain.wtf.o
- 0xc010f4e0 Vector<BlockDevice*>::size()
+ 0xc010f6a8 0xb Core/kmain.wtf.o
+ 0xc010f6a8 Vector<BlockDevice*>::size()
.text._ZN6VectorIP11BlockDeviceEixEj
- 0xc010f4ec 0x12 load address 0x0010f4ec
+ 0xc010f6b4 0x12 load address 0x0010f6b4
.text._ZN6VectorIP11BlockDeviceEixEj
- 0xc010f4ec 0x12 Core/kmain.wtf.o
- 0xc010f4ec Vector<BlockDevice*>::operator[](unsigned int)
+ 0xc010f6b4 0x12 Core/kmain.wtf.o
+ 0xc010f6b4 Vector<BlockDevice*>::operator[](unsigned int)
.text._ZN6VectorIP9PartitionE4sizeEv
- 0xc010f4fe 0xb load address 0x0010f4fe
+ 0xc010f6c6 0xb load address 0x0010f6c6
.text._ZN6VectorIP9PartitionE4sizeEv
- 0xc010f4fe 0xb Core/kmain.wtf.o
- 0xc010f4fe Vector<Partition*>::size()
+ 0xc010f6c6 0xb Core/kmain.wtf.o
+ 0xc010f6c6 Vector<Partition*>::size()
.text._ZN6VectorIP9PartitionEixEj
- 0xc010f50a 0x12 load address 0x0010f50a
+ 0xc010f6d2 0x12 load address 0x0010f6d2
.text._ZN6VectorIP9PartitionEixEj
- 0xc010f50a 0x12 Core/kmain.wtf.o
- 0xc010f50a Vector<Partition*>::operator[](unsigned int)
+ 0xc010f6d2 0x12 Core/kmain.wtf.o
+ 0xc010f6d2 Vector<Partition*>::operator[](unsigned int)
-.text._ZnwjPv 0xc010f51c 0x8 load address 0x0010f51c
- .text._ZnwjPv 0xc010f51c 0x8 MemoryManager/PhysMem.ns.o
- 0xc010f51c operator new(unsigned int, void*)
+.text._ZnwjPv 0xc010f6e4 0x8 load address 0x0010f6e4
+ .text._ZnwjPv 0xc010f6e4 0x8 MemoryManager/PhysMem.ns.o
+ 0xc010f6e4 operator new(unsigned int, void*)
.text._ZN6VectorIP6DeviceEC1Ev
- 0xc010f524 0x18 load address 0x0010f524
+ 0xc010f6ec 0x18 load address 0x0010f6ec
.text._ZN6VectorIP6DeviceEC1Ev
- 0xc010f524 0x18 DeviceManager/Dev.ns.o
- 0xc010f524 Vector<Device*>::Vector()
+ 0xc010f6ec 0x18 DeviceManager/Dev.ns.o
+ 0xc010f6ec Vector<Device*>::Vector()
.text._ZN6VectorIP6DeviceE4pushES1_
- 0xc010f53c 0x91 load address 0x0010f53c
+ 0xc010f704 0x91 load address 0x0010f704
.text._ZN6VectorIP6DeviceE4pushES1_
- 0xc010f53c 0x91 DeviceManager/Dev.ns.o
- 0xc010f53c Vector<Device*>::push(Device*)
+ 0xc010f704 0x91 DeviceManager/Dev.ns.o
+ 0xc010f704 Vector<Device*>::push(Device*)
.text._ZN6VectorIP6DeviceE4backEv
- 0xc010f5ce 0x19 load address 0x0010f5ce
+ 0xc010f796 0x19 load address 0x0010f796
.text._ZN6VectorIP6DeviceE4backEv
- 0xc010f5ce 0x19 DeviceManager/Dev.ns.o
- 0xc010f5ce Vector<Device*>::back()
+ 0xc010f796 0x19 DeviceManager/Dev.ns.o
+ 0xc010f796 Vector<Device*>::back()
.text._ZN6VectorIP6DeviceE3popEv
- 0xc010f5e8 0x6d load address 0x0010f5e8
+ 0xc010f7b0 0x6d load address 0x0010f7b0
.text._ZN6VectorIP6DeviceE3popEv
- 0xc010f5e8 0x6d DeviceManager/Dev.ns.o
- 0xc010f5e8 Vector<Device*>::pop()
+ 0xc010f7b0 0x6d DeviceManager/Dev.ns.o
+ 0xc010f7b0 Vector<Device*>::pop()
.text._ZN6VectorIP6DeviceEC1ERKS2_
- 0xc010f656 0x7f load address 0x0010f656
+ 0xc010f81e 0x7f load address 0x0010f81e
.text._ZN6VectorIP6DeviceEC1ERKS2_
- 0xc010f656 0x7f DeviceManager/Dev.ns.o
- 0xc010f656 Vector<Device*>::Vector(Vector<Device*> const&)
+ 0xc010f81e 0x7f DeviceManager/Dev.ns.o
+ 0xc010f81e Vector<Device*>::Vector(Vector<Device*> const&)
.text._ZN5wcharaSEj
- 0xc010f6d6 0x10 load address 0x0010f6d6
+ 0xc010f89e 0x10 load address 0x0010f89e
.text._ZN5wcharaSEj
- 0xc010f6d6 0x10 DeviceManager/Kbd.ns.o
- 0xc010f6d6 wchar::operator=(unsigned int)
+ 0xc010f89e 0x10 DeviceManager/Kbd.ns.o
+ 0xc010f89e wchar::operator=(unsigned int)
.text._ZN5wcharcvjEv
- 0xc010f6e6 0xa load address 0x0010f6e6
+ 0xc010f8ae 0xa load address 0x0010f8ae
.text._ZN5wcharcvjEv
- 0xc010f6e6 0xa DeviceManager/Kbd.ns.o
- 0xc010f6e6 wchar::operator unsigned int()
+ 0xc010f8ae 0xa DeviceManager/Kbd.ns.o
+ 0xc010f8ae wchar::operator unsigned int()
.text._ZN3Kbd10keypress_tC1Ev
- 0xc010f6f0 0x33 load address 0x0010f6f0
+ 0xc010f8b8 0x33 load address 0x0010f8b8
.text._ZN3Kbd10keypress_tC1Ev
- 0xc010f6f0 0x33 DeviceManager/Kbd.ns.o
- 0xc010f6f0 Kbd::keypress_t::keypress_t()
+ 0xc010f8b8 0x33 DeviceManager/Kbd.ns.o
+ 0xc010f8b8 Kbd::keypress_t::keypress_t()
-.text._ZdlPv 0xc010f723 0x13 load address 0x0010f723
- .text._ZdlPv 0xc010f723 0x13 TaskManager/Process.class.o
- 0xc010f723 operator delete(void*)
+.text._ZdlPv 0xc010f8eb 0x13 load address 0x0010f8eb
+ .text._ZdlPv 0xc010f8eb 0x13 TaskManager/Process.class.o
+ 0xc010f8eb operator delete(void*)
.text._ZN6VectorIP6ThreadEC1Ev
- 0xc010f736 0x18 load address 0x0010f736
+ 0xc010f8fe 0x18 load address 0x0010f8fe
.text._ZN6VectorIP6ThreadEC1Ev
- 0xc010f736 0x18 TaskManager/Process.class.o
- 0xc010f736 Vector<Thread*>::Vector()
+ 0xc010f8fe 0x18 TaskManager/Process.class.o
+ 0xc010f8fe Vector<Thread*>::Vector()
.text._ZN6VectorIP6ThreadED1Ev
- 0xc010f74e 0x27 load address 0x0010f74e
+ 0xc010f916 0x27 load address 0x0010f916
.text._ZN6VectorIP6ThreadED1Ev
- 0xc010f74e 0x27 TaskManager/Process.class.o
- 0xc010f74e Vector<Thread*>::~Vector()
+ 0xc010f916 0x27 TaskManager/Process.class.o
+ 0xc010f916 Vector<Thread*>::~Vector()
.text._ZN6VectorIP6ThreadE5emptyEv
- 0xc010f776 0x10 load address 0x0010f776
+ 0xc010f93e 0x10 load address 0x0010f93e
.text._ZN6VectorIP6ThreadE5emptyEv
- 0xc010f776 0x10 TaskManager/Process.class.o
- 0xc010f776 Vector<Thread*>::empty()
+ 0xc010f93e 0x10 TaskManager/Process.class.o
+ 0xc010f93e Vector<Thread*>::empty()
.text._ZN6VectorIP6ThreadE4backEv
- 0xc010f786 0x19 load address 0x0010f786
+ 0xc010f94e 0x19 load address 0x0010f94e
.text._ZN6VectorIP6ThreadE4backEv
- 0xc010f786 0x19 TaskManager/Process.class.o
- 0xc010f786 Vector<Thread*>::back()
+ 0xc010f94e 0x19 TaskManager/Process.class.o
+ 0xc010f94e Vector<Thread*>::back()
.text._ZN6VectorIP6ThreadE3popEv
- 0xc010f7a0 0x6d load address 0x0010f7a0
+ 0xc010f968 0x6d load address 0x0010f968
.text._ZN6VectorIP6ThreadE3popEv
- 0xc010f7a0 0x6d TaskManager/Process.class.o
- 0xc010f7a0 Vector<Thread*>::pop()
+ 0xc010f968 0x6d TaskManager/Process.class.o
+ 0xc010f968 Vector<Thread*>::pop()
.text._ZN6VectorIP6ThreadE4pushES1_
- 0xc010f80e 0x91 load address 0x0010f80e
+ 0xc010f9d6 0x91 load address 0x0010f9d6
.text._ZN6VectorIP6ThreadE4pushES1_
- 0xc010f80e 0x91 TaskManager/Process.class.o
- 0xc010f80e Vector<Thread*>::push(Thread*)
+ 0xc010f9d6 0x91 TaskManager/Process.class.o
+ 0xc010f9d6 Vector<Thread*>::push(Thread*)
.text._ZN6VectorIP6ThreadEixEj
- 0xc010f8a0 0x12 load address 0x0010f8a0
+ 0xc010fa68 0x12 load address 0x0010fa68
.text._ZN6VectorIP6ThreadEixEj
- 0xc010f8a0 0x12 TaskManager/Process.class.o
- 0xc010f8a0 Vector<Thread*>::operator[](unsigned int)
+ 0xc010fa68 0x12 TaskManager/Process.class.o
+ 0xc010fa68 Vector<Thread*>::operator[](unsigned int)
.text._ZN6VectorIP6ThreadE4sizeEv
- 0xc010f8b2 0xb load address 0x0010f8b2
+ 0xc010fa7a 0xb load address 0x0010fa7a
.text._ZN6VectorIP6ThreadE4sizeEv
- 0xc010f8b2 0xb TaskManager/Process.class.o
- 0xc010f8b2 Vector<Thread*>::size()
+ 0xc010fa7a 0xb TaskManager/Process.class.o
+ 0xc010fa7a Vector<Thread*>::size()
.text._ZN6Thread10irqHappensEh
- 0xc010f8be 0x38 load address 0x0010f8be
+ 0xc010fa86 0x38 load address 0x0010fa86
.text._ZN6Thread10irqHappensEh
- 0xc010f8be 0x38 TaskManager/Task.ns.o
- 0xc010f8be Thread::irqHappens(unsigned char)
+ 0xc010fa86 0x38 TaskManager/Task.ns.o
+ 0xc010fa86 Thread::irqHappens(unsigned char)
.text._ZN6VectorIP7ProcessEC1Ev
- 0xc010f8f6 0x18 load address 0x0010f8f6
+ 0xc010fabe 0x18 load address 0x0010fabe
.text._ZN6VectorIP7ProcessEC1Ev
- 0xc010f8f6 0x18 TaskManager/Task.ns.o
- 0xc010f8f6 Vector<Process*>::Vector()
+ 0xc010fabe 0x18 TaskManager/Task.ns.o
+ 0xc010fabe Vector<Process*>::Vector()
.text._ZN6VectorIP6ThreadE5clearEv
- 0xc010f90e 0x3a load address 0x0010f90e
+ 0xc010fad6 0x3a load address 0x0010fad6
.text._ZN6VectorIP6ThreadE5clearEv
- 0xc010f90e 0x3a TaskManager/Task.ns.o
- 0xc010f90e Vector<Thread*>::clear()
+ 0xc010fad6 0x3a TaskManager/Task.ns.o
+ 0xc010fad6 Vector<Thread*>::clear()
.text._ZN6VectorIP7ProcessE5clearEv
- 0xc010f948 0x3a load address 0x0010f948
+ 0xc010fb10 0x3a load address 0x0010fb10
.text._ZN6VectorIP7ProcessE5clearEv
- 0xc010f948 0x3a TaskManager/Task.ns.o
- 0xc010f948 Vector<Process*>::clear()
+ 0xc010fb10 0x3a TaskManager/Task.ns.o
+ 0xc010fb10 Vector<Process*>::clear()
.text._ZN6VectorIP7ProcessE4sizeEv
- 0xc010f982 0xb load address 0x0010f982
+ 0xc010fb4a 0xb load address 0x0010fb4a
.text._ZN6VectorIP7ProcessE4sizeEv
- 0xc010f982 0xb TaskManager/Task.ns.o
- 0xc010f982 Vector<Process*>::size()
+ 0xc010fb4a 0xb TaskManager/Task.ns.o
+ 0xc010fb4a Vector<Process*>::size()
.text._ZN6VectorIP7ProcessEixEj
- 0xc010f98e 0x12 load address 0x0010f98e
+ 0xc010fb56 0x12 load address 0x0010fb56
.text._ZN6VectorIP7ProcessEixEj
- 0xc010f98e 0x12 TaskManager/Task.ns.o
- 0xc010f98e Vector<Process*>::operator[](unsigned int)
+ 0xc010fb56 0x12 TaskManager/Task.ns.o
+ 0xc010fb56 Vector<Process*>::operator[](unsigned int)
.text._ZN6VectorIP7ProcessE4pushES1_
- 0xc010f9a0 0x91 load address 0x0010f9a0
+ 0xc010fb68 0x91 load address 0x0010fb68
.text._ZN6VectorIP7ProcessE4pushES1_
- 0xc010f9a0 0x91 TaskManager/Task.ns.o
- 0xc010f9a0 Vector<Process*>::push(Process*)
+ 0xc010fb68 0x91 TaskManager/Task.ns.o
+ 0xc010fb68 Vector<Process*>::push(Process*)
.text._ZN6VectorIP7ProcessE4backEv
- 0xc010fa32 0x19 load address 0x0010fa32
+ 0xc010fbfa 0x19 load address 0x0010fbfa
.text._ZN6VectorIP7ProcessE4backEv
- 0xc010fa32 0x19 TaskManager/Task.ns.o
- 0xc010fa32 Vector<Process*>::back()
+ 0xc010fbfa 0x19 TaskManager/Task.ns.o
+ 0xc010fbfa Vector<Process*>::back()
.text._ZN6VectorIP7ProcessE3popEv
- 0xc010fa4c 0x6d load address 0x0010fa4c
+ 0xc010fc14 0x6d load address 0x0010fc14
.text._ZN6VectorIP7ProcessE3popEv
- 0xc010fa4c 0x6d TaskManager/Task.ns.o
- 0xc010fa4c Vector<Process*>::pop()
+ 0xc010fc14 0x6d TaskManager/Task.ns.o
+ 0xc010fc14 Vector<Process*>::pop()
.text._ZN6VectorIP7ProcessE5emptyEv
- 0xc010faba 0x10 load address 0x0010faba
+ 0xc010fc82 0x10 load address 0x0010fc82
.text._ZN6VectorIP7ProcessE5emptyEv
- 0xc010faba 0x10 TaskManager/Task.ns.o
- 0xc010faba Vector<Process*>::empty()
+ 0xc010fc82 0x10 TaskManager/Task.ns.o
+ 0xc010fc82 Vector<Process*>::empty()
.text._ZN6VectorIP7ProcessED1Ev
- 0xc010faca 0x27 load address 0x0010faca
+ 0xc010fc92 0x27 load address 0x0010fc92
.text._ZN6VectorIP7ProcessED1Ev
- 0xc010faca 0x27 TaskManager/Task.ns.o
- 0xc010faca Vector<Process*>::~Vector()
+ 0xc010fc92 0x27 TaskManager/Task.ns.o
+ 0xc010fc92 Vector<Process*>::~Vector()
-.text._Znaj 0xc010faf1 0x1b load address 0x0010faf1
- .text._Znaj 0xc010faf1 0x1b VTManager/VirtualTerminal.class.o
- 0xc010faf1 operator new[](unsigned int)
+.text._Znaj 0xc010fcb9 0x1b load address 0x0010fcb9
+ .text._Znaj 0xc010fcb9 0x1b VTManager/VirtualTerminal.class.o
+ 0xc010fcb9 operator new[](unsigned int)
.text._ZN3chrC1Ev
- 0xc010fb0c 0x16 load address 0x0010fb0c
+ 0xc010fcd4 0x16 load address 0x0010fcd4
.text._ZN3chrC1Ev
- 0xc010fb0c 0x16 VTManager/VirtualTerminal.class.o
- 0xc010fb0c chr::chr()
+ 0xc010fcd4 0x16 VTManager/VirtualTerminal.class.o
+ 0xc010fcd4 chr::chr()
.text._ZN6VectorIN3Kbd10keypress_tEEC1Ev
- 0xc010fb22 0x18 load address 0x0010fb22
+ 0xc010fcea 0x18 load address 0x0010fcea
.text._ZN6VectorIN3Kbd10keypress_tEEC1Ev
- 0xc010fb22 0x18 VTManager/VirtualTerminal.class.o
- 0xc010fb22 Vector<Kbd::keypress_t>::Vector()
+ 0xc010fcea 0x18 VTManager/VirtualTerminal.class.o
+ 0xc010fcea Vector<Kbd::keypress_t>::Vector()
.text._ZN6VectorIN3Kbd10keypress_tEED1Ev
- 0xc010fb3a 0x27 load address 0x0010fb3a
+ 0xc010fd02 0x27 load address 0x0010fd02
.text._ZN6VectorIN3Kbd10keypress_tEED1Ev
- 0xc010fb3a 0x27 VTManager/VirtualTerminal.class.o
- 0xc010fb3a Vector<Kbd::keypress_t>::~Vector()
+ 0xc010fd02 0x27 VTManager/VirtualTerminal.class.o
+ 0xc010fd02 Vector<Kbd::keypress_t>::~Vector()
.text._ZN6VectorIN3Kbd10keypress_tEE4pushES1_
- 0xc010fb62 0x99 load address 0x0010fb62
+ 0xc010fd2a 0xaf load address 0x0010fd2a
.text._ZN6VectorIN3Kbd10keypress_tEE4pushES1_
- 0xc010fb62 0x99 VTManager/VirtualTerminal-kbd.class.o
- 0xc010fb62 Vector<Kbd::keypress_t>::push(Kbd::keypress_t)
+ 0xc010fd2a 0xaf VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fd2a Vector<Kbd::keypress_t>::push(Kbd::keypress_t)
.text._ZN6VectorIN3Kbd10keypress_tEE5emptyEv
- 0xc010fbfc 0x10 load address 0x0010fbfc
+ 0xc010fdda 0x10 load address 0x0010fdda
.text._ZN6VectorIN3Kbd10keypress_tEE5emptyEv
- 0xc010fbfc 0x10 VTManager/VirtualTerminal-kbd.class.o
- 0xc010fbfc Vector<Kbd::keypress_t>::empty()
+ 0xc010fdda 0x10 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fdda Vector<Kbd::keypress_t>::empty()
.text._ZN6VectorIN3Kbd10keypress_tEEixEj
- 0xc010fc0c 0x12 load address 0x0010fc0c
+ 0xc010fdea 0x19 load address 0x0010fdea
.text._ZN6VectorIN3Kbd10keypress_tEEixEj
- 0xc010fc0c 0x12 VTManager/VirtualTerminal-kbd.class.o
- 0xc010fc0c Vector<Kbd::keypress_t>::operator[](unsigned int)
+ 0xc010fdea 0x19 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fdea Vector<Kbd::keypress_t>::operator[](unsigned int)
.text._ZN6VectorIN3Kbd10keypress_tEE4sizeEv
- 0xc010fc1e 0xb load address 0x0010fc1e
+ 0xc010fe04 0xb load address 0x0010fe04
.text._ZN6VectorIN3Kbd10keypress_tEE4sizeEv
- 0xc010fc1e 0xb VTManager/VirtualTerminal-kbd.class.o
- 0xc010fc1e Vector<Kbd::keypress_t>::size()
+ 0xc010fe04 0xb VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fe04 Vector<Kbd::keypress_t>::size()
.text._ZN3Kbd10keypress_tD1Ev
- 0xc010fc2a 0x5 load address 0x0010fc2a
+ 0xc010fe10 0x5 load address 0x0010fe10
.text._ZN3Kbd10keypress_tD1Ev
- 0xc010fc2a 0x5 VTManager/VirtualTerminal-kbd.class.o
- 0xc010fc2a Kbd::keypress_t::~keypress_t()
+ 0xc010fe10 0x5 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fe10 Kbd::keypress_t::~keypress_t()
.text._ZN6VectorIN3Kbd10keypress_tEE3popEv
- 0xc010fc30 0x86 load address 0x0010fc30
+ 0xc010fe16 0x98 load address 0x0010fe16
.text._ZN6VectorIN3Kbd10keypress_tEE3popEv
- 0xc010fc30 0x86 VTManager/VirtualTerminal-kbd.class.o
- 0xc010fc30 Vector<Kbd::keypress_t>::pop()
+ 0xc010fe16 0x98 VTManager/VirtualTerminal-kbd.class.o
+ 0xc010fe16 Vector<Kbd::keypress_t>::pop()
.text._ZN6VectorIP15VirtualTerminalEC1Ev
- 0xc010fcb6 0x18 load address 0x0010fcb6
+ 0xc010feae 0x18 load address 0x0010feae
.text._ZN6VectorIP15VirtualTerminalEC1Ev
- 0xc010fcb6 0x18 VTManager/VT.ns.o
- 0xc010fcb6 Vector<VirtualTerminal*>::Vector()
+ 0xc010feae 0x18 VTManager/VT.ns.o
+ 0xc010feae Vector<VirtualTerminal*>::Vector()
.text._ZN6VectorIP15VirtualTerminalE4pushES1_
- 0xc010fcce 0x91 load address 0x0010fcce
+ 0xc010fec6 0x91 load address 0x0010fec6
.text._ZN6VectorIP15VirtualTerminalE4pushES1_
- 0xc010fcce 0x91 VTManager/VT.ns.o
- 0xc010fcce Vector<VirtualTerminal*>::push(VirtualTerminal*)
+ 0xc010fec6 0x91 VTManager/VT.ns.o
+ 0xc010fec6 Vector<VirtualTerminal*>::push(VirtualTerminal*)
.text._ZN6VectorIP15VirtualTerminalE4sizeEv
- 0xc010fd60 0xb load address 0x0010fd60
+ 0xc010ff58 0xb load address 0x0010ff58
.text._ZN6VectorIP15VirtualTerminalE4sizeEv
- 0xc010fd60 0xb VTManager/VT.ns.o
- 0xc010fd60 Vector<VirtualTerminal*>::size()
+ 0xc010ff58 0xb VTManager/VT.ns.o
+ 0xc010ff58 Vector<VirtualTerminal*>::size()
.text._ZN6VectorIP15VirtualTerminalEixEj
- 0xc010fd6c 0x12 load address 0x0010fd6c
+ 0xc010ff64 0x12 load address 0x0010ff64
.text._ZN6VectorIP15VirtualTerminalEixEj
- 0xc010fd6c 0x12 VTManager/VT.ns.o
- 0xc010fd6c Vector<VirtualTerminal*>::operator[](unsigned int)
+ 0xc010ff64 0x12 VTManager/VT.ns.o
+ 0xc010ff64 Vector<VirtualTerminal*>::operator[](unsigned int)
.text._ZN6VectorIP15VirtualTerminalE4backEv
- 0xc010fd7e 0x19 load address 0x0010fd7e
+ 0xc010ff76 0x19 load address 0x0010ff76
.text._ZN6VectorIP15VirtualTerminalE4backEv
- 0xc010fd7e 0x19 VTManager/VT.ns.o
- 0xc010fd7e Vector<VirtualTerminal*>::back()
+ 0xc010ff76 0x19 VTManager/VT.ns.o
+ 0xc010ff76 Vector<VirtualTerminal*>::back()
.text._ZN6VectorIP15VirtualTerminalE3popEv
- 0xc010fd98 0x6d load address 0x0010fd98
+ 0xc010ff90 0x6d load address 0x0010ff90
.text._ZN6VectorIP15VirtualTerminalE3popEv
- 0xc010fd98 0x6d VTManager/VT.ns.o
- 0xc010fd98 Vector<VirtualTerminal*>::pop()
+ 0xc010ff90 0x6d VTManager/VT.ns.o
+ 0xc010ff90 Vector<VirtualTerminal*>::pop()
.text._ZN6VectorIP15VirtualTerminalED1Ev
- 0xc010fe06 0x27 load address 0x0010fe06
+ 0xc010fffe 0x27 load address 0x0010fffe
.text._ZN6VectorIP15VirtualTerminalED1Ev
- 0xc010fe06 0x27 VTManager/VT.ns.o
- 0xc010fe06 Vector<VirtualTerminal*>::~Vector()
+ 0xc010fffe 0x27 VTManager/VT.ns.o
+ 0xc010fffe Vector<VirtualTerminal*>::~Vector()
.text._ZN5wchareqEj
- 0xc010fe2e 0x10 load address 0x0010fe2e
+ 0xc0110026 0x10 load address 0x00110026
.text._ZN5wchareqEj
- 0xc010fe2e 0x10 Library/String.class.o
- 0xc010fe2e wchar::operator==(unsigned int)
+ 0xc0110026 0x10 Library/String.class.o
+ 0xc0110026 wchar::operator==(unsigned int)
.text._ZN6VectorI6StringEC1Ev
- 0xc010fe3e 0x18 load address 0x0010fe3e
+ 0xc0110036 0x18 load address 0x00110036
.text._ZN6VectorI6StringEC1Ev
- 0xc010fe3e 0x18 Library/String.class.o
- 0xc010fe3e Vector<String>::Vector()
+ 0xc0110036 0x18 Library/String.class.o
+ 0xc0110036 Vector<String>::Vector()
.text._ZN6VectorI6StringE4pushES0_
- 0xc010fe56 0x9b load address 0x0010fe56
+ 0xc011004e 0x9b load address 0x0011004e
.text._ZN6VectorI6StringE4pushES0_
- 0xc010fe56 0x9b Library/String.class.o
- 0xc010fe56 Vector<String>::push(String)
+ 0xc011004e 0x9b Library/String.class.o
+ 0xc011004e Vector<String>::push(String)
.text._ZN6VectorI6StringE4backEv
- 0xc010fef2 0x19 load address 0x0010fef2
+ 0xc01100ea 0x19 load address 0x001100ea
.text._ZN6VectorI6StringE4backEv
- 0xc010fef2 0x19 Library/String.class.o
- 0xc010fef2 Vector<String>::back()
+ 0xc01100ea 0x19 Library/String.class.o
+ 0xc01100ea Vector<String>::back()
.text._ZN6VectorIP11BlockDeviceEC1Ev
- 0xc010ff0c 0x18 load address 0x0010ff0c
+ 0xc0110104 0x18 load address 0x00110104
.text._ZN6VectorIP11BlockDeviceEC1Ev
- 0xc010ff0c 0x18 VFS/Part.ns.o
- 0xc010ff0c Vector<BlockDevice*>::Vector()
+ 0xc0110104 0x18 VFS/Part.ns.o
+ 0xc0110104 Vector<BlockDevice*>::Vector()
.text._ZN6VectorIP9PartitionEC1Ev
- 0xc010ff24 0x18 load address 0x0010ff24
+ 0xc011011c 0x18 load address 0x0011011c
.text._ZN6VectorIP9PartitionEC1Ev
- 0xc010ff24 0x18 VFS/Part.ns.o
- 0xc010ff24 Vector<Partition*>::Vector()
+ 0xc011011c 0x18 VFS/Part.ns.o
+ 0xc011011c Vector<Partition*>::Vector()
.text._ZN6VectorIP9PartitionE4pushES1_
- 0xc010ff3c 0x91 load address 0x0010ff3c
+ 0xc0110134 0x91 load address 0x00110134
.text._ZN6VectorIP9PartitionE4pushES1_
- 0xc010ff3c 0x91 VFS/Part.ns.o
- 0xc010ff3c Vector<Partition*>::push(Partition*)
+ 0xc0110134 0x91 VFS/Part.ns.o
+ 0xc0110134 Vector<Partition*>::push(Partition*)
.text._ZN6VectorIP11BlockDeviceE4pushES1_
- 0xc010ffce 0x91 load address 0x0010ffce
+ 0xc01101c6 0x91 load address 0x001101c6
.text._ZN6VectorIP11BlockDeviceE4pushES1_
- 0xc010ffce 0x91 VFS/Part.ns.o
- 0xc010ffce Vector<BlockDevice*>::push(BlockDevice*)
+ 0xc01101c6 0x91 VFS/Part.ns.o
+ 0xc01101c6 Vector<BlockDevice*>::push(BlockDevice*)
.text._ZN6VectorIP9PartitionE4backEv
- 0xc0110060 0x19 load address 0x00110060
+ 0xc0110258 0x19 load address 0x00110258
.text._ZN6VectorIP9PartitionE4backEv
- 0xc0110060 0x19 VFS/Part.ns.o
- 0xc0110060 Vector<Partition*>::back()
+ 0xc0110258 0x19 VFS/Part.ns.o
+ 0xc0110258 Vector<Partition*>::back()
.text._ZN6VectorIP9PartitionE3popEv
- 0xc011007a 0x6d load address 0x0011007a
+ 0xc0110272 0x6d load address 0x00110272
.text._ZN6VectorIP9PartitionE3popEv
- 0xc011007a 0x6d VFS/Part.ns.o
- 0xc011007a Vector<Partition*>::pop()
+ 0xc0110272 0x6d VFS/Part.ns.o
+ 0xc0110272 Vector<Partition*>::pop()
.text._ZN6VectorIP11BlockDeviceE5emptyEv
- 0xc01100e8 0x10 load address 0x001100e8
+ 0xc01102e0 0x10 load address 0x001102e0
.text._ZN6VectorIP11BlockDeviceE5emptyEv
- 0xc01100e8 0x10 VFS/Part.ns.o
- 0xc01100e8 Vector<BlockDevice*>::empty()
+ 0xc01102e0 0x10 VFS/Part.ns.o
+ 0xc01102e0 Vector<BlockDevice*>::empty()
.text._ZN6VectorIP11BlockDeviceE4backEv
- 0xc01100f8 0x19 load address 0x001100f8
+ 0xc01102f0 0x19 load address 0x001102f0
.text._ZN6VectorIP11BlockDeviceE4backEv
- 0xc01100f8 0x19 VFS/Part.ns.o
- 0xc01100f8 Vector<BlockDevice*>::back()
+ 0xc01102f0 0x19 VFS/Part.ns.o
+ 0xc01102f0 Vector<BlockDevice*>::back()
.text._ZN6VectorIP11BlockDeviceE3popEv
- 0xc0110112 0x6d load address 0x00110112
+ 0xc011030a 0x6d load address 0x0011030a
.text._ZN6VectorIP11BlockDeviceE3popEv
- 0xc0110112 0x6d VFS/Part.ns.o
- 0xc0110112 Vector<BlockDevice*>::pop()
+ 0xc011030a 0x6d VFS/Part.ns.o
+ 0xc011030a Vector<BlockDevice*>::pop()
.text._ZN6VectorIP11BlockDeviceED1Ev
- 0xc0110180 0x27 load address 0x00110180
+ 0xc0110378 0x27 load address 0x00110378
.text._ZN6VectorIP11BlockDeviceED1Ev
- 0xc0110180 0x27 VFS/Part.ns.o
- 0xc0110180 Vector<BlockDevice*>::~Vector()
+ 0xc0110378 0x27 VFS/Part.ns.o
+ 0xc0110378 Vector<BlockDevice*>::~Vector()
.text._ZN6VectorIP9PartitionED1Ev
- 0xc01101a8 0x27 load address 0x001101a8
+ 0xc01103a0 0x27 load address 0x001103a0
.text._ZN6VectorIP9PartitionED1Ev
- 0xc01101a8 0x27 VFS/Part.ns.o
- 0xc01101a8 Vector<Partition*>::~Vector()
+ 0xc01103a0 0x27 VFS/Part.ns.o
+ 0xc01103a0 Vector<Partition*>::~Vector()
+
+.text._ZN6Thread14enterInterruptEv
+ 0xc01103c8 0xc load address 0x001103c8
+ .text._ZN6Thread14enterInterruptEv
+ 0xc01103c8 0xc SyscallManager/IDT.ns.o
+ 0xc01103c8 Thread::enterInterrupt()
+
+.text._ZN6Thread13exitInterruptEv
+ 0xc01103d4 0xc load address 0x001103d4
+ .text._ZN6Thread13exitInterruptEv
+ 0xc01103d4 0xc SyscallManager/IDT.ns.o
+ 0xc01103d4 Thread::exitInterrupt()
.text._ZN8KeyboardC2Ev
- 0xc01101d0 0x1c load address 0x001101d0
+ 0xc01103e0 0x1c load address 0x001103e0
.text._ZN8KeyboardC2Ev
- 0xc01101d0 0x1c Devices/Keyboard/PS2Keyboard.class.o
- 0xc01101d0 Keyboard::Keyboard()
+ 0xc01103e0 0x1c Devices/Keyboard/PS2Keyboard.class.o
+ 0xc01103e0 Keyboard::Keyboard()
.text._ZN11BlockDevice8chsToLBAEjjj
- 0xc01101ec 0xf load address 0x001101ec
+ 0xc01103fc 0xf load address 0x001103fc
.text._ZN11BlockDevice8chsToLBAEjjj
- 0xc01101ec 0xf Devices/Floppy/FloppyDrive.class.o
- 0xc01101ec BlockDevice::chsToLBA(unsigned int, unsigned int, unsigned int)
+ 0xc01103fc 0xf Devices/Floppy/FloppyDrive.class.o
+ 0xc01103fc BlockDevice::chsToLBA(unsigned int, unsigned int, unsigned int)
.text._ZN11BlockDeviceC2Ev
- 0xc01101fc 0x1c load address 0x001101fc
+ 0xc011040c 0x1c load address 0x0011040c
.text._ZN11BlockDeviceC2Ev
- 0xc01101fc 0x1c Devices/Floppy/FloppyDrive.class.o
- 0xc01101fc BlockDevice::BlockDevice()
+ 0xc011040c 0x1c Devices/Floppy/FloppyDrive.class.o
+ 0xc011040c BlockDevice::BlockDevice()
-.rodata 0xc0111000 0xe07 load address 0x00111000
+.rodata 0xc0111000 0xe67 load address 0x00111000
*(.rodata)
.rodata 0xc0111000 0x782 Core/kmain.wtf.o
.rodata 0xc0111782 0x4f Core/Sys.ns.o
@@ -1150,73 +1165,74 @@ Linker script and memory map
*fill* 0xc011182d 0x3 00
.rodata 0xc0111830 0x6f MemoryManager/PageAlloc.ns.o
.rodata 0xc011189f 0x9 DeviceManager/Kbd.ns.o
- .rodata 0xc01118a8 0x19 VTManager/VirtualTerminal.class.o
- .rodata 0xc01118c1 0x9 VTManager/VirtualTerminal-kbd.class.o
- .rodata 0xc01118ca 0x5 Library/String.class.o
- .rodata 0xc01118cf 0x1be Library/wchar.class.o
- *fill* 0xc0111a8d 0x13 00
- .rodata 0xc0111aa0 0x240 SyscallManager/IDT.ns.o
- .rodata 0xc0111ce0 0x30 Devices/Display/VGATextOutput.class.o
- .rodata 0xc0111d10 0x23 Devices/Keyboard/PS2Keyboard.class.o
- .rodata 0xc0111d33 0x39 Devices/Floppy/FloppyController.class.o
- .rodata 0xc0111d6c 0x78 Devices/Floppy/FloppyDrive.class.o
- .rodata 0xc0111de4 0x23 Devices/Timer.class.o
+ .rodata 0xc01118a8 0x63 TaskManager/Thread.class.o
+ .rodata 0xc011190b 0x19 VTManager/VirtualTerminal.class.o
+ .rodata 0xc0111924 0x9 VTManager/VirtualTerminal-kbd.class.o
+ .rodata 0xc011192d 0x5 Library/String.class.o
+ .rodata 0xc0111932 0x1be Library/wchar.class.o
+ *fill* 0xc0111af0 0x10 00
+ .rodata 0xc0111b00 0x240 SyscallManager/IDT.ns.o
+ .rodata 0xc0111d40 0x30 Devices/Display/VGATextOutput.class.o
+ .rodata 0xc0111d70 0x23 Devices/Keyboard/PS2Keyboard.class.o
+ .rodata 0xc0111d93 0x39 Devices/Floppy/FloppyController.class.o
+ .rodata 0xc0111dcc 0x78 Devices/Floppy/FloppyDrive.class.o
+ .rodata 0xc0111e44 0x23 Devices/Timer.class.o
.rodata._ZTV7Display
- 0xc0111e20 0x28 load address 0x00111e20
+ 0xc0111e80 0x28 load address 0x00111e80
.rodata._ZTV7Display
- 0xc0111e20 0x28 Core/kmain.wtf.o
- 0xc0111e20 vtable for Display
+ 0xc0111e80 0x28 Core/kmain.wtf.o
+ 0xc0111e80 vtable for Display
.rodata._ZTV6Device
- 0xc0111e48 0x14 load address 0x00111e48
+ 0xc0111ea8 0x14 load address 0x00111ea8
.rodata._ZTV6Device
- 0xc0111e48 0x14 Core/kmain.wtf.o
- 0xc0111e48 vtable for Device
+ 0xc0111ea8 0x14 Core/kmain.wtf.o
+ 0xc0111ea8 vtable for Device
.rodata._ZTV13VGATextOutput
- 0xc0111e60 0x28 load address 0x00111e60
+ 0xc0111ec0 0x28 load address 0x00111ec0
.rodata._ZTV13VGATextOutput
- 0xc0111e60 0x28 Devices/Display/VGATextOutput.class.o
- 0xc0111e60 vtable for VGATextOutput
+ 0xc0111ec0 0x28 Devices/Display/VGATextOutput.class.o
+ 0xc0111ec0 vtable for VGATextOutput
.rodata._ZTV11PS2Keyboard
- 0xc0111e88 0x18 load address 0x00111e88
+ 0xc0111ee8 0x18 load address 0x00111ee8
.rodata._ZTV11PS2Keyboard
- 0xc0111e88 0x18 Devices/Keyboard/PS2Keyboard.class.o
- 0xc0111e88 vtable for PS2Keyboard
+ 0xc0111ee8 0x18 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc0111ee8 vtable for PS2Keyboard
.rodata._ZTV8Keyboard
- 0xc0111ea0 0x18 load address 0x00111ea0
+ 0xc0111f00 0x18 load address 0x00111f00
.rodata._ZTV8Keyboard
- 0xc0111ea0 0x18 Devices/Keyboard/PS2Keyboard.class.o
- 0xc0111ea0 vtable for Keyboard
+ 0xc0111f00 0x18 Devices/Keyboard/PS2Keyboard.class.o
+ 0xc0111f00 vtable for Keyboard
.rodata._ZTV16FloppyController
- 0xc0111eb8 0x14 load address 0x00111eb8
+ 0xc0111f18 0x14 load address 0x00111f18
.rodata._ZTV16FloppyController
- 0xc0111eb8 0x14 Devices/Floppy/FloppyController.class.o
- 0xc0111eb8 vtable for FloppyController
+ 0xc0111f18 0x14 Devices/Floppy/FloppyController.class.o
+ 0xc0111f18 vtable for FloppyController
.rodata._ZTV11FloppyDrive
- 0xc0111ee0 0x2c load address 0x00111ee0
+ 0xc0111f40 0x2c load address 0x00111f40
.rodata._ZTV11FloppyDrive
- 0xc0111ee0 0x2c Devices/Floppy/FloppyDrive.class.o
- 0xc0111ee0 vtable for FloppyDrive
+ 0xc0111f40 0x2c Devices/Floppy/FloppyDrive.class.o
+ 0xc0111f40 vtable for FloppyDrive
.rodata._ZTV11BlockDevice
- 0xc0111f20 0x2c load address 0x00111f20
+ 0xc0111f80 0x2c load address 0x00111f80
.rodata._ZTV11BlockDevice
- 0xc0111f20 0x2c Devices/Floppy/FloppyDrive.class.o
- 0xc0111f20 vtable for BlockDevice
+ 0xc0111f80 0x2c Devices/Floppy/FloppyDrive.class.o
+ 0xc0111f80 vtable for BlockDevice
.rodata._ZTV5Timer
- 0xc0111f50 0x14 load address 0x00111f50
+ 0xc0111fb0 0x14 load address 0x00111fb0
.rodata._ZTV5Timer
- 0xc0111f50 0x14 Devices/Timer.class.o
- 0xc0111f50 vtable for Timer
+ 0xc0111fb0 0x14 Devices/Timer.class.o
+ 0xc0111fb0 vtable for Timer
-.rel.dyn 0xc0111f64 0x0 load address 0x00111f64
+.rel.dyn 0xc0111fc4 0x0 load address 0x00111fc4
.rel.text 0x00000000 0x0 Core/loader.wtf.o
.rel.text._Znwj
0x00000000 0x0 Core/loader.wtf.o
diff --git a/Source/Kernel/Melon.ke b/Source/Kernel/Melon.ke
index e5468b7..efd3603 100755
--- a/Source/Kernel/Melon.ke
+++ b/Source/Kernel/Melon.ke
Binary files differ
diff --git a/Source/Kernel/SyscallManager/IDT.ns.cpp b/Source/Kernel/SyscallManager/IDT.ns.cpp
index caa3b36..0684255 100644
--- a/Source/Kernel/SyscallManager/IDT.ns.cpp
+++ b/Source/Kernel/SyscallManager/IDT.ns.cpp
@@ -55,12 +55,14 @@ extern "C" void irq13();
extern "C" void irq14();
extern "C" void irq15();
-extern "C" void int64();
+extern "C" void int65(); //IRQ to request a task switch
+extern "C" void int66(); //IRQ to signal that thread ended
extern "C" void idt_flush(u32int);
extern "C" void interrupt_handler(registers_t regs) {
- bool doSwitch = (regs.int_no == 32 or regs.int_no == 64);
+ Task::currentThread->enterInterrupt(); //Do that so that whatever is called here can use waitIRQ
+ bool doSwitch = (regs.int_no == 32 or regs.int_no >= 65); //SYSCALLS >= 65 are task-managing-related
if (regs.int_no < 32) {
IDT::handleException(regs, regs.int_no);
} else if (regs.int_no < 48) {
@@ -70,7 +72,11 @@ extern "C" void interrupt_handler(registers_t regs) {
Dev::handleIRQ(regs, (regs.int_no - 32));
doSwitch = doSwitch or Task::IRQwakeup(regs.int_no - 32);
}
+ if (regs.int_no == 66) { //This syscall signals to kernel that thread ended.
+ Task::currentThread->finish(regs.eax);
+ }
if (doSwitch) Task::doSwitch();
+ Task::currentThread->exitInterrupt();
}
namespace IDT {
@@ -155,12 +161,13 @@ void init() {
setGate(46, (u32int)irq14, 0x08, 0x8E);
setGate(47, (u32int)irq15, 0x08, 0x8E);
- setGate(64, (u32int)int64, 0x08, 0x8E);
+ setGate(65, (u32int)int65, 0x08, 0x8E);
+ setGate(66, (u32int)int66, 0x08, 0x8E);
idt_flush((u32int)&idt_ptr);
}
-void handleException(registers_t regs, int no) {
+void handleException(registers_t regs, int no) { //TODO :: make exception handling work with task managment
asm volatile("cli;");
char* exceptions[] = {
"Division by zero", "Debug exception", "Non maskable interrupt",
diff --git a/Source/Kernel/SyscallManager/IDT.wtf.asm b/Source/Kernel/SyscallManager/IDT.wtf.asm
index 7980d13..b94612e 100644
--- a/Source/Kernel/SyscallManager/IDT.wtf.asm
+++ b/Source/Kernel/SyscallManager/IDT.wtf.asm
@@ -97,7 +97,10 @@ IRQ 13, 45
IRQ 14, 46
IRQ 15, 47
-SYSCALL 64 ; this syscall requests a task switch
+SYSCALL 64 ; this syscall is the one and only useful syscall. It does everything.
+; The next syscalls are task-managing-specific
+SYSCALL 65 ; this syscall requests a task switch
+SYSCALL 66 ; signals to kernel that thread has finished (retval in eax)
; ******************************************************************
diff --git a/Source/Kernel/TaskManager/Process.class.cpp b/Source/Kernel/TaskManager/Process.class.cpp
index 3363ab0..13af4b9 100644
--- a/Source/Kernel/TaskManager/Process.class.cpp
+++ b/Source/Kernel/TaskManager/Process.class.cpp
@@ -68,7 +68,7 @@ void Process::registerThread(Thread* t) {
void Process::threadFinishes(Thread* thread, u32int retval) {
// If it is the main thread of the process, or if it pagefaulted
- if (thread == m_threads[0] or retval == 0x0FFFFF00) {
+ if (thread == m_threads[0] or retval == E_PAGEFAULT) {
exit();
} else {
//Simply unregister thread
diff --git a/Source/Kernel/TaskManager/Process.class.h b/Source/Kernel/TaskManager/Process.class.h
index 3b05f80..581d6b1 100644
--- a/Source/Kernel/TaskManager/Process.class.h
+++ b/Source/Kernel/TaskManager/Process.class.h
@@ -12,7 +12,7 @@
#define E_PAGEFAULT 0x0FFFFF00
#define E_ABORTED 0x0FFFFF01
-#define E_EXCEPTION 0x0FFFFF02
+#define E_UNHANDLED_EXCEPTION 0x0FFFFF02
#define STACKSIZE 4096 //Can change
diff --git a/Source/Kernel/TaskManager/Task.ns.cpp b/Source/Kernel/TaskManager/Task.ns.cpp
index 89e1b09..8a26133 100644
--- a/Source/Kernel/TaskManager/Task.ns.cpp
+++ b/Source/Kernel/TaskManager/Task.ns.cpp
@@ -55,7 +55,7 @@ void doSwitch() {
if (eip == 0x12345)
return;
- currentThread->setState(esp, ebp, eip);
+ if ((u32int)currentThread != 0xFFFFFFFF) currentThread->setState(esp, ebp, eip);
currentThread = nextThread();
currentProcess = currentThread->getProcess();
diff --git a/Source/Kernel/TaskManager/Thread.class.cpp b/Source/Kernel/TaskManager/Thread.class.cpp
index cc2f569..b5bb4e6 100644
--- a/Source/Kernel/TaskManager/Thread.class.cpp
+++ b/Source/Kernel/TaskManager/Thread.class.cpp
@@ -5,7 +5,8 @@
void runThread(Thread* thread, u32int (*entry_point)()) {
asm volatile("sti");
- thread->run(entry_point);
+ u32int ret = entry_point(); //Run !
+ asm volatile("mov %0, %%eax; int $66;" : : "r"(ret)); //Syscall for thread ending
}
Thread::Thread() { //Private constructor, does nothing
@@ -32,6 +33,7 @@ Thread::Thread(Process* process, u32int (*entry_point)()) {
}
Thread::~Thread() {
+ if (Task::currentThread == this) Task::currentThread = (Thread*)0xFFFFFFFF; //Signal that current thread is invalid
if (m_isKernel)
PageAlloc::free((void*)m_kernelStackFrame);
Task::unregisterThread(this);
@@ -57,17 +59,18 @@ void Thread::setup(u32int (*entry_point)(), u32int esp) {
}
void Thread::finish(u32int errcode) {
+ if (errcode == E_PAGEFAULT and m_isKernel) {
+ PANIC("Page fault in kernel thread !");
+ }
+ if (errcode == E_UNHANDLED_EXCEPTION and m_isKernel) {
+ PANIC("Unhandled exception in kernel thread !");
+ }
//Needs not set m_state to a finished state, either :
// - thread is unregistered from process and everywhere
// - errcode is an exception or this is main thread, process exits
m_process->threadFinishes(this, errcode);
}
-void Thread::run(u32int (*entry_point)()) {
- u32int ret = entry_point(); //Run !
- finish(ret);
-}
-
void Thread::setState(u32int esp, u32int ebp, u32int eip) {
m_esp = esp;
m_ebp = ebp;
@@ -88,7 +91,7 @@ void Thread::sleep(u32int msecs) {
}
void Thread::waitIRQ(u8int irq) {
- if (m_process->m_uid != 0) return;
+ if (!m_isKernel and !m_isRunningAnInterrupt) return;
m_state = T_IRQWAIT;
waitfor.m_irq = irq;
diff --git a/Source/Kernel/TaskManager/Thread.class.h b/Source/Kernel/TaskManager/Thread.class.h
index 62557db..63e5272 100644
--- a/Source/Kernel/TaskManager/Thread.class.h
+++ b/Source/Kernel/TaskManager/Thread.class.h
@@ -23,6 +23,7 @@ class Thread {
u8int m_irq; //An IRQ number
} waitfor;
+ bool m_isRunningAnInterrupt;
bool m_isKernel; //Says if stack is in kernel pagedir, and if thread should run in ring 0
u32int m_kernelStackFrame; //Used for allocating and freeing a frame used as a stack
@@ -33,7 +34,6 @@ class Thread {
Thread(Process* process, u32int (*entry_point)());
~Thread();
void finish(u32int errcode); //Called by run() when thread returns, and by exception handler. Can also be called by the thread itself
- void run(u32int (*entry_point)());
void setState(u32int esp, u32int ebp, u32int eip);
u32int getEsp();
@@ -41,6 +41,9 @@ class Thread {
u32int getEip();
Process* getProcess();
+ inline void enterInterrupt() { m_isRunningAnInterrupt = true; }
+ inline void exitInterrupt() { m_isRunningAnInterrupt = false; }
+
void sleep(u32int msecs);
void waitIRQ(u8int irq);
bool runnable(); //Called by scheduler
diff --git a/Source/Kernel/VFS/.Part.ns.cpp.swp b/Source/Kernel/VFS/.Part.ns.cpp.swp
deleted file mode 100644
index 3b639ab..0000000
--- a/Source/Kernel/VFS/.Part.ns.cpp.swp
+++ /dev/null
Binary files differ
diff --git a/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp b/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp
index a5b5ea6..d40a9a7 100644
--- a/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp
+++ b/Source/Kernel/VTManager/VirtualTerminal-kbd.class.cpp
@@ -8,11 +8,11 @@ void VirtualTerminal::keyPress(keypress_t kp) {
if (!m_kbdMutex.locked()) {
if (kp.haschar && !kp.hascmd) {
put(kp.character);
- } else if (kp.hascmd && kp.command == KBDC_ENTER) {
+ } else if (kp.hascmd && !kp.haschar && kp.command == KBDC_ENTER) {
put("\n");
- } else if (kp.hascmd && kp.command == KBDC_TAB) {
+ } else if (kp.hascmd && !kp.haschar && kp.command == KBDC_TAB) {
put("\t");
- } else if (kp.hascmd && kp.command == KBDC_BACKSPACE) {
+ } else if (kp.hascmd && !kp.haschar && kp.command == KBDC_BACKSPACE) {
put("\b");
}
}
@@ -39,11 +39,11 @@ keypress_t VirtualTerminal::getKeypress(bool show, bool block) {
if (show) {
if (ret.haschar && !ret.hascmd) {
put(ret.character);
- } else if (ret.hascmd && ret.command == KBDC_ENTER) {
+ } else if (ret.hascmd && !ret.haschar && ret.command == KBDC_ENTER) {
put("\n");
- } else if (ret.hascmd && ret.command == KBDC_TAB) {
+ } else if (ret.hascmd && !ret.haschar && ret.command == KBDC_TAB) {
put("\t");
- } else if (ret.hascmd && ret.command == KBDC_BACKSPACE) {
+ } else if (ret.hascmd && !ret.haschar && ret.command == KBDC_BACKSPACE) {
put("\b");
}
}
@@ -55,11 +55,11 @@ keypress_t VirtualTerminal::getKeypress(bool show, bool block) {
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) {
+ while (!(tmp.hascmd && !tmp.haschar && tmp.command == KBDC_ENTER)) {
+ if (tmp.hascmd && !tmp.haschar && 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) {
+ } else if (tmp.haschar && !tmp.hascmd) {
ret += tmp.character;
}
tmp = getKeypress(show);