diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/qboot/cstart.S | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/qboot/cstart.S')
-rw-r--r-- | roms/qboot/cstart.S | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/roms/qboot/cstart.S b/roms/qboot/cstart.S new file mode 100644 index 000000000..6f5741cf3 --- /dev/null +++ b/roms/qboot/cstart.S @@ -0,0 +1,45 @@ +.code16gcc +#include "assembly.h" +.section .init +ENTRY(pm_entry) + xor %ax, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + mov %ax, %ss + mov $0x7c00, %sp + + mov %cr0, %eax + and $~((1 << 30) | (1 << 29)), %eax # clear CD and NW + or $1, %al + mov %eax, %cr0 + lgdtl %cs:0xff80 + gdt32_descr - pm_entry + ljmpl $8, $0xffffff80 + 2f - pm_entry +2: + .code32 + mov $16, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + mov %ax, %ss + ljmp $8, $0xffff0000 + +gdt32: + .quad 0 + .quad 0x00cf9b000000ffff // flat 32-bit code segment + .quad 0x00cf93000000ffff // flat 32-bit data segment + .quad 0x000f9b0f0000ffff // 64K 16-bit code segment at 0xF0000 + .quad 0x000f93000000ffff // 64K 16-bit data segment at 0x0 +gdt32_end: + +gdt32_descr: + .word gdt32_end - gdt32 - 1 + .long 0xffffff80 + gdt32 - pm_entry +ENTRY_END(pm_entry) + + .code16gcc + .section .resetvector + jmp pm_entry + |