Debugging a test binary:

push bp / mov bp,sp / push si / push di
mov al,[bp+4] / mov cx,[bp+6] / mov dx,[bp+8] / mov bx,[bp+a]
int 25 / pop bx / jc label1 / xor ax,ax / jmp label2
label1: mov [71b],ax / mov ax,-1 / (jmp without effect, to label2)
label2: pop di / pop si / pop bp / ret

Further evidence is given by Turbo C 2.01 builtin help (in the IDE):

... int absread(int drive, int nsects, int lsect, void *buffer);
No LONG ints anywhere.

Conclusion: Turbo C 2.01 uses a "dumb" implementation of the CLASSIC
"int" 25/26 calls. If you want to access > 32 MB, simply prepare a
"> 32 MB style access packet" and hand it over as "buffer" and
use -1 for nsects to tell DOS about the > 32 MB access style (lsect
is not used in this case and can have any value).

Bad news for UNDELETE that Borland C (not Turbo C) seems to have an
absread() which auto-decides about access style. Using the > 32 MB
style for drives which Borland C detected as > 32 MB with int 21.1c
will BREAK because Borland C is too CLEVER!? Luckily there is #ifdef.
What is it, __TURBOC__ and __BORLANDC__ ??

For now, because I only have Turbo C anyway, I pass on the problem to
Rob and Patric who are working on UNDELETE updates. Guys, please add
the appropriate #ifdefs to allow even Borland C users to compile. Thanks.

Eric.





-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel

Reply via email to