Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 29. July 2007, 11:47

Titel: Problem beim lesen der Disk im RM
Beitrag von: RedEagle am 29. July 2007, 11:47
Ich habe folgenden Code:
   mov ax, 0x1000
   mov es, ax
   mov bx, 0      ; Zieladresse(es:bx) 0-2400
   mov ah, 2      ; Funktion 2 (Lesen)
   mov al, 18     ; Lese 36-18 Sektoren (maximum 36)
   mov cx, 0x0013 ; Cylinder=1, Sector=19
   xor dx, dx
   int 0x13       ; ES:BX = Daten vom Laufwerk
Nach ausführung steht in AH 04h -> "sector not found/read error"

wo muss ich das Problem suchen??
(Ich lasse den codeabschnitt 10 mal durchlaufen (im fehlerfall) und jedesmal der gleiche Fehler)
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: bitmaster am 29. July 2007, 12:46
Ich gehe davon aus, du liest von einer 1,44 MByte Floppy-Disk, stimmts? Da gibt es keinen physikalischen Sektor 19. Ich glaube das waren Null bis 17, falls ich mich nicht vertue.

2 Seiten, 80 Spuren, 18 Sektoren pro Spur = 2880 Sektore, jo stimmt ^^

Also Sektor 19 wäre dann:

Seite1, Spur0, Sektor 2 (falls ich mich nicht vertue ^^)

bitmaster
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: bluecode am 29. July 2007, 12:49
Null bis 17
afaik 1 - 18

Am besten im Wiki zum umwandeln nachschauen: CHS (http://lowlevel.brainsware.org/wiki/index.php/CHS) & LBA (http://lowlevel.brainsware.org/wiki/index.php/LBA)
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: bitmaster am 29. July 2007, 12:55
Ach ja, stimmt. Ich habe zu lange kein CHS mehr gemacht. ^^ 1 - 18 natürlich. Aber Sektor 19 (logisch) ist trozdem: Seite1, Spur0 und Sektor2.

bitmaster
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: RedEagle am 29. July 2007, 22:08
OK, wenns nur daran liegt  :-D
Ich bin davon ausgegangen, dass das vom BIOS berechnet wird, da ich ja auch 36 Sektoren gleichzeitig lesen kann...

Jedenfalls danke
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: bluecode am 30. July 2007, 00:03
Du kannst aber nur 36 Sektoren lesen, wenn es nicht über eine Trackgrenze geht.
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: RedEagle am 04. August 2007, 21:26
So am rande: Track == Cylinder, richtig?

Habe mich vom unteren code verabschiedet. Die unteren, freien Sektoren reserviere ich für spätere Zweckte.
Nun beginne ich beim 2. Cylinder. (Also Cylinder 1).
Dabei habe ich wider probleme:

erstmal code:
   mov ax, 0x1000
   mov es, ax
   mov bx, 0      ; Zieladresse(es:bx)
   mov ah, 2      ; Funktion 2 (Lesen)
   mov al, 36
   mov cx, 0x0101
   xor dx, dx
   int 0x13



So, nun zum Fehler:
erstmal sei gesagt, dass ich vorher das ganze segment 0x1000 prüfe (also lesen und schreiben) - ich kann lesen und schreiben. Ich weiß dass es eigentlich nicht nötig ist.
Desweiteren wird vorher das LW resettet

Fehlerbeschreibung:
int 0x13 wird nicht mehr verlassen (hängt sich auf), die LED des Diskettenlaufwerks leuchtet.

So: nun das komische an diesem Fehler:
Wenn ich nur 1 oder 2 Sektoren aufmal lese, funktioniert alles, bei 3 oder mehr kommt es zu dem Fehler
Getestete Kombinationen (Startsector+anzahl)
1+2, 3+1, 3+2, 4+2, 6+2 OK
1+3, 3+5, 3+3, 4+3, 4+4, 6+3 Fehler
Titel: Re: Problem beim lesen der Disk im RM
Beitrag von: RedEagle am 05. August 2007, 11:26
 :oops:
sry, dass ich euch mit so einem scheiß "belestige"
manchmal sieht man den Wald vor lauter Bäumen nicht.

Das Programm liegt im Segment 1000 :-D, und der ramcheck wird nie gecalled  :-D :-D