refactor all vm
change to using abstract vm