Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: LittleFox 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
-
mal ne kleine frage: was funzt denn an dem treiber nicht?
weil wenn ich das wüsste könnte ich aus dem code lernen ;)
-
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 ...
-
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
-
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
-
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 ...
-
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.
-
// 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?
-
...
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