A20-Gate, Umschalten in den Protected Mode, etc

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Protected Mode

Beitrag von Dirty Oerti » Mo Okt 06, 2008 1:46 pm

Enable() und Disable() werden in Kerneln häufig verwendet, um Interrupts an/aus zu schalten. Das hast du schon richtig gemerkt.

ABER:
Diese Funktionen sind meist in irgendeinem Header und sehen so aus:

Code: Alles auswählen

void InterruptsEnable()
{
    /////////////////////////////
    // Interrupts aktivieren
    /////////////////////////////
    asm volatile("sti");
}
void InterruptsDisable()
{
    /////////////////////////////
    // Interrupts deaktivieren
    /////////////////////////////
    asm volatile("cli");
}
Genauso verhält es sich auch mit dem Sprung in den Protected Mode.
In der Zeit, in der ich mich nun mit Kernel-programmierung beschäftige, habe ich noch KEINEN Kernel ohne Assembler gesehen.
Und gegen Assembler ist auch nichts zu sagen.

Ich Übrigen: Startest du per GRUB?
Wenn ja, dann herzlichen Glückwunsch, der Protected Mode ist BEREITS aktiviert.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Protected Mode

Beitrag von cloidnerux » Mo Okt 06, 2008 1:47 pm

Noch starte ich per GRUB.
Toll das da Protected mode an ist.
Aber was wäre das für ein Betriebsystem, dass nur wegen GRUB laufen kann
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Protected Mode

Beitrag von Xin » Mo Okt 06, 2008 1:47 pm

cloidnerux hat geschrieben:Noch starte ich per GRUB.
Toll das da Protected mode an ist.
Aber was wäre das für ein Betriebsystem, dass nur wegen GRUB laufen kann
Vielleicht ist GRUB keine so schlechte Mindestbedingung, um das Betriebsystem starten zu lassen.

Grub installiere ich jedenfalls schneller, als einen Tastaturtreiber ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Protected Mode

Beitrag von cloidnerux » Mo Okt 06, 2008 1:49 pm

Ich weiß, aber ich will später nen eigenen Bootloader benutzen, nur jezt noch nicht, weil man GRUB so leicht in den Bootsektor schieben kann
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Protected Mode

Beitrag von Dirty Oerti » Mo Okt 06, 2008 1:49 pm

cloidnerux hat geschrieben:Ich weiß, aber ich will später nen eigenen Bootloader benutzen, nur jezt noch nicht, weil man GRUB so leicht in den Bootsektor schieben kann
Wenn du das willst, nur zu.

Dir sollte aber bewusst sein, dass du damit auf den wohl besten Bootloader, den es gibt verzichtest.
Wenn dein OS per GRUB gestartet werden kann, dann kann man es ganz bequem nebenher auf einem PC haben.
Eine Installation wird (VIEL später) damit auch einfacher werden...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: A20-Gate, Umschalten in den Protected Mode, etc

Beitrag von cloidnerux » Mo Okt 06, 2008 5:03 pm

Ist eigentlich auch egal.
Aber ich hab mein Problem immer noch nicht gelöst.
Aslo naochmal:
GCC meckert das Inline Assembler den befehl 'dw' und 'db' nicht kennt. ICh weiß schon das diese befehle speicher bereitstellen, aber ich weiß nicht wo, denn sonst könnte ich das ja per C machen. Also hier dei komplette codezeile:

asm ("mov %0,%%ax;": : "d" (save_cs));
asm ("mov offset cs:rm_cs,%di;");
asm ("mov %ax,(di);");
asm ("mov %0,%%ax;" : : "d" (save_ds));
asm ("mov offset cs:rmode+ 1,%di;");
asm ("mov %ax,(di);");
asm ("mov ecr0,%ax;"
"and NOT 1,%eax;"
"mov %eax,%cr0;");
asm ("db $0x0ea;");
asm ("dw offset rmode;");
asm ("rm_cs dw 0;");
asm ("rmode:;");
asm ("mov $0,%ax;");
asm ("mov %ax,%ds;");

wenn mir itgednwer helfen könnte
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: A20-Gate, Umschalten in den Protected Mode, etc

Beitrag von Xin » Mo Okt 06, 2008 5:06 pm

