Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Programm Noob am 28. June 2010, 23:53
-
Moin
Wie muss der Multiboot header aussehen, um vesa aktivieren zu lassen?
-
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.
-
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
-
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.
-
Taljeth ich weiß nicht wie ich das ausrechen soll.
-
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)
-
vielen dank
Ich werds gleich morgen testen
-
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ß
-
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. ;)