Sorry for the late reply.
Chinese fonts seem to be doing their own processing.
I have not analyzed yet.
Perhaps it is a structure that uses the characteristics of Chinese fonts, but I can not say because I do not understand Chinese.
In FE8J (FE8CN) font search is performed with 0x08003F28 function.
For Japanese, double-byte SJIS is used and a hashed list of SJIS is searched.
Example of searching Japanese SJIS character code in FE
byte sjis1 = 0xE4;
byte sjis2 = 0x96;
dword topaddress = 57994c;
fontlist* p = topaddress + (sjis1 << 2) - 0x100;
if ( p->check == sjis2 )
//p->width Character width.
//p->bitmap Font image. 4bit color bitmap
//Go to the next list.
p = p->next;
fontlist* next; //Next font pointer. 0x00000000 in case of termination.
BYTE SJIS2; //With the 紋 SJIS (0xE496), 0x96 in the second byte enters ..
//If it does not match, it will be a heart as an unknown character without characters.
BYTE WIDTH; //Character width (When drawing the next character, this size is like padding like css to empty this size).
BYTE bitmap; //Uncompressed 4 bit bitmap.
This is based on the character code property that when SJIS hashes with 1 byte, the amount of data to be searched can be reduced.
In the case of SJIS, the first byte represents a block in the code table, and the next byte can determine the character.
SJIS code table
However, this function has been greatly rewritten by FE8CN.
I do not understand why I rewrote it.
Perhaps, They wanted to implement a reasonable search by using the characteristics of the Chinese character code,
Or do they need things like unicode join letters?
I do not know the character of the Chinese character code.