VO-EM programs are stored on "cartridges", in the form of specially formatted PNG image files.
Cartridges can store up to 6 banks of program data. Each bank is 4kb in size. These banks are read-only.
There is also a 1kb bank of save data.
Cartridge banks are numbered 0 to 5. Bank0 always exists in device memory at address 0x0000 0000, and spans to address 0x0000 3FFF.
The bank mapped to 0x0000 4000 can be switched at any time. Writing a value between 0 and 6 to anywhere from 0x0000 to 0x7FFFF (excluding 0x4000-0x4FFF) will switch the currently selected bank to the supplied value.
Writing a value of six will switch the bank to the save data bank, allow save data to be read.
Writing data from 0x4000 to 0x4FFF at any time will cause data to be written to the save data bank on the cartridge. This data persists even if the device is closed or the cartridge switched.
If you wish to read save data, you must switch the selectable bank to 6 via the method described above. Note that, with the save data bank selected, reading or writing between 0x5000 and 0x7FFF will cause an IME exception to be thrown.
The top left of the PNG contains metadata about the current cartridge, which is created at cartridge creation time.
The first 5 bytes will always read
56 4F 2D 45 4D ;VO-EM in ASCII
or the cartridge will not be loaded.
Following this is two halfwords, containing the ID for the cartridge type and hardware configuration respectively (currently, only one type of each exists, both identified as 0)
Next, the date of compilation is given in ASCII in the following format
Where \0 is the ASCII terminating byte.
Next, the name of the program and the name of the author are both given in ascii, each 15 characters and each followed by a terminating byte.
Finally, an unsigned 32 bit integer is included. This is address that the program will begin executing at.