Ah very cool! Rust seems like an awesome language, especially for something like this. I'l going to take a dive into your project at some point in the week
That's a very fuzzy, if not non-existent, distinction. The only real difference is the designers' original intention. Of course the Java VM was originally only destined to exist only in software, but hardware versions do exists [1]. And of course x86 was always destined for hardware, but there's more software implementations of that than can be counted. There's also a third type in the LLVM sense, where the VM is just an intermediate step in compiling from a high level language down to machine code. And that's where the JVM (mostly) falls today.
The VM described in the OP could easily fit in any of the three.
Indeed, the core concepts are essentially exactly the same. This is a lot simpler of course because it doesn't need to do anything with drawing or sound.
I really like this project https://github.com/juchi/gameboy.js/ . I'd like to do something similar myself but more in the coding style I've used on the 16-bit VM.
Yes, there are some similarities to how you would write an emulator for a real piece of hardware. It would be possible to write an emulator for whatever hardware you can find enough information about.