TL;DR: I want to do this but entirely in software on my Linux laptop.
Long version:
In Ben Eater's "Hello World on a 6502", Ben shows how to build a computer from scratch using individual components on breadboards. Now I want to do the same thing, but more involved. I already have enough piles of tech equipment, so I don't want to add yet another item to the stockpile.
My end goal is to make a relatively simple computer with a retro CPU, RAM, hard-disk-like storage, a keyboard, a "display" (more likely a serial console of some sort), and maybe a user-tinkerable expansion bus of sorts. I intend to use it as a general purpose machine like one who built a computer from individual components would have done back in the 1970's, such as making a simple calculator in assembler code, getting a BASIC interpreter going, etc. (At some point I want to code an OS for it that includes an assembler for the processor's machine code, such that the assembler can assemble its own code and the OS itself, so that it functions as a self-hosted development environment.) I'm not interested in starting from an established piece of hardware - I want to reinvent the wheel here.
So, my question is, does anyone know of a piece of software that fulfills all of the following requirements:
- Can emulate some kind of retro processor along with its supporting chips (the 6502 ecosystem would be ideal since Ben Eater's videos are a great tutorial for it, but I would also be happy to consider other CPUs like the Z80 and whatnot). Cycle-accurate emulation would be ideal, though I'm not sure if non-cycle-accurate emulation would even be possible for this kind of software.
- Allows the chips to be assembled by the user in a breadboard-like UI (for instance, I place a chip on the screen, and then draw wires to connect it to other components and chips). Doesn't need to be perfect - I don't need to be able to make really silly mistakes like connecting a clock signal to a data line and have the resulting mess be emulated realistically or anything like that. It's fine for a mistake like that to be impossible to make, result in an error, or cause undefined behavior specific to the emulator.
- Supports enough peripheral components (for instance, the UART and stuff like that) to allow a system like the one described above to be built.
- Permits interactive debugging (i.e., single-stepping of the system's clock(s), the ability to inspect RAM/ROM contents, CPU registers, electrical states of wires, etc.).
- Runs fast enough on a modern machine (mobile 11th gen i5) to run the emulated system at a comfortable speed (doesn't have to be full speed, just enough to be usable).
- Is free and open-source, preferably under an OSI-approved license.
- Runs on a free and open source operating system (preferably modern Linux, but if it only runs on some weird OS like Haiku I can use a VM to deal with that). Windows-only software is a dealbreaker since I don't use Windows, though it's still worth mentioning for the sake of those who do use Windows.
This is probably a lot to ask, especially for free, so even if something you know of doesn't quite match all of that, it's still worth mentioning.
Note that I don't think this is an opinion-based question - I'm not looking for the best "make-your-own-computer emulator", I'm just wondering if such a thing exists and if so, what it's called.