Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Another Stupid Coder am 13. June 2004, 00:03

Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 13. June 2004, 00:03
Hallo,
Falls ich jetzt eine absolut stupide Frage stellen sollte verzeiht mir bitte, ich bin schon ein wenig müde.
Ich habe das problem mein Video-Treiber Problemlos schwarzweiß funktioniert aber wenn ich farbe ins spiel bringen will klappt das nicht....
Auszug aus Video.cpp:
[code]void Video::Write(char *Text)
{
    unsigned int i;
    while(*Text)
    {
        if(*Text == '\n')
        {
                NewLine();
        }
        else
        {
                i = (PosX * 80 * 2) + 2 * PosY;
                VideoMem = *Text;
                i++;
                VideoMem = Color;
                PosX++;
                if(PosX < 80) // ToDO: Dieses Mechanismus testen.
                {
                        NewLine();
                };
        };
        Text++;
    };
};
void Video::SetColor(char ColorToSet)
{
    Color = ColorToSet;
};
Color ist privat und eine Char-variable.
Auszug aus Kernel.cpp:
[code]SetColor(0x9);
    Screen.Write("KronOS V0.01");
[/code]
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: lobmann am 13. June 2004, 02:19
ka ich weiss nur das du mit 0x9 die 1. Farbe aus der aktuellen Farbpalette auswählst und in hoher intensität dayrstellst
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: lobmann am 13. June 2004, 02:21
BIT 0-2 Vordergrundfarbe
BIT 3 Intensität
BIT 4-6 Hintergrundfarbe
BIT 7 Blinken

Vielleicht hilfts;)
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 13. June 2004, 09:31
Danke, aber das war mir schon bekannt...eigentlich sollte es das nicht sein...
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: joachim_neu am 13. June 2004, 11:14
was heißt es funktioniert nicht? wird nur weiterhin s/w ausgegeben? also bei ASM ist mir auch schon aufgefallen, das das nicht geht. wenn du dann aber mit int 0x10 eine leere Zeile aus dem Speicher ausdruckst, dann springt er auf die neue Farbe um... geht zumindest bei mir immer!
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 13. June 2004, 14:15
Ja es wird weiterhin nur s/w ausgeben aber ich versuche es mal mit ner neuen Zeile.
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 13. June 2004, 15:06
Hat leider nicht geklappt...:(
[code]i = (PosX * 80 * 2) + 2 * PosY;
                VideoMem = *Text;
                i++;
                VideoMem = Color;
                PosX++;
[\code]
speziell hier bin ich mir unsicher...stimmt das so?
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 13. June 2004, 15:24
O.k. ich habe jetzt einen dummen Fehler entdeckt...der Compiler hat vorhin die alten Quellcode-dateien verwendet. Jetzt verwendet er die aktuellen mit dem ergebnis das gar nichts mehr angezeigt wird...:( ich nehme mal an es liegt an dem code den ich in dem oberen Post gepostet habe.
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: joachim_neu am 14. June 2004, 17:51
nein, ich vermute, dass du die leere zeile mit einem BIOS-int machen musst... du musst ein Zeichen MINDESTENS kann auch mehr sein, aus dem SPEICHER (RAM) mit BIOS-INT 0x10 schreiben!
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: TeeJay am 14. June 2004, 18:13
Also bei mir kann ich in den Videospeicher direkt schreiben und dabei jede Verfügbare Farbe sofort nutzen.

Ich sehe hier allerdings auch direkt keinen Fehler.
Poste doch mal den Code der NewLine-Funktion. Vielleicht hilft das weiter.
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 14. June 2004, 18:18
void Video::NewLine()
{
    PosX = 0;
    PosY += 1;
    if (PosY >= 25) {
        Clear(); // Damit nicht der bereits volle Screen beschrieben wird.
    }
}
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: gurru am 14. June 2004, 23:10
hallo

Es muss
if (!(PosX < 80))
heißen, sonst wird nach jedem Zeichen eine neue Zeile angefangen.

Und noch etwas:
Die Koordinaten werden folgendermaßen angegeben, (wenn nicht, vergess den Rest des Beitrags:-)
  x->
y
|
v

deshalb musst du i mit folgender Formel berechnen:

i = 80*2*PosY+PosX*2

mfg
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: joachim_neu am 15. June 2004, 13:20
stimmt schon gurru, das ist nicht so wie bei einem mathe koordinatensystem...
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 15. June 2004, 17:18
Hm...deine Formel werde ich dann gleich einmal versuchen. Danke schon mal im vorras (auch falls sie nicht funktionieren sollte :))
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: TeeJay am 15. June 2004, 17:32
Du musst garnicht testen ob PosX größer als 80 ist. Der Videospeicher hängt ja alles in einem Array hintereinander. Wenn du also ans Ende einer Zeile gelangst und dann trotzdem weiterschreibst, wird es automatisch in der nächsten Zeile angezeigt.

Es ist also überflüssig extra "per Hand" die Zeile zu wechseln.

Ich hatte glaub im Ress-Center einmal alle meine Funktionen zum arbeiten mit der Console im PMode gepostet. Das funzt alles prima. Kannst da ja mal schauen.
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 15. June 2004, 19:27
Ähm Aber die X und Y Position sollte doch korrigiert werden, denn sonst ist doch PosX einmal 254 oder so während Y noch immer 0 ist...
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: TeeJay am 15. June 2004, 22:17
ajo so kann man es machen.
Ich hab ne Extra Func um X und Y auszulesen. Da wird X und Y erst beim Aufruf bestimmt.
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: gurru am 16. June 2004, 11:44
hallo

Zitat
joachim_neu postete
stimmt schon gurru, das ist nicht so wie bei einem mathe koordinatensystem...
kann sein, aber im Code wird nach jedem Zeichen PosX um eins erhöht, weshalb das (mathematische) Koordinatesystem bei der Benennung der
Variablen zugrunde liegt, und deshalb muss er die VAribalen in der Positionsberechnung austauschen

mfg
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 16. June 2004, 13:45
Ich glaube ich teste es dann später auch noch mal mit deinen Funktionen, TeeJay. Denn mit Meinen klappt es gar nicht...
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: TeeJay am 16. June 2004, 15:53
du kannst dir ja mal anschauen wie ich es gemacht habe. Vielleicht findest du dann deinen Fehler :)
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 16. June 2004, 20:43
Also irgendwie muss der Fehler woanders sein bei TeeJay's Funktionen klappts auch nicht °_°
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: TeeJay am 16. June 2004, 20:57
na dann viel Spaß beim Suchen :)
Titel: Farbe funktioniert irgendwie nicht wirklich.
Beitrag von: Another Stupid Coder am 17. June 2004, 14:41
Danke :)