Quote:
Well, in text mode standard VGA hardware has the ability to store a total of 8 sets of fonts in the 64 KB memory chunk at 0xA0000. Each font using 0x2000 bytes of memory.
That's not completely correct. The VGA has 4 banks of RAM, each 64k in size. The host-side frontend can map it at some address, either 0xA0000, 0xB0000 or 0xB8000, and it can map offsets directly onto the 64k such that each address maps to four locations, or it can shift those addresses such that you can access 64k of memory interleaved over all four banks without overlap (but you can't get access to the remaining 192k that way)
Text mode uses banks 0 through 2. 0 contains the character data, 1 contains the attribute data, and 2 contains the font data, each font being 256x32 bytes (0x2000). In normal text mode, accesses are interleaved over plane 0 and 1, while plane 2 and 3 are inaccessible. To access the font, you'd normally turn interleaving off (odd/even mode), change the decoded range to 64k, to end up in planar mode where you can select plane 2 and write the font as expected. It worked three years ago, and it does still work in qemu.
qemu did have problems with interleaved modes working different, and based on the description you appear to be using odd/even mode to write the font.