PCD / PCM / PCS / PCQ
Status
| Field | Value |
|---|---|
| Extension(s) | .pcd, .pcm, .pcq, .pcs |
| Common ecosystem | Older Pfaff |
| Format family | Machine-specific files |
| Satin Studio status | Researching |
| Open / import | No |
| Export | No |
| Confidence | Medium-high for ecosystem role. |
What it is
PCD, PCM, PCQ, and PCS are older Pfaff formats, historically associated with older machine or hoop generations.
Satin Studio direction
VP3 and VIP are likely higher-priority Pfaff/Viking targets before these older files.
Versions and variants
These are related older Pfaff formats rather than one flat format. Their exact split by hoop, machine generation, or encoding needs verification.
File identification notes
Reported details:
.pcdmay use an unusual absolute-positioning scheme rather than normal relative stitch deltas..pcm,.pcq, and.pcsare reported as stitch-bearing Pfaff files, but exact differences are not verified in Satin Studio.
Observed structure notes
- Observed PCD/PCQ/PCS files start with version, hoop-size byte, little-endian color count, RGB thread entries, and a little-endian stitch count, followed by absolute stitch records.
- Observed PCD/PCQ/PCS point records include one byte, 24-bit little-endian X, one byte, 24-bit little-endian Y, and a control byte. Coordinates are signed 24-bit values scaled by
5.0 / 3.0in observed readers. - Observed PCM differs: it starts at offset 2, uses big-endian color indexes into a 16-entry fixed palette, big-endian stitch count, and 24-bit big-endian absolute coordinates.
- Observed control behavior:
0x00stitch absolute, bit0x01color change, and bit0x04move absolute.
Structure sketch
The older Pfaff formats share ideas but differ in byte order and palette handling:
struct PcLittleEndianFile<'a> {
version: u8,
hoop_size: u8, // observed 0 PCD, 1 PCQ/MAXI, 2 PCS 80x80, 3 PCS large
color_count: u16,
threads: &'a [PcRgbThread], // RGB plus one skipped byte
stitch_count: u16,
records: &'a [PcLeRecord],
}
struct PcRgbThread {
rgb: [u8; 3],
unknown: u8,
}
struct PcLeRecord {
c0: u8,
x_le24: [u8; 3], // signed 24-bit little-endian absolute X
c1: u8,
y_le24: [u8; 3], // signed 24-bit little-endian absolute Y
control: u8, // 0x00 stitch, bit 0x01 color, bit 0x04 move
}
struct PcmFile<'a> {
prefix: [u8; 2],
color_count: u16, // big-endian
palette_indexes: &'a [u16], // big-endian indexes into fixed 16-color table
stitch_count: u16,
records: &'a [PcmRecord],
}
struct PcmRecord {
x_be24: [u8; 3],
c0: u8,
y_be24: [u8; 3],
c1: u8,
control: u8,
}
What we still need
Known Pfaff files for each extension, hoop/machine mapping, and command encoding notes.