Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - Tbex

Seiten: [1]
1
Softwareentwicklung / GNU ld
« am: 02. September 2016, 11:38 »
Guten Tag

Ich habe mir einen neuen Laptop gestern gekauft und wollte alle Programme die ich für mein OS brauche installieren.

Nachdem ich alles installiert habe wie auf meinem alten Rechner bekomme ich folgende Meldung wenn ich make ausführe:

....
ld -T kernel.ld .....
GNU ld version 2.13
...
using internal linker script //obwohl oben -T steh :/

gleiche files auf dem alten benutzten kommt dies:
...
using external linker script
....

bin ein bisschen ratlos, habe es so installiert wie damals auf dem alten rechner
einzifer unterschied ist, das der neuer rechner win 8 hat und nicht 7
2
Zuerst mal Danke für die Aktivierung meines Accounts in diesem Forum :)

wie im Titel schon beschrieben möchte ich ein bit in einem Byte maskieren.
Ich möchte nämlich den vga modus 12 benuzten, der im Planar modus ist.
Ich schaff es den Modus zu ändern wie auch den ganzen Bildschirm schon mit einer Farbe zu füllen.
Wenn ich aber ein Pixel ändere möchte, muss ich 4 bits ändern die alle auf der gleichen Adresse liegen. mit outportw kann ich in diesen Planes switchen.

Hier der Code:
Code: ("c") [Auswählen]
void int32_setpixel_0x12(int x, int y, char farbe)
  {
    char Plane0[2];
    char Plane1[2];
    char Plane2[2];
    char Plane3[2];
    int getPosPixel = (y*640) + x;//wieviele pixel von oben links gesehen
    int BytePos = getPosPixel /8;//welches byte anwählen
    int modulo = getPosPixel % 8;//welches bit im byte anwählen

    char* vidmem = (char*) 0xA0000;

    //holle byte das verändert werden muss(4x wegen planes)
    outportw(0x3CE,0x0005);//setup plane masking
    outportw(0x3c4,0x0102);//plane 0
    k_memcpy(Plane0,(vidmem + BytePos), 1);
    outportw(0x3c4,0x0202);//plane 1
    k_memcpy(Plane1,(vidmem + BytePos), 1);
    outportw(0x3c4,0x0402);//plane 2
    k_memcpy(Plane2,(vidmem + BytePos), 1);
    outportw(0x3c4,0x0802);//plane 3
    k_memcpy(Plane3,(vidmem + BytePos), 1);
    outportw(0x3c4,0x0F02);//restore normal plane mask

    //ändere bits
    switch(modulo)
      {
        case(0):
          {
            if((farbe & 0x1) == 0x1){Plane0[0] |= 0x80;}//1000'0000
              else{Plane0[0] &= 0x7F;}//0111'1111

            if((farbe & 0x2) == 0x2){Plane1[0] |= 0x80;}
              else{Plane1[0] &= 0x7F;}

            if((farbe & 0x4) == 0x4){Plane2[0] |= 0x80;}
              else{Plane2[0] &= 0x7F;}

            if((farbe & 0x8) == 0x8){Plane3[0] |= 0x80;}
              else{Plane3[0] &= 0x7F;}

            break;
          }
      }
   

    //byte zurück in video speicher
    outportw(0x3CE,0x0005);//setup plane masking
    outportw(0x3c4,0x0102);//plane 0
    k_memset((vidmem + BytePos), Plane0[0], 1);
    outportw(0x3c4,0x0202);//plane 1
    k_memset((vidmem + BytePos), Plane1[0], 1);
    outportw(0x3c4,0x0402);//plane 2
    k_memset((vidmem + BytePos), Plane2[0], 1);
    outportw(0x3c4,0x0802);//plane 3
    k_memset((vidmem + BytePos), Plane3[0], 1);
    outportw(0x3c4,0x0F02);//restore normal plane mask
  }

Irgendwie kann aber k_memcpy das Byte nicht aus dem speicher lesen und in den string schreiben....
Kann mir jemand helfen oder zeigen wie ich das machen kann?

Vielen Dank im voraus
Seiten: [1]

Einloggen