Tutorial: Build your OS – Der Bellatrix-Code
Re: Tutorial: Build your OS – Der Bellatrix-Code
Also das Matrix Programm ist ja mal echt super! Das wäre doch was für den ersten Bildschirmschoner!
Hive 13 - Unimatrix 1
Re: Tutorial: Build your OS – Der Bellatrix-Code
Kann mir jemand mal erklären wie das mit der Farbauswahl funktioniert?
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.
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
Hive 13 - Unimatrix 1
Re: Tutorial: Build your OS – Der Bellatrix-Code
"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
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
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: Tutorial: Build your OS – Der Bellatrix-Code
Das mit den Farben ist eine ziemlich krasse Sache.
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:
Folgende Farbwerte und Routine erzeugen je drei rote und drei grüne Farbstufen:
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

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
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
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!


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
- Dateianhänge
-
- 012-test-vga-color-1.spin
- (4.46 KiB) 651-mal heruntergeladen
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
- laserjones
- Beiträge: 291
- Registriert: Fr 19. Jun 2009, 10:38
- Wohnort: Hennef
- Kontaktdaten:
Re: Tutorial: Build your OS – Der Bellatrix-Code
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?Allerdings sind alle Farbstufen auf einem Röhrenmonitor sichtbar - das hab ich auf zwei Röhren und zwei LCD's getestet. Also nicht wundern.
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Re: Tutorial: Build your OS – Der Bellatrix-Code
Ich schreibe mal was dazu wenn ich Zeit habe.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...
![]()
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]
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Re: Tutorial: Build your OS – Der Bellatrix-Code
@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.

---
Verschoben nach "Betriebssystem Entwicklung". Ich denke, dieses Thema passt hier besser rein.
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: Tutorial: Build your OS – Der Bellatrix-Code
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...
Link zum Tutorial: http://hive-project.de/content/1494#more-1494
Teil 3 wird sich dann intensiver mit dem TriOS beschäftigen, aber vorher brauche ich mal wieder ein wenig Spaß am Hive...

Link zum Tutorial: http://hive-project.de/content/1494#more-1494
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
- digger
- Administrator
- Beiträge: 691
- Registriert: Sa 23. Mai 2009, 22:44
- Wohnort: Schorfheide
- Kontaktdaten:
Re: Tutorial: Build your OS – Der Bellatrix-Code
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
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...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!
Und, ich schliesse mich "digger" an. Klasse Arbeit
