source: bootcd/isolinux/syslinux-6.03/gpxe/src/arch/i386/prefix/hdprefix.S

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 1.5 KB
Line 
1FILE_LICENCE ( GPL2_OR_LATER )
2
3        .text
4        .arch i386
5        .section ".prefix", "awx", @progbits
6        .code16
7        .org 0
8
9        movw    $load_image, %bp
10        jmp     find_active_partition
11
12#include "bootpart.S"
13
14load_image:
15        /* Get disk geometry */
16        pushal
17        pushw   %es
18        movb    $0x08, %ah
19        int     $0x13
20        jc      load_failed
21        movb    %cl, max_sector
22        movb    %dh, max_head
23        popw    %es
24        popal
25       
261:      /* Read to end of current track */
27        movb    %cl, %al
28        negb    %al
29        addb    max_sector, %al
30        incb    %al
31        andb    $0x3f, %al
32        movzbl  %al, %eax
33        call    *read_sectors
34        jc      load_failed
35       
36        /* Update %es */
37        movw    %es, %bx
38        shll    $5, %eax
39        addw    %ax, %bx
40        movw    %bx, %es
41        shrl    $5, %eax
42       
43        /* Update LBA address */
44        addl    %eax, %edi
45        adcl    $0, %esi
46       
47        /* Update CHS address */
48        andb    $0xc0, %cl
49        orb     $0x01, %cl
50        incb    %dh
51        cmpb    max_head, %dh
52        jbe     2f
53        xorb    %dh, %dh
54        incb    %ch
55        jnc     2f
56        addb    $0xc0, %cl
572:
58        /* Loop until whole image is read */
59        subl    %eax, load_length
60        ja      1b
61        ljmp    $BOOT_SEG, $start_image
62
63max_sector:
64        .byte   0
65max_head:
66        .byte   0
67load_length:
68        .long   0
69       
70        .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */
71        .ascii  "ADDL"
72        .long   load_length
73        .long   512
74        .long   0
75        .previous
76
77
78load_failed:
79        movw    $10f, %si
80        jmp     boot_error
8110:     .asciz  "Could not load gPXE\r\n"
82
83        .org 510
84        .byte 0x55, 0xaa
85
86start_image:
87        /* Install gPXE */
88        call    install
89
90        /* Set up real-mode stack */
91        movw    %bx, %ss
92        movw    $_estack16, %sp
93
94        /* Jump to .text16 segment */
95        pushw   %ax
96        pushw   $1f
97        lret
98        .section ".text16", "awx", @progbits
991:
100        pushl   $main
101        pushw   %cs
102        call    prot_call
103        popl    %ecx /* discard */
104
105        /* Uninstall gPXE */
106        call    uninstall
107
108        /* Boot next device */
109        int $0x18
Note: See TracBrowser for help on using the repository browser.