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