Ok, to summarize:
I've been thinking more about it, and after taking a look at the readouts shown by my rgb2hdmi running the demo, I think SoftCat is probably correct that this would work. Unfortunately 5154 monitors are obscenely expensive so its unlikely I'll ever be able to test for myself.
To handle the various display modes used by 8088MPH and Area 5150, and to properly emulate the overscan, I adopted an aperture into a fixed display field for CGA. This technique worked very well, and has handled everything I've thrown at it basically.
I tried to expand on that concept to implement EGA by creating two display fields for EGA's 14Mhz and 16Mhz clocks, to support the various modes supported by each.
My naive assumption was that we would be in 15Khz scanline frequency when using the 14Mhz clock, and we'd be in 21Khz scanline frequency when using the 16Mhz clock.
As SoftCat has demonstrated I think these assumptions are bad - you can construct a mode in the 16Mhz clock that creates a 15Khz scanline frequency - so the requisite display field isn't necessarily tied to the clock. It's tied to the scanline frequency.
Now, the simplest thing to do is simply go back to a single display field, set to the largest extents of both clocks. We'll waste some memory, but it will essentially be fine. But what I think I ultimately should do is determine the display field extents based on a vertical and horizontal PLL that syncs to the vsync and hsync signals within a reasonable range, comparable to what a real monitor might tolerate. The advantage of this method is that it should handle VGA much better than trying to handle separate display fields for 350, 400 and 480 lines, as well as if I ever bother to do SVGA where there would be basically infinite display fields possible. Plus we can simulate loss of vhold, display bounce when changing video modes, and other fun stuff. There are a few points during effect setup in Area 5150 where we have very short vsync periods, which if you look closely at a hardware capture, you can see the monitor's vertical PLL reject and they show up as black bars on screen.
I think this is the method that Tom Harte's CLK emulator uses. The thought of doing a PLL scared me a while ago, but after making one to read floppy flux images they're really not so bad, but there is an art to them I have yet to master.
There's another advantage here in that it will eliminate a bit of a hack I implemented for Hercules - the MDA monitor lacked a horizontal PLL which is why you have those warnings about potentially damaging a MDA monitor with bad display modes. Some CGA emulators for Hercules took advantage of this by pushing the display timings just slightly out of spec. This meant that I had to slightly expand the display field for Hercules, in a way that is not really derived from its clock timings.
In any case, my main focus for 0.3.0 is getting the new disk support in a stable state. Stable, not complete. I'll probably be fixing floppy and disk format issues for the lifetime of MartyPC going forward.
I'll look at the PLL implementation for 0.3.1, which is a good excuse to bundle it with the reintroduction of VGA.
MartyPC: A cycle-accurate IBM PC/XT emulator | https://github.com/dbalsom/martypc