2023-08-20
The main developments this work occurred on the Enhanced DR-DOS codebase, which I collected into a repo before patching it. Some of the patches were contributed by a user of the BTTR forum.
The seekext TSR gained support for passing the file handle information service on int 21h function 71A6h to the redirector. This uses a dosemu2 extension service on int 2Fh function 11A6h, if available. This is particularly important for the 2011 revision of EDR-DOS as that will crash when given a redirector file handle. (The crash sometimes was somewhat benign, but that was purely by chance.)
Running the original FreeDOS kernel (as opposed to fdpp) on dosemu2 it seems that seekext is actually not needed for passing functions 7142h or 71A6h to dosemu2's MFS redirector, as it will detect the error returned by the DOS kernel and then handle the service if an MFS file handle was specified. (It is an open question what happens if doslfn is loaded within dosemu2. Perhaps seekext still has a use for the function 71h subfunctions then.)
(Running seekext is still useful for its Short hook, which handles function 42h (old-style) seeking in terms of new-style seeking.)
Minor version numbers below 10 are padded to two digits now.
The mak script now allows to override the dosemu2 executable to use.
The older, 2019 revision of dosemu2 that is used on our server by default has a bug in returning an opened FCB handle from the MFS redirector to DOS. The Zero Flag is incorrectly set when the redirector open function calls into DOS's int 2Fh function 120Ch. This causes dosemu2 to return an error to the DOS.
The d2fcbfix TSR fixes the error by patching the helper used by dosemu. Instead of calling the function 120Ch then returning with an iret
, the patched helper will force the flags on the stack to NC, NZ before returning. This appears to fix the bug.
Side effects are unlikely, as the function 120Ch helper is only called when the open has succeeded, so we never want to set the flags differently.
In the dosemu2 repo, this bug has been fixed long since. In fact, it appears that the bug was fixed soon after the revision that we're using on the server. However, I preferred to prepare this fix rather than try to upgrade the old dosemu2 revision on the server.
The automatic build script now includes WarpLink and EDR-DOS.
The build script now hardlinks the created zip files into the /ecm/download/old/
subdirectories at the time of the build. This replaces the prior choice of moving the files there once a subsequent build runs and wants to create its zip file anew. To switch to the new style, a one-time script hardlinked all current builds into the old subdirectories once.
Starting one week ago, I collected all prior releases of the DR-DOS/OpenDOS Enhancement project (not including obsolete WIP patches) into a repo. I updated the build scripts to use only the tools that shipped with the OpenDOS MRS release (which unfortunately lack sources) or open source tools. (JWasm and OpenWatcom are considered open source by OSI but not free software by the FSF. (This may be about to change if the relicensing efforts succeed.))
DR-DOS became free to distribute, modify, and use more than one year ago, with the new license agreement by DRDOS, Inc. on 2022-07-07 which refers to "CP/M and its derivatives". While some have argued that DR-DOS is not a derivative of CP/M, I do think it is. During the last week I happened to notice that EDR-DOS carries copyright statements that reach back to the year 1976. But of course, in 1976 there was neither 86-DOS nor any of its compatible systems yet. So I take this as an additional hint that DR-DOS is considered a derivative of CP/M.
Apart from updating the build scripts to run on an entirely redistributable toolchain, I also changed the sources some. Most of these changes are bugfixes. Some of them were contributed on the BTTR forum, DOS Ain't Dead. Here's an overview of all the bugfixes:
es
*
(in addition to the pattern *.*
which also matches all entries)Some extensions also were added, including:
int3
instruction with NC and expecting the flags to change to CY to indicate debugger presence. When this occurs, interrupts 0, 1, and 3 are not hooked by the DOS.