I was thinking about how we'd emulate the external devices on the Arduino boards; from what I can see so far they're largely pin based although I need to dig a little deeper and see how that looks in assembly (i.e. is it bit or byte access).
However, the idea I had was that during emulation you could connect emulated devices to the emulator over Ethernet. This would mean you could connect devices as it was running to a base address (i.e. TCP port 6000) and even fire up another emulator with a different base address (TCP port 7000) and connect - for example a serial device to each and let both emulators talk to each other over Ethernet.
I'm not sure how that'll work out bandwidth wise yet with things like Ethernet devices but they're a way off - it's not like I've seen anyone connect an HDD to one yet. But even then the I/O would be Ethernet based (and on the loopback device - inside the stack - so should all be done in memory assuming that's how the Operating System works).