On at 2018-11-05 15:51 +0100, Tom Ehlert wrote: >> the FreeDOS kernel is seriously slower then MSDOS when doing >> larger copy/xcopy operations. > >> the cause: the disk I/O code avoids transfers that cross a 64K >> boundary, and splits these transfers into 3 (smaller) transfers. > >> this was needed for floppy controllers in the 1980's, but is certainly >> not necessary for harddisks after the IBM XT. > > >> just skip > > >> /* avoid overflowing 64K DMA boundary */ >> count = DMA_max_transfer(buffer, totaltodo); > >> for harddisks, and everything should be *much* faster (at least on >> rotating media in a non-emulated machine) > > investigating in this a bit more, the 64K boundary was/is a problem > with ISA DMA, used only for floppies (and sometimes serial/parallel > ports), but is no problem for UDMA. > > skipping this test for drives with 0x80 set should be save, and result > in a significant speedup of large disk transfers.
Another possibility is to depend on the error code (ah = 09h, RBIL lists this as "data boundary error (attempted DMA across 64K boundary or >80h sectors)") and retry the calls to avoid 64 KiB boundaries only then. I've had success with that when loading from an actual diskette drive; the error is properly reported and handled this way. Regards, ecm _______________________________________________ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel