Changed kernel location to 0xFF800000 on i386

This commit is contained in:
2020-07-18 18:51:15 -05:00
parent 1147545c58
commit 44167b778d
3 changed files with 29 additions and 11 deletions

View File

@@ -27,7 +27,7 @@ idt_info:
.align 16 .align 16
stackBottom: stackBottom:
.skip 16384 .skip 8192
stackTop: stackTop:
.align 4096 .align 4096
@@ -69,11 +69,14 @@ _start:
sub $BASE_DIFF, %edi sub $BASE_DIFF, %edi
add $8, %ebx add $8, %ebx
switch: mov (%ebx), %eax switch:
mov (%ebx), %eax
cmp $0, %eax cmp $0, %eax
je s_end je s_end
cmp $1, %eax cmp $1, %eax
je tag_1 je tag_1
cmp $3, %eax
je tag_3
cmp $4, %eax cmp $4, %eax
je tag_4 je tag_4
cmp $6, %eax cmp $6, %eax
@@ -83,7 +86,8 @@ switch: mov (%ebx), %eax
jmp def jmp def
# Boot command line # Boot command line
tag_1: mov 4(%ebx), %ecx tag_1:
mov 4(%ebx), %ecx
sub $8, %ecx sub $8, %ecx
mov %ebx, %esi mov %ebx, %esi
add $8, %esi add $8, %esi
@@ -93,16 +97,28 @@ tag_1: mov 4(%ebx), %ecx
mov $system_info, %edi mov $system_info, %edi
sub $BASE_DIFF, %edi sub $BASE_DIFF, %edi
jmp def jmp def
tag_3:
mov 8(%ebx), %esi
mov (%esi), %eax
mov %al, (0xB8004)
mov %ah, (0xB8006)
shr $16, %eax
mov %al, (0xB8008)
mov %ah, (0xB800a)
jmp def
# Basic memory info # Basic memory info
tag_4: mov 8(%ebx), %eax tag_4:
mov 8(%ebx), %eax
mov %eax, (%edi) mov %eax, (%edi)
mov 12(%ebx), %eax mov 12(%ebx), %eax
mov %eax, 4(%edi) mov %eax, 4(%edi)
jmp def jmp def
# Memory map # Memory map
tag_6: mov $memory_map, %esi tag_6:
mov $memory_map, %esi
sub $BASE_DIFF, %esi # set esi to point to the table in the kernel image sub $BASE_DIFF, %esi # set esi to point to the table in the kernel image
mov 4(%ebx), %ecx mov 4(%ebx), %ecx
sub $16, %ecx # set ecx to store the size of the table provided by the bootloader sub $16, %ecx # set ecx to store the size of the table provided by the bootloader
@@ -125,11 +141,13 @@ tag_6: mov $memory_map, %esi
jmp switch jmp switch
# Program image location # Program image location
tag_21: mov 8(%ebx), %eax tag_21:
mov 8(%ebx), %eax
mov %eax, 8(%edi) mov %eax, 8(%edi)
jmp def jmp def
def: mov 4(%ebx), %eax def:
mov 4(%ebx), %eax
add $7, %eax add $7, %eax
and $0xFFFFFFF8, %eax and $0xFFFFFFF8, %eax
add %eax, %ebx add %eax, %ebx
@@ -185,7 +203,7 @@ s_end:
or $3, %eax or $3, %eax
# Save the PDE to the entry corresponding to 0xC0000000 # Save the PDE to the entry corresponding to 0xC0000000
mov %eax, 3072(%edi) mov %eax, 4088(%edi)
# Set the last entry in the page directory to point to the page directory itself # Set the last entry in the page directory to point to the page directory itself
mov %edi, %eax mov %edi, %eax

View File

@@ -2,7 +2,7 @@ ENTRY(_start)
SECTIONS SECTIONS
{ {
. = 0xC0100000; . = 0xFF900000;
VIRTUAL_BASE = .; VIRTUAL_BASE = .;
PHYSICAL_BASE = 0x100000; PHYSICAL_BASE = 0x100000;
BASE_DIFF = VIRTUAL_BASE - PHYSICAL_BASE; BASE_DIFF = VIRTUAL_BASE - PHYSICAL_BASE;

View File

@@ -28,7 +28,7 @@
.set tagEntryType, 3 .set tagEntryType, 3
.set tagEntrySize, 12 .set tagEntrySize, 12
.set tagEntryAddress, _start - (0xC0100000 - 0x100000) .set tagEntryAddress, _start - (0xFF900000 - 0x100000)
.set tagModuleAlignType, 6 .set tagModuleAlignType, 6
.set tagModuleAlignSize, 8 .set tagModuleAlignSize, 8