Mann wegen dem Abi hab ich kaum Zeit mich damit zu befassen...
Also, hab jetzt mal selbst versucht, mit dem mappen. Ich kriege eine fehlermeldung, jedes mal, wenn ich versuche, daten in dem gemappten kernelbereich, also 0xc0000000, anzusprechen. Soll heißen, irgendwie is da wohl was nicht gemappt. Ich hab aber keine ahnung, was ich hier noch vergessen habe.
[EXTERN main]
[EXTERN __phys_kernel_start__]
[EXTERN __phys_kernel_end__]
[GLOBAL start]
start:
cmp eax, 0x2badb002
je start1
failure:
cli
hlt
start1:
mov eax, multiboot
sub eax, DIFF
mov [eax], ebx
;clear the page directory
mov eax, 0x00200000
mov ecx, 0x1000 / 0x04
.0:
mov dword [eax], 0x02
add eax, 0x04
loop .0
;mirror-map 0x00000000 to 0x00100000
mov eax, 0x00201000
mov ebx, 0x00000000 | 0x03
mov ecx, 0x1000 / 0x04
.1:
mov [eax], ebx
add eax, 0x04
add ebx, 0x1000
loop .1
;mirror-map 0x00100000 to 0x00200000
mov eax, 0x00202000
mov ebx, 0x00100000 | 0x03
mov ecx, 0x1000 / 0x04
.2:
mov [eax], ebx
add eax, 0x04
add ebx, 0x1000
loop .2
;map the kernel
mov eax, 0x00203000
mov ebx, __phys_kernel_start__
or ebx, 0x03
.3:
mov [eax], ebx
add eax, 0x04
add ebx, 0x1000
cmp ebx, __phys_kernel_end__
jle .3
;set the pages
mov dword [0x00200000], 0x00201000 | 0x03
mov dword [0x00200001], 0x00202000 | 0x03
mov dword [0x00200c00], 0x00203000 | 0x03
;set directory
mov eax, 0x00200000
mov cr3, eax
;activate paging
mov eax, cr0
or eax, 0x80000000
mov cr0, eax
lgdt [gdtp]
jmp OS_CODE_SEL:start2
start2:
mov ax, OS_DATA_SEL
mov ds, ax
mov es, ax
mov ss, ax
mov fs, ax
mov gs, ax
mov esp, stack
mov eax, [multiboot]
push eax
call main
add esp, 4
cli
hlt
[SECTION .data]
multiboot dd 0
was mache ich falsch?