In my case I decided the hardware environment was going to be hosted inside Unreal Engine:
https://i.imgur.com/5MDfwKg.png
It's crazy easy to get CP/M running on just about anything with Z80 CPU emulation, and some glue logic to handle reading bytes from a keyboard I/O port, and sending them to a terminal, and reading/writing sectors from a block device. I had to write a VT100 emulator for UE4 but that doesn't take too much work.
WordStar:
https://i.imgur.com/rIY1he8.png
A telnet client (complete with ZMODEM) for accessing BBS's on the Internet:
https://i.imgur.com/aSc9VGL.png
Zork I and Rogue: