ldlinux: Don't update UsingVGA when we just want the value
authorMatt Fleming <matt.fleming@intel.com>
Thu, 24 Jan 2013 13:24:41 +0000 (13:24 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Thu, 24 Jan 2013 17:22:45 +0000 (17:22 +0000)
There was a bug introduced when this code was copied from the old 4.x
assembly implementation, we don't need to update UsingVGA everytime we
read a character, we only need its value when comparing it against the
DisplayMask.

This bug caused every other character to be displayed when only
writing to the text console, as well as other nasties such as making
syslinux_force_text_mode() think it's in VGA mode even when it's in
text mode.

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
com32/elflink/ldlinux/msg.c

index 4692716..6ce6368 100644 (file)
@@ -42,13 +42,6 @@ int get_msg_file(char *filename)
                if (ch == 0x1A)
                        break;
 
-               /*
-                * 01h = text mode
-                * 02h = graphics mode
-                */
-               UsingVGA &= 0x1;
-               UsingVGA += 1;
-
                NextCharJump(ch);       /* Do what shall be done */
        }
 
@@ -149,12 +142,14 @@ static int convert_to_pcdisplay[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
 static void msg_normal(uint8_t data)
 {
        uint8_t bg, fg;
+       uint8_t mask = UsingVGA & 0x1;
 
        /* Write to serial port */
        if (DisplayMask & 0x4)
                write_serial(data);
 
-       if (!(DisplayMask & UsingVGA))
+       /* 0x1 = text mode, 0x2 = graphics mode */
+       if (!(DisplayMask & ++mask))
                return;         /* Not screen */
 
        if (!(DisplayCon & 0x01))