From 404f1ab20ce0ca547c1b385b4ee61aa97c13e17f Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Sun, 28 Apr 2019 15:30:54 +0200 Subject: [PATCH] OS/K works on real hw --- kaleid/kernel/cpu/idt.c | 18 +++--------------- kaleid/kernel/init/init.c | 6 ++++-- kaleid/kernel/io/rtc.c | 4 ++-- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/kaleid/kernel/cpu/idt.c b/kaleid/kernel/cpu/idt.c index 90e2936..5141104 100644 --- a/kaleid/kernel/cpu/idt.c +++ b/kaleid/kernel/cpu/idt.c @@ -120,19 +120,6 @@ void IdtSetup(void) IdtSetGate(45, (ulong)isr45, codeSeg, 0x8E); IdtSetGate(46, (ulong)isr46, codeSeg, 0x8E); IdtSetGate(47, (ulong)isr47, codeSeg, 0x8E); - IdtSetGate(48, (ulong)isr48, codeSeg, 0x8E); - IdtSetGate(49, (ulong)isr49, codeSeg, 0x8E); - IdtSetGate(50, (ulong)isr50, codeSeg, 0x8E); - IdtSetGate(51, (ulong)isr51, codeSeg, 0x8E); - IdtSetGate(52, (ulong)isr52, codeSeg, 0x8E); - IdtSetGate(53, (ulong)isr53, codeSeg, 0x8E); - IdtSetGate(54, (ulong)isr54, codeSeg, 0x8E); - IdtSetGate(55, (ulong)isr55, codeSeg, 0x8E); - IdtSetGate(56, (ulong)isr56, codeSeg, 0x8E); - IdtSetGate(57, (ulong)isr57, codeSeg, 0x8E); - IdtSetGate(58, (ulong)isr58, codeSeg, 0x8E); - IdtSetGate(59, (ulong)isr59, codeSeg, 0x8E); - IdtSetGate(60, (ulong)isr60, codeSeg, 0x8E); // Load IDT IdtInit(); @@ -172,8 +159,8 @@ static void EnablePIC(void) IoWriteByteOnPort(0xa1, 0x28); // Set ICW3 - IoWriteByteOnPort(0x21, 0x0); - IoWriteByteOnPort(0xa1, 0x0); + IoWriteByteOnPort(0x21, 0x4); + IoWriteByteOnPort(0xa1, 0x2); // Set ICW4 IoWriteByteOnPort(0x21, 0x1); @@ -231,6 +218,7 @@ void IsrHandler(ISRFrame_t *regs) } bprintf(BStdOut, "[ISR 0x%x] %s\n", regs->intNo, "Unknown ISR Exception"); + IoSendEOItoPIC(regs->intNo); /* KeStartPanic("[ISR 0x%x] Unknown ISR Exception Abort\n" */ /* " Error code : 0x%x\n" */ /* " RIP:\t\t%p\n" */ diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 5efd8d1..5db0b5e 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -86,9 +86,11 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg) IoPrintRtcTime(); KernLog("There was %d ticks\n", IoGetRtcTicks()); - for (uint i = 1; i < 2048*15 ; i++) { - //IoPrintRtcTime(); + uint i = 0; + while (1) { + if (!(i % 2048)) IoPrintRtcTime(); KePauseCPU(); + i++; } //divideByZero(); diff --git a/kaleid/kernel/io/rtc.c b/kaleid/kernel/io/rtc.c index b76e322..e447e96 100644 --- a/kaleid/kernel/io/rtc.c +++ b/kaleid/kernel/io/rtc.c @@ -184,9 +184,9 @@ static void UpdateRtcTime(void) uchar minRemain, hourRemain, dayRemain; IoRtcTime.sec = - (uchar)(((ulong)IoRtcOriginTime.sec + (IoRtcTicks / frequency) + 1) % 60); + (uchar)(((ulong)IoRtcOriginTime.sec + (IoRtcTicks / frequency)) % 60); minRemain = - (uchar)(((ulong)IoRtcOriginTime.sec + (IoRtcTicks / frequency) + 1) / 60); + (uchar)(((ulong)IoRtcOriginTime.sec + (IoRtcTicks / frequency)) / 60); IoRtcTime.min = (uchar)(((ulong)IoRtcOriginTime.min + minRemain) % 60);