Reply 20 of 21, by superfury
A bit related, I just added the 16-bit font support(CRTC register 36h, bit 3 of the ET4000 docs), which makes all fonts in VRAM be precalculated as double-width fonts(so in addition to plane 2 data, plane 3 is taken as well for the 8th-16th pixel of the character). Clearing said bit makes it VGA-compatible(it makes it ignore the plane 3 data)).
I've also added a bit of an extension to the text modes. Now, when the TS register 6(Sequencer register 6 in FreeVGA's words) bits 1-2 are set to non-zero(for the values in the ET4000 Graphics controller 1990 documentation, combined values with the TS mode register(as bit 0, simply OR'ed together) being 2,3,4,5,6,7 resulting in 10,11,12,7(according to WhatVGA),6(according to WhatVGA),16 dots/character), now the text modes take those amount of dot clocks to render the full character.
Of course, selecting the extended(10,11,12,7,7,16 dots/character) character widths while not setting the double-width fonts(CRTC 36h, bit 3 being cleared) will widen the characters, but render background pixels instead(as plane 3 is disabled for this).
I've also made it so that the extensions for the width are disabled when the double character width isn't set(once again according to WhatVGA).
So that adds another bit of extended modes support for the ET4000 chips(and ET3000 chips(which don't have the double character settings).
That just leaves the 2-byte character codes themselves for the full text-mode emulation(except the split window functionality of the ET3000).
Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io