Controller Ram Diagnostic
-
Ich habe ein kleines Assemblerprogramm zum Testen des Festplattenkontrollers fuer den Turbo Assembler geschrieben.
Es ruft die Funktion 012h des Interrruptes 013h auf.
Das Carry-Flag wird gesetzt, also ist ein Fehler aufgetreten.
In AX bekomme ich 0124h zurueck, in BX 0, in CX 00ffh und in DX 0080h.
Lauft Ralf Browns Interruptlistehttp://www.ctyme.com/rbrown.htm sollte ich in AL Null zurueckbekommen und in AH den Statuskode. 01 waere eine Fehlermeldung fuer eine falsche Funktionsnummer in AH oder einem nicht validen Parameter.
024h gibt es nicht als Status und 020h zeigt Controller-Versagen an.
Da ich mir mit den Angaben in dieser Interruptliste nicht ganz sicher bin, moechte ich hier mal nachfragen. Vielleicht hat jemand ja das Buch von Eddison Wesley.
-
Rolf Brown's Seite ist eigentlich dort: http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/ und er ist wohl sogar ein "Senior Systems Scientist (Research Faculty) at Carnegie Mellon University". Ich habe zwar keinen blassen Schimmer wo das ist, aber ein erfahrener Wissenschaftler scheint er ja schon zu sein, was aber noch lange vor keinen Computerfehlern schuetzen wird.
Im Wikipedia steht auch leider so gut wie nichts ueber die Funktion 012h des BIOS-Interruptes 013h drin.
Google will einfach nichts ueber diese Funktion 12h finden. Wo soll ich jetzt noch suchen?
-
Ich habe doch noch etwas gefunden unter: http://poli.cs.vsb.cz/misc/rbint/text/1300.html bei http://hdebruijn.soo.dto.tudelft.nl/newpage/interupt/out-0600.htm bei http://www.etext.org/Zines/ASCII/HaltCatchFire/hcf002.txt bei http://lib.daemon.am/Books/Upgrading_PC/ch22/ch22.htm und bei http://topic.csdn.net/t/20010610/13/153808.html
Aber dort sind auch nur die Informationen, die ich von der Interruptliste von Rolf Brown schon habe.
-
Auf was hast du dl denn gesetzt und auf was fuer einem System (OS, Emulator??, BIOS, angesprochene HDD) laeuft das Ganze?
-
Das Register DL habe ich auf 080h fuer meine erste und einzige Festplatte in diesem System gesetzt. Wenn ich mit Funktion 01h den Status auslese, klappt alles prima. Funktion 012h jedoch ist in vielen BIOS Interruptlisten nicht vertreten, so dass ich vermute, dass mein BIOS diese Funktion vielleicht gar nicht unterstuetzt.
Ich habe auf meinem Rechner Windows XP mit dem Service Pack 3 installiert.
Auf meinem board Fujitsu Siemens D1521, das speziell fuer den SCENIC P300 hergestellt wurde, ist ein BIOS von Phoenix mit dem Datum 12/11/03; die Versionsnummer ist 4.06 Revision 1.08.1521. Und meine Festplatte SV4012H ist von Samsung. Wenn dir das irgendwie was bringt.
-
Na ich hoffe, du startest dein Programm dann nicht einfach in der NTVDM (der eingebaute DOS-Emulator von Windows), denn in dem laeuft diese Funktion garantiert nicht und auf eine saubere Implementierung zB. der Rueckgabe kannst du dich auch nicht verlassen.
Ansonsten kann es wohl auch gut sein, dass viele BIOS diesen Befehl gar nicht implementieren.
-
Lass mich raten, NTVDM steht nicht fuer Nachrichten TeleVision Developing Module, oder?
Nein im Ernst NTVDM habe ich noch nie gehoert, fuer was steht denn das?
Ich habe es im Command Promt, welches bei Windows XP CMD heisst, gestartet.
Weisst du, wo man etwas ueber Normen oder Konventionen des BIOS herausfinden kann?
-
Eric Norbert Falbe schrieb:
Lass mich raten, NTVDM steht nicht fuer Nachrichten TeleVision Developing Module, oder?
Nein im Ernst NTVDM habe ich noch nie gehoert, fuer was steht denn das?
Ich habe es im Command Promt, welches bei Windows XP CMD heisst, gestartet.Das Teil startet fuer DOS-Programme die NTVDM - wie mehrmals schon gesagt, der DOS-PC-Emulator unter WinXP etc.
Wofuer das genau steht, weiss ich gerade auch nicht - such halt selbst, wenn es dich wirklich interessiert. :pEric Norbert Falbe schrieb:
Weisst du, wo man etwas ueber Normen oder Konventionen des BIOS herausfinden kann?
Im Zweifelsfall beim Hersteller. Ansonsten musst du schon konkreter werden...
-
Ich glaube ich habe die Loesung meines Problemes gefunden.
Ich muss wohl eine Funktion ab 040h benutzen so wie es aussieht.
Danke jedenfalls.
-
Wenn du meinst, versuch dein Glueck.
Ich wuerde vor allem fuer Spezialbefehle eigentlich eher dazu raten, den ATA-Controller (oder SATA? wobei KA, ob es dazu auch so einen schoenen quasi-standard gibt) direkt zu programmieren.
Siehe dazu die Links in OS-Dev in den FAQ.
Das wird dann allerdings sehr wahrscheinlich ueberhaupt nicht mehr vernuenftig in Windows funktionieren.
Ansonsten muesstest du halt auf Windows-Programme und die Win-API umsteigen und da eignet sich idR. C einfach besser.