[comp.sys.ibm.pc] Creating RAM Disks on the fly.

bisanabi@vrdxhq.UUCP (04/07/87)

I am looking for a way to generate a RAM disk from within a program,
and then release it prior to exiting the same program.

Any information on the following would be appreciated :

   1) How can the last drive assigned be found ?  (If A: and B: are
floppies, and C: and D: are the hard drive and an existing RAM disk,
how do I find out that the next available drive is E: ??)

   2) How can I use this info (#1 above) and allocate RAM to create a
RAM disk (E: in this example) for some arbitrary amount of memory ?

   3) How do I get rid of the RAM disk and return the RAM to the
system when I am done using it ?

   4) How do I get the amount of RAM memory available in the system ?


I assume #4 can be found in a tech. ref. manual, but I figured I ask
since I need information regarding #1 thru #3 anyway.

Thanks.
-- 

:-- Paul
:
:UUCP:	...!{decuac, rlgvax, seismo, verdix}!vrdxhq!bisanabi

connery@bnrmtv.UUCP (04/08/87)

> 
> I am looking for a way to generate a RAM disk from within a program,
> and then release it prior to exiting the same program.
> 
> Any information on the following would be appreciated :
> 
>    1) How can the last drive assigned be found ?  (If A: and B: are
> floppies, and C: and D: are the hard drive and an existing RAM disk,
> how do I find out that the next available drive is E: ??)
> 
>    2) How can I use this info (#1 above) and allocate RAM to create a
> RAM disk (E: in this example) for some arbitrary amount of memory ?
> 
>    3) How do I get rid of the RAM disk and return the RAM to the
> system when I am done using it ?
> 
>    4) How do I get the amount of RAM memory available in the system ?
> 
I doubt this is what you really want to do.  It would be better in most
instances to do the paging/swapping yourself in high memory.  However,
assuming this is really what you want to do:

1) You can find the value of LASTDRIVE, the last legal drive number by
   calling INT 21H function 0EH, set default disk drive.  If you set AH
   to the current drive so that it effectively does nothing, it returns
   AL=LASTDRIVE.  ie:

       mov ah,19h
       int 21h                   ; gets al=current drive
       mov dl,al
       mov ah,0Eh
       int 21h                   ; sets current drive from dl

   returns AL=LASTDRIVE.  It would be E: or 5 if pre-DOS 3.0 or if the
   user has no LASTDRIVE statement in CONFIG.SYS.  Skipping over A: and
   B: which are always used, you can determine whether a given drive
   is in use (real or redirected) by calling INT 21H function 36H with
   DL=the drive number (starting at 1 this time).  If the value returned
   in AX is 0xFFFF then the drive is not in use.  This process can take
   a little bit of time if you have a hard disk, and generally you want
   to start AFTER any hard disks, which can be obtained through the
   BIOS equipment check, but this should be enough to get you going.

2) Buy a good book on TSRs.  This is much too complex to explain here.
   Basically you are going to hook the DOS disk stuff and handle it in
   memory.  There is source for VDISK.ASM on the second DOS disk which
   should give you a start, but it's a device driver which won't do you
   much good.  If you can find source for one of the freeware TSR VDISKs
   that would probably get you pretty close.

3) See 2)

4) This is easy.  Use INT 21H function 62H to get the PSP address.  Its
   returned in BX.  This is the paragraph where this program loaded, ie.
   the start of available memory.  At offset 2 in the PSP is a word
   containing the top of memory segment address.  Subtract the two
   to get the amount of RAM (remember that these are in paragraphs).

...Glenn
-- 

Glenn Connery, Bell Northern Research, Mountain View, CA
{hplabs,amdahl,3comvax}!bnrmtv!connery

reintom@rocky2.UUCP (04/09/87)

This is not a programming example.  It does the job of creating a RAM
disk on the fly.  You need to include a device driver in the
CONFIG.SYS file whic takes up about 1K.  I have another driver that
does the very same thing, written by another person.  I have no big
preference of one over the other.  (I wrote neither.)  I think the
other can support as many disks as you want and this one will give you
only one.

You don't have to cut below.  Uudecode knows enough to do so.

begin 664 ramdisk.arc
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
)&AH:&AH:&AH:
`
end
-- 
Tom Reingold;  The Rockefeller University; 1230 York Av; NY 10021
PHONE: (212) 570-7709 [office]; (212) 304-2504 [home]
ARPANET: reintom@rockefeller.arpa BITNET: REINTOM@ROCKVAX
UUCP: {seismo|ihnp4|yale|harvard|philabs|phri}!cmcl2!rna!rocky2!reintom

reintom@rocky2.UUCP (04/09/87)

In article <3347@vrdxhq.UUCP>, bisanabi@vrdxhq.UUCP (Paul Paloski) writes:
> 
> I am looking for a way to generate a RAM disk from within a program,
> and then release it prior to exiting the same program.
> 
> [...]

What the hell.  Here is number two.  It is a utility that will create
RAM disks on the fly.


begin 664 ramdisk2.arc
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
K"-Q0AS:(X9$)`0$*R%"&,:2A#45,@1_?(,`R_+$.9T"#'M&8APM!`AX:`),#
`
end
-- 
Tom Reingold;  The Rockefeller University; 1230 York Av; NY 10021
PHONE: (212) 570-7709 [office]; (212) 304-2504 [home]
ARPANET: reintom@rockefeller.arpa BITNET: REINTOM@ROCKVAX
UUCP: {seismo|ihnp4|yale|harvard|philabs|phri}!cmcl2!rna!rocky2!reintom