Autor Thema: int 13h - 0x55 Sektoren lesen  (Gelesen 4029 mal)

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« am: 03. April 2006, 19:07 »
Mein Kernel ist nun schon so weit das er größer als 2 Sektoren geworden ist
(ganze 0x55 Sektoren *stolz*)

deswegen muss ich über Zylinder Grenzen hinweglesen, dazu hab ich ein paar Fragen:

1. kann int 0x13 über Zylinder und über Kopf Grenzen lesen?
oder müsst ich z.B. den letzten Sektor eines Zylinders und den 1. des nächsten getrennt lesen?

2. der erste Sektor einer Diskette ist ja
Kopf 0 Zylinder/Spur 0 Sektor 1

aber welcher ist der 1. des 2. Zylinders?
Kopf 0 Zylinder/Spur 1 Sektor 0
oder
Kopf 0 Zylinder/Spur 1 Sektor 1

und das gleiche dann noch bei den Köpfen:

ist der 1. Sektor des 2. Kopfes
Kopf 1 Zylinder/Spur 0 Sektor 0
oder
Kopf 1 Zylinder/Spur 0 Sektor 1

nore

  • Beiträge: 76
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. April 2006, 19:38 »
1) soweit ich weiß, ist das von bios zu bios verschieden. bin mir da aber nicht sicher. ich würde es aber auf keinen fall machen, denn wenn es bei dir klappt, heißt das ja nicht, dass es bei anderen auch klappt.

2) der erste des zweiten cylinders ist 1/0/1 (lsn 36), der erste des zweiten kopfs ist 0/0/1 (lsn 18), der erste des zweiten zylinders auf dem zweiten kopf ist 1/1/1 (lsn 54)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #2 am: 03. April 2006, 22:55 »
Am besten du schreibst dir eine funktion die logische sektoren in physikalische umwandelt, und mit loop die Anzal der sektore (wobei in al immer eins steht also nur ein sektor pro int 13h). Aber ist dein kernel wirklich schon 0x55 = 55h = 85 Sektore = 42,5 KByte groß? Dann müsstest du das doch schon hinbekommen, wenn du schon so viel in deinem Kernel hast (nicht böse gemeint).

bitmaster
In the Future everyone will need OS-64!!!

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 05. April 2006, 15:14 »
ah, das ist eine gute Idee, das mach ich,
dann muss man nie über irgendwelche Grenzen, da alles einzeln gelesen wird
und wenn ich das ganze schneller haben will, muss ich das Diskettenlaufwerk sowiso direkt ansprechen, ohne BIOS-Interrupts

der Kernel ist nur so groß, weil ich C benutzt habe, erstmal habe ich meine 3d-Engine eingelinkt (mein VGA-Treiber funktioniert schon einigermaßen, ist auch nicht wirklich schwer) und mit der dann auch gleich die komplette Fließkomma Emulation
eigentlich bin ich noch ziemlich am Anfang mit allem

nore

  • Beiträge: 76
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 05. April 2006, 16:10 »
85 sektoren (und es werden noch mehr) einzeln laden? dauert das nicht ein bischen lang? würde ich auf dauer nicht so machen. naja, ist ja deine entscheidung.

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 05. April 2006, 17:44 »
Zitat
85 sektoren (und es werden noch mehr) einzeln laden? dauert das nicht ein bischen lang? würde ich auf dauer nicht so machen. naja, ist ja deine entscheidung.


Zitat
und wenn ich das ganze schneller haben will, muss ich das Diskettenlaufwerk sowiso direkt ansprechen, ohne BIOS-Interrupts


 :wink:

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #6 am: 05. April 2006, 19:23 »
Zitat von: nore
85 sektoren (und es werden noch mehr) einzeln laden? dauert das nicht ein bischen lang? würde ich auf dauer nicht so machen. naja, ist ja deine entscheidung.
Das dauert nicht lange. Zumindest nicht länger als würdest du viele aufeinmal laden. Ich mache das immer mit einem Sektor pro int 13h. Das ist wirklich nicht langsamer (vielleicht 0,000001 Millisekunden oder so).

bitmaster
In the Future everyone will need OS-64!!!

 

Einloggen