Hi Bernd,

I can confirm, I also get AH=38h in dosemu when I try to access a
nonexistent drive a: e.g. by calling ls a: with DOG. Same thing happens
with dir a: using FreeCom. Both of these report a similar error:

DOG reports:
Read error drive A: DOS area (Abort/Fail/Ignore/Retry)?

FreeCom reports:
Error reading from drive A: DOS area: sector not found
(A)bort, (I)gnore, (R)etry, (F)ail?

Both of these can only appear when AH=38h

https://fd.lod.bz/rbil/interrup/dos_kernel/24.html#table-02544
shows what the bit values correspond to.

So I agree, this seems to be a kernel error 🤔 especially since other
kernels behaves differently.

--Wolf


On Thu, May 29, 2025, 13:32 Bernd Böckmann via Freedos-devel <
freedos-devel@lists.sourceforge.net> wrote:

> Hi Wolf,
>
> > Am 28.05.2025 um 22:32 schrieb Wolf Bergenheim <wolf+...@bergenheim.net
> >:
> >
> > Are you running in a VM or physical machine? What dos DR-DOS return?
>
> It is running on an emulated Pentium system via 86box, on FreeDOS, MS-DOS
> and SvarDOS (EDR-DOS kernel).
>
> > Soo now I wonder what is the full value of register AX? I'd expect the
> kernel to set values to indicate a drive not ready error. So for some
> reason bit 7 of AH is set? So now I wonder why not?
>
> The test program may be downloaded from
> https://nextcloud.iww.rwth-aachen.de/index.php/s/2zzo8LrxKsA35bD
>
> For laziness I wrote it in Turbo Pascal.
>
> In the following there is the critical error sequence of the different
> kernels. The test program basically tries to open a file on a non-existing
> diskette, and then tries to write some bytes into it. The program aborts as
> soon as a DOS function returns an error.
>
> On the critical error return = 0 (IGNORE), FreeDOS returns a file handle.
> It returns 5 bytes written despite it did not write anything. Therefore
> previously EDIT did not detect an error. The system eventually hangs.
>
> MS-DOS and EDR-DOS kernels report errors via the INT21 calls despite the
> error "being ignored".
>
> The AX given to the critical error handler explains the different
> behavior. On FreeDOS, bit 5 of AH ist set, so it allows the error to be
> ignored. On MS-DOS and EDR-DOS this bit is cleared, and IGNORE is treated
> as a FAIL.
>
> So I consider this to be an incompatibility, and it should therefore be
> classified as a kernel bug.
>
>
> FreeDOS critical error return = 0 (IGNORE):
> creating file (INT21.3C)
> critical error AX=3800H
> critical error AX=3800H
> critical error AX=3900H
> handle: 5
> writing to file (INT21.40)
> critical error AX=3800H
> critical error AX=3800H
> bytes written: 5
> -- system hangs --
>
> FreeDOS critical error retorn = 3 (FAIL):
> creating file (INT21.3C)
> critical error AX=3800H
> IO Error: 3
>
>
> MS-DOS 3.31 critical error return = 0 (IGNORE):
> creating file (INT21.3C)
> critical error AX=1A00H
> IO Error: 3
>
> MS-DOS 3.31 critical error retorn = 3 (FAIL):
> creating file (INT21.3C)
> critical error AX=1A00H
> IO Error: 3
>
>
> EDR-DOS critical error return = 0 (IGNORE):
> creating file (INT21.3C)
> critical error AX=1800H
> IO Error: 83
>
> EDR-DOS critical error retorn = 3 (FAIL):
> creating file (INT21.3C)
> critical error AX=1800H
> IO Error: 83
>
>
>
> _______________________________________________
> Freedos-devel mailing list
> Freedos-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/freedos-devel
>
> // BR
var regards = {nick:[image: ] , name: "Wolf", kanji: "狼"};
_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to