Autor Thema: Multiboot Vesa aktivieren  (Gelesen 5389 mal)

Programm Noob

  • Gast
Gespeichert
« am: 28. June 2010, 23:53 »
Moin

Wie muss der Multiboot header aussehen, um vesa aktivieren zu lassen?

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. June 2010, 09:37 »
Hm, Musst du wohl selber experimentieren, Habe grade jedenfalls weder bei uns noch bei osdev.org Infos dazu gefunden (nur Wiki).
Würde aber eh davon abraten das zu machen. A) Wenige Bootloader die das mitmachen (GRUB nur gepatcht, oder GRUB2 - beides imho eher selten vorhanden), B) Keine Möglichkeit zum Moduswechsel im laufenden Betrieb, C) Du kannst dir nicht so ganz sicher sein das deine Wünsche auch respektiert werden. afaik kann ich (dem gepatchten grub zumindenst) auch sagen setz lieber den Modus. Und dann gehn die Probleme los ;)
Implementier lieber VM86. Dauert ne Ecke, ist dafür aber ganz praktisch. Und VBE dann selber anzusprechen, ist echt kein Problem und schnell erledigt.
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Programm Noob

  • Gast
Gespeichert
« Antwort #2 am: 29. June 2010, 23:02 »

Laut der Multiboot Specification muss von den Flags bit 2 und bit 11 gesetzt sein.
<code>
.section .text
 
// Init ist eine Funktion aus init.c
.extern init
 
#define MB_MAGIC 0x1badb002
#define MB_FLAGS 0x0100000000100000
#define MB_CHECKSUM -(MB_MAGIC + MB_FLAGS)
 
// Der Multiboot-Header
.align 4
.int    MB_MAGIC
.int    MB_FLAGS
.int    MB_CHECKSUM
 
...
...
...
</code>

Ist das so richtig? und ich habe GRUB2 und inzwischen auch nen Gepatchten GRUB legacy.

Programm Noob

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 29. June 2010, 23:08 »
Laut der Multiboot Specification muss von den Flags bit 2 und bit 11 gesetzt sein.

#define MB_FLAGS 0x0100000000100000
Wie kommst du darauf, dass in deinem MB_FLAGS Bits 2 und 11 gesetzt sein sollten? Zum einen ist Bit 0 das niederwertigste Bit, zum anderen ist binär was anderes als hexadezimal.

Der korrekte Wert für gesetztes Bit 2 und 11 ist (1 << 2) | (1 << 11). Das auszurechnen überlasse ich dir.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Programm Noob

  • Gast
Gespeichert
« Antwort #4 am: 29. June 2010, 23:34 »
Taljeth ich weiß nicht wie ich das ausrechen soll.



kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 29. June 2010, 23:39 »
Im Zweifelsfall einfach deinen Rechner rechnen lassen:
#include <stdio.h>

int main(void)
{
    printf("0x%x\n", (1 << 2) | (1 << 11));
    return 0;
}

Alternativ kann man auch binär relativ leicht in hexadezimal umwandeln, indem man immer vier Stellen zusammennimmt. Mit Bit 2 und 11 gesetzt hätten wir also 1000 0000 0100 = 0x804 (falls ich mich nicht verrechnet habe)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Programm Noob

  • Gast
Gespeichert
« Antwort #6 am: 29. June 2010, 23:55 »
vielen dank
Ich werds gleich morgen testen

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 29. June 2010, 23:56 »
Die Schreibweise für Binärdarstellung ist übrigens sowas wie:

0b01001001

vgl.

0x49

mit b statt x.

Kennt leider der C-Standard nicht; in manchen Dokumenten/Arbeiten ist diese Schreibweise aber häufiger vertreten.

Gruß

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 30. June 2010, 10:28 »
Naja, ich bin auch von der Nützlichkeit nicht überzeugt. Bei Binärzahlen habe ich persönlich jedenfalls immer Schwierigkeiten, ohne Nachzählen zu erkennen, ob jetzt das 17. oder 18. Bit gesetzt ist. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen