The virtual machine EmbedVM
2011-05-01: the virtual machine (EmbedVM) explained 1/2
2011-05-01: the virtual machine (EmbedVM) explained 2/2
EmbedVm is a fully functional virtual machine that runs inside the ATMEL MCU. It can easily be ported to other CPU architectures as it is entirely written in C.
The VM itself takes ~3KB of program memory and consosts of ~300 lines of code.
There are two ways to write programs to run inside the virtual machine.
There are two compilers that target EmbedVM: There is a compiler for a C-like high level language and there is a compiler that can transform python code to VM bytecode. The compiler for the C-like language is part of the EmbedVM sources. The python compiler can be found here.
Code for the EduBuzzer
The directory firmware/vmcode contains some code (firmware.vm) that is saved in the devices' flash memory as a standard library (e.g. the animation played while searching for a base station). The functions defined there can be used in custom code as well.
If a game wants to do something more sophisticated than turning a LED on or setting the buzzer to a fixed frequency, it can push additional code into the ATMega's RAM using the W command described in the communication description, and starting with the V command with an interrupt to the address of the main function.
Until further documentation is published, see the simon.py example program, which implements Simon's Game (the device beeps out a sequence of blinks, and the user has to enter it afterwards) in about 256 byte (of 512 currently allocated) of RAM.