Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: LittleFox am 11. May 2010, 18:55

Titel: [gelöst]Problem mit Diskettentreiber
Beitrag 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
Titel: Re: Problem mit Diskettentreiber
Beitrag von: chris12 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 ;)
Titel: Re: Problem mit Diskettentreiber
Beitrag von: LittleFox 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 ...
Titel: Re: Problem mit Diskettentreiber
Beitrag von: chris12 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
Titel: Re: Problem mit Diskettentreiber
Beitrag von: LittleFox 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
Titel: Re: Problem mit Diskettentreiber
Beitrag von: LittleFox 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 ...
Titel: Re: Problem mit Diskettentreiber
Beitrag von: bluecode 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.
Titel: Re: Problem mit Diskettentreiber
Beitrag von: LittleFox 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?
Titel: Re: Problem mit Diskettentreiber
Beitrag von: LittleFox 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