Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Another Stupid Coder am 04. December 2004, 09:41
-
Hallo,
tut mir leid das ich wieder mal nerve, aber 's eben so. Folgendes Problem, da mir der 0x13er Mode zu pixelig war (320x200x256) habe ich nun in den 0x12er Modus geschalten (640x480x16). Soweit ich alles kapiert habe, ist hier nun so das nicht mehr jedes Pixel ein Byte ist (wie im 0x13er Mode) sondern nur noch je ein Bit und ein Byte also Acht Pixel darstellt, irgendwo habe ich auch gelesen das man dann die Plane wechseln muss um andere Farben zu bekommen. Aber das ist momentan egal, da ich erstmal die Pixel nur an der richtigen Stelle haben will (Farbe kommt später) Ich hatte (mit etwas Hilfe bei der Logik, da es schon zu spät zum denken war) folgendes gecodet:
unsigned char *VGA;
void PutPixel(unsigned int X, unsigned int Y)
{
unsigned int BitPosition = (Y * 640 + X) % 8; // Stelle des Bits im Byte.
unsigned int BytePosition = (Y * 640 + X) / 8; // Stelle des Bytes im Speicher.
unsigned char TheByte;
if(BitPosition == 0)
TheByte = 1; // 00 00 00 01b
else if(BitPosition == 1)
TheByte = 2; // 00 00 00 10b
else if(BitPosition == 2)
TheByte = 4; // 00 00 01 00b
else if(BitPosition == 3)
TheByte = 8; // 00 00 10 00b
else if(BitPosition == 4)
TheByte = 16; // 00 01 00 00b
else if(BitPosition == 5)
TheByte = 32; // 00 10 00 00b
else if(BitPosition == 6)
TheByte = 64; // 01 00 00 00b
else if(BitPosition == 7)
TheByte = 128; // 10 00 00 00b
VGA[BytePosition] = VGA[BytePosition] | TheByte;
};
int main()
{
VGA = (unsigned char *)0xA0000;
PutPixel(0, 0);
PutPixel(1, 1);
PutPixel(2, 2);
PutPixel(5, 10);
return(0);
}
Nun würde mich interessieren, ob vielleicht jemand einen Tipp hätte, was ich hier falsch gemacht habe.
Danke im vorraus :)
-
Also das jeder Pixel nur 1 Bit hat kann eigentlich nicht stimmen da der Modus, so wie du angegeben hast, 16 farben hat. Also müsste jeder Pixel mindestens 4 Bit haben, da man erst ab 4 Bit 16 verschiedene Farben angeben kann.
-
@TeeJay,
dafür hast 4 Planes(R,G,B und Helligkeit[oder sowas]) die kannste den per io umschalten. Ist aber arschlangsam...
MfG GhostCoder
-
Die Helligkeit nennt sich Alphachannel^^
16 Farben sind mir persönlich bisl wenig^^ Und das umschalten der Bitplanes...naja wems gefällt:P
-
Hiho,
nee der Alphakanal ist doch der Transparenzgrad!
MfG GhostCoder
-
Stimmt :O
-
also der modus 12h kann auch ziemlich schnell sein. z.b. beim kopieren. die bits sind übrigens nicht unbedingt r,g,b und nochwas, sondern einfach zahlen. man kann ja die "bedeutung" der 16 farben mit der palette einfach verändern kann.
also die quellcodes, die ich gesehen habe haben vor jedem speicherzugriff auch irgendwelche i/o befehle ausgeführt. ich habe leider die urls nicht mehr, bis auf die hier, weil mich das eher weniger beschäftigt hat: http://www.bsdg.org/SWAG/EGAVGA/0222.PAS.html
-
@Roshl Tja, mit Farben will ich mich noch nicht beschaeftigen...
Und eigentlich gings weniger um die Farben als um die Position, hat da jemand einen Tipp?
EDIT: Tja, ich meinte auch Farben, nur war ich mit den Gedanken halt beim Wort VGA, daher habe ich das getippt...O_o[/quote]
-
Das ist VGA...