Note that this VM can depend on behaviour that is explicitly left undefined by the C11 standard. For example, this DCPU-16 program can cause a shift by an amount greater than the width of uint16_t:
SET A, 0x1 SHL A, 0x100
SET A, 0x1 SHL A, 0x100
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html...
char A = 1; A = ((char) ((A << 32) & 0xFFFF)); System.out.println(Integer.toHexString(A));
actually outputs 1.