The PRO disk format is used by the excellent APE peripheral emulator created by Steven Tucker. The ProSystem component of that package can create PRO images from original, copy-protected Atari disks which can then be loaded on actual Atari hardware via APE.
Since the PRO format has never been officially documented, the information presented here is based on reverse engineering done by both myself and others of various files created using the APE ProSystem software. Therefore, this information has a very good chance of being completely wrong and is at best an educated guess.
The file header is 16 bytes long:
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
A: Number of sectors contained in the file data including phantoms (high byte)
B: Number of sectors contained in the file data including phantoms (low byte)
C: Magic of 'P'
D: Version number ('2' or '3')
E: Phantom sector emulation mode
Value | Type | Notes |
---|---|---|
0 | Simple Emulation | Unknown - always seems to return ACTUAL sector. |
1 | Mindscape Special | Unknown - always seems to return ACTUAL sector. |
2 | Global Flip/Flop | Read of any sector causes phantom sectors to cycle between returning ACTUAL and PHANTOM1 when finally read. |
3 | Global Flop/Flip | Read of any sector causes phantom sectors to cycle between returning PHANTOM1 and ACTUAL when finally read. |
4 | Heuristic | Unknown - seems to behave like Global Flip/Flop. |
5 | Sticky | Unknown - always seems to return ACTUAL sector. |
6 | Reverse Sticky | Returns PHANTOM1 sector on first read and then every subsequent read returns ACTUAL sector. |
7 | Shimmering | Unknown - always seems to return ACTUAL sector. |
8 | Reverse Shimmer | Unknown - always seems to return ACTUAL sector. |
9 | Rolling Thunder | Successive sector reads appear to repeatedly cycle between PHANTOM1,PHANTOM2,PHANTOM3,PHANTOM4,PHANTOM5,ACTUAL. If one of the PHANTOMx is not defined (0), it is skipped. The last read in the cycle for each sector appears to be retained so that the next read of that sector (even after a different sector has been read) can pick up where it left off in the cycle. |
The data following the file header is sector data. There will be 720 sectors + an optional number of phantom sectors.
Each 128 byte sector is prefixed with a 12 byte sector header:
C | D | E | F | M | G | K | H | I | J | N | L |
C: Command Status (1771 controller status)
D: Hardware Status (1771 controller status)
E: Timeout (Low Byte) (1771 controller status)
F: Timeout (High Byte) (1771 controller status)
G: Total number of phantom sectors associated with this sector (values can be 0-5 since ProSys makes 5 read passes per sector)
H: Index of phantom sector (PHANTOM1) starting with sector 721 (1-indexed)
I: Index of phantom sector (PHANTOM2) starting with sector 721 (1-indexed)
J: Index of phantom sector (PHANTOM3) starting with sector 721 (1-indexed)
K: Index of phantom sector (PHANTOM4) starting with sector 721 (1-indexed)
L: Index of phantom sector (PHANTOM5) starting with sector 721 (1-indexed)
M: Unknown (always appears to be 0)
N: Unknown
Value of N | Notes |
---|---|
F0 (240) | Normal sectors sometimes have this value |
E4 (228) | Bad sectors sometimes have this value |
EC (236) | Bad or CRC error sectors sometimes have this value |
F8 (248) | Normal sectors sometimes have this value |