And again. We had the news about the same emulator one month ago, but without X and Wayland. But of course I like it :)
Believe me or not. The hard part was not to write the emulator. The CPU needs less than 1000 lines of code.
No, the hard part was to compile all those programs with the toolchain which is still in early development. Just to mention one example, shared Libraries are supported since one year.
The other part is the optimization of the emulator. The rules of normal programming don't apply here. In fact the difficult question is how to keep the javascript engine thinking that all variables are integers and not doubles.
RISC (Reduced Instruction Set Computing) is not a new idea at all, and it already has changed everything. CISC has been dying for decades now, because it's hard to optimize very complex architectures.
This is very impressive. The code is very readable, even the asm.js based code (which is probably written by hand). You can find the CPU code in js/worker/cpu.
On Chrome I get about 30 MIPS while running scummvm. On Firefox I get about 6 MIPS on the standard core and about 40 MIPS on the asm.js core.
I must say that I am impressed by Chrome performance on the standard core. However, sometime Chrome drops to about 6 MIPS for no discernible reason.
Yes, the asm.js code is written by hand. Took around one day.
What happened with Firefox I don't know. Firefox 22 was fast (above 30 MIPS) and then it dropped. No chance to find the problem.
Chrome sometimes thinks that integers are no longer appropriate for some values and deoptimizes the code. But it seems that the asm.js core is stable and fast for Chrome as well.
The other part is the optimization of the emulator. The rules of normal programming don't apply here. In fact the difficult question is how to keep the javascript engine thinking that all variables are integers and not doubles.