- 论坛徽章:
- 0
|
[color="#ffffff"] 1 /*
[color="#ffff00"] 2 * [color="#98fb98"]GRUB -- [color="#98fb98"]GRand [color="#98fb98"]Unified [color="#98fb98"]Bootloader
[color="#ffff00"] 3 * [color="#98fb98"]Copyright ([color="#98fb98"]C) [color="#ffa0a0"]1999,[color="#ffa0a0"]2000,[color="#ffa0a0"]2001 [color="#98fb98"]Free [color="#98fb98"]Software [color="#98fb98"]Foundation, [color="#98fb98"]Inc.
[color="#ffff00"] 4 *
[color="#ffff00"] 5 * [color="#98fb98"]This [color="#98fb98"]program [color="#98fb98"]is [color="#98fb98"]free [color="#98fb98"]software;[color="#87ceeb"] you can redistribute it and/or modify
[color="#ffff00"] 6 * [color="#98fb98"]it [color="#98fb98"]under [color="#98fb98"]the [color="#98fb98"]terms [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]GNU [color="#98fb98"]General [color="#98fb98"]Public [color="#98fb98"]License [color="#98fb98"]as [color="#98fb98"]published [color="#98fb98"]by
[color="#ffff00"] 7 * [color="#98fb98"]the [color="#98fb98"]Free [color="#98fb98"]Software [color="#98fb98"]Foundation;[color="#87ceeb"] either version 2 of the License, or
[color="#ffff00"] 8 * ([color="#98fb98"]at [color="#98fb98"]your [color="#98fb98"]option) [color="#98fb98"]any [color="#98fb98"]later [color="#98fb98"]version.
[color="#ffff00"] 9 *
[color="#ffff00"] 10 * [color="#98fb98"]This [color="#98fb98"]program [color="#98fb98"]is [color="#98fb98"]distributed [color="#98fb98"]in [color="#98fb98"]the [color="#98fb98"]hope [color="#98fb98"]that [color="#98fb98"]it [color="#98fb98"]will [color="#98fb98"]be [color="#98fb98"]useful,
[color="#ffff00"] 11 * [color="#98fb98"]but [color="#98fb98"]WITHOUT [color="#98fb98"]ANY [color="#98fb98"]WARRANTY;[color="#87ceeb"] without even the implied warranty of
[color="#ffff00"] 12 * [color="#98fb98"]MERCHANTABILITY [color="#98fb98"]or [color="#98fb98"]FITNESS [color="#98fb98"]FOR [color="#98fb98"]A [color="#98fb98"]PARTICULAR [color="#98fb98"]PURPOSE. [color="#98fb98"]See [color="#98fb98"]the
[color="#ffff00"] 13 * [color="#98fb98"]GNU [color="#98fb98"]General [color="#98fb98"]Public [color="#98fb98"]License [color="#98fb98"]for [color="#98fb98"]more [color="#98fb98"]details.
[color="#ffff00"] 14 *
[color="#ffff00"] 15 * [color="#98fb98"]You [color="#98fb98"]should [color="#98fb98"]have [color="#98fb98"]received [color="#98fb98"]a [color="#98fb98"]copy [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]GNU [color="#98fb98"]General [color="#98fb98"]Public [color="#98fb98"]License
[color="#ffff00"] 16 * [color="#98fb98"]along [color="#98fb98"]with [color="#98fb98"]this [color="#98fb98"]program;[color="#87ceeb"] if not, write to the Free Software
[color="#ffff00"] 17 * [color="#98fb98"]Foundation, [color="#98fb98"]Inc., [color="#ffa0a0"]675 [color="#98fb98"]Mass [color="#98fb98"]Ave, [color="#98fb98"]Cambridge, [color="#98fb98"]MA [color="#ffa0a0"]0213[color="#ffa0a0"]9, [color="#98fb98"]USA.
[color="#ffff00"] 18 */
[color="#ffff00"] 19
[color="#ffff00"] 20 #[color="#98fb98"]define [color="#98fb98"]ASM_FILE
[color="#ffff00"] 21 #[color="#98fb98"]include
[color="#ffff00"] 22
[color="#ffff00"] 23 #[color="#98fb98"]ifndef [color="#98fb98"]STAGE1_5
[color="#ffff00"] 24 #[color="#98fb98"]include
[color="#ffff00"] 25 #[color="#98fb98"]endif
[color="#ffff00"] 26
[color="#ffff00"] 27 /*
[color="#ffff00"] 28 * [color="#98fb98"]defines [color="#98fb98"]for [color="#98fb98"]the [color="#98fb98"]code [color="#98fb98"]go [color="#98fb98"]here
[color="#ffff00"] 29 */
[color="#ffff00"] 30
[color="#ffff00"] 31 /* [color="#98fb98"]Absolute [color="#98fb98"]addresses
[color="#ffff00"] 32 [color="#98fb98"]This [color="#98fb98"]makes [color="#98fb98"]the [color="#98fb98"]assembler [color="#98fb98"]generate [color="#98fb98"]the [color="#98fb98"]address [color="#98fb98"]without [color="#98fb98"]support
[color="#ffff00"] 33 [color="#98fb98"]from [color="#98fb98"]the [color="#98fb98"]linker. ([color="#98fb98"]ELF [color="#98fb98"]can'[color="#98fb98"]t [color="#98fb98"]relocate [color="#ffa0a0"]16-[color="#98fb98"]bit [color="#98fb98"]addresses!) */
[color="#ffff00"] 34 #[color="#98fb98"]ifdef [color="#98fb98"]STAGE1_5
[color="#ffff00"] 35 # [color="#98fb98"]define [color="#98fb98"]ABS([color="#98fb98"]x) ([color="#98fb98"]x-[color="#98fb98"]_start+[color="#ffa0a0"]0x2000)
[color="#ffff00"] 36 #[color="#98fb98"]else
[color="#ffff00"] 37 # [color="#98fb98"]define [color="#98fb98"]ABS([color="#98fb98"]x) ([color="#98fb98"]x-[color="#98fb98"]_start+[color="#ffa0a0"]0x8000)
[color="#ffff00"] 38 #[color="#98fb98"]endif /* [color="#98fb98"]STAGE1_5 */
[color="#ffff00"] 39
[color="#ffff00"] 40 /* [color="#98fb98"]Print [color="#98fb98"]message [color="#98fb98"]string */
[color="#ffff00"] 41 #[color="#98fb98"]define [color="#98fb98"]MSG([color="#98fb98"]x) [color="#98fb98"]movw $[color="#98fb98"]ABS([color="#98fb98"]x), %[color="#98fb98"]si;[color="#87ceeb"] call message
[color="#ffff00"] 42
[color="#ffff00"] 43 [color="#f0e68c"].file "[color="#98fb98"]start.[color="#98fb98"]S"
[color="#ffff00"] 44
[color="#ffff00"] 45 [color="#f0e68c"].text
[color="#ffff00"] 46
[color="#ffff00"] 47 /* [color="#98fb98"]Tell [color="#98fb98"]GAS [color="#98fb98"]to [color="#98fb98"]generate [color="#ffa0a0"]16-[color="#98fb98"]bit [color="#98fb98"]instructions [color="#98fb98"]so [color="#98fb98"]that [color="#98fb98"]this [color="#98fb98"]code [color="#98fb98"]works
[color="#ffff00"] 48 [color="#98fb98"]in [color="#98fb98"]real [color="#98fb98"]mode. */
[color="#ffff00"] 49 [color="#f0e68c"].code[color="#ffa0a0"]16
[color="#ffff00"] 50
[color="#ffff00"] 51 [color="#f0e68c"].globl [color="#98fb98"]start, [color="#98fb98"]_start
[color="#ffff00"] 52 [color="#98fb98"]start:
[color="#ffff00"] 53 [color="#98fb98"]_start:
[color="#ffff00"] 54 /*
[color="#ffff00"] 55 * [color="#98fb98"]_start [color="#98fb98"]is [color="#98fb98"]loaded [color="#98fb98"]at [color="#ffa0a0"]0x8000 [color="#98fb98"]and [color="#98fb98"]is [color="#98fb98"]jumped [color="#98fb98"]to [color="#98fb98"]with
[color="#ffff00"] 56 * [color="#98fb98"]CS:[color="#98fb98"]IP 0:[color="#ffa0a0"]0x8000 [color="#98fb98"]in [color="#98fb98"]stage2.
[color="#ffff00"] 57 */
[color="#ffff00"] 58
[color="#ffff00"] 59 /*
[color="#ffff00"] 60 * [color="#98fb98"]we [color="#98fb98"]continue [color="#98fb98"]to [color="#98fb98"]use [color="#98fb98"]the [color="#98fb98"]stack [color="#98fb98"]for [color="#98fb98"]stage1 [color="#98fb98"]and [color="#98fb98"]assume [color="#98fb98"]that
[color="#ffff00"] 61 * [color="#98fb98"]some [color="#98fb98"]registers [color="#98fb98"]are [color="#98fb98"]set [color="#98fb98"]to [color="#98fb98"]correct [color="#98fb98"]values. [color="#98fb98"]See [color="#98fb98"]stage1.[color="#98fb98"]S
[color="#ffff00"] 62 * [color="#98fb98"]for [color="#98fb98"]more [color="#98fb98"]information.
[color="#ffff00"] 63 */
[color="#ffff00"] 64
[color="#ffff00"] 65 /* [color="#98fb98"]save [color="#98fb98"]drive [color="#98fb98"]reference [color="#98fb98"]first [color="#98fb98"]thing! */
[color="#ffff00"] 66 [color="#98fb98"]pushw %[color="#98fb98"]dx
[color="#ffff00"] 67
[color="#ffff00"] 68 /* [color="#98fb98"]print [color="#98fb98"]a [color="#98fb98"]notification [color="#98fb98"]message [color="#98fb98"]on [color="#98fb98"]the [color="#98fb98"]screen */
[color="#ffff00"] 69 [color="#98fb98"]pushw %[color="#98fb98"]si
[color="#ffff00"] 70 [color="#98fb98"]MSG([color="#98fb98"]notification_string)
[color="#ffff00"] 71 [color="#98fb98"]popw %[color="#98fb98"]si
[color="#ffff00"] 72
[color="#ffff00"] 73 /* [color="#98fb98"]this [color="#98fb98"]sets [color="#98fb98"]up [color="#98fb98"]for [color="#98fb98"]the [color="#98fb98"]first [color="#98fb98"]run [color="#98fb98"]through "[color="#98fb98"]bootloop" */
[color="#ffff00"] 74 [color="#98fb98"]movw $[color="#98fb98"]ABS([color="#98fb98"]firstlist - [color="#98fb98"]BOOTSEC_LISTSIZE), %[color="#98fb98"]di
[color="#ffff00"] 75
[color="#ffff00"] 76 /* [color="#98fb98"]save [color="#98fb98"]the [color="#98fb98"]sector [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]second [color="#98fb98"]sector [color="#98fb98"]in %[color="#98fb98"]ebp */
[color="#ffff00"] 77 [color="#98fb98"]movl (%[color="#98fb98"]di), %[color="#98fb98"]ebp
[color="#ffff00"] 78
[color="#ffff00"] 79 /* [color="#98fb98"]this [color="#98fb98"]is [color="#98fb98"]the [color="#98fb98"]loop [color="#98fb98"]for [color="#98fb98"]reading [color="#98fb98"]the [color="#98fb98"]secondary [color="#98fb98"]boot-[color="#98fb98"]loader [color="#98fb98"]in */
[color="#ffff00"] 80 [color="#98fb98"]bootloop:
[color="#ffff00"] 81
[color="#ffff00"] 82 /* [color="#98fb98"]check [color="#98fb98"]the [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors [color="#98fb98"]to [color="#98fb98"]read */
[color="#ffff00"] 83 [color="#98fb98"]cmpw $[color="#ffa0a0"]0, [color="#ffa0a0"]4(%[color="#98fb98"]di)
[color="#ffff00"] 84
[color="#ffff00"] 85 /* [color="#98fb98"]if [color="#98fb98"]zero, [color="#98fb98"]go [color="#98fb98"]to [color="#98fb98"]the [color="#98fb98"]start [color="#98fb98"]function */
[color="#ffff00"] 86 [color="#98fb98"]je [color="#98fb98"]bootit
[color="#ffff00"] 87
[color="#ffff00"] 88 [color="#98fb98"]setup_sectors:
[color="#ffff00"] 89 /* [color="#98fb98"]check [color="#98fb98"]if [color="#98fb98"]we [color="#98fb98"]use [color="#98fb98"]LBA [color="#98fb98"]or [color="#98fb98"]CHS */
[color="#ffff00"] 90 [color="#98fb98"]cmpb $[color="#ffa0a0"]0, -[color="#ffa0a0"]1(%[color="#98fb98"]si)
[color="#ffff00"] 91
[color="#ffff00"] 92 /* [color="#98fb98"]jump [color="#98fb98"]to [color="#98fb98"]chs_mode [color="#98fb98"]if [color="#98fb98"]zero */
[color="#ffff00"] 93 [color="#98fb98"]je [color="#98fb98"]chs_mode
[color="#ffff00"] 94
[color="#ffff00"] 95 [color="#98fb98"]lba_mode:
[color="#ffff00"] 96 /* [color="#98fb98"]load [color="#98fb98"]logical [color="#98fb98"]sector [color="#98fb98"]start */
[color="#ffff00"] 97 [color="#98fb98"]movl (%[color="#98fb98"]di), %[color="#98fb98"]ebx
[color="#ffff00"] 98
[color="#ffff00"] 99 /* [color="#98fb98"]the [color="#98fb98"]maximum [color="#98fb98"]is [color="#98fb98"]limited [color="#98fb98"]to [color="#ffa0a0"]0x7f [color="#98fb98"]because [color="#98fb98"]of [color="#98fb98"]Phoenix [color="#98fb98"]EDD */
[color="#ffff00"]100 [color="#98fb98"]xorl %[color="#98fb98"]eax, %[color="#98fb98"]eax
[color="#ffff00"]101 [color="#98fb98"]movb $[color="#ffa0a0"]0x7f, %[color="#98fb98"]al
[color="#ffff00"]102
[color="#ffff00"]103 /* [color="#98fb98"]how [color="#98fb98"]many [color="#98fb98"]do [color="#98fb98"]we [color="#98fb98"]really [color="#98fb98"]want [color="#98fb98"]to [color="#98fb98"]read? */
[color="#ffff00"]104 [color="#98fb98"]cmpw %[color="#98fb98"]ax, [color="#ffa0a0"]4(%[color="#98fb98"]di) /* [color="#98fb98"]compare [color="#98fb98"]against [color="#98fb98"]total [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors */
[color="#ffff00"]105
[color="#ffff00"]106 /* [color="#98fb98"]which [color="#98fb98"]is [color="#98fb98"]greater? */
[color="#ffff00"]107 [color="#98fb98"]jg [color="#ffa0a0"]1[color="#98fb98"]f
[color="#ffff00"]108
[color="#ffff00"]109 /* [color="#98fb98"]if [color="#98fb98"]less [color="#98fb98"]than, [color="#98fb98"]set [color="#98fb98"]to [color="#98fb98"]total */
[color="#ffff00"]110 [color="#98fb98"]movw [color="#ffa0a0"]4(%[color="#98fb98"]di), %[color="#98fb98"]ax
[color="#ffff00"]111
[color="#ffff00"]112 [color="#ffa0a0"]1:
[color="#ffff00"]113 /* [color="#98fb98"]subtract [color="#98fb98"]from [color="#98fb98"]total */
[color="#ffff00"]114 [color="#98fb98"]subw %[color="#98fb98"]ax, [color="#ffa0a0"]4(%[color="#98fb98"]di)
[color="#ffff00"]115
[color="#ffff00"]116 /* [color="#98fb98"]add [color="#98fb98"]into [color="#98fb98"]logical [color="#98fb98"]sector [color="#98fb98"]start */
[color="#ffff00"]117 [color="#98fb98"]addl %[color="#98fb98"]eax, (%[color="#98fb98"]di)
[color="#ffff00"]118
[color="#ffff00"]119 /* [color="#98fb98"]set [color="#98fb98"]up [color="#98fb98"]disk [color="#98fb98"]address [color="#98fb98"]packet */
[color="#ffff00"]120
[color="#ffff00"]121 /* [color="#98fb98"]the [color="#98fb98"]size [color="#98fb98"]and [color="#98fb98"]the [color="#98fb98"]reserved [color="#98fb98"]byte */
[color="#ffff00"]122 [color="#98fb98"]movw $[color="#ffa0a0"]0x0010, (%[color="#98fb98"]si)
[color="#ffff00"]123
[color="#ffff00"]124 /* [color="#98fb98"]the [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors */
[color="#ffff00"]125 [color="#98fb98"]movw %[color="#98fb98"]ax, [color="#ffa0a0"]2(%[color="#98fb98"]si)
[color="#ffff00"]126
[color="#ffff00"]127 /* [color="#98fb98"]the [color="#98fb98"]absolute [color="#98fb98"]address ([color="#98fb98"]low [color="#ffa0a0"]32 [color="#98fb98"]bits) */
[color="#ffff00"]128 [color="#98fb98"]movl %[color="#98fb98"]ebx, [color="#ffa0a0"]8(%[color="#98fb98"]si)
[color="#ffff00"]129
[color="#ffff00"]130 /* [color="#98fb98"]the [color="#98fb98"]segment [color="#98fb98"]of [color="#98fb98"]buffer [color="#98fb98"]address */
[color="#ffff00"]131 [color="#98fb98"]movw $[color="#98fb98"]BUFFERSEG, [color="#ffa0a0"]6(%[color="#98fb98"]si)
[color="#ffff00"]132
[color="#ffff00"]133 /* [color="#98fb98"]save %[color="#98fb98"]ax [color="#98fb98"]from [color="#98fb98"]destruction! */
[color="#ffff00"]134 [color="#98fb98"]pushw %[color="#98fb98"]ax
[color="#ffff00"]135
[color="#ffff00"]136 /* [color="#98fb98"]zero %[color="#98fb98"]eax */
[color="#ffff00"]137 [color="#98fb98"]xorl %[color="#98fb98"]eax, %[color="#98fb98"]eax
[color="#ffff00"]138
[color="#ffff00"]139 /* [color="#98fb98"]the [color="#98fb98"]offset [color="#98fb98"]of [color="#98fb98"]buffer [color="#98fb98"]address */
[color="#ffff00"]140 [color="#98fb98"]movw %[color="#98fb98"]ax, [color="#ffa0a0"]4(%[color="#98fb98"]si)
[color="#ffff00"]141
[color="#ffff00"]142 /* [color="#98fb98"]the [color="#98fb98"]absolute [color="#98fb98"]address ([color="#98fb98"]high [color="#ffa0a0"]32 [color="#98fb98"]bits) */
[color="#ffff00"]143 [color="#98fb98"]movl %[color="#98fb98"]eax, [color="#ffa0a0"]12(%[color="#98fb98"]si)
[color="#ffff00"]144
[color="#ffff00"]145
[color="#ffff00"]146 /*
[color="#ffff00"]147 * [color="#98fb98"]BIOS [color="#98fb98"]call "[color="#98fb98"]INT [color="#ffa0a0"]0x13 [color="#98fb98"]Function [color="#ffa0a0"]0x42" [color="#98fb98"]to [color="#98fb98"]read [color="#98fb98"]sectors [color="#98fb98"]from [color="#98fb98"]disk [color="#98fb98"]into [color="#98fb98"]memory
[color="#ffff00"]148 * [color="#98fb98"]Call [color="#98fb98"]with %[color="#98fb98"]ah = [color="#ffa0a0"]0x42
[color="#ffff00"]149 * %[color="#98fb98"]dl = [color="#98fb98"]drive [color="#98fb98"]number
[color="#ffff00"]150 * %[color="#98fb98"]ds:%[color="#98fb98"]si = [color="#98fb98"]segment:[color="#98fb98"]offset [color="#98fb98"]of [color="#98fb98"]disk [color="#98fb98"]address [color="#98fb98"]packet
[color="#ffff00"]151 * [color="#98fb98"]Return:
[color="#ffff00"]152 * %[color="#98fb98"]al = [color="#ffa0a0"]0x0 [color="#98fb98"]on [color="#98fb98"]success;[color="#87ceeb"] err code on failure
[color="#ffff00"]153 */
[color="#ffff00"]154
[color="#ffff00"]155 [color="#98fb98"]movb $[color="#ffa0a0"]0x42, %[color="#98fb98"]ah
[color="#ffff00"]156 [color="#98fb98"]int $[color="#ffa0a0"]0x13
[color="#ffff00"]157
[color="#ffff00"]158 [color="#98fb98"]jc [color="#98fb98"]read_error
[color="#ffff00"]159
[color="#ffff00"]160 [color="#98fb98"]movw $[color="#98fb98"]BUFFERSEG, %[color="#98fb98"]bx
[color="#ffff00"]161 [color="#98fb98"]jmp [color="#98fb98"]copy_buffer
[color="#ffff00"]162
[color="#ffff00"]163 [color="#98fb98"]chs_mode:
[color="#ffff00"]164 /* [color="#98fb98"]load [color="#98fb98"]logical [color="#98fb98"]sector [color="#98fb98"]start ([color="#98fb98"]bottom [color="#98fb98"]half) */
[color="#ffff00"]165 [color="#98fb98"]movl (%[color="#98fb98"]di), %[color="#98fb98"]eax
[color="#ffff00"]166
[color="#ffff00"]167 /* [color="#98fb98"]zero %[color="#98fb98"]edx */
[color="#ffff00"]168 [color="#98fb98"]xorl %[color="#98fb98"]edx, %[color="#98fb98"]edx
[color="#ffff00"]169
[color="#ffff00"]170 /* [color="#98fb98"]divide [color="#98fb98"]by [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors */
[color="#ffff00"]171 [color="#98fb98"]divl (%[color="#98fb98"]si)
[color="#ffff00"]172
[color="#ffff00"]173 /* [color="#98fb98"]save [color="#98fb98"]sector [color="#98fb98"]start */
[color="#ffff00"]174 [color="#98fb98"]movb %[color="#98fb98"]dl, [color="#ffa0a0"]10(%[color="#98fb98"]si)
[color="#ffff00"]175
[color="#ffff00"]176 [color="#98fb98"]xorl %[color="#98fb98"]edx, %[color="#98fb98"]edx /* [color="#98fb98"]zero %[color="#98fb98"]edx */
[color="#ffff00"]177 [color="#98fb98"]divl [color="#ffa0a0"]4(%[color="#98fb98"]si) /* [color="#98fb98"]divide [color="#98fb98"]by [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]heads */
[color="#ffff00"]178
[color="#ffff00"]179 /* [color="#98fb98"]save [color="#98fb98"]head [color="#98fb98"]start */
[color="#ffff00"]180 [color="#98fb98"]movb %[color="#98fb98"]dl, [color="#ffa0a0"]11(%[color="#98fb98"]si)
[color="#ffff00"]181
[color="#ffff00"]182 /* [color="#98fb98"]save [color="#98fb98"]cylinder [color="#98fb98"]start */
[color="#ffff00"]183 [color="#98fb98"]movw %[color="#98fb98"]ax, [color="#ffa0a0"]12(%[color="#98fb98"]si)
[color="#ffff00"]184
[color="#ffff00"]185 /* [color="#98fb98"]do [color="#98fb98"]we [color="#98fb98"]need [color="#98fb98"]too [color="#98fb98"]many [color="#98fb98"]cylinders? */
[color="#ffff00"]186 [color="#98fb98"]cmpw [color="#ffa0a0"]8(%[color="#98fb98"]si), %[color="#98fb98"]ax
[color="#ffff00"]187 [color="#98fb98"]jge [color="#98fb98"]geometry_error
[color="#ffff00"]188
[color="#ffff00"]189 /* [color="#98fb98"]determine [color="#98fb98"]the [color="#98fb98"]maximum [color="#98fb98"]sector [color="#98fb98"]length [color="#98fb98"]of [color="#98fb98"]this [color="#98fb98"]read */
[color="#ffff00"]190 [color="#98fb98"]movw (%[color="#98fb98"]si), %[color="#98fb98"]ax /* [color="#98fb98"]get [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors [color="#98fb98"]per [color="#98fb98"]track/[color="#98fb98"]head */
[color="#ffff00"]191
[color="#ffff00"]192 /* [color="#98fb98"]subtract [color="#98fb98"]sector [color="#98fb98"]start */
[color="#ffff00"]193 [color="#98fb98"]subb [color="#ffa0a0"]10(%[color="#98fb98"]si), %[color="#98fb98"]al
[color="#ffff00"]194
[color="#ffff00"]195 /* [color="#98fb98"]how [color="#98fb98"]many [color="#98fb98"]do [color="#98fb98"]we [color="#98fb98"]really [color="#98fb98"]want [color="#98fb98"]to [color="#98fb98"]read? */
[color="#ffff00"]196 [color="#98fb98"]cmpw %[color="#98fb98"]ax, [color="#ffa0a0"]4(%[color="#98fb98"]di) /* [color="#98fb98"]compare [color="#98fb98"]against [color="#98fb98"]total [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors */
[color="#ffff00"]197
[color="#ffff00"]198
[color="#ffff00"]199 /* [color="#98fb98"]which [color="#98fb98"]is [color="#98fb98"]greater? */
[color="#ffff00"]200 [color="#98fb98"]jg [color="#ffa0a0"]2[color="#98fb98"]f
[color="#ffff00"]201
[color="#ffff00"]202 /* [color="#98fb98"]if [color="#98fb98"]less [color="#98fb98"]than, [color="#98fb98"]set [color="#98fb98"]to [color="#98fb98"]total */
[color="#ffff00"]203 [color="#98fb98"]movw [color="#ffa0a0"]4(%[color="#98fb98"]di), %[color="#98fb98"]ax
[color="#ffff00"]204
[color="#ffff00"]205 [color="#ffa0a0"]2:
[color="#ffff00"]206 /* [color="#98fb98"]subtract [color="#98fb98"]from [color="#98fb98"]total */
[color="#ffff00"]207 [color="#98fb98"]subw %[color="#98fb98"]ax, [color="#ffa0a0"]4(%[color="#98fb98"]di)
[color="#ffff00"]208
[color="#ffff00"]209 /* [color="#98fb98"]add [color="#98fb98"]into [color="#98fb98"]logical [color="#98fb98"]sector [color="#98fb98"]start */
[color="#ffff00"]210 [color="#98fb98"]addl %[color="#98fb98"]eax, (%[color="#98fb98"]di)
[color="#ffff00"]211
[color="#ffff00"]212 /*
[color="#ffff00"]213 * [color="#98fb98"]This [color="#98fb98"]is [color="#98fb98"]the [color="#98fb98"]loop [color="#98fb98"]for [color="#98fb98"]taking [color="#98fb98"]care [color="#98fb98"]of [color="#98fb98"]BIOS [color="#98fb98"]geometry [color="#98fb98"]translation ([color="#98fb98"]ugh!)
[color="#ffff00"]214 */
[color="#ffff00"]215
[color="#ffff00"]216 /* [color="#98fb98"]get [color="#98fb98"]high [color="#98fb98"]bits [color="#98fb98"]of [color="#98fb98"]cylinder */
[color="#ffff00"]217 [color="#98fb98"]movb [color="#ffa0a0"]13(%[color="#98fb98"]si), %[color="#98fb98"]dl
[color="#ffff00"]218
[color="#ffff00"]219 [color="#98fb98"]shlb $[color="#ffa0a0"]6, %[color="#98fb98"]dl /* [color="#98fb98"]shift [color="#98fb98"]left [color="#98fb98"]by [color="#ffa0a0"]6 [color="#98fb98"]bits */
[color="#ffff00"]220 [color="#98fb98"]movb [color="#ffa0a0"]10(%[color="#98fb98"]si), %[color="#98fb98"]cl /* [color="#98fb98"]get [color="#98fb98"]sector */
[color="#ffff00"]221
[color="#ffff00"]222 [color="#98fb98"]incb %[color="#98fb98"]cl /* [color="#98fb98"]normalize [color="#98fb98"]sector ([color="#98fb98"]sectors [color="#98fb98"]go
[color="#ffff00"]223 [color="#98fb98"]from [color="#ffa0a0"]1-[color="#98fb98"]N, [color="#98fb98"]not 0-([color="#98fb98"]N-[color="#ffa0a0"]1) ) */
[color="#ffff00"]224 [color="#98fb98"]orb %[color="#98fb98"]dl, %[color="#98fb98"]cl /* [color="#98fb98"]composite [color="#98fb98"]together */
[color="#ffff00"]225 [color="#98fb98"]movb [color="#ffa0a0"]12(%[color="#98fb98"]si), %[color="#98fb98"]ch /* [color="#98fb98"]sector+[color="#98fb98"]hcyl [color="#98fb98"]in [color="#98fb98"]cl, [color="#98fb98"]cylinder [color="#98fb98"]in [color="#98fb98"]ch */
[color="#ffff00"]226
[color="#ffff00"]227 /* [color="#98fb98"]restore %[color="#98fb98"]dx */
[color="#ffff00"]228 [color="#98fb98"]popw %[color="#98fb98"]dx
[color="#ffff00"]229 [color="#98fb98"]pushw %[color="#98fb98"]dx
[color="#ffff00"]230
[color="#ffff00"]231 /* [color="#98fb98"]head [color="#98fb98"]number */
[color="#ffff00"]232 [color="#98fb98"]movb [color="#ffa0a0"]11(%[color="#98fb98"]si), %[color="#98fb98"]dh
[color="#ffff00"]233
[color="#ffff00"]234 [color="#98fb98"]pushw %[color="#98fb98"]ax /* [color="#98fb98"]save %[color="#98fb98"]ax [color="#98fb98"]from [color="#98fb98"]destruction! */
[color="#ffff00"]235
[color="#ffff00"]236 /*
[color="#ffff00"]237 * [color="#98fb98"]BIOS [color="#98fb98"]call "[color="#98fb98"]INT [color="#ffa0a0"]0x13 [color="#98fb98"]Function [color="#ffa0a0"]0x2" [color="#98fb98"]to [color="#98fb98"]read [color="#98fb98"]sectors [color="#98fb98"]from [color="#98fb98"]disk [color="#98fb98"]into [color="#98fb98"]memory
[color="#ffff00"]238 * [color="#98fb98"]Call [color="#98fb98"]with %[color="#98fb98"]ah = [color="#ffa0a0"]0x2
[color="#ffff00"]239 * %[color="#98fb98"]al = [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors
[color="#ffff00"]240 * %[color="#98fb98"]ch = [color="#98fb98"]cylinder
[color="#ffff00"]241 * %[color="#98fb98"]cl = [color="#98fb98"]sector ([color="#98fb98"]bits [color="#ffa0a0"]6-[color="#ffa0a0"]7 [color="#98fb98"]are [color="#98fb98"]high [color="#98fb98"]bits [color="#98fb98"]of "[color="#98fb98"]cylinder")
[color="#ffff00"]242 * %[color="#98fb98"]dh = [color="#98fb98"]head
[color="#ffff00"]243 * %[color="#98fb98"]dl = [color="#98fb98"]drive ([color="#ffa0a0"]0x80 [color="#98fb98"]for [color="#98fb98"]hard [color="#98fb98"]disk, [color="#ffa0a0"]0x0 [color="#98fb98"]for [color="#98fb98"]floppy [color="#98fb98"]disk)
[color="#ffff00"]244 * %[color="#98fb98"]es:%[color="#98fb98"]bx = [color="#98fb98"]segment:[color="#98fb98"]offset [color="#98fb98"]of [color="#98fb98"]buffer
[color="#ffff00"]245 * [color="#98fb98"]Return:
[color="#ffff00"]246 * %[color="#98fb98"]al = [color="#ffa0a0"]0x0 [color="#98fb98"]on [color="#98fb98"]success;[color="#87ceeb"] err code on failure
[color="#ffff00"]247 */
[color="#ffff00"]248
[color="#ffff00"]249 [color="#98fb98"]movw $[color="#98fb98"]BUFFERSEG, %[color="#98fb98"]bx
[color="#ffff00"]250 [color="#98fb98"]movw %[color="#98fb98"]bx, %[color="#98fb98"]es /* [color="#98fb98"]load %[color="#98fb98"]es [color="#98fb98"]segment [color="#98fb98"]with [color="#98fb98"]disk [color="#98fb98"]buffer */
[color="#ffff00"]251
[color="#ffff00"]252 [color="#98fb98"]xorw %[color="#98fb98"]bx, %[color="#98fb98"]bx /* %[color="#98fb98"]bx = [color="#ffa0a0"]0, [color="#98fb98"]put [color="#98fb98"]it [color="#98fb98"]at [color="#ffa0a0"]0 [color="#98fb98"]in [color="#98fb98"]the [color="#98fb98"]segment */
[color="#ffff00"]253 [color="#98fb98"]movb $[color="#ffa0a0"]0x2, %[color="#98fb98"]ah /* [color="#98fb98"]function [color="#ffa0a0"]2 */
[color="#ffff00"]254 [color="#98fb98"]int $[color="#ffa0a0"]0x13
[color="#ffff00"]255
[color="#ffff00"]256 [color="#98fb98"]jc [color="#98fb98"]read_error
[color="#ffff00"]257
[color="#ffff00"]258 /* [color="#98fb98"]save [color="#98fb98"]source [color="#98fb98"]segment */
[color="#ffff00"]259 [color="#98fb98"]movw %[color="#98fb98"]es, %[color="#98fb98"]bx
[color="#ffff00"]260
[color="#ffff00"]261 [color="#98fb98"]copy_buffer:
[color="#ffff00"]262
[color="#ffff00"]263 /* [color="#98fb98"]load [color="#98fb98"]addresses [color="#98fb98"]for [color="#98fb98"]copy [color="#98fb98"]from [color="#98fb98"]disk [color="#98fb98"]buffer [color="#98fb98"]to [color="#98fb98"]destination */
[color="#ffff00"]264 [color="#98fb98"]movw [color="#ffa0a0"]6(%[color="#98fb98"]di), %[color="#98fb98"]es /* [color="#98fb98"]load [color="#98fb98"]destination [color="#98fb98"]segment */
[color="#ffff00"]265
[color="#ffff00"]266 /* [color="#98fb98"]restore %[color="#98fb98"]ax */
[color="#ffff00"]267 [color="#98fb98"]popw %[color="#98fb98"]ax
[color="#ffff00"]268
[color="#ffff00"]269 /* [color="#98fb98"]determine [color="#98fb98"]the [color="#98fb98"]next [color="#98fb98"]possible [color="#98fb98"]destination [color="#98fb98"]address ([color="#98fb98"]presuming
[color="#ffff00"]270 [color="#ffa0a0"]512 [color="#98fb98"]byte [color="#98fb98"]sectors!) */
[color="#ffff00"]271 [color="#98fb98"]shlw $[color="#ffa0a0"]5, %[color="#98fb98"]ax /* [color="#98fb98"]shift %[color="#98fb98"]ax [color="#98fb98"]five [color="#98fb98"]bits [color="#98fb98"]to [color="#98fb98"]the [color="#98fb98"]left */
[color="#ffff00"]272 [color="#98fb98"]addw %[color="#98fb98"]ax, [color="#ffa0a0"]6(%[color="#98fb98"]di) /* [color="#98fb98"]add [color="#98fb98"]the [color="#98fb98"]corrected [color="#98fb98"]value [color="#98fb98"]to [color="#98fb98"]the [color="#98fb98"]destination
[color="#ffff00"]273 [color="#98fb98"]address [color="#98fb98"]for [color="#98fb98"]next [color="#98fb98"]time */
[color="#ffff00"]274
[color="#ffff00"]275 /* [color="#98fb98"]save [color="#98fb98"]addressing [color="#98fb98"]regs */
[color="#ffff00"]276 [color="#98fb98"]pusha
[color="#ffff00"]277 [color="#98fb98"]pushw %[color="#98fb98"]ds
[color="#ffff00"]278
[color="#ffff00"]279 /* [color="#98fb98"]get [color="#98fb98"]the [color="#98fb98"]copy [color="#98fb98"]length */
[color="#ffff00"]280 [color="#98fb98"]shlw $[color="#ffa0a0"]4, %[color="#98fb98"]ax
[color="#ffff00"]281 [color="#98fb98"]movw %[color="#98fb98"]ax, %[color="#98fb98"]cx
[color="#ffff00"]282
[color="#ffff00"]283 [color="#98fb98"]xorw %[color="#98fb98"]di, %[color="#98fb98"]di /* [color="#98fb98"]zero [color="#98fb98"]offset [color="#98fb98"]of [color="#98fb98"]destination [color="#98fb98"]addresses */
[color="#ffff00"]284 [color="#98fb98"]xorw %[color="#98fb98"]si, %[color="#98fb98"]si /* [color="#98fb98"]zero [color="#98fb98"]offset [color="#98fb98"]of [color="#98fb98"]source [color="#98fb98"]addresses */
[color="#ffff00"]285 [color="#98fb98"]movw %[color="#98fb98"]bx, %[color="#98fb98"]ds /* [color="#98fb98"]restore [color="#98fb98"]the [color="#98fb98"]source [color="#98fb98"]segment */
[color="#ffff00"]286
[color="#ffff00"]287 [color="#98fb98"]cld /* [color="#98fb98"]sets [color="#98fb98"]the [color="#98fb98"]copy [color="#98fb98"]direction [color="#98fb98"]to [color="#98fb98"]forward */
[color="#ffff00"]288
[color="#ffff00"]289 /* [color="#98fb98"]perform [color="#98fb98"]copy */
[color="#ffff00"]290 [color="#98fb98"]rep /* [color="#98fb98"]sets [color="#98fb98"]a [color="#98fb98"]repeat */
[color="#ffff00"]291 [color="#98fb98"]movsb /* [color="#98fb98"]this [color="#98fb98"]runs [color="#98fb98"]the [color="#98fb98"]actual [color="#98fb98"]copy */
[color="#ffff00"]292
[color="#ffff00"]293 /* [color="#98fb98"]restore [color="#98fb98"]addressing [color="#98fb98"]regs [color="#98fb98"]and [color="#98fb98"]print [color="#98fb98"]a [color="#98fb98"]dot [color="#98fb98"]with [color="#98fb98"]correct [color="#98fb98"]DS
[color="#ffff00"]294 ([color="#98fb98"]MSG [color="#98fb98"]modifies [color="#98fb98"]SI, [color="#98fb98"]which [color="#98fb98"]is [color="#98fb98"]saved, [color="#98fb98"]and [color="#98fb98"]unused [color="#98fb98"]AX [color="#98fb98"]and [color="#98fb98"]BX) */
[color="#ffff00"]295 [color="#98fb98"]popw %[color="#98fb98"]ds
[color="#ffff00"]296 [color="#98fb98"]MSG([color="#98fb98"]notification_step)
[color="#ffff00"]297 [color="#98fb98"]popa
[color="#ffff00"]298
[color="#ffff00"]299 /* [color="#98fb98"]check [color="#98fb98"]if [color="#98fb98"]finished [color="#98fb98"]with [color="#98fb98"]this [color="#98fb98"]dataset */
[color="#ffff00"]300 [color="#98fb98"]cmpw $[color="#ffa0a0"]0, [color="#ffa0a0"]4(%[color="#98fb98"]di)
[color="#ffff00"]301 [color="#98fb98"]jne [color="#98fb98"]setup_sectors
[color="#ffff00"]302
[color="#ffff00"]303 /* [color="#98fb98"]update [color="#98fb98"]position [color="#98fb98"]to [color="#98fb98"]load [color="#98fb98"]from */
[color="#ffff00"]304 [color="#98fb98"]subw $[color="#98fb98"]BOOTSEC_LISTSIZE, %[color="#98fb98"]di
[color="#ffff00"]305
[color="#ffff00"]306 /* [color="#98fb98"]jump [color="#98fb98"]to [color="#98fb98"]bootloop */
[color="#ffff00"]307 [color="#98fb98"]jmp [color="#98fb98"]bootloop
[color="#ffff00"]308
[color="#ffff00"]309 /* [color="#98fb98"]END [color="#98fb98"]OF [color="#98fb98"]MAIN [color="#98fb98"]LOOP */
[color="#ffff00"]310
[color="#ffff00"]311 [color="#98fb98"]bootit:
[color="#ffff00"]312 /* [color="#98fb98"]print [color="#98fb98"]a [color="#98fb98"]newline */
[color="#ffff00"]313 [color="#98fb98"]MSG([color="#98fb98"]notification_done)
[color="#ffff00"]314 [color="#98fb98"]popw %[color="#98fb98"]dx /* [color="#98fb98"]this [color="#98fb98"]makes [color="#98fb98"]sure %[color="#98fb98"]dl [color="#98fb98"]is [color="#98fb98"]our "[color="#98fb98"]boot" [color="#98fb98"]drive */
[color="#ffff00"]315 #[color="#98fb98"]ifdef [color="#98fb98"]STAGE1_5
[color="#ffff00"]316 [color="#98fb98"]ljmp $[color="#ffa0a0"]0, $[color="#ffa0a0"]0x2200
[color="#ffff00"]317 #[color="#98fb98"]else /* ! [color="#98fb98"]STAGE1_5 */
[color="#ffff00"]318 [color="#98fb98"]ljmp $[color="#ffa0a0"]0, $[color="#ffa0a0"]0x8200
[color="#ffff00"]319 #[color="#98fb98"]endif /* ! [color="#98fb98"]STAGE1_5 */
[color="#ffff00"]320
[color="#ffff00"]321
[color="#ffff00"]322 /*
[color="#ffff00"]323 * [color="#98fb98"]BIOS [color="#98fb98"]Geometry [color="#98fb98"]translation [color="#98fb98"]error ([color="#98fb98"]past [color="#98fb98"]the [color="#98fb98"]end [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]disk [color="#98fb98"]geometry!).
[color="#ffff00"]324 */
[color="#ffff00"]325 [color="#98fb98"]geometry_error:
[color="#ffff00"]326 [color="#98fb98"]MSG([color="#98fb98"]geometry_error_string)
[color="#ffff00"]327 [color="#98fb98"]jmp [color="#98fb98"]general_error
[color="#ffff00"]328
[color="#ffff00"]329 /*
[color="#ffff00"]330 * [color="#98fb98"]Read [color="#98fb98"]error [color="#98fb98"]on [color="#98fb98"]the [color="#98fb98"]disk.
[color="#ffff00"]331 */
[color="#ffff00"]332 [color="#98fb98"]read_error:
[color="#ffff00"]333 [color="#98fb98"]MSG([color="#98fb98"]read_error_string)
[color="#ffff00"]334
[color="#ffff00"]335 [color="#98fb98"]general_error:
[color="#ffff00"]336 [color="#98fb98"]MSG([color="#98fb98"]general_error_string)
[color="#ffff00"]337
[color="#ffff00"]338 /* [color="#98fb98"]go [color="#98fb98"]here [color="#98fb98"]when [color="#98fb98"]you [color="#98fb98"]need [color="#98fb98"]to [color="#98fb98"]stop [color="#98fb98"]the [color="#98fb98"]machine [color="#98fb98"]hard [color="#98fb98"]after [color="#98fb98"]an [color="#98fb98"]error [color="#98fb98"]condition */
[color="#ffff00"]339 [color="#98fb98"]stop: [color="#98fb98"]jmp [color="#98fb98"]stop
[color="#ffff00"]340
[color="#ffff00"]341 #[color="#98fb98"]ifdef [color="#98fb98"]STAGE1_5
[color="#ffff00"]342 [color="#98fb98"]notification_string: [color="#f0e68c"].string "[color="#98fb98"]Loading [color="#98fb98"]stage1.[color="#ffa0a0"]5"
[color="#ffff00"]343 #[color="#98fb98"]else
[color="#ffff00"]344 [color="#98fb98"]notification_string: [color="#f0e68c"].string "[color="#98fb98"]Loading [color="#98fb98"]stage2"
[color="#ffff00"]345 #[color="#98fb98"]endif
[color="#ffff00"]346
[color="#ffff00"]347 [color="#98fb98"]notification_step: [color="#f0e68c"].string "."
[color="#ffff00"]348 [color="#98fb98"]notification_done: [color="#f0e68c"].string "\[color="#98fb98"]r\[color="#98fb98"]n"
[color="#ffff00"]349
[color="#ffff00"]350 [color="#98fb98"]geometry_error_string: [color="#f0e68c"].string "[color="#98fb98"]Geom"
[color="#ffff00"]351 [color="#98fb98"]read_error_string: [color="#f0e68c"].string "[color="#98fb98"]Read"
[color="#ffff00"]352 [color="#98fb98"]general_error_string: [color="#f0e68c"].string " [color="#98fb98"]Error"
[color="#ffff00"]353
[color="#ffff00"]354 /*
[color="#ffff00"]355 * [color="#98fb98"]message: [color="#98fb98"]write [color="#98fb98"]the [color="#98fb98"]string [color="#98fb98"]pointed [color="#98fb98"]to [color="#98fb98"]by %[color="#98fb98"]si
[color="#ffff00"]356 *
[color="#ffff00"]357 * [color="#98fb98"]WARNING: [color="#98fb98"]trashes %[color="#98fb98"]si, %[color="#98fb98"]ax, [color="#98fb98"]and %[color="#98fb98"]bx
[color="#ffff00"]358 */
[color="#ffff00"]359
[color="#ffff00"]360 /*
[color="#ffff00"]361 * [color="#98fb98"]Use [color="#98fb98"]BIOS "[color="#98fb98"]int [color="#ffa0a0"]10[color="#98fb98"]H [color="#98fb98"]Function 0[color="#98fb98"]Eh" [color="#98fb98"]to [color="#98fb98"]write [color="#98fb98"]character [color="#98fb98"]in [color="#98fb98"]teletype [color="#98fb98"]mode
[color="#ffff00"]362 * %[color="#98fb98"]ah = [color="#ffa0a0"]0xe %[color="#98fb98"]al = [color="#98fb98"]character
[color="#ffff00"]363 * %[color="#98fb98"]bh = [color="#98fb98"]page %[color="#98fb98"]bl = [color="#98fb98"]foreground [color="#98fb98"]color ([color="#98fb98"]graphics [color="#98fb98"]modes)
[color="#ffff00"]364 */
[color="#ffff00"]365 [color="#ffa0a0"]1:
[color="#ffff00"]366 [color="#98fb98"]movw $[color="#ffa0a0"]0x0001, %[color="#98fb98"]bx
[color="#ffff00"]367 [color="#98fb98"]movb $[color="#ffa0a0"]0xe, %[color="#98fb98"]ah
[color="#ffff00"]368 [color="#98fb98"]int $[color="#ffa0a0"]0x10 /* [color="#98fb98"]display [color="#98fb98"]a [color="#98fb98"]byte */
[color="#ffff00"]369
[color="#ffff00"]370 [color="#98fb98"]incw %[color="#98fb98"]si
[color="#ffff00"]371 [color="#98fb98"]message:
[color="#ffff00"]372 [color="#98fb98"]movb (%[color="#98fb98"]si), %[color="#98fb98"]al
[color="#ffff00"]373 [color="#98fb98"]cmpb $[color="#ffa0a0"]0, %[color="#98fb98"]al
[color="#ffff00"]374 [color="#98fb98"]jne [color="#ffa0a0"]1[color="#98fb98"]b /* [color="#98fb98"]if [color="#98fb98"]not [color="#98fb98"]end [color="#98fb98"]of [color="#98fb98"]string, [color="#98fb98"]jmp [color="#98fb98"]to [color="#98fb98"]display */
[color="#ffff00"]375 [color="#98fb98"]ret
[color="#ffff00"]376 [color="#98fb98"]lastlist:
[color="#ffff00"]377
[color="#ffff00"]378 /*
[color="#ffff00"]379 * [color="#98fb98"]This [color="#98fb98"]area [color="#98fb98"]is [color="#98fb98"]an [color="#98fb98"]empty [color="#98fb98"]space [color="#98fb98"]between [color="#98fb98"]the [color="#98fb98"]main [color="#98fb98"]body [color="#98fb98"]of [color="#98fb98"]code [color="#98fb98"]below [color="#98fb98"]which
[color="#ffff00"]380 * [color="#98fb98"]grows [color="#98fb98"]up ([color="#98fb98"]fixed [color="#98fb98"]after [color="#98fb98"]compilation, [color="#98fb98"]but [color="#98fb98"]between [color="#98fb98"]releases [color="#98fb98"]it [color="#98fb98"]may [color="#98fb98"]change
[color="#ffff00"]381 * [color="#98fb98"]in [color="#98fb98"]size [color="#98fb98"]easily), [color="#98fb98"]and [color="#98fb98"]the [color="#98fb98"]lists [color="#98fb98"]of [color="#98fb98"]sectors [color="#98fb98"]to [color="#98fb98"]read, [color="#98fb98"]which [color="#98fb98"]grows [color="#98fb98"]down
[color="#ffff00"]382 * [color="#98fb98"]from [color="#98fb98"]a [color="#98fb98"]fixed [color="#98fb98"]top [color="#98fb98"]location.
[color="#ffff00"]383 */
[color="#ffff00"]384
[color="#ffff00"]385 [color="#f0e68c"].word [color="#ffa0a0"]0
[color="#ffff00"]386 [color="#f0e68c"].word [color="#ffa0a0"]0
[color="#ffff00"]387
[color="#ffff00"]388 . = [color="#98fb98"]_start + [color="#ffa0a0"]0x200 - [color="#98fb98"]BOOTSEC_LISTSIZE
[color="#ffff00"]389
[color="#ffff00"]390 /* [color="#98fb98"]fill [color="#98fb98"]the [color="#98fb98"]first [color="#98fb98"]data [color="#98fb98"]listing [color="#98fb98"]with [color="#98fb98"]the [color="#98fb98"]default */
[color="#ffff00"]391 [color="#98fb98"]blocklist_default_start:
[color="#ffff00"]392 [color="#f0e68c"].long [color="#ffa0a0"]2 /* [color="#98fb98"]this [color="#98fb98"]is [color="#98fb98"]the [color="#98fb98"]sector [color="#98fb98"]start [color="#98fb98"]parameter, [color="#98fb98"]in [color="#98fb98"]logical
[color="#ffff00"]393 [color="#98fb98"]sectors [color="#98fb98"]from [color="#98fb98"]the [color="#98fb98"]start [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]disk, [color="#98fb98"]sector [color="#ffa0a0"]0 */
[color="#ffff00"]394 [color="#98fb98"]blocklist_default_len:
[color="#ffff00"]395 /* [color="#98fb98"]this [color="#98fb98"]is [color="#98fb98"]the [color="#98fb98"]number [color="#98fb98"]of [color="#98fb98"]sectors [color="#98fb98"]to [color="#98fb98"]read */
[color="#ffff00"]396 #[color="#98fb98"]ifdef [color="#98fb98"]STAGE1_5
[color="#ffff00"]397 [color="#f0e68c"].word [color="#ffa0a0"]0 /* [color="#98fb98"]the [color="#98fb98"]command "[color="#98fb98"]install" [color="#98fb98"]will [color="#98fb98"]fill [color="#98fb98"]this [color="#98fb98"]up */
[color="#ffff00"]398 #[color="#98fb98"]else
[color="#ffff00"]399 [color="#f0e68c"].word ([color="#98fb98"]STAGE2_SIZE + [color="#ffa0a0"]511) >> [color="#ffa0a0"]9
[color="#ffff00"]400 #[color="#98fb98"]endif
[color="#ffff00"]401 [color="#98fb98"]blocklist_default_seg:
[color="#ffff00"]402 #[color="#98fb98"]ifdef [color="#98fb98"]STAGE1_5
[color="#ffff00"]403 [color="#f0e68c"].word [color="#ffa0a0"]0x220
[color="#ffff00"]404 #[color="#98fb98"]else
[color="#ffff00"]405 [color="#f0e68c"].word [color="#ffa0a0"]0x820 /* [color="#98fb98"]this [color="#98fb98"]is [color="#98fb98"]the [color="#98fb98"]segment [color="#98fb98"]of [color="#98fb98"]the [color="#98fb98"]starting [color="#98fb98"]address
[color="#ffff00"]406 [color="#98fb98"]to [color="#98fb98"]load [color="#98fb98"]the [color="#98fb98"]data [color="#98fb98"]into */
[color="#ffff00"]407 #[color="#98fb98"]endif
[color="#ffff00"]408
[color="#ffff00"]409 [color="#98fb98"]firstlist: /* [color="#98fb98"]this [color="#98fb98"]label [color="#98fb98"]has [color="#98fb98"]to [color="#98fb98"]be [color="#98fb98"]after [color="#98fb98"]the [color="#98fb98"]list [color="#98fb98"]data!!! */
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6869/showart_637762.html |
|