With ".PAL" or ".COL" file extension.
This files contain external colors palette of a VGA picture (CPS/CMP/VCN fomats)
this are 768 octets files containing 256 colors of a picture.

a colors use 3 bytes
1 bytes is one of the 3 components of a color with intensity value between 0-$3f (0-63)

here the structure of file:
bytes 0: Red intensity of color 0
bytes 1: Green intensity of color 0
bytes 2: Blue intensity of color 0
bytes 3: Red intensity of color 1
bytes 4: Green intensity of color 1
bytes 5: Blue intensity of color 1
bytes 6: Red intensity of color 2
....
bytes 765: Red intensity of color 255
bytes 766: Green intensity of color 255
bytes 767: Blue intensity of color 255


Variation in the PC version of EOB 1:
The .PAL and .COL files used in the PC version of EOB 1 are a little different in the way that all bytes in the files need to be bitshifted 2 bits to the left.

An example:
The 4. byte in the BRICK.PAL file, which holds the value of the red channel for the second color in the palette, reads EA in hexadecimal or 11101010 in binary. Bitshifted it becomes 10101000 or A8 in hex which is the correct value.

On the hair-splitting side:
The above shifting will yield ok results but they're not really mathematically correct. Since f.e. full white in 6bitRGB 00111111 would give 11111100 which is not full white anymore in 8bitRGB.

Instead the following formula should be used to give correct color intensities: 8bitRGB = (6bitRGB&0x3f)*255/63.

Java Code to read .PAL files (EOB 1 PC-Version):
import java.io.*;
 
public class PAL {
 
    private byte[] m_rawData;
    public byte[][] m_palette;
 
    public PAL(String filename) throws IOException
    {
        File f=new File(filename);
        long fileSize=f.length();
        m_rawData=new byte[(int)fileSize];
 
        FileInputStream fis=new FileInputStream(filename);
        int tr=fis.read(m_rawData);
        fis.close();
 
        m_palette=new byte[(int)(fileSize)/3][3];
        for (int i=0;i<m_palette.length;i++)
        {
            m_palette[i][0] = (byte)Math.round((((float)(m_rawData[(i*3)]&0x3F))*255/63));
            m_palette[i][1] = (byte)Math.round((((float)(m_rawData[1+(i*3)]&0x3F))*255/63));
            m_palette[i][2] = (byte)Math.round((((float)(m_rawData[2+(i*3)]&0x3F))*255/63));
        }
    }
}