Seite 2 von 3

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Di 15. Sep 2009, 00:48
von ben
Also das Matrix Programm ist ja mal echt super! Das wäre doch was für den ersten Bildschirmschoner!

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Di 15. Sep 2009, 16:35
von ben
Kann mir jemand mal erklären wie das mit der Farbauswahl funktioniert?

Code: Alles auswählen

PRI print(c) | i, k                                   	'ausgabe eines zeichens
      k := color << 1 + c & 1
      i := $8000 + (c & $FE) << 6 + k
      array.word[row * cols + col] := i
      array.word[(row + 1) * cols + col] := i | $40
      ++col
Irgendwie blicke ich da nicht durch. Was muss ich machen damit ich z.B. eine rote Schrift auf schwarzem Hintergrund bekomme? Das muss ja irgendwie aus "vgacolors" gelesen werden.

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Mi 16. Sep 2009, 04:58
von DJLinux
"color" ist eine globale Variable die die aktuelle Fabdefinition enthält.
Das IOS bzw. das Beispiel worauf Du dich eventuell beziehst hat einen Satz vordefinierter Farben.
Bedingt durch 2 Bits für R,G und B kannst Du nur auf 4 x 4 x 4 = 64 vorgegebene Farben zurück greifen.
Schau mal in dem Listing worauf Du dich beziehst wo die Farbdefinition stehen.
Dort kannst Du selbst ein Farbpaar für Schwarz als Hintergrund und Rot als Vodergrundfarbe definieren.

Grüsse Joshy

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Mi 16. Sep 2009, 09:43
von drohne235
Das mit den Farben ist eine ziemlich krasse Sache. :twisted:

Im Bildschirmpuffer ist ja für jedes Tile ein 16Bit Wert definiert, der folgendermaßen definiert ist:

[10Bit Basisadresse des Tile][6Bit Numer der Farbe] = 16 Bit Tilewert

Die Routine "print(c)" berechnet also aus dem Zeichen c die Basisadresse im Zeichensatz und setzt den Wert im Tile. Der aktuelle Farbwert in der Variable "color" wird in den unteren 6 Bit gespeichert. Für die Darstellung holt sich der Videotreiber den 16Bit Tilewert und zerpflückt ihn. Wenn der Treiber in den unteren 6 Bit zum Beispiel den Wert 2 findet, holt er sich aus der Farbtabelle bei vgacolors den zweiten Farbwert und verwendet ihn für dieses Tile.

Jeder Farbwert in der Farbtabelle besteht aus 2 x 32 Bit mit folgenden Format:

Code: Alles auswählen

'              v      h      v       h        ' v=Vordergrund, h=Hintergrund
'              RGBx_RGBx_RGBx_RGBx
        long %%1000_0000_1000_0000

'              v      v       h      h
'              RGBx_RGBx_RGBx_RGBx
        long %%1000_1000_0000_0000

Folgende Farbwerte und Routine erzeugen je drei rote und drei grüne Farbstufen:

Code: Alles auswählen


PUB main | i                                                                    'Hauptroutine

  vga.start(vga_basport, @array, @vgacolors, 0, 0, 0)                           'vga-objekt starten
  print($100)

  repeat i from 0 to 5
    color := i
    print_string(@text)                                                         'string ausgeben
    print($0D)

  repeat


vgacolors long                                                                  'farbtabelle
'              v      h      v       h        ' v=Vordergrund, h=Hintergrund
'              v      v       h      h
'              RGBx_RGBx_RGBx_RGBx
        long %%1000_0000_1000_0000
        long %%1000_1000_0000_0000

        long %%2000_0000_2000_0000
        long %%2000_2000_0000_0000

        long %%3000_0000_3000_0000
        long %%3000_3000_0000_0000

        long %%0100_0000_0100_0000
        long %%0100_0100_0000_0000

        long %%0200_0000_0200_0000
        long %%0200_0200_0000_0000

        long %%0300_0000_0300_0000
        long %%0300_0300_0000_0000
