Autor Thema: Bildschirm löschen bzw. leeren  (Gelesen 17144 mal)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 08. September 2010, 16:34 »
Ein char ist auf allen relevanten Plattformen 8 Bit, deswegen sagte ich ja nein.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

hrungaaz

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 08. September 2010, 16:42 »
OK, sorry, ich bin gerade etwas verwirrt.
Also beträgt dann die Speicherkapazität einer Adresse auch 8BIT?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 08. September 2010, 16:45 »
Was soll denn die "Speicherkapazität einer Adresse" sein?

Wie auch immer, ich rate dir, das C-Buch deines Vertrauens zum Thema Pointer zu konsultieren. Und am besten gleich zu allem anderen auch noch, für ein OS musst du die Sprache sicher im Griff haben.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

hrungaaz

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 08. September 2010, 17:02 »
Ok, ich habe mal gegoogelt und meine Antwort gefunden:

Zitat
[...]Jedes Byte hat seine eigene Adresse[...]
Quelle: http://de.wikibooks.org/wiki/Maschinensprache_i8086/_Speicher

Damit wäre die Frage geklärt.
Danke für alle Bemühungen.

hrungaaz

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 08. September 2010, 19:20 »
Hier sind die gewünschten Panic-Meldungen:

APIC write with len=1 (should be 4)
I/O apic write with len=1 (should be 4)


Diese beiden Meldungen wiederholen sich zweimal danach wird der kernel ordnungsgemäß aufgerufen.

[EDIT]

Habe jetzt folgenden Code ausprobiert:

void init(void)
{
    const char hw[] = "Hello World!";
    int i;
    char* video = (char*) 0xB8000;

    int n = 0;
    while (n < 0xFA0)
    {
        video[n] = 0x0;
        n++;
    }
 
    for (i = 0; hw[i] != '\0'; i++)
    {
        video[i * 2] = hw[i];
        video[i * 2 + 1] = 0x07;
    }
}

Funktioniert wunderbar - Keine Panics mehr.
Danke an alle für die Mühen und Erklärungen  :-)

mfg rungaaz

[EDIT II]

Zu der Variableninitialisierung in C:

Also in C muss eine Variable mit variable = wert; initialisiert werden.
Die Variante mit den Klammern funktioniert nur in C++.
Wahrscheinlich, weil es in C++ Klassen gibt, welche meistens einen Konstruktor und einen Destruktor besitzen.
Mit int n(1); würde man quasi dann den Konstruktor aufrufen, und den Wert als Parameter übergeben.
Das ist aber nur ein Theorie von mir  :-D Ich weiß nicht ob das stimmt.
« Letzte Änderung: 09. September 2010, 09:55 von hrungaaz »

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #25 am: 09. September 2010, 10:13 »
int foo(i); wäre (fast) eine Prototypendefinition (korrekt wäre es int foo(int);).
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

hrungaaz

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 09. September 2010, 10:27 »
Ja, aber, da ich eine Konstante übergebe, ist das nicht der Fall  :-)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #27 am: 09. September 2010, 10:33 »
Ja, das soll wohl einen Konstruktor darstellen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen