aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--idt.cpp12
-rw-r--r--idt.hpp1
3 files changed, 14 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 284f931..cb08991 100644
--- a/Makefile
+++ b/Makefile
@@ -39,5 +39,5 @@ clean:
run: myos.iso
@echo " QEMU"
- @qemu-system-i386 -drive file=$<,index=2,media=cdrom -monitor stdio -no-reboot -s -S #-d int
+ @qemu-system-i386 -drive file=$<,index=2,media=cdrom -monitor stdio -no-reboot #-s -S #-d int
diff --git a/idt.cpp b/idt.cpp
index c889c14..de15ec9 100644
--- a/idt.cpp
+++ b/idt.cpp
@@ -62,10 +62,22 @@ struct StubEntry
asm volatile(R"(
pusha
+ mov %%ds, %%ax
+ push %%ax
+ mov $0x10, %%ax
+ mov %%ax, %%ds
+ mov %%ax, %%es
+ mov %%ax, %%fs
+ mov %%ax, %%gs
push %0
cld
call interruptGeneralHandler
pop %%eax
+ pop %%ax
+ mov %%ax, %%ds
+ mov %%ax, %%es
+ mov %%ax, %%fs
+ mov %%ax, %%gs
popa
add $0x4, %%esp
iret
diff --git a/idt.hpp b/idt.hpp
index c9092dd..c5e7e47 100644
--- a/idt.hpp
+++ b/idt.hpp
@@ -7,6 +7,7 @@
struct Registers
{
std::uint32_t inum;
+ std::uint32_t ds;
std::uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax;
std::uint32_t error;
std::uint32_t eip, cs, eflags;