This is what I know about the empeg upgrade file format:

unsigned long length length of the next block
-none- content Any number of content blocks, see table below for more info.
unsigned long CRC32 CRC32 of the previous block, CRC32 initialized with 0, not with -1 (0xFFFFFFFF) as some might do it.

The content field contains blocks of the following format:

unsigned long blocktype Typ des Datenblocks
unsigned long blocklength Länge des Datenblocks (without the type and length fields)
-none- data the Data part (see table below for some notes)

Depending on the blocktype, the data field contains the following data:

CHUNK_UPGRADERVERSION an unsigned long (current value: 2)
CHUNK_INFO
CHUNK_WHAT
CHUNK_RELEASE
CHUNK_VERSION
text containing the named info which is displayed to the user just before the upgrade is applied. Look in readme.txt for an example.
CHUNK_FLASHLOADER
CHUNK_KERNEL
CHUNK_RAMDISK
CHUNK_RANDOM
an unsigned long containing the target address in the players flash memory followed by the content to be flashed
CHUNK_HWREV a text file, containing one number on each line. This upgrade can only be applied to the referenced hardware revisions.
CHUNK_PUMPHD[ABC] no data at all. (blocklength is 0)
CHUNK_PUMPHD[ABC][1..8] gzip'ed image of the named partition.