Also ich komm da einfach nicht weiter. Ich habe alles mögliche versucht, aber nicht funktioniert. Das einzige was funktioniert ist: Motot an und Motor aus. Aber ich möchte jetzt aus testzwecken nur einen Sektor (Sektor 4, sprich den dritten Sektor) mit Daten beschreiben. Aber VMware zeigt mir eine Fehlermeldung an und Bochs macht gar nichts mehr. Der Sektor wurde auch nicht beschrieben. Was mache ich da falsch? Hier mein Code:
xor al,al
call fdc_activate_motor
mov bl,0Fh
call fdc_sendbyte
xor bl,bl
call fdc_sendbyte
xor bl,bl
call fdc_sendbyte
mov bl,01h
call fdc_wait
xor cl,cl
mov dx,07C0h
xor bx,bx
call dma_xfer ;bis hier mache ich glaube ich alles richtig
mov bl,0C5h ;jetzt komt der Fehler
call fdc_sendbyte
xor bl,bl
call fdc_sendbyte
xor bl,bl
call fdc_sendbyte
xor bl,bl
call fdc_sendbyte
mov bl,03h
call fdc_sendbyte
mov bl,02h
call fdc_sendbyte
mov bl,18
call fdc_sendbyte
mov bl,1Bh
call fdc_sendbyte
mov bl,0FFh
call fdc_sendbyte
xor bl,bl
call fdc_wait
jmp $
Hier mal die Funktionen von denen ich ausgehe das dort ein Fehler sein kann:
;input: bl, 0=ohne sensei, 1=mit sensei
;output: -
fdc_wait proc near
cmp irq6_done,1
jne fdc_wait
pusha
push bx
cli
mov cx,0007h
fdc_wait_loop:
mov dx,03F4h
in al,dx
and al,10h
or al,al
jz fdc_wait_weiter
dec cx
jz fdc_wait_weiter
call fdc_getbyte
jmp fdc_wait_loop
fdc_wait_weiter:
pop bx
or bl,bl
jz fdc_wait_no_sensei
mov bl,08h
call fdc_sendbyte
call fdc_getbyte
call fdc_getbyte
fdc_wait_no_sensei:
mov irq6_done,0
sti
popa
ret
fdc_wait endp
;input: bl = Byte das gesendet werden soll
;output: -
fdc_sendbyte proc near
pusha
mov cx,0080h
mov dx,03F4h
fdc_sendbyte_loop:
in al,dx
and al,0C0h
cmp al,80h
jne fdc_sendbyte_weiter
mov dx,03F5h
mov al,bl
out dx,al
popa
ret
fdc_sendbyte_weiter:
in al,80h
loop fdc_sendbyte_loop
popa
ret
fdc_sendbyte endp
;input: -
;output: bl = Byte aus dem Datenregister
fdc_getbyte proc near
push ax
push cx
push dx
mov cx,0080h
mov dx,03F4h
fdc_getbyte_loop:
in al,dx
and al,0D0h
cmp al,0D0h
jne fdc_getbyte_weiter
mov dx,03F5h
in al,dx
mov bl,al
pop dx
pop cx
pop ax
ret
fdc_getbyte_weiter:
in al,80h
loop fdc_getbyte_loop
pop dx
pop cx
pop ax
ret
fdc_getbyte endp
Es wäre wirklich nett wenn ihr euch das mal anschaut. Ich finde den Fehler einfach nicht.
Danke!!!