Autor Thema: [gelöst]Problem mit Diskettentreiber  (Gelesen 6734 mal)

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« am: 11. May 2010, 18:55 »
moin,

kann mal bitte irgendjemand meinen diskettentreiber überfliegen? Irgendwie krieg ich den nicht auf die reihe ... :oops:

den sourcecode findet ihr hier:
http://lf-os.googlecode.com/svn/trunk/drivers/Floppy

ich wollte das jetzt nicht alles hier rein schreiben, wäre etwas viel geworden ...

Danke schonmal für die Hilfe
« Letzte Änderung: 12. May 2010, 16:12 von littlefox »

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 11. May 2010, 20:57 »
mal ne kleine frage: was funzt denn an dem treiber nicht?
weil wenn ich das wüsste könnte ich aus dem code lernen ;)
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« Antwort #2 am: 11. May 2010, 20:58 »
beim versuch über den treiber einen sektor zu laden, scheint er in einer endlosschleife zu hängen.
Ich würde ja auf die IRQ's tippen, die hab ich aber schon überprüft ...

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. May 2010, 21:12 »
ich nehme mal an, dass du schon sowas wie printf() hast, oder?
dann kannst du ja an wichtigen stellen zB printf("!"); einfügen um zu sehen wo er hängt ;) so mach ich das meißt
ich würde hinter der aktivierung des dma channel einen einfügen, und hinter den seek_traks bzw hinter motor_on();
du könntest auch verschiedene zeichen verwenden, oder auch status messages.
mfg
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« Antwort #4 am: 12. May 2010, 10:36 »
hab gerade festgestellt, dass er schon beim init_floppy() hängt ...
da kommt er bis zum motor_on()
in der motor_on() funktion kommt er bis wait_floppy()
er wartet endlos auf das diskettenlaufwerk ...

ich hoffe die infos haben etwas weitergeholfen ...

NACHTRAG: es kommt auch kein Floppy IRQ, zumindestens wird der Handler nicht aufgerufen
« Letzte Änderung: 12. May 2010, 10:38 von littlefox »

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« Antwort #5 am: 12. May 2010, 11:46 »
seltsamer weise scheint er jetzt zu funktionieren ...
Ich hab nur alle wait_floppy()'s rausgenommen, jetzt gehts :-D

ich frag mich nur warum die floppy irq's nicht ankommen ...

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 12. May 2010, 15:50 »
ich frag mich nur warum die floppy irq's nicht ankommen ...
Das könnte natürlich an einer falschen Konfiguration der PIC liegen, daran, dass Interrupts über das Interrupt Enable Flag der CPU verboten wurden oder daran, dass du dem Diskettenlaufwerk über eines der Register mitgeteilt hast, dass es keine IRQs nutzen soll.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« Antwort #7 am: 12. May 2010, 15:55 »
// Controller Reset
outb(0x3F2,0x00);
outb(0x3F2,0x0C);
print_com("Floppy Reset\n");

0x0C wäre doch Motor bei laufwerk A: an und IRQ's aktivieren, oder?
Ansonsten funktionieren die IRQ's auch, Tastatur und PIT ...

Trotzdem danke für die Antwort

EDIT: muss man nach dem Controller Reset eine Zeit lang warten?
« Letzte Änderung: 12. May 2010, 16:00 von littlefox »

LittleFox

  • Beiträge: 306
    • Profil anzeigen
    • LF-Net.org
Gespeichert
« Antwort #8 am: 12. May 2010, 16:11 »
...

ich hab in der motor_off() Funktion ein controller reset gemacht ...
der motor geht zwar aus, aber die irq's werden auch abgeschaltet ... :oops:

Jetzt geht es wie es soll

Danke für die Hilfe

 

Einloggen