Hi! Zbigniew found out that with FreeDOS,
you first have to do something else with a
floppy before you can use it via INT 25/26.

This could be for example opening a directory,
int 21.32 (get DPB) or switching to the drive
or changing the directory (CWD, CDS), I think.

Those call media_check() or, in the case of
int 21.32, even do a full sequence of get_dpb,
flush_buffers ("unchecked") and media_check.

With MS DOS, int 25/26 works even if you have
not touched the floppy in any way since boot.

It seems that FreeDOS tries to init drive
status for all drives at boot, but does not
do enough for floppies? (I do not remember
if MS DOS would spin up floppies at boot?)

Either way, in FreeDOS, the issue is:

If you have not done anything to get in
touch with your current floppy since boot,
trying to use int 25/26 as the FIRST thing
to access it will mean that the get_dpb()
call in dskxfer in blockio.c will fail and
int 25/26 will return an error.

With MS DOS 6.22, the interesting observation
of Zbigniew was that ax got set to 0201 but
carry did not get set, so he ignored ax and
indeed MS-DOS correctly accesses the floppy
even if you have not touched it before.

This might mean that our DPB / CDS init code
does not behave as intended or that we might
want int 25 / 26 to check whether a floppy
has been inserted or changed before giving
up after a failed get_dpb() call?

Regards, Eric

PS: There might be an interaction with the
DJ mechanism, too. We have not checked that.



_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to