Tutorial: Build your OS – Der Bellatrix-Code

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
ben
Beiträge: 99
Registriert: Do 4. Jun 2009, 13:48

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

Beitrag von ben »

Also das Matrix Programm ist ja mal echt super! Das wäre doch was für den ersten Bildschirmschoner!
Hive 13 - Unimatrix 1
Benutzeravatar
ben
Beiträge: 99
Registriert: Do 4. Jun 2009, 13:48

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

Beitrag 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.
Hive 13 - Unimatrix 1
DJLinux

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

Beitrag 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
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

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

Beitrag 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
Dateianhänge
012-test-vga-color-1.spin
(4.46 KiB) 498-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
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

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

Beitrag 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?
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

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

Beitrag 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]
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
BorgKönig
Beiträge: 598
Registriert: So 24. Mai 2009, 11:24

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

Beitrag 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.
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

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

Beitrag 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
"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
Benutzeravatar
digger
Administrator
Beiträge: 677
Registriert: Sa 23. Mai 2009, 22:44
Wohnort: Schorfheide
Kontaktdaten:

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

Beitrag 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!
BorgKönig
Beiträge: 598
Registriert: So 24. Mai 2009, 11:24

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

Beitrag 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 :)
Antworten