[prefix] Add printing functions to libprefix.S
Move the printing functions from pxeprefix.S into libprefix.S, so they are available for debug from any prefix.
This commit is contained in:
parent
12f203c606
commit
297002d7bd
|
@ -43,6 +43,114 @@
|
||||||
|
|
||||||
#define CR0_PE 1
|
#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)
|
* pm_call (real-mode near call)
|
||||||
*
|
*
|
||||||
|
|
|
@ -320,112 +320,6 @@ print_free_basemem:
|
||||||
finished:
|
finished:
|
||||||
jmp run_etherboot
|
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
|
* Subroutine: print segment:offset address
|
||||||
*
|
*
|
||||||
|
|
|
@ -180,7 +180,8 @@ gotpmm: /* PMM allocation succeeded: copy ROM to PMM block */
|
||||||
/* Shrink ROM and update checksum */
|
/* Shrink ROM and update checksum */
|
||||||
xorw %bx, %bx
|
xorw %bx, %bx
|
||||||
xorw %si, %si
|
xorw %si, %si
|
||||||
movb $_prefix_size_sect, romheader_size
|
movw $_prefix_size_sect, %cx
|
||||||
|
movb %cl, romheader_size
|
||||||
shlw $9, %cx
|
shlw $9, %cx
|
||||||
1: lodsb
|
1: lodsb
|
||||||
addb %al, %bl
|
addb %al, %bl
|
||||||
|
@ -213,7 +214,7 @@ init_message_pmm_failed:
|
||||||
.asciz " (failed)"
|
.asciz " (failed)"
|
||||||
.size init_message_pmm_failed, . - init_message_pmm_failed
|
.size init_message_pmm_failed, . - init_message_pmm_failed
|
||||||
init_message_crlf:
|
init_message_crlf:
|
||||||
.asciz "\r\n"
|
.asciz "\n"
|
||||||
.size init_message_crlf, . - init_message_crlf
|
.size init_message_crlf, . - init_message_crlf
|
||||||
|
|
||||||
/* ROM image location
|
/* ROM image location
|
||||||
|
@ -309,7 +310,7 @@ exec: /* Set %ds = %cs */
|
||||||
.previous
|
.previous
|
||||||
|
|
||||||
exec_message:
|
exec_message:
|
||||||
.asciz "gPXE starting boot\r\n"
|
.asciz "gPXE starting boot\n"
|
||||||
.size exec_message, . - exec_message
|
.size exec_message, . - exec_message
|
||||||
|
|
||||||
/* UNDI loader
|
/* UNDI loader
|
||||||
|
@ -350,22 +351,3 @@ undiloader:
|
||||||
popl %esi
|
popl %esi
|
||||||
lret
|
lret
|
||||||
.size undiloader, . - undiloader
|
.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
|
|
||||||
|
|
Reference in New Issue