The above specs are slightly inaccurate/incomplete. Here's an example:
Header (in hex)
--------------------
87 00 - font resource type (2 bytes, not one)
00 00 - unused (just 2 unused bytes, always zero)
80 00 - number of chars (little endian - in this case 128 characters)
10 00 - height of font (technically, just the offset of how far do go down to the next 'line' before drawing - in this case 16 pixels)
Character address map
------------------------------
Absolute address of each character in the file. This section will be 2 bytes per character, so in this case we have 128 * 2 bytes of data. Note that in a patch resource these addresses will be wrong (off by 2) which is accountable for by the font resource type at the beginning of the file (87 00). In a resource archive, these addresses will be spot-on.
In our example, since we have 128 characters the hex address for the first character will be:
06 01 (262 in decimal) - off by two, so the actual location in the patch file is 264.
Character data
-------------------
1 byte for the width of the character
1 bytes for the height of the character
X bytes for binary data for the file. Computed by multiplying the height by the width divided by 8 (and rounded up).
Example:
0B - width of font - (11 pixels)
10 - height of font - (16 pixels)
16 * (11/8, round up) = 16 * 2 = 32 bytes of data, each hex value stores 8 pixels of binary font data.