GELÖST: FDC Programmierung in VirtualPC - Noch eine Frage :)
-
Hallo zusammen,
ich habe ein paar Versuche in der Programmierung des Floppy Controllers
unter VirtualPC unternommen.Nun habe ich auch hier im Forum über einige Probleme gelesen die bei virtuellen
Maschinen aufgetreten sind.Mein Programm:
Auslesen der Konfiguration des FDC:
Controller über DOR aktivieren
Hauptstatusregister lesen und prüfen ob der FDC Daten annehmen kann
Befehl an Datenregister senden
Hauptstatusregister lesen und prüfen ob der FDC Daten ausgeben möchte
Datenregister 7x mit einem IN Befehl auslesen (7 Ergebnisbytes); Controller aktivieren mov al, 00000100b mov dx, 3f2h ;ins DOR ausgeben out dx, al mov dx, 3f4h dio_ok1: xor ax, ax in al, dx and al, 64d or al, al jnz dio_ok1 ;Wenn DIO Bit gelöscht dann weiter ;Befehl zur Konfig absenden mov dx, 3f5h mov al, 00001111b out dx, al mov dx, 3f4h dio_ok2: xor ax, ax in al, dx and al, 64d or al, al jz dio_ok2 ;Wenn DIO Bit gesetzt dann weiter mov dx, 3f5h ;Datenregister mov bx, datenbyte ;offset datenbyte nach BX mov cx, 7d ;7 Durchläufe da 7 Byte zurückgegeben werden einlesen: in al, dx mov byte [bx], al inc bx dec cx nop nop nop nop jnz einlesen xor ax, ax xor bx, bx xor cx, cx xor dx, dx ; ab hier erfolgt die Ausgabe der 7 Byte auf dem Schirm als Zahl! ;PRINT ist eine Routine um Registerwerte in ASCII umzuwandeln mov bx, datenbyte mov cx, 7d ausgabe: mov al, byte [bx] and ax, 0ffh push cx push dx call PRINT pop dx pop cx inc bx dec cx jnz ausgabe ; Controller deaktivieren xor ax, ax mov dx, 3f2h ;ins DOR ausgeben out dx, al ende: sti mov ax, 4C00h int 21h
Nach dem senden des Befehls wird das Busy-Bit (Befehl = aktiv) gesetzt
und dann passiert nichts mehr im Controller, das Programm hängt in der Abfrage-
schleife fest.Ist das ein bekannstes Problem bei virtuellen PC's?
Würde ein "echtes" Laufwerk im PC abhilfe schaffen, was dann verbunden wird?Wenn ich das Prüfen auf Daten im FDC einfach überspringe (Zeilen 7-13
und 22-28) und nach dem Senden des Befehls einfach
das Datenregister auslese, erhalte ich auch 7 unterschiedliche Bytes die durchaus
die Konfiguration enthalten könnten nach ihrem Aufbau. Das ist aber nicht der
richtige Weg.Falls jemand einen Tipp hat wäre ich wie immer sehr dankbar
Nicky
-
Nach meiner Erinnerung ist der FDC von VirtualPC vergleichsweise realitätsnah - er verhält sich also echten FDCs ähnlicher als z.B. der von qemu, VBox, etc.
Ich habe gerade nicht die Zeit, mir deinen Code gründlicher anzusehen, aber grundsätzlich empfehle ich, einfach die Spezifikation zu befolgen. Am Ende (Kapitel sind ein paar Ablaufdiagramme, die ggf. hilfreich sind. Siehe auch:
http://www.lowlevel.eu/w/images/2/2a/82077AA_FloppyControllerDatasheet.pdf
http://www.lowlevel.eu/wiki/FDC
-
Hallo nochmal,
ich habe von der Seite http://brokenthorn.com/Resources/OSDev20.html
das Beispiel für den DMA Controller auf ASM umgeschrieben. Dazu noch das
Beispiel aus dem Buch von Hr. Messmer für den FDC und es läuft sogarNun habe ich aber ein paar Fragen dazu.
In dem Beispiel von brokenthorn.com wird das Register von DMA1 und DMA2 beschrieben.
Laut Hr. Messmer ist der DMA2 nur der Master im AT, im PC/XT ist es der Slave.
Kann mir das bitte jemand erklären? Sollte man nicht entweder den Master oder
den Slave programmieren?Habe ich jetzt einen AT einen PC/XT oder gar ein PS2 Modell vor mir???
Kann man mit dieser Vorgehensweise auch im PMode Disketten lesen/beschreiben?
Gruß, Nicky
-
Schau mal hier: http://wiki.osdev.org/DMA#Floppy_Disk_DMA_Initialization