2025-10-12
For int 21h function 5Ah use the MS-DOS v5 compatible mapping of numbers to letters. This uses the letters A to P instead of hexadecimal digits 0 to 9 and A to F.
The recent changes to the lDOS boot loaders was kicked off by a SvarDOS report on loading their kernel off a 360 KiB diskette. Reportedly, using the FreeDOS-based boot sector loader took more than 28s to load the kernel. In the report, an alternative loader was presented which doesn't use the file system but rather loads the kernel from the file system reserved sectors, reducing the time spent to 6s. The speedup is primarily from reading using multi-sector calls, allowing to read up to a full track (S coordinate 1 to amount of CHS-sectors) using a single call to int 13h.
I suggested that the lDOS initial loader could be modified to use an optional multi-sector loader, along with an lDOS boot sector loader modified to load only the first 4 KiB of the initial loader stage. As it took shape, testing indicated a speed up to 8s - not quite as fast as the reserved sectors load but a good competitor. And it is no less generic than the lDOS iniload basis, allowing to boot as an lDOS / RxDOS.3 kernel, a FreeDOS or Enhanced DR-DOS kernel, an MS-DOS v7 kernel, an IBM-DOS or MS-DOS v6 kernel, or a Multiboot v1 or Multiboot v2 kernel.
Eventually I adapted the multi-sector loader so it can be used for any load protocol, if the sector size check indicates at least 512 bytes per sector. This is accomplished by putting a relatively small check into the single-sector load loop after it has loaded at least 2 sectors, fitting into the 64 bytes space that 2 sectors take up with the theoretical minimum sector size of 32 bytes. If the sector size is detected as 512 bytes or more, then this code knows that at least 1536 + 512 + 512 bytes have been loaded, so the multi-sector loaders (both CHS and LBA) are resident at this point.
Some unrelated optimisations were applied, most of them related to freeing enough space for the new features. Further, a bug of expecting ah to be unchanged after an int 10h function 0Eh call was fixed in the boot sector loaders. The FAT12 loader also got an option to load FAT sectors on demand rather than loading the entire FAT, but this is ill-advised at least for 360 KiB diskettes or smaller (as these only have 1 or 2 sectors per FAT to begin with).
Individual changes:
Add ident86 manual to update-doc-wwwecm. (This implies adding that script to the web repo's update hooks, and cloning the web repo into the doc build repo, and setting up the symlinks from pushbx.org/ecm/doc/ to point to the built files.)
The last two commits aren't merged yet as of the time of this writing.