73 lines
2.2 KiB
NASM
73 lines
2.2 KiB
NASM
;
|
|
; Copyright 2010 Stefan Lankes, Chair for Operating Systems,
|
|
; RWTH Aachen University
|
|
;
|
|
; Licensed under the Apache License, Version 2.0 (the "License");
|
|
; you may not use this file except in compliance with the License.
|
|
; You may obtain a copy of the License at
|
|
;
|
|
; http://www.apache.org/licenses/LICENSE-2.0
|
|
;
|
|
; Unless required by applicable law or agreed to in writing, software
|
|
; distributed under the License is distributed on an "AS IS" BASIS,
|
|
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
; See the License for the specific language governing permissions and
|
|
; limitations under the License.
|
|
;
|
|
; This file is part of MetalSVM.
|
|
|
|
; This is the kernel's entry point for the application processors. We switch to the
|
|
; protected mode and jump to our MetalSVM kernel.
|
|
|
|
[BITS 16]
|
|
SECTION .text
|
|
GLOBAL _start
|
|
ORG 0x7000
|
|
_start:
|
|
cli
|
|
lgdt [gdtr]
|
|
|
|
; switch to protected mode by setting PE bit
|
|
mov eax, cr0
|
|
or al, 0x1
|
|
mov cr0, eax
|
|
|
|
; far jump to the 32bit code
|
|
jmp dword codesel : _pmstart
|
|
|
|
[BITS 32]
|
|
_pmstart:
|
|
xor eax, eax
|
|
mov ax, datasel
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov fs, ax
|
|
mov gs, ax
|
|
mov ss, ax
|
|
mov esp, 0xDEADBEEF
|
|
push DWORD 0xDEADDEAD
|
|
push DWORD 0x00 ; dummy value
|
|
jmp codesel : 0xDEADC0DE
|
|
jmp $
|
|
|
|
gdtr: ; descritor table
|
|
dw gdt_end-gdt-1 ; limit
|
|
dd gdt ; base adresse
|
|
gdt:
|
|
dd 0,0 ; null descriptor
|
|
codesel equ $-gdt
|
|
dw 0xFFFF ; segment size 0..15
|
|
dw 0x0000 ; segment address 0..15
|
|
db 0x00 ; segment address 16..23
|
|
db 0x9A ; access permissions und type
|
|
db 0xCF ; additional information and segment size 16...19
|
|
db 0x00 ; segment address 24..31
|
|
datasel equ $-gdt
|
|
dw 0xFFFF ; segment size 0..15
|
|
dw 0x0000 ; segment address 0..15
|
|
db 0x00 ; segment address 16..23
|
|
db 0x92 ; access permissions and type
|
|
db 0xCF ; additional informationen and degment size 16...19
|
|
db 0x00 ; segment address 24..31
|
|
gdt_end:
|
|
|