[Freedos-kernel] re: SYS bug?

2004-03-01 Thread Eric Auer

Hi, about the DOS uses 'int' 0x25/0x26 as CALL FAR, so you have to POPF
when you call it through INT thread:

Several compilers TRANSPARENTLY handle this. I think DJGPP is among them.
If you try to use the 25/26 ones through int, it will automatically
use DJGPP. Borland Turbo C has the absread() and abswrite() functions to
do the access - you can use them with the drive  32 MB argument blocks,
so there is NO need to write a new function yourself to absread() big disks
in Turbo C. Other compilers may have other issues.

Eric.

PS: Of course you have to provide the special argument block to absread()
yourself. I only want to make clear that absread() itself can be used directly.



---
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=1356alloc_id=3438op=click
___
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel


Re: [Freedos-kernel] re: SYS bug?

2004-03-01 Thread Arkady V.Belousov
Hi!

1--2004 19:40 [EMAIL PROTECTED] (Eric Auer) wrote to
[EMAIL PROTECTED]:

EA Hi, about the DOS uses 'int' 0x25/0x26 as CALL FAR, so you have to POPF
EA when you call it through INT thread:
EA Several compilers TRANSPARENTLY handle this.

 Of course, they (should) transparently handle this in intr(), but not
with direct INT25. And, I already quote disassembly of Watcom-targeted
absread() code (with direct INT25) and there are no extra POP. B-\

EA I think DJGPP is among them.

 Forget about it. This compiler is absolutely is inappropriate for
(current) SYS.

EA use DJGPP. Borland Turbo C has the absread() and abswrite() functions to
EA do the access -

 Firstly, these functions present only in BC (and TC?). Secondly, I
already quote RBIL, which says, that BC' absread()/abswrite() (which detects
size of partition through INT21/1C) may give incorrect results in MS-DOS
7.x.

EA you can use them with the drive  32 MB argument blocks,

 But current SYS compiled by WC.

EA so there is NO need to write a new function yourself to absread() big disks
EA in Turbo C. Other compilers may have other issues.

EA PS: Of course you have to provide the special argument block to absread()
EA yourself. I only want to make clear that absread() itself can be used
EA directly.

 ?




---
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_id56alloc_id438op=click
___
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel


[Freedos-kernel] re: SYS bug?

2004-03-01 Thread Eric Auer

Hi Arkady!

 EA use DJGPP. Borland Turbo C has the absread() and abswrite() functions to
 EA do the access -
  Firstly, these functions present only in BC (and TC?). Secondly, I
 already quote RBIL, which says, that BC' absread()/abswrite() (which detects
 size of partition through INT21/1C) may give incorrect results in MS-DOS
 7.x.

As far as I know Borland TURBO C does not use int 21.1c for anything in
absread() / abswrite(). You have to find out whether  32 MB access
style is needed YOURSELF.

int readbig(Word drive, Dword which, Byte near * buffer)
{
  struct bigdisk buffer2;

  buffer2.count = 1;
  buffer2.sector = which;
  buffer2.buffer = (Byte far *)buffer;

  return absread(drive, 1, -1, (void *)buffer2);
}

struct bigdisk /* WARNING: Must not be padded for alignment by the compiler */
{
  Dword sector;
  Word  count;
  Byte far *buffer;
};

This is how you would read  32 MB in TURBO C...
Of course there is no FAT32 disk I/O support at all in Turbo C :-).

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=1356alloc_id=3438op=click
___
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel