Autor Thema: Diskettentreiber  (Gelesen 6794 mal)

Cool-Andy

  • Gast
Gespeichert
« am: 11. November 2009, 16:04 »
Hi!

Ich wollte grade bei meinem OS eine Art Floppytreiber einbauen. Da habe ich mir gedacht, warum springt man eigentlich nicht in den Real Mode zurück, benutzt den Floppy-Interrupt springt in den PM zurück, und springt dann in die jeweilige RAM-Adresse?

Könntet ihr mir sagen, wie ich vom PM in den RM komme, anders rum kenn ich es ja!

Vielen Dank schon mal im Vorraus!  8-)
« Letzte Änderung: 11. November 2009, 18:27 von Cool-Andy »

Hobby Programmiere

  • Beiträge: 42
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 11. November 2009, 18:01 »
Geht das überhaupt andersherum? Aber das würde dir auch nichts bringen, dann müsstest du ja alles, was du im PM gemacht hast, weckwerfen. Stichwort: Speichermanager, Multitasking

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 11. November 2009, 18:12 »
Das geht.

1. der Einfachheit halber an eine Adresse < 0xffff springen (eigentliche Anforderungen: Code muss identity gemappt sein, und du darfst mit den Segmentdeskriptoren bzw. -basen nicht durcheinanderkommen.)
2. Paging deaktivieren (bit 31 in cr0 löschen)
3. IDT laden mit Basis 0, Limit 1023
4. 16 Bit Code/Daten Segmente in alle Segmentregister laden (Basis 0, wenn du in den ersten 64 KB bist)
5. Protected Mode deaktivieren (bit 0 in cr0 löschen)

Das ganze natürlich bei deaktivierten Interrupts.

Ich hoffe ich hab nix vergessen^^
« Letzte Änderung: 11. November 2009, 18:15 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #3 am: 11. November 2009, 18:23 »
In einen PM-Diskettentreiber würde ich das aber nicht einbauen. Da lohnt es sich dann, über vm86 nachzudenken.

Cool-Andy

  • Gast
Gespeichert
« Antwort #4 am: 11. November 2009, 18:27 »
OK,
ich glaub ich überlege mir doch noch mal einen Diskettentreiber zu schreiben.  :-D

Könntet ihr vielleicht so einen Ablauf wie PorkChicken es gemacht hat posten?
Es würde mir wirklich eine große Hilfe sein.

EDIT: Ich habe mal den Titel geändert.  :wink:

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 11. November 2009, 19:49 »
Ich hab vor Ewigkeiten mal einen Code dafür geschrieben. Der macht einige Sachen etwas zu kompliziert, und ich hoffe der wirkt abschreckend.

http://jidder.de/stuff/asm-execute-rm-int-from-pm.html <--- nicht klicken, nicht lesen, nicht kopieren, UND NICHT FRAGEN WENN DER NICHT FUNKTIONIERT

Ich beantworte dazu keine Fragen. Kein Witz.

Edit: Willst du eigentlich einen Diskettentreiber oder dich mit esoterischem Code rumschlagen?
Dieser Text wird unter jedem Beitrag angezeigt.

Cool-Andy

  • Gast
Gespeichert
« Antwort #6 am: 11. November 2009, 20:00 »
Hu!  :? :? :? :? :? :? :? :? :? :?
Ich versteh nur Bahnhof!

Zitat
Edit: Willst du eigentlich einen Diskettentreiber oder dich mit esoterischem Code rumschlagen?
Eigentlich wollte ich den schon selber schreiben (deshalb esoterischer Code).
Wenn jemand aber zufällig einen rumliegen hat (am Besten in C :-D) nehme ich den natürlich gerne!  :wink:

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 11. November 2009, 20:03 »
Ich glaub es ging eher darum dass diese Art von "Treiber" als esoterischer Code zu bezeichnen ist, Weniger dass was dabei rumkommt wenn du selber einen schreibst.

Fertige Floppytreiber gibt es z.b. bei tyndur, afaik sogar einen als CDI ;)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 11. November 2009, 20:04 »
Dann schreibst du am besten einfach einen Diskettentreiber statt dich mit dem Real Mode herumzuschlagen. ;)

CDI hat auch einen, falls du was vorgefertigtes nehmen willst. Aber ich bin mir nicht sicher, ob deine libc dazu weit genug ist.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 11. November 2009, 20:06 »
Ach, du wolltest so eine 5-Punkte-Liste für einen Diskettentreiber? Da hab ich dich falsch verstanden.

Auf jeden Fall existiert so eine Liste nicht ^^
Dieser Text wird unter jedem Beitrag angezeigt.

Cool-Andy

  • Gast
Gespeichert
« Antwort #10 am: 11. November 2009, 20:39 »
Falls euch noch was dazu einfällt - bitte hier posten! Ich probier mich jetzt mal ein bisschen an so einem Diskettentreiber rum!  :mrgreen:

Cool-Andy

  • Gast
