VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bootsector-pae.asm@ 58543

Last change on this file since 58543 was 56295, checked in by vboxsync, 9 years ago

ValidationKit: Updated (C) year.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1; $Id: bootsector-pae.asm 56295 2015-06-09 14:29:55Z vboxsync $
2;; @file
3; Bootsector that switches the CPU info PAE mode.
4;
5
6;
7; Copyright (C) 2007-2015 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27%include "iprt/asmdefs.mac"
28%include "iprt/x86.mac"
29
30
31;; The boot sector load address.
32%define BS_ADDR 0x7c00
33%define PDP_ADDR 0x9000
34%define PD_ADDR 0xa000
35
36
37BITS 16
38start:
39 ; Start with a jump just to follow the convention.
40 jmp short the_code
41 nop
42times 3ah db 0
43
44the_code:
45 cli
46 xor edx, edx
47 mov ds, dx ; Use 0 based addresses
48
49 ;
50 ; Create a paging hierarchy
51 ;
52 mov cx, 4
53 xor esi, esi ; physical address
54 mov ebx, PDP_ADDR
55 mov edi, PD_ADDR
56pdptr_loop:
57 ; The page directory pointer entry.
58 mov dword [ebx], edi
59 or word [bx], X86_PDPE_P
60 mov dword [ebx + 4], edx
61
62 ; The page directory.
63pd_loop:
64 mov dword [edi], esi
65 or word [di], X86_PDE4M_P | X86_PDE4M_RW | X86_PDE4M_PS
66 mov dword [edi + 4], 0
67 add esi, 0x00200000 ; 2MB
68 add di, 8
69 test di, 0fffh
70 jnz pd_loop
71
72 add bx, 8
73 loop pdptr_loop
74
75 ;
76 ; Switch to protected mode.
77 ;
78 lgdt [(gdtr - start) + BS_ADDR]
79 lidt [(idtr_null - start) + BS_ADDR]
80
81 mov eax, PDP_ADDR
82 mov cr3, eax
83
84 mov eax, cr4
85 or eax, X86_CR4_PAE | X86_CR4_PSE
86 mov cr4, eax
87
88 mov eax, cr0
89 or eax, X86_CR0_PE | X86_CR0_PG
90 mov cr0, eax
91 jmp far 0x0008:((code32_start - start) + BS_ADDR) ; 8=32-bit CS
92
93BITS 32
94code32_start:
95 mov ax, 0x10
96 mov ds, ax
97 mov es, ax
98 mov fs, ax
99 mov gs, ax
100 mov ax, 0x18
101 mov es, ax
102 mov esp, 0x80000
103
104 ; eye catchers
105 mov eax, 0xCafeBabe
106 mov ebx, eax
107 mov ecx, eax
108 mov edx, eax
109 mov edi, eax
110 mov esi, eax
111 mov ebp, eax
112
113 ;
114 ; Boch shutdown request.
115 ;
116 mov bl, 64
117 mov dx, 08900h
118retry:
119 mov ecx, 8
120 mov esi, (szShutdown - start) + BS_ADDR
121 rep outsb
122 dec bl
123 jnz retry
124 ; Shutdown failed!
125hlt_again:
126 hlt
127 cli
128 jmp hlt_again
129
130 ;
131 ; The GDT.
132 ;
133align 8, db 0
134gdt:
135 dw 0, 0, 0, 0 ; null selector
136 dw 0xffff, 0, 0x9b00, 0x00cf ; 32 bit flat code segment (0x08)
137 dw 0xffff, 0, 0x9300, 0x00cf ; 32 bit flat data segment (0x10)
138 dw 0xffff, 0, 0x9300, 0x00cf ; 32 bit flat stack segment (0x18)
139
140gdtr:
141 dw 8*4-1 ; limit 15:00
142 dw (gdt - start) + BS_ADDR ; base 15:00
143 db 0 ; base 23:16
144 db 0 ; unused
145
146idtr_null:
147 dw 0 ; limit 15:00
148 dw (gdt - start) + BS_ADDR ; base 15:00
149 db 0 ; base 23:16
150 db 0 ; unused
151
152szShutdown:
153 db 'Shutdown', 0
154
155 ;
156 ; Padd the remainder of the sector with zeros and
157 ; end it with the dos signature.
158 ;
159padding:
160times 510 - (padding - start) db 0
161 db 055h, 0aah
162
163
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette