Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet 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]
-
ka ich weiss nur das du mit 0x9 die 1. Farbe aus der aktuellen Farbpalette auswählst und in hoher intensität dayrstellst
-
BIT 0-2 Vordergrundfarbe
BIT 3 Intensität
BIT 4-6 Hintergrundfarbe
BIT 7 Blinken
Vielleicht hilfts;)
-
Danke, aber das war mir schon bekannt...eigentlich sollte es das nicht sein...
-
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!
-
Ja es wird weiterhin nur s/w ausgeben aber ich versuche es mal mit ner neuen Zeile.
-
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?
-
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.
-
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!
-
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.
-
void Video::NewLine()
{
PosX = 0;
PosY += 1;
if (PosY >= 25) {
Clear(); // Damit nicht der bereits volle Screen beschrieben wird.
}
}
-
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
-
stimmt schon gurru, das ist nicht so wie bei einem mathe koordinatensystem...
-
Hm...deine Formel werde ich dann gleich einmal versuchen. Danke schon mal im vorras (auch falls sie nicht funktionieren sollte :))
-
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.
-
Ã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...
-
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.
-
hallo
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
-
Ich glaube ich teste es dann später auch noch mal mit deinen Funktionen, TeeJay. Denn mit Meinen klappt es gar nicht...
-
du kannst dir ja mal anschauen wie ich es gemacht habe. Vielleicht findest du dann deinen Fehler :)
-
Also irgendwie muss der Fehler woanders sein bei TeeJay's Funktionen klappts auch nicht °_°
-
na dann viel Spaß beim Suchen :)
-
Danke :)