Sync to trunk (r46918)
[reactos.git] / boot / freeldr / freeldr / arch / amd64 / boot.S
1 /*
2 * FreeLoader
3 * Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 .text
21 .code16
22
23 #define ASM
24 #include <arch.h>
25
26
27 EXTERN(ChainLoadBiosBootSectorCode)
28 .code64
29
30 call x86_64_SwitchToReal
31 .code16
32
33 /* Set the boot drive */
34 mov dl, BootDrive
35
36 /* Load segment registers */
37 cli
38 mov bx, 0x0000
39 mov ds, bx
40 mov es, bx
41 mov fs, bx
42 mov gs, bx
43 mov ss, bx
44 mov sp, 0x7C00
45
46 // ljmpl $0x0000,$0x7C00
47 jmp 0x7c00:0x0000
48
49 EXTERN(SoftReboot)
50 .code64
51
52 call x86_64_SwitchToReal
53 .code16
54
55 mov ax, 0x40
56 mov ds, ax
57 mov si, 0x72
58
59 // Set the word at location 40:72 to 1234h
60 mov word ptr [si], 0x1234
61
62 // and jump to location FFFF:0 in ROM
63 // ljmpl $0xFFFF,$0x0000
64 jmp 0xffff: 0x0000