2018-09-27 13:42:18

by xyproto

[permalink] [raw]
Subject: [PATCH] Reduce boot header size with 1 byte

From: Alexander F. Rødseth <[email protected]>

Only ah needs to be set to 0 before calling interrupt 0x16 for waiting
for a keypress.

This patch changes the line that uses xor so that it only zeroes "ah" instead of "ax".
This saves a byte.

Signed-off-by: Alexander F. Rødseth <[email protected]>
---
arch/x86/boot/header.S | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 850b8762e889..905cb96f43d4 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -71,14 +71,15 @@ msg_loop:
jmp msg_loop

bs_die:
- # Allow the user to press a key, then reboot
- xorw %ax, %ax
+ # Allow the user to press a key
+ xorb %ah, %ah
int $0x16
+
+ # Boostrap by reading sector 1, head 0, track 0 from drive
int $0x19

- # int 0x19 should never return. In case it does anyway,
- # invoke the BIOS reset code...
- ljmp $0xf000,$0xfff0
+ # If boostrap somehow did not work, invoke the BIOS reset code
+ ljmp $0xf000, $0xfff0

#ifdef CONFIG_EFI_STUB
.org 0x3c
--
2.19.0



2018-09-27 16:10:10

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] Reduce boot header size with 1 byte

On 9/27/18 6:41 AM, [email protected] wrote:
> From: Alexander F. Rødseth <[email protected]>
>
> Only ah needs to be set to 0 before calling interrupt 0x16 for waiting
> for a keypress.
>
> This patch changes the line that uses xor so that it only zeroes "ah" instead of "ax".
> This saves a byte.
>
> Signed-off-by: Alexander F. Rødseth <[email protected]>

Hi,

You should Cc: the X86 maintainers on this patch.
Otherwise it will just be lost in the ether.

thanks.

> ---
> arch/x86/boot/header.S | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
> index 850b8762e889..905cb96f43d4 100644
> --- a/arch/x86/boot/header.S
> +++ b/arch/x86/boot/header.S
> @@ -71,14 +71,15 @@ msg_loop:
> jmp msg_loop
>
> bs_die:
> - # Allow the user to press a key, then reboot
> - xorw %ax, %ax
> + # Allow the user to press a key
> + xorb %ah, %ah
> int $0x16
> +
> + # Boostrap by reading sector 1, head 0, track 0 from drive
> int $0x19
>
> - # int 0x19 should never return. In case it does anyway,
> - # invoke the BIOS reset code...
> - ljmp $0xf000,$0xfff0
> + # If boostrap somehow did not work, invoke the BIOS reset code
> + ljmp $0xf000, $0xfff0
>
> #ifdef CONFIG_EFI_STUB
> .org 0x3c
>


--
~Randy

2018-09-27 18:23:32

by Brian Gerst

[permalink] [raw]
Subject: Re: [PATCH] Reduce boot header size with 1 byte

On Thu, Sep 27, 2018 at 9:42 AM <[email protected]> wrote:
>
> From: Alexander F. Rødseth <[email protected]>
>
> Only ah needs to be set to 0 before calling interrupt 0x16 for waiting
> for a keypress.
>
> This patch changes the line that uses xor so that it only zeroes "ah" instead of "ax".
> This saves a byte.
>
> Signed-off-by: Alexander F. Rødseth <[email protected]>
> ---
> arch/x86/boot/header.S | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
> index 850b8762e889..905cb96f43d4 100644
> --- a/arch/x86/boot/header.S
> +++ b/arch/x86/boot/header.S
> @@ -71,14 +71,15 @@ msg_loop:
> jmp msg_loop
>
> bs_die:
> - # Allow the user to press a key, then reboot
> - xorw %ax, %ax
> + # Allow the user to press a key
> + xorb %ah, %ah

Because this is code running in 16-bit real mode, xorw does not need a
16-bit prefix and only uses 2 bytes. You save nothing by using xorb.

--
Brian Gerst