The Computer Abstractions book/course for Scheme had some kind of VM written in Java where you had to write an assembler in Scheme as the final 'biggie' project.