diff --git a/include/kernel/cpu.h b/include/kernel/cpu.h index 29ebc8f..b5f7963 100644 --- a/include/kernel/cpu.h +++ b/include/kernel/cpu.h @@ -92,6 +92,13 @@ enum { FEAT_EDX_PBE = 1 << 31 }; +// -------------------------------------------------------------------------- // + +typedef struct { + ushort length; + void* base; + } __attribute__((packed)) Idtr_t; + // -------------------------------------------------------------------------- // #endif diff --git a/kaleid/kernel/cpu/idt.c b/kaleid/kernel/cpu/idt.c index cdcf44c..64c2606 100644 --- a/kaleid/kernel/cpu/idt.c +++ b/kaleid/kernel/cpu/idt.c @@ -22,17 +22,18 @@ // along with OS/K. If not, see . // //----------------------------------------------------------------------------// #include +#include + +extern void lidt(Idtr_t reg); // // Registers the new idt in the idtr register. // -static inline void lidt(void* idtAddr, ushort size) +static inline void loadIdt(void* idtAddr, ushort size) { // The IDTR register structure that will be sent - struct { - ushort length; - void* base; - } __attribute__((packed)) IDTR = { size, idtAddr }; + Idtr_t IDTR = { size, idtAddr }; - asm volatile( "lidt %0" : : "m"(IDTR) ); + lidt(IDTR); } + diff --git a/kaleid/kernel/io/cursor.c b/kaleid/kernel/io/cursor.c index ed336bb..78cb1be 100644 --- a/kaleid/kernel/io/cursor.c +++ b/kaleid/kernel/io/cursor.c @@ -29,7 +29,7 @@ void IoEnableCursor(void) { IoWriteByteOnPort(0x3D4, 0xA); - IoWriteByteOnPort(0x3D5, (IoReadByteFromPort(0x3D5) & 0xC0)); + IoWriteByteOnPort(0x3D5, (IoReadByteFromPort(0x3D5) & 0xC0) | 15); IoWriteByteOnPort(0x3D4, 0xB); IoWriteByteOnPort(0x3D5, (IoReadByteFromPort(0x3D5) & 0xE0) | 15);