Allerdings habe ich beim Test mit diesem Code nicht schlecht gestaunt, als von jeder Farbe nur zwei Helligkeitsstufen sichtbar waren. Erst dachte ich an einen Hardwarefehler, aber nach einem Test mit dem Demoboard von Parallax erhielt ich das gleiche Ergebnis. Allerdings sind alle Farbstufen auf einem Röhrenmonitor sichtbar - das hab ich auf zwei Röhren und zwei LCD's getestet. Also nicht wundern.

Man sollte das Ganze also auch mal aus der Perspektive des VGA-Treibers betrachten: Dieser holt sich bei der Darstellung je einen 16 Bit Wert für ein Tile aus dem Bildschirmpuffer. Aus diesem Wert bildet er aus den oberen 10 Bit die Adresse der Pixeldaten (Zeichensatz im ROM!) für das Zeichen und liest entsprechend der unteren 6 Bit Nummer den Farbwert aus der Tabelle. Dann wird das ganze an den Monitor ausgegeben. Man kann sich das gut im Treibercode anschauen.

Vielleicht hat Rainer noch etwas zu den Farbwerten (Hilfe! :? ) zu ergänzen, er hat sich ja schon seht intensiv damit beschäftigt... ;)

Hier mal noch ein Text der an einigen Stellen ganz erhellend ist und mir am Anfang auch geholfen hat:
http://www.rayslogic.com/propeller/Prog ... Colors.htm

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Mi 16. Sep 2009, 09:50
von laserjones
Allerdings sind alle Farbstufen auf einem Röhrenmonitor sichtbar - das hab ich auf zwei Röhren und zwei LCD's getestet. Also nicht wundern.
Das ist ja sehr seltsam - kann es sein, dass die LCDs das Farbsignal irgendwie quantisieren, sodass ähnliche Spannungswerte exakt dieselbe Farbe erzeugen? Aber wie kann ein LCD dann bei einer PC-Grafikkarte 16 Mio. Farben erzeugen?

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Mi 16. Sep 2009, 12:12
von Rainer
drohne235 hat geschrieben: Vielleicht hat Rainer noch etwas zu den Farbwerten (Hilfe! :? ) zu ergänzen, er hat sich ja schon seht intensiv damit beschäftigt... ;)
Ich schreibe mal was dazu wenn ich Zeit habe.
Ist jetzt nicht wirklich einfach zu erklären, aber wenn es mal "klick" gemacht hat, dann ist es eigentlich einfach.

Gruß.
Rainer

[edit by "BorgKönig"]
Kleinen Quotefehler behoben :)
[/edit]

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Mi 16. Sep 2009, 16:29
von BorgKönig
@drohne235: Dein Tutorial liest sich sehr gut. Ich freue mich auf dem 2. Teil :)

---

Verschoben nach "Betriebssystem Entwicklung". Ich denke, dieses Thema passt hier besser rein.

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Di 29. Sep 2009, 10:48
von drohne235
Ok Drohnen, es gibt wieder Futter für die grauen Zellen - Teil 2 ist fertig.
Teil 3 wird sich dann intensiver mit dem TriOS beschäftigen, aber vorher brauche ich mal wieder ein wenig Spaß am Hive... :twisted:

Link zum Tutorial: http://hive-project.de/content/1494#more-1494

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Di 29. Sep 2009, 10:58
von digger
Man genial was du da so fabrizierst, man sollte das Ganze als HIVE Buch gebündelt (in Form einer PDF) bereitstellen. Wirklich satte Leistung!

Re: Tutorial: Build your OS – Der Bellatrix-Code

Verfasst: Di 29. Sep 2009, 12:43
von BorgKönig
digger hat geschrieben:Man genial was du da so fabrizierst, man sollte das Ganze als HIVE Buch gebündelt (in Form einer PDF) bereitstellen. Wirklich satte Leistung!
Das ganze soll auch ins Magazin. Dank eines Hardware Defektes meines Notebooks dürfte das aber noch so 2-3 Tage dauern, bis ich daran weiter machen kann...

Und, ich schliesse mich "digger" an. Klasse Arbeit :)