I did have an idea on extending the Lo-tech 2MB EMS board to 4MB. It simply adds an extra page register and ROM chip. Then the ROM chip with the extra page register enable the A19 address line instead of forcing it to unmap (like on the 2MB EMS boards, where chips 4-7 aren't connected from what I can see on the board schematics. Thus setting the page registers to 80h-FFh unmaps the respective window (really, doesn't drive any memory chip's chip select, thus floating on reads and nothing on writes, thus 'unmapped').
Using a 4th page register with 4MB window (low 4 bits) enable bits and a ROM to patch the upper 4 chips to not respond (based on the respective input RAM[0-3]OE signal from the window decoding, the 4 bits from the added paging register, ISA chip enable from before the memory window decoding chip, CS and OE from the same signal to read the ROM). Then the ROM simply lowers CS for ISA chip enable low, which RAM bit lowered+register bit number to:
- RAM lowered to select the bit in the register.
- Bit in register cleared: low output on enable, ram bit enable, A19 low only. Otherwise high output (disable response).
- Otherwise, ram enable passthrough (4MB window).
Unmapping is done by clearing the bit in the added register and top bit in map register set (like original 2MB board).
And setting the bit for 4MB mode (or legacy clearing the bit with window index below 128) works too that way.
Mapping the register is like the normal registers, but chip enable for address base+4 only instead. That can be done like the existing registers, adding 2 IO map chips as on the Lo-tech board.
Edit: If the ROM isn't fast enough for the RAM chips, the effect could be done using 5 XOR, AND and OR gates (and 30 traces/wires to wire it properly).
It's basically:
(((REG 0-3 OE XORed) AND 4MB register low 4 bits) OR'ed together the 4 resulting lines into one line) XORed to create an disable signal for the upper chips (but not the lower chips), so AND the result with bit 7 from the window register to apply it to the upper 4 chips only, then ORing it onto the RAM-SELECT pin to disable the chip select (reads and writes) and effectively pull up the bus on reads.