I've been chipping away at memory-mapped IO and have something working at last! My design has parallel address decoders, so works entirely using IO ports by default, and by sending the high 8-bits of the memory-mapped window to a normally unused port (Base+0Fh) sector transfers can be made via that window too. So memory-mapped IO could potentially be switched on or off on-the-fly for example with a configuration utility, or at least the window set in autoexec.bat to suit the system.
This is very early testing but performance wise (tested with my simple file-system disk tester), it's giving 255KB/s reads using a CF card, 300KB/s reads using a Seagate ST1 microdrive, both measured using a stock 5160 with DOS 6.22. Extended pattern tests have shown no issues and Trixters legendary 8088 Corruption runs through OK.
(On the 8088-corruption thing, I've long had my eye on running the full 30 fps video without a pause. With 300KB/s available, I was hopeful... but it's still not enough.)
There's some work to do in the BIOS to fully support microdrives; as-is the disk only boots on the second attempt, I suspect the drive isn't spinning up & calibrating quickly enough when the read comes (per the CF spec it can't spin until an actual read is received since it's only allowed to draw c.70mA during device ID). And random IO performance is awful, I've not looked into that yet.
Also I've not cracked memory-mapped writes yet.
I've started a
technical reference page for the card, with some BIOS code examples, for anyone interested in the details of what's going on.