#define CR0_PE 1
+/*****************************************************************************
+ * Utility function: print character (with LF -> LF,CR translation)
+ *
+ * Parameters:
+ * %al : character to print
+ * Returns:
+ * Nothing
+ * Corrupts:
+ * %ax
+ *****************************************************************************
+ */
+ .section ".prefix.lib"
+ .code16
+ .globl print_character
+print_character:
+ /* Preserve registers */
+ pushw %bx
+ pushw %bp
+ /* Print character */
+ movw $0x0007, %bx /* page 0, attribute 7 (normal) */
+ movb $0x0e, %ah /* write char, tty mode */
+ cmpb $0x0a, %al /* '\n'? */
+ jne 1f
+ int $0x10
+ movb $0x0d, %al
+1: int $0x10
+ /* Restore registers and return */
+ popw %bp
+ popw %bx
+ ret
+ .size print_character, . - print_character
+
+/*****************************************************************************
+ * Utility function: print a NUL-terminated string
+ *
+ * Parameters:
+ * %ds:si : string to print
+ * Returns:
+ * %ds:si : character after terminating NUL
+ *****************************************************************************
+ */
+ .section ".prefix.lib"
+ .code16
+ .globl print_message
+print_message:
+ /* Preserve registers */
+ pushw %ax
+ /* Print string */
+1: lodsb
+ testb %al, %al
+ je 2f
+ call print_character
+ jmp 1b
+2: /* Restore registers and return */
+ popw %ax
+ ret
+ .size print_message, . - print_message
+
+/*****************************************************************************
+ * Utility functions: print hex digit/byte/word/dword
+ *
+ * Parameters:
+ * %al (low nibble) : digit to print
+ * %al : byte to print
+ * %ax : word to print
+ * %eax : dword to print
+ * Returns:
+ * Nothing
+ *****************************************************************************
+ */
+ .section ".prefix.lib"
+ .code16
+ .globl print_hex_dword
+print_hex_dword:
+ rorl $16, %eax
+ call print_hex_word
+ rorl $16, %eax
+ /* Fall through */
+ .size print_hex_dword, . - print_hex_dword
+ .globl print_hex_word
+print_hex_word:
+ xchgb %al, %ah
+ call print_hex_byte
+ xchgb %al, %ah
+ /* Fall through */
+ .size print_hex_word, . - print_hex_word
+ .globl print_hex_byte
+print_hex_byte:
+ rorb $4, %al
+ call print_hex_nibble
+ rorb $4, %al
+ /* Fall through */
+ .size print_hex_byte, . - print_hex_byte
+ .globl print_hex_nibble
+print_hex_nibble:
+ /* Preserve registers */
+ pushw %ax
+ /* Print digit (technique by Norbert Juffa <norbert.juffa@amd.com> */
+ andb $0x0f, %al
+ cmpb $10, %al
+ sbbb $0x69, %al
+ das
+ call print_character
+ /* Restore registers and return */
+ popw %ax
+ ret
+ .size print_hex_nibble, . - print_hex_nibble
+
/****************************************************************************
* pm_call (real-mode near call)
*
finished:
jmp run_etherboot
-/*****************************************************************************
- * Subroutine: print character (with LF -> LF,CR translation)
- *
- * Parameters:
- * %al : character to print
- * Returns:
- * Nothing
- *****************************************************************************
- */
-print_character:
- /* Preserve registers */
- pushw %ax
- pushw %bx
- pushw %bp
- /* Print character */
- movw $0x0007, %bx /* page 0, attribute 7 (normal) */
- movb $0x0e, %ah /* write char, tty mode */
- cmpb $0x0a, %al /* '\n'? */
- jne 1f
- int $0x10
- movb $0x0d, %al
-1: int $0x10
- /* Restore registers and return */
- popw %bp
- popw %bx
- popw %ax
- ret
-
-/*****************************************************************************
- * Subroutine: print a NUL-terminated string
- *
- * Parameters:
- * %ds:%si : string to print
- * Returns:
- * Nothing
- *****************************************************************************
- */
-print_message:
- /* Preserve registers */
- pushw %ax
- pushw %si
- /* Print string */
-1: lodsb
- testb %al, %al
- je 2f
- call print_character
- jmp 1b
-2: /* Restore registers and return */
- popw %si
- popw %ax
- ret
-
-/*****************************************************************************
- * Subroutine: print hex digit
- *
- * Parameters:
- * %al (low nibble) : digit to print
- * Returns:
- * Nothing
- *****************************************************************************
- */
-print_hex_nibble:
- /* Preserve registers */
- pushw %ax
- /* Print digit (technique by Norbert Juffa <norbert.juffa@amd.com> */
- andb $0x0f, %al
- cmpb $10, %al
- sbbb $0x69, %al
- das
- call print_character
- /* Restore registers and return */
- popw %ax
- ret
-
-/*****************************************************************************
- * Subroutine: print hex byte
- *
- * Parameters:
- * %al : byte to print
- * Returns:
- * Nothing
- *****************************************************************************
- */
-print_hex_byte:
- rorb $4, %al
- call print_hex_nibble
- rorb $4, %al
- call print_hex_nibble
- ret
-
-/*****************************************************************************
- * Subroutine: print hex word
- *
- * Parameters:
- * %ax : word to print
- * Returns:
- * Nothing
- *****************************************************************************
- */
-print_hex_word:
- xchgb %al, %ah
- call print_hex_byte
- xchgb %al, %ah
- call print_hex_byte
- ret
-
/*****************************************************************************
* Subroutine: print segment:offset address
*
/* Shrink ROM and update checksum */
xorw %bx, %bx
xorw %si, %si
- movb $_prefix_size_sect, romheader_size
+ movw $_prefix_size_sect, %cx
+ movb %cl, romheader_size
shlw $9, %cx
1: lodsb
addb %al, %bl
.asciz " (failed)"
.size init_message_pmm_failed, . - init_message_pmm_failed
init_message_crlf:
- .asciz "\r\n"
+ .asciz "\n"
.size init_message_crlf, . - init_message_crlf
/* ROM image location
.previous
exec_message:
- .asciz "gPXE starting boot\r\n"
+ .asciz "gPXE starting boot\n"
.size exec_message, . - exec_message
/* UNDI loader
popl %esi
lret
.size undiloader, . - undiloader
-
-/* Utility function: print string
- */
-print_message:
- pushw %ax
- pushw %bx
- pushw %bp
- movw $0x0007, %bx
-1: lodsb
- testb %al, %al
- je 2f
- movb $0x0e, %ah /* write char, tty mode */
- int $0x10
- jmp 1b
-2: popw %bp
- popw %bx
- popw %ax
- ret
- .size print_message, . - print_message