2025-02-23
Add section on lDOS kernel.
Allow to start a kernel command line with a semicolon after the second file specification. Doesn't always work: boot protocol ldos . .; append …
and boot protocol ldos . //; append …
are fine. boot protocol ldos . test\; append …
doesn't work as intended.
List the errfix Extension for lDebug hooks, the no-inherit file open change, as well as the kernel command line change in the news-r10 section of the manual.
--includepushpopmac
to include the push and pop trace listing source comments on includes even when the name ends in ".mac"
Support the sub keyword as the second parameter to lenter, to make the code use a sub sp
instruction rather than lea sp
. This has no advantage, and clobbers the flags where lea does not, but it is added to support identicalising of applications.
Detect an xchg instruction with the same register twice as operands as a longer nop. (In 64-bit mode an xchg with a 32-bit register is not a nop, but we don't support that at all.) This helps to identicalise to TASM, which uses xchg bx, bx
for longer alignment.
Small test of NASM and ia16-elf-gcc interoperability with returning far pointers. Done as an exercise to prepare for SRDISK port.
ecm-loadhigh PR to mostly fix LH on lDOS:
Set CY before calling 21.71 or 21.73 extended DOS functions, to ensure we can detect an error correctly on the expected error return (CF unchanged, AL = 00h).
In cswapc.c the code used an optimisation to pass the Extended Memory Move block as parameters to a varargs function in the correct order to pass along to the XMS function. Undo this because it didn't work as intended in ia16-elf-gcc.
Fix the MS-DOS v5 compatible HMA allocation functions to actually be compatible.
Running an 21.7303 call on dosemu2 running lDOS running SRDISK caused dosemu2 to return an incorrect error code (CF unchanged, AX = unchanged 7303h) rather than what was expected (CF unchanged, AL = 00h).
Compiling an older build of dosemu2 I noticed that make generated a warning message reading "clock skew detected". It was caused by a date time stamp that didn't include a year. It seems to cause make to rebuild files that didn't need updating.
The ReSizeable RAMDisk, a project I found on the FreeDOS servers. License is GNU GPL any version. (The file headers do not specify a version of the GPL, which according to the GNU GPL v2 content means any version can be chosen.)
It appears that v2.09 is the only free software release of SRDISK. In the 1990s there were prior releases but the sources to those are likely lost.
The first task was to port the assembly language drivers to NASM. To facilitate this I expanded the macros used to split the code into separate files, so srdisk.inc now has all the code using conditional assembling. This helps both with porting to NASM and later when reading the NASM (trace) listing file.
I used fixmem.pl to do most of the porting work. After that the edits included macros, equates, defines, and converting the TASM stack frame directives to use the lframe macro collection instead. The final identicalising of srdxms.sys involved removing a CS: override on a variable and adding push cs
to call a far function from a near caller. (The override was wrongly inserted by fixmem.pl after stripping an explicit DS: override.)
The stack segment added to srdisk.mac silences the warning generated by WarpLink. WarpLink's /C option (Create a .COM file) doesn't work because the driver files are assembled at origin zero.
The new keyword "sub" to lenter is used to identicalise srdxms.sys further.
STACKSIZE is added as an equate set to zero for the "small" device driver builds. The MEMORY_STR is changed from an equate to a define in all driver files. One case of a dotted label not caught by fixmem.pl as well as an istruc use within the definition of another structure using db 0
to fill needed to be fixed. Further, a port equate needed copying into another conditional assembly branch. After that all variants of the main driver did assemble and were identicalised.
The xmssize.asm source text's stack segment wasn't recognised by TLINK because of the CODE class name rather than STACK. I fixed this in the original file to match the identicalised port to it.
The remainder of the work was on the Makefile as well as major changes to port the srdisk.exe C sources to build with NASM and ia16-elf-gcc. I did come across some bugs during this work. A list of the bugs and other incompatibilities:
add sp
to discard parameters from the stack.%Fs
isn't supported by ia16 gcc / libi86_seg
pointer type seems to not be supported eiher. This includes combining a _seg pointer and a near
pointer simply by adding two variables (used heavily in env.c).const
, where it should be const int
.