An Intel 8080 emulator written in Python. It runs Altair BASIC and CP/M! It even passes 8080EXER!
Wordstar on CP/M on my 8080 emulator on Python on Windows:

Hunt the Wumpus on Altair 8K BASIC on my 8080 emulator on Python on Windows:

Passing 8080 instruction exerciser tests:

To run Altair BASIC, just run altair_basic.py:
python altair_basic.py
It will load 8K BASIC by default. Use the -4, -8, and -e options to
specify 4K, 8K, or Extended BASIC.
You can specify a program to load on start with -f:
python altair_basic.py -8 -f wumpus.bas
To run CP/M, first install PyGame:
poetry install
Or:
pip install -U pygame
Then, run cpm.py, specifying the disk images to load using the -da, -db,
-dc, ..., -dp options. You'll probably want to set -da to
cpm_2.2/cpm22py64k.bin unless you've created your own bootable disk images.
python cpm.py -da cpm_2.2/cpm22py64k.bin -db wordstar.bin
The image file must be raw images of single-sided single-density 8-inch floppy
disks with CP/M 2.2 directory data, such as an image created using
cpmtools' default format, ibm-3740.
To run 8080EX1 without CP/M, run 8080exer.py:
python 8080exer.py