- Update to trunk
[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 #include <asm.inc>
21
22
23 .text
24 .code16
25
26 #define ASM
27 #include <arch.h>
28
29 PUBLIC ChainLoadBiosBootSectorCode
30 ChainLoadBiosBootSectorCode:
31 .code64
32
33 call x86_64_SwitchToReal
34 .code16
35
36 /* Set the boot drive */
37 mov dl, BootDrive
38
39 /* Load segment registers */
40 cli
41 mov bx, 0x0000
42 mov ds, bx
43 mov es, bx
44 mov fs, bx
45 mov gs, bx
46 mov ss, bx
47 mov sp, 0x7C00
48
49 // ljmpl $0x0000,$0x7C00
50 jmp 0x7c00:0x0000
51
52 PUBLIC SoftReboot
53 SoftReboot:
54 .code64
55
56 call x86_64_SwitchToReal
57 .code16
58
59 mov ax, 0x40
60 mov ds, ax
61 mov si, 0x72
62
63 // Set the word at location 40:72 to 1234h
64 mov word ptr [si], 0x1234
65
66 // and jump to location FFFF:0 in ROM
67 // ljmpl $0xFFFF,$0x0000
68 jmp 0xffff: 0x0000