grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] fix last column in BIOS console


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [PATCH] fix last column in BIOS console
Date: Mon, 08 Apr 2013 19:17:27 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130116 Icedove/10.0.12

On 21.02.2013 17:20, Andrey Borzenkov wrote:

> BIOS console wrapped line at 79 characters. It became the issue
> after recent changes when extra column for scrolling indications was
> removed. The effect was that up/down arrows were printed in the first
> column of the next line.
> 
> May be it would be easier to simply use INT10 AH=13. Available
> documentation indicates that it is available since 1986, so I guess
> any system that exists today should implement it.
> 

I need to look how we ended up with the current code. It doesn't match
its comment which details an algorithm working for any screen dimensions
while current code assumes a fixed width. Another corner question is a
possibility of usage of vga_text and keep console to the bare minimum.
Does anyone have information about BIOSes redirecting their output?
The age of the function is no argument about their availability. Loads
of functions are not implemented or broken in modern BIOSes. More or
less the only guarantee of function working on all BIOSes is if BIOS
uses them in a normal bootpath.

> Signed-off-by: Andrey Borzenkov <address@hidden>
> 
> ---
>  grub-core/term/i386/pc/console.c |   21 ++++++++-------------
>  1 file changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/grub-core/term/i386/pc/console.c 
> b/grub-core/term/i386/pc/console.c
> index 2aa1943..358611a 100644
> --- a/grub-core/term/i386/pc/console.c
> +++ b/grub-core/term/i386/pc/console.c
> @@ -86,13 +86,9 @@ grub_console_gotoxy (struct grub_term_output *term 
> __attribute__ ((unused)),
>   * Put the character C on the console. Because GRUB wants to write a
>   * character with an attribute, this implementation is a bit tricky.
>   * If C is a control character (CR, LF, BEL, BS), use INT 10, AH = 0Eh
> - * (TELETYPE OUTPUT). Otherwise, save the original position, put a space,
> - * save the current position, restore the original position, write the
> - * character and the attribute, and restore the current position.
> - *
> - * The reason why this is so complicated is that there is no easy way to
> - * get the height of the screen, and the TELETYPE OUTPUT BIOS call doesn't
> - * support setting a background attribute.
> + * (TELETYPE OUTPUT). Otherwise, use INT 10, AH = 9 to write character
> + * with attributes and advance cursor. If we are on the last column,
> + * let BIOS to wrap line correctly.
>   */
>  static void
>  grub_console_putchar_real (grub_uint8_t c)
> @@ -112,19 +108,18 @@ grub_console_putchar_real (grub_uint8_t c)
>    /* get the current position */
>    pos = grub_console_getxy (NULL);
>    
> +  /* write the character with the attribute */
> +  int10_9 (c, 1);
> +
>    /* check the column with the width */
>    if ((pos & 0xff00) >= (79 << 8))
>      {
>        grub_console_putchar_real (0x0d);
>        grub_console_putchar_real (0x0a);
> -      /* get the current position */
> -      pos = grub_console_getxy (NULL);
>      }
> +  else
> +    grub_console_gotoxy (NULL, ((pos & 0xff00) >> 8) + 1, (pos & 0xff));
>  
> -  /* write the character with the attribute */
> -  int10_9 (c, 1);
> -
> -  grub_console_gotoxy (NULL, ((pos & 0xff00) >> 8) + 1, (pos & 0xff));
>  }
>  
>  static void



Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]