Hi, there is an occasional problem with LBAcache disk detection, maybe
you can help finding out more. It happens on SCSI systems, possibly related
to UMB usage, loading LBAcache to UMB, or having an UMB collide with memory
ranges used for SCSI or network BIOS or memory mapped IO. Symptoms: Drive
detection takes long and no drives are detected. LBAcache will just display
that it is scanning for drives, and then display [done] without showing that
it has found drives before. LBAcache STAT will confirm that no drives are
cached.

This is supposed to be in setup.asm, findnextgeom: ... alldrives: label
somewhere. Used int 13 functions are int 13.4100.55aa.dl (returns AX BX
CX DX) for LBA detection and int 13.08.dl (returns AX BL CX DX ES DI) for
geometry detection. The 40[75] disk count is not checked, and some BIOSes
seem to return wrong "number of drives" values for
int 13.41, but LBAcache only checks the returned BX magic and CX flags, not
the AH/DH/DL information.
RBIL recommends using 40[75] or int 13.15 if int 13.41 or int 13.08 are
unreliable - I am trying to avoid that.
(int 13.15ff.cx=ffff.dl returns AH (or AX!) as 3 and NC flag if harddisk, and
size CXDX...)
The used int 13.08.dl call returns AX BL CX DX ES DI, but ES DI are ignored,
only carry and DL and geometry in CL (CX) DH are used. BL is floppy type, not
interesting for harddisk, DL is drive count (LBAcache assumes that ONE drive
is missing if int 13.08.dl returns a DL of 0 for THAT drive).

When the bug / problem happens, LBAcache drive detection takes quite
long, finds no drive, and it can happen that the scanned drives, even
CD-ROM ones, spin up. It seems that it always solves the problem to load
LBAcache low (not into an UMB). This is strange because LBAcache has no
internal buffers - the SCSI BIOS does never see pointers to LBAcache code
segment except for the disk read/write (where a data structure describing
which sectors should be accessed is created on local LBAcache stack: The
sector contents themselves, however, are not stored in LBAcache memory.
Instead, they are copied between the caller's buffer and XMS directly...).

Would be nice to know what is going on here, so if you know how to use a
debugger and have a SCSI system, please help.

PS: If you load LBAcache to UMB and nothing AT ALL happens, then you had
an UMB area which was 7..10k in size, and the UPX decompression stub found
that it would be impossible to work (-> it did "int 20", exit to DOS, at
once). To avoid such problems, de-UPX the binary first. After initialization,
the smallest possible LBAcache (128 kb :-)) will only take 5.5k of RAM,
because things like the command line parser are dropped from memory for the
TSR instance of the cache. A normal 2 MB cache takes slightly above 7k.

Eric.




-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
Freedos-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to