I could say a Master in Computer Science and two decades of development from designing low level languages and frameworks to high level games should be enough to give you an idea that I speak not as an inexperienced emulation user, but as a software engineer, but that shouldn’t be needed for someone that has a background in computer architecture.
Recall the Turing Machine (or more importantly for this conversation, the idea of the Universal Turing Machine). A UTM can emulate any other Turing Machine, regardless of the hosts simplicity or the guests complexity. Every single consumer “computer” (this includes consoles) in decades can be classified as a UTM, and therefor every computer can emulate every other computer regardless of complexity. The single most important caveat is the “infinite tape” which just translates to “enough space, in some fashion, be it classic memory, a HDD, punch cards, etc…” for it to store necessary data (so the space for the ROM and the memory chips of the console).
If it helps to understand, break the guest machine down in to its generic components. Just like how everything you see and do on a computer is represented as binary data in a very low level abstract fashion. The various components of a computer can like-wise be broken down into similar abstract details such as reading data (input devices, memory, HDD, etc…), writing data (memory, HDD, display, audio, etc…), and simple basic operands of that data (comparison, inequality, etc…). Everything a computer does can be broken down in such a fashion. This is called an abstract machine, and any abstract machine that is capable of all of the basic operations, can emulate any other abstract machine regardless of the complexity. It may be hard to grasp for your average user, but with your background it should be pretty clear.
If you have a background in computer architecture, you have likely done work in this area, so I am sure you know what I am talking about, so I think you might be stuck on the idea of usable emulation. Please understand that I am not talking about useable emulation (i.e. emulation that works at a speed thats close to, or exceeds the original). A host machine has to be much more capable than the guest machine to approach useable speeds. I expect that this is where the majority of the questions on forums like these come from, and so it might be the default frame of mind for your answers, but I don’t actually care about performance. I have tried to be clear about that. 1 FPS is acceptable for my testing purposes.