Autor Thema: VGA: Adresse des Pixels berechnen.  (Gelesen 4436 mal)

Another Stupid Coder

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

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 am: 04. December 2004, 14:21 »
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.
----------------------
Redakteur bei LowLevel

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. December 2004, 15:30 »
@TeeJay,

dafür hast 4 Planes(R,G,B und Helligkeit[oder sowas]) die kannste den per io umschalten. Ist aber arschlangsam...

MfG GhostCoder
A man, a legend!

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #3 am: 04. December 2004, 16:23 »
Die Helligkeit nennt sich Alphachannel^^
16 Farben sind mir persönlich bisl wenig^^ Und das umschalten der Bitplanes...naja wems gefällt:P
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 04. December 2004, 17:19 »
Hiho,

nee der Alphakanal ist doch der Transparenzgrad!

MfG GhostCoder
A man, a legend!

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #5 am: 04. December 2004, 19:01 »
Stimmt :O
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. December 2004, 19:18 »
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
Dieser Text wird unter jedem Beitrag angezeigt.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 04. December 2004, 20:22 »
@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]

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 04. December 2004, 22:06 »
Das ist VGA...
A man, a legend!

 

Einloggen