📄 grub-0.95-patch1-startups
字号:
+ lodsl+ cmpl $0xc0000000, %eax+ jnb 2f+ movw $0x01cc, %si+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ ldsw -4(%si), %si /* DS get changed */+ lodsw+ lodsl+ xorw %ax, %ax+ movw %ax, %ds /* let DS = 0 */+2:+ movw $0x01cc, %di+ stosl /* save new int73 */+1:+ movw $0x05ec, %si /* check int74 */+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 2f+ movw $0x01d0, %si+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ ldsw -4(%si), %si /* DS get changed */+ lodsw+ lodsl+ xorw %ax, %ax+ movw %ax, %ds /* let DS = 0 */+2:+ movw $0x01d0, %di+ stosl /* save new int74 */+1:+ movw $0x05f0, %si /* check int75 */+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb 1f+ movw $0x01d4, %di+ stosl /* save new int75 */+1:+ movw $0x05f4, %si /* check int76 */+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 2f+ movw $0x01d8, %si+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ ldsw -4(%si), %si /* DS get changed */+ lodsw+ lodsl+ xorw %ax, %ax+ movw %ax, %ds /* let DS = 0 */+2:+ movw $0x01d8, %di+ stosl /* save new int76 */+1:+ movw $0x05f8, %si /* check int77 */+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 2f+ movw $0x01dc, %si+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ ldsw -4(%si), %si /* DS get changed */+ lodsw+ lodsl+ xorw %ax, %ax+ movw %ax, %ds /* let DS = 0 */+2:+ movw $0x01dc, %di+ stosl /* save new int77 */+1:+#endif+ movw $0x0810, %si /* another saved int 19 */+ lodsl+ movw $0x0064, %di /* int 19 */+ stosl+#if 1+ /* patch the ASUS mother board when boot from CD-ROM */+ movw $0x0800, %si /* another saved int 10 vector */+ cld+ lodsb+ cmpb $0x10, %al+ jnz 1f+ lodsl+ cmpl $0xc0000000, %eax+ jb 1f+ movw $0x0040, %di /* int 10 */+ stosl+1:+#endif+ jmp move_stage2_image++failed_check_msdos7plus:+ /* check for MS-DOS 5.0+ */+ + xorw %ax, %ax+ movw %ax, %ds++ movw $0x0800, %si+ cld+ lodsb+ cmpb $0x10, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x13, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0x9e000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x15, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x19, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x1b, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus++ movw $0x0d41, %si+ cld+ lodsb+ cmpb $0x02, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x08, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x09, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x0a, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x0b, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x0c, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x0d, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x0e, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x70, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x72, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x73, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x74, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ cld+ lodsb+ cmpb $0x76, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ addw $0x000d, %ax+ movw %ax, %si+ shrl $0x10, %eax+ movw %ax, %ds+ lodsw+ movw %ax, %si+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus+ xorw %ax, %ax+ movw %ax, %ds+ movw $0x0d82, %si+1:+ cld+ lodsb+ cmpb $0x77, %al+ jnz failed_check_msdos5plus+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb failed_check_msdos5plus++ call restore_BDA_EBDA+ + cli+ xorw %ax, %ax+ movw %ax, %es+ movw %ax, %ds++ movw $0x0800, %si+ cld+ lodsb+ movw $0x0040, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x004c, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0054, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0064, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x006c, %di+ cld+ lodsl+ stosl++ movw $0x0d41, %si+ cld+ lodsb+ movw $0x0008, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0020, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0024, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0028, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x002c, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0030, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0034, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x0038, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x01c0, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x01c8, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x01cc, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x01d0, %di+ cld+ lodsl+ stosl+ cld+ lodsb+ movw $0x01d8, %di+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jnb 1f+ addw $0x000d, %ax+ movw %ax, %si+ shrl $0x10, %eax+ movw %ax, %ds+ lodsw+ movw %ax, %si+ lodsl+1:+ stosl+ xorw %ax, %ax+ movw %ax, %ds+ movw $0x0d82, %si+ cld+ lodsb+ movw $0x01dc, %di+ cld+ lodsl+ stosl++ jmp move_stage2_image++check_msdos4minus:+ /* check for MS-DOS 4.0- */+ + xorw %ax, %ax+ movw %ax, %ds++ movw %bx, %si /* int 19 */+ cld+ lodsl+ cmpl $0xc0000000, %eax+ jb 1f+ cld+ lodsb+ cmpb $0x01, %al /* the byte 01 followed by int 02, ... */+ jnz 1f+ + /* int 02,08-0e,70,72-74,76-77 */+ movw $0x000e, %cx /* 14 vectors to check */+ call check_a_range_of_ROM_vectors+ jc 1f++ pushw %bx+ call restore_BDA_EBDA+ popw %bx+ + cli+ cld+ xorw %ax, %ax+ movw %ax, %es+ movw %ax, %ds+ movw %bx, %si /* int 19 */+ movw $0x0064, %di+ lodsl+ stosl+ lodsb /* the byte "01" */+ movw $0x0008, %di /* int 02 */+ lodsl+ stosl+ movw $0x0020, %di /* int 08 to 0f */+ movw $0x000e, %cx /* 14 words to move */+ repz movsw+ movw $0x01c0, %di /* int 70 */+ lodsl+ stosl+ movw $0x01c8, %di /* int 72 */+ lodsl+ stosl+ lodsl /* int 73 */+ stosl+ lodsl /* int 74 */+ stosl+ movw $0x01d8, %di /* int 76 */+ lodsl+ stosl+ lodsl /* int 77 */+ stosl++ clc+ ret+1:+ stc /* failed_check_msdos4minus */+ ret++failed_check_msdos5plus:+ /* check for MS-DOS 4.01 */+ + movw $0x240e, %bx+ call check_msdos4minus+ jc failed_check_msdos4++ jmp move_stage2_image++failed_check_msdos4:+ /* check for MS-DOS 3.30 */+ + movw $0x2172, %bx+ call check_msdos4minus+ jc failed_check_msdos3++ jmp move_stage2_image++failed_check_msdos3:+ /* check for FreeDOS (build 2029+) */+ + /*+ * MS himem.sys takes over int 15, so check for the case.+ */+ + xorw %ax, %ax+ movw %ax, %es+ movw %ax, %ds+ movw $0x0054, %di+ movl (%di), %eax /* int 15 vector in table */+ cmpl $0xc0000000, %eax /* is it a valid BIOS vector? */+ jnb 1f /* yes, do nothing */+ movw $0x3086, %si /* no, take one from himem */+ movl (%si), %eax+ cmpl $0xc0000000, %eax /* is it a system BIOS vector? */+ jb failed_check_freedos /* no, do not continue */+1: /* yes, continue */+ xorw %ax, %ax+ movw %ax, %ds+ movw $0x0020, %si /* DS:SI points to int 08 */+ lodsl+ movl %eax, %ebx+ movl %eax, %edx+ movw $7, %cx+1:+ lodsl+ addw $6, %bx+ jc failed_check_freedos+ cmpl %eax, %ebx+ jnz failed_check_freedos+ loop 1b+ + movw $0x01c0, %si /* DS:SI points to int 70 */+ movw $8, %cx+1:+ lodsl+ addw $6, %bx+ jc failed_check_freedos+ cmpl %eax, %ebx+ jnz failed_check_freedos+ loop 1b+ + movw %dx, %si+ shrl $16, %edx+ movw %dx, %ds /* DS:SI points to int 08 routine */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -