Pascalprogramm fehlerhaft unter dosemu/freedos

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

Pascalprogramm fehlerhaft unter dosemu/freedos

Beitrag von guennid » 02.04.2005 11:00:27

In einem Pascalprogramm soll mit MsDos(regs) geprüft werden, ob auf ein Laufwerk/Festplatte geschrieben werden kann. Der problematische Teil sieht so aus:

Code: Alles auswählen

d:= Ord(drive[1])-$40; BX:= d; AX:= $4408;        { IOCTL is Changeable? }
MsDos(regs);                         { Status des Laufwerk-Checks in AX  }
Für drive[1] = 'C' erhalte ich unter (dosemu-1.2.1/freedos) AX = 15,was im weiteren Programmlauf dazu führt, dass die Platte als nicht beschreibbar eingestuft wird und das ist offensichtlich falsch.
'C:' ist ein Verzeichnis unter linux.
Das Programmmodul stammt nicht von mir. Ich habe so gut wie keine Ahnung von assembler (und in den Bereich geht das doch wohl hier?). Vier Fragen habe ich zunächst:
Was macht MsDos() eigentlich?
Was bedeutet AX = 15?
Was würde AX = 0 bedeuten?
Was würde AX = 1 bedeuten?

Grüße, Günther

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 02.04.2005 13:20:38

MsDos wird wohl Int 21h aufrufen.

http://www.ctyme.com/intr/rb-2890.htm

AX = 15h ist der Fehlercode "Drive not ready"

guennid

Beitrag von guennid » 02.04.2005 14:17:30

Danke für den Hinweis. Was kann man tun? Der Wert stimmt nicht. Wenn ich ihn ignoriere , kann ich durchaus auf die Platte schreiben.

Grüße, Günther

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 02.04.2005 15:18:33

Wie wäre es dann damit, AX auf 1 zu setzen und das Carry-Flag zu löschen. Oder noch einfacher, einfach die darauffolgende Abfrage so zu ändern, dass sie immer ok gibt.

guennid

Beitrag von guennid » 02.04.2005 17:08:03

joghurt hat geschrieben:die darauffolgende Abfrage so zu ändern, dass sie immer ok gibt.
So werd' ich's wohl machen oder ich ersetze msdos() durch ein simples diskfree(), dann brauch ich nicht auf die Speicher-Register zuzugreifen.
Ich finde aber diese Routine eigentlich nicht schlecht, weil sie - wenn sie denn funktionierte- unabhängig von den problematischen M$-Laufwerksbuchstaben klären würde, was Sache ist.
Was bedeutet "carry flag"? Nix für ungut, aber wie schon gesagt, ich bewege mich hier in Bereichen, die für mich grenzwertig sind.

Freundliche Grüße, Günther

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 04.04.2005 09:15:19

Das Carry-Flag ist eines der vielen Flags eines x86-Rechners und wird grade unter DOS und Co bei vielen Interrupts als Statusflag genutzt.
Was du hier machst ist ja eigentlich Assembler unter Pascal ;)

Antworten