with the changes below the kernel no longer splits disk transfers on disks that report via int13/48 'DMA boundary errors are handled transparently'
VirtualBox does not support DMA boundary crossing VMWarePlayer does, and COPY c:\KERNEL.SYS c:\BLA results in ------------------------ Start of Report ---------------------- 1342: read 1 sectors at 20569 to 0645:0008 1342: read 1 sectors at 20570 to 0603:0000 1342: read 1 sectors at 20571 to 0666:000C 1342: read 1 sectors at 20572 to 057E:0000 2160: Canon c:kernel.sys ==>> C:\KERNEL.SYS 2160: Canon c:bla ==>> C:\BLA 2160: Canon c:bla ==>> C:\BLA 2160: Canon c:kernel.sys ==>> C:\KERNEL.SYS 1342: read 1 sectors at 95 to 0688:0000 1342: read 1 sectors at 64 to 05C0:0008 1343: write 1 sectors at 64 from 05C0:0008 1343: write 1 sectors at 95 from 0688:0000 1343: write 1 sectors at 10332 from 0688:0000 1342: read 90 sectors at 25433 to 2D75:0000 1342: read 1 sectors at 25523 to 055C:000C 1343: write 90 sectors at 25753 from 2D75:0000 1342: read 1 sectors at 25843 to 059F:0004 1343: write 1 sectors at 95 from 0688:0000 1343: write 1 sectors at 10332 from 0688:0000 1343: write 1 sectors at 25843 from 059F:0004 1343: write 1 sectors at 64 from 05C0:0008 1343: write 1 sectors at 20572 from 057E:0000 ------------------------- End of Report ----------------------- changes: ************************************************************************************* device.h, 260 #define DF_LBA 0x400 #define DF_WRTVERIFY 0x800 +#define DF_DMA_TRANSPARENT 0x1000 /* DMA boundary errors are handled transparently */ /* typedef struct ddtstruct ddt;*/ initdisk.c, 720 if (lba_bios_parameters.information & 8) driveParam->descflags |= DF_WRTVERIFY; + if (lba_bios_parameters.information & 1) + { + driveParam->descflags |= DF_DMA_TRANSPARENT; /* DMA boundary errors are handled transparently */ + } StandardBios: /* old way to get parameters */ dsk.c, 1035 for (; totaltodo != 0;) { + count = totaltodo; + if ((pddt->ddt_descflags & DF_DMA_TRANSPARENT) == 0) + { + /* avoid overflowing 64K DMA boundary + for drives that don't handle this transparently */ + count = DMA_max_transfer(buffer, totaltodo); + } ************************************************************************************* Tom _______________________________________________ Freedos-devel mailing list Freedos-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-devel