Autor Thema: Floppy mit I/O Port ansprechen und Fragen zum Protected Mode  (Gelesen 2228 mal)

NoName

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
Liebe Mitglieder des Lowlevel-forums,

ich lerne seit kurzer Zeit Assembler - ein paar Monate - und bin, weil ich nicht wusste was ich machen soll, um ein "bisschen" zu üben, auf die Idee gekommen ein eigenes OS zu schreiben - ich bin nicht größenwahnsinnig, ich weiß, dass es am Ende nicht zu gebrauchen sein wird, ich will nur meinen Computer verstehen -, um mir meine Zeit zu vertreiben. Zudem "spreche" ich ein bisschen C. Wie schon gesagt bin ich erst seit kurzem zum OS Programmieren gekommen, also habt Mitleid, wenn das was ich schreibe so falsch ist, dass es schon physisch weh tut. Soviel zu mir.

Also meine Frage zum Floppy:
Ich habe den Realmode verlassen und will nun "Sachen" aus meinem Floppydrive (Bootdrive) laden. Irgendwie muss ich dem Ding doch mitteilen, welcher Sektor geladen werden soll und wohin. Das geht warscheinlich mit IN und OUT. Aber welchen Port muss ich ansprechen (Ich hab das nirgendwo gefunden oder bin vielleicht einfach zu doof). Ich wäre dankbar für ein kommentiertes Beispiel. Ich will das so gut wie möglich verstehen.

Meine Fragen zum Protected Mode:
1. Wenn ich einen C code schreibe oder Assemblercode, dann gib es da ja Sektionen .text, .data, ... Wenn ich den Code im PM mode ausführen will muss ich ja darauf achten, dass z.B. die Sektion .data im Bereich eines Deskriptors liegen, der das Lesen erlaubt. Ich weiß nicht wie das schöne Betriebssysteme (LINUX) machen aber ich glaube, sich überlappende "Daten-" und "Codesektion" sind nicht die sauberste Lösung (aber die einzige Möglichkeit die mir momentan einfällt). Die Binärdatei liegt als eine große Datei vor. Wie sorge ich also dafür, dass mein Code in einer "Codesektion" und meine Daten in einer "Datensektion" liegen.

2. Ich darf die GDT während des PM verändern, oder?

PS: Wäre nett, wenn ihr bei der Registrierung einen Link zu den Nutzungsbedingungen einfügen könntet. Gibt es überhaupt welche?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. April 2012, 22:03 »
Willkommen an Board!

Wie man das Diskettenlaufwerk anspricht, wird im Artikel http://www.lowlevel.eu/wiki/FDC beschrieben.

1. Wenn ich einen C code schreibe oder Assemblercode, dann gib es da ja Sektionen .text, .data, ... Wenn ich den Code im PM mode ausführen will muss ich ja darauf achten, dass z.B. die Sektion .data im Bereich eines Deskriptors liegen, der das Lesen erlaubt. Ich weiß nicht wie das schöne Betriebssysteme (LINUX) machen aber ich glaube, sich überlappende "Daten-" und "Codesektion" sind nicht die sauberste Lösung (aber die einzige Möglichkeit die mir momentan einfällt). Die Binärdatei liegt als eine große Datei vor. Wie sorge ich also dafür, dass mein Code in einer "Codesektion" und meine Daten in einer "Datensektion" liegen.
Du solltest die GDT auf jeden Fall so einrichten, dass die Segmente an der selben Adresse (nämlich 0) anfangen und den gesamten Adressraum (4 GB) umfassen. Das ist das Speichermodell, das am einfachsten zu programmieren ist und von deinem Compiler erwartet wird. Alle gängigen Betriebssysteme inklusive Linux und Windows machen das so. Der Grund dafür ist, dass Paging die Segmentierung überflüssig macht und Virtual Memory (= Paging) im Gegensatz zu Segmentierung auch auf anderen Architekturen verfügbar ist. Ich würde deswegen davon abraten diese Trennung zwischen Code und Daten vorzunehmen.

2. Ich darf die GDT während des PM verändern, oder?
Ja.

Nutzungsbedingungen haben wir übrigens nicht.
Dieser Text wird unter jedem Beitrag angezeigt.

NoName

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. April 2012, 23:31 »
Ich danke dir für die schnelle Antwort.

Zum Thema Paging:
Ich hatte eigentlich ursprünglich vor erstmal den PM richtig zu meistern, aber wenn das sowieso alle anders machen, lese ich mich in das Paging mal ein.

Nochmals danke!
« Letzte Änderung: 26. April 2012, 23:34 von NoName »

 

Einloggen