VOGONS


Reply 20 of 21, by superfury

User metadata
Rank l33t++
Rank
l33t++

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

Reply 21 of 21, by superfury

User metadata
Rank l33t++
Rank
l33t++

I've just implemented the 2-byte character codes into the emulation(completing the text mode emulation). The only thing that's not implemented now is the ET3000 Zoom functionality, register at 3B8h, 3BF implementation other than the Tseng extensions enable/disable support), 3C0 index 17h, 1M linear memory(ET3000 only, which is kind of unknown what that is), 3D4 index 24h(except the clocks), 3D8/3D9(besides throwing a NMI when enabled, on 3D8), 3DEh, 3CE index D/E(?), RAS/CAS configuration(not needed?), 3D4 index 34(see index 24 for ET3000), index 36 gen-lock and interlacing, 3D8(just NMI, when enabled).

So now, the required functionality(other than special compatibility modes) should all be emulated?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io