summaryrefslogtreecommitdiff
path: root/boot2/pm.asm
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-11-14 11:08:04 +0100
committerMichal Idziorek <m.i@gmx.at>2014-11-14 11:08:04 +0100
commite3cc5f6c89ba9f37bf2c1edf588d0f75c1d63c57 (patch)
tree1c43c3e9ce81f7564beb3a970b88beaa66169946 /boot2/pm.asm
parent2761b620043ad511d9baf66d5478a463aeece77b (diff)
rename dirs
Diffstat (limited to 'boot2/pm.asm')
-rw-r--r--boot2/pm.asm36
1 files changed, 36 insertions, 0 deletions
diff --git a/boot2/pm.asm b/boot2/pm.asm
new file mode 100644
index 0000000..e6f3474
--- /dev/null
+++ b/boot2/pm.asm
@@ -0,0 +1,36 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;; Miguel's FoolOS Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; switch_to_pm - actual switch from 16bit real to 32bit protected
+; init_pm - sets up some regs and calls boot_32_pm
+;
+
+[bits 16]
+switch_to_pm:
+
+ cli ;switch off interrupts!
+ lgdt [gdt_descriptor] ;load descriptor table!
+; lldt [gdt_descriptor] ;load descriptor table! (local)
+
+ ;switch on 32-bit protected mode
+ mov eax, cr0
+ or eax,0x1
+ mov cr0, eax
+
+ jmp CODE_SEG:init_pm
+
+[bits 32]
+init_pm:
+
+ mov ax, DATA_SEG
+ mov ds, ax
+ mov ss, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+
+ mov ebp, 0x07bff
+ mov esp, ebp
+
+ call boot_32_pm ;continue booting in 32-bit protected mode