If you have some low-level C knowledge, but have never seen bare-metal programming done in Rust, it’s really quite a difference in approach; despite your statements compiling down to banging physical memory pointers and MMIO registers together, it feels quite safe—with a proper library helping you out, it becomes quite hard to put the system into a wedged state, for no runtime cost. You can’t even put bitflag registers into invalid states!
While the term was popularized by PICO-8, I think you could make a case for the CHIP-8 virtual machine circa 1977. I've built some tools and games for CHIP-8, so I'm admittedly a bit biased. My user community is even running a CHIP-8 themed game jam this month- I can plug the details if anyone is interested.
Secondly, with regards to RodgerTheGreat, it's interesting to see one of your messages here. I'm not certain I'd mark CHIP-8 as the first, but that's due primarily to my not being aware of any older virtual machines used for games, discounting any games on, say, the DEUCE. I've participated in this game jam, as well as the last, so I expect my submission has been properly submitted; here's to at least one other game I submit.