Compare commits
2 Commits
fb71a09ec4
...
026e6d0e1a
| Author | SHA1 | Date |
|---|---|---|
|
|
026e6d0e1a | |
|
|
eb42be6dc4 |
2
Makefile
2
Makefile
|
|
@ -25,7 +25,7 @@ bochs: $(KERNEL_HDD) ext/bochsrc
|
||||||
rm bochsout.txt
|
rm bochsout.txt
|
||||||
|
|
||||||
gdb:
|
gdb:
|
||||||
QEMUFLAGS="-s -S" $(MAKE) run & gdb -x ext/gdbinit
|
QEMUFLAGS="-s -S" $(MAKE) run & (sleep 1; gdb -x ext/gdbinit)
|
||||||
|
|
||||||
ext/limine/limine-install:
|
ext/limine/limine-install:
|
||||||
$(MAKE) -C ext/limine/ limine-install
|
$(MAKE) -C ext/limine/ limine-install
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ void stivale2_main(struct stivale2_struct *info) {
|
||||||
);
|
);
|
||||||
printf("PAGE TABLE AT: %x\n", cr3);
|
printf("PAGE TABLE AT: %x\n", cr3);
|
||||||
|
|
||||||
|
loadgdt();
|
||||||
|
|
||||||
struct gdt_ptr pGDT;
|
struct gdt_ptr pGDT;
|
||||||
__asm__ __volatile__("sgdt %0" : : "m"(pGDT) : "memory");
|
__asm__ __volatile__("sgdt %0" : : "m"(pGDT) : "memory");
|
||||||
printf("GDT: %x (%d)\n", pGDT.base, pGDT.limit);
|
printf("GDT: %x (%d)\n", pGDT.base, pGDT.limit);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
section .rodata
|
section .rodata
|
||||||
|
align 8
|
||||||
gdt64:
|
gdt64:
|
||||||
dq 0
|
dq 0
|
||||||
.code: equ $-gdt64
|
.codesys: equ $-gdt64
|
||||||
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53)
|
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53)
|
||||||
.data: equ $ - gdt64
|
.datasys: equ $-gdt64
|
||||||
dq (1<<44) | (1<<47) | (1<<41)
|
dq (1<<44) | (1<<47) | (1<<41)
|
||||||
|
.codeusr: equ $-gdt64
|
||||||
|
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53) | (3<<45)
|
||||||
|
.datausr: equ $-gdt64
|
||||||
|
dq (1<<44) | (1<<47) | (1<<41) | (3<<45)
|
||||||
.pointer:
|
.pointer:
|
||||||
dw .pointer - gdt64 - 1
|
dw .pointer - gdt64 - 1
|
||||||
dq gdt64
|
dq gdt64
|
||||||
|
|
@ -13,4 +18,18 @@ section .text
|
||||||
global loadgdt
|
global loadgdt
|
||||||
loadgdt:
|
loadgdt:
|
||||||
lgdt [gdt64.pointer]
|
lgdt [gdt64.pointer]
|
||||||
|
; now what I tried unsuccessfully:
|
||||||
|
|
||||||
|
mov rax, gdt64.codesys;
|
||||||
|
push rax
|
||||||
|
mov rax, loadgdtdone
|
||||||
|
push rax ; function to execute next
|
||||||
|
retfq ; far return (pops address and code segment)
|
||||||
|
loadgdtdone:
|
||||||
|
mov ax, gdt64.datasys
|
||||||
|
mov ss, ax
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov fs, ax
|
||||||
|
mov gs, ax
|
||||||
|
ret
|
||||||
Loading…
Reference in New Issue