Autor Thema: Farbe funktioniert irgendwie nicht wirklich.  (Gelesen 15159 mal)

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« 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]

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #1 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
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #2 am: 13. June 2004, 02:21 »
BIT 0-2 Vordergrundfarbe
BIT 3 Intensität
BIT 4-6 Hintergrundfarbe
BIT 7 Blinken

Vielleicht hilfts;)
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 13. June 2004, 09:31 »
Danke, aber das war mir schon bekannt...eigentlich sollte es das nicht sein...

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 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!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 13. June 2004, 14:15 »
Ja es wird weiterhin nur s/w ausgeben aber ich versuche es mal mit ner neuen Zeile.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #6 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?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #7 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.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #8 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!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #9 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.
----------------------
Redakteur bei LowLevel

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #10 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.
    }
}

gurru

  • Beiträge: 42
    • Profil anzeigen
Gespeichert
« Antwort #11 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

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #12 am: 15. June 2004, 13:20 »
stimmt schon gurru, das ist nicht so wie bei einem mathe koordinatensystem...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #13 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 :))

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #14 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.
----------------------
Redakteur bei LowLevel

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #15 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...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #16 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.
----------------------
Redakteur bei LowLevel

gurru

  • Beiträge: 42
    • Profil anzeigen
Gespeichert
« Antwort #17 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

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #18 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...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #19 am: 16. June 2004, 15:53 »
du kannst dir ja mal anschauen wie ich es gemacht habe. Vielleicht findest du dann deinen Fehler :)
----------------------
Redakteur bei LowLevel

 

Einloggen