Autor Thema: Disketten Lesefehler  (Gelesen 2794 mal)

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« am: 13. April 2006, 18:59 »
Ich hab ein Problem beim Laden von Sektoren von einer Diskette:
ich bekomme immer einen Lesefehler zurück:

0x10

hab dann nachgeguckt was der bedeutet:

Lesefehler

klasse, das bringt mich natürlich weiter

in Bochs funktioniert das ganze übrigens,
ich benutzt int 0x13 zum lesen, die macht ja das meiste alleine
(Lesekopf positionieren und was es da alles gibt)

deswegen kann ich mir nicht vorstellen was den Lesefehler verursacht haben soll, ein Sektor ist auch nicht beschädigt, das hätte ich beim beschreiben der Diskette gemerkt

also weis jemand was genau "Lesefehler" bedeutet und woran das liegen kann?

EDIT:
ich hab auch schon versucht statt neu zu starten einfach nochmal zu versuchen den Sektor einzulesen, das funktioniert allerdings auch nicht, dann kommt bei jedem Versuch der "Lesefehler"

EDIT2:
ich hab jetzt versucht das Diskettenlaufwerk zu resetten bevor ich lese
(auch mit int 0x13)
das Ergebnis ist aber genau das Gleiche
morgen versuch ichs noch auf nem anderen Pc, aber auch wenn es da klappt hilft mir das nicht wirklich weiter
naja, mal schaun...

nore

  • Beiträge: 76
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. April 2006, 11:41 »
liest du vielleicht über track-grenzen hinweg? das funktioniert nämlich nicht bei jedem computer.
kannst du vielleicht mal den code von der stelle posten? das würde es sicher vereinfachen, den fehler nachzuvollziehen.

was der fehler heißt kann ich dir allerdings nicht sagen.

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. April 2006, 12:45 »
ich les absichtlich immer nur 1 Sektor auf einmal, um solche Fehler zu umgehen
Code hab ich absichtlich nicht gepostet, ich dachte da vergeht den meisten die Lust, da er ein bisschen lang ist, aber wenns hilft:

readdisk:
push bp
mov bp, sp
sub sp, 0x06
pusha
mov ax, [bp+4]
mov bx, 0x0024
xor dx, dx
div bx
mov [bp-2], ax
mov ax, dx
push ax
mov bx, 0x0012
xor dx, dx
div bx
mov [bp-4], ax
pop ax
xor dx, dx
div bx  
mov ax, dx
inc ax
mov [bp-6], ax
mov ax, [bp+6]
mov es, ax
mov ah, 0x02
mov al, 0x01
mov ch, [bp-2]
mov cl, [bp-6]
mov dh, [bp-4]
mov dl, 0x00
int 0x13
jc readdisk_fehler
popa
mov sp, bp
pop bp
ret

readdisk_fehler:
pusha
push ds
push ax
mov ax, 0x1000
mov ds, ax
mov [0x0000], ax
pop ax
pop ds
mov si, readdisk_fault
call text
mov ax, 0x1000
mov ds, ax
mov si, 0x00
mov cx, 0x0002
call hex
popa
jmp readdisk

readbr:
mov cx, 0x0001
mov ax, 0x1000
readbr_loop:
cmp cx, 0x0055
je readbr_e
push ax
push cx
call readdisk
add sp, 4
inc cx
add ax, 0x20
jmp readbr_loop
readbr_e:
ret


in der main Funktion (keine Ahnung wie die bei Assembler heist, is ja eigentlich keine Funktion)
wird dann einfach "call readbr" aufgerufen
Die Segmente und der Stack sind richtig gesetzt

das Dumme ist ich kann mir nicht vorstellen wo der Fehler ist, ich hätte gedacht ich berechne einfach irgendwas falsch und die Sektoren werden komplett daneben geladen,
aber das kann nicht sein, in Bochs funktionierts ja

(der Code zum Sektoren lesen ist größtenteils der von Tee-Jay, meiner wollte nie so wirklich)

EDIT:

na klasse, pusha sichert gar nicht alle Register, es z.B. nicht, deswegen konnte das gar nicht funktionieren
Funktionieren tut das ganze allerdings trotzdem noch nicht, jetzt stürzt er einfach ohne Fehlercode ab, aber ich bin schonmal ein Stück weiter

 

Einloggen