Interesting, but I'm not sure how new the idea is or how practical. You can't base your OS on CP/M because the NMI vector at 0066H is in the middle of memory defined for use by the OS and user programs. Or else you need more sophisticated circuitry to such that the NMI is able to save the PC in the user memory stack and then switch to kernel memory to execute the code at 0066H. Then there's the problem of the IORQ signal also being active during interrupt acknowledge and how that might impact handling of it for trapping user program I/O.
I also believe this has been done before, but I can't point to a specific example off hand. It's probably forgotten to time because the effort was not practical or marketable. The basic idea of using NMI to "virtualize" I/O is not new. Heath used it on their H89 computer to "simulate" certain hardware that only existed on the H8 computers (access to certain I/O ports caused an NMI, the ROM code then analyzed and performed the equivalent operation). This feature, of course, had to be abandoned for CP/M since 0066H is in an area reserved by CP/M.