edrdos icon indicating copy to clipboard operation
edrdos copied to clipboard

INT 21h AX=7300h is not properly implemented in EDR-DOS kernel

Open igully opened this issue 4 months ago • 8 comments

I have found out this code does not work with the EDR-DOS kernel. Tested it working properly in MS-DOS 8 (unofficial), ROM-DOS 7.1 and FreeDOS 1.4

The snippet comes from Eric Auer's source code (public domain):

mov ax,7300h	; get a FAT32 property
mov dl,0	; current drive
mov cl,1	; "dirty-buffers flag"
int 21h
cmp ax,7300h	; AX still unchanged?
jz oldkernel
; ignore the actual results of int 21.7300 (AL, AH)
mov byte [kern32],1	; kernel has FAT32 support

oldkernel:

SvarDOS latest, that uses EDR-DOS kernel, fails on it. The erratic condition can be quickly tested with the attached WHICHFAT.COM program by Eric Auer.

I have found other software that relies on this call to find out if the kernel does support fat 32 or not. So it would be important to have it properly working.

whichfat.zip

igully avatar Aug 21 '25 01:08 igully

Hi! Thanks for pointing this out. Function AX=7300 is not implemented at all, so WHICHFAT seems to interpret this as a FAT16 only kernel.

Tested it working properly in MS-DOS 8 (unofficial), ROM-DOS 7.1 and FreeDOS 1.4

Are you sure it runs on FreeDOS as intended? FreeDOS does not seem implement this specific call either.

So if WHICHFAT returns FAT32 support under FreeDOS, it looks like either the program misinterprets the FreeDOS result, or FreeDOS returns no proper error condition. Whatever it is, WHICHFAT indicating FAT32 support under FreeDOS seems to be accidential (or I did not find where AX=7300 is implemented).

I am rather busy currently with work related stuff, and will not be able to deal with this before the end of the month. Feel free to dig a little deeper in the meantime :)

boeckmann avatar Aug 21 '25 07:08 boeckmann

Hi, thank you for your answer,

I re-tested it against FreeDOS 1.4 boot disk and indeed, it works, reporting FAT32. It is the official 1.4 FreeDOS 1.44 MB boot floppy disk. It seems to me it was some commit added rather lately, between 2023 and 2025 if we follow Eric´s code comments and my finding.

I also tested an OEM version of DR-DOS 7.03 from Dell, and it has this function implemented and reports correctly. So it must have been added sometime during the development phase between DR-DOS/OpenDOS 7.01 and 7.03.

igully avatar Aug 21 '25 16:08 igully

Note that the following program will not report FAT32 kernel on OpenDOS 7.01 nor Enhanced DR-DOS due to the missing int 21h AX=7300h function. However, whenever it gets implemented it will report it.

Tested working on MS-DOS 6.22, MS-DOS 7.10, MS-DOS 8, ROM-DOS 7.1, DR-DOS 7.03, and FreeDOS 1.4. This program is rather small at only 743 bytes

DOSCHECK is Public Domain Software. Binary release only.

Ignacio F. Gully DOSCHECK's author


DOSCHECK - Reports Long File Name (LFN) status and FAT32 DOS kernel support. Version 1.02 (21 August 2025) - Copyright (C) Ignacio F. Gully

Purpose: A Long File Name (LFN) API supports file names up to 255 characters long, which is indeed much more than the default 8.3 that DOS uses.

FAT32 is a file system that overcomes the limits of FAT16 allowing for
volumes up to 2 terabytes with a sector size of 512 bytes. The maximum
FAT32 volume size is 16 TB with a sector size of 4,096 bytes. The maximum     		     
possible size for a file on a FAT32 volume is 4 GB minus 1 byte.	     		     

Syntax: DOSCHECK

Errorlevel (return code): 1 = LFN active. 10 = FAT32 supported by kernel.
11 = Both LFN and FAT32 are active and supported.

Example: DOSCHECK > NUL

DOSCHECK.ZIP

igully avatar Aug 23 '25 18:08 igully

LFN support on one drive does not imply LFN support on all drives. dosemu2 mfs redirector, MSW 95/98/Me, and doslfn may provide LFN support, but if one drive supports LFNs other drives on the same system may be restricted to SFNs.

ecm-pushbx avatar Aug 23 '25 18:08 ecm-pushbx

Also, considering that EDR-DOS is misdetected by this 21.7300 check, trying a different 21.73 subfunction instead or in addition may be smarter.

ecm-pushbx avatar Aug 23 '25 18:08 ecm-pushbx

Are you sure it runs on FreeDOS as intended? FreeDOS does not seem implement this specific call either.

Look at the default branch of this switch: https://github.com/boeckmann/freedos_kernel/blob/a40e3a71c27b3eeefd29ebcd4c34d42f9930ea0c/kernel/inthndlr.c#L413

It sets the DOS error code 0001h, so the check succeeds because it only checks for ax != 7300h.

ecm-pushbx avatar Aug 23 '25 19:08 ecm-pushbx

LFN support on one drive does not imply LFN support on all drives. dosemu2 mfs redirector, MSW 95/98/Me, and doslfn may provide LFN support, but if one drive supports LFNs other drives on the same system may be restricted to SFNs.

Yes, I know, thanks. I am only checking here that LFN is active for the current drive.

igully avatar Aug 23 '25 20:08 igully

Also, considering that EDR-DOS is misdetected by this 21.7300 check, trying a different 21.73 subfunction instead or in addition may be smarter.

Yes, I could certainly do that, but the purpose here was to improve the EDR kernel and have a way to test it, which will make several older programs work properly, like WHICHFAT (posted above).

igully avatar Aug 23 '25 20:08 igully