The 8-bit Guy on Youtube has a project designing his "dream 8-bit computer", the "Commander X16":
Part 1.
Part 2.
It has come a long way, and uses some 8-bit components that are still available such as a 6502 CPU, but they are using an FPGA for video. (See
this recent video here by another contributor for a rundown).
I have always thought that a much more efficient (but cheating) way would be the other way around: use a FPGA chip with attached ARM microcontroller. Do the CPU and some hardware signals in FPGA, but emulate a lot of the I/O, video and sound chip capabilities in software on the microcontroller.
Then you could use software to map input from USB mouse, gamepads and keyboard into registers in your I/O chip on the FPGA. Alternatively, use emulation for everything.
Recently, the
Raspberry Pi Pico microcontroller board was released. It costs ~€4 and with Raspberry Pi Foundation's own microcontroller: The RP2040 has two ARM Cortex M0+ cores at up to 133 MHz, two fast programmable I/O ("PIO") modules and a USB-OTG module (capable of being host or device).
The PIO modules together are capable of producing a video signal, and there
is an upcoming board for it with VGA, but I think people have prototyped DVI.
For a virtual 8/16-bit computer, one core could emulate the CPU in step with shuffling video and modulating audio, all in a tight loop. The other core could run non-timing critical things: control, the USB host stack all virtual I/O ... and ... maybe scanning a keyboard matrix.
I think it would be possible to emulate an existing 8-bit computer on the RP2040, but a novel CPU and I/O design might be more fitting for software emulation, be more capable, and be less tricky to accomplish.
To emulate a C64 specifically one would have to emulate also non-intended op codes and cycle-per-cycle timing with the VIC-II chip ... which can be very involved, but for which there is source for.
Edit: Holy Cr*p ... Someone has already written a
BBC Micro emulator for the chip.
I also found
a 6502 CPU emulator in ARM Thumb2 assembler, made to run on STM32F4 (Cortex-M4, not Cortex-M0+) that might be what has been used here. The speed is around 1/10 per MHz, i.e. an emulated 6502 would run at ~13 MHz on a 133 MHz ARM Cortex.