Simple MMU for the Z80 (2015)
sites.google.com
sites.google.com
The trouble with all of them is that the MPU model is awkward when combining: (1) applications that access more than 64K of RAM, and (2) memory protection.
In the case of the 80286 and MS-DOS it was particularly bad because applications were not allowed to change the segment registers so you would have to make OS calls to switch segments. 8088 users were already used to running application that used more than 64k and they weren't going to go back. (An interesting possibility would be that the 286 supports 4 segments so you could have two data pages, a stack page and a separate code page that are all 64k.)
With CP/M on the other hand there was no expectation that applications need more than 64k so you could build a powerful multitasking OS that has a rich userspace. (In fact there was MP/M back in the day) The source code of CP/M is available now and if you put ZCPR3 on it feels like a mainframe.
The killer feature was the flat 32-bit addressing. Data structures could be more than 64 KB without special (complicated and slow) handling. Large programs didn't have to be unnaturally segmented. A pressing issue at the time, when a typical full-screen colour bitmap was larger than 64 KB, and GUIs were becoming prominent.
It was tragic though that no "Multitasking DOS" emerged in the 1980s. My 1987 AT clone was more powerful than the largest PDP-11 but the big PDP-11 could support 32+ terminals. It was annoying as hell that I couldn't download files from a BBS while doing something else -- I tried to make a TSR that did that but couldn't make it work.