Personal tools
msdos6.0-compression-calls.txt
--------d-2F4A11BX0000-----------------------
INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
AX = 4A11h
BX = 0000h
Return: AX = 0000h (successful)
BX = 444Dh ("DM")
CL = first drive letter used by DBLSPACE (0=A:)
CH = number of drive letters used by DBLSPACE
DX = internal DBLSPACE.BIN version number (bits 14-0)
bit 15 set if DBLSPACE.BIN has not yet been relocated to final
position in memory (i.e. DBLSPACE.SYS /MOVE)
Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
disk-compression software bundled with MS-DOS 6.0
SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
SeeAlso: INT 21/AX=4404h"DBLSPACE"
--------d-2F4A11BX0001-----------------------
INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
AX = 4A11h
BX = 0001h
DL = drive number (0=A:)
Return: AX = status (see also below)
0000h successful
BL = host drive (bit 7 set if specified drive is compressed)
BH = DoubleSpace sequence number
other error code (0101h) (see below)
Note: the compressed volume file for the specified compressed drive is
host:\DBLSPACE.sequence
SeeAlso: AX=4A11h/BX=0000h
Values for status:
0000h successful
0100h bad function
0101h invalid drive
0102h not a compressed drive
0103h drive already swapped
0104h drive not swapped
--------d-2F4A11BX0002-----------------------
INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
AX = 4A11h
BX = 0002h
DL = drive number (0=A:) of compressed drive to swap with its host
Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
Note: this function is intended for use by DBLSPACE.EXE only
SeeAlso: AX=4A11h/BX=0000h
--------d-2F4A11BX0003-----------------------
INT 2F U - DBLSPACE.BIN - GET DEVICE DRIVER ENTRY POINTS
AX = 4A11h
BX = 0003h
CL = drive number (0=A:) of compressed drive
Return: CL = FFh on error (not compressed drive)
= other host drive???
ES:SI -> device driver's strategy routine
ES:DI -> device driver's interrupt routine
Note: the official documentation states that this function is reserved for
use by SMARTDRV; this function and AX=4A11h/BX=0004h allow SMARTDRV
to apply the same device driver wrapper to DoubleSpaced drives that
it applies to regular block devices
SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
--------d-2F4A11BX0004-----------------------
INT 2F U - DBLSPACE.BIN - SET DEVICE DRIVER ENTRY POINTS
AX = 4A11h
BX = 0004h
CL = drive number (0=A:) of compressed drive
ES:SI -> device driver strategy routine to call for drive
ES:DI -> device driver interrupt routine to call for drive
(DX???)
Return: CL = FFh on error
Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
disk-compression software bundled with MS-DOS 6.0
Note: the official documentation states that this function is reserved for
use by SMARTDRV; this function and AX=4A11h/BX=0003h allow SMARTDRV
to apply the same device driver wrapper to DoubleSpaced drives that
it applies to regular block devices
SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
--------d-2F4A11BX0005-----------------------
INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
AX = 4A11h
BX = 0005h
DL = drive number (0=A:) to assign to new drive
ES:SI -> activation record (see below)
Return: status returned in activation record (see below)
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
Format of activation record:
Offset Size Description
00h 2 BYTEs signature "MD" (4Dh 44h)
02h BYTE 4Dh ('M') mount command
03h BYTE error code (set to FFh before calling)
01h drive letter not available for DoubleSpace
02h drive letter already in use
03h no more disk units (increase MaxRemovableDrives in .INI)
09h CVF too fragmented
04h BYTE host drive number (0=A:)
05h ??? DISK_UNIT structure (not documented)
--------d-2F4A11BX0006-----------------------
INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
AX = 4A11h
BX = 0006h
DL = drive number (0=A:) to unmount
Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
--------d-2F4A11BX0007-----------------------
INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
AX = 4A11h
BX = 0007h
DL = compressed drive number (0=A:)
Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
0000h successful
DS:SI -> free space record (see below)
Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
disk-compression software bundled with MS-DOS 6.0
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
Format of free space record:
Offset Size Description
00h DWORD total number of sectors in drive's sector heap
04h DWORD number of free sectors in drive's sector heap
--------d-2F4A11BX0008-----------------------
INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
AX = 4A11h
BX = 0008h
DL = compressed drive number (0=A:)
Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
0000h successful
BX = maximum entries in File Fragment heap
CX = available entries in File Fragment heap
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
--------d-2F4A11BX0009-----------------------
INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
AX = 4A11h
BX = 0009h
DL = compressed drive number (0=A:)
Return: AX = status (see also AX=4A11h/BX=0001h)
0000h successful
CL = number of DISK_UNIT structures allocated
(see AX=4A11h/BX=0005h)
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
--------d-2F4A11BXFFFE-----------------------
INT 2F U - DBLSPACE.BIN - RELOCATE
AX = 4A11h
BX = FFFEh
ES = segment to which to relocate DBLSPACE.BIN
Return: ???
Notes: called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
in memory
this function also unhooks and discards the code providing this
function and AX=4A11h/BX=FFFFh
SeeAlso: AX=4A11h/BX=FFFFh
--------d-2F4A11BXFFFF-----------------------
INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
AX = 4A11h
BX = FFFFh
Return: AX = number of paragraphs needed by DBLSPACE.BIN
Note: used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
position in memory
SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
--------d-2F4A13-----------------------------
INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
AX = 4A13h
Return: AX = 134Ah if supported
ES:BX -> entry point record (see below)
SeeAlso: AX=4A11h/BX=0000h
Format of entry point record:
Offset Size Description
00h DWORD pointer to FAR function for ???
04h 5 BYTEs FAR JUMP instruction to ???
--------d-2F4A12CX4D52-----------------------
INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
AX = 4A12h
CX = 4D52h ("MR")
DX = 4349h ("CI")
Return: CX = 4943h ("IC") if installed
DX = 524Dh ("RM") if installed
ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
Note: this call is functionally identical to INT 1A/AX=B001h, but should be
called first, as the latter call is used for the first, ROM-based
MRCI server, while this call is used for RAM-based servers which
may be partially or entirely replacing a prior server
SeeAlso: INT 1A/AX=B001h
--------d-1AB001CX4D52-----------------------
INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
AX = B001h
CX = 4D52h ("MR")
DX = 4349h ("CI")
Return: CX = 4943h ("IC") if installed
DX = 524Dh ("RM") if installed
ES:DI -> MRCINFO structure (see below)
Note: this call is functionally identical to INT 2F/AX=4A12h, which should
be called first, as this call is used for the first, ROM-based
MRCI server, while the other call is used for RAM-based servers
which may be partially or entirely replacing a prior server
SeeAlso: INT 2F/AX=4A12h
Format of MRCINFO structure:
Offset Size Description
00h 4 BYTEs vendor signature
"MSFT" Microsoft
04h WORD server version (high=major)
06h WORD MRCI specification version
08h DWORD address of server entry point
0Ch WORD bit flags: server capabilities (see below)
0Eh WORD bit flags: hardware assisted capabilities (see below)
10h WORD maximum block size supported by server (at least 8192 bytes)
Bitfields for capabilities:
bit 0 standard compress
bit 1 standard decompress
bit 2 update compress
bit 3 MaxCompress
bit 4 reserved
bit 5 incremental decompress
bits 6-14 reserved
bit 15 this structure is in ROM and can't be modified
(server capabilities only)
Call MRCI entry point with:
DS:SI -> MRCREQUEST structure (see below)
CX = type of client (0000h application, 0001h file system)
AX = operation
0001h perform standard compression
0002h perform standard decompression
0004h perform update compression
0008h perform MaxCompress
0020h perform incremental decompression
AX = FFFFh clear flags
BX = bitmask of flags to clear (set bits in BX are flags to clear)
Return: AX = status
0000h successful
0001h invalid function
0002h server busy, try again
0003h destination buffer too small
0004h incompressible data
0005h bad compressed data format
Note: MRCI driver may chain to a previous driver
Format of MRCREQUEST structure:
Offset Size Description
00h DWORD pointer to source buffer
04h WORD size of source buffer (0000h = 64K)
06h WORD (UpdateCompress only)
(call) offset in source buffer of beginning of changed data
(return) offset in destination buffer of beginning of changed
compressed data
08h DWORD pointer to destination buffer
must contain original compressed data for UpdateCompress
0Ch WORD size of destination buffer (0000h = 64K)
any compression: size of buffer for compressed data
standard decompression: number of bytes to be decompressed
incremental decompression: number of byte to decompress now
(return) actual size of resulting data
0Eh WORD client compressed data storage allocation size
10h DWORD incremental decompression state data
set to 00000000h before first incremental decompression call
Notes: the source and destination buffers may not overlap
the source and destination buffer sizes should normally be the same
application should not update the contents of the MRCREQUEST structure
between incremental decompression calls
Created before October 2004
