redesign of the boot code of the application processor
This commit is contained in:
parent
1fb1379a9c
commit
e7c0f53562
1 changed files with 32 additions and 64 deletions
|
@ -22,55 +22,10 @@
|
|||
[BITS 16]
|
||||
SECTION .text
|
||||
GLOBAL _start
|
||||
ORG 0x10000
|
||||
ORG 0x7000
|
||||
_start:
|
||||
jmp _realstart
|
||||
|
||||
struc GDT_STR
|
||||
s0_15: resw 1
|
||||
b0_15: resw 1
|
||||
b16_23: resb 1
|
||||
flags: resb 1
|
||||
access: resb 1
|
||||
b24_31: resb 1
|
||||
endstruc
|
||||
|
||||
gdt_start dw gdt_size
|
||||
gdt_ptr dd dummy_descriptor
|
||||
|
||||
dummy_descriptor: istruc GDT_STR
|
||||
at s0_15, dw 0
|
||||
at b0_15, dw 0
|
||||
at b16_23, db 0
|
||||
at flags, db 0
|
||||
at access, db 0
|
||||
at b24_31, db 0
|
||||
iend
|
||||
|
||||
; 4GB 32-bit code , 9ah = 10011010b = Present, DPL 00,No System, Code Exec/Read.
|
||||
code32_descriptor: istruc GDT_STR
|
||||
at s0_15, dw 0x0ffff
|
||||
at b0_15, dw 0
|
||||
at b16_23, db 0
|
||||
at flags, db 0x9a
|
||||
at access, db 0xcf
|
||||
at b24_31, db 0
|
||||
iend
|
||||
|
||||
; 4GB 32-bit data, 92h = 10010010b = Present, DPL 00, No System, Data Read/Write
|
||||
data32_descriptor: istruc GDT_STR
|
||||
at s0_15, dw 0x0ffff
|
||||
at b0_15, dw 0
|
||||
at b16_23, db 0
|
||||
at flags, db 0x92
|
||||
at access, db 0xcf
|
||||
at b24_31, db 0
|
||||
iend
|
||||
|
||||
gdt_size equ $ - (dummy_descriptor) - 1
|
||||
|
||||
_realstart:
|
||||
lgdt [gdt_start]
|
||||
cli
|
||||
lgdt [gdtr]
|
||||
|
||||
; switch to protected mode by setting PE bit
|
||||
mov eax, cr0
|
||||
|
@ -78,28 +33,41 @@ _realstart:
|
|||
mov cr0, eax
|
||||
|
||||
; far jump to the 32bit code
|
||||
jmp dword 0x08 : _pmstart
|
||||
jmp dword codesel : _pmstart
|
||||
|
||||
[BITS 32]
|
||||
_pmstart:
|
||||
cli
|
||||
xor eax, eax
|
||||
mov ax, 0x10
|
||||
mov ax, datasel
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
mov ss, ax
|
||||
; enable cache and turn on FPU exceptions
|
||||
mov eax, cr0
|
||||
and eax, 0x9fffffff
|
||||
or eax, 0x20
|
||||
mov cr0, eax
|
||||
; clear the current pgd entry
|
||||
xor eax, eax
|
||||
mov cr3, eax
|
||||
; set stack pointer
|
||||
mov esp, 0xDEADBEEF
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
jmp 0x08 : 0xDEADC0DE
|
||||
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:
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue