Apart from the header section, all the data in the PPU file is separated into data blocks, which permit easily adding additional data blocks, without compromising backward compatibility. This is similar to both Electronic Arts IFF chunk format and Microsoft’s RIFF chunk format.
Each ’chunk’ (tppuentry) has the following format, and can be nested:
|
Each main section chunk must end with an end chunk. Nested chunks are used for record, class or object fields.
To read an entry you can simply call ppufile.readentry:byte, it returns the tppuentry.nr field, which holds the type of the entry. A common way how this works is (example is for the symbols):
The possible entry types are found in ppu.pas, but a short description of the most common ones are shown in table (A.5).
|
Then you can parse each entry type yourself. ppufile.readentry will take care of skipping unread bytes in the entry and reads the next entry correctly! A special function is skipuntilentry(untilb:byte):boolean; which will read the ppufile until it finds entry untilb in the main entries.
Parsing an entry can be done with ppufile.getxxx functions. The available functions are:
To check if you’re at the end of an entry you can use the following function:
notes:
A complete list of entries and what their fields contain can be found in ppudump.pp.