Yeah, this was originally two threads and it apparently got merged. I've condensed my previous posts into one.double posting is annoying..., just edit the post next time (both of you)
Toasty: good explaination
Yes. Or more accurately, the CPU is the main bottleneck preventing it from running at full speed.
As with just about any emulator, the host platform has a different instruction set than the emulated platform. (They speak different languages.) For every instruction in the original code (from the game), the host CPU (in your PC) must execute many instructions to translate it to its own instruction set and then execute it.
Let's say a Gamecube game has these instructions for the CPU:
1. Read a number from memory
2. Add 12 to that number
3. Write the result back to memory
A Gamecube (which reads Gamecube-ese) does the following:
1. Read a number from memory
2. Add 12 to that number
3. Write the result back to memory
A PC (which does not know Gamecube-ese and must use an emulator) does the following:
1. Read a piece of code from the game
2. Look up the meaning of that piece of code
3. Figure out what the PC-ese equivalent of that code is
4. Execute the PC-ese code (read a number from memory)
5. Read a piece of code from the game
6. Look up the meaning of that piece of code
7. Figure out what the PC-ese equivalent of that code is
8. Execute the PC-ese code (add 12 to that number)
9. Read a piece of code from the game
10. Look up the meaning of that piece of code
11. Figure out what the PC-ese equivalent of that code is
12. Execute the PC-ese code (write the result back to memory)
That's a very simplified explanation, but as you can see, it's no surprise that the host platform usually needs to be at least an order of magnitude faster than the emulated platform to achieve decent speeds.