FreeBSD/alpha: vertauschte Konsole-Farben

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Christian Weisgerber (naddy_at_mips.rhein-neckar.de)
Date: 28. Apr 2000


Ich versuche nochmal zusammenhängend darzustellen, was für ein
Problem ich habe. Vielleicht hat jemand eine Idee, was diesen Bug
produzieren könnte.

Einige Farben auf der VGA-Textkonsole sind bei FreeBSD/alpha
gegenüber FreeBSD/i386 vertauscht, was bei Programmen, die gezielt
ANSI-Farben verwenden, zu unerwarteten Ergebnissen führt. Auf beiden
Plattformen wird syscons(4) als Konsoletreiber eingesetzt. Ich habe
mir die Handvoll vorhandener Architekturunterscheidungen »#ifdef
__alpha__« bzw. »#ifdef __i386__« angeschaut, und kann keine Relevanz
für das Problem erkennen. Ich habe mir auch bestätigen lassen, dass
das kein Einzelphänomen bei mir, sondern ein allgemeiner Bug ist.
Eine Ausgabe der VGA-Palette über ioctl(FBIO_GETPALETTE) liefert
auf beiden Plattformen identische Ergebnisse.

Die Paare rot/blau und braun/zyan sind jeweils in sich vertauscht, die
anderen Farben in Ordnung:

    Farbe i386 alpha binär
    -----------------------------
      0 schwarz schwarz 000
      1 rot blau 001+
      2 grün grün 010
      3 braun zyan 011*
      4 blau rot 100+
      5 magenta magenta 101
      6 zyan braun 110*
      7 grau grau 111

Wenn man auf die Idee kommt, sich die Farbnummer in Binärdarstellung
zu betrachten, dann sieht man, dass bei den betroffenen Farbpaaren
die Bits der Nummer gespiegelt sind. Das ist zweifelsohne bedeutsam,
hilft mir aber nicht entscheidend weiter.

Im VGA-Textmodus existiert zu jedem Zeichen ein Attributbyte. Dessen
Belegung ist folgende:

    <7> Blinken
    <6:4> Hintergrundfarbe
    <3> Intensität
    <2:0> Vordergrundfarbe

Sowohl Vorder- als auch Hintergrundfarbe sind betroffen. Blinken
und Intensität aber nicht. Eine Vertauschung der ganzen Bitreihenfolge
scheidet damit aus.

Ein weiteres interessantes Faktum ist, dass die ANSI-Farbnummer
nicht der tatsächlichen Nummer im Attributbyte entspricht. Erstere
wird auf Zweitere über eine Tabelle abgebildet. Diese Tabelle nimmt,
unabhängig von der Plattform, genau obige Vertauschung vor.

Ich bin ratlos, wo ich den Fehler suchen soll. Fällt jemandem ein
Unterschied zwischen i386 und alpha ein, der sowas produzieren
könnte?

-- 
Christian "naddy" Weisgerber                  naddy_at_mips.rhein-neckar.de


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET