.vol files (probably for "volume") are large container files for multiple files.
10 common bytes:
lang0 56 4F 4C 4E 00 01 00 00 05 03 0F 00 len: D484
shell0 56 4F 4C 4E 00 01 00 00 05 06 1E 00 len: 86B052
shell1 56 4F 4C 4E 00 01 00 00 0A 01 05 00 len: 10EE1
shlsound 56 4F 4C 4E 00 01 00 00 05 01 05 00 len: 206B68
simlang 56 4F 4C 4E 01 00 00 00 05 02 0A 00 len: A1F1
simalert 56 4F 4C 4E 01 00 00 00 05 07 23 00 len: B6B10
simpatch 56 4F 4C 4E 01 00 00 00 0A 29 CB 00 len: 11AF5
simsound 56 4F 4C 4E 01 00 00 00 05 03 0F 00 len: 22F692
simvoicg 56 4F 4C 4E 01 00 00 00 05 01 0A 00 len: 64DCAE
simvoice 56 4F 4C 4E 01 00 00 00 05 01 0A 00 len: 6B7567
simvoicf 56 4F 4C 4E 01 00 00 00 05 01 0A 00 len: 6ECD7F
simvol0 56 4F 4C 4E 01 00 00 00 05 27 C1 00 len: 1D63B29
zones 56 4F 4C 4E 01 01 00 00 05 03 0F 00 len: 208969
The first four bytes ("VOLN" in ASCII) indicate a ES volume file (magic bytes).
The 5th byte is apparently 0x01 if the file is used in the simulator and 0x00 if used in the shell.
The 6th byte is apparently 0x01 if the file is used in the shell and 0x00 if used in the simulator
Two bytes are ignored and always zero.
The 9th byte is some kind of counter (currently unknown)
The 10th byte is the directory count (how many directories are in the volume)
The 11th and 12th byte determine how many bytes the directory list has (little-endian). simvol0 and simpatch are the leaders in the directory count.
Then, with the 13th byte, the directory list follows. Each directory is terminated by a backslash (\, ASCII 0x5C) followed by a null-byte. The nullbyte of the last directory name is included in the length calculation for the 11th and 12th byte.