However, I'd LOVE to see someone try and emulate an NES on a CGA 8088 computer, the graphics sprites are could very well be possible being as the NES uses only 4 "colors" for each sprite out of the total pallet. The problem lies more in graphics speed and the ability to process multiple streams of data at once that create the "virtual machine" so to speak. A NES Emulator does more than just run code, it converts the I/O to work with standard PC Peripherals, changes the video to look as accurate as possible, controls all NES-type memory operations, plays back sound, and all the other things. That's why an 8088 based emulator is at least next to impossible in practice.
I know this thread is
ancient, but I'm necroposting because it's a funny idea and I've done it.
Not using CGA, that would be slower... but 256x256x8 VGA mode. I ported my Windows NES emulator to DOS and ran it on my IBM XT just to see exactly how slow it would be. The answer is "brutally". It takes almost a minute to render a full frame. It's a slow emulator compared to something like NESticle. It needs a Pentium 2 to be playable, but even with extreme optimization there's no way you'll get anything near playable on an 8086/8088. Even with rendering disabled totally, it takes about 3-5 seconds to emulate one frame's worth of game code. Here's proof it works though.
:twisted:
If you want to actually
watch it in "action" if you can call it that, here is a video of it rendering the SMB1 title screen:
So, now we have our (admittedly obvious) answer. The biggest problem is indeed the graphics rendering. It's quite CPU intensive. While drawing the background it has to do calculations for H/V scrolling, and calculate the background nametable to take the tile values from based on that, and then determine the actual pixel inside that tile to draw... for each of the 256x240 pixels on the screen. Each background and sprite pixel also has to pull data from multiple places in video memory, do some bit-shuffling, combine a few bits from each source into one value, then prioritize the background sprite, background field, and foreground sprite, check for transparencies, and draw the correct pixel, as well as increment scroll registers, address registers, etc. in the NES PPU. I'm utterly amazed that NESticle can even do what it does on a 486.