cloidnerux hat geschrieben:Ist eigentlich auch egal.
Aber ich hab mein Problem immer noch nicht gelöst.
Aslo naochmal:
GCC meckert das Inline Assembler den befehl 'dw' und 'db' nicht kennt. ICh weiß schon das diese befehle speicher bereitstellen, aber ich weiß nicht wo, denn sonst könnte ich das ja per C machen.
Der Inline-Assembler des GCC meckert vermutlich aus dem gleichen Grund: Er weiß nicht, was er damit anfangen soll.
Während ein Assembler durch den Code auch ein strukturierter Ablaufplan ist, wuselst Du mit dem Inlineassembler abwechselnd in C und Asm hin und her.
Ich wüßte nicht, wie ich "db" in einem Inlineassembler sinnvoll übersetzen sollte und wenn es die GCC-Entwickler auch nicht wissen, wäre meine Lösung dafür, diese Befehle auch nicht anzubieten.

Wo hast Du dieses Programm denn überhaupt her?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Protected Mode

Beitrag von Dirty Oerti » Mo Okt 06, 2008 9:48 pm

cloidnerux hat geschrieben:Hab jezt was gefunden:
http://www.fh-zwickau.de/doc/prmo/pmtut ... pmodec.htm
Ich zitiere:
Ein minimales Programm, das den Prozessor vom Realmode in den Protected Mode schaltet, muß mindestens die folgenden Schritte ausführen:
# Einrichten einer GDT mit Deskriptoren auf die verwendeten Segmente.
# Setzen der Startadresse der GDT mit dem Befehl LGDT.
# Aktivieren des Protected Mode, dazu gehört:
--- Interrupts ausschalten
--- Bit 1 im Register CR0 setzen und
--- FAR-JMP zu einem Protected Mode Codesegmentselektor ausführen.

Abgesehen von den dazu benötigten speziellen Assemblerbefehlen, läßt sich das auch in einer Hochsprache realisieren.
Wo liegt nun genau das Problem?
Du verstehst den Code nicht, den du aus der Webseite kopiert hast.
Glaube ich dir, ich verstehe ihn auch nicht.
Ganz einfach, weil es auf diesem Wege doch etwas kompliziert ist...

Im Übrigen wird dort normaler Assembler benutzt...in einem *.asm File.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: A20-Gate, Umschalten in den Protected Mode, etc

Beitrag von cloidnerux » Di Okt 07, 2008 7:34 am

Doch ich verstehe den code. Das ist ja nicht das Problem.
Mein Problem ist diser 'db' und 'dw' befehl. Er reseviert speicher. Es wird aber keine sprungmarke gesetzt, wodurch man das nutzen könnte. Jezt könnte man annemen das diese befehle irgendwo an eine bestimmte stelle schreiben, und dann später wird dann dise stelle genutzt, was aber nicht der fall ist. Jezt ist mein problem, dass eine VAriable die ich anlege, aber nicht brauche, auch gleich weglassen kann.
So jezt wäre meine frage, ob bei einem normalen Assemblerprogramm, wo man so ein stück speicher reserviert, auch wieder darauf zugreifen kann, auch wenn ich keine Sprungmarke gesetzt habe.

P.S: Dieser code war in der INTEL Schreibweise und ich habe ihn in die AT&T schreibweise gebracht, Könnte es daran liegen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: A20-Gate, Umschalten in den Protected Mode, etc

Beitrag von Xin » Di Okt 07, 2008 9:13 am

cloidnerux hat geschrieben:Doch ich verstehe den code. Das ist ja nicht das Problem.
Mein Problem ist diser 'db' und 'dw' befehl. Er reseviert speicher. Es wird aber keine sprungmarke gesetzt, wodurch man das nutzen könnte. Jezt könnte man annemen das diese befehle irgendwo an eine bestimmte stelle schreiben, und dann später wird dann dise stelle genutzt, was aber nicht der fall ist.
Unter MC68k-Assembler würde er genau da in den Code ein Byte mit dem Wert schreiben.
Das würde also als Befehl abgearbeitet werden.
Vielleicht ein Befehl, für den in dem Assembler, den der Webseitenmensch benutzt, keine Entsprechung als Befehl vorhanden ist, so dass er ihn in Maschinensprache - also einfach als Zahlen - kodiert hat?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten