免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 984 | 回复: 0
打印 上一主题 下一主题

grub grub\stage2\start.S [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-29 09:05 |只看该作者 |倒序浏览

[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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP