From a2e5fb565df070825c71fb60e5e70b9a03879073 Mon Sep 17 00:00:00 2001 From: Alexis211 Date: Fri, 28 Aug 2009 15:13:28 +0200 Subject: Some changes --- Source/Kernel/Core/.kmain.wtf.cpp.swp | Bin 12288 -> 0 bytes Source/Kernel/Core/kmain.wtf.cpp | 22 +- Source/Kernel/DeviceManager/Dev.ns.cpp | 2 +- Source/Kernel/DeviceManager/Dev.ns.h | 2 +- Source/Kernel/Devices/Device.proto.h | 2 +- Source/Kernel/Devices/Timer.class.cpp | 5 +- Source/Kernel/Map.txt | 652 ++++++++++++++++---------------- Source/Kernel/Melon.ke | Bin 47469 -> 47465 bytes Source/Kernel/SyscallManager/IDT.ns.cpp | 13 +- Source/Kernel/SyscallManager/IDT.ns.h | 2 +- 10 files changed, 356 insertions(+), 344 deletions(-) delete mode 100644 Source/Kernel/Core/.kmain.wtf.cpp.swp (limited to 'Source') diff --git a/Source/Kernel/Core/.kmain.wtf.cpp.swp b/Source/Kernel/Core/.kmain.wtf.cpp.swp deleted file mode 100644 index 27008ec..0000000 Binary files a/Source/Kernel/Core/.kmain.wtf.cpp.swp and /dev/null differ diff --git a/Source/Kernel/Core/kmain.wtf.cpp b/Source/Kernel/Core/kmain.wtf.cpp index 9e2004e..2ce331b 100644 --- a/Source/Kernel/Core/kmain.wtf.cpp +++ b/Source/Kernel/Core/kmain.wtf.cpp @@ -23,6 +23,14 @@ extern "C" void kmain(multiboot_info_t* mbd, u32int magic); void kmain(multiboot_info_t* mbd, u32int magic) { DEBUG("Entering kmain."); + if (magic != MULTIBOOT_BOOTLOADER_MAGIC) { + Mem::placementAddress = (u32int)&end; //Setup basic stuff so that PANIC will work + VGATextOutput *vgaout = new VGATextOutput(); + Disp::setDisplay(vgaout); + PANIC("Error with multiboot header."); + } + + //Setup placement address so that we can use new without overwriting modules Mem::placementAddress = (u32int)&end; mbd->cmdline += 0xC0000000; mbd->mods_addr += 0xC0000000; //Take stuff into acount module_t *mods = (module_t*)mbd->mods_addr; @@ -33,14 +41,11 @@ void kmain(multiboot_info_t* mbd, u32int magic) { Mem::placementAddress = mods[i].mod_end + 0x1000; } + //Create text output VGATextOutput *vgaout = new VGATextOutput(); - Disp::setDisplay(vgaout); - if (magic != MULTIBOOT_BOOTLOADER_MAGIC) { - PANIC("Error with multiboot header."); - } - + //Create a VT for handling the Melon bootup logo VirtualTerminal *melonLogoVT = new VirtualTerminal(melonLogoLines, melonLogoCols, 7, 0); for (int i = 0; i < melonLogoLines; i++) { for (int j = 0; j < melonLogoCols; j++) { @@ -49,13 +54,13 @@ void kmain(multiboot_info_t* mbd, u32int magic) { } melonLogoVT->map(2); + //Create a VT for logging what kernel does VirtualTerminal *kvt = new VirtualTerminal(12, 40, 0, 2); kvt->map(melonLogoLines + 4); *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 << "- Kernel command line @ " << (u32int)mbd->cmdline << "\n"; *kvt << "- Modules@" << (u32int)mbd->mods_addr << ", mbd@" << (u32int)mbd << "\n"; *kvt << "- Placement address : " << (u32int)Mem::placementAddress << "\n"; @@ -87,5 +92,6 @@ void kmain(multiboot_info_t* mbd, u32int magic) { asm volatile("sti"); - //PANIC("END OF KMAIN"); + while(1) asm volatile("sti; hlt"); + PANIC("END OF KMAIN"); } diff --git a/Source/Kernel/DeviceManager/Dev.ns.cpp b/Source/Kernel/DeviceManager/Dev.ns.cpp index 71ac3c7..9556c6c 100644 --- a/Source/Kernel/DeviceManager/Dev.ns.cpp +++ b/Source/Kernel/DeviceManager/Dev.ns.cpp @@ -5,7 +5,7 @@ namespace Dev { Vector devices; Device* irqHandler[16] = { NULL }; -void handleIRQ(registers_t *regs, int irq) { +void handleIRQ(registers_t regs, int irq) { if (irqHandler[irq] != NULL) irqHandler[irq]->handleIRQ(regs, irq); } diff --git a/Source/Kernel/DeviceManager/Dev.ns.h b/Source/Kernel/DeviceManager/Dev.ns.h index c2651c2..c54abca 100644 --- a/Source/Kernel/DeviceManager/Dev.ns.h +++ b/Source/Kernel/DeviceManager/Dev.ns.h @@ -5,7 +5,7 @@ #include namespace Dev { - void handleIRQ(registers_t *regs, int irq); + void handleIRQ(registers_t regs, int irq); void registerDevice(Device* dev); void unregisterDevice(Device* dev); diff --git a/Source/Kernel/Devices/Device.proto.h b/Source/Kernel/Devices/Device.proto.h index fa31b06..d5d6422 100644 --- a/Source/Kernel/Devices/Device.proto.h +++ b/Source/Kernel/Devices/Device.proto.h @@ -10,7 +10,7 @@ class Device { virtual String getClass() = 0; virtual String getName() = 0; - virtual void handleIRQ(registers_t *regs, int irq) {}; + virtual void handleIRQ(registers_t regs, int irq) {}; }; #endif diff --git a/Source/Kernel/Devices/Timer.class.cpp b/Source/Kernel/Devices/Timer.class.cpp index 42a6d1c..6b7ce55 100644 --- a/Source/Kernel/Devices/Timer.class.cpp +++ b/Source/Kernel/Devices/Timer.class.cpp @@ -2,6 +2,7 @@ #include #include +#include using namespace Sys; //For outb @@ -43,13 +44,15 @@ u32int Timer::time() { } void Timer::handleIRQ(registers_t registers, int irq) { + char what[] = "-\\|/"; if (irq == 0) { m_ticks++; if (m_ticks == m_frequency) { m_ticks = 0; m_seconds++; } - //Switching task is called in Dev::handleInterrupt + Disp::putChar(0, 0, what[m_ticks / (m_frequency / 4)], 0x07); + //Switching task is called in IRQ::interrupt_handler } } diff --git a/Source/Kernel/Map.txt b/Source/Kernel/Map.txt index 2ad862b..34c65ee 100644 --- a/Source/Kernel/Map.txt +++ b/Source/Kernel/Map.txt @@ -65,13 +65,13 @@ Discarded input sections 0x00000000 0x0 SyscallManager/IDT.ns.o .group 0x00000000 0x0 Devices/Display/VGATextOutput.class.o .group 0x00000000 0x0 Devices/Display/VGATextOutput.class.o - .text._ZN6Device9handleIRQEP11registers_ti + .text._ZN6Device9handleIRQE11registers_ti 0x00000000 0x0 Devices/Display/VGATextOutput.class.o .group 0x00000000 0x0 Devices/Timer.class.o .group 0x00000000 0x0 Devices/Timer.class.o .group 0x00000000 0x0 Devices/Timer.class.o .group 0x00000000 0x0 Devices/Timer.class.o - .text._ZN6Device9handleIRQEP11registers_ti + .text._ZN6Device9handleIRQE11registers_ti 0x00000000 0x0 Devices/Timer.class.o .text._ZN6DeviceC2Ev 0x00000000 0x0 Devices/Timer.class.o @@ -92,405 +92,407 @@ Linker script and memory map .setup 0x00100000 0x1e Core/loader.wtf.o 0xc010001e . = (. + 0xc0000000) -.text 0xc0100020 0x4c2d load address 0x00100020 +.text 0xc0100020 0x4e2e load address 0x00100020 *(.text) - .text 0xc0100020 0x500 Core/kmain.wtf.o + .text 0xc0100020 0x533 Core/kmain.wtf.o 0xc0100020 kmain - .text 0xc0100520 0x75 Core/loader.wtf.o - 0xc010052c loader - *fill* 0xc0100595 0x3 00 - .text 0xc0100598 0xf Core/cppsupport.wtf.o - 0xc0100598 __cxa_pure_virtual - 0xc010059d __cxa_atexit - *fill* 0xc01005a7 0x1 00 - .text 0xc01005a8 0x41a Core/Sys.ns.o - 0xc0100602 Sys::bochs_output(char*, char*, unsigned int) - 0xc01005c6 Sys::inb(unsigned short) - 0xc01005e3 Sys::inw(unsigned short) - 0xc0100786 Sys::panic(char*, char*, unsigned int) - 0xc01009a6 Sys::reboot() - 0xc01005a8 Sys::outb(unsigned short, unsigned char) - 0xc01006fc Sys::bochs_output_hex(unsigned int) - 0xc0100896 Sys::panic_assert(char*, unsigned int, char*) - *fill* 0xc01009c2 0x2 00 - .text 0xc01009c4 0xd5 Core/CMem.ns.o - 0xc01009fa CMem::memset(unsigned char*, unsigned char, int) - 0xc0100a31 CMem::memsetw(unsigned short*, unsigned short, int) - 0xc0100a6c CMem::strlen(char const*) - 0xc01009c4 CMem::memcpy(unsigned char*, unsigned char const*, int) - *fill* 0xc0100a99 0x3 00 - .text 0xc0100a9c 0x8b4 MemoryManager/Mem.ns.o - 0xc0100f4f Mem::contractHeap() - 0xc0100b56 Mem::insertIntoHeapIndex(Mem::heap_header_t*) - 0xc0100cfa Mem::removeFromHeapIndex(Mem::heap_header_t*) - 0xc0100cb1 Mem::removeFromHeapIndex(unsigned int) - 0xc0100d21 Mem::createHeap() - 0xc0100e2f Mem::expandHeap(unsigned int) - 0xc01011ee Mem::kfree(void*) - 0xc010105f Mem::kalloc(unsigned int, bool) - 0xc0100c6f Mem::heapIndexFindEntry(Mem::heap_header_t*) - 0xc0100a9c Mem::kallocInternal(unsigned int, bool) - .text 0xc0101350 0x35c MemoryManager/PhysMem.ns.o - 0xc01016a2 PhysMem::total() - 0xc01014f2 PhysMem::removeTemporaryPages() - 0xc010162d PhysMem::freeFrame(page_t*) - 0xc010167c PhysMem::free() - 0xc0101546 PhysMem::allocFrame(page_t*, bool, bool) - 0xc0101350 PhysMem::initPaging(unsigned int) - *fill* 0xc01016ac 0x4 00 - .text 0xc01016b0 0x1d MemoryManager/GDT.wtf.o - 0xc01016b0 gdt_flush - *fill* 0xc01016cd 0x3 00 - .text 0xc01016d0 0x193 MemoryManager/GDT.ns.o - 0xc010175f GDT::init() - 0xc01016d0 GDT::setGate(int, unsigned int, unsigned int, unsigned char, unsigned char) - *fill* 0xc0101863 0x1 00 - .text 0xc0101864 0x2db MemoryManager/PageDirectory.class.o - 0xc01019cc PageDirectory::getPage(unsigned int, bool) - 0xc0101864 PageDirectory::PageDirectory() - 0xc010197a PageDirectory::~PageDirectory() - 0xc0101928 PageDirectory::~PageDirectory() - 0xc0101ade PageDirectory::freeFrame(unsigned int) - 0xc01018c6 PageDirectory::PageDirectory() - 0xc0101a8c PageDirectory::allocFrame(unsigned int, bool, bool) - 0xc0101b18 PageDirectory::switchTo() - *fill* 0xc0101b3f 0x1 00 - .text 0xc0101b40 0x239 MemoryManager/PageAlloc.ns.o - 0xc0101d5d PageAlloc::free(void*) - 0xc0101b94 PageAlloc::alloc(unsigned int*) - 0xc0101b40 PageAlloc::init() - *fill* 0xc0101d79 0x3 00 - .text 0xc0101d7c 0x16a DeviceManager/Disp.ns.o - 0xc0101d86 Disp::textRows() - 0xc0101e72 Disp::clear() - 0xc0101d7c Disp::textCols() - 0xc0101e90 Disp::setDisplay(Display*) - 0xc0101e11 Disp::moveCursor(unsigned short, unsigned short) - 0xc0101d90 Disp::putChar(unsigned short, unsigned short, char, unsigned char) - *fill* 0xc0101ee6 0x2 00 - .text 0xc0101ee8 0x310 DeviceManager/Dev.ns.o - 0xc0101f2c Dev::registerDevice(Device*) - 0xc0102000 Dev::findDevice(String) - 0xc0101f52 Dev::unregisterDevice(Device*) - 0xc0101fd4 Dev::requestIRQ(Device*, int) - 0xc0101ee8 Dev::handleIRQ(registers_t*, int) - .text 0xc01021f8 0x37 DeviceManager/Time.ns.o - 0xc01021f8 Time::setTimer(Timer*) - 0xc010221a Time::time() - 0xc0102205 Time::uptime() - *fill* 0xc010222f 0x1 00 - .text 0xc0102230 0x941 VTManager/VirtualTerminal.class.o - 0xc0102522 VirtualTerminal::map(int, int) - 0xc010259c VirtualTerminal::unmap() - 0xc010282a VirtualTerminal::put(char, bool) - 0xc01027f2 VirtualTerminal::setCursorLine(unsigned int) - 0xc0102398 VirtualTerminal::setColor(unsigned char, unsigned char) - 0xc0102330 VirtualTerminal::~VirtualTerminal() - 0xc010280e VirtualTerminal::setCursorCol(unsigned int) - 0xc01022b0 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char) - 0xc0102790 VirtualTerminal::updateCursor() - 0xc0102980 VirtualTerminal::write(char*, bool) - 0xc01029d4 VirtualTerminal::writeDec(int, bool) - 0xc0102364 VirtualTerminal::~VirtualTerminal() - 0xc01025b6 VirtualTerminal::redraw() - 0xc01023e6 VirtualTerminal::putChar(unsigned int, unsigned int, char) - 0xc0102ad6 VirtualTerminal::writeHex(unsigned int, bool) - 0xc0102690 VirtualTerminal::scroll() - 0xc0102230 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char) - 0xc01024b8 VirtualTerminal::clear() - 0xc01027cc VirtualTerminal::moveCursor(unsigned int, unsigned int) - *fill* 0xc0102b71 0x3 00 - .text 0xc0102b74 0x156 VTManager/VT.ns.o - 0xc0102b9a VT::unmap(VirtualTerminal*) - 0xc0102c21 VT::redrawScreen() - 0xc0102b74 VT::map(VirtualTerminal*) - *fill* 0xc0102cca 0x2 00 - .text 0xc0102ccc 0x2f1 Library/Bitset.class.o - 0xc0102fb2 Bitset::usedBits() - 0xc0102ccc Bitset::Bitset() - 0xc0102ed4 Bitset::testBit(unsigned int) - 0xc0102d9a Bitset::~Bitset() - 0xc0102e6c Bitset::clearBit(unsigned int) - 0xc0102db0 Bitset::init(unsigned int, unsigned int*) - 0xc0102cd8 Bitset::Bitset(unsigned int) - 0xc0102cd2 Bitset::Bitset() - 0xc0102d0c Bitset::Bitset(unsigned int) - 0xc0102e06 Bitset::setBit(unsigned int) - 0xc0102d84 Bitset::~Bitset() - 0xc0102d62 Bitset::Bitset(unsigned int, unsigned int*) - 0xc0102d40 Bitset::Bitset(unsigned int, unsigned int*) - 0xc0102f1c Bitset::firstFreeBit() - *fill* 0xc0102fbd 0x3 00 - .text 0xc0102fc0 0xd2c Library/String.class.o - 0xc0102fc0 String::hex(unsigned int) - 0xc01035e4 String::operator==(char*) - 0xc01039b6 String::toInt() - 0xc01033ac String::String(String const&) - 0xc0103208 String::String() - 0xc0103220 String::String() - 0xc0103b32 String::size() - 0xc0103074 String::number(int) - 0xc0103582 String::operator==(String&) - 0xc0103914 String::operator+(char*) - 0xc0103442 String::~String() - 0xc0103334 String::String(String const&) - 0xc010399c String::operator char*() - 0xc0103424 String::~String() - 0xc0103460 String::operator=(String const&) - 0xc0103238 String::String(char*) - 0xc0103656 String::operator+=(String&) - 0xc0103b22 String::operator[](int) - 0xc0103b3e String::clear() - 0xc0103b66 String::empty() - 0xc0103824 String::operator+=(char) - 0xc0103b76 String::split(char) - 0xc0103a6a String::toInt16() - 0xc0103c50 String::substr(int, int) - 0xc0103954 String::operator+(char) - 0xc01032b6 String::String(char*) - 0xc0103732 String::operator+=(char*) - 0xc01034ee String::operator=(char*) - 0xc01038d4 String::operator+(String&) - .text 0xc0103cec 0x9b8 SyscallManager/IDT.ns.o - 0xc0104591 IDT::handleException(registers_t*, int) - 0xc0103d94 IDT::init() - 0xc0103d2d IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char) - 0xc0103cec interrupt_handler - *fill* 0xc01046a4 0xc 00 - .text 0xc01046b0 0x204 SyscallManager/IDT.wtf.o - 0xc01046e0 isr4 - 0xc01047ba isr27 - 0xc0104732 isr13 - 0xc0104864 irq12 - 0xc0104788 isr22 - 0xc0104742 isr15 - 0xc0104850 irq10 - 0xc0104878 irq14 - 0xc0104710 isr9 - 0xc010483c irq8 - 0xc0104792 isr23 - 0xc01047ce isr29 - 0xc01047e2 isr31 - 0xc010477e isr21 - 0xc010485a irq11 - 0xc01047c4 isr28 - 0xc0104708 isr8 - 0xc010481e irq5 - 0xc0104774 isr20 - 0xc010473a isr14 - 0xc01046ea isr5 - 0xc0104828 irq6 - 0xc01047f6 irq1 - 0xc01046c2 isr1 - 0xc0104846 irq9 - 0xc01047b0 isr26 - 0xc0104722 isr11 - 0xc010486e irq13 - 0xc010472a isr12 - 0xc01046b8 isr0 - 0xc0104800 irq2 - 0xc010479c isr24 - 0xc010474c isr16 - 0xc01046d6 isr3 - 0xc01046f4 isr6 - 0xc0104832 irq7 - 0xc0104760 isr18 - 0xc01047ec irq0 - 0xc010471a isr10 - 0xc0104756 isr17 - 0xc01046cc isr2 - 0xc010476a isr19 - 0xc01046b0 idt_flush - 0xc01047d8 isr30 - 0xc0104882 irq15 - 0xc01046fe isr7 - 0xc01047a6 isr25 - 0xc0104814 irq4 - 0xc010480a irq3 - .text 0xc01048b4 0x17f Devices/Display/VGATextOutput.class.o - 0xc01048dc VGATextOutput::getName() - 0xc0104904 VGATextOutput::textCols() - 0xc01049fc VGATextOutput::clear() - 0xc01048b4 VGATextOutput::getClass() - 0xc0104976 VGATextOutput::moveCursor(unsigned short, unsigned short) - 0xc0104918 VGATextOutput::putChar(unsigned short, unsigned short, char, unsigned char) - 0xc010490e VGATextOutput::textRows() - *fill* 0xc0104a33 0x1 00 - .text 0xc0104a34 0x219 Devices/Timer.class.o - 0xc0104b4c Timer::setFrequency(unsigned char) - 0xc0104a34 Timer::Timer(unsigned char) - 0xc0104afc Timer::getClass() - 0xc0104b24 Timer::getName() - 0xc0104bd0 Timer::time() - 0xc0104c0a Timer::handleIRQ(registers_t, int) - 0xc0104bc4 Timer::uptime() - 0xc0104a98 Timer::Timer(unsigned char) - -.text._Znwj 0xc0104c4d 0x1b load address 0x00104c4d - .text._Znwj 0xc0104c4d 0x1b Core/kmain.wtf.o - 0xc0104c4d operator new(unsigned int) - -.text._ZN6Device9handleIRQEP11registers_ti - 0xc0104c68 0x5 load address 0x00104c68 - .text._ZN6Device9handleIRQEP11registers_ti - 0xc0104c68 0x5 Core/kmain.wtf.o - 0xc0104c68 Device::handleIRQ(registers_t*, int) + *fill* 0xc0100553 0xd 00 + .text 0xc0100560 0x75 Core/loader.wtf.o + 0xc010056c loader + *fill* 0xc01005d5 0x3 00 + .text 0xc01005d8 0xf Core/cppsupport.wtf.o + 0xc01005d8 __cxa_pure_virtual + 0xc01005dd __cxa_atexit + *fill* 0xc01005e7 0x1 00 + .text 0xc01005e8 0x41a Core/Sys.ns.o + 0xc0100642 Sys::bochs_output(char*, char*, unsigned int) + 0xc0100606 Sys::inb(unsigned short) + 0xc0100623 Sys::inw(unsigned short) + 0xc01007c6 Sys::panic(char*, char*, unsigned int) + 0xc01009e6 Sys::reboot() + 0xc01005e8 Sys::outb(unsigned short, unsigned char) + 0xc010073c Sys::bochs_output_hex(unsigned int) + 0xc01008d6 Sys::panic_assert(char*, unsigned int, char*) + *fill* 0xc0100a02 0x2 00 + .text 0xc0100a04 0xd5 Core/CMem.ns.o + 0xc0100a3a CMem::memset(unsigned char*, unsigned char, int) + 0xc0100a71 CMem::memsetw(unsigned short*, unsigned short, int) + 0xc0100aac CMem::strlen(char const*) + 0xc0100a04 CMem::memcpy(unsigned char*, unsigned char const*, int) + *fill* 0xc0100ad9 0x3 00 + .text 0xc0100adc 0x8b4 MemoryManager/Mem.ns.o + 0xc0100f8f Mem::contractHeap() + 0xc0100b96 Mem::insertIntoHeapIndex(Mem::heap_header_t*) + 0xc0100d3a Mem::removeFromHeapIndex(Mem::heap_header_t*) + 0xc0100cf1 Mem::removeFromHeapIndex(unsigned int) + 0xc0100d61 Mem::createHeap() + 0xc0100e6f Mem::expandHeap(unsigned int) + 0xc010122e Mem::kfree(void*) + 0xc010109f Mem::kalloc(unsigned int, bool) + 0xc0100caf Mem::heapIndexFindEntry(Mem::heap_header_t*) + 0xc0100adc Mem::kallocInternal(unsigned int, bool) + .text 0xc0101390 0x35c MemoryManager/PhysMem.ns.o + 0xc01016e2 PhysMem::total() + 0xc0101532 PhysMem::removeTemporaryPages() + 0xc010166d PhysMem::freeFrame(page_t*) + 0xc01016bc PhysMem::free() + 0xc0101586 PhysMem::allocFrame(page_t*, bool, bool) + 0xc0101390 PhysMem::initPaging(unsigned int) + *fill* 0xc01016ec 0x4 00 + .text 0xc01016f0 0x1d MemoryManager/GDT.wtf.o + 0xc01016f0 gdt_flush + *fill* 0xc010170d 0x3 00 + .text 0xc0101710 0x193 MemoryManager/GDT.ns.o + 0xc010179f GDT::init() + 0xc0101710 GDT::setGate(int, unsigned int, unsigned int, unsigned char, unsigned char) + *fill* 0xc01018a3 0x1 00 + .text 0xc01018a4 0x2db MemoryManager/PageDirectory.class.o + 0xc0101a0c PageDirectory::getPage(unsigned int, bool) + 0xc01018a4 PageDirectory::PageDirectory() + 0xc01019ba PageDirectory::~PageDirectory() + 0xc0101968 PageDirectory::~PageDirectory() + 0xc0101b1e PageDirectory::freeFrame(unsigned int) + 0xc0101906 PageDirectory::PageDirectory() + 0xc0101acc PageDirectory::allocFrame(unsigned int, bool, bool) + 0xc0101b58 PageDirectory::switchTo() + *fill* 0xc0101b7f 0x1 00 + .text 0xc0101b80 0x239 MemoryManager/PageAlloc.ns.o + 0xc0101d9d PageAlloc::free(void*) + 0xc0101bd4 PageAlloc::alloc(unsigned int*) + 0xc0101b80 PageAlloc::init() + *fill* 0xc0101db9 0x3 00 + .text 0xc0101dbc 0x16a DeviceManager/Disp.ns.o + 0xc0101dc6 Disp::textRows() + 0xc0101eb2 Disp::clear() + 0xc0101dbc Disp::textCols() + 0xc0101ed0 Disp::setDisplay(Display*) + 0xc0101e51 Disp::moveCursor(unsigned short, unsigned short) + 0xc0101dd0 Disp::putChar(unsigned short, unsigned short, char, unsigned char) + *fill* 0xc0101f26 0x2 00 + .text 0xc0101f28 0x37d DeviceManager/Dev.ns.o + 0xc0101fd9 Dev::registerDevice(Device*) + 0xc01020ad Dev::findDevice(String) + 0xc0101fff Dev::unregisterDevice(Device*) + 0xc0102081 Dev::requestIRQ(Device*, int) + 0xc0101f28 Dev::handleIRQ(registers_t, int) + *fill* 0xc01022a5 0x3 00 + .text 0xc01022a8 0x37 DeviceManager/Time.ns.o + 0xc01022a8 Time::setTimer(Timer*) + 0xc01022ca Time::time() + 0xc01022b5 Time::uptime() + *fill* 0xc01022df 0x1 00 + .text 0xc01022e0 0x941 VTManager/VirtualTerminal.class.o + 0xc01025d2 VirtualTerminal::map(int, int) + 0xc010264c VirtualTerminal::unmap() + 0xc01028da VirtualTerminal::put(char, bool) + 0xc01028a2 VirtualTerminal::setCursorLine(unsigned int) + 0xc0102448 VirtualTerminal::setColor(unsigned char, unsigned char) + 0xc01023e0 VirtualTerminal::~VirtualTerminal() + 0xc01028be VirtualTerminal::setCursorCol(unsigned int) + 0xc0102360 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char) + 0xc0102840 VirtualTerminal::updateCursor() + 0xc0102a30 VirtualTerminal::write(char*, bool) + 0xc0102a84 VirtualTerminal::writeDec(int, bool) + 0xc0102414 VirtualTerminal::~VirtualTerminal() + 0xc0102666 VirtualTerminal::redraw() + 0xc0102496 VirtualTerminal::putChar(unsigned int, unsigned int, char) + 0xc0102b86 VirtualTerminal::writeHex(unsigned int, bool) + 0xc0102740 VirtualTerminal::scroll() + 0xc01022e0 VirtualTerminal::VirtualTerminal(unsigned int, unsigned int, unsigned char, unsigned char) + 0xc0102568 VirtualTerminal::clear() + 0xc010287c VirtualTerminal::moveCursor(unsigned int, unsigned int) + *fill* 0xc0102c21 0x3 00 + .text 0xc0102c24 0x156 VTManager/VT.ns.o + 0xc0102c4a VT::unmap(VirtualTerminal*) + 0xc0102cd1 VT::redrawScreen() + 0xc0102c24 VT::map(VirtualTerminal*) + *fill* 0xc0102d7a 0x2 00 + .text 0xc0102d7c 0x2f1 Library/Bitset.class.o + 0xc0103062 Bitset::usedBits() + 0xc0102d7c Bitset::Bitset() + 0xc0102f84 Bitset::testBit(unsigned int) + 0xc0102e4a Bitset::~Bitset() + 0xc0102f1c Bitset::clearBit(unsigned int) + 0xc0102e60 Bitset::init(unsigned int, unsigned int*) + 0xc0102d88 Bitset::Bitset(unsigned int) + 0xc0102d82 Bitset::Bitset() + 0xc0102dbc Bitset::Bitset(unsigned int) + 0xc0102eb6 Bitset::setBit(unsigned int) + 0xc0102e34 Bitset::~Bitset() + 0xc0102e12 Bitset::Bitset(unsigned int, unsigned int*) + 0xc0102df0 Bitset::Bitset(unsigned int, unsigned int*) + 0xc0102fcc Bitset::firstFreeBit() + *fill* 0xc010306d 0x3 00 + .text 0xc0103070 0xd2c Library/String.class.o + 0xc0103070 String::hex(unsigned int) + 0xc0103694 String::operator==(char*) + 0xc0103a66 String::toInt() + 0xc010345c String::String(String const&) + 0xc01032b8 String::String() + 0xc01032d0 String::String() + 0xc0103be2 String::size() + 0xc0103124 String::number(int) + 0xc0103632 String::operator==(String&) + 0xc01039c4 String::operator+(char*) + 0xc01034f2 String::~String() + 0xc01033e4 String::String(String const&) + 0xc0103a4c String::operator char*() + 0xc01034d4 String::~String() + 0xc0103510 String::operator=(String const&) + 0xc01032e8 String::String(char*) + 0xc0103706 String::operator+=(String&) + 0xc0103bd2 String::operator[](int) + 0xc0103bee String::clear() + 0xc0103c16 String::empty() + 0xc01038d4 String::operator+=(char) + 0xc0103c26 String::split(char) + 0xc0103b1a String::toInt16() + 0xc0103d00 String::substr(int, int) + 0xc0103a04 String::operator+(char) + 0xc0103366 String::String(char*) + 0xc01037e2 String::operator+=(char*) + 0xc010359e String::operator=(char*) + 0xc0103984 String::operator+(String&) + .text 0xc0103d9c 0xabf SyscallManager/IDT.ns.o + 0xc010474e IDT::handleException(registers_t, int) + 0xc0103f51 IDT::init() + 0xc0103eea IDT::setGate(unsigned char, unsigned int, unsigned short, unsigned char) + 0xc0103d9c interrupt_handler + *fill* 0xc010485b 0x5 00 + .text 0xc0104860 0x204 SyscallManager/IDT.wtf.o + 0xc0104890 isr4 + 0xc010496a isr27 + 0xc01048e2 isr13 + 0xc0104a14 irq12 + 0xc0104938 isr22 + 0xc01048f2 isr15 + 0xc0104a00 irq10 + 0xc0104a28 irq14 + 0xc01048c0 isr9 + 0xc01049ec irq8 + 0xc0104942 isr23 + 0xc010497e isr29 + 0xc0104992 isr31 + 0xc010492e isr21 + 0xc0104a0a irq11 + 0xc0104974 isr28 + 0xc01048b8 isr8 + 0xc01049ce irq5 + 0xc0104924 isr20 + 0xc01048ea isr14 + 0xc010489a isr5 + 0xc01049d8 irq6 + 0xc01049a6 irq1 + 0xc0104872 isr1 + 0xc01049f6 irq9 + 0xc0104960 isr26 + 0xc01048d2 isr11 + 0xc0104a1e irq13 + 0xc01048da isr12 + 0xc0104868 isr0 + 0xc01049b0 irq2 + 0xc010494c isr24 + 0xc01048fc isr16 + 0xc0104886 isr3 + 0xc01048a4 isr6 + 0xc01049e2 irq7 + 0xc0104910 isr18 + 0xc010499c irq0 + 0xc01048ca isr10 + 0xc0104906 isr17 + 0xc010487c isr2 + 0xc010491a isr19 + 0xc0104860 idt_flush + 0xc0104988 isr30 + 0xc0104a32 irq15 + 0xc01048ae isr7 + 0xc0104956 isr25 + 0xc01049c4 irq4 + 0xc01049ba irq3 + .text 0xc0104a64 0x17f Devices/Display/VGATextOutput.class.o + 0xc0104a8c VGATextOutput::getName() + 0xc0104ab4 VGATextOutput::textCols() + 0xc0104bac VGATextOutput::clear() + 0xc0104a64 VGATextOutput::getClass() + 0xc0104b26 VGATextOutput::moveCursor(unsigned short, unsigned short) + 0xc0104ac8 VGATextOutput::putChar(unsigned short, unsigned short, char, unsigned char) + 0xc0104abe VGATextOutput::textRows() + *fill* 0xc0104be3 0x1 00 + .text 0xc0104be4 0x26a Devices/Timer.class.o + 0xc0104cfc Timer::setFrequency(unsigned char) + 0xc0104be4 Timer::Timer(unsigned char) + 0xc0104cac Timer::getClass() + 0xc0104cd4 Timer::getName() + 0xc0104d80 Timer::time() + 0xc0104dba Timer::handleIRQ(registers_t, int) + 0xc0104d74 Timer::uptime() + 0xc0104c48 Timer::Timer(unsigned char) + +.text._Znwj 0xc0104e4e 0x1b load address 0x00104e4e + .text._Znwj 0xc0104e4e 0x1b Core/kmain.wtf.o + 0xc0104e4e operator new(unsigned int) + +.text._ZN6Device9handleIRQE11registers_ti + 0xc0104e6a 0x5 load address 0x00104e6a + .text._ZN6Device9handleIRQE11registers_ti + 0xc0104e6a 0x5 Core/kmain.wtf.o + 0xc0104e6a Device::handleIRQ(registers_t, int) .text._ZN15VirtualTerminallsEPc - 0xc0104c6e 0x25 load address 0x00104c6e + 0xc0104e70 0x25 load address 0x00104e70 .text._ZN15VirtualTerminallsEPc - 0xc0104c6e 0x25 Core/kmain.wtf.o - 0xc0104c6e VirtualTerminal::operator<<(char*) + 0xc0104e70 0x25 Core/kmain.wtf.o + 0xc0104e70 VirtualTerminal::operator<<(char*) .text._ZN15VirtualTerminallsEi - 0xc0104c94 0x25 load address 0x00104c94 + 0xc0104e96 0x25 load address 0x00104e96 .text._ZN15VirtualTerminallsEi - 0xc0104c94 0x25 Core/kmain.wtf.o - 0xc0104c94 VirtualTerminal::operator<<(int) + 0xc0104e96 0x25 Core/kmain.wtf.o + 0xc0104e96 VirtualTerminal::operator<<(int) .text._ZN15VirtualTerminallsEj - 0xc0104cba 0x25 load address 0x00104cba + 0xc0104ebc 0x25 load address 0x00104ebc .text._ZN15VirtualTerminallsEj - 0xc0104cba 0x25 Core/kmain.wtf.o - 0xc0104cba VirtualTerminal::operator<<(unsigned int) + 0xc0104ebc 0x25 Core/kmain.wtf.o + 0xc0104ebc VirtualTerminal::operator<<(unsigned int) .text._ZN6DeviceC2Ev - 0xc0104ce0 0xe load address 0x00104ce0 + 0xc0104ee2 0xe load address 0x00104ee2 .text._ZN6DeviceC2Ev - 0xc0104ce0 0xe Core/kmain.wtf.o - 0xc0104ce0 Device::Device() + 0xc0104ee2 0xe Core/kmain.wtf.o + 0xc0104ee2 Device::Device() .text._ZN7DisplayC2Ev - 0xc0104cee 0x1c load address 0x00104cee + 0xc0104ef0 0x1c load address 0x00104ef0 .text._ZN7DisplayC2Ev - 0xc0104cee 0x1c Core/kmain.wtf.o - 0xc0104cee Display::Display() + 0xc0104ef0 0x1c Core/kmain.wtf.o + 0xc0104ef0 Display::Display() .text._ZN13VGATextOutputC1Ev - 0xc0104d0a 0x1c load address 0x00104d0a + 0xc0104f0c 0x1c load address 0x00104f0c .text._ZN13VGATextOutputC1Ev - 0xc0104d0a 0x1c Core/kmain.wtf.o - 0xc0104d0a VGATextOutput::VGATextOutput() + 0xc0104f0c 0x1c Core/kmain.wtf.o + 0xc0104f0c VGATextOutput::VGATextOutput() -.text._ZnwjPv 0xc0104d26 0x8 load address 0x00104d26 - .text._ZnwjPv 0xc0104d26 0x8 MemoryManager/PhysMem.ns.o - 0xc0104d26 operator new(unsigned int, void*) +.text._ZnwjPv 0xc0104f28 0x8 load address 0x00104f28 + .text._ZnwjPv 0xc0104f28 0x8 MemoryManager/PhysMem.ns.o + 0xc0104f28 operator new(unsigned int, void*) -.text._ZdaPv 0xc0104d2e 0x13 load address 0x00104d2e - .text._ZdaPv 0xc0104d2e 0x13 DeviceManager/Dev.ns.o - 0xc0104d2e operator delete[](void*) +.text._ZdaPv 0xc0104f30 0x13 load address 0x00104f30 + .text._ZdaPv 0xc0104f30 0x13 DeviceManager/Dev.ns.o + 0xc0104f30 operator delete[](void*) .text._ZN6VectorIP6DeviceEC1Ev - 0xc0104d42 0x18 load address 0x00104d42 + 0xc0104f44 0x18 load address 0x00104f44 .text._ZN6VectorIP6DeviceEC1Ev - 0xc0104d42 0x18 DeviceManager/Dev.ns.o - 0xc0104d42 Vector::Vector() + 0xc0104f44 0x18 DeviceManager/Dev.ns.o + 0xc0104f44 Vector::Vector() .text._ZN6VectorIP6DeviceE4pushES1_ - 0xc0104d5a 0x91 load address 0x00104d5a + 0xc0104f5c 0x91 load address 0x00104f5c .text._ZN6VectorIP6DeviceE4pushES1_ - 0xc0104d5a 0x91 DeviceManager/Dev.ns.o - 0xc0104d5a Vector::push(Device*) + 0xc0104f5c 0x91 DeviceManager/Dev.ns.o + 0xc0104f5c Vector::push(Device*) .text._ZN6VectorIP6DeviceE4sizeEv - 0xc0104dec 0xb load address 0x00104dec + 0xc0104fee 0xb load address 0x00104fee .text._ZN6VectorIP6DeviceE4sizeEv - 0xc0104dec 0xb DeviceManager/Dev.ns.o - 0xc0104dec Vector::size() + 0xc0104fee 0xb DeviceManager/Dev.ns.o + 0xc0104fee Vector::size() .text._ZN6VectorIP6DeviceEixEj - 0xc0104df8 0x12 load address 0x00104df8 + 0xc0104ffa 0x12 load address 0x00104ffa .text._ZN6VectorIP6DeviceEixEj - 0xc0104df8 0x12 DeviceManager/Dev.ns.o - 0xc0104df8 Vector::operator[](unsigned int) + 0xc0104ffa 0x12 DeviceManager/Dev.ns.o + 0xc0104ffa Vector::operator[](unsigned int) .text._ZN6VectorIP6DeviceE4backEv - 0xc0104e0a 0x19 load address 0x00104e0a + 0xc010500c 0x19 load address 0x0010500c .text._ZN6VectorIP6DeviceE4backEv - 0xc0104e0a 0x19 DeviceManager/Dev.ns.o - 0xc0104e0a Vector::back() + 0xc010500c 0x19 DeviceManager/Dev.ns.o + 0xc010500c Vector::back() .text._ZN6VectorIP6DeviceE3popEv - 0xc0104e24 0x6d load address 0x00104e24 + 0xc0105026 0x6d load address 0x00105026 .text._ZN6VectorIP6DeviceE3popEv - 0xc0104e24 0x6d DeviceManager/Dev.ns.o - 0xc0104e24 Vector::pop() + 0xc0105026 0x6d DeviceManager/Dev.ns.o + 0xc0105026 Vector::pop() .text._ZN6VectorIP6DeviceEC1ERKS2_ - 0xc0104e92 0x7f load address 0x00104e92 + 0xc0105094 0x7f load address 0x00105094 .text._ZN6VectorIP6DeviceEC1ERKS2_ - 0xc0104e92 0x7f DeviceManager/Dev.ns.o - 0xc0104e92 Vector::Vector(Vector const&) + 0xc0105094 0x7f DeviceManager/Dev.ns.o + 0xc0105094 Vector::Vector(Vector const&) .text._ZN6VectorIP6DeviceED1Ev - 0xc0104f12 0x27 load address 0x00104f12 + 0xc0105114 0x27 load address 0x00105114 .text._ZN6VectorIP6DeviceED1Ev - 0xc0104f12 0x27 DeviceManager/Dev.ns.o - 0xc0104f12 Vector::~Vector() + 0xc0105114 0x27 DeviceManager/Dev.ns.o + 0xc0105114 Vector::~Vector() -.text._Znaj 0xc0104f39 0x1b load address 0x00104f39 - .text._Znaj 0xc0104f39 0x1b VTManager/VirtualTerminal.class.o - 0xc0104f39 operator new[](unsigned int) +.text._Znaj 0xc010513b 0x1b load address 0x0010513b + .text._Znaj 0xc010513b 0x1b VTManager/VirtualTerminal.class.o + 0xc010513b operator new[](unsigned int) .text._ZN6VectorIP15VirtualTerminalEC1Ev - 0xc0104f54 0x18 load address 0x00104f54 + 0xc0105156 0x18 load address 0x00105156 .text._ZN6VectorIP15VirtualTerminalEC1Ev - 0xc0104f54 0x18 VTManager/VT.ns.o - 0xc0104f54 Vector::Vector() + 0xc0105156 0x18 VTManager/VT.ns.o + 0xc0105156 Vector::Vector() .text._ZN6VectorIP15VirtualTerminalE4pushES1_ - 0xc0104f6c 0x91 load address 0x00104f6c + 0xc010516e 0x91 load address 0x0010516e .text._ZN6VectorIP15VirtualTerminalE4pushES1_ - 0xc0104f6c 0x91 VTManager/VT.ns.o - 0xc0104f6c Vector::push(VirtualTerminal*) + 0xc010516e 0x91 VTManager/VT.ns.o + 0xc010516e Vector::push(VirtualTerminal*) .text._ZN6VectorIP15VirtualTerminalE4sizeEv - 0xc0104ffe 0xb load address 0x00104ffe + 0xc0105200 0xb load address 0x00105200 .text._ZN6VectorIP15VirtualTerminalE4sizeEv - 0xc0104ffe 0xb VTManager/VT.ns.o - 0xc0104ffe Vector::size() + 0xc0105200 0xb VTManager/VT.ns.o + 0xc0105200 Vector::size() .text._ZN6VectorIP15VirtualTerminalEixEj - 0xc010500a 0x12 load address 0x0010500a + 0xc010520c 0x12 load address 0x0010520c .text._ZN6VectorIP15VirtualTerminalEixEj - 0xc010500a 0x12 VTManager/VT.ns.o - 0xc010500a Vector::operator[](unsigned int) + 0xc010520c 0x12 VTManager/VT.ns.o + 0xc010520c Vector::operator[](unsigned int) .text._ZN6VectorIP15VirtualTerminalE4backEv - 0xc010501c 0x19 load address 0x0010501c + 0xc010521e 0x19 load address 0x0010521e .text._ZN6VectorIP15VirtualTerminalE4backEv - 0xc010501c 0x19 VTManager/VT.ns.o - 0xc010501c Vector::back() + 0xc010521e 0x19 VTManager/VT.ns.o + 0xc010521e Vector::back() .text._ZN6VectorIP15VirtualTerminalE3popEv - 0xc0105036 0x6d load address 0x00105036 + 0xc0105238 0x6d load address 0x00105238 .text._ZN6VectorIP15VirtualTerminalE3popEv - 0xc0105036 0x6d VTManager/VT.ns.o - 0xc0105036 Vector::pop() + 0xc0105238 0x6d VTManager/VT.ns.o + 0xc0105238 Vector::pop() .text._ZN6VectorIP15VirtualTerminalED1Ev - 0xc01050a4 0x27 load address 0x001050a4 + 0xc01052a6 0x27 load address 0x001052a6 .text._ZN6VectorIP15VirtualTerminalED1Ev - 0xc01050a4 0x27 VTManager/VT.ns.o - 0xc01050a4 Vector::~Vector() + 0xc01052a6 0x27 VTManager/VT.ns.o + 0xc01052a6 Vector::~Vector() .text._ZN6VectorI6StringEC1Ev - 0xc01050cc 0x18 load address 0x001050cc + 0xc01052ce 0x18 load address 0x001052ce .text._ZN6VectorI6StringEC1Ev - 0xc01050cc 0x18 Library/String.class.o - 0xc01050cc Vector::Vector() + 0xc01052ce 0x18 Library/String.class.o + 0xc01052ce Vector::Vector() .text._ZN6VectorI6StringE4pushES0_ - 0xc01050e4 0x9b load address 0x001050e4 + 0xc01052e6 0x9b load address 0x001052e6 .text._ZN6VectorI6StringE4pushES0_ - 0xc01050e4 0x9b Library/String.class.o - 0xc01050e4 Vector::push(String) + 0xc01052e6 0x9b Library/String.class.o + 0xc01052e6 Vector::push(String) .text._ZN6VectorI6StringE4backEv - 0xc0105180 0x19 load address 0x00105180 + 0xc0105382 0x19 load address 0x00105382 .text._ZN6VectorI6StringE4backEv - 0xc0105180 0x19 Library/String.class.o - 0xc0105180 Vector::back() + 0xc0105382 0x19 Library/String.class.o + 0xc0105382 Vector::back() .rodata 0xc0106000 0x6f3 load address 0x00106000 *(.rodata) @@ -564,8 +566,6 @@ Linker script and memory map 0x00000000 0x0 Core/kmain.wtf.o .rel.rodata._ZTV13VGATextOutput 0x00000000 0x0 Core/kmain.wtf.o - .rel.rodata._ZTV5Timer - 0x00000000 0x0 Core/kmain.wtf.o .data 0xc0107000 0x2c load address 0x00107000 0xc0107000 start_ctors = . diff --git a/Source/Kernel/Melon.ke b/Source/Kernel/Melon.ke index a4bbc45..03e2dd3 100755 Binary files a/Source/Kernel/Melon.ke and b/Source/Kernel/Melon.ke differ diff --git a/Source/Kernel/SyscallManager/IDT.ns.cpp b/Source/Kernel/SyscallManager/IDT.ns.cpp index 6ad17b5..4635f5f 100644 --- a/Source/Kernel/SyscallManager/IDT.ns.cpp +++ b/Source/Kernel/SyscallManager/IDT.ns.cpp @@ -58,9 +58,12 @@ extern "C" void idt_flush(u32int); extern "C" void interrupt_handler(registers_t regs) { if (regs.int_no < 32) { - IDT::handleException(®s, regs.int_no); + IDT::handleException(regs, regs.int_no); } else if (regs.int_no < 48) { - Dev::handleIRQ(®s, (regs.int_no - 32)); + if (regs.int_no >= 40) + outb(0xA0, 0x20); + outb(0x20, 0x20); + Dev::handleIRQ(regs, (regs.int_no - 32)); } } @@ -149,7 +152,7 @@ void init() { idt_flush((u32int)&idt_ptr); } -void handleException(registers_t *regs, int no) { +void handleException(registers_t regs, int no) { asm volatile("cli;"); char* exceptions[] = { "Division by zero", "Debug exception", "Non maskable interrupt", @@ -167,8 +170,8 @@ void handleException(registers_t *regs, int no) { VirtualTerminal *vt = new VirtualTerminal(5, 50, 0, 15); vt->map(); - *vt << "\n Unhandled exception " << (s32int)no << " at " << (u32int)regs->cs << ":" << - (u32int)regs->eip << "\n :: " << exceptions[no]; + *vt << "\n Unhandled exception " << (s32int)no << " at " << (u32int)regs.cs << ":" << + (u32int)regs.eip << "\n :: " << exceptions[no]; asm volatile("hlt"); } diff --git a/Source/Kernel/SyscallManager/IDT.ns.h b/Source/Kernel/SyscallManager/IDT.ns.h index 0a79100..cf8e9f2 100644 --- a/Source/Kernel/SyscallManager/IDT.ns.h +++ b/Source/Kernel/SyscallManager/IDT.ns.h @@ -25,7 +25,7 @@ namespace IDT { }__attribute__((packed)); void init(); - void handleException(registers_t *regs, int no); + void handleException(registers_t regs, int no); } #endif -- cgit v1.2.3