If that emulator was written to run on a classic Arduino based on an AVR microcontroller, many tradeoffs were probably made for smaller code size rather than faster speed. If you incorporate one written for the Cortex or ARM, you can likely make it several times faster.
Well the main compromise is that the current implementation is written in C/C++. It does have the advantage of portability to other platforms supported by the Arduino IDE which is why I could use it on the SAMD21. A native assembly code version would certainly see some performance improvements. But for the intended "parlor trick" of a tiny but usable Apple I, I think I'll stick with the current implementation as it is quite usable, even for Microchess. For anything serious I'd prefer building some real hardware for a proper "replica". Also, my experience so far is that except for maybe the AVR platforms, the Arduino universe is in such a constant state of "upgrades" it's hard to know what boards will be available for how long. So portability over performance has some advantages.
Even so, the slightly slow but still quite usable implementation on the SAMD21 provides a VERY affordable entry into the Apple 1 universe to play around with some classic programs, fiddle with WozMon, etc. If I were to add anything at this point it would be an assembler (maybe Krusader) so if someone really wanted to they could do some 6502 assembly on the board. The Neo Trinket (which may not be available anymore) is particularly nice because it's just a single dongle you can pop in your laptop and go. I plan to work out a 3d printed case for it so it looks like a USB pen drive.
BTW, the best implementation I've seen so far is apple1js (
https://www.scullinsteel.com/apple1/). I took some inspiration for loading programs from that implementation, although my method is different.