Disk Express

From Just Solve the File Format Problem
(Difference between revisions)
Jump to: navigation, search
(Software)
 
(15 intermediate revisions by 4 users not shown)
Line 5: Line 5:
 
|released=1991
 
|released=1991
 
}}
 
}}
 
+
'''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).
'''Disk Express''' (stylized as '''Disk eXPress''') is a shareware utility for PCDOS and OS/2 by Albert J. Shan, allowing floppy disks to be imaged. A disk image could be saved either as a data file, or as an executable that when run wrote its contents back to diskette.  
+
  
 
== Identification ==
 
== 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, 0-2.
+
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.
 
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.  
+
Executable files use the .EXE extension.
  
== Structure ==
+
== File structure and format details ==
  
 
=== Executable loader ===
 
=== Executable loader ===
  
Depending on the options selected when the disk was imaged, the executable loader (if present) will either be in [[MS-DOS EXE]] or [[New Executable]] format (for OS/2). It is followed by a 4-byte checksum and then the disk image data.  
+
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 (compression)|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#CRC-32/JAMCRC|CRC-32/JAMCRC]]. Only the initialization value is different.
 +
* On ordinary versions, the initialization value is <code>0x59d</code>. In some contexts, its bit-reversed (reflected) value <code>0xb9a00000</code> might appear or need to be used instead. The CRC of ASCII "<code>123456789</code>" would be <code>0x5ec78685</code>.
 +
* Special versions licensed for IBM use the initialization value <code>0x31e</code>, the reflection of which is <code>0x78c00000</code>. The CRC of ASCII "<code>123456789</code>" would be <code>0xc770b388</code>.
  
 
=== Disk image header ===
 
=== Disk image header ===
Line 33: Line 44:
 
|0x000 || 2 bytes || Magic number, <code>AS</code>
 
|0x000 || 2 bytes || Magic number, <code>AS</code>
 
|-
 
|-
|0x002 || 1 byte  || Major version of Disk Express that created this file
+
|0x002 || 1 byte  ||rowspan="2"| [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 || Minor version required to write this file (30 if 'encrypted' or 'bad sectors' flags are set, otherwise 0)
+
|0x003 || 1 byte
 
|-
 
|-
 
|0x004 || 1 byte  || Release of Disk Express that created this file (single ASCII character)
 
|0x004 || 1 byte  || Release of Disk Express that created this file (single ASCII character)
Line 61: Line 72:
 
|}
 
|}
 
|-
 
|-
|0x006 || 4 bytes || [[CRC-32]] of disk data
+
|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: 0 for uncompressed, 1-2 for compressed
+
|0x00A || 1 byte  || Compression type:
 +
{| class="wikitable"
 +
! Value
 +
! Meaning
 +
|-
 +
|0 || Uncompressed
 +
|-
 +
|1 || Based on [[LZHUF]] ([[LHarc]]'s "lh1" method)
 +
|-
 +
|2 || Based on [[LHA]]'s "lh5" method
 +
|}
 
|-
 
|-
 
|0x00B || 1 byte  || Last cylinder imaged
 
|0x00B || 1 byte  || Last cylinder imaged
Line 89: Line 110:
 
|0x014 || 284 bytes || Always 0
 
|0x014 || 284 bytes || Always 0
 
|-
 
|-
|0x130 || 4 bytes || CRC-32 of file header
+
|0x130 || 4 bytes || CRC of file header
 
|-
 
|-
 
|0x134 || 200 bytes || File description: 5 lines each of 40 characters, [[CP437]] character set
 
|0x134 || 200 bytes || File description: 5 lines each of 40 characters, [[CP437]] character set
 
|-
 
|-
|0x1FC || 4 bytes || CRC-32 of description
+
|0x1FC || 4 bytes || CRC of description
 
|}
 
|}
  
Line 99: Line 120:
  
 
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.
 
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 ==
 
== Software ==
 +
 +
* [{{CdTextfilesURL|640swstudio/UTILITY/DKEXP101.ZIP}} Disk Express v1.01]
 +
* [{{CdTextfilesURL|nopv07/020A/DKEXP1.ZIP}} Disk Express v1.02]
 +
* {{DiscMasterLink|browse/14387/winos2_a.zip/winos2_a/OS2/UTILITY/DISK/DXP196B.ZIP|Disk Express v1.96 (beta)}}
 +
* {{DiscMasterLink|browse/21352/La_Coleccion_Walnut_Creek_Junio_1993.iso/dos/diskette/dxp200.zip|Disk eXPress v2.00}}
 +
* [{{CdTextfilesURL|pier01/017a/dxp203.zip}} Disk eXPress v2.03]
 +
* [{{CdTextfilesURL|pier02/002a/dxp210.zip}} Disk eXPress v2.10]
 +
* [{{CdTextfilesURL|pier02/026a/dxp21a.zip}} Disk eXPress v2.10a]
 +
* [{{CdTextfilesURL|nopv10/015a/dxp220.zip}} Disk eXPress v2.20]
 +
* [{{CdTextfilesURL|hobbesos2/ALL/DISKUTIL/DXP230.ZIP}} Disk eXPress v2.30]
 +
* [{{CdTextfilesURL|nopv11/016A/DXP231.ZIP}} Disk eXPress v2.31]
 +
* [{{CdTextfilesURL|nopv13/039A/DXP232.ZIP}} Disk eXPress v2.32]
 +
* [{{CdTextfilesURL|swextrav4-4/os2utilf/dxp233.zip}} Disk eXPress v2.33]
 
* [{{SACFTPURL|utildisk|dxp234.zip}} Disk eXPress v2.34]
 
* [{{SACFTPURL|utildisk|dxp234.zip}} Disk eXPress v2.34]
 +
* {{Deark}}
 +
 +
== 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
 +
* {{CdTextfilesURL|pier/pier03/035/vp162fix.zip}} → VP162FIX.EXE
 +
* http://phoenix.bnbbbs.net/files/os2swbbs/ndrivers/164adap2.exe
 +
 +
Self-extracting images
 +
* {{DexvertSamples|archive/diskExpressSFX}}
 +
 +
Standalone disk images
 +
* [https://archive.org/download/2015.02.old-dos.ru 2015.02.old-dos.ru] → 2015.02.maxxx.tar → maxxx/DOS/System/DRdos/Drdos50/4dxp/DRD50-*.DXP - Uncompressed, version 2.x
 +
* {{DexvertSamples|archive/diskExpress}}
 +
 +
[[Category:Executable envelopes]]

Latest revision as of 18:10, 8 January 2026

File Format
Name Disk Express
Ontology
Extension(s) .dxp, special
Released 1991

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

[edit] 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.

[edit] File structure and format details

[edit] 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.

[edit] 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) value 0xb9a00000 might appear or need to be used instead. The CRC of ASCII "123456789" would be 0x5ec78685.
  • Special versions licensed for IBM use the initialization value 0x31e, the reflection of which is 0x78c00000. The CRC of ASCII "123456789" would be 0xc770b388.

[edit] 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:
Value Meaning
0 160k
1 180k
2 320k
3 360k
4 720k
5 1.2M
6 1.4M
7 2.8M
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:
Value Meaning
0 Uncompressed
1 Based on LZHUF (LHarc's "lh1" method)
2 Based on LHA's "lh5" method
0x00B 1 byte Last cylinder imaged
0x00C 1 byte Last head imaged
0x00D 1 byte Always 0
0x00E 1 byte Bitwise flags:
Value Meaning
0x01 Non-DOS disk
0x02 Encrypted disk image
0x04 Contains bad sectors
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

[edit] 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).

[edit] Software

[edit] Sample files

Self-extracting images created by regular shareware and licensed versions

Self-extracting images created by special versions licensed for IBM

Self-extracting images

Standalone disk images

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox