Hello everyone, the Int 0x21, AX=0x7305, CX=0xFFFF handler (FAT32 - EXTENDED ABSOLUTE DISK READ/WRITE) found in "inthndlr.c", 355 ff., is implemented in a very strict way, I mean, it corresponds to http://www.ctyme.com/intr/rb-3229.htm (is there any other (re)source?), but some DOS applications I recently used do not set SI to 0x00 on read operations, instead they set this value (incorrectly?) to 0x6000 (as write operations are set correctly to 0x6001 - see bits 14-13). Maybe MS-DOS is just a bit more fault tolerant (or buggy), I don't know. I had to patch some applications to get them work under FreeDOS 1.0. As I checked out the latest source of the kernel 1 or 2 days ago, I found the following code in "inthndlr.c":
if (r->CX != 0xffff || ((r->SI & 1) == 0 && r->SI != 0) || (r->SI & ~0x6001)) { return DE_INVLDPARM; } I suggest to extend this if statement for compatibility reasons to handle the problem described above... I think an "( ( ... ) & (r->SI != 0x6000) ) should handle this (I am not a c/c++ programmer). Best regards, Christian ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel