This post will educate you in the hex values and image format for ICONDATA.VMS. This has taken me over 2 days to figure out so please be respectful.
I decided to write this guide because all the information I was able to find was either incorrect or incomplete. Please enjoy!
Every example is taken directly from my hand written icon
Mono Chrome Icon
The monochrome icon is a 128 byte 1bpp bitmap starting at the offset defined at 0x10. Each row consists of 4 pairs of 4bit hex values that translate into the corresponding bitmap
For example in the image below you will see row one is equal to 02 00 00 40, translated into binary that reads
0000 0010 0000 0000 0000 0000 0100 0000
Where 1 is a black pixel and 0 is a white pixel
The color icon begins 16 bits after the offset defined at 0x14 as the first 16 bits are the color pallet.
The color icon is 512 bytes in order. Each nibble of the hex byte refers to the corresponding color pallet.
For example the first row of this image is
44 44 44 23 33 33 33 33 33 33 33 33 32 44 44 44
4 = color #4
2 = color #2, and so on...
This is the color pallet from the above sample. In the chart above the colors are numbered from 0 to F this is in relation the order the colors appear and it is also the number used for the icon data.
The pallet code will start at the offest defined at value 0x14 and will contain 16 16-bit little endian integers
The color value of this image is split into 2 hex bytes which contain the Red, Green, Blue, and, Alpha values for the color. The values are in the wrong order however and actually appear as GBAR thus the layout is GB AR
*(The A value is for the transparency, 0 being Transparent and F being opaque)
As you can see from the above example you are only able to create hex colors with with a double value therefore a color like #55CCAA is possible but a color like #59C6AB is not