Sega Digitizer System III "DIGITIZER 3 Ver2" format spec Rich Whitehouse 2019-04-19 All atomic data is big-endian. struct SDigHeader { uint32_t mVer; //always 0x100 in known data uint16_t mImageCountHi; //always 0 in known data uint16_t mImageCount; uint32_t mDataSize; uint32_t mResv; //always 0 in known data char mId[16]; //"DIGITIZER 3 Ver2", not terminated uint8_t mPad[224]; }; //for each image: struct SDigImageHeader { uint16_t mDataOfsHi; //always 0 in known data uint16_t mDataOfs; uint16_t mOffsetX; uint16_t mOffsetY; uint16_t mWidth; uint16_t mHeight; uint16_t mColorIndex; //i think this is the palette entry to use for the index display, if applicable uint16_t mImageIndex; char mName[16]; //not terminated, trailed by spaces }; struct SPaletteEntry { uint16_t mId; //each pixel entry will match one of these uint16_t mColor; //in Game Gear palette format, G4R4n4B4 }; //there are at least 16 palette entries, but there may be more, which is why it's important to use mDataOfs to get to the start of pixel data. //pixel data is uint16_t * mWidth * mHeight, where each uint16_t matches one mId in the palette entries. //it's possible that the id bits have more significance than merely matching palette entries, perhaps with some special bit(s) to act as a mask. //the next SDigImageHeader will immediately follow the end of pixel data if more images are present.