Dr. Halo PIC
Line 17: | Line 17: | ||
Some editions of Dr. Halo support several dozen video cards, each with a handful of graphics modes, so supporting the entire format would be quite difficult. But it is realistic to support files that use the standard CGA/EGA/VGA modes. | Some editions of Dr. Halo support several dozen video cards, each with a handful of graphics modes, so supporting the entire format would be quite difficult. But it is realistic to support files that use the standard CGA/EGA/VGA modes. | ||
+ | |||
+ | == Format details == | ||
+ | ''[Some of this information is based on reverse engineering, and may be incorrect. Written for the fileformats.archiveteam.org wiki.]'' | ||
+ | |||
+ | A PIC file consists of a header segment, followed by the compressed image data. Byte order is little-endian. | ||
+ | |||
+ | === Header structure === | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Offset !! Length !! Description | ||
+ | |- | ||
+ | |0 || 2 || "<code>AH</code>" signature | ||
+ | |- | ||
+ | |2 || 2 || Software version code? | ||
+ | |- | ||
+ | |4 || 2 || Unused? | ||
+ | |- | ||
+ | |6 || 1 || File type? Always 0x02. | ||
+ | |- | ||
+ | |7 || 1 | ||
+ | |Board ID? Known values: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Value !! Description !! Implied header size | ||
+ | |- | ||
+ | |0x01 || CGA || 16 | ||
+ | |- | ||
+ | |0x07 || Hercules || 10 | ||
+ | |- | ||
+ | |0x15 || EGA (4-plane modes) || 12 | ||
+ | |- | ||
+ | |0x3c || VGA (1-plane modes) || 16 | ||
+ | |- | ||
+ | |0x47 || VGA (4-plane modes) || 12 | ||
+ | |} | ||
+ | |||
+ | |- | ||
+ | |8 || 2 || Unknown | ||
+ | |- | ||
+ | |10 || 2 || Graphics mode. This field is not always present. | ||
+ | |} | ||
+ | |||
+ | For 4-color CGA-like modes: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Offset !! Length !! Description | ||
+ | |- | ||
+ | |12 || 1 | ||
+ | |0x10 bit: One of the palette selector bits. | ||
+ | |||
+ | Low 4 bits: Color of palette entry 0, from the standard 16-color PC/CGA palette. | ||
+ | |- | ||
+ | |13 || 1 || Unknown | ||
+ | |- | ||
+ | |14 || 1 || 0x01 bit: One of the palette selector bits. | ||
+ | |- | ||
+ | |15 || 1 || Unknown | ||
+ | |} | ||
+ | |||
+ | === Compression scheme === | ||
+ | Compression is byte-oriented. The "next multiple of 512 bytes" instructions refer to the absolute file position. | ||
+ | |||
+ | To decompress, read a byte (N), follow the instructions below, repeat. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Code byte (N) !! Instructions | ||
+ | |- | ||
+ | |N = 0 || End of plane. If there are more planes, seek to the next multiple of 512 bytes. | ||
+ | |- | ||
+ | |1 ≤ N ≤ 127 || Emit the next N bytes literally. | ||
+ | |- | ||
+ | |N = 128 || End of block: Seek to the next multiple of 512 bytes. | ||
+ | |- | ||
+ | |N ≥ 129 || Emit the next byte N−128 times. | ||
+ | |} | ||
== Identification == | == Identification == |
Revision as of 18:37, 5 November 2022
Dr. Halo (including Dr. Halo Plus and Dr. Genius) is a line of raster image editing software for DOS, developed by Media Cybernetics.
Its main native file format is .PIC. Sometimes, a PIC file has a companion .PAL file. This article is about PIC format, and the software in general. There are separate articles for some formats:
PIC format does not seem to be as well known as CUT. A reference to "Dr. Halo format" most likely means CUT, not PIC.
Contents |
Discussion
PIC is highly "device dependent". A PIC file contains identifiers for the relevant graphics hardware and mode, and a compressed copy of raw video memory.
Some editions of Dr. Halo support several dozen video cards, each with a handful of graphics modes, so supporting the entire format would be quite difficult. But it is realistic to support files that use the standard CGA/EGA/VGA modes.
Format details
[Some of this information is based on reverse engineering, and may be incorrect. Written for the fileformats.archiveteam.org wiki.]
A PIC file consists of a header segment, followed by the compressed image data. Byte order is little-endian.
Header structure
Offset | Length | Description | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2 | "AH " signature
| ||||||||||||||||||
2 | 2 | Software version code? | ||||||||||||||||||
4 | 2 | Unused? | ||||||||||||||||||
6 | 1 | File type? Always 0x02. | ||||||||||||||||||
7 | 1 | Board ID? Known values:
| ||||||||||||||||||
8 | 2 | Unknown | ||||||||||||||||||
10 | 2 | Graphics mode. This field is not always present. |
For 4-color CGA-like modes:
Offset | Length | Description |
---|---|---|
12 | 1 | 0x10 bit: One of the palette selector bits.
Low 4 bits: Color of palette entry 0, from the standard 16-color PC/CGA palette. |
13 | 1 | Unknown |
14 | 1 | 0x01 bit: One of the palette selector bits. |
15 | 1 | Unknown |
Compression scheme
Compression is byte-oriented. The "next multiple of 512 bytes" instructions refer to the absolute file position.
To decompress, read a byte (N), follow the instructions below, repeat.
Code byte (N) | Instructions |
---|---|
N = 0 | End of plane. If there are more planes, seek to the next multiple of 512 bytes. |
1 ≤ N ≤ 127 | Emit the next N bytes literally. |
N = 128 | End of block: Seek to the next multiple of 512 bytes. |
N ≥ 129 | Emit the next byte N−128 times. |
Identification
PIC files start with ASCII "AH
", and the byte at offset 6 is 0x02
.
Software
- Dr. Halo
- Dr Halo II (at WinWorld) - Includes v2.03, and a manual
- Dr. Halo III (v3.00/1988-02-02)
- Dr. Halo III (at WinWorld) - Includes Dr. Halo III (v3.00/1989-02-06) & Dr. Genius (v3.00)
- Dr. Halo Plus (v3.00-German)
- Dr. Genius (v3.00)
- Various versions at old-dos.ru - Includes Dr. Halo III (v3.01) and Dr. Halo Plus (v3.00).
- Possibly relevant: drhalo.unp
Sample files
- 1169.ZIP
- http://cd.textfiles.com/bthevhell/200/150/ → screen*.pic (NSFW)