Gespeichert
« Antwort #11 am: 12. November 2009, 06:13 »
OK,
ich habe jetzt ein bisschen rum gegoogelt und mich in der Wiki umgeschaut. Für was welches Register was ist weiß ich ja jetzt, und ansprechen kann ich die auch.
Aber: Ich will das ohne DMA machen, also direkt über Ports.
Könntet ihr mir erklären wie ich das initalisiere?
Ich blicks grade gar nicht!  :?

ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« Antwort #12 am: 12. November 2009, 08:03 »
Ich hab vor Ewigkeiten mal einen Code dafür geschrieben. Der macht einige Sachen etwas zu kompliziert, und ich hoffe der wirkt abschreckend.

http://jidder.de/stuff/asm-execute-rm-int-from-pm.html <--- nicht klicken, nicht lesen, nicht kopieren, UND NICHT FRAGEN WENN DER NICHT FUNKTIONIERT

Ich beantworte dazu keine Fragen. Kein Witz.

Edit: Willst du eigentlich einen Diskettentreiber oder dich mit esoterischem Code rumschlagen?
So etwas wollte ich auch mal schreiben. *g*
Aufgrund des unnützen Aufwands habe ich das aber dann gelassen (es gibt ja den virtual mode). :D

Cool-Andy

  • Gast
Gespeichert
« Antwort #13 am: 12. November 2009, 16:38 »
Hat den keiner eine Idee?  :?

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 12. November 2009, 17:44 »
Korrigiert mich wenn ich falsch liege, aber ist DMA nicht nur quasi eine optimierte Variante von in/out? Demnach müsstest du alles was du via DMA an daten rausschickst auch via in/out liefern können.

Ist aber nicht zu empfehlen - die CPU-Last die dabei entsteht ist beachtlich. Bei Floppys zwar noch fast vernachlässigbar, aber spätestens für Platten machst du dir das System so unbenutzbar.
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

Cool-Andy

  • Gast
Gespeichert
« Antwort #15 am: 12. November 2009, 18:40 »
Ok,
könnte mir jemand dann erklären, wie ich das mit DMA mache?
Es kommt jetzt vielleicht ein bisschen doof rüber, aber irgendwie versteh ich weder den Wiki-Artikel, noch mit Google gefundene Seiten.

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 12. November 2009, 19:46 »
Ok,
könnte mir jemand dann erklären, wie ich das mit DMA mache?
Es kommt jetzt vielleicht ein bisschen doof rüber, aber irgendwie versteh ich weder den Wiki-Artikel, noch mit Google gefundene Seiten.

Naja es geht ja gerade mal "nur" um das Diskettenlaufwerk.  Ich denke in so einer frühen Phase sollte man zusehen dass man sich durch den Stoff durchboxt. Ich musste auch ca. ne Woche lang den Paging Artikel (und externe Quellen) anstarren, bis ich das soweit verstanden hatte, dass ich es programmieren konnte. Ich denke so ist das nunmal.
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Cool-Andy

  • Gast
Gespeichert
« Antwort #17 am: 12. November 2009, 20:12 »
Ok,
könnte mir jemand dann erklären, wie ich das mit DMA mache?
Es kommt jetzt vielleicht ein bisschen doof rüber, aber irgendwie versteh ich weder den Wiki-Artikel, noch mit Google gefundene Seiten.

Naja es geht ja gerade mal "nur" um das Diskettenlaufwerk.  Ich denke in so einer frühen Phase sollte man zusehen dass man sich durch den Stoff durchboxt. Ich musste auch ca. ne Woche lang den Paging Artikel (und externe Quellen) anstarren, bis ich das soweit verstanden hatte, dass ich es programmieren konnte. Ich denke so ist das nunmal.

Danke für den Tipp! Ich starrs jetzt auch seit Freitag an und versteh es immer noch nicht!  :-(

DeepDancer

  • Beiträge: 58
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 12. November 2009, 20:15 »
Verzeih wenn ich mich mal eben so einmische - aber mir fällt auf dass Du dann doch recht oft bei auch sehr einfachen Sachen erst mal fragst und dann denkst (zumindest scheint mir das so).

Wenn Du wirklich ernsthaft mit der Programmierung (und im speziellen der OS-Entwicklung) weitermachen willst solltest Du lernen so Dinge wie zum Beispiel FDD per DMA anzusprechen über die bereits vorhandenen Tuts zu verstehen.

Das ganze ist an sich von der Theorie (und dann auch der Praxis) wirklich noch sehr einfach. Da gibt es ganz andere Baustellen die sich Dir auftun werden und da wirst Du dann auch ganz schnell die Lust verlieren weil es dann nicht mehr mit mal kurz Nachfragen getan ist.

Versteh mich ned falsch, fragen hat man immer mal, die hatte ich auch schon weil ich nachm 10ten mal lesen und denken immer noch nicht wirklich die Lösung hatte (man wird manchmal blind wenn man sich wo hinklammert) - nur fällt mir wie gesagt die Häufigkeit auf...


Cool-Andy

  • Gast
Gespeichert
« Antwort #19 am: 12. November 2009, 20:36 »
Ich versteh was damit sagen willst!  :-P
Wenn dich das beruhigt werde ich mir den Artikel über den DMA nochmal durchlesen, vllt. schaff ich es ja innerhalb der nächsten 2 Wochen zu versthen, wie ich das mit dem DMA hinkriege

Achja: Danke für die Kritik, ist mir gar nicht so aufgefallen!  :roll:

 

Einloggen