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

Reply via email to