Disk Express
Disk Express (stylized as Disk eXPress (v2.x); short name: DSKEXP (v1.x) or DXP (v2.x)) is a floppy disk imaging utility for DOS and OS/2 by Albert J. Shan. It was released mainly as shareware. A disk image can be saved either as a data file (supported by v1.96+), or as an executable that when run writes its contents back to diskette (supported by all versions).
Contents |
Identification
If the file is not executable, it begins with a 512-byte header. The first two bytes will be 'AS' and the third will be a version number: 1-2, but presumably always 2 for non-executable files.
If the file is executable, it starts with an MS-DOS EXE header. Bytes 2-5 of the header give the length of the executable portion, as normal. The disk image header starting with 'AS' is found four bytes after the executable portion.
Executable files use the .EXE extension.
File structure and format details
Executable loader
Depending on the version, and the options selected when the disk was imaged, the executable loader (if present) will be:
- MS-DOS EXE format, for v1.01-1.96 (default format), or v2.10-2.34 with "/DOS" option
- OS/2 New Executable format, for v1.01-1.96 with "/OS2" option
- Hybrid of MS-DOS and OS/2 formats, for v2.00-2.34 (default format)
The MS-DOS EXE loader is compressed with LZEXE for v1.01-1.02, or DIET (maybe with special processing) for v1.96+. This is true even for the MS-DOS part of hybrid files. The OS/2 loader never uses executable compression.
The loader is followed by a 4-byte CRC of the loader itself (including both DOS and OS/2 sections on a hybrid loader) and then the disk image data.
CRC
Disk Express implements a variant of CRC-32/JAMCRC. Only the initialization value is different.
- On ordinary versions, the initialization value is
0x59d. In some contexts, its bit-reversed (reflected) value0xb9a00000might appear or need to be used instead. The CRC of ASCII "123456789" would be0x5ec78685. - Special versions licensed for IBM use the initialization value
0x31e, the reflection of which is0x78c00000. The CRC of ASCII "123456789" would be0xc770b388.
Disk image header
The disk image has a 512-byte header:
| Offset | Size | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x000 | 2 bytes | Magic number, AS
| ||||||||||||||||||
| 0x002 | 1 byte | [Major version, minor version] of Disk Express required to write this file. Usually [1,1] in files generated by v1.01-1.02. [1,4] also exists, at least in some IBM-licensed files. Usually [2,0] in files made by v1.96+, or [2,30] if the 'encrypted' or 'bad sectors' flags are set. | ||||||||||||||||||
| 0x003 | 1 byte | |||||||||||||||||||
| 0x004 | 1 byte | Release of Disk Express that created this file (single ASCII character) | ||||||||||||||||||
| 0x005 | 1 byte | Disk capacity:
| ||||||||||||||||||
| 0x006 | 4 bytes | CRC of disk data. For compressed v1.0x files, the CRC is of the compressed data, excluding the 'length' fields. For compressed v1.96+ files, the CRC is calculated before compression. | ||||||||||||||||||
| 0x00A | 1 byte | Compression type:
| ||||||||||||||||||
| 0x00B | 1 byte | Last cylinder imaged | ||||||||||||||||||
| 0x00C | 1 byte | Last head imaged | ||||||||||||||||||
| 0x00D | 1 byte | Always 0 | ||||||||||||||||||
| 0x00E | 1 byte | Bitwise flags:
| ||||||||||||||||||
| 0x00F | 1 byte | Always 0 | ||||||||||||||||||
| 0x010 | 4 bytes | Passphrase hash (if encrypted) | ||||||||||||||||||
| 0x014 | 284 bytes | Always 0 | ||||||||||||||||||
| 0x130 | 4 bytes | CRC of file header | ||||||||||||||||||
| 0x134 | 200 bytes | File description: 5 lines each of 40 characters, CP437 character set | ||||||||||||||||||
| 0x1FC | 4 bytes | CRC of description |
Sector data
The imaged sectors follow the header with no further header or trailer information. The default behaviour of Disk Express is to record up to the last allocated block on the disk, so the amount of data stored may be less than the media type in the header block.
If the file is compressed, then each track is compressed separately. Each track in this case is preceded by a little-endian word, giving the length of the compressed data. There are special cases if the length is 1 (in which case all bytes in the track are the same) or if it is the same as the uncompressed length (in which case the track is not compressed).
Software
- Disk Express v1.01
- Disk Express v1.02
- Disk Express v1.96 (beta)
- Disk eXPress v2.00
- Disk eXPress v2.03
- Disk eXPress v2.10
- Disk eXPress v2.10a
- Disk eXPress v2.20
- Disk eXPress v2.30
- Disk eXPress v2.31
- Disk eXPress v2.32
- Disk eXPress v2.33
- Disk eXPress v2.34
Sample files
Self-extracting images created by regular shareware and licensed versions
- https://dl.dell.com/chipset/Kniea001.exe → DD0377p1.EXE, DD0377p2.EXE
- https://ftpmirror.infania.net/sites/ct_treiber_service/treiber/toshiba/dos_driv/tcm30.exe → TCM3DISK.EXE - Encrypted image
Self-extracting images created by special versions licensed for IBM
- http://cd.textfiles.com/pier/pier03/035/vp162fix.zip → VP162FIX.EXE
- http://phoenix.bnbbbs.net/files/os2swbbs/ndrivers/164adap2.exe
Self-extracting images
Standalone disk images
- 2015.02.old-dos.ru → 2015.02.maxxx.tar → maxxx/DOS/System/DRdos/Drdos50/4dxp/DRD50-*.DXP - Uncompressed, version 2.x
- dexvert samples — archive/diskExpress